Compare commits
1521 Commits
v0.9.1
...
v3.0.0-alp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f03b5f2c5 | ||
|
|
f8285ed503 | ||
|
|
eea6cfdbca | ||
|
|
9c8abfb62e | ||
|
|
5df9830c3a | ||
|
|
f7d8d8696d | ||
|
|
11f1fd76c6 | ||
|
|
9693b1b157 | ||
|
|
89cd52759b | ||
|
|
4586e84dd0 | ||
|
|
d3baa2a1c6 | ||
|
|
73cf045284 | ||
|
|
8d10f8b815 | ||
|
|
6df369da8e | ||
|
|
3aa32ad70f | ||
|
|
006afb638d | ||
|
|
55c319b1d5 | ||
|
|
44d9975416 | ||
|
|
df6978ef68 | ||
|
|
23ddbdcc7e | ||
|
|
bcf4581a8e | ||
|
|
66031363b9 | ||
|
|
e91bb8e723 | ||
|
|
705eda1697 | ||
|
|
508d175778 | ||
|
|
1f05808018 | ||
|
|
8c2a755f84 | ||
|
|
9807e21dee | ||
|
|
780874ece9 | ||
|
|
27286a5bff | ||
|
|
784bcf8ecc | ||
|
|
a96ac10e3b | ||
|
|
ab4235c7f7 | ||
|
|
d561580d68 | ||
|
|
f7414e9bb2 | ||
|
|
7e06ccc8ac | ||
|
|
7a86b71342 | ||
|
|
42f23da363 | ||
|
|
67414a5ed5 | ||
|
|
bee4d1cf4f | ||
|
|
0cc29e605d | ||
|
|
1570810f99 | ||
|
|
3bb374c84a | ||
|
|
3f3c789e21 | ||
|
|
d16bd386ca | ||
|
|
64daa46756 | ||
|
|
3efe428f1c | ||
|
|
354f19edce | ||
|
|
15d7f0e22a | ||
|
|
3b568cd74b | ||
|
|
b35ccc2f28 | ||
|
|
da610e562f | ||
|
|
982b974e63 | ||
|
|
125cb224b5 | ||
|
|
129f1fe6a7 | ||
|
|
8e646eb03f | ||
|
|
bd6b723465 | ||
|
|
885345f4cf | ||
|
|
c08f257bf1 | ||
|
|
7c717359fc | ||
|
|
cd96b95651 | ||
|
|
234299fe2a | ||
|
|
ec36521ab8 | ||
|
|
819f06015e | ||
|
|
3e41dcaf6e | ||
|
|
181ea648fa | ||
|
|
e4a21839d4 | ||
|
|
5140b57efb | ||
|
|
aa3101ef9a | ||
|
|
67c63892d3 | ||
|
|
a5ac23ef14 | ||
|
|
d9a008e881 | ||
|
|
eaa0e3f8bd | ||
|
|
19579a2e26 | ||
|
|
ed65d00484 | ||
|
|
94d47ee149 | ||
|
|
21621c712b | ||
|
|
b30a515622 | ||
|
|
c9711ccc5d | ||
|
|
ae955a4d2b | ||
|
|
92b5af5819 | ||
|
|
8c6cbb92cd | ||
|
|
38bb1e6433 | ||
|
|
dd48ba1947 | ||
|
|
2c6256dcd8 | ||
|
|
f8df3753c8 | ||
|
|
d29af71218 | ||
|
|
b4235af5e6 | ||
|
|
b961f49da8 | ||
|
|
ab5c0a4a69 | ||
|
|
04418bfb08 | ||
|
|
5acdc8778b | ||
|
|
7a6ea9652d | ||
|
|
9939f14323 | ||
|
|
52cdcc65fa | ||
|
|
4da2d2a670 | ||
|
|
74f42c603e | ||
|
|
ed37e5d261 | ||
|
|
51436e8105 | ||
|
|
dccb79faa4 | ||
|
|
d1aa55cd73 | ||
|
|
e962e81a71 | ||
|
|
7281f6e365 | ||
|
|
d1bed601b7 | ||
|
|
4592049a7e | ||
|
|
3c6a219c60 | ||
|
|
7514d04351 | ||
|
|
2142c62ece | ||
|
|
e141f39953 | ||
|
|
57d4127345 | ||
|
|
cd828fc59b | ||
|
|
ed4db42a58 | ||
|
|
a08c9f9189 | ||
|
|
97511f9bdf | ||
|
|
89f6e3c431 | ||
|
|
281933a998 | ||
|
|
83ba46b986 | ||
|
|
61427892ca | ||
|
|
e0b8c05e51 | ||
|
|
71a0bcaf6f | ||
|
|
96065514df | ||
|
|
5f57cc6310 | ||
|
|
b0d6935071 | ||
|
|
b1115fed54 | ||
|
|
015a0a7f29 | ||
|
|
3d9cb2075e | ||
|
|
6d491fdde7 | ||
|
|
7d9736eaba | ||
|
|
046e8b1ae1 | ||
|
|
d3186896d0 | ||
|
|
fc116b5907 | ||
|
|
bd288e57f0 | ||
|
|
004d5b09f9 | ||
|
|
a27e2624b2 | ||
|
|
689476de6f | ||
|
|
695fe50d2c | ||
|
|
a2d2754339 | ||
|
|
a16e3d6a06 | ||
|
|
7e7270c185 | ||
|
|
fd480306b7 | ||
|
|
cefbb7051d | ||
|
|
6363daf7e8 | ||
|
|
8b36ff6a16 | ||
|
|
c4d6ad2b99 | ||
|
|
123625419a | ||
|
|
258e39a762 | ||
|
|
53d4bf6597 | ||
|
|
ccb14a54df | ||
|
|
8b6b98a56a | ||
|
|
cc2c86856e | ||
|
|
092767b4cb | ||
|
|
318c41c648 | ||
|
|
19f55589b3 | ||
|
|
39859c174a | ||
|
|
05a35b6d01 | ||
|
|
b4c44a1b8b | ||
|
|
6b33084285 | ||
|
|
b8a027f6af | ||
|
|
c6c02f8c75 | ||
|
|
7b1728a404 | ||
|
|
d145224b70 | ||
|
|
a91eaae4bb | ||
|
|
3ea7f9a45f | ||
|
|
32273eb60e | ||
|
|
a545557e93 | ||
|
|
c3352fde4a | ||
|
|
0e934d414f | ||
|
|
d968e9e2c4 | ||
|
|
01676cd57d | ||
|
|
c66f568ecb | ||
|
|
0592078931 | ||
|
|
66b2175584 | ||
|
|
84733c100f | ||
|
|
ccba5e9a4c | ||
|
|
965fff2f6c | ||
|
|
c9d1892d66 | ||
|
|
b37f05f11d | ||
|
|
cb18eeae4f | ||
|
|
a24ab094aa | ||
|
|
d5adcbd67e | ||
|
|
4b3ec7fee5 | ||
|
|
415e31b1f8 | ||
|
|
8a9aaa81c0 | ||
|
|
af94c80597 | ||
|
|
cfb169be0f | ||
|
|
4937537386 | ||
|
|
06f093d189 | ||
|
|
838e4d9d34 | ||
|
|
db8b7bc0b6 | ||
|
|
ad5e1809d6 | ||
|
|
ffb4b84b1e | ||
|
|
ba07885c7d | ||
|
|
e5e1f1713b | ||
|
|
3fd14aab0f | ||
|
|
092318b288 | ||
|
|
2b86a09e50 | ||
|
|
9a9a31ce5a | ||
|
|
7c36cf0d67 | ||
|
|
954b34cf74 | ||
|
|
cf4266b7d1 | ||
|
|
64b8a730fc | ||
|
|
12686134bb | ||
|
|
276a69fd38 | ||
|
|
b408cff07b | ||
|
|
adc44d1fcf | ||
|
|
ec201b4de6 | ||
|
|
d9955b5477 | ||
|
|
90bbffaad6 | ||
|
|
8d537b28a4 | ||
|
|
43e3f6e025 | ||
|
|
324027b42a | ||
|
|
1eb8e58e0e | ||
|
|
6ce4f79a30 | ||
|
|
9953980405 | ||
|
|
76657a5d67 | ||
|
|
403a95190e | ||
|
|
3939b6c9e5 | ||
|
|
25089880b6 | ||
|
|
12b3776993 | ||
|
|
b709b378f5 | ||
|
|
09606fd4f4 | ||
|
|
9584416fe9 | ||
|
|
6628ae7ab5 | ||
|
|
84b810e68a | ||
|
|
9a6adc62b6 | ||
|
|
dcbd1e9db8 | ||
|
|
d352c6c63f | ||
|
|
f320d5eeb4 | ||
|
|
4f5443d857 | ||
|
|
2ae80dd15e | ||
|
|
cbcd86efb4 | ||
|
|
c602a4c9e7 | ||
|
|
9d82eb8820 | ||
|
|
e14927afe5 | ||
|
|
e1f1eb3e79 | ||
|
|
658360864a | ||
|
|
0b135a863e | ||
|
|
ce5af8a004 | ||
|
|
b494d47eeb | ||
|
|
d0e97cf076 | ||
|
|
724e372246 | ||
|
|
4b8193041b | ||
|
|
5b60be0c06 | ||
|
|
d1a02d7388 | ||
|
|
275dca11e1 | ||
|
|
edf2ff343d | ||
|
|
2315ef01e1 | ||
|
|
8a80aad67b | ||
|
|
82a71ebf64 | ||
|
|
e0d3223968 | ||
|
|
3c157a221a | ||
|
|
7bb7619b8f | ||
|
|
5fadb77707 | ||
|
|
d24904c650 | ||
|
|
ab4b9a0e2e | ||
|
|
5ae7863d8f | ||
|
|
e03672b70b | ||
|
|
ea47691300 | ||
|
|
3052e5fb22 | ||
|
|
753281effe | ||
|
|
c56c03065b | ||
|
|
84b29fcf08 | ||
|
|
6a6d7ed4de | ||
|
|
e38f284b0b | ||
|
|
b77c0ea7bb | ||
|
|
50884dfd7e | ||
|
|
de867e7a65 | ||
|
|
246a680ee1 | ||
|
|
813b2888aa | ||
|
|
fd2eeea4dd | ||
|
|
0c9e504d1a | ||
|
|
1b1a784640 | ||
|
|
e00e41b24b | ||
|
|
ca5fd82d95 | ||
|
|
4cbbb2f370 | ||
|
|
037095f851 | ||
|
|
f56b9760ad | ||
|
|
66e0d4a017 | ||
|
|
9b118a2dfb | ||
|
|
86d92e96d2 | ||
|
|
adf7f3adb3 | ||
|
|
5cc8405d4f | ||
|
|
710f1fc3f5 | ||
|
|
93865177b2 | ||
|
|
31c2bd48a0 | ||
|
|
bc2b44c51e | ||
|
|
6a2bcd529a | ||
|
|
6732d2bdcd | ||
|
|
b2d54e192b | ||
|
|
ba6811bd91 | ||
|
|
cb98ecc096 | ||
|
|
2cef0a4c41 | ||
|
|
8fe0f13b49 | ||
|
|
7caad09ca0 | ||
|
|
38c15bfe2a | ||
|
|
136de84cc5 | ||
|
|
48459b50ac | ||
|
|
a2512cf2a0 | ||
|
|
aa49098d39 | ||
|
|
2a69f4e51a | ||
|
|
f983fa3860 | ||
|
|
1ffd4d7c5f | ||
|
|
691bc97007 | ||
|
|
d52f426226 | ||
|
|
73b7165093 | ||
|
|
0f33cddda3 | ||
|
|
ceed91c1b6 | ||
|
|
0426281ef7 | ||
|
|
765c4d2b5d | ||
|
|
a5e162d475 | ||
|
|
6a0d539b61 | ||
|
|
db5d2cc9fc | ||
|
|
7ef3364bc6 | ||
|
|
a5c419f269 | ||
|
|
3d53d96d80 | ||
|
|
6e35e10a72 | ||
|
|
7f4f7380ac | ||
|
|
34db438bfc | ||
|
|
4c0733ca32 | ||
|
|
0355dc68db | ||
|
|
112cee789e | ||
|
|
121dc3c058 | ||
|
|
9c5eec1ca5 | ||
|
|
e8389bcbd9 | ||
|
|
3d04b17f41 | ||
|
|
1c90c8d7e8 | ||
|
|
4b4c48b85e | ||
|
|
bbed58d6a2 | ||
|
|
8e04e428ce | ||
|
|
2bff3be13c | ||
|
|
31a58ed1bd | ||
|
|
101d4fbfed | ||
|
|
18522d7c07 | ||
|
|
e66dedb31e | ||
|
|
54d679d468 | ||
|
|
8970816537 | ||
|
|
ce10331ece | ||
|
|
c2b5447c8e | ||
|
|
469661e009 | ||
|
|
1deb708347 | ||
|
|
0e65bcc43e | ||
|
|
5edf12d5e4 | ||
|
|
339aefbca0 | ||
|
|
db3c0c3aa2 | ||
|
|
c5fe66f4f4 | ||
|
|
67e9b261bd | ||
|
|
676ef54736 | ||
|
|
2e8fc0bbef | ||
|
|
82b3c9b998 | ||
|
|
412262a1df | ||
|
|
d2e8c1e8f7 | ||
|
|
3b262f6a97 | ||
|
|
d7eb678c0d | ||
|
|
e7ce8de7f2 | ||
|
|
5cb1ffa091 | ||
|
|
f7db273b4f | ||
|
|
1133c78c22 | ||
|
|
b06141d516 | ||
|
|
a1afee3632 | ||
|
|
e10c19312f | ||
|
|
1a876de084 | ||
|
|
b29819281b | ||
|
|
5d2dd946ab | ||
|
|
cc4d3be36e | ||
|
|
4ca3219bbd | ||
|
|
0426893682 | ||
|
|
51a9efb7ba | ||
|
|
04757b4f05 | ||
|
|
93a10be4a3 | ||
|
|
6665e78816 | ||
|
|
ed72f3f269 | ||
|
|
79551d951a | ||
|
|
a4a9175701 | ||
|
|
167e8d286c | ||
|
|
fc7d68024f | ||
|
|
afdaef6069 | ||
|
|
2a8cab87e2 | ||
|
|
2a5687bdea | ||
|
|
f52f717134 | ||
|
|
8980154cf9 | ||
|
|
6be7cb55bc | ||
|
|
a59d4f0ecf | ||
|
|
3486b80f46 | ||
|
|
cef86b9a67 | ||
|
|
8e7ef1e650 | ||
|
|
833d1567d4 | ||
|
|
d49c8a45b4 | ||
|
|
34a17478f3 | ||
|
|
408ef654ba | ||
|
|
31c842127c | ||
|
|
af2163f524 | ||
|
|
c3c1c27590 | ||
|
|
b519394cf2 | ||
|
|
7db467630d | ||
|
|
7269e749d8 | ||
|
|
6e065ae92e | ||
|
|
108824cfdc | ||
|
|
95800498b4 | ||
|
|
a5fa03ca54 | ||
|
|
8322550085 | ||
|
|
f77780784a | ||
|
|
41b47cdff6 | ||
|
|
a6d5214b20 | ||
|
|
2cc2e49b26 | ||
|
|
407e14a03d | ||
|
|
3425ffc8ec | ||
|
|
7b50db165f | ||
|
|
901baebde8 | ||
|
|
f11d07736e | ||
|
|
b35787a6c6 | ||
|
|
86c5e32641 | ||
|
|
7c969ff5cd | ||
|
|
ae45c8798f | ||
|
|
2c1bd67041 | ||
|
|
13a9ee5ccc | ||
|
|
d716bbc933 | ||
|
|
9a5cdbc7c5 | ||
|
|
611aebff3d | ||
|
|
657278c293 | ||
|
|
ac4ca9a56b | ||
|
|
9b5ec45794 | ||
|
|
c418ad8c51 | ||
|
|
bb303474bf | ||
|
|
e8b953fe39 | ||
|
|
27501d4f5b | ||
|
|
feda3cda20 | ||
|
|
dfd888205a | ||
|
|
08ea2b81fc | ||
|
|
a3a67faaef | ||
|
|
2520b5427b | ||
|
|
8f72619ac1 | ||
|
|
713b898d09 | ||
|
|
a9f20f2457 | ||
|
|
b822ce8650 | ||
|
|
282eeb6e5c | ||
|
|
13f3019439 | ||
|
|
09bc423cd7 | ||
|
|
f03fc6802a | ||
|
|
6ea350a14a | ||
|
|
42a1657fe7 | ||
|
|
b6a5000c2b | ||
|
|
c24589aa1b | ||
|
|
56cfff6576 | ||
|
|
3b5700c476 | ||
|
|
3119cc5345 | ||
|
|
9f177dd035 | ||
|
|
7e97cd226e | ||
|
|
5b6b41e8b3 | ||
|
|
87ab57ca44 | ||
|
|
8211fc2f31 | ||
|
|
1bd8393dea | ||
|
|
56b7d66b02 | ||
|
|
413d9667f7 | ||
|
|
3088b5058c | ||
|
|
f1892abcf4 | ||
|
|
141b56dd4d | ||
|
|
41870b4407 | ||
|
|
641f5427d3 | ||
|
|
d3adceee65 | ||
|
|
b0ab22f4cd | ||
|
|
23034e6e4f | ||
|
|
41cbe2bcb2 | ||
|
|
3203b9e8ab | ||
|
|
00298d0eeb | ||
|
|
5397baabee | ||
|
|
7192e86a17 | ||
|
|
83d76354b1 | ||
|
|
2ab518f937 | ||
|
|
056a80a17e | ||
|
|
ac9e7b4cbb | ||
|
|
8d82958c06 | ||
|
|
706a0f5d1b | ||
|
|
8595a71f94 | ||
|
|
bee30981fa | ||
|
|
572e37880c | ||
|
|
101b59ffb5 | ||
|
|
84d8ad9c84 | ||
|
|
a45af62398 | ||
|
|
221e604d3c | ||
|
|
99539fbccf | ||
|
|
b2f6949b41 | ||
|
|
98f7925a36 | ||
|
|
2b2a80421f | ||
|
|
1dea458ff5 | ||
|
|
c8e49dbe3b | ||
|
|
bc0571b342 | ||
|
|
91bc27337b | ||
|
|
d9ab130259 | ||
|
|
01e738309a | ||
|
|
347e98e73f | ||
|
|
da6722ea24 | ||
|
|
980a9076a3 | ||
|
|
46a909ca5b | ||
|
|
3eaf602858 | ||
|
|
3bc9e07c74 | ||
|
|
95f619cc2c | ||
|
|
47758e0a6e | ||
|
|
8d9e6212b0 | ||
|
|
977fabf49e | ||
|
|
737d873c1d | ||
|
|
6076a5931f | ||
|
|
83ef0b2305 | ||
|
|
018448b296 | ||
|
|
fa18d30da1 | ||
|
|
2834b14e23 | ||
|
|
de73f13855 | ||
|
|
75bf2a80ea | ||
|
|
1770824ad0 | ||
|
|
4a0387e4d5 | ||
|
|
e903afcb12 | ||
|
|
03aecfa796 | ||
|
|
6ea99e39c6 | ||
|
|
b605d1ed7e | ||
|
|
5b9f0c09ac | ||
|
|
ba4e7fb0de | ||
|
|
2a51dbd40d | ||
|
|
bd001b6691 | ||
|
|
057e47949c | ||
|
|
2ebf84f075 | ||
|
|
2e1f650cfa | ||
|
|
78e6e0d6d7 | ||
|
|
88f3d2cc43 | ||
|
|
19b43a2463 | ||
|
|
8e815e2353 | ||
|
|
ef1bd347ff | ||
|
|
b0960f3fb9 | ||
|
|
baa4763a24 | ||
|
|
eb9f10f978 | ||
|
|
b7228a36b6 | ||
|
|
10a49e439c | ||
|
|
717ef38c0c | ||
|
|
e0fb5d927f | ||
|
|
6088e96a8c | ||
|
|
348cb06b9e | ||
|
|
ae81be2361 | ||
|
|
8f9955423f | ||
|
|
9ff7f392e4 | ||
|
|
ddcc4935df | ||
|
|
9e59cf75f0 | ||
|
|
f428a2ea08 | ||
|
|
7e1d29be17 | ||
|
|
45d43c7cc3 | ||
|
|
c07385b22f | ||
|
|
859eccb1be | ||
|
|
dce43c0682 | ||
|
|
bcc13acf85 | ||
|
|
e180d37343 | ||
|
|
28311db37d | ||
|
|
f08a660e3f | ||
|
|
374a5e8e7b | ||
|
|
6a8077a883 | ||
|
|
bcf79c476d | ||
|
|
67e97a13b3 | ||
|
|
aa7fb6532f | ||
|
|
64bc6abd14 | ||
|
|
0b43e46eeb | ||
|
|
177d28b42e | ||
|
|
57e2b168ab | ||
|
|
e863ed36f0 | ||
|
|
d47f0b6a06 | ||
|
|
b5d10ddf93 | ||
|
|
4b99b4f16d | ||
|
|
40afacb2b5 | ||
|
|
66394b92d9 | ||
|
|
288669d91c | ||
|
|
f6bc52bb70 | ||
|
|
2345b590b2 | ||
|
|
0857e1ff45 | ||
|
|
681561ab91 | ||
|
|
308be5e337 | ||
|
|
3a718b9fc2 | ||
|
|
a4ab72c31d | ||
|
|
e916a0f697 | ||
|
|
f2e857990a | ||
|
|
4995d19d3e | ||
|
|
0dfba81fb3 | ||
|
|
184c7c6c35 | ||
|
|
7cfb655596 | ||
|
|
395e4c26a1 | ||
|
|
31876459e2 | ||
|
|
7376f536fd | ||
|
|
d42a41e134 | ||
|
|
992e0b92ee | ||
|
|
1df0b7dce0 | ||
|
|
d4e3bb0327 | ||
|
|
dc389e2d3a | ||
|
|
f5cf290c93 | ||
|
|
5efab2bbe5 | ||
|
|
bad85b70ba | ||
|
|
50d286cdde | ||
|
|
b1b40c48d2 | ||
|
|
f215b8118b | ||
|
|
46e9b7f4b9 | ||
|
|
e202f6275d | ||
|
|
4a11c5f5cb | ||
|
|
e844ffa387 | ||
|
|
41c8479fcf | ||
|
|
c44a79b27c | ||
|
|
e5a2c327f7 | ||
|
|
1d0a282c4b | ||
|
|
994e9a4a5d | ||
|
|
074086d31a | ||
|
|
c84d567d76 | ||
|
|
fa5797df50 | ||
|
|
c570cf21a3 | ||
|
|
82857dce93 | ||
|
|
9bb8e995aa | ||
|
|
5b66056cf2 | ||
|
|
d6ed202bd9 | ||
|
|
fb8f4cc4c2 | ||
|
|
045e973597 | ||
|
|
c62e90f50b | ||
|
|
e1c98921d5 | ||
|
|
85a1275ec8 | ||
|
|
90fa4ad3f4 | ||
|
|
f1f15be353 | ||
|
|
dbd2a5c8b8 | ||
|
|
565fff53cc | ||
|
|
c054682511 | ||
|
|
3fcdc62736 | ||
|
|
231a4d7227 | ||
|
|
f7ad05ec86 | ||
|
|
ab69b258ca | ||
|
|
cc55c21303 | ||
|
|
3f20290ee8 | ||
|
|
7baf7cbe21 | ||
|
|
eca7cf1a01 | ||
|
|
3010f54b03 | ||
|
|
9ff7160640 | ||
|
|
e1d596365d | ||
|
|
6210288085 | ||
|
|
11742db503 | ||
|
|
b4195b15c6 | ||
|
|
519840761c | ||
|
|
4bd174b96f | ||
|
|
57fbb59889 | ||
|
|
64839bd61b | ||
|
|
e81d50162f | ||
|
|
2442571e2f | ||
|
|
da7aaf3ec4 | ||
|
|
59b8bcf817 | ||
|
|
4d6a4471b2 | ||
|
|
9cde5adfd4 | ||
|
|
7b03059819 | ||
|
|
8dea48ed5b | ||
|
|
397a5301fb | ||
|
|
17847ae415 | ||
|
|
ebb033ce1a | ||
|
|
5d7e0bc1e5 | ||
|
|
f80ff856ba | ||
|
|
0582e05edc | ||
|
|
54dbf115ba | ||
|
|
506ae57aa3 | ||
|
|
429d30a390 | ||
|
|
a3bb5d1363 | ||
|
|
b29de5c8fd | ||
|
|
cf7f4a6409 | ||
|
|
a5b33bbffc | ||
|
|
97f8c120aa | ||
|
|
ec0746fc8f | ||
|
|
7c88cb4392 | ||
|
|
c30555c699 | ||
|
|
ae413e13be | ||
|
|
dd623dc3a0 | ||
|
|
04710d8fc0 | ||
|
|
23bcf6fb86 | ||
|
|
2c3a8f9d42 | ||
|
|
e4f7f32f91 | ||
|
|
552527c085 | ||
|
|
5d73dcaf89 | ||
|
|
5e8b26893e | ||
|
|
93aae05e63 | ||
|
|
a91a0d3bef | ||
|
|
3f96ce3665 | ||
|
|
15bd1383be | ||
|
|
17e81b24b9 | ||
|
|
a9481cc941 | ||
|
|
5c51e485f6 | ||
|
|
b00be1baf5 | ||
|
|
8153e1b109 | ||
|
|
25f9a8dadb | ||
|
|
eb0c87d77a | ||
|
|
d0e0bc4ff3 | ||
|
|
0feccf9b4a | ||
|
|
836bb348fb | ||
|
|
b6ee1100ef | ||
|
|
fab8391daf | ||
|
|
368fe92a10 | ||
|
|
21df66d622 | ||
|
|
d7e6bae469 | ||
|
|
ba99fd5ba1 | ||
|
|
88a29f5928 | ||
|
|
32a1b6e6e2 | ||
|
|
8b93b579d3 | ||
|
|
b804e96f4a | ||
|
|
d53ce9750b | ||
|
|
644c0981db | ||
|
|
cda92ac5ab | ||
|
|
a038b282ec | ||
|
|
1e6c7dd6ea | ||
|
|
6f006fbf40 | ||
|
|
442305c62f | ||
|
|
00cf9c25bb | ||
|
|
5b52447408 | ||
|
|
4e2853bb79 | ||
|
|
cc32186328 | ||
|
|
bb080cae17 | ||
|
|
c4555cd64e | ||
|
|
14bbd93722 | ||
|
|
901a7bec62 | ||
|
|
fd0e9190f2 | ||
|
|
94fb6adf4f | ||
|
|
fdc9624d70 | ||
|
|
420a256832 | ||
|
|
5ba07d7420 | ||
|
|
124e89867f | ||
|
|
8847ed4e28 | ||
|
|
bd03fc34d2 | ||
|
|
8ae5fa0c0f | ||
|
|
c20bf97b5b | ||
|
|
f589b1be07 | ||
|
|
d725a81398 | ||
|
|
e7dcf3cc86 | ||
|
|
a4c829d836 | ||
|
|
ff96d2ec0c | ||
|
|
d0afe78e98 | ||
|
|
b1a396d9c5 | ||
|
|
b249e14a66 | ||
|
|
513f426623 | ||
|
|
7aa25ca0e3 | ||
|
|
e13f1f73fa | ||
|
|
95401ce6de | ||
|
|
f9ae0d0ffd | ||
|
|
fb7863439e | ||
|
|
1c9fbfce50 | ||
|
|
90854b2c51 | ||
|
|
672589b553 | ||
|
|
430425ce2f | ||
|
|
4a587825f3 | ||
|
|
2b418811ff | ||
|
|
aeb9580870 | ||
|
|
d1b30a58e2 | ||
|
|
4e435e1ac7 | ||
|
|
9fb0e14897 | ||
|
|
d8244e5f49 | ||
|
|
66f67c026d | ||
|
|
fc7d499bf7 | ||
|
|
acb6c8ca25 | ||
|
|
3a187945dc | ||
|
|
19490ffc51 | ||
|
|
f783ec3df3 | ||
|
|
de1c6b15fe | ||
|
|
7cbe4279dd | ||
|
|
a7926a72b5 | ||
|
|
e84ff197ec | ||
|
|
d72ee76d74 | ||
|
|
0f31b364e8 | ||
|
|
b0edff4963 | ||
|
|
b5fccd1ac9 | ||
|
|
acd4349b75 | ||
|
|
c9c22ed080 | ||
|
|
8ff89a7141 | ||
|
|
8ecf4ae0a9 | ||
|
|
3e78ad3471 | ||
|
|
ee8063401e | ||
|
|
51aa107cb8 | ||
|
|
855ace7f95 | ||
|
|
b64dbfe499 | ||
|
|
29294bdabb | ||
|
|
f9dea8a52c | ||
|
|
09656471de | ||
|
|
84388ff1da | ||
|
|
08c5358a8c | ||
|
|
24c1f92644 | ||
|
|
9c175a597b | ||
|
|
945f833ebd | ||
|
|
27470c0e8d | ||
|
|
3738221bf5 | ||
|
|
1465ce2b92 | ||
|
|
f8a7483b08 | ||
|
|
6be3c6841c | ||
|
|
ffdd682137 | ||
|
|
ceb44aa22b | ||
|
|
a6321a0961 | ||
|
|
2df4f7b628 | ||
|
|
2e5a1e7fd9 | ||
|
|
a6d6e58a80 | ||
|
|
68a559ebac | ||
|
|
beafd31cab | ||
|
|
fd2821fb92 | ||
|
|
1351f582b0 | ||
|
|
3a3f4ed960 | ||
|
|
2e3c8ed2cb | ||
|
|
b743ee7e3c | ||
|
|
5e086d1830 | ||
|
|
2e38c0ebae | ||
|
|
31be70a18c | ||
|
|
c96dd560cd | ||
|
|
5d924c0cf2 | ||
|
|
68fd3d15cc | ||
|
|
56d3610907 | ||
|
|
d072428249 | ||
|
|
cfffd04736 | ||
|
|
5b1ac962f2 | ||
|
|
53349fd096 | ||
|
|
5ee2faf125 | ||
|
|
5f345a90df | ||
|
|
6d12e40078 | ||
|
|
3ba8d0827b | ||
|
|
bffd8c3d7c | ||
|
|
d6e04be39f | ||
|
|
58b167268e | ||
|
|
7fef14c322 | ||
|
|
e3b1a33596 | ||
|
|
3639e32939 | ||
|
|
9707e0c336 | ||
|
|
e9f3d0d0c3 | ||
|
|
c9bf4ed20e | ||
|
|
999a65e412 | ||
|
|
cf57834019 | ||
|
|
16d7627ba6 | ||
|
|
3b4b8d94d5 | ||
|
|
18553ba130 | ||
|
|
e49846bb1b | ||
|
|
a6d3745cd4 | ||
|
|
b3a82bc294 | ||
|
|
4829e5286e | ||
|
|
7df6948fe6 | ||
|
|
44dfb877f5 | ||
|
|
5476cf6c21 | ||
|
|
789e7590bf | ||
|
|
4cc2e0b44b | ||
|
|
b55a0b6c31 | ||
|
|
e2180cf507 | ||
|
|
249fcff93a | ||
|
|
609a7e75ed | ||
|
|
3a518e3959 | ||
|
|
279e7d1212 | ||
|
|
a8df59bdf8 | ||
|
|
2a817ec25f | ||
|
|
2187a9e8b8 | ||
|
|
770ef82fe1 | ||
|
|
436fb47057 | ||
|
|
87bdc7013f | ||
|
|
7989000ef8 | ||
|
|
1867bd3184 | ||
|
|
cc96236dac | ||
|
|
807f170b72 | ||
|
|
109d80a39e | ||
|
|
4f59b0d2c6 | ||
|
|
1d07e65997 | ||
|
|
df87eb3224 | ||
|
|
7a5fe2afac | ||
|
|
7fd2357245 | ||
|
|
6cdf8f9007 | ||
|
|
e1d447c450 | ||
|
|
32709843fb | ||
|
|
02431bf71e | ||
|
|
ef347442be | ||
|
|
8e009d8fe8 | ||
|
|
432a6c4eaf | ||
|
|
da0618c442 | ||
|
|
4ea5ec7194 | ||
|
|
7f16f90186 | ||
|
|
71a22be8ca | ||
|
|
f504c6c181 | ||
|
|
c54f886525 | ||
|
|
d8177a7724 | ||
|
|
17bc128546 | ||
|
|
09b8c73e47 | ||
|
|
3618508640 | ||
|
|
2a25bce808 | ||
|
|
6e91aa88be | ||
|
|
1ae08b6b78 | ||
|
|
19f969d442 | ||
|
|
2f0609d6c7 | ||
|
|
aeed698ed2 | ||
|
|
6e1a04ecd8 | ||
|
|
559d4c0ece | ||
|
|
9640730d6c | ||
|
|
a702e69e16 | ||
|
|
492eeef721 | ||
|
|
b2008958f1 | ||
|
|
e41dad708e | ||
|
|
582285a37f | ||
|
|
1926522f99 | ||
|
|
96c9f459c1 | ||
|
|
15c6cb09fd | ||
|
|
0651c20990 | ||
|
|
eb1cb24723 | ||
|
|
912f4e4fc4 | ||
|
|
80aebfc26f | ||
|
|
f6ebdb9aec | ||
|
|
011a9c944b | ||
|
|
efb25cf611 | ||
|
|
a1c396ea27 | ||
|
|
8cfd437b7e | ||
|
|
9a4f81c2cb | ||
|
|
96c6604252 | ||
|
|
9036126359 | ||
|
|
73cc898f6b | ||
|
|
a5d0949bb4 | ||
|
|
c8b50ba2d3 | ||
|
|
226a0895a9 | ||
|
|
a77371e9b4 | ||
|
|
3ed7610e8d | ||
|
|
2351b733cd | ||
|
|
c76559a4d4 | ||
|
|
a5f44c464a | ||
|
|
51cb473141 | ||
|
|
99bc24c0ef | ||
|
|
5a7e08c4e5 | ||
|
|
9d89393695 | ||
|
|
b436e1dc88 | ||
|
|
172b271c6f | ||
|
|
8fbf77a76d | ||
|
|
9fdc251b83 | ||
|
|
2d4f1b2362 | ||
|
|
450c22359f | ||
|
|
ef360d6927 | ||
|
|
9db2372c05 | ||
|
|
2cceccad55 | ||
|
|
78b54060b5 | ||
|
|
da4c04a22e | ||
|
|
5ec951622d | ||
|
|
42fb6c3b14 | ||
|
|
d5a3d085aa | ||
|
|
fdd98ace07 | ||
|
|
733f13528d | ||
|
|
f21c3f0b26 | ||
|
|
6f67870f70 | ||
|
|
0e9d2454d8 | ||
|
|
b33f50a1ae | ||
|
|
f3b4fb68ef | ||
|
|
2ee4f38743 | ||
|
|
d2a4cf3264 | ||
|
|
1358d53dd9 | ||
|
|
ac456232bb | ||
|
|
181267f256 | ||
|
|
e799500893 | ||
|
|
75c3cbafd0 | ||
|
|
c7b44ddcaa | ||
|
|
fcae1fa91d | ||
|
|
09ca08baaf | ||
|
|
391e98de9f | ||
|
|
fa4952408a | ||
|
|
4cb0424d23 | ||
|
|
db3233075c | ||
|
|
1307181005 | ||
|
|
e9929c23e1 | ||
|
|
fe73eba54e | ||
|
|
f08e733cc4 | ||
|
|
a3ebb7942d | ||
|
|
c0bf077974 | ||
|
|
c1b2d09cd6 | ||
|
|
ce465f0b03 | ||
|
|
794689304f | ||
|
|
0cabd62dea | ||
|
|
7018fc99a2 | ||
|
|
c2741683b2 | ||
|
|
e58ef5ed9c | ||
|
|
fe2d954555 | ||
|
|
64c3ea445b | ||
|
|
163852615a | ||
|
|
717b8aa194 | ||
|
|
3e37e54158 | ||
|
|
16f8ae0f30 | ||
|
|
5336a0a611 | ||
|
|
f8dc1da537 | ||
|
|
8927d7d144 | ||
|
|
3b65f66584 | ||
|
|
6fe99a6f1b | ||
|
|
9626250140 | ||
|
|
a514e254a2 | ||
|
|
bf8c018fc5 | ||
|
|
1bdb651636 | ||
|
|
abc40b8e8e | ||
|
|
a1e6368c29 | ||
|
|
ba6543a322 | ||
|
|
2961d21124 | ||
|
|
45e4e66b4c | ||
|
|
b99d77ec29 | ||
|
|
addd3605f6 | ||
|
|
54729bffa2 | ||
|
|
01dc7dc1d8 | ||
|
|
ff05d779c4 | ||
|
|
93bea50176 | ||
|
|
7bf1a5a802 | ||
|
|
83979b3468 | ||
|
|
e04a6784dd | ||
|
|
dc8fe022bc | ||
|
|
502d20e2cf | ||
|
|
fd66425de6 | ||
|
|
19310b2078 | ||
|
|
aea51476da | ||
|
|
8e729c79d8 | ||
|
|
98e334b7fb | ||
|
|
3fd63e5348 | ||
|
|
e95064fef5 | ||
|
|
2215dc3397 | ||
|
|
4b9af22c95 | ||
|
|
54481095ce | ||
|
|
214b3dcde8 | ||
|
|
ecb9f52bf3 | ||
|
|
92df8bd178 | ||
|
|
445df5b30e | ||
|
|
57692cd8b1 | ||
|
|
f4058bb5c2 | ||
|
|
c80dd8958a | ||
|
|
24879f8198 | ||
|
|
24411f7a68 | ||
|
|
93d28f66b2 | ||
|
|
f4c584cfce | ||
|
|
a85978f2be | ||
|
|
90e1a66930 | ||
|
|
2a1f1a7dfa | ||
|
|
6fd47b333e | ||
|
|
5b8fe3aeb5 | ||
|
|
7c6c2d2932 | ||
|
|
babf679914 | ||
|
|
f8adc5e1a2 | ||
|
|
aaedc13d2c | ||
|
|
1e4ac1f842 | ||
|
|
4ee0ca29d4 | ||
|
|
b264e9f3df | ||
|
|
90328d5faf | ||
|
|
1d062075c4 | ||
|
|
acfd865bb0 | ||
|
|
ff7deb4712 | ||
|
|
09c60e68e0 | ||
|
|
318634f072 | ||
|
|
105a34f912 | ||
|
|
5a17a04090 | ||
|
|
7dde31546e | ||
|
|
472e8e94b0 | ||
|
|
3250bc5513 | ||
|
|
1092c89f86 | ||
|
|
977946a319 | ||
|
|
373c5cb348 | ||
|
|
fee0864ba1 | ||
|
|
6d8d05b0cc | ||
|
|
fcc40d65ae | ||
|
|
3457e0925d | ||
|
|
f282941075 | ||
|
|
e3e1485369 | ||
|
|
b05050da5b | ||
|
|
7970e52068 | ||
|
|
d79f12d45a | ||
|
|
e6561e10d4 | ||
|
|
b5acc054bf | ||
|
|
ce59c07b0b | ||
|
|
f6edac245d | ||
|
|
c21239a634 | ||
|
|
8372674d09 | ||
|
|
df697b9461 | ||
|
|
0ef1286c37 | ||
|
|
52cb33ffdd | ||
|
|
dd3a4b4821 | ||
|
|
896f083000 | ||
|
|
05b23fdadc | ||
|
|
fe6e503ec3 | ||
|
|
d824821b7a | ||
|
|
e5ad620a15 | ||
|
|
0a769008cf | ||
|
|
34bbde1a7c | ||
|
|
cb1a7af3c2 | ||
|
|
51b6c6006b | ||
|
|
580d3e77f7 | ||
|
|
7df6962f43 | ||
|
|
caabe0ebda | ||
|
|
cb37b38ee4 | ||
|
|
601caa8711 | ||
|
|
5150ecb973 | ||
|
|
1ce74482bc | ||
|
|
a18ac6bed6 | ||
|
|
13d653e4dd | ||
|
|
ea4f8474c1 | ||
|
|
62ef3d91b6 | ||
|
|
38518baf44 | ||
|
|
04e8638291 | ||
|
|
5eea1bac6c | ||
|
|
a57f99cbe0 | ||
|
|
338ea47b6c | ||
|
|
20f9436672 | ||
|
|
d11d9ea5a4 | ||
|
|
dc8abe99c3 | ||
|
|
ce65cfff23 | ||
|
|
adb40fc5f4 | ||
|
|
7d62824936 | ||
|
|
e267ef1f54 | ||
|
|
ad7cf21d0e | ||
|
|
d484bb4f2f | ||
|
|
d66aa7097a | ||
|
|
69d51e88d8 | ||
|
|
f51ea1f206 | ||
|
|
e50d143d96 | ||
|
|
92a9174603 | ||
|
|
4edbd47088 | ||
|
|
c166c20701 | ||
|
|
640240e5c2 | ||
|
|
2793914d80 | ||
|
|
90bb89660c | ||
|
|
e3af9f023c | ||
|
|
95c8a1fb82 | ||
|
|
32d7e8d891 | ||
|
|
ee99d1fb26 | ||
|
|
098675516b | ||
|
|
9350963f58 | ||
|
|
999abc5b73 | ||
|
|
c00456f6fe | ||
|
|
ea1ed4159e | ||
|
|
18d52a4103 | ||
|
|
4bb6a223be | ||
|
|
d4710164c7 | ||
|
|
ee2439d8da | ||
|
|
94f4cd2be1 | ||
|
|
2ed6d7f750 | ||
|
|
f1ff7d0eaf | ||
|
|
389b6d006c | ||
|
|
71d5e5f150 | ||
|
|
8c2329795d | ||
|
|
977e4adfc6 | ||
|
|
b22bb17d90 | ||
|
|
7031b9294f | ||
|
|
3bd1e82b54 | ||
|
|
af4df69a16 | ||
|
|
08864ce302 | ||
|
|
a00be0c20d | ||
|
|
4f22d6fec6 | ||
|
|
216d376598 | ||
|
|
773ac4922b | ||
|
|
3a131f380d | ||
|
|
9f06ea4b05 | ||
|
|
9e3ec11c70 | ||
|
|
f3bbc7957e | ||
|
|
8e8c8b67f5 | ||
|
|
dbb5fa2c9c | ||
|
|
b82861a5e8 | ||
|
|
6fa9ed7f07 | ||
|
|
fdd6a21102 | ||
|
|
8a0b20719e | ||
|
|
03c7142fa6 | ||
|
|
03340c1eae | ||
|
|
e588e281b6 | ||
|
|
cf8b906e54 | ||
|
|
59b8b6f037 | ||
|
|
0b7dc598b2 | ||
|
|
c609284d0f | ||
|
|
90c1ec9d36 | ||
|
|
b76546084c | ||
|
|
e984bd212b | ||
|
|
83de901c8a | ||
|
|
c9f7ba8004 | ||
|
|
01a6c22103 | ||
|
|
9f1b1619e8 | ||
|
|
ffb3c0e6d0 | ||
|
|
0470a02b2f | ||
|
|
6bbeff6d05 | ||
|
|
0bc3e6c8a0 | ||
|
|
53018704e0 | ||
|
|
e8c16cfb4b | ||
|
|
27ea2f91c0 | ||
|
|
6c6646873c | ||
|
|
223d6492d4 | ||
|
|
ccd3d26059 | ||
|
|
f63e690b15 | ||
|
|
674057b1af | ||
|
|
014a0b53ae | ||
|
|
32cc6ea617 | ||
|
|
d6dd63f012 | ||
|
|
0210752ea5 | ||
|
|
3c060766e7 | ||
|
|
7915bc3b59 | ||
|
|
69c5628184 | ||
|
|
03d66b0664 | ||
|
|
7c82d7e485 | ||
|
|
c927517e37 | ||
|
|
9fd42ffb34 | ||
|
|
a7c4285a68 | ||
|
|
eb6d30537b | ||
|
|
b9b61c7e97 | ||
|
|
eebc466e34 | ||
|
|
f84ca18798 | ||
|
|
831083a976 | ||
|
|
7530aee68a | ||
|
|
18cc0495ef | ||
|
|
047fbb22f8 | ||
|
|
4fa150e077 | ||
|
|
5e00e46a9b | ||
|
|
25e00a3172 | ||
|
|
3d9af3152e | ||
|
|
9f9c0fae71 | ||
|
|
3729c13a91 | ||
|
|
eec65929da | ||
|
|
6f7a28b359 | ||
|
|
a6fa0432ee | ||
|
|
6fb1dc2342 | ||
|
|
bb7138c3f6 | ||
|
|
c6923c9686 | ||
|
|
c20cf6d6e5 | ||
|
|
d42a5ad1c5 | ||
|
|
5e7faae788 | ||
|
|
e4e4a104fe | ||
|
|
2d5cbaf461 | ||
|
|
f89ca4423a | ||
|
|
548c7475d6 | ||
|
|
fea001efcf | ||
|
|
4050e063c0 | ||
|
|
564b91fba9 | ||
|
|
9fe9e38786 | ||
|
|
05fde696c7 | ||
|
|
b31198f685 | ||
|
|
1efd94dfe6 | ||
|
|
3b95710f27 | ||
|
|
8083df1361 | ||
|
|
6de559c020 | ||
|
|
7579bb21c0 | ||
|
|
5cdadbd7fa | ||
|
|
115a02b0eb | ||
|
|
7b4c105046 | ||
|
|
d8f2d95f92 | ||
|
|
dd406da3e2 | ||
|
|
cafbb5f76b | ||
|
|
cca5196752 | ||
|
|
86b9f512a5 | ||
|
|
06980e0cc1 | ||
|
|
e45fe466ee | ||
|
|
2c76a5f8ac | ||
|
|
3cbbb281a5 | ||
|
|
5fe64d41ec | ||
|
|
6301c3f169 | ||
|
|
1ccf645638 | ||
|
|
dfdcaa893e | ||
|
|
d260231737 | ||
|
|
ecded4a440 | ||
|
|
3f55fb4c0c | ||
|
|
b5d40b083a | ||
|
|
602f17c8b2 | ||
|
|
74e89e94e9 | ||
|
|
4be7a2028e | ||
|
|
4379821787 | ||
|
|
6b3617754c | ||
|
|
ee6cf0eb9f | ||
|
|
fde2321222 | ||
|
|
a9c749995a | ||
|
|
93245c0179 | ||
|
|
a1843ffd34 | ||
|
|
0d266be965 | ||
|
|
7c822d06f6 | ||
|
|
d370e5a6a9 | ||
|
|
3dd6442b94 | ||
|
|
cac6e89870 | ||
|
|
45edca2218 | ||
|
|
46d710e079 | ||
|
|
f1bb9f83e6 | ||
|
|
6b6247b009 | ||
|
|
8a68666096 | ||
|
|
6d01bffc79 | ||
|
|
c09d03b20d | ||
|
|
0da30ca089 | ||
|
|
b5c7895bb5 | ||
|
|
97386397c2 | ||
|
|
137fd5978f | ||
|
|
e8593c47cc | ||
|
|
74bb946a91 | ||
|
|
82756c3968 | ||
|
|
faaf1f537a | ||
|
|
5383b2fccb | ||
|
|
9294981d71 | ||
|
|
17bdfd904a | ||
|
|
6cb257e51f | ||
|
|
3c16e59a5c | ||
|
|
37f6591563 | ||
|
|
3e9932d866 | ||
|
|
6954898da0 | ||
|
|
a55dc65775 | ||
|
|
66324d718a | ||
|
|
553e463b7e | ||
|
|
d7c95d6cd6 | ||
|
|
bf40ceb064 | ||
|
|
554d31d119 | ||
|
|
8a3a03805e | ||
|
|
9047e28074 | ||
|
|
2ee12c7293 | ||
|
|
dc6b2f184a | ||
|
|
1a9596737e | ||
|
|
89353f9312 | ||
|
|
6d58d5920e | ||
|
|
dfef2b862f | ||
|
|
61fff273fc | ||
|
|
97c7c6814f | ||
|
|
025e23627f | ||
|
|
0a38a704fe | ||
|
|
798ba0d262 | ||
|
|
24e3b5efba | ||
|
|
c00cde0aa3 | ||
|
|
0af72f0c68 | ||
|
|
82539add26 | ||
|
|
76a1e8df80 | ||
|
|
3fe188df21 | ||
|
|
4ed27c6eda | ||
|
|
6ec76aa61f | ||
|
|
4a46ffe3a0 | ||
|
|
e47862be71 | ||
|
|
04a9f14b3c | ||
|
|
0aed9ee9f4 | ||
|
|
79e2ff2ee8 | ||
|
|
e5880841f3 | ||
|
|
c49b0699c2 | ||
|
|
bc91a05dd2 | ||
|
|
5b5f56f51c | ||
|
|
f558c78d32 | ||
|
|
ed3eb37c4f | ||
|
|
09318d1943 | ||
|
|
fad4f457ae | ||
|
|
fc3668885d | ||
|
|
c385404e23 | ||
|
|
a0ff6dbc9e | ||
|
|
484ba9dc25 | ||
|
|
848d591f0a | ||
|
|
c07d819ce9 | ||
|
|
ea50f3d3ed | ||
|
|
76bdc74670 | ||
|
|
4a4502967e | ||
|
|
5358d2b81b | ||
|
|
0f6404f4ea | ||
|
|
2b9bfcc0d9 | ||
|
|
950cfb2945 | ||
|
|
06bb301bab | ||
|
|
bad7aee4ec | ||
|
|
400288bb69 | ||
|
|
c549466737 | ||
|
|
841f77d36a | ||
|
|
e281b4e389 | ||
|
|
64adb19b85 | ||
|
|
b84bb568cd | ||
|
|
ecc5e9bfaf | ||
|
|
133bceb43f | ||
|
|
b338aefe45 | ||
|
|
feae33499e | ||
|
|
40baedaa78 | ||
|
|
2b99b23eec | ||
|
|
4592ec3657 | ||
|
|
cf71b9dc9e | ||
|
|
691bdb3a92 | ||
|
|
ae1f67d31f | ||
|
|
a425c5e2ff | ||
|
|
972551e838 | ||
|
|
637d51cba0 | ||
|
|
c71e8dc829 | ||
|
|
2f541130ab | ||
|
|
322f64d517 | ||
|
|
ca3cb6487d | ||
|
|
76ebb24b77 | ||
|
|
4c11a42d21 | ||
|
|
8259455ac5 | ||
|
|
1fe0cedbd0 | ||
|
|
09485451f7 | ||
|
|
c78390752a | ||
|
|
7687965219 | ||
|
|
100430227c | ||
|
|
148795918f | ||
|
|
31bd3c9db7 | ||
|
|
037b3aea6a | ||
|
|
6a778e8c17 | ||
|
|
bac62f6969 | ||
|
|
6a14a277b2 | ||
|
|
67b4528643 | ||
|
|
7b34bb63c9 | ||
|
|
a854d07a66 | ||
|
|
7a7d794207 | ||
|
|
4fb5acad48 | ||
|
|
2e396e4d65 | ||
|
|
55ddeb7aaa | ||
|
|
907e1a8c43 | ||
|
|
8628c34b25 | ||
|
|
9938a6bf4b | ||
|
|
f308bfb4bf | ||
|
|
c0793c575d | ||
|
|
3c00c96b6a | ||
|
|
a1010be87a | ||
|
|
4b20afbd15 | ||
|
|
dc9859cd83 | ||
|
|
08f218724b | ||
|
|
daeb1eb2a3 | ||
|
|
326c7355ed | ||
|
|
d38606f409 | ||
|
|
29c45e3ebc | ||
|
|
20f748be12 | ||
|
|
1cb1e91ca1 | ||
|
|
7fb119c9f3 | ||
|
|
eda8dfe9ca | ||
|
|
4b3939ef4e | ||
|
|
cb0c79e79f | ||
|
|
e36638973f | ||
|
|
aef982d6e6 | ||
|
|
4a588f6512 | ||
|
|
b34cfb1fe0 | ||
|
|
4f028a107b | ||
|
|
91ee928f06 | ||
|
|
862b1eeed4 | ||
|
|
0786ec6108 | ||
|
|
2dca3114e9 | ||
|
|
3bf26bd89e | ||
|
|
ef074f8d6c | ||
|
|
4b46bff72f | ||
|
|
765d3b47a7 | ||
|
|
20c97527fb | ||
|
|
35b3efb058 | ||
|
|
8d1781489b | ||
|
|
92a33acf45 | ||
|
|
48a35b6a01 | ||
|
|
8db7c4355e | ||
|
|
d0a1013131 | ||
|
|
936c0b607b | ||
|
|
1123a440bc | ||
|
|
8f0039de92 | ||
|
|
f8b0ae6c6f | ||
|
|
188ab10871 | ||
|
|
a016077bf3 | ||
|
|
834c155da4 | ||
|
|
19b1d76e98 | ||
|
|
c43846f14e | ||
|
|
fd8d481be4 | ||
|
|
8576201cc1 | ||
|
|
0837025a74 | ||
|
|
5468c4e767 | ||
|
|
34c12de81c | ||
|
|
a5cd498f92 | ||
|
|
dbb588f031 | ||
|
|
720b98b715 | ||
|
|
efd921d876 | ||
|
|
1e28c2d949 | ||
|
|
a0c861ec5a | ||
|
|
8d841ea8e3 | ||
|
|
504430dcdd | ||
|
|
435ff1beeb | ||
|
|
6e247829a3 | ||
|
|
99795b747c | ||
|
|
3a325a1e04 | ||
|
|
734565dc05 | ||
|
|
697d5f0892 | ||
|
|
409d25739e | ||
|
|
65a792ba53 | ||
|
|
4239107ed2 | ||
|
|
f512925fd4 | ||
|
|
b740dd11cf | ||
|
|
430a479113 | ||
|
|
86394b25ee | ||
|
|
8086c6f0bf | ||
|
|
7742e11cde | ||
|
|
2597fcae80 | ||
|
|
5dd720cc21 | ||
|
|
fdbde9eb87 | ||
|
|
7e5227e4a1 | ||
|
|
60ae815c09 | ||
|
|
adecd99866 | ||
|
|
932fa34edc | ||
|
|
75fc0ae472 | ||
|
|
4bc965b45b | ||
|
|
6704abf988 | ||
|
|
d9f84677f8 | ||
|
|
e1880ce19e | ||
|
|
77700e72b1 | ||
|
|
57d6fe7150 | ||
|
|
4660dd3b7f | ||
|
|
58046a2ec7 | ||
|
|
008423d49b | ||
|
|
3eb09b8b07 | ||
|
|
888cfe3f1e | ||
|
|
4545076b0f | ||
|
|
854fd796ae | ||
|
|
77af6d4c17 | ||
|
|
21704c9f84 | ||
|
|
4f913f2468 | ||
|
|
96126e5a2f | ||
|
|
490b04f298 | ||
|
|
abacb64479 | ||
|
|
2a299c9201 | ||
|
|
39083b819f | ||
|
|
228f1512d7 | ||
|
|
f5b9e0e0d5 | ||
|
|
daaee2b971 | ||
|
|
a38cf312b2 | ||
|
|
ab44907dac | ||
|
|
1246f12f5a | ||
|
|
99b8c31d3a | ||
|
|
dbf3301ff9 | ||
|
|
a6fe4a1516 | ||
|
|
277f1023c9 | ||
|
|
820ae3f27c | ||
|
|
d52cfe8bac | ||
|
|
f74d7cbd3e | ||
|
|
7e9b5944fd | ||
|
|
6fb0be9cc0 | ||
|
|
1ddc1c68dc | ||
|
|
8b3dc9072f | ||
|
|
112e551240 | ||
|
|
7b4bac1874 | ||
|
|
baa7f78e83 | ||
|
|
45e4208218 | ||
|
|
1e48eacbf8 | ||
|
|
9e062994fe | ||
|
|
4f155f5004 | ||
|
|
c0ee2db8a4 | ||
|
|
5464b449ce | ||
|
|
f2e433d52b | ||
|
|
11fdc9340e | ||
|
|
1e71e2faa0 | ||
|
|
2806de2a5d | ||
|
|
27c032d53f | ||
|
|
c47f73f799 | ||
|
|
2901e619cb | ||
|
|
5a98db9589 | ||
|
|
34b631fa12 | ||
|
|
bb129c1151 | ||
|
|
37afd429ec | ||
|
|
edee08a778 | ||
|
|
0395d958cf | ||
|
|
9e51798295 | ||
|
|
cb6e2cd7f6 |
50
.babelrc
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"env": {
|
||||
"ui": {
|
||||
"presets": [
|
||||
"react",
|
||||
["env",{
|
||||
"targets": {
|
||||
"browsers": [
|
||||
"last 5 versions",
|
||||
"FireFox >= 44",
|
||||
"Safari >= 7",
|
||||
"Explorer 11",
|
||||
"last 4 Edge versions"
|
||||
],
|
||||
"loose": true
|
||||
}
|
||||
}],
|
||||
"stage-2",
|
||||
"stage-3"
|
||||
],
|
||||
"plugins": [
|
||||
"react-hot-loader/babel",
|
||||
"transform-runtime",
|
||||
"transform-object-rest-spread",
|
||||
"transform-decorators-legacy"
|
||||
]
|
||||
},
|
||||
"test": {
|
||||
"presets": [ "es2015-node4", "stage-2", "stage-3", "flow", "react"],
|
||||
"plugins": [
|
||||
"transform-class-properties",
|
||||
"transform-object-rest-spread"
|
||||
]
|
||||
},
|
||||
"registry": {
|
||||
"presets": [
|
||||
"es2015-node4", "flow"
|
||||
],
|
||||
"plugins": [
|
||||
"transform-object-rest-spread"
|
||||
]
|
||||
},
|
||||
"development": {
|
||||
"presets": ["flow"],
|
||||
"plugins": [
|
||||
"flow-runtime"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
32
.dockerignore
Normal file
@@ -0,0 +1,32 @@
|
||||
# we try to aoid adding files to the docker images that change often
|
||||
# or that are not needed for running the docker image
|
||||
# tis greatly reduces the amount of times we need to rerun `npm install` when building image locally
|
||||
# https://codefresh.io/blog/not-ignore-dockerignore/
|
||||
# https://docs.docker.com/engine/reference/builder/#dockerignore-file
|
||||
|
||||
# consider them hidden
|
||||
.*
|
||||
# you can add exceptions like in .gitignore to maintain a whitelist:
|
||||
# e.g.
|
||||
!.babelrc
|
||||
!.eslintrc
|
||||
!.eslintignore
|
||||
!.stylelintrc
|
||||
!.flowconfig
|
||||
!.jest.config.js
|
||||
!.jestEnvironment.js
|
||||
|
||||
# do not copy over node_modules we will run `npm install` anyway
|
||||
node_modules
|
||||
|
||||
# output from test runs and similar things
|
||||
*.log
|
||||
coverage/
|
||||
|
||||
# IDE config files
|
||||
jsconfig.json
|
||||
*.iml
|
||||
|
||||
# let's not get to recursive ;)
|
||||
Dockerfile*
|
||||
docker-compose*.yaml
|
||||
12
.editorconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
# 2 space indentation
|
||||
[{.,}*.{js,jsx,yml,yaml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
275
.eslint.yaml
@@ -1,275 +0,0 @@
|
||||
env:
|
||||
node: true
|
||||
|
||||
#
|
||||
# 0 - disable
|
||||
# Rules that more harmful than useful, or just buggy.
|
||||
#
|
||||
# 1 - warning
|
||||
# Rules that we didn't encounter yet. You can safely ignore them,
|
||||
# but I'd like to know any interesting use-cases they forbid.
|
||||
#
|
||||
# 2 - error
|
||||
# Rules that have proven to be useful, please follow them.
|
||||
#
|
||||
|
||||
rules:
|
||||
# didn't understand what it does, but it fails a good code
|
||||
block-scoped-var: 0
|
||||
|
||||
# fails where newlines are used to format pretty big "if":
|
||||
# if (
|
||||
# name.charAt(0) === "." ||
|
||||
# name.match(/[\/@\s\+%:]/) ||
|
||||
# name !== encodeURIComponent(name) ||
|
||||
# name.toLowerCase() === "node_modules"
|
||||
# ) {
|
||||
brace-style: 1
|
||||
|
||||
# snake_case is more readable, what's up with you guys?
|
||||
camelcase: 0
|
||||
|
||||
# if some functions are complex, they are for a good reason,
|
||||
# ain't worth it
|
||||
complexity: [0, 10]
|
||||
|
||||
# never saw it, but self is preferred
|
||||
consistent-this: [1, self]
|
||||
|
||||
# fails good code
|
||||
curly: [0, multi]
|
||||
|
||||
# fails good code, where this notation is used for consistency:
|
||||
# something['foo-bar'] = 123
|
||||
# something['blahblah'] = 234
|
||||
dot-notation: 0
|
||||
|
||||
# pointless in many cases (like indexOf() == -1), harmful in a few
|
||||
# cases (when you do want to ignore types), fails good code
|
||||
eqeqeq: 0
|
||||
|
||||
# if someone is changing prototype and makes properties enumerable,
|
||||
# it's their own fault
|
||||
guard-for-in: 0
|
||||
|
||||
# if some functions are complex, they are for a good reason,
|
||||
# ain't worth it
|
||||
max-depth: [0, 4]
|
||||
max-nested-callbacks: [0, 2]
|
||||
|
||||
# should it really throw for every long URL?
|
||||
max-len: [0, 80, 4]
|
||||
|
||||
# that's obvious by just looking at the code, you don't need lint for that
|
||||
max-params: [0, 3]
|
||||
|
||||
# if some functions are complex, they are for a good reason,
|
||||
# ain't worth it
|
||||
max-statements: [0, 10]
|
||||
|
||||
# that one makes sense
|
||||
new-cap: 2
|
||||
|
||||
# I'm writing javascript, not some weird reduced version of it
|
||||
no-bitwise: 0
|
||||
|
||||
# not working around IE bugs, sorry
|
||||
no-catch-shadow: 0
|
||||
|
||||
# see above, IE is useful for downloading other browsers only
|
||||
no-comma-dangle: 0
|
||||
|
||||
# good for removing debugging code
|
||||
no-console: 2
|
||||
|
||||
# good for removing debugging code
|
||||
no-debugger: 2
|
||||
|
||||
# why would anyone need to check against that?
|
||||
no-else-return: 0
|
||||
|
||||
# sometimes empty statement contains useful comment
|
||||
no-empty: 0
|
||||
|
||||
# stupid rule
|
||||
# "x == null" is "x === null || x === undefined"
|
||||
no-eq-null: 0
|
||||
|
||||
# fails good code, when parens are used for grouping:
|
||||
# (req && req.headers['via']) ? req.headers['via'] + ', ' : ''
|
||||
# not everyone remembers priority tables, you know
|
||||
no-extra-parens: 0
|
||||
|
||||
# fails defensive semicolons:
|
||||
# ;['foo', 'bar'].forEach(function(x) {})
|
||||
no-extra-semi: 0
|
||||
|
||||
# fails good code:
|
||||
# var fs = require('fs'),
|
||||
# , open = fs.open
|
||||
no-mixed-requires: [0, false]
|
||||
|
||||
# new Array(12) is used to pre-allocate arrays
|
||||
no-new-array: 0
|
||||
|
||||
# fails good code:
|
||||
# fs.open('/file', 0666, function(){})
|
||||
no-octal: 0
|
||||
|
||||
# fails good code:
|
||||
# console.log('\033[31m' + str + '\033[39m')
|
||||
# also fails \0 which is not octal escape
|
||||
no-octal-escape: 0
|
||||
|
||||
# I'm writing javascript, not some weird reduced version of it
|
||||
no-plusplus: 0
|
||||
|
||||
# fails good code:
|
||||
# if (a) {
|
||||
# var x = 'foo'
|
||||
# } else {
|
||||
# var x = bar
|
||||
# }
|
||||
no-redeclare: 0
|
||||
|
||||
# sometimes useful, often isn't
|
||||
# probably worth enforcing
|
||||
no-shadow: 2
|
||||
|
||||
no-sync: 2
|
||||
|
||||
# I'm writing javascript, not some weird reduced version of it
|
||||
no-ternary: 0
|
||||
|
||||
# the single most important rule in the entire ruleset
|
||||
no-undef: 2
|
||||
|
||||
# it is failing our own underscores
|
||||
no-underscore-dangle: 0
|
||||
|
||||
# fails function hoisting
|
||||
no-unreachable: 0
|
||||
|
||||
# fails npm-style code, it's good once you get used to it:
|
||||
# if (typeof(options) === 'function') callback = options, options = {}
|
||||
no-unused-expressions: 0
|
||||
|
||||
# fails (function(_err) {}) where named argument is used to show what
|
||||
# nth function argument means
|
||||
no-unused-vars: [0, local]
|
||||
|
||||
# fails function hoisting
|
||||
no-use-before-define: 0
|
||||
|
||||
# fails foobar( (function(){}).bind(this) )
|
||||
# parens are added for readability
|
||||
no-wrap-func: 0
|
||||
|
||||
# fails good code:
|
||||
# var x
|
||||
# if (something) {
|
||||
# var y
|
||||
one-var: 0
|
||||
|
||||
quote-props: 0
|
||||
|
||||
# fails situation when different quotes are used to avoid escaping
|
||||
quotes: [2, single, avoid-escape]
|
||||
|
||||
# http:#blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding
|
||||
semi: [2, never]
|
||||
|
||||
# fails good code where spaces are used for grouping:
|
||||
# (x+y * y+z)
|
||||
space-infix-ops: 0
|
||||
|
||||
# typeof(something) should have braces to look like a function
|
||||
# a matter of taste I suppose
|
||||
space-unary-word-ops: 0
|
||||
|
||||
# strict mode is just harmful,
|
||||
# can I have a check to enforce not using it?
|
||||
strict: 0
|
||||
|
||||
sort-vars: 0
|
||||
no-path-concat: 0
|
||||
func-names: 0
|
||||
|
||||
# how can you set a return code without process.exit?
|
||||
no-process-exit: 0
|
||||
|
||||
# both styles are useful
|
||||
func-style: [0, declaration]
|
||||
|
||||
# fails while(1) {...}
|
||||
no-constant-condition: 0
|
||||
|
||||
# fails good code:
|
||||
# https://github.com/rlidwka/jju/blob/eb52ee72e5f21d48963798f9bda8ac8d68082148/lib/parse.js#L732
|
||||
no-ex-assign: 0
|
||||
|
||||
wrap-iife: [2, inside]
|
||||
|
||||
# doesn't always make sense
|
||||
consistent-return: 0
|
||||
no-sequences: 0
|
||||
|
||||
# fails defensive semicolons
|
||||
no-space-before-semi: 0
|
||||
|
||||
new-parens: 1
|
||||
no-alert: 1
|
||||
no-array-constructor: 1
|
||||
no-caller: 1
|
||||
no-cond-assign: 1
|
||||
no-control-regex: 1
|
||||
no-delete-var: 1
|
||||
no-div-regex: 1
|
||||
no-dupe-keys: 1
|
||||
no-empty-class: 1
|
||||
no-empty-label: 1
|
||||
no-eval: 1
|
||||
no-extend-native: 1
|
||||
no-extra-boolean-cast: 1
|
||||
no-extra-strict: 1
|
||||
no-fallthrough: 1
|
||||
no-floating-decimal: 1
|
||||
no-func-assign: 1
|
||||
no-global-strict: 1
|
||||
no-implied-eval: 1
|
||||
no-invalid-regexp: 1
|
||||
no-iterator: 1
|
||||
no-labels: 1
|
||||
no-label-var: 1
|
||||
no-lone-blocks: 1
|
||||
no-loop-func: 1
|
||||
no-multi-str: 1
|
||||
no-native-reassign: 1
|
||||
no-negated-in-lhs: 1
|
||||
no-nested-ternary: 1
|
||||
no-new: 1
|
||||
no-new-func: 1
|
||||
no-new-object: 1
|
||||
no-new-wrappers: 1
|
||||
no-obj-calls: 1
|
||||
no-octal: 1
|
||||
no-proto: 1
|
||||
no-regex-spaces: 1
|
||||
no-return-assign: 1
|
||||
no-script-url: 1
|
||||
no-self-compare: 1
|
||||
no-shadow: 1
|
||||
no-shadow-restricted-names: 1
|
||||
no-spaced-func: 1
|
||||
no-sparse-arrays: 1
|
||||
no-sync: 1
|
||||
no-undef: 1
|
||||
no-undef-init: 1
|
||||
no-unreachable: 1
|
||||
no-with: 1
|
||||
no-yoda: 1
|
||||
radix: 1
|
||||
space-return-throw-case: 1
|
||||
use-isnan: 1
|
||||
valid-jsdoc: 1
|
||||
wrap-regex: 1
|
||||
7
.eslintignore
Normal file
@@ -0,0 +1,7 @@
|
||||
node_modules
|
||||
coverage/
|
||||
wiki/
|
||||
static/
|
||||
flow-typed/
|
||||
website/
|
||||
build/
|
||||
87
.eslintrc
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"plugins": [
|
||||
"react",
|
||||
"flowtype",
|
||||
"jest"
|
||||
],
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"google",
|
||||
"plugin:react/recommended",
|
||||
"plugin:flowtype/recommended",
|
||||
"plugin:jest/recommended"
|
||||
],
|
||||
"parser": "babel-eslint",
|
||||
"parserOptions": {
|
||||
"sourceType": "module",
|
||||
"ecmaVersion": 7,
|
||||
"ecmaFeatures": {
|
||||
"impliedStrict": true,
|
||||
"jsx": true
|
||||
}
|
||||
},
|
||||
"env": {
|
||||
"browser": true,
|
||||
"node": true,
|
||||
"es6": true,
|
||||
"jest": true
|
||||
},
|
||||
"globals": {
|
||||
"__APP_VERSION__": true
|
||||
},
|
||||
"rules": {
|
||||
"no-tabs": 0,
|
||||
"keyword-spacing": 0,
|
||||
"padded-blocks": 0,
|
||||
"no-useless-escape": 0,
|
||||
"handle-callback-err": 2,
|
||||
"no-debugger": 2,
|
||||
"no-fallthrough": 2,
|
||||
"curly": 2,
|
||||
"eol-last": 1,
|
||||
"no-irregular-whitespace": 1,
|
||||
"no-mixed-spaces-and-tabs": [
|
||||
1,
|
||||
"smart-tabs"
|
||||
],
|
||||
"no-trailing-spaces": 1,
|
||||
"no-new-require": 2,
|
||||
"no-undef": 2,
|
||||
"no-unreachable": 2,
|
||||
"no-unused-vars": [
|
||||
2,
|
||||
{
|
||||
"vars": "all",
|
||||
"args": "none"
|
||||
}
|
||||
],
|
||||
"max-len": [
|
||||
1,
|
||||
160
|
||||
],
|
||||
"semi": [
|
||||
2,
|
||||
"always"
|
||||
],
|
||||
"camelcase": 0,
|
||||
"require-jsdoc": 0,
|
||||
"valid-jsdoc": 0,
|
||||
"prefer-spread": 1,
|
||||
"prefer-rest-params": 1,
|
||||
"no-var": 2,
|
||||
"no-constant-condition": 2,
|
||||
"no-empty": 2,
|
||||
"guard-for-in": 2,
|
||||
"no-invalid-this": 2,
|
||||
"new-cap": 2,
|
||||
"one-var": 2,
|
||||
"no-console": [
|
||||
2,
|
||||
{
|
||||
"allow": [
|
||||
"warn"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
19
.flowconfig
Normal file
@@ -0,0 +1,19 @@
|
||||
[ignore]
|
||||
.*/node_modules/.*
|
||||
.*/test/**/*.json
|
||||
.*/static/.*
|
||||
.*/test/unit/partials/.*
|
||||
.*/.nyc_output/.*
|
||||
.*/coverage/.*
|
||||
.*/.vscode/.*
|
||||
.*/build/.*
|
||||
|
||||
[include]
|
||||
|
||||
[libs]
|
||||
node_modules/@verdaccio/types/lib/
|
||||
|
||||
[lints]
|
||||
|
||||
[options]
|
||||
suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe
|
||||
41
.github/issue_template.md
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
#### My reason:
|
||||
|
||||
<!--
|
||||
a brief explanation of the issue, suggestion, feature
|
||||
-->
|
||||
|
||||
#### Steps to reproduce:
|
||||
|
||||
<!--
|
||||
(if it applies)
|
||||
how can I do in order to reproduce it? environment?
|
||||
-->
|
||||
#### App Version:
|
||||
<!--
|
||||
Define which version the issue happens and whether previous version the behaviour is correct
|
||||
-->
|
||||
|
||||
#### Config file:
|
||||
<!--
|
||||
Provide your config file might be really helpful. Please be aware to hide sensisive data before post.
|
||||
-->
|
||||
|
||||
#### Additional information:
|
||||
|
||||
<!--
|
||||
provide the following information would be helpful
|
||||
-->
|
||||
|
||||
- `$ set DEBUG=express:* verdaccio` enable extreme verdaccio debug mode
|
||||
- `$ npm --verbose` prints:
|
||||
- `$ npm config get registry` prints:
|
||||
- Verdaccio terminal output
|
||||
- Windows, OS X/macOS, or Linux?:
|
||||
- Verdaccio configuration file, eg: `cat ~/.config/verdaccio/config.yaml`
|
||||
<!-- Remove those does not apply for you -->
|
||||
- Container:
|
||||
- I use local environment
|
||||
- I develop / deploy using Docker.
|
||||
- I deploy to a PaaS.
|
||||
|
||||
#### Additional verbose log:
|
||||
29
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
<!-- Before Pull Request check whether your commits follow this convention
|
||||
https://github.com/verdaccio/verdaccio/blob/master/CONTRIBUTING.md#git-commit-guidelines
|
||||
-->
|
||||
|
||||
<!--
|
||||
If your Pull Request fix an issue don't forget to update the unit test and documentation in /docs folder
|
||||
If your Pull Request delivers a new feature, please, provide examples and why such feature should be considered, this information is important to document the Github changelog. Also, try to increase documentation and create new unit/functional test.
|
||||
-->
|
||||
|
||||
<!-- Pick only one type, whether none apply, please suggest one, we might be included it by default -->
|
||||
**Type:** bug / feature / documentation / unit test / build
|
||||
|
||||
The following has been addressed in the PR:
|
||||
|
||||
<!-- Remove the sections that your PR does not apply -->
|
||||
* There is a related issue
|
||||
* Unit or Functional tests are included in the PR
|
||||
|
||||
<!--
|
||||
Our bots should ensure:
|
||||
* The PR passes CI testing
|
||||
-->
|
||||
|
||||
<!-- If there is no issue related to this PR just remove the following section -->
|
||||
**Description:**
|
||||
|
||||
Resolves #???
|
||||
|
||||
<!-- We are glad your code is part of this community, thanks for your valuable time !! -->
|
||||
38
.gitignore
vendored
@@ -1,10 +1,36 @@
|
||||
node_modules
|
||||
package.json
|
||||
npm-debug.log
|
||||
sinopia-*.tgz
|
||||
verdaccio-*.tgz
|
||||
.DS_Store
|
||||
build/
|
||||
|
||||
###
|
||||
bin/storage*
|
||||
bin/htpasswd
|
||||
bin/*.yaml
|
||||
!bin/verdaccio
|
||||
test-storage*
|
||||
.verdaccio_test_env
|
||||
node_modules
|
||||
package-lock.json
|
||||
build/
|
||||
npm_test-fails-add-tarball*
|
||||
|
||||
|
||||
# Istanbul
|
||||
coverage/
|
||||
.nyc*
|
||||
|
||||
# Visual Studio Code
|
||||
.vscode/*
|
||||
|
||||
.idea/
|
||||
|
||||
|
||||
# React
|
||||
bundle.js
|
||||
bundle.js.map
|
||||
__tests__
|
||||
|
||||
# Compiled script
|
||||
static/index.html
|
||||
static/style.*
|
||||
static/*.js
|
||||
static/logo.*
|
||||
|
||||
|
||||
18
.npmignore
@@ -1,12 +1,12 @@
|
||||
node_modules
|
||||
package.json
|
||||
npm-debug.log
|
||||
sinopia-*.tgz
|
||||
|
||||
###
|
||||
bin/storage*
|
||||
bin/htpasswd
|
||||
bin/*.yaml
|
||||
coverage/
|
||||
verdaccio-*.tgz
|
||||
test-storage*
|
||||
|
||||
/.eslint*
|
||||
scripts/
|
||||
docs/
|
||||
src/webui
|
||||
tools/
|
||||
/.*
|
||||
website/
|
||||
assets/
|
||||
|
||||
8
.stylelintrc
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "stylelint-config-recommended-scss",
|
||||
"rules": {
|
||||
"selector-pseudo-class-no-unknown": [true, {
|
||||
"ignorePseudoClasses": ["/global/"]
|
||||
}]
|
||||
}
|
||||
}
|
||||
11
.travis.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
language: node_js
|
||||
sudo: false
|
||||
node_js:
|
||||
- 'lts/boron'
|
||||
- 'lts/carbon'
|
||||
- 'lts/*'
|
||||
script:
|
||||
- npm install
|
||||
- commitlint-travis
|
||||
- npm run pre:ci
|
||||
- npm run test
|
||||
2
.yarnrc
Normal file
@@ -0,0 +1,2 @@
|
||||
save-prefix ""
|
||||
registry "http://registry.npmjs.org/"
|
||||
74
AUTHORS
Normal file
@@ -0,0 +1,74 @@
|
||||
030 <chocolatey030@gmail.com>
|
||||
Alex Kocharin <alex@kocharin.ru>
|
||||
Alex Kocharin <rlidwka@kocharin.ru>
|
||||
Alex Vernacchia <avernacchia@exacttarget.com>
|
||||
Alexander Makarenko <estliberitas@gmail.com>
|
||||
Alexandre-io <Alexandre-io@users.noreply.github.com>
|
||||
Aram Drevekenin <grimsniffer@gmail.com>
|
||||
Bart Dubois <dubcio@o2.pl>
|
||||
Barthélemy Vessemont <bvessemont@gmail.com>
|
||||
Brandon Nicholls <brandon.nicholls@gmail.com>
|
||||
Bren Norris <bnorris@enterrasolutions.com>
|
||||
Brett Trotter <brett.trotter@webfilings.com>
|
||||
Brian Peacock <bpeacock@fastfig.com>
|
||||
Cedric Darne <cdarne@hibernum.com>
|
||||
Chad Killingsworth <chad.killingsworth@banno.com>
|
||||
Chris Breneman <crispy@cluenet.org>
|
||||
Cody Droz <cody-geest@uiowa.edu>
|
||||
Daniel Rodríguez Rivero <rdanielo@gmail.com>
|
||||
Denis Babineau <denis.babineau@gmail.com>
|
||||
Emmanuel Narh <narhe@advisory.com>
|
||||
Fabio Poloni <fabio@APP-roved.com>
|
||||
Facundo Chambó <fchambo@despegar.com>
|
||||
Guilherme Bernal <dev@lbguilherme.com>
|
||||
Jakub Jirutka <jakub@jirutka.cz>
|
||||
James Newell <j.newell@nib.com.au>
|
||||
Jan Vansteenkiste <jan@vstone.eu>
|
||||
Jannis Achstetter <jannis.achstetter@schneider-electric.com>
|
||||
Jeremy Moritz <jeremy@jeremymoritz.com>
|
||||
John Gozde <johng@pandell.com>
|
||||
Jon de la Motte <jondlm@gmail.com>
|
||||
Joseph Gentle <me@josephg.com>
|
||||
José De Paz <josedepaz@users.noreply.github.com>
|
||||
Juan Carlos Picado <juan@encuestame.org>
|
||||
Juan Carlos Picado <juanpicado19@gmail.com>
|
||||
Juan Picado <juanpicado19@gmail.com>
|
||||
Juan Picado @jotadeveloper <juanpicado19@gmail.com>
|
||||
Kalman Speier <kalman.speier@gmail.com>
|
||||
Keyvan Fatehi <keyvanfatehi@gmail.com>
|
||||
Kody J. Peterson <kodypeterson@users.noreply.github.com>
|
||||
Madison Grubb <madison.grubb@itential.com>
|
||||
Manuel de Brito Fontes <aledbf@gmail.com>
|
||||
Mark Doeswijk <mark.doeswijk@marviq.com>
|
||||
Meeeeow <i@aka.mn>
|
||||
Meeeeow <me@async.sh>
|
||||
Michael Arnel <michael.arnel@gmail.com>
|
||||
Michael Crowe <michael@developrise.com>
|
||||
Miguel Mejias <miguelangelmejias@dorna.com>
|
||||
Miroslav Bajtoš <miroslav@strongloop.com>
|
||||
Nate Ziarek <natez@OSX12-L-NATEZ.local>
|
||||
Nick <nick.edelenbos@trimm.nl>
|
||||
Piotr Synowiec <psynowiec@gmail.com>
|
||||
Rafael Cesar <rafa.cesar@gmail.com>
|
||||
Robert Ewald <r3wald@gmail.com>
|
||||
Robert Groh <robert.groh@medesso.de>
|
||||
Robin Persson <rprssn@gmail.com>
|
||||
Romain Lai-King <romain.laiking@opentrust.com>
|
||||
Ryan Graham <r.m.graham@gmail.com>
|
||||
Ryan Graham <ryan@codingintrigue.co.uk>
|
||||
Sam Day <sday@atlassian.com>
|
||||
Tarun Garg <tarun1793@users.noreply.github.com>
|
||||
Thomas Cort <thomasc@ssimicro.com>
|
||||
Tom Vincent <git@tlvince.com>
|
||||
Trent Earl <trent@trentearl.com>
|
||||
Yannick Croissant <yannick.croissant@gmail.com>
|
||||
Yannick Galatol <ygalatol@teads.tv>
|
||||
cklein <trancesilken@gmail.com>
|
||||
danielo515 <rdanielo@gmail.com>
|
||||
jmwilkinson <j.wilkinson@f5.com>
|
||||
jotadeveloper <juanpicado19@gmail.com>
|
||||
jotadeveloper <juanpicado@users.noreply.github.com>
|
||||
maxlaverse <max@laverse.net>
|
||||
saheba <saheba@users.noreply.github.com>
|
||||
steve-p-com <github@steve-p.com>
|
||||
trent.earl <trent.earl@malauzai.com>
|
||||
643
CHANGELOG.md
Normal file
@@ -0,0 +1,643 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
<a name="3.0.0-alpha.0"></a>
|
||||
# [3.0.0-alpha.0](https://github.com/verdaccio/verdaccio/compare/v3.0.0-0...v3.0.0-alpha.0) (2018-01-07)
|
||||
|
||||
|
||||
|
||||
<a name="2.7.2"></a>
|
||||
## [2.7.2](https://github.com/verdaccio/verdaccio/compare/v2.7.1...v2.7.2) (2018-01-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* marked dependency to latest ([75bf2a8](https://github.com/verdaccio/verdaccio/commit/75bf2a8))
|
||||
|
||||
|
||||
|
||||
<a name="2.7.1"></a>
|
||||
## [2.7.1](https://github.com/verdaccio/verdaccio/compare/v2.7.0...v2.7.1) (2017-12-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* notification for multiple endpoints ([b605d1e](https://github.com/verdaccio/verdaccio/commit/b605d1e))
|
||||
|
||||
|
||||
|
||||
<a name="2.7.0"></a>
|
||||
# [2.7.0](https://github.com/verdaccio/verdaccio/compare/v2.6.6...v2.7.0) (2017-12-05)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add middleware plugins from fl4re/sinopia ([374a5e8](https://github.com/verdaccio/verdaccio/commit/374a5e8))
|
||||
* Log-rotation used to require a full restart of the application ([baa4763](https://github.com/verdaccio/verdaccio/commit/baa4763)
|
||||
* Add Kubernetes instructions ([ef1bd34](https://github.com/verdaccio/verdaccio/commit/ef1bd34)
|
||||
* Match shell title with web title ([ddcc493](https://github.com/verdaccio/verdaccio/commit/ddcc493)
|
||||
|
||||
|
||||
<a name="2.6.6"></a>
|
||||
## [2.6.6](https://github.com/verdaccio/verdaccio/compare/v2.6.5...v2.6.6) (2017-11-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* :bug: incorrect logo url with slash at the end of `url_prefix` ([859eccb](https://github.com/verdaccio/verdaccio/commit/859eccb))
|
||||
|
||||
|
||||
|
||||
<a name="2.6.5"></a>
|
||||
## [2.6.5](https://github.com/verdaccio/verdaccio/compare/v2.6.4...v2.6.5) (2017-11-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* upgrade node to fix long standing socket timeout issue ([bcc13ac](https://github.com/verdaccio/verdaccio/commit/bcc13ac))
|
||||
|
||||
|
||||
|
||||
<a name="2.6.4"></a>
|
||||
## [2.6.4](https://github.com/verdaccio/verdaccio/compare/v2.6.3...v2.6.4) (2017-10-31)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* :bug: incorrect resource and registry url while install on sub directory ([67e97a1](https://github.com/verdaccio/verdaccio/commit/67e97a1))
|
||||
|
||||
|
||||
|
||||
<a name="2.6.3"></a>
|
||||
## [2.6.3](https://github.com/verdaccio/verdaccio/compare/v2.6.2...v2.6.3) (2017-10-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Check if socket exists before removing ([e916a0f](https://github.com/verdaccio/verdaccio/commit/e916a0f))
|
||||
|
||||
|
||||
|
||||
<a name="2.6.2"></a>
|
||||
## [2.6.2](https://github.com/verdaccio/verdaccio/compare/v2.6.1...v2.6.2) (2017-10-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Remove unix socket before listen ([d42a41e](https://github.com/verdaccio/verdaccio/commit/d42a41e))
|
||||
|
||||
|
||||
|
||||
<a name="2.6.1"></a>
|
||||
## [2.6.1](https://github.com/verdaccio/verdaccio/compare/v2.6.0...v2.6.1) (2017-10-19)
|
||||
|
||||
|
||||
|
||||
<a name="2.6.0"></a>
|
||||
# [2.6.0](https://github.com/verdaccio/verdaccio/compare/v2.5.1...v2.6.0) (2017-10-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* plugin loader with logs ([d6ed202](https://github.com/verdaccio/verdaccio/commit/d6ed202))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add pfx support for https ([c84d567](https://github.com/verdaccio/verdaccio/commit/c84d567))
|
||||
|
||||
|
||||
|
||||
<a name="2.5.1"></a>
|
||||
## [2.5.1](https://github.com/verdaccio/verdaccio/compare/v2.5.0...v2.5.1) (2017-10-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix docker build failure due breaking changes in yarn ([c62e90f](https://github.com/verdaccio/verdaccio/commit/c62e90f))
|
||||
|
||||
|
||||
|
||||
<a name="2.5.0"></a>
|
||||
# [2.5.0](https://github.com/verdaccio/verdaccio/compare/v2.3.6...v2.5.0) (2017-10-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* :bug: check error code to prevent data loss ([5d73dca](https://github.com/verdaccio/verdaccio/commit/5d73dca)) fix [#329](https://github.com/verdaccio/verdaccio/issues/329)
|
||||
* Fix [#334](https://github.com/verdaccio/verdaccio/issues/334) UI failure on IE 11, add suppor for old browsers. ([f1f15be](https://github.com/verdaccio/verdaccio/commit/f1f15be))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* header authorization uplink ([7baf7cb](https://github.com/verdaccio/verdaccio/commit/7baf7cb))
|
||||
|
||||
|
||||
<a name="2.4.0"></a>
|
||||
# [2.4.0](https://github.com/verdaccio/verdaccio/compare/v2.3.6...v2.4.0) (2017-09-23)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* :bug: check error code to prevent data loss ([5d73dca](https://github.com/verdaccio/verdaccio/commit/5d73dca))
|
||||
* :bug: check error code to prevent data loss ([93aae05](https://github.com/verdaccio/verdaccio/commit/93aae05))
|
||||
* :bug: Package metadata cache not work ([4d6a447](https://github.com/verdaccio/verdaccio/commit/4d6a447))
|
||||
* Fixed bug with Maximum call stack size exceeded on packages web API ([#326](https://github.com/verdaccio/verdaccio/pull/326))
|
||||
* fix: :bug: Package metadata cache does not work ([#317](https://github.com/verdaccio/verdaccio/pull/317))
|
||||
* Debug log color in terminal is too dark ([#311](https://github.com/verdaccio/verdaccio/pull/311))
|
||||
* docs: Add new sections to documentation ([#308](https://github.com/verdaccio/verdaccio/pull/308))
|
||||
* Remove from web section not longer valid properties ([#307](https://github.com/verdaccio/verdaccio/pull/307)) ([#309](https://github.com/verdaccio/verdaccio/pull/309))
|
||||
* Fix possible data loss upstream ([#306](https://github.com/verdaccio/verdaccio/pull/306)) ([#300](https://github.com/verdaccio/verdaccio/pull/300))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Update node alpine version to 8.4.0 ([3f96ce3](https://github.com/verdaccio/verdaccio/commit/3f96ce3))
|
||||
|
||||
|
||||
|
||||
<a name="2.3.6"></a>
|
||||
## [2.3.6](https://github.com/verdaccio/verdaccio/compare/v2.3.5...v2.3.6) (2017-08-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* link was broken ([a9481cc](https://github.com/verdaccio/verdaccio/commit/a9481cc))
|
||||
* Correct accept header set for registry requests ([#295](https://github.com/verdaccio/verdaccio/pull/295))
|
||||
* Update SSL documentation ([#296](https://github.com/verdaccio/verdaccio/pull/296))
|
||||
* Fix auth process to check against username also and not just groups ([#293](https://github.com/verdaccio/verdaccio/pull/293))
|
||||
|
||||
|
||||
|
||||
<a name="2.3.5"></a>
|
||||
## [2.3.5](https://github.com/verdaccio/verdaccio/compare/v2.3.4...v2.3.5) (2017-08-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* configuration files inconsistencies, add unit test ([644c098](https://github.com/verdaccio/verdaccio/commit/644c098))
|
||||
* Remove accept header that seems cause issues [#285](https://github.com/verdaccio/verdaccio/issues/285) [#289](https://github.com/verdaccio/verdaccio/issues/289) and npm search fails ([fab8391](https://github.com/verdaccio/verdaccio/commit/fab8391))
|
||||
|
||||
|
||||
|
||||
<a name="2.3.4"></a>
|
||||
## [2.3.4](https://github.com/verdaccio/verdaccio/compare/v2.3.3...v2.3.4) (2017-07-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Docker image fails due lock file localhost references ([901a7be](https://github.com/verdaccio/verdaccio/commit/901a7be))
|
||||
|
||||
|
||||
|
||||
<a name="2.3.3"></a>
|
||||
## [2.3.3](https://github.com/verdaccio/verdaccio/compare/v2.3.2...v2.3.3) (2017-07-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* refactor [#268](https://github.com/verdaccio/verdaccio/issues/268) in a better way, amended to elegant way ([94fb6ad](https://github.com/verdaccio/verdaccio/commit/94fb6ad))
|
||||
|
||||
|
||||
|
||||
<a name="2.3.2"></a>
|
||||
## [2.3.2](https://github.com/verdaccio/verdaccio/compare/v2.3.0...v2.3.2) (2017-07-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* :bug: detail page can't handle scoped package ([1c9fbfc](https://github.com/verdaccio/verdaccio/commit/1c9fbfc))
|
||||
* [#268](https://github.com/verdaccio/verdaccio/issues/268) remove the accept header that avoids request with some regiestries ([e7dcf3c](https://github.com/verdaccio/verdaccio/commit/e7dcf3c))
|
||||
* [#78](https://github.com/verdaccio/verdaccio/issues/78) add new setting to allow publish when uplinks are offline ([430425c](https://github.com/verdaccio/verdaccio/commit/430425c))
|
||||
* broken link ([9fb0e14](https://github.com/verdaccio/verdaccio/commit/9fb0e14))
|
||||
* lint warning ([d0afe78](https://github.com/verdaccio/verdaccio/commit/d0afe78))
|
||||
* Param web.title from config.yaml does not work on docker image [#265](https://github.com/verdaccio/verdaccio/issues/265) ([b1a396d](https://github.com/verdaccio/verdaccio/commit/b1a396d))
|
||||
* undefined check ([ff96d2e](https://github.com/verdaccio/verdaccio/commit/ff96d2e))
|
||||
|
||||
|
||||
|
||||
## 2.3.1 (July 25, 2017)
|
||||
|
||||
- bug: Detail page can't handle scoped package - [#261](https://github.com/verdaccio/verdaccio/pull/261)
|
||||
- bug: can't publish a private package to verdaccio while offline - [#223](https://github.com/verdaccio/verdaccio/pull/223)
|
||||
- refactor: use light version of syntax highlighter - [#260](https://github.com/verdaccio/verdaccio/pull/260)
|
||||
|
||||
## 2.3.0 (July 22, 2017)
|
||||
|
||||
- feature: Refactor User Interface - [#220](https://github.com/verdaccio/verdaccio/pull/220)
|
||||
|
||||
## 2.2.7 (July 18, 2017)
|
||||
|
||||
- bug: fix running behind of loadbalancer with TLS termination - [#254](https://github.com/verdaccio/verdaccio/pull/254)
|
||||
|
||||
|
||||
## 2.2.6 (July 13, 2017)
|
||||
|
||||
- build: update node version due security update announcement - [#251](https://github.com/verdaccio/verdaccio/pull/251)
|
||||
|
||||
## 2.2.5 (July 4, 2017)
|
||||
|
||||
- Fixed adding the verdaccio user into the group - [#241](https://github.com/verdaccio/verdaccio/pull/241)
|
||||
|
||||
## 2.2.3 (July 4, 2017)
|
||||
|
||||
- Updated Dockerfile & added proper signal handling - [#239](https://github.com/verdaccio/verdaccio/pull/239)
|
||||
|
||||
## 2.2.2 (July 2, 2017)
|
||||
|
||||
- Improve Docker Build - [#181](https://github.com/verdaccio/verdaccio/pull/181)
|
||||
- Bugfix #73 `npm-latest` support - [#228](https://github.com/verdaccio/verdaccio/pull/228)
|
||||
- Add [documentation](https://github.com/verdaccio/verdaccio/tree/master/wiki) - [#229](https://github.com/verdaccio/verdaccio/pull/229)
|
||||
|
||||
## 2.2.1 (June 17, 2017)
|
||||
|
||||
- config section moved up, some keywords added - [#211](https://github.com/verdaccio/verdaccio/pull/211)
|
||||
- docs: update docs with behind reverse proxy - [#214](https://github.com/verdaccio/verdaccio/pull/214)
|
||||
- Add remote ip to request log - [#216](https://github.com/verdaccio/verdaccio/pull/216)
|
||||
|
||||
## 2.2.0 (June 8, 2017)
|
||||
- Allow url_prefix to be only the path - ([@BartDubois ]((https://github.com/BartDubois))) in [#197](https://github.com/verdaccio/verdaccio/pull/197)
|
||||
- Apache reverse proxy configuration - ([@mysiar ]((https://github.com/mysiar))) in [#198](https://github.com/verdaccio/verdaccio/pull/198)
|
||||
- don't blindly clobber local dist-tags - ([@rmg ]((https://github.com/rmg))) in [#206](https://github.com/verdaccio/verdaccio/pull/206)
|
||||
- Adds cache option to uplinks - ([@silkentrance ]((https://github.com/silkentrance))) in [#132](https://github.com/verdaccio/verdaccio/pull/132)
|
||||
|
||||
## 2.1.7 (May 14, 2017)
|
||||
- Fixed publish fail in YARN - ([@W1U02]((https://github.com/W1U02)) in [#183](https://github.com/verdaccio/verdaccio/pull/183)
|
||||
|
||||
## 2.1.6 (May 12, 2017)
|
||||
- Fix https certificates safety check - ([@juanpicado]((https://github.com/juanpicado))) in [#189](https://github.com/verdaccio/verdaccio/pull/189)
|
||||
- Fix upstream search not work with gzip - ([@Meeeeow](https://github.com/Meeeeow) in [#170](https://github.com/verdaccio/verdaccio/pull/170))
|
||||
- Add additional requirement to output message - ([@marnel ](https://github.com/marnel) in [#184](https://github.com/verdaccio/verdaccio/pull/184))
|
||||
- Implement npm ping endpoint - ([@juanpicado]((https://github.com/juanpicado))) in [#179](https://github.com/verdaccio/verdaccio/pull/179)
|
||||
- Add support for multiple notification endpoints to existing webhook - ([@ryan-codingintrigue]((https://github.com/ryan-codingintrigue)))
|
||||
in [#108](https://github.com/verdaccio/verdaccio/pull/108)
|
||||
|
||||
|
||||
|
||||
## 2.1.5 (April 22, 2017)
|
||||
- fix upstream search - ([@Meeeeow](https://github.com/Meeeeow) in [#166](https://github.com/verdaccio/verdaccio/pull/166))
|
||||
- Fix search feature - ([@Meeeeow](https://github.com/Meeeeow) in [#163](https://github.com/verdaccio/verdaccio/pull/163))
|
||||
- add docs about run behind proxy - ([@Meeeeow](https://github.com/Meeeeow) in [#160](https://github.com/verdaccio/verdaccio/pull/160))
|
||||
|
||||
## 2.1.4 (April 13, 2017)
|
||||
- Added Nexus Repository OSS as similar existing software - ([@nedelenbos030](https://github.com/nedelenbos) in [#147](https://github.com/verdaccio/verdaccio/pull/147))
|
||||
- Increase verbose on notify request - ([@juanpicado](https://github.com/juanpicado) in [#153](https://github.com/verdaccio/verdaccio/pull/153))
|
||||
- Add fallback support to previous config files - ([@juanpicado](https://github.com/juanpicado) in [#155](https://github.com/verdaccio/verdaccio/pull/155))
|
||||
- Allows retrieval of all local package contents via http://server/-/search/* - ([@Verikon](https://github.com/Verikon) in [#152](https://github.com/verdaccio/verdaccio/pull/155))
|
||||
|
||||
## 2.1.3 (March 29, 2017)
|
||||
- [GH-83] create systemd service - ([@030](https://github.com/030) in [#89](https://github.com/verdaccio/verdaccio/pull/89))
|
||||
- optional scope in the readme package name. - ([@psychocode](https://github.com/psychocode) in [#136](https://github.com/verdaccio/verdaccio/pull/136))
|
||||
- Added docker image for rpi - ([@danielo515](https://github.com/danielo515) in [#137](https://github.com/verdaccio/verdaccio/pull/137))
|
||||
- Allow configuring a tagline that is displayed on the webpage between. ([@jachstet-sea](https://github.com/jachstet-sea) in [#143](https://github.com/verdaccio/verdaccio/pull/143))
|
||||
|
||||
## 2.1.2 (March 9, 2017)
|
||||
- Contribute guidelines - ([@juanpicado](https://github.com/juanpicado) in [#133](https://github.com/verdaccio/verdaccio/pull/133))
|
||||
- fix(plugin-loader): plugins verdaccio-* overwrite by sinopia- ([@Alexandre-io](https://github.com/Alexandre-io) in [#129](https://github.com/verdaccio/verdaccio/pull/129))
|
||||
|
||||
## 2.1.1 (February 7, 2017)
|
||||
|
||||
- [GH-86] updated readme to point to new chef cookbook ([@kgrubb](https://github.com/kgrubb) in [#117](https://github.com/verdaccio/verdaccio/pull/117))
|
||||
- [GH-88] rename to Verdaccio instead of Sinopia ([@kgrubb](https://github.com/kgrubb) in [#93](https://github.com/verdaccio/verdaccio/pull/93))
|
||||
- Unit testing coverage ([@juanpicado](https://github.com/juanpicado) in [#116](https://github.com/verdaccio/verdaccio/issues/116))
|
||||
- Allow htpasswd-created users to log in [@imsnif](https://github.com/imsnif) in [#112](https://github.com/verdaccio/verdaccio/issues/112))
|
||||
- remove travis io.js support ([@juanpicado](https://github.com/juanpicado) in [#115](https://github.com/verdaccio/verdaccio/issues/115))
|
||||
- rename clean up ([@juanpicado](https://github.com/juanpicado) in [#114](https://github.com/verdaccio/verdaccio/issues/114))
|
||||
- _npmUser / author not showing up ([@juanpicado](https://github.com/juanpicado) in [#65](https://github.com/verdaccio/verdaccio/issues/65))
|
||||
- Docs: correct config attribute `proxy_access` ([@robertgroh](https://github.com/robertgroh) in [#96](https://github.com/verdaccio/verdaccio/pull/96))
|
||||
- Problem with docker.yaml ([@josedepaz](https://github.com/josedepaz) in [#72](https://github.com/verdaccio/verdaccio/pull/72))
|
||||
- Prevent logging of user and password ([@tlvince](https://github.com/tlvince) in [#94](https://github.com/verdaccio/verdaccio/pull/94))
|
||||
- Updated README.md to reflect the availability of the docker image ([@jmwilkinson](https://github.com/jmwilkinson)) in [#71](https://github.com/verdaccio/verdaccio/pull/71))
|
||||
|
||||
## 2.1.0 (October 11, 2016)
|
||||
|
||||
- Use __dirname to resolve local plugins ([@aledbf](https://github.com/aledbf) in [#25](https://github.com/verdaccio/verdaccio/pull/25))
|
||||
- Fix npm cli logout ([@plitex](https://github.com/plitex) in [#47](https://github.com/verdaccio/verdaccio/pull/47))
|
||||
- Add log format: pretty-timestamped ([@jachstet-sea](https://github.com/jachstet-sea) in [#68](https://github.com/verdaccio/verdaccio/pull/68))
|
||||
- Allow adding/overriding HTTP headers of uplinks via config ([@jachstet-sea](https://github.com/jachstet-sea) in [#67](https://github.com/verdaccio/verdaccio/pull/67))
|
||||
- Update Dockerfile to fix failed start ([@denisbabineau](https://github.com/denisbabineau) in [#62](https://github.com/verdaccio/verdaccio/pull/62))
|
||||
- Update the configs to fully support proxying scoped packages ([@ChadKillingsworth](https://github.com/ChadKillingsworth) in [#60](https://github.com/verdaccio/verdaccio/pull/60))
|
||||
- Prevent the server from crashing if a repo is accessed that the user does not have access to ([@crowebird](https://github.com/crowebird) in [#58](https://github.com/verdaccio/verdaccio/pull/58))
|
||||
- Hook system, for integration into things like slack
|
||||
- Register entry partial even if custom template is provided ([@plitex](https://github.com/plitex) in [#46](https://github.com/verdaccio/verdaccio/pull/46))
|
||||
- Rename process to verdaccio ([@juanpicado](https://github.com/juanpicado) in [#57](https://github.com/verdaccio/verdaccio/pull/57))
|
||||
|
||||
|
||||
## 7 Jun 2015, version 1.4.0
|
||||
|
||||
- avoid sending X-Forwarded-For through proxies (issues [#19](https://github.com/rlidwka/sinopia/issues/19), [#254](https://github.com/rlidwka/sinopia/issues/254))
|
||||
- fix multiple issues in search (issues [#239](https://github.com/rlidwka/sinopia/issues/239), [#253](https://github.com/rlidwka/sinopia/pull/253))
|
||||
- fix "maximum stack trace exceeded" errors in auth (issue [#258](https://github.com/rlidwka/sinopia/issues/258))
|
||||
|
||||
## 10 May 2015, version 1.3.0
|
||||
|
||||
- add dist-tags endpoints (issue [#211](https://github.com/rlidwka/sinopia/issues/211))
|
||||
|
||||
## 22 Apr 2015, version 1.2.2
|
||||
|
||||
- fix access control regression in `1.2.1` (issue [#238](https://github.com/rlidwka/sinopia/issues/238))
|
||||
- add a possibility to bind on unix sockets (issue [#237](https://github.com/rlidwka/sinopia/issues/237))
|
||||
|
||||
## 11 Apr 2015, version 1.2.1
|
||||
|
||||
- added more precise authorization control to auth plugins (issue [#207](https://github.com/rlidwka/sinopia/pull/207))
|
||||
|
||||
## 29 Mar 2015, version 1.1.0
|
||||
|
||||
- add a possibility to listen on multiple ports (issue [#172](https://github.com/rlidwka/sinopia/issues/172))
|
||||
- added https support (issues [#71](https://github.com/rlidwka/sinopia/issues/71), [#166](https://github.com/rlidwka/sinopia/issues/166))
|
||||
- added an option to use a custom template for web UI (issue [#208](https://github.com/rlidwka/sinopia/pull/208))
|
||||
- remove "from" and "resolved" fields from shrinkwrap (issue [#204](https://github.com/rlidwka/sinopia/issues/204))
|
||||
- fix hanging when rendering readme (issue [#206](https://github.com/rlidwka/sinopia/issues/206))
|
||||
- fix logger-related crash when using sinopia as a library
|
||||
- all requests to uplinks should now have proper headers
|
||||
|
||||
## 12 Feb 2015, version 1.0.1
|
||||
|
||||
- fixed issue with `max_users` option (issue [#184](https://github.com/rlidwka/sinopia/issues/184))
|
||||
- fixed issue with not being able to disable the web interface (issue [#195](https://github.com/rlidwka/sinopia/pull/195))
|
||||
- fixed 500 error while logging in with npm (issue [#200](https://github.com/rlidwka/sinopia/pull/200))
|
||||
|
||||
## 26 Jan 2015, version 1.0.0
|
||||
|
||||
- switch markdown parser from `remarkable` to `markdown-it`
|
||||
- update `npm-shrinkwrap.json`
|
||||
- now downloading tarballs from upstream using the same protocol as for metadata (issue [#166](https://github.com/rlidwka/sinopia/issues/166))
|
||||
|
||||
## 22 Dec 2014, version 1.0.0-beta.2
|
||||
|
||||
- fix windows behavior when `$HOME` isn't set (issue [#177](https://github.com/rlidwka/sinopia/issues/177))
|
||||
- fix sanitization for highlighted code blocks in readme (issue [render-readme/#1](https://github.com/rlidwka/render-readme/issues/1))
|
||||
|
||||
## 15 Dec 2014, version 1.0.0-beta
|
||||
|
||||
- Markdown rendering is now a lot safer (switched to remarkable+sanitizer).
|
||||
- Header in web interface is now static instead of fixed.
|
||||
- `GET /-/all?local` now returns list of all local packages (issue [#179](https://github.com/rlidwka/sinopia/pull/179))
|
||||
|
||||
## 5 Dec 2014, version 1.0.0-alpha.3
|
||||
|
||||
- Fixed an issue with scoped packages in tarballs
|
||||
|
||||
## 25 Nov 2014, version 1.0.0-alpha
|
||||
|
||||
- Config file is now created in `$XDG_CONFIG_HOME` instead of current directory.
|
||||
|
||||
It is printed to stdout each time sinopia starts, so you hopefully won't have any trouble locating it.
|
||||
|
||||
The change is made so sinopia will pick up the same config no matter which directory it is started from.
|
||||
|
||||
- Default config file is now a lot shorter, and it is very permissive by default. You could use sinopia without modifying it on your own computer, but definitely should change it on production.
|
||||
|
||||
- Added auth tokens. For now, auth token is just a username+password encrypted for security reasons, so it isn't much different from basic auth, but allows to avoid "always-auth" npm setting.
|
||||
|
||||
- Added scoped packages.
|
||||
|
||||
Please note that default `*` mask won't apply to them. You have to use masks like `@scope/*` to match scoped packages, or `**` to match everything.
|
||||
|
||||
- Enabled web interface by default. Wow, it looks almost ready now!
|
||||
|
||||
- All dependencies are bundled now, so uncompatible changes in 3rd party stuff in the future won't ruin the day.
|
||||
|
||||
## 1 Nov 2014, version 0.13.2
|
||||
|
||||
- fix `EPERM`-related crashes on windows (issue [#67](https://github.com/rlidwka/sinopia/issues/67))
|
||||
|
||||
## 22 Oct 2014, version 0.13.0
|
||||
|
||||
- web interface:
|
||||
- web page layout improved (issue [#141](https://github.com/rlidwka/sinopia/pull/141))
|
||||
- latest version is now displayed correctly (issues [#120](https://github.com/rlidwka/sinopia/issues/120), [#123](https://github.com/rlidwka/sinopia/issues/123), [#143](https://github.com/rlidwka/sinopia/pull/143))
|
||||
- fixed web interface working behind reverse proxy (issues [#145](https://github.com/rlidwka/sinopia/issues/145), [#147](https://github.com/rlidwka/sinopia/issues/147))
|
||||
|
||||
## 2 Oct 2014, version 0.12.1
|
||||
|
||||
- web interface:
|
||||
- update markdown CSS (issue [#137](https://github.com/rlidwka/sinopia/pull/137))
|
||||
- jquery is now served locally (issue [#133](https://github.com/rlidwka/sinopia/pull/133))
|
||||
|
||||
- bugfixes:
|
||||
- fix "offset out of bounds" issues (issue [sinopia-htpasswd/#2](https://github.com/rlidwka/sinopia-htpasswd/issues/2))
|
||||
- "max_users" in htpasswd plugin now work correctly (issue [sinopia-htpasswd/#3](https://github.com/rlidwka/sinopia-htpasswd/issues/3))
|
||||
- fix `ENOTDIR, open '.sinopia-db.json'` error in npm search (issue [#122](https://github.com/rlidwka/sinopia/issues/122))
|
||||
|
||||
## 25 Sep 2014, version 0.12.0
|
||||
|
||||
- set process title to `sinopia`
|
||||
|
||||
- web interface bugfixes:
|
||||
- save README data for each package (issue [#100](https://github.com/rlidwka/sinopia/issues/100))
|
||||
- fix crashes related to READMEs (issue [#128](https://github.com/rlidwka/sinopia/issues/128))
|
||||
|
||||
## 18 Sep 2014, version 0.11.3
|
||||
|
||||
- fix 500 error in adduser function in sinopia-htpasswd (issue [#121](https://github.com/rlidwka/sinopia/issues/121))
|
||||
- fix fd leak in authenticate function in sinopia-htpasswd (issue [#116](https://github.com/rlidwka/sinopia/issues/116))
|
||||
|
||||
## 15 Sep 2014, version 0.11.1
|
||||
|
||||
- mark crypt3 as optional (issue [#119](https://github.com/rlidwka/sinopia/issues/119))
|
||||
|
||||
## 15 Sep 2014, version 0.11.0
|
||||
|
||||
- Added auth plugins (issue [#99](https://github.com/rlidwka/sinopia/pull/99))
|
||||
|
||||
Now you can create your own auth plugin based on [sinopia-htpasswd](https://github.com/rlidwka/sinopia-htpasswd) package.
|
||||
|
||||
- WIP: web interface (issue [#73](https://github.com/rlidwka/sinopia/pull/73))
|
||||
|
||||
It is disabled by default, and not ready for production yet. Use at your own risk. We will enable it in the next major release.
|
||||
|
||||
- Some modules are now bundled by default, so users won't have to install stuff from git. We'll see what issues it causes, maybe all modules will be bundled in the future like in npm.
|
||||
|
||||
## 14 Sep 2014, version 0.10.x
|
||||
|
||||
*A bunch of development releases that are broken in various ways. Please use 0.11.x instead.*
|
||||
|
||||
## 7 Sep 2014, version 0.9.3
|
||||
|
||||
- fix several bugs that could cause "can't set headers" exception
|
||||
|
||||
## 3 Sep 2014, version 0.9.2
|
||||
|
||||
- allow "pretty" format for logging into files (issue [#88](https://github.com/rlidwka/sinopia/pull/88))
|
||||
- remove outdated user existence check (issue [#115](https://github.com/rlidwka/sinopia/pull/115))
|
||||
|
||||
## 11 Aug 2014, version 0.9.1
|
||||
|
||||
- filter falsey _npmUser values (issue [#95](https://github.com/rlidwka/sinopia/pull/95))
|
||||
- option not to cache third-party files (issue [#85](https://github.com/rlidwka/sinopia/issues/85))
|
||||
|
||||
## 26 Jul 2014, version 0.9.0
|
||||
|
||||
- new features:
|
||||
- add search functionality (issue [#65](https://github.com/rlidwka/sinopia/pull/65))
|
||||
- allow users to authenticate using .htpasswd (issue [#44](https://github.com/rlidwka/sinopia/issues/44))
|
||||
- allow user registration with "npm adduser" (issue [#44](https://github.com/rlidwka/sinopia/issues/44))
|
||||
|
||||
- bugfixes:
|
||||
- avoid crashing when res.socket is null (issue [#89](https://github.com/rlidwka/sinopia/issues/89))
|
||||
|
||||
## 20 Jun 2014, version 0.8.2
|
||||
|
||||
- allow '@' in package/tarball names (issue [#75](https://github.com/rlidwka/sinopia/issues/75))
|
||||
- other minor fixes (issues [#77](https://github.com/rlidwka/sinopia/issues/77), [#80](https://github.com/rlidwka/sinopia/issues/80))
|
||||
|
||||
## 14 Apr 2014, version 0.8.1
|
||||
|
||||
- "latest" tag is now always present in any package (issue [#63](https://github.com/rlidwka/sinopia/issues/63))
|
||||
- tags created with new npm versions (>= 1.3.19) can now be published correctly
|
||||
|
||||
## 1 Apr 2014, version 0.8.0
|
||||
|
||||
- use gzip compression whenever possible (issue [#54](https://github.com/rlidwka/sinopia/issues/54))
|
||||
- set `ignore_latest_tag` to false, it should now be more compatible with npm registry
|
||||
- make `fs-ext` optional (issue [#61](https://github.com/rlidwka/sinopia/issues/61))
|
||||
|
||||
## 29 Mar 2014, version 0.7.1
|
||||
|
||||
- added `ignore_latest_tag` config param (issues [#55](https://github.com/rlidwka/sinopia/issues/55), [#59](https://github.com/rlidwka/sinopia/issues/59))
|
||||
- reverted PR [#56](https://github.com/rlidwka/sinopia/issues/56) (see discussion in [#57](https://github.com/rlidwka/sinopia/issues/57))
|
||||
|
||||
## 13 Mar 2014, version 0.7.0
|
||||
|
||||
- config changes:
|
||||
- breaking change: all time intervals are now specified in *seconds* instead of *milliseconds* for the sake of consistency. Change `timeout` if you have one!
|
||||
- all time intervals now can be specified in [nginx notation](http://wiki.nginx.org/ConfigNotation), for example `1m 30s` will specify a 90 seconds timeout
|
||||
- added `maxage` option to avoid asking public registry for the same data too often (issue [#47](https://github.com/rlidwka/sinopia/issues/47))
|
||||
- added `max_fails` and `fail_timeout` options to reduce amount of requests to public registry when it's down (issue [#7](https://github.com/rlidwka/sinopia/issues/7))
|
||||
|
||||
- bug fixes:
|
||||
- fix crash when headers are sent twice (issue [#52](https://github.com/rlidwka/sinopia/issues/52))
|
||||
- all tarballs are returned with `Content-Length`, which allows [yapm](https://github.com/rlidwka/yapm) to estimate download time
|
||||
- when connection to public registry is interrupted when downloading a tarball, we no longer save incomplete tarball to the disk
|
||||
|
||||
- other changes:
|
||||
- 404 errors are returned in couchdb-like manner (issue [#56](https://github.com/rlidwka/sinopia/issues/56))
|
||||
|
||||
## 5 Mar 2014, version 0.6.7
|
||||
|
||||
- pin down express@3 version, since sinopia doesn't yet work with express@4
|
||||
|
||||
## 28 Feb 2014, version 0.6.5
|
||||
|
||||
- old SSL keys for npm are removed, solves `SELF_SIGNED_CERT_IN_CHAIN` error
|
||||
|
||||
## 3 Feb 2014, version 0.6.3
|
||||
|
||||
- validate tags and versions (issue [#40](https://github.com/rlidwka/sinopia/issues/40))
|
||||
- don't crash when process.getuid doesn't exist (issue [#41](https://github.com/rlidwka/sinopia/issues/41))
|
||||
|
||||
## 18 Jan 2014, version 0.6.2
|
||||
|
||||
- adding config param to specify upload limits (issue [#39](https://github.com/rlidwka/sinopia/issues/39))
|
||||
- making loose semver versions work (issue [#38](https://github.com/rlidwka/sinopia/issues/38))
|
||||
|
||||
## 13 Jan 2014, version 0.6.1
|
||||
|
||||
- support setting different storage paths for different packages (issue [#35](https://github.com/rlidwka/sinopia/issues/35))
|
||||
|
||||
## 30 Dec 2013, version 0.6.0
|
||||
|
||||
- tag support (issue [#8](https://github.com/rlidwka/sinopia/issues/8))
|
||||
- adding support for npm 1.3.19+ behaviour (issue [#31](https://github.com/rlidwka/sinopia/issues/31))
|
||||
- removing all support for proxying publish requests to uplink (too complex)
|
||||
|
||||
## 26 Dec 2013, version 0.5.9
|
||||
|
||||
- fixing bug with bad Accept header (issue [#32](https://github.com/rlidwka/sinopia/issues/32))
|
||||
|
||||
## 20 Dec 2013, version 0.5.8
|
||||
|
||||
- fixed a warning from js-yaml
|
||||
- don't color multiline strings in logs output
|
||||
- better error messages in various cases
|
||||
- test format changed
|
||||
|
||||
## 15 Dec 2013, version 0.5.7
|
||||
|
||||
- try to fetch package from uplinks if user requested a tarball we don't know about (issue [#29](https://github.com/rlidwka/sinopia/issues/29))
|
||||
- security fix: set express.js to production mode so we won't return stack traces to the user in case of errors
|
||||
|
||||
## 11 Dec 2013, version 0.5.6
|
||||
|
||||
- fixing a few crashes related to tags
|
||||
|
||||
## 8 Dec 2013, version 0.5.4
|
||||
|
||||
- latest tag always shows highest version available (issue [#8](https://github.com/rlidwka/sinopia/issues/8))
|
||||
- added a configurable timeout for requests to uplinks (issue [#18](https://github.com/rlidwka/sinopia/issues/18))
|
||||
- users with bad authentication header are considered not logged in (issue [#17](https://github.com/rlidwka/sinopia/issues/17))
|
||||
|
||||
## 24 Nov 2013, version 0.5.3
|
||||
|
||||
- added proxy support for requests to uplinks (issue [#13](https://github.com/rlidwka/sinopia/issues/13))
|
||||
- changed license from default BSD to WTFPL
|
||||
|
||||
## 26 Oct 2013, version 0.5.2
|
||||
|
||||
- server now supports unpublishing local packages
|
||||
- added fs-ext dependency (flock)
|
||||
- fixed a few face conditions
|
||||
|
||||
## 20 Oct 2013, version 0.5.1
|
||||
|
||||
- fixed a few errors related to logging
|
||||
|
||||
## 12 Oct 2013, version 0.5.0
|
||||
|
||||
- using bunyan as a log engine
|
||||
- pretty-formatting colored logs to stdout by default
|
||||
- ask user before creating any config files
|
||||
|
||||
## 5 Oct 2013, version 0.4.3
|
||||
|
||||
- basic tags support for npm (read-only)
|
||||
- npm star/unstar calls now return proper error
|
||||
|
||||
## 29 Sep 2013, version 0.4.2
|
||||
|
||||
## 28 Sep 2013, version 0.4.1
|
||||
|
||||
- using mocha for tests now
|
||||
- making use of streams2 api, doesn't work on 0.8 anymore
|
||||
- basic support for uploading packages to other registries
|
||||
|
||||
## 27 Sep 2013, version 0.4.0
|
||||
|
||||
- basic test suite
|
||||
- storage path in config is now relative to config file location, not cwd
|
||||
- proper cleanup for temporary files
|
||||
|
||||
## 12 Jul 2013, version 0.3.2
|
||||
|
||||
## 4 Jul 2013, version 0.3.1
|
||||
|
||||
- using ETag header for all json output, based on md5
|
||||
|
||||
## 20 Jun 2013, version 0.3.0
|
||||
|
||||
- compression for http responses
|
||||
- requests for files to uplinks are now streams (no buffering)
|
||||
- tarballs are now cached locally
|
||||
|
||||
## 19 Jun 2013, version 0.2.0
|
||||
|
||||
- config file changed, packages is now specified with minimatch
|
||||
- ability to retrieve all packages from another registry (i.e. npmjs)
|
||||
|
||||
## 14 Jun 2013, version 0.1.1
|
||||
|
||||
- config is now autogenerated
|
||||
- tarballs are now read/written from fs using streams (no buffering)
|
||||
|
||||
## 9 Jun 2013, version 0.1.0
|
||||
|
||||
- first npm version
|
||||
- ability to publish packages and retrieve them locally
|
||||
- basic authentication/access control
|
||||
|
||||
## 22 May 2013, version 0.0.0
|
||||
|
||||
- first commits
|
||||
46
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at verdaccio.npm@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
234
CONTRIBUTING.md
Normal file
@@ -0,0 +1,234 @@
|
||||
# Contributing to Verdaccio
|
||||
|
||||
We are happy you wish to contribute this project, for that reason we want to board you with this guide.
|
||||
|
||||
## How I contribute?
|
||||
|
||||
|
||||
### Ways to contribute
|
||||
|
||||
There are many ways to contribute to the Verdaccio Project. Here’s a list of technical contributions with increasing levels of involvement and required knowledge of Verdaccio's code and operations.
|
||||
|
||||
* [Reporting a Bug](CONTRIBUTING.md#reporting-a-bug)
|
||||
* [Request Features](CONTRIBUTING.md#request-features)
|
||||
* [Plugins](CONTRIBUTING.md#plugins)
|
||||
* [Improve the Documentation](wiki/README.md)
|
||||
|
||||
Please read carefully this document. It will guide you to provide maintainers and readers valuable information to boots the process solve the issue or evaluate your proposal.
|
||||
|
||||
## Reporting a Bug
|
||||
|
||||
We welcome clear bug reports. If you've found a bug in Verdaccio that isn't a security risk, please file a report in our [issue tracker](https://github.com/verdaccio/verdaccio/issues). Before you file your issue, search to see if it has already been reported. If so, up-vote (using GitHub reactions) or add additional helpful details to the existing issue to show that it's affecting multiple people.
|
||||
|
||||
### Check if there's a simple solution in the wiki.
|
||||
|
||||
Some of the most popular topics can be found in our [wiki](https://github.com/verdaccio/verdaccio/wiki), that would be the first place to look at the topic you are interested.
|
||||
|
||||
### Questions & Chat
|
||||
|
||||
We have tagged questions for easy follow up under the tag [questions](https://github.com/verdaccio/verdaccio/labels/question). Additionaly, I'd recommend to deliver questions in the new chat as **#questions/#development** channels at [gitter](https://gitter.im/verdaccio/).
|
||||
|
||||
### Look at the past
|
||||
|
||||
* Verdaccio is a fork of `sinopia@1.4.0`, thereforce, there is a huge [database of tickets](https://github.com/rlidwka/sinopia/issues) in the original projet. It's a good place to find answers.
|
||||
* Questions under the tag of [sinopia](http://stackoverflow.com/questions/tagged/sinopia) or [verdaccio](http://stackoverflow.com/search?q=verdaccio) at Stackoverflow might be helpful.
|
||||
|
||||
### Using the issue tracker
|
||||
|
||||
The issue tracker is a channel were mostly users/developers post.
|
||||
|
||||
#### I want to report a bug
|
||||
|
||||
We considere a bug a feature that is not working as is described in the documentation. Before reporting a bug follow the next steps:
|
||||
|
||||
1. Use the GitHub issue search — check if the issue has already been reported.
|
||||
|
||||
2. Check if the issue has been fixed — try to reproduce it using the latest master or development branch in the repository.
|
||||
|
||||
Verdaccio still does not support all npm commands due either in the initial design were not considered important or nobody has request it yet.
|
||||
|
||||
## Request Features
|
||||
|
||||
A new feature is always welcome, thus, analyse whether your idea fits in the scope of the project and elaborate your request providing enough context, for instance:
|
||||
|
||||
* A wide description the advantages of your request.
|
||||
* It's compatible with `npm` and `yarn`?
|
||||
* You might implement your feature and provide a forked repository as example.
|
||||
* Whatever you have on mind 🤓.
|
||||
|
||||
### Submitting a Pull Request
|
||||
The following are the general steps you should follow in creating a pull request. Subsequent pull requests only need
|
||||
to follow step 3 and beyond:
|
||||
|
||||
1. Fork the repository on GitHub
|
||||
2. Clone the forked repository to your machine
|
||||
3. Create a "feature" branch in your local repository
|
||||
4. Make your changes and commit them to your local repository
|
||||
5. Rebase and push your commits to your GitHub remote fork/repository
|
||||
6. Issue a Pull Request to the official repository
|
||||
7. Your Pull Request is reviewed by a committer and merged into the repository
|
||||
|
||||
*Note*: While there are other ways to accomplish the steps using other tools, the examples here will assume the most
|
||||
actions will be performed via the `git` command line.
|
||||
|
||||
### 1. Fork the Repository
|
||||
|
||||
When logged in to your GitHub account, and you are viewing one of the main repositories, you will see the *Fork* button.
|
||||
Clicking this button will show you which repositories you can fork to. Choose your own account. Once the process
|
||||
finishes, you will have your own repository that is "forked" from the official one.
|
||||
|
||||
Forking is a GitHub term and not a git term. Git is a wholly distributed source control system and simply worries
|
||||
about local and remote repositories and allows you to manage your code against them. GitHub then adds this additional
|
||||
layer of structure of how repositories can relate to each other.
|
||||
|
||||
### 2. Clone the Forked Repository
|
||||
|
||||
Once you have successfully forked your repository, you will need to clone it locally to your machine:
|
||||
|
||||
```bash
|
||||
$ git clone --recursive git@github.com:username/verdaccio.git verdaccio
|
||||
```
|
||||
|
||||
This will clone your fork to your current path in a directory named `verdaccio`.
|
||||
|
||||
You should also set up the `upstream` repository. This will allow you to take changes from the "master" repository
|
||||
and merge them into your local clone and then push them to your GitHub fork:
|
||||
|
||||
```bash
|
||||
$ cd verdaccio
|
||||
$ git remote add upstream git@github.com:verdaccio/verdaccio.git
|
||||
$ git fetch upstream
|
||||
```
|
||||
|
||||
Then you can retrieve upstream changes and rebase on them into your code like this:
|
||||
|
||||
```bash
|
||||
$ git pull --rebase upstream master
|
||||
```
|
||||
|
||||
For more information on maintaining a fork, please see the GitHub Help article [Fork a Repo](https://help.github.com/articles/fork-a-repo/) and information on
|
||||
[rebasing](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) from git.
|
||||
|
||||
### 3. Create a Branch
|
||||
|
||||
The easiest workflow is to keep your master branch in sync with the upstream branch and do not locate any of your own
|
||||
commits in that branch. When you want to work on a new feature, you then ensure you are on the master branch and create
|
||||
a new branch from there. While the name of the branch can be anything, it can often be easy to use the issue number
|
||||
you might be working on (if an issue was opened prior to opening a pull request). For example:
|
||||
|
||||
```bash
|
||||
$ git checkout -b issue-12345 master
|
||||
Switched to a new branch 'issue-12345'
|
||||
```
|
||||
|
||||
You will then be on the feature branch. You can verify what branch you are on like this:
|
||||
|
||||
```bash
|
||||
$ git status
|
||||
# On branch issue-12345
|
||||
nothing to commit, working directory clean
|
||||
```
|
||||
|
||||
### 4. Make Changes and Commit
|
||||
|
||||
#### Before commit
|
||||
|
||||
At this point you have ready your changes, your new feature it's ready to be shipped, but, to avoid delays to merge, please be aware the build must past.
|
||||
|
||||
Before commit, run the test command:
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
It won't have **eslint** errors and **all test must past**. Then, and only then, you should push and ship your **PR**.
|
||||
|
||||
*At the moment of this writing, there are plenty of warning to clean, but please warnings are not fails, but try to don't commit code with warnings*
|
||||
|
||||
#### After testing your changes
|
||||
|
||||
Now you just need to make your changes. Once you have finished your changes (and tested them) you need to commit them
|
||||
to your local repository (assuming you have staged your changes for committing):
|
||||
|
||||
```bash
|
||||
$ git status
|
||||
# On branch issue-12345
|
||||
# Changes to be committed:
|
||||
# (use "git reset HEAD <file>..." to unstage)
|
||||
#
|
||||
# modified: somefile.js
|
||||
#
|
||||
$ git commit -m "fix: correct some defect, fixes #12345, refs #12346"
|
||||
[t12345 0000000] fix: correct some defect, fixes #12345, refs #12346
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
```
|
||||
|
||||
#### Git Commit Guidelines
|
||||
|
||||
We follow the [conventional commit messages](https://conventionalcommits.org/) convention in order to automate Changelog generation and auto semantic versioning based on commit messages.
|
||||
|
||||
* feat: A new feature
|
||||
* fix: A bug fix
|
||||
|
||||
A commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in semantic versioning).
|
||||
|
||||
eg:
|
||||
```
|
||||
feat: xxxxxxxxxx
|
||||
````
|
||||
|
||||
A commit of the type fix patches a bug in your codebase (this correlates with PATCH in semantic versioning).
|
||||
|
||||
eg:
|
||||
```
|
||||
fix: xxxxxxxxxx
|
||||
````
|
||||
|
||||
Commits types as `docs:`,`style:`,`refactor:`,`perf:`,`test:` and `chore:` are valid but has no effect on versioning, but, it would be great if you use them.
|
||||
|
||||
Use `npm run commitmsg` to check your commit message.
|
||||
|
||||
### 5. Rebase and Push Changes
|
||||
|
||||
If you have been working on your contribution for a while, the upstream repository may have changed. You may want to
|
||||
ensure your work is on top of the latest changes so your pull request can be applied cleanly:
|
||||
|
||||
```bash
|
||||
$ git pull --rebase upstream master
|
||||
```
|
||||
|
||||
When you are ready to push your commit to your GitHub repository for the first time on this branch you would do the
|
||||
following:
|
||||
|
||||
```bash
|
||||
$ git push -u origin issue-12345
|
||||
```
|
||||
|
||||
After the first time, you simply need to do:
|
||||
|
||||
```bash
|
||||
$ git push
|
||||
```
|
||||
|
||||
### 6. Issue a Pull Request
|
||||
|
||||
In order to have your commits merged into the main repository, you need to create a pull request. The instructions for
|
||||
this can be found in the GitHub Help Article [Creating a Pull Request](https://help.github.com/articles/creating-a-pull-request/). Essentially you do the following:
|
||||
|
||||
1. Go to the site for your repository.
|
||||
2. Click the Pull Request button.
|
||||
3. Select the feature branch from your repository.
|
||||
4. Enter a title and description of your pull request in the description.
|
||||
5. Review the commit and files changed tabs.
|
||||
6. Click `Send Pull Request`
|
||||
|
||||
You will get notified about the status of your pull request based on your GitHub settings.
|
||||
|
||||
|
||||
## Plugins
|
||||
|
||||
Plugins are Add-ons that extend the functionality of the application. Whether you want develop your own plugin I'd suggest do the following:
|
||||
|
||||
1. Check whether there is a legacy sinopia plugin for the feature that you need at [npmjs](https://www.npmjs.com/search?q=sinopia).
|
||||
2. There is a [life-cycle to load a plugin](https://github.com/verdaccio/verdaccio/blob/master/lib/plugin-loader.js#L22) you should keep on mind.
|
||||
3. You are free to host your plugin in your repository, whether you want to host within in our organization, feel free to ask, we'll happy to host it.
|
||||
4. Try a describe widely your plugin to provide a deeply understanding to your users.
|
||||
50
Dockerfile
Normal file
@@ -0,0 +1,50 @@
|
||||
FROM node:9.5.0-alpine@sha256:bda0e2513f077b9b3898c504f5ef5c2b4357f631cc05c5882d5935496a01df2a
|
||||
LABEL maintainer="https://github.com/verdaccio/verdaccio"
|
||||
|
||||
RUN apk --no-cache add openssl && \
|
||||
wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 && \
|
||||
chmod +x /usr/local/bin/dumb-init && \
|
||||
apk del openssl && \
|
||||
apk --no-cache add ca-certificates wget && \
|
||||
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub && \
|
||||
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk && \
|
||||
apk add glibc-2.25-r0.apk
|
||||
|
||||
ENV APPDIR /usr/local/app
|
||||
|
||||
WORKDIR $APPDIR
|
||||
|
||||
ADD . $APPDIR
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
RUN npm config set registry http://registry.npmjs.org/ && \
|
||||
yarn global add -s flow-bin@0.52.0 && \
|
||||
yarn install --production=false && \
|
||||
yarn run lint && \
|
||||
yarn run code:build && \
|
||||
yarn run build:webui && \
|
||||
yarn run test:unit -- --silent true --coverage false --bail && \
|
||||
yarn cache clean && \
|
||||
yarn install --production=true --pure-lockfile
|
||||
|
||||
RUN mkdir -p /verdaccio/storage /verdaccio/conf
|
||||
|
||||
ADD conf/docker.yaml /verdaccio/conf/config.yaml
|
||||
|
||||
RUN addgroup -S verdaccio && adduser -S -G verdaccio verdaccio && \
|
||||
chown -R verdaccio:verdaccio "$APPDIR" && \
|
||||
chown -R verdaccio:verdaccio /verdaccio
|
||||
|
||||
USER verdaccio
|
||||
|
||||
ENV PORT 4873
|
||||
ENV PROTOCOL http
|
||||
|
||||
EXPOSE $PORT
|
||||
|
||||
VOLUME ["/verdaccio"]
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/dumb-init", "--"]
|
||||
|
||||
CMD $APPDIR/bin/verdaccio --config /verdaccio/conf/config.yaml --listen $PROTOCOL://0.0.0.0:${PORT}
|
||||
13
Dockerfile.rpi
Normal file
@@ -0,0 +1,13 @@
|
||||
FROM hypriot/rpi-node:6-onbuild
|
||||
|
||||
RUN mkdir -p /verdaccio/storage /verdaccio/conf
|
||||
|
||||
WORKDIR /verdaccio
|
||||
|
||||
ADD conf/docker.yaml /verdaccio/conf/config.yaml
|
||||
|
||||
EXPOSE 4873
|
||||
|
||||
VOLUME ["/verdaccio/conf", "/verdaccio/storage"]
|
||||
|
||||
CMD ["/usr/src/app/bin/verdaccio", "--config", "/verdaccio/conf/config.yaml", "--listen", "0.0.0.0:4873"]
|
||||
179
History.md
@@ -1,179 +0,0 @@
|
||||
|
||||
11 Aug 2014, version 0.9.1
|
||||
|
||||
- filter falsey _npmUser values (issue [#95](https://github.com/rlidwka/sinopia/pull/95))
|
||||
- option not to cache third-party files (issue [#85](https://github.com/rlidwka/sinopia/issues/85))
|
||||
|
||||
26 Jul 2014, version 0.9.0
|
||||
|
||||
- new features:
|
||||
- add search functionality (issue [#65](https://github.com/rlidwka/sinopia/pull/65))
|
||||
- allow users to authenticate using .htpasswd (issue [#44](https://github.com/rlidwka/sinopia/issues/44))
|
||||
- allow user registration with "npm adduser" (issue [#44](https://github.com/rlidwka/sinopia/issues/44))
|
||||
|
||||
- bugfixes:
|
||||
- avoid crashing when res.socket is null (issue [#89](https://github.com/rlidwka/sinopia/issues/89))
|
||||
|
||||
20 Jun 2014, version 0.8.2
|
||||
|
||||
- allow '@' in package/tarball names (issue [#75](https://github.com/rlidwka/sinopia/issues/75))
|
||||
- other minor fixes (issues [#77](https://github.com/rlidwka/sinopia/issues/77), [#80](https://github.com/rlidwka/sinopia/issues/80))
|
||||
|
||||
14 Apr 2014, version 0.8.1
|
||||
|
||||
- "latest" tag is now always present in any package (issue [#63](https://github.com/rlidwka/sinopia/issues/63))
|
||||
- tags created with new npm versions (>= 1.3.19) can now be published correctly
|
||||
|
||||
1 Apr 2014, version 0.8.0
|
||||
|
||||
- use gzip compression whenever possible (issue [#54](https://github.com/rlidwka/sinopia/issues/54))
|
||||
- set `ignore_latest_tag` to false, it should now be more compatible with npm registry
|
||||
- make `fs-ext` optional (issue [#61](https://github.com/rlidwka/sinopia/issues/61))
|
||||
|
||||
29 Mar 2014, version 0.7.1
|
||||
|
||||
- added `ignore_latest_tag` config param (issues [#55](https://github.com/rlidwka/sinopia/issues/55), [#59](https://github.com/rlidwka/sinopia/issues/59))
|
||||
- reverted PR [#56](https://github.com/rlidwka/sinopia/issues/56) (see discussion in [#57](https://github.com/rlidwka/sinopia/issues/57))
|
||||
|
||||
13 Mar 2014, version 0.7.0
|
||||
|
||||
- config changes:
|
||||
- breaking change: all time intervals are now specified in *seconds* instead of *milliseconds* for the sake of consistency. Change `timeout` if you have one!
|
||||
- all time intervals now can be specified in [nginx notation](http://wiki.nginx.org/ConfigNotation), for example `1m 30s` will specify a 90 seconds timeout
|
||||
- added `maxage` option to avoid asking public registry for the same data too often (issue [#47](https://github.com/rlidwka/sinopia/issues/47))
|
||||
- added `max_fails` and `fail_timeout` options to reduce amount of requests to public registry when it's down (issue [#7](https://github.com/rlidwka/sinopia/issues/7))
|
||||
|
||||
- bug fixes:
|
||||
- fix crash when headers are sent twice (issue [#52](https://github.com/rlidwka/sinopia/issues/52))
|
||||
- all tarballs are returned with `Content-Length`, which allows [yapm](https://github.com/rlidwka/yapm) to estimate download time
|
||||
- when connection to public registry is interrupted when downloading a tarball, we no longer save incomplete tarball to the disk
|
||||
|
||||
- other changes:
|
||||
- 404 errors are returned in couchdb-like manner (issue [#56](https://github.com/rlidwka/sinopia/issues/56))
|
||||
|
||||
5 Mar 2014, version 0.6.7
|
||||
|
||||
- pin down express@3 version, since sinopia doesn't yet work with express@4
|
||||
|
||||
28 Feb 2014, version 0.6.5
|
||||
|
||||
- old SSL keys for npm are removed, solves `SELF_SIGNED_CERT_IN_CHAIN` error
|
||||
|
||||
3 Feb 2014, version 0.6.3
|
||||
|
||||
- validate tags and versions (issue [#40](https://github.com/rlidwka/sinopia/issues/40))
|
||||
- don't crash when process.getuid doesn't exist (issue [#41](https://github.com/rlidwka/sinopia/issues/41))
|
||||
|
||||
18 Jan 2014, version 0.6.2
|
||||
|
||||
- adding config param to specify upload limits (issue [#39](https://github.com/rlidwka/sinopia/issues/39))
|
||||
- making loose semver versions work (issue [#38](https://github.com/rlidwka/sinopia/issues/38))
|
||||
|
||||
13 Jan 2014, version 0.6.1
|
||||
|
||||
- support setting different storage paths for different packages (issue [#35](https://github.com/rlidwka/sinopia/issues/35))
|
||||
|
||||
30 Dec 2013, version 0.6.0
|
||||
|
||||
- tag support (issue [#8](https://github.com/rlidwka/sinopia/issues/8))
|
||||
- adding support for npm 1.3.19+ behaviour (issue [#31](https://github.com/rlidwka/sinopia/issues/31))
|
||||
- removing all support for proxying publish requests to uplink (too complex)
|
||||
|
||||
26 Dec 2013, version 0.5.9
|
||||
|
||||
- fixing bug with bad Accept header (issue [#32](https://github.com/rlidwka/sinopia/issues/32))
|
||||
|
||||
20 Dec 2013, version 0.5.8
|
||||
|
||||
- fixed a warning from js-yaml
|
||||
- don't color multiline strings in logs output
|
||||
- better error messages in various cases
|
||||
- test format changed
|
||||
|
||||
15 Dec 2013, version 0.5.7
|
||||
|
||||
- try to fetch package from uplinks if user requested a tarball we don't know about (issue [#29](https://github.com/rlidwka/sinopia/issues/29))
|
||||
- security fix: set express.js to production mode so we won't return stack traces to the user in case of errors
|
||||
|
||||
11 Dec 2013, version 0.5.6
|
||||
|
||||
- fixing a few crashes related to tags
|
||||
|
||||
8 Dec 2013, version 0.5.4
|
||||
|
||||
- latest tag always shows highest version available (issue [#8](https://github.com/rlidwka/sinopia/issues/8))
|
||||
- added a configurable timeout for requests to uplinks (issue [#18](https://github.com/rlidwka/sinopia/issues/18))
|
||||
- users with bad authentication header are considered not logged in (issue [#17](https://github.com/rlidwka/sinopia/issues/17))
|
||||
|
||||
24 Nov 2013, version 0.5.3
|
||||
|
||||
- added proxy support for requests to uplinks (issue [#13](https://github.com/rlidwka/sinopia/issues/13))
|
||||
- changed license from default BSD to WTFPL
|
||||
|
||||
26 Oct 2013, version 0.5.2
|
||||
|
||||
- server now supports unpublishing local packages
|
||||
- added fs-ext dependency (flock)
|
||||
- fixed a few face conditions
|
||||
|
||||
20 Oct 2013, version 0.5.1
|
||||
|
||||
- fixed a few errors related to logging
|
||||
|
||||
12 Oct 2013, version 0.5.0
|
||||
|
||||
- using bunyan as a log engine
|
||||
- pretty-formatting colored logs to stdout by default
|
||||
- ask user before creating any config files
|
||||
|
||||
5 Oct 2013, version 0.4.3
|
||||
|
||||
- basic tags support for npm (read-only)
|
||||
- npm star/unstar calls now return proper error
|
||||
|
||||
29 Sep 2013, version 0.4.2
|
||||
|
||||
28 Sep 2013, version 0.4.1
|
||||
|
||||
- using mocha for tests now
|
||||
- making use of streams2 api, doesn't work on 0.8 anymore
|
||||
- basic support for uploading packages to other registries
|
||||
|
||||
27 Sep 2013, version 0.4.0
|
||||
|
||||
- basic test suite
|
||||
- storage path in config is now relative to config file location, not cwd
|
||||
- proper cleanup for temporary files
|
||||
|
||||
12 Jul 2013, version 0.3.2
|
||||
|
||||
4 Jul 2013, version 0.3.1
|
||||
|
||||
- using ETag header for all json output, based on md5
|
||||
|
||||
20 Jun 2013, version 0.3.0
|
||||
|
||||
- compression for http responses
|
||||
- requests for files to uplinks are now streams (no buffering)
|
||||
- tarballs are now cached locally
|
||||
|
||||
19 Jun 2013, version 0.2.0
|
||||
|
||||
- config file changed, packages is now specified with minimatch
|
||||
- ability to retrieve all packages from another registry (i.e. npmjs)
|
||||
|
||||
14 Jun 2013, version 0.1.1
|
||||
|
||||
- config is now autogenerated
|
||||
- tarballs are now read/written from fs using streams (no buffering)
|
||||
|
||||
9 Jun 2013, version 0.1.0
|
||||
|
||||
- first npm version
|
||||
- ability to publish packages and retrieve them locally
|
||||
- basic authentication/access control
|
||||
|
||||
22 May 2013, version 0.0.0
|
||||
|
||||
- first commits
|
||||
|
||||
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Verdaccio community
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
384
LICENSE-docs
Normal file
@@ -0,0 +1,384 @@
|
||||
Attribution 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More_considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public licenses.
|
||||
Notwithstanding, Creative Commons may elect to apply one of its public
|
||||
licenses to material it publishes and in those instances will be
|
||||
considered the "Licensor." Except for the limited purpose of indicating
|
||||
that material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the public
|
||||
licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
195
README.md
@@ -1,143 +1,180 @@
|
||||
Sinopia is a private/caching npm repository server.
|
||||
<p align="center"><img src="https://github.com/verdaccio/verdaccio/raw/master/assets/bitmap/verdaccio%402x.png"></p>
|
||||
|
||||
It allows you to have a local npm registry with zero configuration. You don't have to install and replicate an entire CouchDB database. Sinopia keeps its own small database and, if a package doesn't exist there, it asks npmjs.org for it keeping only those packages you use.
|
||||
### A lightweight private npm proxy registry
|
||||
|
||||
<p align="center"><img src="https://f.cloud.github.com/assets/999113/1795553/680177b2-6a1d-11e3-82e1-02193aa4e32e.png"></p>
|
||||
|
||||
## Use cases
|
||||
|
||||
1. Use private packages.
|
||||
`verdaccio` is a fork of `sinopia`. It aims to keep backwards compatibility with `sinopia`, while keeping up with npm changes.
|
||||
|
||||
[](https://circleci.com/gh/verdaccio/verdaccio/tree/master)
|
||||
[](https://www.npmjs.org/package/verdaccio)
|
||||
[](https://www.npmjs.org/package/verdaccio)
|
||||
[](https://gitter.im/verdaccio/)
|
||||
[](https://crowdin.com/project/verdaccio)
|
||||
[](https://david-dm.org/verdaccio/verdaccio)
|
||||
[](https://snyk.io/test/github/verdaccio/verdaccio?targetFile=package.json)
|
||||
[](https://codecov.io/gh/verdaccio/verdaccio)
|
||||
|
||||
|
||||
<p align="center"><img src="https://firebasestorage.googleapis.com/v0/b/jotadeveloper-website.appspot.com/o/verdaccio_long_video2.gif?alt=media&token=4d20cad1-f700-4803-be14-4b641c651b41"></p>
|
||||
|
||||
|
||||
It allows you to have a **local npm private registry with zero configuration**. You don't have to install and replicate an entire database. Verdaccio keeps its own small database and, if a package doesn't exist there, **it asks any other registry** (npmjs.org) for it keeping only those packages you use.
|
||||
|
||||
## Quick Links
|
||||
|
||||
* [Documentation](http://www.verdaccio.org/docs/en/installation.html)
|
||||
* [Chat](https://gitter.im/verdaccio/questions)
|
||||
* [Roadmap](https://github.com/verdaccio/verdaccio/wiki)
|
||||
|
||||
## Introduction
|
||||
|
||||
### Use private packages
|
||||
|
||||
If you want to use all benefits of npm package system in your company without sending all code to the public, and use your private packages just as easy as public ones.
|
||||
|
||||
See [using private packages](#using-private-packages) section for details.
|
||||
|
||||
2. Cache npmjs.org registry.
|
||||
### Cache npmjs.org registry
|
||||
|
||||
If you have more than one server you want to install packages on, you might want to use this to decrease latency
|
||||
(presumably "slow" npmjs.org will be connected to only once per package/version) and provide limited failover (if npmjs.org is down, we might still find something useful in the cache).
|
||||
(presumably "slow" npmjs.org will be connected to only once per package/version) and provide limited failover (if npmjs.org is down, we might still find something useful in the cache) or avoid issues like *[How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript](https://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/)*.
|
||||
|
||||
See [using public packages](#using-public-packages-from-npmjsorg) section for details.
|
||||
|
||||
3. Override public packages.
|
||||
### Override public packages
|
||||
|
||||
If you want to use a modified version of some 3rd-party package (for example, you found a bug, but maintainer didn't accepted pull request yet), you can publish your version locally under the same name.
|
||||
If you want to use a modified version of some 3rd-party package (for example, you found a bug, but maintainer didn't accept pull request yet), you can publish your version locally under the same name.
|
||||
|
||||
See [override public packages](#override-public-packages) section for details.
|
||||
See in detail each of these [use cases](https://github.com/verdaccio/verdaccio/tree/master/docs/use-cases.md).
|
||||
|
||||
## Installation
|
||||
## Get Started
|
||||
|
||||
Installation and starting (application will create default config in config.yaml you can edit later)
|
||||
|
||||
```bash
|
||||
# installation and starting (application will create default
|
||||
# config in config.yaml you can edit later)
|
||||
$ npm install -g sinopia
|
||||
$ sinopia
|
||||
npm install --global verdaccio
|
||||
```
|
||||
|
||||
# npm configuration
|
||||
Run in your terminal
|
||||
|
||||
```bash
|
||||
verdaccio
|
||||
```
|
||||
|
||||
You would need set some npm configuration, this is optional.
|
||||
|
||||
```bash
|
||||
$ npm set registry http://localhost:4873/
|
||||
|
||||
# if you have any restricted packages, you should add this:
|
||||
$ npm set always-auth true
|
||||
|
||||
# if you use HTTPS, add an appropriate CA information
|
||||
# ("null" means get CA list from OS)
|
||||
$ npm set ca null
|
||||
```
|
||||
|
||||
### Docker
|
||||
Now you can navigate to [http://localhost:4873/](http://localhost:4873/) where your local packages will be listed and can be searched.
|
||||
|
||||
A Sinopia docker image [is available](https://registry.hub.docker.com/u/keyvanfatehi/sinopia/)
|
||||
> Warning: Verdaccio does not currently support PM2's cluster mode, running it with cluster mode may cause unknown behavior.
|
||||
|
||||
### Chef
|
||||
#### Alpha
|
||||
|
||||
A Sinopia Chef cookbook [is available at Opscode community](http://community.opscode.com/cookbooks/sinopia) source: https://github.com/BarthV/sinopia-cookbook
|
||||
⚠️⚠️ **Please, help us to test the version 3.x in order to release a stable version soon. Do never test with your original storage folder, do always a backup** ⚠️⚠️
|
||||
|
||||
### Puppet
|
||||
If you are an adventurous developer you can use and install the latest beta version, this is a non stable version, I'd recommend only use for testing purporses.
|
||||
|
||||
A Sinopia puppet module [is available at puppet forge](http://forge.puppetlabs.com/saheba/sinopia) source: https://github.com/saheba/puppet-sinopia
|
||||
|
||||
## Configuration
|
||||
|
||||
When you start a server, it auto-creates a config file that adds one user (password is printed to stdout only once).
|
||||
|
||||
## Adding a new user
|
||||
|
||||
There is no utility to add a new user but you can at least use node on the command-line to generate a password. You will need to edit the config and add the user manually.
|
||||
|
||||
Start node and enter the following code replacing 'newpass' with the password you want to get the hash for.
|
||||
```bash
|
||||
$ node
|
||||
> crypto.createHash('sha1').update('newpass').digest('hex')
|
||||
'6c55803d6f1d7a177a0db3eb4b343b0d50f9c111'
|
||||
> [CTRL-D]
|
||||
$ npm install -g verdaccio@alpha
|
||||
```
|
||||
or using docker
|
||||
|
||||
```bash
|
||||
$ docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio:alpha
|
||||
```
|
||||
|
||||
## Publishing Private Packages
|
||||
|
||||
## Using private packages
|
||||
#### Create an user and log in
|
||||
|
||||
You can add users and manage which users can access which packages.
|
||||
```bash
|
||||
npm adduser --registry http://localhost:4873
|
||||
```
|
||||
|
||||
It is recommended that you define a prefix for your private packages, for example "local", so all your private things will look like this: `local-foo`. This way you can clearly separate public packages from private ones.
|
||||
#### Publish your package
|
||||
|
||||
## Using public packages from npmjs.org
|
||||
```bash
|
||||
npm publish --registry http://localhost:4873
|
||||
```
|
||||
|
||||
If some package doesn't exist in the storage, server will try to fetch it from npmjs.org. If npmjs.org is down, it serves packages from cache pretending that no other packages exist. Sinopia will download only what's needed (= requested by clients), and this information will be cached, so if client will ask the same thing second time, it can be served without asking npmjs.org for it.
|
||||
This will prompt you for user credentials which will be saved on the `verdaccio` server.
|
||||
|
||||
Example: if you successfully request express@3.0.1 from this server once, you'll able to do that again (with all it's dependencies) anytime even if npmjs.org is down. But say express@3.0.0 will not be downloaded until it's actually needed by somebody. And if npmjs.org is offline, this server would say that only express@3.0.1 (= only what's in the cache) is published, but nothing else.
|
||||
## Docker
|
||||
|
||||
## Override public packages
|
||||
Below are the most commony needed informations,
|
||||
every aspect of Docker and verdaccio is [documented separately](http://www.verdaccio.org/docs/en/docker.html)
|
||||
|
||||
If you want to use a modified version of some public package `foo`, you can just publish it to your local server, so when your type `npm install foo`, it'll consider installing your version.
|
||||
### Prebuilt images
|
||||
|
||||
There's two options here:
|
||||
To pull the latest pre-built [docker image](https://hub.docker.com/r/verdaccio/verdaccio/):
|
||||
|
||||
1. You want to create a separate fork and stop synchronizing with public version.
|
||||
```bash
|
||||
docker pull verdaccio/verdaccio
|
||||
```
|
||||
|
||||
If you want to do that, you should modify your configuration file so sinopia won't make requests regarding this package to npmjs anymore. Add a separate entry for this package to *config.yaml* and remove `npmjs` from `proxy_access` list and restart the server.
|
||||
Since version 2 images for every version are available as [tags](https://hub.docker.com/r/verdaccio/verdaccio/tags/).
|
||||
|
||||
When you publish your package locally, you should probably start with version string higher than existing one, so it won't conflict with existing package in the cache.
|
||||
### Running verdaccio using Docker
|
||||
|
||||
2. You want to temporarily use your version, but return to public one as soon as it's updated.
|
||||
To run the docker container:
|
||||
|
||||
In order to avoid version conflicts, you should use a custom pre-release suffix of the next patch version. For example, if a public package has version 0.1.2, you can upload 0.1.3-my-temp-fix. This way your package will be used until its original maintainer updates his public package to 0.1.3.
|
||||
```bash
|
||||
docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio
|
||||
```
|
||||
|
||||
### Using docker-compose
|
||||
|
||||
1. Get the latest version of [docker-compose](https://github.com/docker/compose).
|
||||
2. Build and run the container:
|
||||
|
||||
```bash
|
||||
$ docker-compose up --build
|
||||
```
|
||||
Docker examples are available [in this repository](https://github.com/verdaccio/docker-examples).
|
||||
|
||||
## Compatibility
|
||||
|
||||
Sinopia aims to support all features of a standard npm client that make sense to support in private repository. Unfortunately, it isn't always possible.
|
||||
Verdaccio aims to support all features of a standard npm client that make sense to support in private repository. Unfortunately, it isn't always possible.
|
||||
|
||||
Basic features:
|
||||
### Basic features
|
||||
|
||||
- Installing packages (npm install, npm upgrade, etc.) - supported
|
||||
- Publishing packages (npm publish) - supported
|
||||
- Installing packages (npm install, npm upgrade, etc.) - **supported**
|
||||
- Publishing packages (npm publish) - **supported**
|
||||
|
||||
Advanced package control:
|
||||
### Advanced package control
|
||||
|
||||
- Unpublishing packages (npm unpublish) - not yet supported, should be soon
|
||||
- Tagging (npm tag) - not yet supported, should be soon
|
||||
- Unpublishing packages (npm unpublish) - **supported**
|
||||
- Tagging (npm tag) - **supported**
|
||||
- Deprecation (npm deprecate) - not supported
|
||||
|
||||
User management:
|
||||
### User management
|
||||
|
||||
- Registering new users (npm adduser {newuser}) - not supported, sinopia uses its own acl management system
|
||||
- Transferring ownership (npm owner add {user} {pkg}) - not supported, sinopia uses its own acl management system
|
||||
- Registering new users (npm adduser {newuser}) - **supported**
|
||||
- Transferring ownership (npm owner add {user} {pkg}) - not supported, verdaccio uses its own acl management system
|
||||
|
||||
Misc stuff:
|
||||
### Misc stuff
|
||||
|
||||
- Searching (npm search) - not supported
|
||||
- Searching (npm search) - **supported** (cli / browser)
|
||||
- Starring (npm star, npm unstar) - not supported, doesn't make sense in private registry
|
||||
- Ping (npm ping) - **supported**
|
||||
|
||||
## Storage
|
||||
## FAQ / Contact / Troubleshoot
|
||||
|
||||
No CouchDB here. This application is supposed to work with zero configuration, so filesystem is used as a storage.
|
||||
If you have any issue you can try the following options, do no desist to ask or check our issues database, perhaps someone has asked already what you are looking for.
|
||||
|
||||
If you want to use a database instead, ask for it, we'll come up with some kind of a plugin system.
|
||||
* [Roadmap](https://github.com/verdaccio/verdaccio/wiki)
|
||||
* [Most common questions](https://github.com/verdaccio/verdaccio/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20)
|
||||
* [Reporting a bug](https://github.com/verdaccio/verdaccio/blob/master/CONTRIBUTING.md#reporting-a-bug)
|
||||
* [Running discussions](https://github.com/verdaccio/verdaccio/issues?q=is%3Aissue+is%3Aopen+label%3Adiscuss)
|
||||
* [Chat Room](https://gitter.im/verdaccio/)
|
||||
* [Logos](https://github.com/verdaccio/verdaccio/tree/master/assets)
|
||||
|
||||
## Similar existing things
|
||||
## License
|
||||
Verdaccio is [MIT licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE).
|
||||
|
||||
- npm + git (I mean, using git+ssh:// dependencies) - most people seem to use this, but it's a terrible idea... *npm update* doesn't work, can't use git subdirectories this way, etc.
|
||||
- [reggie](https://github.com/mbrevoort/node-reggie) - this looks very interesting indeed... I might borrow some code there.
|
||||
- [shadow-npm](https://github.com/dominictarr/shadow-npm), [public service](http://shadow-npm.net/) - it uses the same code as npmjs.org + service is dead
|
||||
- [gemfury](http://www.gemfury.com/l/npm-registry) and others - those are closed-source cloud services, and I'm not in a mood to trust my private code to somebody (security through obscurity yeah!)
|
||||
- npm-registry-proxy, npm-delegate, npm-proxy - those are just proxies...
|
||||
- Is there something else?
|
||||
The Verdaccio documentation and logos (e.g., .md, .png, .sketch) files in the /wiki and /assets folder) is [Creative Commons licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE-docs).
|
||||
|
||||
|
||||
58
SERVER.md
@@ -1,58 +0,0 @@
|
||||
This is mostly basic linux server configuration stuff but I felt it important to document and share the steps I took to get sinopia running permanently on my server. You will need root (or sudo) permissions for the following.
|
||||
|
||||
## Running as a separate user
|
||||
First create the sinopia user:
|
||||
```bash
|
||||
$ sudo adduser --disabled-login --gecos 'Sinopia NPM mirror' sinopia
|
||||
```
|
||||
|
||||
You create a shell as the sinopia user using the following command:
|
||||
```bash
|
||||
$ sudo su sinopia
|
||||
$ cd ~
|
||||
```
|
||||
|
||||
The 'cd ~' command send you to the home directory of the sinopia user. Make sure you run sinopia at least once to generate the config file. Edit it according to your needs.
|
||||
|
||||
## Listening on all addresses
|
||||
If you want to listen to every external address set the listen directive in the config to:
|
||||
```
|
||||
# you can specify listen address (or simply a port)
|
||||
listen: 0.0.0.0:4873
|
||||
```
|
||||
|
||||
## Keeping sinopia running forever
|
||||
We can use the node package called 'forever' to keep sinopia running all the time.
|
||||
https://github.com/nodejitsu/forever
|
||||
|
||||
First install forever globally:
|
||||
```bash
|
||||
$ sudo npm install -g forever
|
||||
```
|
||||
|
||||
Make sure you've started sinopia at least once to generate the config file and write down the created admin user. You can then use the following command to start sinopia:
|
||||
```bash
|
||||
$ forever start `which sinopia`
|
||||
```
|
||||
|
||||
You can check the documentation for more information on how to use forever.
|
||||
|
||||
## Surviving server restarts
|
||||
We can use crontab and forever together to restart sinopia after a server reboot.
|
||||
When you're logged in as the sinopia user do the following:
|
||||
|
||||
```bash
|
||||
$ crontab -e
|
||||
```
|
||||
|
||||
This might ask you to choose an editor. Pick your favorite and proceed.
|
||||
Add the following entry to the file:
|
||||
```
|
||||
@reboot /usr/bin/forever start /usr/lib/node_modules/sinopia/bin/sinopia
|
||||
```
|
||||
|
||||
The locations may vary depending on your server setup. If you want to know where your files are you can use the 'which' command:
|
||||
```bash
|
||||
$ which forever
|
||||
$ which sinopia
|
||||
```
|
||||
BIN
assets/bitmap/logo/logo-twitter-white-background.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
assets/bitmap/logo/logo-twitter.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
assets/bitmap/twitter/twitter-header-text.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
assets/bitmap/twitter/twitter-header.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
assets/bitmap/verdaccio-blackwhite.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
assets/bitmap/verdaccio-blackwhite@2x.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
assets/bitmap/verdaccio-blackwhite@3x.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/bitmap/verdaccio-tiny.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
assets/bitmap/verdaccio-tiny@2x.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
assets/bitmap/verdaccio-tiny@3x.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
assets/bitmap/verdaccio.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
assets/bitmap/verdaccio@2x.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
assets/bitmap/verdaccio@3x.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
55
assets/verdaccio-logo-Full.svg
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="301px" height="100px" viewBox="0 0 301 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Logo-Full</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<polygon id="path-1" points="48 17.6 32.8 48 24 48 0.4 0.8 15.6 0.8 28.4 26.4 32.8 17.6 48 17.6"></polygon>
|
||||
<filter x="-20.0%" y="-11.7%" width="139.9%" height="140.3%" filterUnits="objectBoundingBox" id="filter-2">
|
||||
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"></feComposite>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0906646286 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
<polygon id="path-3" points="50.8 12 35.6 12 41.2 0.8 56.4 0.8 50.8 12"></polygon>
|
||||
<filter x="-45.7%" y="-49.1%" width="191.3%" height="269.6%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"></feComposite>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0906646286 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
<polygon id="path-5" points="32.8 48 24 48 0.4 0.8 15.6 0.8 35.9772662 41.6908081"></polygon>
|
||||
</defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Verdaccio">
|
||||
<rect id="BG" fill="#F7F8F6" x="0" y="0" width="301" height="100" rx="37"></rect>
|
||||
<g id="Group-2" transform="translate(27.000000, 22.000000)">
|
||||
<g id="Group-2-Copy" transform="translate(65.200000, 0.400000)" font-weight="300" font-size="42.4" font-family="OpenSans-LightItalic, Open Sans" fill="#405236" font-style="italic">
|
||||
<text id="Verdaccio">
|
||||
<tspan x="16" y="45">Verdaccio</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<path d="M66,27 L66,33.596969" id="Line-2" stroke="#0F5200" stroke-width="1.6" opacity="0.101109601" stroke-linecap="square"></path>
|
||||
<g id="Group" transform="translate(0.000000, 5.500000)">
|
||||
<g id="Combined-Shape">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
|
||||
<use fill="#405236" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||
<path stroke="#405236" stroke-width="2.4" d="M46.0583592,18.8 L33.5416408,18.8 L28.4,29.0832816 L14.8583592,2 L2.34164079,2 L24.7416408,46.8 L32.0583592,46.8 L46.0583592,18.8 Z"></path>
|
||||
</g>
|
||||
<g id="Path">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-3"></use>
|
||||
<use fill="#CD4000" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||
<path stroke="#CD4000" stroke-width="2.4" d="M50.0583592,10.8 L54.4583592,2 L41.9416408,2 L37.5416408,10.8 L50.0583592,10.8 Z"></path>
|
||||
</g>
|
||||
<g id="Combined-Shape">
|
||||
<use fill="#4A5E3F" fill-rule="evenodd" xlink:href="#path-5"></use>
|
||||
<path stroke="#405236" stroke-width="2.4" d="M32.0607372,46.8 L34.6351125,41.6879866 L14.8572527,2 L2.34164079,2 L24.7416408,46.8 L32.0607372,46.8 Z"></path>
|
||||
</g>
|
||||
<path d="M37.6,2 L52.8210381,2" id="Line-3" stroke="#CD4000" stroke-width="2.4" stroke-linecap="square"></path>
|
||||
<path d="M33.6,6 L48.8210381,6" id="Line-3" stroke="#CD4000" stroke-width="2.4" stroke-linecap="square"></path>
|
||||
<path d="M29.6,10.8 L44.8210381,10.8" id="Line-3" stroke="#CD4000" stroke-width="2.4" stroke-linecap="square"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
37
assets/verdaccio-logo-blackwhite.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="100px" height="100px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Logo-Black</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<polygon id="path-1" points="48 17.6 32.8 48 24 48 0.4 0.8 15.6 0.8 28.4 26.4 32.8 17.6 48 17.6"></polygon>
|
||||
<filter x="-20.0%" y="-11.7%" width="139.9%" height="140.3%" filterUnits="objectBoundingBox" id="filter-2">
|
||||
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"></feComposite>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0906646286 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
<path d="M40.810519,12 L50.8,12 L50.8,12 L56.4,0.8 L47.610519,0.8 L36.4,0.8 L36.4,3.2 L40,3.2 L39.2,4.8 L32.4,4.8 L32.4,7.2 L38,7.2 L36.8,9.6 L28.4,9.6 L28.4,12 L40.810519,12 Z" id="path-3"></path>
|
||||
<filter x="-33.9%" y="-49.1%" width="167.9%" height="269.6%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0906646286 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Verdaccio-BlackWhite">
|
||||
<rect id="BG" fill="#000000" x="0" y="0" width="100" height="100" rx="37"></rect>
|
||||
<g id="Group" transform="translate(22.000000, 29.000000)">
|
||||
<g id="Combined-Shape">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
|
||||
<use fill-opacity="0.6" fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||
</g>
|
||||
<g id="Combined-Shape">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-3"></use>
|
||||
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||
</g>
|
||||
<polygon id="Combined-Shape" fill="#FFFFFF" points="32.8 48 24 48 0.4 0.8 15.6 0.8 35.9772662 41.6908081"></polygon>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
BIN
assets/verdaccio-logo.sketch
Normal file
BIN
assets/verdaccio.github.io.png
Normal file
|
After Width: | Height: | Size: 146 KiB |
47
assets/verdaccio.svg
Normal file
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="100px" height="100px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Logo</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<polygon id="path-1" points="48 17.6 32.8 48 24 48 0.4 0.8 15.6 0.8 28.4 26.4 32.8 17.6 48 17.6"></polygon>
|
||||
<filter x="-20.0%" y="-11.7%" width="139.9%" height="140.3%" filterUnits="objectBoundingBox" id="filter-2">
|
||||
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"></feComposite>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0906646286 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
<polygon id="path-3" points="50.8 12 35.6 12 41.2 0.8 56.4 0.8 50.8 12"></polygon>
|
||||
<filter x="-45.7%" y="-49.1%" width="191.3%" height="269.6%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"></feComposite>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0906646286 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
<polygon id="path-5" points="32.8 48 24 48 0.4 0.8 15.6 0.8 35.9772662 41.6908081"></polygon>
|
||||
</defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Verdaccio-Copy">
|
||||
<rect id="BG" fill="#F7F8F6" x="0" y="0" width="100" height="100" rx="37"></rect>
|
||||
<g id="Group" transform="translate(22.000000, 29.000000)">
|
||||
<g id="Combined-Shape">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
|
||||
<use fill="#405236" fill-rule="evenodd" xlink:href="#path-1"></use>
|
||||
<path stroke="#405236" stroke-width="2.4" d="M46.0583592,18.8 L33.5416408,18.8 L28.4,29.0832816 L14.8583592,2 L2.34164079,2 L24.7416408,46.8 L32.0583592,46.8 L46.0583592,18.8 Z"></path>
|
||||
</g>
|
||||
<g id="Path">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-3"></use>
|
||||
<use fill="#CD4000" fill-rule="evenodd" xlink:href="#path-3"></use>
|
||||
<path stroke="#CD4000" stroke-width="2.4" d="M50.0583592,10.8 L54.4583592,2 L41.9416408,2 L37.5416408,10.8 L50.0583592,10.8 Z"></path>
|
||||
</g>
|
||||
<g id="Combined-Shape">
|
||||
<use fill="#4A5E3F" fill-rule="evenodd" xlink:href="#path-5"></use>
|
||||
<path stroke="#405236" stroke-width="2.4" d="M32.0607372,46.8 L34.6351125,41.6879866 L14.8572527,2 L2.34164079,2 L24.7416408,46.8 L32.0607372,46.8 Z"></path>
|
||||
</g>
|
||||
<path d="M37.6,2 L52.8210381,2" id="Line-3" stroke="#CD4000" stroke-width="2.4" stroke-linecap="square"></path>
|
||||
<path d="M33.6,6 L48.8210381,6" id="Line-3" stroke="#CD4000" stroke-width="2.4" stroke-linecap="square"></path>
|
||||
<path d="M29.6,10.8 L44.8210381,10.8" id="Line-3" stroke="#CD4000" stroke-width="2.4" stroke-linecap="square"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -1,4 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
require('../lib/cli')
|
||||
|
||||
3
bin/verdaccio
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
require('../build/lib/cli');
|
||||
56
circle.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
machine:
|
||||
environment:
|
||||
YARN_VERSION: 1.3.2
|
||||
PATH: "${PATH}:${HOME}/.yarn/bin:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin"
|
||||
node:
|
||||
version: 9
|
||||
dependencies:
|
||||
pre:
|
||||
- git config --global user.email "verdacciobot@users.noreply.github.com"
|
||||
- git config --global user.name "Verdaccio bot 🤖 for Deployments"
|
||||
- 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc'
|
||||
- |
|
||||
if [[ ! -e ~/.yarn/bin/yarn || $(yarn --version) != "${YARN_VERSION}" ]]; then
|
||||
curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version $YARN_VERSION
|
||||
fi
|
||||
- nvm install 6
|
||||
- nvm install 8
|
||||
|
||||
cache_directories:
|
||||
- ~/.yarn
|
||||
- ~/.cache/yarn
|
||||
- "node_modules"
|
||||
override:
|
||||
- yarn install --no-progress
|
||||
test:
|
||||
override:
|
||||
- yarn run pre:ci
|
||||
- nvm alias default 6
|
||||
- yarn run test
|
||||
- nvm alias default 8
|
||||
- yarn run test
|
||||
- nvm alias default 9
|
||||
- yarn run test
|
||||
- yarn run test:e2e
|
||||
- yarn run coverage:publish
|
||||
- echo "machine github.com login verdacciobot password $GITHUB_TOKEN" > ~/.netrc
|
||||
- cd website && yarn install && GIT_USER=verdacciobot USE_SSH=false yarn run publish-gh-pages
|
||||
deployment:
|
||||
production:
|
||||
tag: /(v)?[0-9]+(\.[0-9]+)*/
|
||||
commands:
|
||||
- ./scripts/publish.sh
|
||||
alpha-release:
|
||||
tag: /.*-alpha.*/
|
||||
commands:
|
||||
- ./scripts/alpha-publish.sh
|
||||
beta-release:
|
||||
tag: /.*-beta.*/
|
||||
commands:
|
||||
- ./scripts/beta-publish.sh
|
||||
general:
|
||||
branches:
|
||||
ignore:
|
||||
- gh-pages
|
||||
- l10n_master
|
||||
- /release\/.*/
|
||||
1
conf/README.md
Normal file
@@ -0,0 +1 @@
|
||||
This directory is for config examples.
|
||||
50
conf/default.yaml
Normal file
@@ -0,0 +1,50 @@
|
||||
#
|
||||
# This is the default config file. It allows all users to do anything,
|
||||
# so don't use it on production systems.
|
||||
#
|
||||
# Look here for more config file examples:
|
||||
# https://github.com/verdaccio/verdaccio/tree/master/conf
|
||||
#
|
||||
|
||||
# path to a directory with all packages
|
||||
storage: ./storage
|
||||
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
# Maximum amount of users allowed to register, defaults to "+inf".
|
||||
# You can set this to -1 to disable registration.
|
||||
#max_users: 1000
|
||||
|
||||
# a list of other known repositories we can talk to
|
||||
uplinks:
|
||||
npmjs:
|
||||
url: https://registry.npmjs.org/
|
||||
|
||||
packages:
|
||||
'@*/*':
|
||||
# scoped packages
|
||||
access: $all
|
||||
publish: $authenticated
|
||||
proxy: npmjs
|
||||
|
||||
'**':
|
||||
# allow all users (including non-authenticated users) to read and
|
||||
# publish all packages
|
||||
#
|
||||
# you can specify usernames/groupnames (depending on your auth plugin)
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow all known users to publish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
|
||||
# if package is not available locally, proxy requests to 'npmjs' registry
|
||||
proxy: npmjs
|
||||
|
||||
# log settings
|
||||
logs:
|
||||
- {type: stdout, format: pretty, level: http}
|
||||
#- {type: file, path: verdaccio.log, level: info}
|
||||
|
||||
53
conf/docker.yaml
Normal file
@@ -0,0 +1,53 @@
|
||||
#
|
||||
# This is the config file used for the docker images.
|
||||
# It allows all users to do anything, so don't use it on production systems.
|
||||
#
|
||||
# Do not configure host and port under `listen` in this file
|
||||
# as it will be ignored when using docker.
|
||||
# see https://github.com/verdaccio/verdaccio/blob/master/wiki/docker.md#docker-and-custom-port-configuration
|
||||
#
|
||||
# Look here for more config file examples:
|
||||
# https://github.com/verdaccio/verdaccio/tree/master/conf
|
||||
#
|
||||
|
||||
# path to a directory with all packages
|
||||
storage: /verdaccio/storage
|
||||
|
||||
auth:
|
||||
htpasswd:
|
||||
file: /verdaccio/conf/htpasswd
|
||||
# Maximum amount of users allowed to register, defaults to "+infinity".
|
||||
# You can set this to -1 to disable registration.
|
||||
#max_users: 1000
|
||||
|
||||
# a list of other known repositories we can talk to
|
||||
uplinks:
|
||||
npmjs:
|
||||
url: https://registry.npmjs.org/
|
||||
|
||||
packages:
|
||||
'@*/*':
|
||||
# scoped packages
|
||||
access: $all
|
||||
publish: $authenticated
|
||||
proxy: npmjs
|
||||
|
||||
'**':
|
||||
# allow all users (including non-authenticated users) to read and
|
||||
# publish all packages
|
||||
#
|
||||
# you can specify usernames/groupnames (depending on your auth plugin)
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow all known users to publish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
|
||||
# if package is not available locally, proxy requests to 'npmjs' registry
|
||||
proxy: npmjs
|
||||
|
||||
# log settings
|
||||
logs:
|
||||
- {type: stdout, format: pretty, level: http}
|
||||
#- {type: file, path: verdaccio.log, level: info}
|
||||
185
conf/full.yaml
Normal file
@@ -0,0 +1,185 @@
|
||||
# path to a directory with all packages
|
||||
storage: ./storage
|
||||
|
||||
web:
|
||||
# WebUI is enabled as default, if you want disable it, just uncomment this line
|
||||
#enable: false
|
||||
|
||||
title: Verdaccio
|
||||
|
||||
# logo: logo.png
|
||||
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
# Maximum amount of users allowed to register, defaults to "+infinity".
|
||||
# You can set this to -1 to disable registration.
|
||||
#max_users: 1000
|
||||
|
||||
# a list of other known repositories we can talk to
|
||||
uplinks:
|
||||
npmjs:
|
||||
url: https://registry.npmjs.org/
|
||||
|
||||
# amount of time to wait for repository to respond
|
||||
# before giving up and use the local cached copy
|
||||
#timeout: 30s
|
||||
|
||||
# maximum time in which data is considered up to date
|
||||
#
|
||||
# default is 2 minutes, so server won't request the same data from
|
||||
# uplink if a similar request was made less than 2 minutes ago
|
||||
#maxage: 2m
|
||||
|
||||
# if two subsequent requests fail, no further requests will be sent to
|
||||
# this uplink for five minutes
|
||||
#max_fails: 2
|
||||
#fail_timeout: 5m
|
||||
|
||||
# timeouts are defined in the same way as nginx, see:
|
||||
# http://wiki.nginx.org/ConfigNotation
|
||||
|
||||
# add/override HTTP headers sent to the uplink server
|
||||
# this allows for HTTP Basic auth for example:
|
||||
#headers:
|
||||
# authorization: "Basic YourBase64EncodedCredentials=="
|
||||
|
||||
# set this to false to prevent tarballs from this upstream
|
||||
# to be stored in the local storage (defaults to true)
|
||||
#cache: false
|
||||
|
||||
packages:
|
||||
'@*/*':
|
||||
# scoped packages
|
||||
access: $all
|
||||
publish: $authenticated
|
||||
proxy: npmjs
|
||||
# uncomment this for packages with "local-" prefix to be available
|
||||
# for admin only, it's a recommended way of handling private packages
|
||||
#'local-*':
|
||||
# access: admin
|
||||
# publish: admin
|
||||
# # you can override storage directory for a group of packages this way:
|
||||
# storage: 'local_storage'
|
||||
|
||||
'**':
|
||||
# allow all users to read packages (including non-authenticated users)
|
||||
#
|
||||
# you can specify usernames/groupnames (depending on your auth plugin)
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow 'admin' to publish packages
|
||||
publish: $authenticated
|
||||
|
||||
# if package is not available locally, proxy requests to 'npmjs' registry
|
||||
proxy: npmjs
|
||||
|
||||
#####################################################################
|
||||
# Advanced settings
|
||||
#####################################################################
|
||||
|
||||
## Special packages publish configurations
|
||||
#publish:
|
||||
## This will allow the publisher to publish packages even if any uplink is down.
|
||||
# allow_offline: true
|
||||
|
||||
# if you use nginx with custom path, use this to override links
|
||||
#url_prefix: https://dev.company.local/verdaccio/
|
||||
|
||||
# You can specify listen address (or simply a port).
|
||||
# If you add multiple values, verdaccio will listen on all of them.
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
#listen:
|
||||
# - localhost:4873 # default value
|
||||
# - http://localhost:4873 # same thing
|
||||
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
|
||||
# - https://example.org:4873 # if you want to use https
|
||||
# - [::1]:4873 # ipv6
|
||||
# - unix:/tmp/verdaccio.sock # unix socket
|
||||
|
||||
# Configure HTTPS, it is required if you use "https" protocol above.
|
||||
#https:
|
||||
# key: path/to/server.key
|
||||
# cert: path/to/server.crt
|
||||
# ca: path/to/server.pem
|
||||
|
||||
# type: file | stdout | stderr
|
||||
# level: trace | debug | info | http (default) | warn | error | fatal
|
||||
#
|
||||
# parameters for file: name is filename
|
||||
# {type: 'file', path: 'verdaccio.log', level: 'debug'},
|
||||
#
|
||||
# parameters for stdout and stderr: format: json | pretty | pretty-timestamped
|
||||
# {type: 'stdout', format: 'pretty', level: 'debug'},
|
||||
logs:
|
||||
- {type: stdout, format: pretty, level: http}
|
||||
#- {type: file, path: verdaccio.log, level: info}
|
||||
|
||||
# you can specify proxy used with all requests in wget-like manner here
|
||||
# (or set up ENV variables with the same name)
|
||||
#http_proxy: http://something.local/
|
||||
#https_proxy: https://something.local/
|
||||
#no_proxy: localhost,127.0.0.1
|
||||
|
||||
# maximum size of uploaded json document
|
||||
# increase it if you have "request entity too large" errors
|
||||
#max_body_size: 1mb
|
||||
|
||||
# Notify Settings
|
||||
# Notify was built primarily to use with Slack's Incoming
|
||||
# webhooks, but will also deliver a simple payload to
|
||||
# any endpoint. Currently only active for publish / create
|
||||
# commands.
|
||||
notify:
|
||||
# Choose a method. Technically this will accept any HTTP
|
||||
# request method, but probably stick to GET or POST
|
||||
method: POST
|
||||
# Only run this notification if the package name matches the regular
|
||||
# expression
|
||||
packagePattern: ^example-package$
|
||||
# Any flags to be used with the regular expression
|
||||
packagePatternFlags: i
|
||||
# If this endpoint requires specific headers, set them here
|
||||
# as an array of key: value objects.
|
||||
headers: [{'Content-type': 'application/x-www-form-urlencoded'}]
|
||||
# set the URL endpoint for this call
|
||||
endpoint: https://hooks.slack.com/...
|
||||
# Finally, the content you will be sending in the body.
|
||||
# This data will first be run through Handlebars to parse
|
||||
# any Handlebar expressions. All data housed in the metadata object
|
||||
# is available for use within the expressions.
|
||||
content: ' {{ handlebar-expression }}'
|
||||
# For Slack, follow the following format:
|
||||
# content: '{ "text": "Package *{{ name }}* published to version *{{ dist-tags.latest }}*", "username": "Verdaccio", "icon_emoji": ":package:" }'
|
||||
|
||||
# Multiple notification endpoints can be created by specifying a collection
|
||||
'example-package-1':
|
||||
method: POST
|
||||
# Only run this notification if the package name matches the regular
|
||||
# expression
|
||||
packagePattern: ^example-package-regex$
|
||||
# Any flags to be used with the regular expression
|
||||
# since verdaccio 2.2.2 this property has been disabled read #108
|
||||
# it will be re-enabled after 2.5.0
|
||||
# packagePatternFlags: i
|
||||
# If this endpoint requires specific headers, set them here
|
||||
# as an array of key: value objects.
|
||||
# headers supports as well a literal object
|
||||
headers: {'Content-type': 'application/x-www-form-urlencoded'}
|
||||
# set the URL endpoint for this call
|
||||
endpoint: https://hooks.slack.com/...
|
||||
# Finally, the content you will be sending in the body.
|
||||
# This data will first be run through Handlebars to parse
|
||||
# any Handlebar expressions. All data housed in the metadata object
|
||||
# is available for use within the expressions.
|
||||
content: ' {{ handlebar-expression }}'
|
||||
# For Slack, follow the following format:
|
||||
# content: '{ "text": "Package *{{ name }}* published to version *{{ dist-tags.latest }}*", "username": "Verdaccio", "icon_emoji": ":package:" }'
|
||||
|
||||
# Configure plugins that can register custom middlewares
|
||||
#middlewares:
|
||||
# plugin-name:
|
||||
# setting: true
|
||||
50
crowdin.yaml
Normal file
@@ -0,0 +1,50 @@
|
||||
project_identifier_env: CROWDIN_VERDACCIO_PROJECT_ID
|
||||
api_key_env: CROWDIN_VERDACCIO_API_KEY
|
||||
base_path: "./"
|
||||
preserve_hierarchy: true
|
||||
commit_message: 'docs(website): new translations'
|
||||
|
||||
files:
|
||||
-
|
||||
source: '/docs/*.md'
|
||||
translation: '/website/translated_docs/%locale%/%original_file_name%'
|
||||
languages_mapping: &anchor
|
||||
locale:
|
||||
'af': 'af'
|
||||
'ar': 'ar'
|
||||
'bs-BA': 'bs-BA'
|
||||
'ca': 'ca'
|
||||
'cs': 'cs'
|
||||
'da': 'da'
|
||||
'de': 'de'
|
||||
'el': 'el'
|
||||
'es-ES': 'es-ES'
|
||||
'fa': 'fa-IR'
|
||||
'fi': 'fi'
|
||||
'fr': 'fr'
|
||||
'he': 'he'
|
||||
'hu': 'hu'
|
||||
'id': 'id-ID'
|
||||
'it': 'it'
|
||||
'ja': 'ja'
|
||||
'ko': 'ko'
|
||||
'mr': 'mr-IN'
|
||||
'nl': 'nl'
|
||||
'no': 'no-NO'
|
||||
'pl': 'pl'
|
||||
'pt-BR': 'pt-BR'
|
||||
'pt-PT': 'pt-PT'
|
||||
'ro': 'ro'
|
||||
'ru': 'ru'
|
||||
'sk': 'sk-SK'
|
||||
'sr': 'sr'
|
||||
'sv-SE': 'sv-SE'
|
||||
'tr': 'tr'
|
||||
'uk': 'uk'
|
||||
'vi': 'vi'
|
||||
'zh-CN': 'zh-Hans'
|
||||
'zh-TW': 'zh-Hant'
|
||||
-
|
||||
source: '/website/i18n/en.json'
|
||||
translation: '/website/i18n/%locale%.json'
|
||||
languages_mapping: *anchor
|
||||
14
docker-compose.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
version: '2.1'
|
||||
services:
|
||||
verdaccio:
|
||||
build: .
|
||||
container_name: verdaccio
|
||||
environment:
|
||||
- PORT
|
||||
ports:
|
||||
- $PORT:$PORT
|
||||
volumes:
|
||||
- verdaccio:/verdaccio
|
||||
volumes:
|
||||
verdaccio:
|
||||
driver: local
|
||||
14
docs/ansible.md
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
id: ansible
|
||||
title: "Installing with Ansible"
|
||||
---
|
||||
|
||||
We have a customised solution for `verdaccio` in our organization.
|
||||
|
||||
[https://github.com/verdaccio/ansible-verdaccio](https://github.com/verdaccio/ansible-verdaccio)
|
||||
|
||||
#### Other options
|
||||
|
||||
* Ansible role for Gentoo users: [jirutka/ansible-role-sinopia](https://github.com/jirutka/ansible-role-sinopia).
|
||||
* Ansible role for Ubuntu users: [jagregory/sinopia-ansible](https://github.com/jagregory/sinopia-ansible).
|
||||
* ansible-verdaccio-role [https://github.com/refinery29/ansible-verdaccio-role](https://github.com/refinery29/ansible-verdaccio-role)
|
||||
56
docs/auth.md
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
id: authentification
|
||||
title: "Authentification"
|
||||
---
|
||||
|
||||
The authentification is tied to the auth [plugin](plugins.md) you are using. The package restrictions also is handled by the [Package Access](packages.md).
|
||||
|
||||
The client authentification is handled by `npm` client itself. Once you login to the application:
|
||||
|
||||
```bash
|
||||
npm adduser --registry http://localhost:4873
|
||||
```
|
||||
|
||||
A token is generated in the `npm` configuration file hosted in your user home folder. For more information about `.npmrc` read the [official documentation](https://docs.npmjs.com/files/npmrc).
|
||||
|
||||
```bash
|
||||
cat .npmrc
|
||||
registry=http://localhost:5555/
|
||||
//localhost:5555/:_authToken="secretVerdaccioToken"
|
||||
//registry.npmjs.org/:_authToken=secretNpmjsToken
|
||||
```
|
||||
|
||||
#### Anonymous publish
|
||||
|
||||
`verdaccio`allows you to enable anonymous publish, to achieve that you will need to set up correctly your [packages acces](packages.md).
|
||||
|
||||
Eg:
|
||||
|
||||
```yaml
|
||||
'my-company-*':
|
||||
access: $anonymous
|
||||
publish: $anonymous
|
||||
proxy: npmjs
|
||||
```
|
||||
|
||||
As is described [on issue #212](https://github.com/verdaccio/verdaccio/issues/212#issuecomment-308578500) until `npm@5.3.0` and all minor releases **won't allow you publish without a token**. However `yarn` has not such limitation.
|
||||
|
||||
## Default htpasswd
|
||||
|
||||
In order to simplify the setup, `verdaccio` use a build-in plugin based on `htpasswd`.
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
# Maximum amount of users allowed to register, defaults to "+inf".
|
||||
# You can set this to -1 to disable registration.
|
||||
#max_users: 1000
|
||||
```
|
||||
|
||||
Property | Type | Required | Example | Support | Description
|
||||
--- | --- | --- | --- | --- | ---
|
||||
file | string | Yes | ./htpasswd | all | file that host the encrypted credentials
|
||||
max_users | number | No | 1000 | all | set limit of users
|
||||
|
||||
In case to decide do not allow user to login, you can set `max_users: -1`.
|
||||
73
docs/build.md
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
id: build
|
||||
title: "Build the source code"
|
||||
---
|
||||
|
||||
Verdaccio relies on `yarn` instead `npm` to download depenedencies.
|
||||
|
||||
*Note: the current build only will build with `➜ yarn` latest.*
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
```
|
||||
|
||||
## Scripts
|
||||
|
||||
We have a list of scripts that you will use for diferent kind of tasks, in the following section
|
||||
we describe all posible task based on branches.
|
||||
|
||||
### Branch (2.x)
|
||||
|
||||
On branch `2.x` the unique part we have to build is the UI which is based on React.js, webpack and CSS Modules.
|
||||
|
||||
#### Scripts
|
||||
|
||||
script | Description
|
||||
--- | --- |
|
||||
release | this script is used to generate changelog and raise up the version according the commits messages
|
||||
prepublish | it ensures before publish the new ui is being generated
|
||||
test | run all the test
|
||||
pre:ci | specific task for CI, build the UI required for test
|
||||
test:ci | run test generating coverage
|
||||
test:only | run only test
|
||||
test:coverage | run `nyc` as a wrapper to generate coverage with mocha test
|
||||
coverage:html | run `nyc` to generate coverage reports
|
||||
coverage:publish | publish on `codecov` the coverage (don't use it)
|
||||
lint | run the linting for javascript code.
|
||||
lint:css | run the linter for `css`
|
||||
dev:webui | run a `webpack` server with hot reloading enabled `http://localhost:4872/#/` it requires a `verdaccio` server running in port `4873`.
|
||||
pre:webpack | prepare the field for webpack (it a substask of `build:webui`)
|
||||
build:webui | create the static assets for the UI with `webpack`
|
||||
build:docker | create a local docker image with `verdaccio`
|
||||
build:rpi | create a local docker for raspberry pi image with `verdaccio` **(experimental with no support)**
|
||||
|
||||
|
||||
#### Master branch (3.x)
|
||||
|
||||
The current major version is based on `babel` and `flow`. If you switch from master ensure to run `yarn install` again.
|
||||
|
||||
*Note: Only new scripts in bold*
|
||||
|
||||
### Scripts
|
||||
|
||||
script | Description
|
||||
--- | --- |
|
||||
**flow** | run flow check
|
||||
**dev:start** | run `babel-node` and transpile code on memory
|
||||
**code:build** | transpile `verdaccio` with `babel` and copy transpiled code to `build/`
|
||||
release | this script is used to generate changelog and raise up the version according the commits messages
|
||||
prepublish | it ensures before publish the new ui is being generated
|
||||
test | run all the test `jest`
|
||||
test:unit | run the unit test
|
||||
test:func | run the funtional test
|
||||
pre:ci | specific task for CI, build the UI required for test
|
||||
pretest | A shorcut for transpile the code
|
||||
test:ci | run test generating coverage
|
||||
coverage:publish | publish on `codecov` the coverage (CI task specific, do not use it)
|
||||
lint | run the linting for javascript code.
|
||||
lint:css | run the linter for `css`
|
||||
dev:webui | run a `webpack` server with hot reloading enabled `http://localhost:4872/#/` it requires a `verdaccio` server running in port `4873`.
|
||||
pre:webpack | prepare the field for webpack (it a substask of `build:webui`)
|
||||
build:webui | create the static assets for the UI with `webpack`
|
||||
build:docker | create a local docker image with `verdaccio`
|
||||
build:rpi | create a local docker for raspberry pi image with `verdaccio` **(experimental with no support)**
|
||||
26
docs/cli.md
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
id: cli
|
||||
title: "Command Line Tool"
|
||||
---
|
||||
|
||||
The verdaccio CLI is your go start the application.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
$ verdaccio --listen 4000 --config ~./config.yaml
|
||||
```
|
||||
|
||||
Command | Default | Example | Description
|
||||
--- | --- | --- | ---
|
||||
--listen \ **-l** | 4873 | -p 7000 | http port
|
||||
--config \ **-c** | ~/.local/verdaccio/config.yaml | ~./config.yaml | the configuration file
|
||||
|
||||
## Default config file location
|
||||
|
||||
To locate the home directory, we rely on **$XDG_DATA_HOME** as a first choice and Windows environment we look for [APPDATA environment variable](https://www.howtogeek.com/318177/what-is-the-appdata-folder-in-windows/).
|
||||
|
||||
## Default storage location
|
||||
|
||||
We use **$XDG_DATA_HOME** environment variable as default to locate the storage by default which [should be the same](https://askubuntu.com/questions/538526/is-home-local-share-the-default-value-for-xdg-data-home-in-ubuntu-14-04) as $HOME/.local/share.
|
||||
If you are using a custom storage, this location is irrelevant.
|
||||
189
docs/config.md
Normal file
@@ -0,0 +1,189 @@
|
||||
---
|
||||
id: configuration
|
||||
title: "Configuration File"
|
||||
---
|
||||
|
||||
This file is the cornerstone of verdaccio where you can modify the default behaviour, enable plugins and extend features.
|
||||
|
||||
A default configuration file is created the very first time you run `verdaccio`.
|
||||
|
||||
## Default Configuration
|
||||
|
||||
The default configuration has support for **scoped** packages and allow any user to access all packages but only **authenticated users to publish**.
|
||||
|
||||
```yaml
|
||||
storage: ./storage
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
uplinks:
|
||||
npmjs:
|
||||
url: https://registry.npmjs.org/
|
||||
packages:
|
||||
'@*/*':
|
||||
access: $all
|
||||
publish: $authenticated
|
||||
proxy: npmjs
|
||||
'**':
|
||||
proxy: npmjs
|
||||
logs:
|
||||
- {type: stdout, format: pretty, level: http}
|
||||
```
|
||||
|
||||
## Sections
|
||||
|
||||
The following sections explain what means each property and the different options.
|
||||
|
||||
### Storage
|
||||
|
||||
Is the location of the default storage. **Verdaccio is by default based on local file system**.
|
||||
|
||||
```yaml
|
||||
storage: ./storage
|
||||
```
|
||||
|
||||
### Authentification
|
||||
|
||||
The authentification set up is done here, the default auth is based on `htpasswd` and is built-in. You can modify this behaviour via [plugins](plugins.md). For more information about this section read the [auth page](auth.md).
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
max_users: 1000
|
||||
```
|
||||
|
||||
### Web UI
|
||||
|
||||
This properties allow you to modify the look and feel of the web UI. For more information about this section read the [web ui page](web.md).
|
||||
|
||||
```yaml
|
||||
web:
|
||||
enable: true
|
||||
title: Verdaccio
|
||||
logo: logo.png
|
||||
```
|
||||
|
||||
### Uplinks
|
||||
|
||||
Uplinks is the ability of the system to fetch packages from remote registries when those packages are not available locally. For more information about this section read the [uplinks page](uplinks.md).
|
||||
|
||||
|
||||
```yaml
|
||||
uplinks:
|
||||
npmjs:
|
||||
url: https://registry.npmjs.org/
|
||||
```
|
||||
|
||||
### Packages
|
||||
|
||||
Packages allow the user how the packages are gonna be accessed. For more information about this section read the [packages page](packages.md).
|
||||
|
||||
|
||||
```yaml
|
||||
packages:
|
||||
'@*/*':
|
||||
access: $all
|
||||
publish: $authenticated
|
||||
proxy: npmjs
|
||||
```
|
||||
|
||||
## Advanced Settings
|
||||
|
||||
### Offline Publish
|
||||
|
||||
By default `verdaccio` does not allow to publish when the client is offline, that behavior can be overridden set it in to *true*.
|
||||
|
||||
```yaml
|
||||
publish:
|
||||
allow_offline: false
|
||||
```
|
||||
|
||||
<small>Since: `verdaccio@2.3.6` due [#223](https://github.com/verdaccio/verdaccio/pull/223)</small>
|
||||
|
||||
### URL Prefix
|
||||
|
||||
```yaml
|
||||
url_prefix: https://dev.company.local/verdaccio/
|
||||
```
|
||||
|
||||
Since: `verdaccio@2.3.6` due [#197](https://github.com/verdaccio/verdaccio/pull/197)
|
||||
|
||||
|
||||
### Max Body Size
|
||||
|
||||
By default the maximum body size for a JSON document is `1mb`, if you run in errors as `"request entity too large"` you may increase this value.
|
||||
|
||||
```yaml
|
||||
max_body_size: 1mb
|
||||
```
|
||||
|
||||
### Listen Port
|
||||
|
||||
`verdaccio` runs by default in the port `4873`. Change the port can be done via [cli](cli.md) or in the configuration file, the following options are valid.
|
||||
|
||||
```yaml
|
||||
listen:
|
||||
# - localhost:4873 # default value
|
||||
# - http://localhost:4873 # same thing
|
||||
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
|
||||
# - https://example.org:4873 # if you want to use https
|
||||
# - "[::1]:4873" # ipv6
|
||||
# - unix:/tmp/verdaccio.sock # unix socket
|
||||
```
|
||||
|
||||
### HTTPS
|
||||
|
||||
To enable `https` in `verdaccio` enough with set your `listen` domain with the protocol *https://*. For more information about this section read the [ssl page](ssl.md).
|
||||
|
||||
|
||||
```yaml
|
||||
https:
|
||||
key: ./path/verdaccio-key.pem
|
||||
cert: ./path/verdaccio-cert.pem
|
||||
ca: ./path/verdaccio-csr.pem
|
||||
```
|
||||
|
||||
### Proxy
|
||||
|
||||
Proxies are special-purpose HTTP servers designed to transfer data from remote servers to local clients.
|
||||
|
||||
#### http_proxy and https_proxy
|
||||
|
||||
If you have a proxy in your network you can set a `X-Forwarded-For` header using the following properties.
|
||||
|
||||
```yaml
|
||||
http_proxy: http://something.local/
|
||||
https_proxy: https://something.local/
|
||||
```
|
||||
|
||||
#### no_proxy
|
||||
|
||||
This variable should contain a comma-separated list of domain extensions proxy should not be used for.
|
||||
|
||||
```yaml
|
||||
http_proxy: http://something.local/
|
||||
https_proxy: https://something.local/
|
||||
```
|
||||
|
||||
### Notifications
|
||||
|
||||
Enable notifications to three party tools is fairly easy via web hooks. For more information about this section read the [notifications page](notifications.md).
|
||||
|
||||
```yaml
|
||||
notify:
|
||||
method: POST
|
||||
headers: [{'Content-Type': 'application/json'}]
|
||||
endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
||||
content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
||||
```
|
||||
|
||||
|
||||
> For more detailed configuration settings, please [check the source code](https://github.com/verdaccio/verdaccio/tree/master/conf).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
160
docs/contributing.md
Normal file
@@ -0,0 +1,160 @@
|
||||
---
|
||||
id: contributing
|
||||
title: "Contributing Verdaccio"
|
||||
---
|
||||
|
||||
First of all 👏👏 thanks for visiting this page, for us means you are willing contribute to `verdaccio` and we are happy for that. Jumping into an unfamiliar code base is not easy but we are here to help you.
|
||||
|
||||
## Comunication Channels
|
||||
|
||||
If you are willing for asking, we use two channels for discussions:
|
||||
|
||||
* [Public Gitter channel](https://gitter.im/verdaccio/)
|
||||
* [Contributors Slack channel](https://verdaccio-npm.slack.com) (unfortunately only by email invitation, you might ask in **Gitter** to be included)
|
||||
|
||||
## Getting started
|
||||
|
||||
As a first glance verdaccio is a single repository, but there are many ways you might contribute and a variety of technologies to practice.
|
||||
|
||||
### Finding my spot
|
||||
|
||||
All we have different skills, so, let's see where you might feel comfortable.
|
||||
|
||||
### I know or I want to learn Node.js
|
||||
|
||||
Node.js is the base of `verdaccio`, we use libraries as `express`, `commander`, `request` or `async`. Verdaccio is basically a Rest API that create a communication with `npm` clients compatible, as `yarn`.
|
||||
|
||||
We have a long [list of plugins](plugins.md) ready to be used and improved but at the same time [you might create your own](dev-plugins.md).
|
||||
|
||||
### I would prefer to work in the User Interface
|
||||
|
||||
Recently we have moved to modern techonologies as `React` and `element-react`. We are looking forward to see new ideas how to improve the UI.
|
||||
|
||||
### I feel more confortable improving the stack
|
||||
|
||||
Of course, we will be happy to help us improving the stack, you can upgrade dependencies as `eslint`, `stylelint`, `webpack`. You migt merely improve the `webpack` configuration would be great. Any suggestion is very welcome. Furthermore whether you have experience with **Yeoman** you might help us with the [verdaccio generator](https://github.com/verdaccio/generator-verdaccio-plugin).
|
||||
|
||||
Here some ideas:
|
||||
|
||||
* Create a common eslint rules to be used across all dependencies or plugins
|
||||
* Improve Flow types definitions delivery
|
||||
* Moving to Webpack 4
|
||||
* Improve hot reload with Webpack
|
||||
* We use babel and webpack across all dependencies, why not a common preset?
|
||||
* Improve continous integration delivery
|
||||
|
||||
### I do great Documentation
|
||||
|
||||
Many contributors find typos and grammar issues, that also helps to improve the overall experience for troubleshooting.
|
||||
|
||||
### I am a Designer
|
||||
|
||||
We have a frontend website [http://www.verdaccio.org/](http://www.verdaccio.org/) that will be happy to see your ideas.
|
||||
|
||||
Our website is based on [Docusaurus](https://docusaurus.io/).
|
||||
|
||||
### I am a DevOps
|
||||
|
||||
We have a widely popular Docker image [https://hub.docker.com/r/verdaccio/verdaccio/](https://hub.docker.com/r/verdaccio/verdaccio/) that need maintenance and pretty likely huge improvements, we need your knowledge for the benefits of all users.
|
||||
|
||||
We have support for **Kubernetes**, **Puppet**, **Ansible** and **Chef** and we need help in those fields, feel free to see all repositories.
|
||||
|
||||
### I can do translations
|
||||
|
||||
Verdaccio aims to be multilingual, in order to achieve it **we have the awesome support** of [Crowdin](https://crowdin.com) that is an amazing platform for translations.
|
||||
|
||||
<img src="https://d3n8a8pro7vhmx.cloudfront.net/uridu/pages/144/attachments/original/1485948891/Crowdin.png" width="400px"/>
|
||||
|
||||
We have setup a project where you can choose your favourite language, if you do not find your language feel free to request one [creating a ticket](https://github.com/verdaccio/verdaccio/issues/new).
|
||||
|
||||
[Go to Crowdin Verdaccio](https://crowdin.com/project/verdaccio)
|
||||
|
||||
|
||||
## I'm ready to contribute
|
||||
|
||||
If you are thinking *"I've seen already the [repositories](repositories.md) and I'm willing to start right away"* then I have good news for you, that's the next step.
|
||||
|
||||
You will need learn how to build, [we have prepared a guide just for that](build.md).
|
||||
|
||||
Once you have played around with all scripts and you know how to use them, we are ready to go to the next step, run the [**Unit Test**](test.md).
|
||||
|
||||
|
||||
## Full list of contributors. We want to see your face here !
|
||||
|
||||
[<img alt="juanpicado" src="https://avatars0.githubusercontent.com/u/558752?v=4&s=117" width="117">](https://github.com/juanpicado) |[<img alt="rlidwka" src="https://avatars0.githubusercontent.com/u/999113?v=4&s=117" width="117">](https://github.com/rlidwka) |[<img alt="Meeeeow" src="https://avatars3.githubusercontent.com/u/19658647?v=4&s=117" width="117">](https://github.com/Meeeeow) |[<img alt="trentearl" src="https://avatars2.githubusercontent.com/u/802857?v=4&s=117" width="117">](https://github.com/trentearl) |[<img alt="ayusharma" src="https://avatars0.githubusercontent.com/u/6918450?v=4&s=117" width="117">](https://github.com/ayusharma) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[juanpicado](https://github.com/juanpicado) |[rlidwka](https://github.com/rlidwka) |[Meeeeow](https://github.com/Meeeeow) |[trentearl](https://github.com/trentearl) |[ayusharma](https://github.com/ayusharma) |
|
||||
|
||||
[<img alt="verdacciobot" src="https://avatars0.githubusercontent.com/u/35213902?v=4&s=117" width="117">](https://github.com/verdacciobot) |[<img alt="jmwilkinson" src="https://avatars0.githubusercontent.com/u/17836030?v=4&s=117" width="117">](https://github.com/jmwilkinson) |[<img alt="UnitedMarsupials" src="https://avatars1.githubusercontent.com/u/1486340?v=4&s=117" width="117">](https://github.com/UnitedMarsupials) |[<img alt="ryan-codingintrigue" src="https://avatars0.githubusercontent.com/u/9048902?v=4&s=117" width="117">](https://github.com/ryan-codingintrigue) |[<img alt="ramonornela" src="https://avatars1.githubusercontent.com/u/187946?v=4&s=117" width="117">](https://github.com/ramonornela) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[verdacciobot](https://github.com/verdacciobot) |[jmwilkinson](https://github.com/jmwilkinson) |[UnitedMarsupials](https://github.com/UnitedMarsupials) |[ryan-codingintrigue](https://github.com/ryan-codingintrigue) |[ramonornela](https://github.com/ramonornela) |
|
||||
|
||||
[<img alt="renovate-bot" src="https://avatars0.githubusercontent.com/u/25180681?v=4&s=117" width="117">](https://github.com/renovate-bot) |[<img alt="rodriguesbreno" src="https://avatars2.githubusercontent.com/u/19731692?v=4&s=117" width="117">](https://github.com/rodriguesbreno) |[<img alt="vernak2539" src="https://avatars2.githubusercontent.com/u/521270?v=4&s=117" width="117">](https://github.com/vernak2539) |[<img alt="jachstet-sea" src="https://avatars0.githubusercontent.com/u/7993508?v=4&s=117" width="117">](https://github.com/jachstet-sea) |[<img alt="lgaitan" src="https://avatars0.githubusercontent.com/u/5970350?v=4&s=117" width="117">](https://github.com/lgaitan) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[renovate-bot](https://github.com/renovate-bot) |[rodriguesbreno](https://github.com/rodriguesbreno) |[vernak2539](https://github.com/vernak2539) |[jachstet-sea](https://github.com/jachstet-sea) |[lgaitan](https://github.com/lgaitan) |
|
||||
|
||||
[<img alt="crispy1989" src="https://avatars1.githubusercontent.com/u/2132722?v=4&s=117" width="117">](https://github.com/crispy1989) |[<img alt="neuquino" src="https://avatars1.githubusercontent.com/u/1971027?v=4&s=117" width="117">](https://github.com/neuquino) |[<img alt="markpeterfejes" src="https://avatars3.githubusercontent.com/u/7912231?v=4&s=117" width="117">](https://github.com/markpeterfejes) |[<img alt="steve-p-com" src="https://avatars3.githubusercontent.com/u/5180548?v=4&s=117" width="117">](https://github.com/steve-p-com) |[<img alt="BartDubois" src="https://avatars0.githubusercontent.com/u/1180931?v=4&s=117" width="117">](https://github.com/BartDubois) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[crispy1989](https://github.com/crispy1989) |[neuquino](https://github.com/neuquino) |[markpeterfejes](https://github.com/markpeterfejes) |[steve-p-com](https://github.com/steve-p-com) |[BartDubois](https://github.com/BartDubois) |
|
||||
|
||||
[<img alt="karfau" src="https://avatars1.githubusercontent.com/u/135657?v=4&s=117" width="117">](https://github.com/karfau) |[<img alt="030" src="https://avatars1.githubusercontent.com/u/7524528?v=4&s=117" width="117">](https://github.com/030) |[<img alt="Qwerios" src="https://avatars2.githubusercontent.com/u/254447?v=4&s=117" width="117">](https://github.com/Qwerios) |[<img alt="wiggisser" src="https://avatars3.githubusercontent.com/u/3647678?v=4&s=117" width="117">](https://github.com/wiggisser) |[<img alt="kfatehi" src="https://avatars1.githubusercontent.com/u/175305?v=4&s=117" width="117">](https://github.com/kfatehi) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[karfau](https://github.com/karfau) |[030](https://github.com/030) |[Qwerios](https://github.com/Qwerios) |[wiggisser](https://github.com/wiggisser) |[kfatehi](https://github.com/kfatehi) |
|
||||
|
||||
[<img alt="imsnif" src="https://avatars3.githubusercontent.com/u/795598?v=4&s=117" width="117">](https://github.com/imsnif) |[<img alt="denisbabineau" src="https://avatars2.githubusercontent.com/u/12616025?v=4&s=117" width="117">](https://github.com/denisbabineau) |[<img alt="HCanber" src="https://avatars2.githubusercontent.com/u/800302?v=4&s=117" width="117">](https://github.com/HCanber) |[<img alt="jgoz" src="https://avatars2.githubusercontent.com/u/132233?v=4&s=117" width="117">](https://github.com/jgoz) |[<img alt="josephg" src="https://avatars1.githubusercontent.com/u/47413?v=4&s=117" width="117">](https://github.com/josephg) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[imsnif](https://github.com/imsnif) |[denisbabineau](https://github.com/denisbabineau) |[HCanber](https://github.com/HCanber) |[jgoz](https://github.com/jgoz) |[josephg](https://github.com/josephg) |
|
||||
|
||||
[<img alt="kba" src="https://avatars0.githubusercontent.com/u/273367?v=4&s=117" width="117">](https://github.com/kba) |[<img alt="aledbf" src="https://avatars2.githubusercontent.com/u/161571?v=4&s=117" width="117">](https://github.com/aledbf) |[<img alt="drubin" src="https://avatars0.githubusercontent.com/u/237513?v=4&s=117" width="117">](https://github.com/drubin) |[<img alt="plitex" src="https://avatars3.githubusercontent.com/u/2946823?v=4&s=117" width="117">](https://github.com/plitex) |[<img alt="nedelenbos" src="https://avatars2.githubusercontent.com/u/6542243?v=4&s=117" width="117">](https://github.com/nedelenbos) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[kba](https://github.com/kba) |[aledbf](https://github.com/aledbf) |[drubin](https://github.com/drubin) |[plitex](https://github.com/plitex) |[nedelenbos](https://github.com/nedelenbos) |
|
||||
|
||||
[<img alt="mysiar" src="https://avatars3.githubusercontent.com/u/13708162?v=4&s=117" width="117">](https://github.com/mysiar) |[<img alt="bufferoverflow" src="https://avatars2.githubusercontent.com/u/378909?v=4&s=117" width="117">](https://github.com/bufferoverflow) |[<img alt="osher" src="https://avatars0.githubusercontent.com/u/803101?v=4&s=117" width="117">](https://github.com/osher) |[<img alt="danielo515" src="https://avatars2.githubusercontent.com/u/2270425?v=4&s=117" width="117">](https://github.com/danielo515) |[<img alt="marnel" src="https://avatars3.githubusercontent.com/u/3189424?v=4&s=117" width="117">](https://github.com/marnel) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[mysiar](https://github.com/mysiar) |[bufferoverflow](https://github.com/bufferoverflow) |[osher](https://github.com/osher) |[danielo515](https://github.com/danielo515) |[marnel](https://github.com/marnel) |
|
||||
|
||||
[<img alt="aszmyd" src="https://avatars2.githubusercontent.com/u/3050805?v=4&s=117" width="117">](https://github.com/aszmyd) |[<img alt="estliberitas" src="https://avatars2.githubusercontent.com/u/568962?v=4&s=117" width="117">](https://github.com/estliberitas) |[<img alt="Alexandre-io" src="https://avatars0.githubusercontent.com/u/8135542?v=4&s=117" width="117">](https://github.com/Alexandre-io) |[<img alt="amirmohsen" src="https://avatars1.githubusercontent.com/u/7075106?v=4&s=117" width="117">](https://github.com/amirmohsen) |[<img alt="BarthV" src="https://avatars3.githubusercontent.com/u/1901955?v=4&s=117" width="117">](https://github.com/BarthV) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[aszmyd](https://github.com/aszmyd) |[estliberitas](https://github.com/estliberitas) |[Alexandre-io](https://github.com/Alexandre-io) |[amirmohsen](https://github.com/amirmohsen) |[BarthV](https://github.com/BarthV) |
|
||||
|
||||
[<img alt="BogdanAlexandru" src="https://avatars2.githubusercontent.com/u/5050074?v=4&s=117" width="117">](https://github.com/BogdanAlexandru) |[<img alt="iambrandonn" src="https://avatars2.githubusercontent.com/u/1644549?v=4&s=117" width="117">](https://github.com/iambrandonn) |[<img alt="robi-wan" src="https://avatars3.githubusercontent.com/u/30210?v=4&s=117" width="117">](https://github.com/robi-wan) |[<img alt="crohrer" src="https://avatars3.githubusercontent.com/u/1255222?v=4&s=117" width="117">](https://github.com/crohrer) |[<img alt="psychocode" src="https://avatars3.githubusercontent.com/u/4641709?v=4&s=117" width="117">](https://github.com/psychocode) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[BogdanAlexandru](https://github.com/BogdanAlexandru) |[iambrandonn](https://github.com/iambrandonn) |[robi-wan](https://github.com/robi-wan) |[crohrer](https://github.com/crohrer) |[psychocode](https://github.com/psychocode) |
|
||||
|
||||
[<img alt="conorhastings" src="https://avatars2.githubusercontent.com/u/8263298?v=4&s=117" width="117">](https://github.com/conorhastings) |[<img alt="coreyjewett" src="https://avatars3.githubusercontent.com/u/12782?v=4&s=117" width="117">](https://github.com/coreyjewett) |[<img alt="dbroadhurst" src="https://avatars1.githubusercontent.com/u/5667105?v=4&s=117" width="117">](https://github.com/dbroadhurst) |[<img alt="etiennetremel" src="https://avatars1.githubusercontent.com/u/995474?v=4&s=117" width="117">](https://github.com/etiennetremel) |[<img alt="einfallstoll" src="https://avatars3.githubusercontent.com/u/619048?v=4&s=117" width="117">](https://github.com/einfallstoll) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[conorhastings](https://github.com/conorhastings) |[coreyjewett](https://github.com/coreyjewett) |[dbroadhurst](https://github.com/dbroadhurst) |[etiennetremel](https://github.com/etiennetremel) |[einfallstoll](https://github.com/einfallstoll) |
|
||||
|
||||
[<img alt="gempain" src="https://avatars2.githubusercontent.com/u/13135149?v=4&s=117" width="117">](https://github.com/gempain) |[<img alt="lbguilherme" src="https://avatars0.githubusercontent.com/u/546954?v=4&s=117" width="117">](https://github.com/lbguilherme) |[<img alt="gecruz" src="https://avatars1.githubusercontent.com/u/29457476?v=4&s=117" width="117">](https://github.com/gecruz) |[<img alt="idangozlan" src="https://avatars3.githubusercontent.com/u/1991021?v=4&s=117" width="117">](https://github.com/idangozlan) |[<img alt="jrussellsmyth" src="https://avatars3.githubusercontent.com/u/2998207?v=4&s=117" width="117">](https://github.com/jrussellsmyth) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[gempain](https://github.com/gempain) |[lbguilherme](https://github.com/lbguilherme) |[gecruz](https://github.com/gecruz) |[idangozlan](https://github.com/idangozlan) |[jrussellsmyth](https://github.com/jrussellsmyth) |
|
||||
|
||||
[<img alt="jirutka" src="https://avatars1.githubusercontent.com/u/949228?v=4&s=117" width="117">](https://github.com/jirutka) |[<img alt="kingjan1999" src="https://avatars3.githubusercontent.com/u/3208269?v=4&s=117" width="117">](https://github.com/kingjan1999) |[<img alt="vStone" src="https://avatars2.githubusercontent.com/u/356719?v=4&s=117" width="117">](https://github.com/vStone) |[<img alt="zaventh" src="https://avatars1.githubusercontent.com/u/669283?v=4&s=117" width="117">](https://github.com/zaventh) |[<img alt="jeremymoritz" src="https://avatars3.githubusercontent.com/u/2779583?v=4&s=117" width="117">](https://github.com/jeremymoritz) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[jirutka](https://github.com/jirutka) |[kingjan1999](https://github.com/kingjan1999) |[vStone](https://github.com/vStone) |[zaventh](https://github.com/zaventh) |[jeremymoritz](https://github.com/jeremymoritz) |
|
||||
|
||||
[<img alt="jondlm" src="https://avatars2.githubusercontent.com/u/3290587?v=4&s=117" width="117">](https://github.com/jondlm) |[<img alt="speier" src="https://avatars3.githubusercontent.com/u/415836?v=4&s=117" width="117">](https://github.com/speier) |[<img alt="kodypeterson" src="https://avatars1.githubusercontent.com/u/1934708?v=4&s=117" width="117">](https://github.com/kodypeterson) |[<img alt="mrblackus" src="https://avatars3.githubusercontent.com/u/2353980?v=4&s=117" width="117">](https://github.com/mrblackus) |[<img alt="metaa" src="https://avatars3.githubusercontent.com/u/5056880?v=4&s=117" width="117">](https://github.com/metaa) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[jondlm](https://github.com/jondlm) |[speier](https://github.com/speier) |[kodypeterson](https://github.com/kodypeterson) |[mrblackus](https://github.com/mrblackus) |[metaa](https://github.com/metaa) |
|
||||
|
||||
[<img alt="bajtos" src="https://avatars1.githubusercontent.com/u/1140553?v=4&s=117" width="117">](https://github.com/bajtos) |[<img alt="okv" src="https://avatars3.githubusercontent.com/u/465522?v=4&s=117" width="117">](https://github.com/okv) |[<img alt="Vrtak-CZ" src="https://avatars1.githubusercontent.com/u/112567?v=4&s=117" width="117">](https://github.com/Vrtak-CZ) |[<img alt="rafacesar" src="https://avatars3.githubusercontent.com/u/71136?v=4&s=117" width="117">](https://github.com/rafacesar) |[<img alt="rbpinheiro" src="https://avatars2.githubusercontent.com/u/1257483?v=4&s=117" width="117">](https://github.com/rbpinheiro) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[bajtos](https://github.com/bajtos) |[okv](https://github.com/okv) |[Vrtak-CZ](https://github.com/Vrtak-CZ) |[rafacesar](https://github.com/rafacesar) |[rbpinheiro](https://github.com/rbpinheiro) |
|
||||
|
||||
[<img alt="r3wald" src="https://avatars3.githubusercontent.com/u/190202?v=4&s=117" width="117">](https://github.com/r3wald) |[<img alt="robertgroh" src="https://avatars3.githubusercontent.com/u/5773739?v=4&s=117" width="117">](https://github.com/robertgroh) |[<img alt="prssn" src="https://avatars1.githubusercontent.com/u/951218?v=4&s=117" width="117">](https://github.com/prssn) |[<img alt="RodrigoBalest" src="https://avatars0.githubusercontent.com/u/4810463?v=4&s=117" width="117">](https://github.com/RodrigoBalest) |[<img alt="RomainLK" src="https://avatars3.githubusercontent.com/u/1440514?v=4&s=117" width="117">](https://github.com/RomainLK) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[r3wald](https://github.com/r3wald) |[robertgroh](https://github.com/robertgroh) |[prssn](https://github.com/prssn) |[RodrigoBalest](https://github.com/RodrigoBalest) |[RomainLK](https://github.com/RomainLK) |
|
||||
|
||||
[<img alt="rmg" src="https://avatars2.githubusercontent.com/u/17978?v=4&s=117" width="117">](https://github.com/rmg) |[<img alt="samcday" src="https://avatars0.githubusercontent.com/u/531550?v=4&s=117" width="117">](https://github.com/samcday) |[<img alt="tarun1793" src="https://avatars0.githubusercontent.com/u/1783440?v=4&s=117" width="117">](https://github.com/tarun1793) |[<img alt="tcort" src="https://avatars3.githubusercontent.com/u/216720?v=4&s=117" width="117">](https://github.com/tcort) |[<img alt="grrowl" src="https://avatars2.githubusercontent.com/u/907140?v=4&s=117" width="117">](https://github.com/grrowl) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[rmg](https://github.com/rmg) |[samcday](https://github.com/samcday) |[tarun1793](https://github.com/tarun1793) |[tcort](https://github.com/tcort) |[grrowl](https://github.com/grrowl) |
|
||||
|
||||
[<img alt="tlvince" src="https://avatars2.githubusercontent.com/u/323761?v=4&s=117" width="117">](https://github.com/tlvince) |[<img alt="lordvlad" src="https://avatars2.githubusercontent.com/u/1217769?v=4&s=117" width="117">](https://github.com/lordvlad) |[<img alt="wpasternak" src="https://avatars3.githubusercontent.com/u/958449?v=4&s=117" width="117">](https://github.com/wpasternak) |[<img alt="yannickcr" src="https://avatars2.githubusercontent.com/u/13209?v=4&s=117" width="117">](https://github.com/yannickcr) |[<img alt="yannickglt" src="https://avatars0.githubusercontent.com/u/1006426?v=4&s=117" width="117">](https://github.com/yannickglt) |
|
||||
:---: |:---: |:---: |:---: |:---: |
|
||||
[tlvince](https://github.com/tlvince) |[lordvlad](https://github.com/lordvlad) |[wpasternak](https://github.com/wpasternak) |[yannickcr](https://github.com/yannickcr) |[yannickglt](https://github.com/yannickglt) |
|
||||
|
||||
[<img alt="silkentrance" src="https://avatars3.githubusercontent.com/u/6068824?v=4&s=117" width="117">](https://github.com/silkentrance) |[<img alt="jjaakola" src="https://avatars3.githubusercontent.com/u/3587824?v=4&s=117" width="117">](https://github.com/jjaakola) |[<img alt="maxlaverse" src="https://avatars0.githubusercontent.com/u/3045354?v=4&s=117" width="117">](https://github.com/maxlaverse) |[<img alt="ChadKillingsworth" src="https://avatars2.githubusercontent.com/u/1247639?v=4&s=117" width="117">](https://github.com/ChadKillingsworth) |
|
||||
:---: |:---: |:---: |:---: |
|
||||
[silkentrance](https://github.com/silkentrance) |[jjaakola](https://github.com/jjaakola) |[maxlaverse](https://github.com/maxlaverse) |[ChadKillingsworth](https://github.com/ChadKillingsworth) |
|
||||
|
||||
|
||||
147
docs/dev-plugins.md
Normal file
@@ -0,0 +1,147 @@
|
||||
---
|
||||
id: dev-plugins
|
||||
title: "Developing Plugins"
|
||||
---
|
||||
|
||||
There are many ways to extend `verdaccio`, currently we support `authentication plugins`, `middleware plugins` (since `v2.7.0`) and `storage plugins` since (`v3.x`).
|
||||
|
||||
## Authentication Plugins
|
||||
|
||||
This section will describe how it looks like a Verdaccio plugin in a ES5 way. Basically we have to return an object with a single method called `authenticate` that will recieve 3 arguments (`user, password, callback`). Once the authentication has been executed there is 2 options to give a response to `verdaccio`.
|
||||
|
||||
### API
|
||||
|
||||
```js
|
||||
function authenticate (user, password, callback) {
|
||||
...more stuff
|
||||
}
|
||||
```
|
||||
|
||||
##### OnError
|
||||
|
||||
Either something bad happened or auth was unsuccessful.
|
||||
|
||||
```
|
||||
callback(null, false)
|
||||
```
|
||||
|
||||
##### OnSuccess
|
||||
|
||||
The auth was successful.
|
||||
|
||||
|
||||
`groups` is an array of strings where the user is part of.
|
||||
|
||||
```
|
||||
callback(null, groups);
|
||||
```
|
||||
|
||||
### Example
|
||||
|
||||
```javascript
|
||||
function Auth(config, stuff) {
|
||||
var self = Object.create(Auth.prototype);
|
||||
self._users = {};
|
||||
|
||||
// config for this module
|
||||
self._config = config;
|
||||
|
||||
// verdaccio logger
|
||||
self._logger = stuff.logger;
|
||||
|
||||
// pass verdaccio logger to ldapauth
|
||||
self._config.client_options.log = stuff.logger;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
Auth.prototype.authenticate = function (user, password, callback) {
|
||||
var LdapClient = new LdapAuth(self._config.client_options);
|
||||
....
|
||||
LdapClient.authenticate(user, password, function (err, ldapUser) {
|
||||
...
|
||||
var groups;
|
||||
...
|
||||
callback(null, groups);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = Auth;
|
||||
```
|
||||
|
||||
And the setup
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
```
|
||||
Where `htpasswd` is the sufix of the plugin name. eg: `verdaccio-htpasswd` and the rest of the body would be the plugin configuration params.
|
||||
|
||||
## Middleware Integration
|
||||
|
||||
Middleware plugins have the capability to modify the API layer, either adding new endpoints or intercepting requests. A pretty good example
|
||||
of middleware plugin is the (sinopia-github-oauth)[https://github.com/soundtrackyourbrand/sinopia-github-oauth]) compatible with `verdaccio`.
|
||||
|
||||
### API
|
||||
|
||||
```js
|
||||
function register_middlewares(expressApp, auth, storage) {
|
||||
...more stuff
|
||||
}
|
||||
```
|
||||
|
||||
To register a middleware we need an object with a single method called `register_middlewares` that will recieve 3 arguments (`expressApp, auth, storage`).
|
||||
*Auth* is the authentification instance and *storage* is also the main Storage instance that will give you have access to all to the storage actions.
|
||||
|
||||
|
||||
## Storage Plugins
|
||||
|
||||
Since `verdaccio@3.x` we also can plug a custom storage.
|
||||
|
||||
### API
|
||||
|
||||
The storage API is a bit more complex, you will need to create a class that return a `ILocalData` implementation. Please see details bellow.
|
||||
|
||||
```js
|
||||
|
||||
class LocalDatabase<ILocalData>{
|
||||
constructor(config: Config, logger: Logger): ILocalData;
|
||||
}
|
||||
|
||||
interface ILocalData {
|
||||
add(name: string): SyncReturn;
|
||||
remove(name: string): SyncReturn;
|
||||
get(): StorageList;
|
||||
getPackageStorage(packageInfo: string): IPackageStorage;
|
||||
sync(): ?SyncReturn;
|
||||
}
|
||||
|
||||
interface ILocalPackageManager {
|
||||
writeTarball(name: string): IUploadTarball;
|
||||
readTarball(name: string): IReadTarball;
|
||||
readPackage(fileName: string, callback: Callback): void;
|
||||
createPackage(name: string, value: any, cb: Callback): void;
|
||||
deletePackage(fileName: string, callback: Callback): void;
|
||||
removePackage(callback: Callback): void;
|
||||
updatePackage(pkgFileName: string,
|
||||
updateHandler: Callback,
|
||||
onWrite: Callback,
|
||||
transformPackage: Function,
|
||||
onEnd: Callback): void;
|
||||
savePackage(fileName: string, json: Package, callback: Callback): void;
|
||||
}
|
||||
|
||||
interface IUploadTarball extends stream$PassThrough {
|
||||
abort(): void;
|
||||
done(): void;
|
||||
}
|
||||
|
||||
interface IReadTarball extends stream$PassThrough {
|
||||
abort(): void;
|
||||
done(): void;
|
||||
}
|
||||
```
|
||||
|
||||
> This API still is experimental and might change next minor versions. The default [LocalStorage plugin](https://github.com/verdaccio/local-storage) it comes built-in in `verdaccio` and it is being
|
||||
loaded if any storage plugin has been defined.
|
||||
162
docs/docker.md
Normal file
@@ -0,0 +1,162 @@
|
||||
---
|
||||
id: docker
|
||||
title: Docker
|
||||
---
|
||||
|
||||
To pull the latest pre-built [docker image](https://hub.docker.com/r/verdaccio/verdaccio/):
|
||||
|
||||
```bash
|
||||
docker pull verdaccio/verdaccio
|
||||
```
|
||||
|
||||
## Tagged Versions
|
||||
|
||||
Since version `v2.x` you can pull docker images by [tag](https://hub.docker.com/r/verdaccio/verdaccio/tags/), as follows:
|
||||
|
||||
For a major version:
|
||||
|
||||
```bash
|
||||
docker pull verdaccio/verdaccio:2
|
||||
```
|
||||
For a minor version:
|
||||
|
||||
```bash
|
||||
docker pull verdaccio/verdaccio:2.1
|
||||
```
|
||||
|
||||
For a specific (patch) version:
|
||||
|
||||
```bash
|
||||
docker pull verdaccio/verdaccio:2.1.7
|
||||
```
|
||||
For the next major release using the `beta` version.
|
||||
|
||||
```bash
|
||||
docker pull verdaccio/verdaccio:beta
|
||||
```
|
||||
|
||||
The Canary version (master branch) is tagged as `alpha`
|
||||
|
||||
```bash
|
||||
docker pull verdaccio/verdaccio:alpha
|
||||
```
|
||||
|
||||
> If you are interested on a list of tags, [please visit the Docker Hub website](https://hub.docker.com/r/verdaccio/verdaccio/tags/).
|
||||
|
||||
## Running verdaccio using Docker
|
||||
|
||||
To run the docker container:
|
||||
```bash
|
||||
docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio
|
||||
```
|
||||
The last argument defines which image to use.
|
||||
The above line will pull the latest prebuilt image from dockerhub, if you haven't done that already.
|
||||
|
||||
If you have [build an image locally](#build-your-own-docker-image) use `verdaccio` as the last argument.
|
||||
|
||||
|
||||
You can use `-v` to mount `conf` and `storage` to the hosts filesystem:
|
||||
```bash
|
||||
V_PATH=/path/for/verdaccio; docker run -it --rm --name verdaccio -p 4873:4873 \
|
||||
-v $V_PATH/conf:/verdaccio/conf \
|
||||
-v $V_PATH/storage:/verdaccio/storage \
|
||||
verdaccio/verdaccio
|
||||
```
|
||||
|
||||
### Docker and custom port configuration
|
||||
Any `host:port` configured in `conf/config.yaml` under `listen` is currently ignored when using docker.
|
||||
|
||||
If you want to reach verdaccio docker instance under different port, lets say `5000`
|
||||
in your `docker run` command replace `-p 4873:4873` with `-p 5000:4873`.
|
||||
|
||||
In case you need to specify which port to listen to **in the docker container**,
|
||||
since version 2.?.? you can do so by providing additional arguments to `docker run`: `--env PORT=5000`
|
||||
This changes which port the docker container exposes and the port verdaccio listens to.
|
||||
|
||||
Of course the numbers you give to `-p` paremeter need to match,
|
||||
so assuming you want them to all be the same this is what you could copy, paste and adopt:
|
||||
```bash
|
||||
PORT=5000; docker run -it --rm --name verdaccio \
|
||||
--env PORT -p $PORT:$PORT
|
||||
verdaccio/verdaccio
|
||||
```
|
||||
|
||||
### Using HTTPS with Docker
|
||||
You can configure the protocol verdaccio is going to listen on, similarly to the port configuration.
|
||||
You have to overwrite the default value("http") of the `PROTOCOL` environment variable to "https", after you specified the certificates in the config.yaml.
|
||||
|
||||
```bash
|
||||
PROTOCOL=https; docker run -it --rm --name verdaccio \
|
||||
--env PROTOCOL -p 4873:4873
|
||||
verdaccio/verdaccio
|
||||
```
|
||||
|
||||
### Using docker-compose
|
||||
|
||||
1. Get the latest version of [docker-compose](https://github.com/docker/compose).
|
||||
2. Build and run the container:
|
||||
|
||||
```bash
|
||||
$ docker-compose up --build
|
||||
```
|
||||
|
||||
You can set the port to use (for both container and host) by prefixing the above command with `PORT=5000 `.
|
||||
|
||||
Docker will generate a named volume in which to store persistent application data. You can use `docker inspect` or `docker volume inspect` to reveal the physical location of the volume and edit the configuration, such as:
|
||||
|
||||
```
|
||||
$ docker volume inspect verdaccio_verdaccio
|
||||
[
|
||||
{
|
||||
"Name": "verdaccio_verdaccio",
|
||||
"Driver": "local",
|
||||
"Mountpoint": "/var/lib/docker/volumes/verdaccio_verdaccio/_data",
|
||||
"Labels": null,
|
||||
"Scope": "local"
|
||||
}
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
## Build your own Docker image
|
||||
|
||||
```bash
|
||||
docker build -t verdaccio .
|
||||
```
|
||||
|
||||
There is also an npm script for building the docker image, so you can also do:
|
||||
|
||||
```bash
|
||||
npm run build:docker
|
||||
```
|
||||
|
||||
Note: The first build takes some minutes to build because it needs to run `npm install`,
|
||||
and it will take that long again whenever you change any file that is not listed in `.dockerignore`.
|
||||
|
||||
If you want to use the docker image on a rpi or a compatible device there is also a dockerfile available.
|
||||
To build the docker image for raspberry pi execute:
|
||||
|
||||
```bash
|
||||
npm run build:docker:rpi
|
||||
```
|
||||
|
||||
Please note that for any of the above docker commands you need to have docker installed on your machine and the docker executable should be available on your `$PATH`.
|
||||
|
||||
## Docker Examples
|
||||
|
||||
There is a separate repository that hosts multiple configurations to compose Docker images with `verdaccio`, for instance, as reverse proxy:
|
||||
|
||||
https://github.com/verdaccio/docker-examples
|
||||
|
||||
## Docker Custom Builds
|
||||
|
||||
* [docker-verdaccio-gitlab](https://github.com/snics/docker-verdaccio-gitlab)
|
||||
* [docker-verdaccio](https://github.com/deployable/docker-verdaccio)
|
||||
* [docker-verdaccio-s3](https://github.com/asynchrony/docker-verdaccio-s3) Private NPM container that can backup to s3
|
||||
* [docker-verdaccio-ldap](https://github.com/snadn/docker-verdaccio-ldap)
|
||||
* [verdaccio-ldap](https://github.com/nathantreid/verdaccio-ldap)
|
||||
* [verdaccio-compose-local-bridge](https://github.com/shingtoli/verdaccio-compose-local-bridge)
|
||||
* [docker-verdaccio](https://github.com/Global-Solutions/docker-verdaccio)
|
||||
* [verdaccio-docker](https://github.com/idahobean/verdaccio-docker)
|
||||
* [verdaccio-server](https://github.com/andru255/verdaccio-server)
|
||||
* [coldrye-debian-verdaccio](https://github.com/coldrye-docker/coldrye-debian-verdaccio) docker image providing verdaccio from coldrye-debian-nodejs.
|
||||
104
docs/home.md
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
id: home
|
||||
title: "Verdaccio npm proxy private registry"
|
||||
---
|
||||
|
||||
|
||||
<div class="top-section-home">
|
||||
<div class="logo-section"></div>
|
||||
|
||||
<div class="title-section">
|
||||
site.title
|
||||
</div>
|
||||
|
||||
<div class="subtitle-section">
|
||||
site.description
|
||||
</div>
|
||||
|
||||
<div class="badges">
|
||||
<span>
|
||||
<a href="https://github.com/verdaccio/verdaccio">
|
||||
<img src="https://img.shields.io/github/stars/verdaccio/verdaccio.svg?style=social&label=Star&maxAge=3600" style="max-width:100%;">
|
||||
</a>
|
||||
</span>
|
||||
<span>
|
||||
<a href="https://www.npmjs.org/package/verdaccio">
|
||||
<img src="https://img.shields.io/npm/v/verdaccio.svg" alt="npm version badge">
|
||||
</a>
|
||||
</span>
|
||||
<span>
|
||||
<a href="https://www.npmjs.org/package/verdaccio">
|
||||
<img src="https://camo.githubusercontent.com/81e53cc0a99c3ae97709fa66232a5807c346c61e/687474703a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f76657264616363696f2e737667" alt="downloads badge" data-canonical-src="http://img.shields.io/npm/dm/verdaccio.svg" style="max-width:100%;">
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="link-section">
|
||||
<a href="https://github.com/verdaccio" title="Github verdaccio page">GitHub</a>
|
||||
<a href="https://github.com/verdaccio/verdaccio/tree/master/wiki" title="Documentation">Documentation</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
## Easy to Install
|
||||
|
||||
One single command to install the application
|
||||
|
||||
```sh
|
||||
$> npm install --global verdaccio
|
||||
|
||||
# or
|
||||
|
||||
$> yarn global add verdaccio
|
||||
|
||||
```
|
||||
|
||||
## Easy to Set Up
|
||||
|
||||
Set your verdaccio registry as default
|
||||
|
||||
```sh
|
||||
|
||||
$> npm set registry http://localhost:4873
|
||||
|
||||
$> npm adduser --registry http://localhost:4873
|
||||
|
||||
```
|
||||
|
||||
## Easy to Use
|
||||
|
||||
Run it in your terminal
|
||||
|
||||
```sh
|
||||
|
||||
$> verdaccio
|
||||
warn --- config file - /home/.config/verdaccio/config.yaml
|
||||
warn --- http address - http://localhost:5555/ - verdaccio/2.2.0
|
||||
|
||||
```
|
||||
|
||||
|
||||
#### That's it ! Enjoy your **private package manager**.
|
||||
|
||||
##### and all the most popular npm clients are supported.
|
||||
|
||||
<div class="client-support">
|
||||
<div class="client">
|
||||
<img src="css/icon/npm-logo.svg" alt="Docker Support" width="200"/>
|
||||
</div>
|
||||
<div class="client">
|
||||
<img src="css/icon/yarn-logo.svg" alt="Docker Support" width="200"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="section">
|
||||
<h1>
|
||||
Docker Ready
|
||||
</h1>
|
||||
<a href="https://github.com/verdaccio/verdaccio/blob/master/wiki/docker.md" target="_blank">
|
||||
<img src="css/icon/docker.jpeg" alt="Docker Support" width="200"/>
|
||||
</a>
|
||||
</div>
|
||||
109
docs/iis-server.md
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
id: iss-server
|
||||
title: "Installing on IIS server"
|
||||
---
|
||||
|
||||
These instructions were written for Windows Server 2012, IIS 8, [Node.js 0.12.3](https://nodejs.org/), [iisnode 0.2.16](https://github.com/tjanczuk/iisnode) and [verdaccio 2.1.0](https://github.com/verdaccio/verdaccio).
|
||||
|
||||
* Install IIS Install [iisnode](https://github.com/tjanczuk/iisnode).
|
||||
Make sure you install prerequisites (Url Rewrite Module & node) as explained in the instructions for iisnode.
|
||||
* Create a new folder in Explorer where you want to host verdaccio.
|
||||
For example `C:\verdaccio`.
|
||||
Save [package.json](https://github.com/verdaccio/verdaccio/wiki/Installing-on-IIS-server#packagejson),
|
||||
[start.js](https://github.com/verdaccio/verdaccio/wiki/Installing-on-IIS-server#startjs)
|
||||
and [web.config](https://github.com/verdaccio/verdaccio/wiki/Installing-on-IIS-server#webconfig) in this folder.
|
||||
* Create a new site in Internet Information Services Manager. You can name it whatever you want.
|
||||
I'll call it verdaccio in these [instructions](http://www.iis.net/learn/manage/configuring-security/application-pool-identities). Specify the path to where you saved all files and a port number.
|
||||
* Go back to Explorer and give the user that runs the application pool modify rights to the folder you just created. If you've named the new site verdaccio and did not change the app pool, it's running under an ApplicationPoolIdentity and you should give the user IIS AppPool\verdaccio modify rights see instructions if you need help. (You can restrict access later if you want so that it only has modify rights on the iisnode and verdaccio\storage)
|
||||
* Start a command prompt and execute the commands below to download verdaccio:
|
||||
|
||||
````
|
||||
cd c:\verdaccio
|
||||
npm install
|
||||
````
|
||||
|
||||
* Make sure you have an inbound rule accepting TCP traffic to the port in Windows Firewall
|
||||
* Thats it! Now you can navigate to the host and port that you specified
|
||||
|
||||
|
||||
I wanted the `verdaccio` site to be the default site in IIS so I did the following:
|
||||
|
||||
* I made sure the .npmrc file in `c:\users{yourname}\` had the registry set to `"registry=http://localhost/"`
|
||||
* I stopped the "Default Web Site" and only start the site "verdaccio" site in IIS
|
||||
* I set the bindings to "http", ip address "All Unassigned" on port 80, ok any warning or prompts
|
||||
|
||||
These instructions are based on [Host Sinopia in IIS
|
||||
on Windows](https://gist.github.com/HCanber/4dd8409f79991a09ac75). I had to tweak my web config as per below but you may find the original from the
|
||||
for mentioned link works better
|
||||
|
||||
A default configuration file will be created `c:\verdaccio\verdaccio\config.yaml`
|
||||
|
||||
### package.json
|
||||
|
||||
````json
|
||||
{
|
||||
"name": "iisnode-verdaccio",
|
||||
"version": "1.0.0",
|
||||
"description": "Hosts verdaccio in iisnode",
|
||||
"main": "start.js",
|
||||
"dependencies": {
|
||||
"verdaccio": "^2.1.0"
|
||||
}
|
||||
}
|
||||
````
|
||||
|
||||
### start.js
|
||||
|
||||
````bash
|
||||
process.argv.push('-l', 'unix:' + process.env.PORT);
|
||||
require('./node_modules/verdaccio/src/lib/cli.js');
|
||||
````
|
||||
|
||||
### web.config
|
||||
|
||||
````xml
|
||||
<configuration>
|
||||
<system.webServer>
|
||||
<modules>
|
||||
<remove name="WebDAVModule" />
|
||||
</modules>
|
||||
|
||||
<!-- indicates that the start.js file is a node.js application
|
||||
to be handled by the iisnode module -->
|
||||
<handlers>
|
||||
<remove name="WebDAV" />
|
||||
<add name="iisnode" path="start.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Execute" />
|
||||
<add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="Execute" />
|
||||
</handlers>
|
||||
|
||||
<rewrite>
|
||||
<rules>
|
||||
|
||||
<!-- iisnode folder is where iisnode stores it's logs. These should
|
||||
never be rewritten -->
|
||||
<rule name="iisnode" stopProcessing="true">
|
||||
<match url="iisnode*" />
|
||||
<action type="None" />
|
||||
</rule>
|
||||
|
||||
<!-- Rewrite all other urls in order for verdaccio to handle these -->
|
||||
<rule name="verdaccio">
|
||||
<match url="/*" />
|
||||
<action type="Rewrite" url="start.js" />
|
||||
</rule>
|
||||
</rules>
|
||||
</rewrite>
|
||||
|
||||
<!-- exclude node_modules directory and subdirectories from serving
|
||||
by IIS since these are implementation details of node.js applications -->
|
||||
<security>
|
||||
<requestFiltering>
|
||||
<hiddenSegments>
|
||||
<add segment="node_modules" />
|
||||
</hiddenSegments>
|
||||
</requestFiltering>
|
||||
</security>
|
||||
|
||||
</system.webServer>
|
||||
</configuration>
|
||||
````
|
||||
47
docs/install.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
id: installation
|
||||
title: "Installation"
|
||||
---
|
||||
|
||||
Verdaccio is a multiplatform web application, to install you need at least some prerequisites.
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
1. Node higher than
|
||||
- For version `verdaccio@2.x` we support from Node `v4.6.1`.
|
||||
- For version `verdaccio@3.x` we support as minimum Node `6.12.0`
|
||||
2. npm `>=3.x` or `yarn`
|
||||
3. The web interface support browsers `Chrome, Firefox, Edge, and IE9`
|
||||
|
||||
## Installing the CLI
|
||||
|
||||
`verdaccio` must be install globaly using any of the most modern
|
||||
|
||||
Using `npm`
|
||||
|
||||
```bash
|
||||
npm install -g verdaccio
|
||||
```
|
||||
or using `yarn`
|
||||
|
||||
```bash
|
||||
yarn global add verdaccio
|
||||
```
|
||||
|
||||
## Basic Usage
|
||||
|
||||
Once has been installed you only need to execute the CLI command.
|
||||
|
||||
```bash
|
||||
$> verdaccio
|
||||
warn --- config file - /home/.config/verdaccio/config.yaml
|
||||
warn --- http address - http://localhost:5555/ - verdaccio/3.0.0
|
||||
```
|
||||
|
||||

|
||||
|
||||
For more information about CLI please [read the cli section](cli.md).
|
||||
|
||||
## Docker Image
|
||||
|
||||
`verdaccio` has a official docker image you can use, in the most of cases is good enough just the default configuration, for more information about how to install the official image [read the docker section](docker.md).
|
||||
99
docs/kubernetes.md
Normal file
@@ -0,0 +1,99 @@
|
||||
---
|
||||
id: kubernetes
|
||||
title: "Kubernetes"
|
||||
---
|
||||
|
||||
You can find instructions to deploy Verdaccio on a Kubernetes cluster on the
|
||||
[verdaccio/docker-example](https://github.com/verdaccio/docker-examples/tree/master/kubernetes-example)
|
||||
repository. However, the recommended method to install Verdaccio on a Kubernetes
|
||||
cluster is to use [Helm](https://helm.sh). Helm is a
|
||||
[Kubernetes](https://kubernetes.io) package manager which bring multiple
|
||||
advantages.
|
||||
|
||||
## Helm
|
||||
|
||||
### Setup Helm
|
||||
|
||||
If you haven't used Helm before, you need to setup the Helm controller called
|
||||
Tiller:
|
||||
|
||||
```bash
|
||||
helm init
|
||||
```
|
||||
|
||||
### Install
|
||||
|
||||
Deploy the Helm [stable/verdaccio](https://github.com/kubernetes/charts/tree/master/stable/verdaccio)
|
||||
chart. In this example we use `npm` as release name:
|
||||
|
||||
```bash
|
||||
helm install --name npm stable/verdaccio
|
||||
```
|
||||
|
||||
### Deploy a specific version
|
||||
|
||||
```bash
|
||||
helm install --name npm --set image.tag=2.6.5 stable/verdaccio
|
||||
```
|
||||
|
||||
### Upgrading Verdaccio
|
||||
|
||||
```bash
|
||||
helm upgrade npm stable/verdaccio
|
||||
```
|
||||
|
||||
### Uninstalling
|
||||
|
||||
```bash
|
||||
helm del --purge npm
|
||||
```
|
||||
|
||||
**Note:** this command delete all the resources, including packages that you may
|
||||
have previously published to the registry.
|
||||
|
||||
|
||||
### Custom Verdaccio configuration
|
||||
|
||||
You can customize the Verdaccio configuration using a Kubernetes *configMap*.
|
||||
|
||||
#### Prepare
|
||||
|
||||
Copy the [existing configuration](https://github.com/verdaccio/verdaccio/blob/master/conf/full.yaml)
|
||||
and adapt it for your use case:
|
||||
|
||||
```bash
|
||||
wget https://github.com/verdaccio/verdaccio/blob/master/conf/full.yaml -O config.yaml
|
||||
```
|
||||
|
||||
**Note:** Make sure you are using the right path for the storage that is used for
|
||||
persistency:
|
||||
|
||||
```yaml
|
||||
storage: /verdaccio/storage/data
|
||||
auth:
|
||||
htpasswd:
|
||||
file: /verdaccio/storage/htpasswd
|
||||
```
|
||||
|
||||
#### Deploy the configMap
|
||||
|
||||
Deploy the `configMap` to the cluster
|
||||
|
||||
```bash
|
||||
kubectl create configmap verdaccio-config --from-file ./config.yaml
|
||||
```
|
||||
|
||||
#### Deploy Verdaccio
|
||||
|
||||
Now you can deploy the Verdaccio Helm chart and specify which configuration to
|
||||
use:
|
||||
|
||||
```bash
|
||||
helm install --name npm --set customConfigMap=verdaccio-config stable/verdaccio
|
||||
```
|
||||
|
||||
## Rancher Support
|
||||
|
||||
[Rancher](http://rancher.com/) is a complete container management platform that makes managing and using containers in production really easy.
|
||||
|
||||
* [verdaccio-rancher](https://github.com/lgaticaq/verdaccio-rancher)
|
||||
25
docs/logger.md
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
id: logger
|
||||
title: "Logger"
|
||||
---
|
||||
|
||||
As any web application, verdaccio has a customisable built-in logger. You can define multiple types of outputs.
|
||||
|
||||
```yaml
|
||||
logs:
|
||||
# console output
|
||||
- {type: stdout, format: pretty, level: http}
|
||||
# file output
|
||||
- {type: file, path: verdaccio.log, level: info}
|
||||
```
|
||||
|
||||
Use `SIGUSR2` to notify the application, the log-file was rotated and it needs to reopen it.
|
||||
|
||||
### Configuration
|
||||
|
||||
Property | Type | Required | Example | Support | Description
|
||||
--- | --- | --- | --- | --- | ---
|
||||
type | string | No | [stdout, file] | all | define the output
|
||||
path | string | No | verdaccio.log | all | if type is file, define the location of that file
|
||||
format | string | No | [pretty, pretty-timestamped] | all | output format
|
||||
level | string | No | [fatal, error, warn, http, info, debug, trace] | all | verbose level
|
||||
42
docs/node-api.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
id: node-api
|
||||
title: "Node API"
|
||||
---
|
||||
|
||||
Verdaccio can be invoqued programmatically. The node API was introduced after version `verdaccio@3.0.0-alpha.10`.
|
||||
|
||||
## Usage
|
||||
|
||||
#### Programmatically
|
||||
|
||||
```js
|
||||
import startServer from 'verdaccio';
|
||||
|
||||
startServer(configJsonFormat, 6000, store, '1.0.0', 'verdaccio',
|
||||
(webServer, addrs, pkgName, pkgVersion) => {
|
||||
webServer.listen(addr.port || addr.path, addr.host, () => {
|
||||
console.log('verdaccio running');
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Other implementations
|
||||
|
||||
* [verdaccio-server](https://github.com/boringame/verdaccio-server) local npm registry proxy server
|
||||
|
||||
```js
|
||||
// js
|
||||
import * as verdaccioServer from "verdaccio-server";
|
||||
verdaccioServer.start();
|
||||
verdaccioServer.stop();
|
||||
verdaccioServer.list();
|
||||
verdaccioServer.stopAll();
|
||||
verdaccioServer.show();
|
||||
verdaccioServer.cli();
|
||||
// windows .net2
|
||||
verdaccioServer.serviceInstall();
|
||||
verdaccioServer.serviceUninstall();
|
||||
verdaccioServer.serviceStart();
|
||||
verdaccioServer.serviceStop();
|
||||
verdaccioServer.serviceRestart();
|
||||
```
|
||||
58
docs/notifications.md
Normal file
@@ -0,0 +1,58 @@
|
||||
---
|
||||
id: notifications
|
||||
title: "Notifications"
|
||||
---
|
||||
|
||||
Notify was built primarily to use with Slack's Incoming
|
||||
webhooks, but will also deliver a simple payload to
|
||||
any endpoint. Currently only active for `publish` / `create`
|
||||
commands.
|
||||
|
||||
## Usage
|
||||
|
||||
An example with a **hipchat** hook:
|
||||
|
||||
#### Single notification
|
||||
|
||||
```yaml
|
||||
notify:
|
||||
method: POST
|
||||
headers: [{'Content-Type': 'application/json'}]
|
||||
endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
||||
content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
||||
```
|
||||
|
||||
#### Multiple notification
|
||||
|
||||
```yaml
|
||||
notify:
|
||||
'example-package-1'
|
||||
method: POST
|
||||
headers: [{'Content-Type': 'application/json'}]
|
||||
endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
||||
content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
||||
'example-package-2'
|
||||
method: POST
|
||||
headers: [{'Content-Type': 'application/json'}]
|
||||
endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
||||
content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
||||
'example-package-3'
|
||||
method: POST
|
||||
headers: [{'Content-Type': 'application/json'}]
|
||||
endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
||||
content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
||||
|
||||
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Property | Type | Required | Support | Default | Description
|
||||
--- | --- | --- | --- | --- | ---
|
||||
method| string | No | all | | HTTP verb
|
||||
packagePattern| string | No | all | | Only run this notification if the package name matches the regular expression
|
||||
packagePatternFlags| string | No | all | | Any flags to be used with the regular expression
|
||||
headers| array/object | Yes | all | | If this endpoint requires specific headers, set them here as an array of key: value objects.
|
||||
endpoint| string | Yes | all | | set the URL endpoint for this call
|
||||
content| string | Yes | all | | any Handlebar expressions
|
||||
|
||||
118
docs/packages.md
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
id: packages
|
||||
title: "Package Access"
|
||||
---
|
||||
|
||||
It's a series of contrains that allow or restrict access to the local storage based in specific criteria.
|
||||
|
||||
The security constraints remains on shoulders of the plugin being used, by default `verdaccio` uses the `htpasswd` plugin. If you use a different plugin the behaviour might be different. The default plugin `htpasswd` does not handles by itself `allow_access` and `allow_publish`, it's use an internal fallback in case the plugin is not ready for it. For more information about permissions visit [the authentification section in the wiki](auth.md).
|
||||
|
||||
### Usage
|
||||
|
||||
```yalm
|
||||
packages:
|
||||
# scoped packages
|
||||
'@scope/*':
|
||||
allow_access: all
|
||||
allow_publish: all
|
||||
proxy: server2
|
||||
|
||||
'private-*':
|
||||
access: all
|
||||
publish: all
|
||||
proxy_access: uplink1
|
||||
|
||||
'**':
|
||||
# allow all users (including non-authenticated users) to read and
|
||||
# publish all packages
|
||||
allow_access: all
|
||||
allow_publish: all
|
||||
proxy_access: uplink2
|
||||
```
|
||||
if none is specified, the default one remains
|
||||
|
||||
```yaml
|
||||
packages:
|
||||
'**':
|
||||
access: all
|
||||
publish: $authenticated
|
||||
```
|
||||
|
||||
The list of valid groups according the default plugins are
|
||||
|
||||
```js
|
||||
'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous'
|
||||
```
|
||||
All users recieves all those set of permissions independently of is anonymous or not plus the groups provided by the plugin, in case of `htpasswd` return the username as a group. For instance, if you are logged as `npmUser` the list of groups will be.
|
||||
|
||||
```js
|
||||
// groups without '$' are going to be deprecated eventually
|
||||
'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous', 'npmUser'
|
||||
```
|
||||
|
||||
If you want to protect specific set packages under your group, you need todo something like this. Let's use a `Regex` that covers all prefixed `npmuser-` packages. We recomend use a prefix for your packages, in that way it'd be easier to protect them.
|
||||
|
||||
```yaml
|
||||
packages:
|
||||
'npmuser-*':
|
||||
access: npmuser
|
||||
publish: npmuser
|
||||
```
|
||||
|
||||
Restart `verdaccio` and in your console try to install `npmuser-core`.
|
||||
|
||||
```bash
|
||||
$ npm install npmuser-core
|
||||
npm install npmuser-core
|
||||
npm ERR! code E403
|
||||
npm ERR! 403 Forbidden: npmuser-core@latest
|
||||
|
||||
npm ERR! A complete log of this run can be found in:
|
||||
npm ERR! /Users/user/.npm/_logs/2017-07-02T12_20_14_834Z-debug.log
|
||||
```
|
||||
You can change the existing behaviour using a different plugin authentication. `verdaccio` just check whether the user that try to access or publish specific package belongs to the right group.
|
||||
|
||||
#### Set multiple groups
|
||||
|
||||
Define multiple access groups is fairly easy, just define them with a white space between them.
|
||||
|
||||
```yaml
|
||||
'company-*':
|
||||
allow_access: admin internal
|
||||
allow_publish: admin
|
||||
proxy_access: server1
|
||||
'supersecret-*':
|
||||
allow_access: secret super-secret-area ultra-secret-area
|
||||
allow_publish: secret ultra-secret-area
|
||||
proxy_access: server1
|
||||
|
||||
```
|
||||
|
||||
#### Blocking access to set of packages
|
||||
|
||||
If you want to block the acccess/publish to a specific group of packages. Just, do not define `access` and `publish`.
|
||||
|
||||
```yaml
|
||||
packages:
|
||||
'old-*':
|
||||
'**':
|
||||
access: all
|
||||
publish: $authenticated
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
||||
You can define mutiple `packages` and each of them must have an unique `Regex`.
|
||||
|
||||
Property | Type | Required | Example | Support | Description
|
||||
--- | --- | --- | --- | --- | ---
|
||||
allow_access/access | string | No | $all | all | define groups allowed to access the package
|
||||
allow_publish/publish | string | No | $authenticated | all | define groups allowed to publish
|
||||
proxy_access/proxy | string | No |npmjs | all | limit look ups for specific uplink
|
||||
storage | boolean | No | [true,false] | all | TODO
|
||||
|
||||
We higlight recommend do not use **allow_access**/**allow_publish** and **proxy_access** anymore, those are deprecated, please use the short version of each of those (**access**/**publish**/**proxy**
|
||||
|
||||
|
||||
|
||||
|
||||
93
docs/plugins.md
Normal file
@@ -0,0 +1,93 @@
|
||||
---
|
||||
id: plugins
|
||||
title: "Plugins"
|
||||
---
|
||||
|
||||
Verdaccio is an plugabble aplication. Currently supports multiple plugins only for [Authentication](auth.md) but there are plans to [improve the plugin system](https://github.com/verdaccio/verdaccio/issues/169). If you are interested to develop your own plugin, read the [development](development.md) section.
|
||||
|
||||
## Usage
|
||||
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
$> npm install --global verdaccio-activedirectory
|
||||
```
|
||||
`verdaccio` as a sinopia fork it has backward compability with plugins that are compatible with `sinopia@1.4.0`. In such case the installation is the same.
|
||||
|
||||
```
|
||||
&> npm install --global sinopia-memory
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
||||
Open the `config.yaml` file and update the `auth` section as follows:
|
||||
|
||||
The default configuration looks like this, due we use a build-in `htpasswd` plugin by default that you can disable just commenting out the following lines.
|
||||
|
||||
```yaml
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
# Maximum amount of users allowed to register, defaults to "+inf".
|
||||
# You can set this to -1 to disable registration.
|
||||
#max_users: 1000
|
||||
```
|
||||
|
||||
and replacing them with (in case you decide to use a `ldap` plugin.
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
activedirectory:
|
||||
url: "ldap://10.0.100.1"
|
||||
baseDN: 'dc=sample,dc=local'
|
||||
domainSuffix: 'sample.local'
|
||||
```
|
||||
|
||||
### Multiple Auth plugins
|
||||
|
||||
This is tecnically possible, the plugins order becames important, the the credentials will resolved in order.
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
# Maximum amount of users allowed to register, defaults to "+inf".
|
||||
# You can set this to -1 to disable registration.
|
||||
#max_users: 1000
|
||||
activedirectory:
|
||||
url: "ldap://10.0.100.1"
|
||||
baseDN: 'dc=sample,dc=local'
|
||||
domainSuffix: 'sample.local'
|
||||
```
|
||||
|
||||
This is a list of plugins compatible with **Verdaccio**.
|
||||
|
||||
## Sinopia Legacy Plugins
|
||||
|
||||
* [sinopia-npm](https://www.npmjs.com/package/sinopia-npm): auth plugin for sinopia supporting an npm registry.
|
||||
* [sinopia-memory](https://www.npmjs.com/package/sinopia-memory): auth plugin for sinopia that keeps users in memory.
|
||||
* [sinopia-github-oauth-cli](https://www.npmjs.com/package/sinopia-github-oauth-cli).
|
||||
* [sinopia-crowd](https://www.npmjs.com/package/sinopia-crowd): auth plugin for sinopia supporting atlassian crowd.
|
||||
* [sinopia-activedirectory](https://www.npmjs.com/package/sinopia-activedirectory): Active Directory authentication plugin for sinopia.
|
||||
* [sinopia-github-oauth](https://www.npmjs.com/package/sinopia-github-oauth): authentication plugin for sinopia2, supporting github oauth web flow.
|
||||
* [sinopia-delegated-auth](https://www.npmjs.com/package/sinopia-delegated-auth): Sinopia authentication plugin that delegates authentication to another HTTP URL
|
||||
* [sinopia-altldap](https://www.npmjs.com/package/sinopia-altldap): Alternate LDAP Auth plugin for Sinopia
|
||||
* [sinopia-request](https://www.npmjs.com/package/sinopia-request): An easy and fully auth-plugin with configuration to use an external API.
|
||||
* [sinopia-htaccess-gpg-email](https://www.npmjs.com/package/sinopia-htaccess-gpg-email): Generate password in htaccess format, encrypt with GPG and send via MailGun API to users.
|
||||
* [sinopia-mongodb](https://www.npmjs.com/package/sinopia-mongodb): An easy and fully auth-plugin with configuration to use a mongodb database.
|
||||
* [sinopia-htpasswd](https://www.npmjs.com/package/sinopia-htpasswd): auth plugin for sinopia supporting htpasswd format.
|
||||
* [sinopia-leveldb](https://www.npmjs.com/package/sinopia-leveldb): a leveldb backed auth plugin for sinopia private npm.
|
||||
* [sinopia-gitlabheres](https://www.npmjs.com/package/sinopia-gitlabheres): Gitlab authentication plugin for sinopia.
|
||||
* [sinopia-gitlab](https://www.npmjs.com/package/sinopia-gitlab): Gitlab authentication plugin for sinopia
|
||||
* [sinopia-ldap](https://www.npmjs.com/package/sinopia-ldap): LDAP auth plugin for sinopia.
|
||||
* [sinopia-github-oauth-env](https://www.npmjs.com/package/sinopia-github-oauth-env) Sinopia authentication plugin with github oauth web flow.
|
||||
|
||||
## Verdaccio Plugins (since 2.1.x)
|
||||
|
||||
* [verdaccio-bitbucket](https://github.com/idangozlan/verdaccio-bitbucket): Bitbucket authentication plugin for verdaccio.
|
||||
* [verdaccio-ldap](https://www.npmjs.com/package/verdaccio-ldap): LDAP auth plugin for verdaccio.
|
||||
* [verdaccio-active-directory](https://github.com/nowhammies/verdaccio-activedirectory): Active Directory authentication plugin for verdaccio
|
||||
* [verdaccio-gitlab](https://github.com/bufferoverflow/verdaccio-gitlab): use GitLab Personal Access Token to authenticate
|
||||
|
||||
## Caveats
|
||||
|
||||
Not all these plugins are been tested continuously, some of them might not work at all. Please if you found any issue feel free to notify the owner of each plugin.
|
||||
44
docs/protect-your-dependencies.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
id: protect-your-dependencies
|
||||
title: "Protecting packages"
|
||||
---
|
||||
|
||||
`verdaccio` allows you protect publish, to achieve that you will need to set up correctly your [packages acces](packages).
|
||||
|
||||
### Package configuration
|
||||
|
||||
Let's see for instance the following set up. You have a set of dependencies what are prefixed with `my-company-*` and you need to protect them from anonymous or another logged user without right credentials.
|
||||
|
||||
```yaml
|
||||
'my-company-*':
|
||||
access: admin teamA teamB teamC
|
||||
publish: admin teamA
|
||||
proxy: npmjs
|
||||
```
|
||||
|
||||
With this configuration, basically we allow to groups **admin** and **teamA** to * publish* and **teamA** **teamB** **teamC** *access* to such dependencies.
|
||||
|
||||
### Use case: teamD try to access the dependency
|
||||
|
||||
So, if I am logged as **teamD**. I shouldn't be able to access all dependencies that match with `my-company-*` pattern.
|
||||
|
||||
```bash
|
||||
➜ npm whoami
|
||||
teamD
|
||||
```
|
||||
I won't have access to such dependencies and also won't be visible via web for user **teamD**. If I try to access the following will happen.
|
||||
|
||||
```bash
|
||||
➜ npm install my-company-core
|
||||
npm ERR! code E403
|
||||
npm ERR! 403 Forbidden: webpack-1@latest
|
||||
```
|
||||
or with `yarn`
|
||||
|
||||
```bash
|
||||
➜ yarn add my-company-core
|
||||
yarn add v0.24.6
|
||||
info No lockfile found.
|
||||
[1/4] 🔍 Resolving packages...
|
||||
error An unexpected error occurred: "http://localhost:5555/webpack-1: unregistered users are not allowed to access package my-company-core".
|
||||
```
|
||||
30
docs/repositories.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
id: source-code
|
||||
title: "Source Code"
|
||||
---
|
||||
|
||||
`verdaccio` is composed or multiple repositories you might contribute. Look into the **issues** tab whether there is a ticket waiting for you 🤠.
|
||||
|
||||
Repository | Usage | Stack
|
||||
--- | ---| ---|
|
||||
[https://github.com/verdaccio/verdaccio](https://github.com/verdaccio/verdaccio) | The main repository | Node, Express, async, React, Babel, ES6, Mocha, Markdown, HTML, Sass
|
||||
[https://github.com/verdaccio/streams](https://github.com/verdaccio/streams) | Small library to handle streams | ES6, Babel, *Soon: Flow*
|
||||
[https://github.com/verdaccio/file-locking](https://github.com/verdaccio/file-locking) | Small library to handle locked files | ES6, Babel, *Soon: Flow*
|
||||
[https://github.com/verdaccio/local-storage](https://github.com/verdaccio/local-storage) | Default dependency for verdaccio to handle local file system storage (since `v3.x`) | ES6, Babel, Flow
|
||||
[https://github.com/verdaccio/flow-types](https://github.com/verdaccio/flow-types) | `flow` type definitions for verdaccio and sub dependencies. | Flow, flow-typed
|
||||
[https://github.com/verdaccio/verdaccio.github.io](https://github.com/verdaccio/verdaccio.github.io) | Public `verdaccio` website and future documentation page. | Markdown, HTML, Sass, Github Pages
|
||||
[https://github.com/verdaccio/docker-examples](https://github.com/verdaccio/docker-examples) | Docker examples with `docker-compose` to play around with integrations, (nginx, kubernetes, apache, ldap, etc..) | Docker Compose, Docker
|
||||
[https://github.com/verdaccio/puppet-verdaccio](https://github.com/verdaccio/puppet-verdaccio) | Puppet support | Puppet
|
||||
[https://github.com/verdaccio/ansible-verdaccio](https://github.com/verdaccio/ansible-verdaccio) | Ansible support | Ansible
|
||||
[https://github.com/verdaccio/verdaccio-cookbook](https://github.com/verdaccio/verdaccio-cookbook) | Chef support | Chef
|
||||
[https://github.com/chainlink/charts/tree/master/stable/verdaccio](https://github.com/chainlink/charts/tree/master/stable/verdaccio) | Kubernetes support | Kubernetes
|
||||
|
||||
## Experimental Repos
|
||||
|
||||
The following repositories aims to be part of the future infraestructure of `verdaccio` and are just PoC looking for active colaborators.
|
||||
|
||||
Repository | Usage | Stack
|
||||
--- | ---| ---|
|
||||
[https://github.com/verdaccio/verdaccio-memory](https://github.com/verdaccio/verdaccio-memory) | An experimental storage in memory | ES6, Babel, Flow
|
||||
[https://github.com/verdaccio/generator-verdaccio-plugin](https://github.com/verdaccio/generator-verdaccio-plugin) | Yeoman generators for future verdaccio plugins | ES6, Babel, Yeoman
|
||||
|
||||
90
docs/reverse-proxy.md
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
id: reverse-proxy
|
||||
title: "Reverse Proxy Setup"
|
||||
---
|
||||
|
||||
## Apache
|
||||
|
||||
Apache and mod_proxy should not decode/encode slashes and leave them as they are:
|
||||
|
||||
````
|
||||
<VirtualHost *:80>
|
||||
AllowEncodedSlashes NoDecode
|
||||
ProxyPass /npm http://127.0.0.1:4873 nocanon
|
||||
ProxyPassReverse /npm http://127.0.0.1:4873
|
||||
</VirtualHost>
|
||||
````
|
||||
|
||||
### Configuration with SSL
|
||||
|
||||
config.yaml
|
||||
|
||||
```yaml
|
||||
url_prefix: https://npm.your.domain.com
|
||||
```
|
||||
|
||||
Apache virtual server configuration
|
||||
|
||||
````
|
||||
apacheconfig
|
||||
<IfModule mod_ssl.c>
|
||||
<VirtualHost *:443>
|
||||
ServerName npm.your.domain.com
|
||||
SSLEngine on
|
||||
SSLCertificateFile /etc/letsencrypt/live/npm.your.domain.com/fullchain.pem
|
||||
SSLCertificateKeyFile /etc/letsencrypt/live/npm.your.domain.com/privkey.pem
|
||||
SSLProxyEngine On
|
||||
ProxyRequests Off
|
||||
ProxyPreserveHost On
|
||||
AllowEncodedSlashes NoDecode
|
||||
ProxyPass / http://127.0.0.1:4873 nocanon
|
||||
ProxyPassReverse / http://127.0.0.1:4873
|
||||
</VirtualHost>
|
||||
</IfModule>
|
||||
````
|
||||
|
||||
## Nginx
|
||||
|
||||
|
||||
````
|
||||
server {
|
||||
listen 80 default_server;
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:4873/;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
}
|
||||
````
|
||||
|
||||
## Run behind reverse proxy with different domain and port
|
||||
|
||||
If you run verdaccio behind reverse proxy, you may noticed all resource file served as relaticve path, like `http://127.0.0.1:4873/-/static`
|
||||
|
||||
To resolve this issue, you should send real domain and port to verdaccio with `Host` heade
|
||||
|
||||
Nginx configure should look like this:
|
||||
|
||||
```nginx
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:4873/;
|
||||
proxy_set_header Host $host:$server_port;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
```
|
||||
For this case, `url_prefix` should NOT set in verdaccio config
|
||||
|
||||
---
|
||||
or a sub-directory installation:
|
||||
|
||||
```nginx
|
||||
location ~ ^/verdaccio/(.*)$ {
|
||||
proxy_pass http://127.0.0.1:4873/$1;
|
||||
proxy_set_header Host $host:$server_port;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
```
|
||||
For this case, `url_prefix` should set to `/verdaccio/`
|
||||
|
||||
> Note: There is a Slash after install path (`https://your-domain:port/vardaccio/`)!
|
||||
75
docs/server.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
id: server-configuration
|
||||
title: "Server Configuration"
|
||||
---
|
||||
|
||||
This is mostly basic linux server configuration stuff but I felt it important to document and share the steps I took to get verdaccio running permanently on my server. You will need root (or sudo) permissions for the following.
|
||||
|
||||
## Running as a separate user
|
||||
First create the verdaccio user:
|
||||
|
||||
```bash
|
||||
$ sudo adduser --disabled-login --gecos 'Verdaccio NPM mirror' verdaccio
|
||||
```
|
||||
|
||||
You create a shell as the verdaccio user using the following command:
|
||||
|
||||
```bash
|
||||
$ sudo su verdaccio
|
||||
$ cd ~
|
||||
```
|
||||
|
||||
The 'cd ~' command send you to the home directory of the verdaccio user. Make sure you run verdaccio at least once to generate the config file. Edit it according to your needs.
|
||||
|
||||
## Listening on all addresses
|
||||
If you want to listen to every external address set the listen directive in the config to:
|
||||
|
||||
```yaml
|
||||
# you can specify listen address (or simply a port)
|
||||
listen: 0.0.0.0:4873
|
||||
```
|
||||
If you are running `verdaccio` in a Amazon EC2 Instance, [you will need set the listen in change your config file](https://github.com/verdaccio/verdaccio/issues/314#issuecomment-327852203) as is described above.
|
||||
|
||||
> Apache configure? Please check out the [Reverse Proxy Setup](reverse-proxy.md)
|
||||
|
||||
## Keeping verdaccio running forever
|
||||
We can use the node package called 'forever' to keep verdaccio running all the time.
|
||||
https://github.com/nodejitsu/forever
|
||||
|
||||
First install forever globally:
|
||||
|
||||
```bash
|
||||
$ sudo npm install -g forever
|
||||
```
|
||||
|
||||
Make sure you've started verdaccio at least once to generate the config file and write down the created admin user. You can then use the following command to start verdaccio:
|
||||
|
||||
```bash
|
||||
$ forever start `which verdaccio`
|
||||
```
|
||||
|
||||
You can check the documentation for more information on how to use forever.
|
||||
|
||||
## Surviving server restarts
|
||||
We can use crontab and forever together to restart verdaccio after a server reboot.
|
||||
When you're logged in as the verdaccio user do the following:
|
||||
|
||||
```bash
|
||||
$ crontab -e
|
||||
```
|
||||
|
||||
This might ask you to choose an editor. Pick your favorite and proceed.
|
||||
Add the following entry to the file:
|
||||
|
||||
```
|
||||
@reboot /usr/bin/forever start /usr/lib/node_modules/verdaccio/bin/verdaccio
|
||||
```
|
||||
|
||||
The locations may vary depending on your server setup. If you want to know where your files are you can use the 'which' command:
|
||||
|
||||
```bash
|
||||
$ which forever
|
||||
$ which verdaccio
|
||||
```
|
||||
|
||||
|
||||
52
docs/ssl.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
id: ssl
|
||||
title: "Set up the SSL Certificates"
|
||||
---
|
||||
|
||||
Follow this instructions to configure a SSL certificate to serve NPM registry under HTTPS.
|
||||
|
||||
* Update the listen property in your `~/.config/verdaccio/config.yaml`:
|
||||
|
||||
````
|
||||
listen: 'https://your.domain.com/'
|
||||
````
|
||||
|
||||
Once you update the listen and try to run verdaccio again will ask for certificates.
|
||||
|
||||
* Generate your certificates
|
||||
|
||||
````
|
||||
$ openssl genrsa -out /Users/user/.config/verdaccio/verdaccio-key.pem 2048
|
||||
$ openssl req -new -sha256 -key /Users/user/.config/verdaccio/verdaccio-key.pem -out /Users/user/.config/verdaccio/verdaccio-csr.pem
|
||||
$ openssl x509 -req -in /Users/user/.config/verdaccio/verdaccio-csr.pem -signkey /Users/user/.config/verdaccio/verdaccio-key.pem -out /Users/user/.config/verdaccio/verdaccio-cert.pem
|
||||
````
|
||||
|
||||
* Edit your config file `/Users/user/.config/verdaccio/config.yaml` and add the following section
|
||||
|
||||
````
|
||||
https:
|
||||
key: /Users/user/.config/verdaccio/verdaccio-key.pem
|
||||
cert: /Users/user/.config/verdaccio/verdaccio-cert.pem
|
||||
ca: /Users/user/.config/verdaccio/verdaccio-csr.pem
|
||||
````
|
||||
|
||||
Alternatively, if you have a certificate as `server.pfx` format, you can add the following configuration section. The passphrase is optional and only needed, if your certificate is encrypted.
|
||||
|
||||
````
|
||||
https:
|
||||
pfx: /Users/user/.config/verdaccio/server.pfx
|
||||
passphrase: 'secret'
|
||||
````
|
||||
|
||||
More info on the `key`, `cert`, `ca`, `pfx` and `passphrase` arguments on the [Node documentation](https://nodejs.org/api/tls.html#tls_tls_createsecurecontext_options)
|
||||
|
||||
* Run `verdaccio` in your command line.
|
||||
|
||||
* Open the browser and load `https://your.domain.com:port/`
|
||||
|
||||
This instructions are mostly valid under OSX and Linux, on Windows the paths will vary but, the steps are the same.
|
||||
|
||||
## Docker
|
||||
If you are using the Docker image, you have to set the `PROTOCOL` environment variable to `https` as the `listen` argument is provided on the [Dockerfile](https://github.com/verdaccio/verdaccio/blob/master/Dockerfile#L43), and thus ignored from your config file.
|
||||
|
||||
You can also set the `PORT` environment variable if you are using a different port than `4873`.
|
||||
145
docs/test.md
Normal file
@@ -0,0 +1,145 @@
|
||||
---
|
||||
id: unit-testing
|
||||
title: "Unit Testing"
|
||||
---
|
||||
|
||||
All tests are split in three folders:
|
||||
|
||||
- `test/unit` - Tests that cover functions that transform data in an non-trivial way. These tests simply `require()` a few files and run code in there, so they are very fast.
|
||||
- `test/functional` - Tests that launch a verdaccio instance and perform a series of requests to it over http. They are slower than unit tests.
|
||||
- `test/integration` - Tests that launch a verdaccio instance and do requests to it using npm. They are really slow and can hit a real npm registry. **unmaintained test**
|
||||
|
||||
Unit and functional tests are executed automatically by running `npm test` from the project's root directory. Integration tests are supposed to be executed manually from time to time.
|
||||
|
||||
We use `jest` for all test.
|
||||
|
||||
|
||||
## The npm Script
|
||||
|
||||
To run the test script you can use either `npm` or `yarn`.
|
||||
|
||||
```
|
||||
yarn run test
|
||||
```
|
||||
|
||||
That will trigger only two first groups of test, unit and functional.
|
||||
|
||||
### Using test/unit
|
||||
The following is just an example how a unit test should looks like. Basically follow the `jest` standard.
|
||||
|
||||
Try to describe what exactly does the unit test in a single sentence in the header of the `test` section.
|
||||
|
||||
```javacript
|
||||
const verdaccio = require('../../src/api/index');
|
||||
const config = require('./partials/config');
|
||||
|
||||
describe('basic system test', () => {
|
||||
|
||||
beforeAll(function(done) {
|
||||
// something important
|
||||
});
|
||||
|
||||
afterAll((done) => {
|
||||
// undo something important
|
||||
});
|
||||
|
||||
test('server should respond on /', done => {
|
||||
// your test
|
||||
done();
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### Using test/functional
|
||||
|
||||
Funtional testing in verdaccio has a bit more of complextity that needs a deep explanation in order to success in your experience.
|
||||
|
||||
All starts in the `index.js` file. Let's dive in into it.
|
||||
|
||||
```javascript
|
||||
// we create 3 server instances
|
||||
const config1 = new VerdaccioConfig(
|
||||
'./store/test-storage',
|
||||
'./store/config-1.yaml',
|
||||
'http://localhost:55551/');
|
||||
const config2 = new VerdaccioConfig(
|
||||
'./store/test-storage2',
|
||||
'./store/config-2.yaml',
|
||||
'http://localhost:55552/');
|
||||
const config3 = new VerdaccioConfig(
|
||||
'./store/test-storage3',
|
||||
'./store/config-3.yaml',
|
||||
'http://localhost:55553/');
|
||||
const server1: IServerBridge = new Server(config1.domainPath);
|
||||
const server2: IServerBridge = new Server(config2.domainPath);
|
||||
const server3: IServerBridge = new Server(config3.domainPath);
|
||||
const process1: IServerProcess = new VerdaccioProcess(config1, server1, SILENCE_LOG);
|
||||
const process2: IServerProcess = new VerdaccioProcess(config2, server2, SILENCE_LOG);
|
||||
const process3: IServerProcess = new VerdaccioProcess(config3, server3, SILENCE_LOG);
|
||||
const express: any = new ExpressServer();
|
||||
...
|
||||
|
||||
// we check whether all instances has been started, since run in independent processes
|
||||
beforeAll((done) => {
|
||||
Promise.all([
|
||||
process1.init(),
|
||||
process2.init(),
|
||||
process3.init()]).then((forks) => {
|
||||
_.map(forks, (fork) => {
|
||||
processRunning.push(fork[0]);
|
||||
});
|
||||
express.start(EXPRESS_PORT).then((app) =>{
|
||||
done();
|
||||
}, (err) => {
|
||||
done(err);
|
||||
});
|
||||
}).catch((error) => {
|
||||
done(error);
|
||||
});
|
||||
});
|
||||
|
||||
// after finish all, we ensure are been stoped
|
||||
afterAll(() => {
|
||||
_.map(processRunning, (fork) => {
|
||||
fork.stop();
|
||||
});
|
||||
express.server.close();
|
||||
});
|
||||
|
||||
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
Here we are gonna describe how it looks like an usual functional test, check inline for more detail information.
|
||||
|
||||
#### The lib/server.js
|
||||
|
||||
The server class is just a wrapper that simulates a `npm` client and provides a simple API for the funtional test.
|
||||
|
||||
As we mention in the previous section, we are creating 3 process servers that are accessible in each process as `server1`, `server2` and ``server3`.
|
||||
|
||||
Using such reference you will be able to send request to any of the 3 instance running.
|
||||
|
||||
|
||||
```javascript
|
||||
|
||||
export default function(server) {
|
||||
// we recieve any server instance via arguments
|
||||
test('add tag - 404', () => {
|
||||
// we interact with the server instance.
|
||||
return server.addTag('testpkg-tag', 'tagtagtag', '0.0.1').status(404).body_error(/no such package/);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### Test/integration
|
||||
|
||||
These section never has been used, but we are looking for help to make it run properly. **All new ideas are very welcome.**
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
46
docs/uplinks.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
id: uplinks
|
||||
title: "Uplinks"
|
||||
---
|
||||
|
||||
An *uplink* is a link with an external registry that provides acccess to external packages.
|
||||
|
||||

|
||||
|
||||
### Usage
|
||||
|
||||
```yaml
|
||||
uplinks:
|
||||
npmjs:
|
||||
url: https://registry.npmjs.org/
|
||||
server2:
|
||||
url: http://mirror.local.net/
|
||||
timeout: 100ms
|
||||
server3:
|
||||
url: http://mirror2.local.net:9000/
|
||||
baduplink:
|
||||
url: http://localhost:55666/
|
||||
```
|
||||
### Configuration
|
||||
|
||||
You can define mutiple uplinks and each of them must have an unique name (key). They can have two properties:
|
||||
|
||||
Property | Type | Required | Example | Support | Description | Default
|
||||
--- | --- | --- | --- | --- | --- | ---
|
||||
url | string | Yes | https://registry.npmjs.org/ | all | The registry url | npmjs
|
||||
ca | string | No | ~./ssl/client.crt' | all | SSL path certificate | No default
|
||||
timeout | string | No | 100ms | all | set new timeout for the request | 30s
|
||||
maxage | string | No |10m | all | limit maximun failure request | 2m
|
||||
fail_timeout | string | No |10m | all | defines max time when a request becomes a failure | 5m
|
||||
max_fails | number | No |2 | all | limit maximun failure request | 2
|
||||
cache | boolean | No |[true,false] | >= 2.1 | avoid cache tarballs | true
|
||||
auth | list | No | type: [bearer,basic], [token: "token",token_env: [true,\<get name process.env\>]] | >= 2.5 | assigns the header 'Authorization' see: http://blog.npmjs.org/post/118393368555/deploying-with-npm-private-modules | disabled
|
||||
headers | list | No | authorization: "Basic YourBase64EncodedCredentials==" | all | list of custom headers for the uplink | disabled
|
||||
|
||||
|
||||
### You Must know
|
||||
|
||||
* Uplinks must be registries compatible with the `npm` endpoints. Eg: *verdaccio*, `sinopia@1.4.0`, *npmjs registry*, *yarn registry*, *JFrog*, *Nexus* and more.
|
||||
* Setting `cache` to false will help to save space in your hard drive. This will avoid store `tarballs` but [it will keep metadata in folders](https://github.com/verdaccio/verdaccio/issues/391).
|
||||
* Exceed with multiple uplinks might slow down the lookup of your packages due for each request a npm client does, verdaccio does 1 call for each uplink.
|
||||
* The (timeout, maxage and fail_timeout) format follow the [NGINX measurement units](http://nginx.org/en/docs/syntax.html)
|
||||
32
docs/use-cases.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
id: use-cases
|
||||
title: "Use Cases"
|
||||
---
|
||||
|
||||
## Using private packages
|
||||
|
||||
You can add users and manage which users can access which packages.
|
||||
|
||||
It is recommended that you define a prefix for your private packages, for example "local", so all your private things will look like this: `local-foo`. This way you can clearly separate public packages from private ones.
|
||||
|
||||
## Using public packages from npmjs.org
|
||||
|
||||
If some package doesn't exist in the storage, server will try to fetch it from npmjs.org. If npmjs.org is down, it serves packages from cache pretending that no other packages exist. Verdaccio will download only what's needed (= requested by clients), and this information will be cached, so if client will ask the same thing second time, it can be served without asking npmjs.org for it.
|
||||
|
||||
Example: if you successfully request express@3.0.1 from this server once, you'll able to do that again (with all it's dependencies) anytime even if npmjs.org is down. But say express@3.0.0 will not be downloaded until it's actually needed by somebody. And if npmjs.org is offline, this server would say that only express@3.0.1 (= only what's in the cache) is published, but nothing else.
|
||||
|
||||
## Override public packages
|
||||
|
||||
If you want to use a modified version of some public package `foo`, you can just publish it to your local server, so when your type `npm install foo`, it'll consider installing your version.
|
||||
|
||||
There's two options here:
|
||||
|
||||
1. You want to create a separate fork and stop synchronizing with public version.
|
||||
|
||||
If you want to do that, you should modify your configuration file so verdaccio won't make requests regarding this package to npmjs anymore. Add a separate entry for this package to *config.yaml* and remove `npmjs` from `proxy` list and restart the server.
|
||||
|
||||
When you publish your package locally, you should probably start with version string higher than existing one, so it won't conflict with existing package in the cache.
|
||||
|
||||
2. You want to temporarily use your version, but return to public one as soon as it's updated.
|
||||
|
||||
In order to avoid version conflicts, you should use a custom pre-release suffix of the next patch version. For example, if a public package has version 0.1.2, you can upload 0.1.3-my-temp-fix. This way your package will be used until its original maintainer updates his public package to 0.1.3.
|
||||
24
docs/web.md
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
id: webui
|
||||
title: "Web User Interface"
|
||||
---
|
||||
|
||||
<p align="center"><img src="https://firebasestorage.googleapis.com/v0/b/jotadeveloper-website.appspot.com/o/verdaccio_long_video2.gif?alt=media&token=4d20cad1-f700-4803-be14-4b641c651b41"></p>
|
||||
|
||||
Verdaccio has a web user interface to display only the private packges and can be customisable.
|
||||
|
||||
```yaml
|
||||
web:
|
||||
enable: true
|
||||
title: Verdaccio
|
||||
logo: logo.png
|
||||
```
|
||||
|
||||
|
||||
### Configuration
|
||||
|
||||
Property | Type | Required | Example | Support | Description
|
||||
--- | --- | --- | --- | --- | ---
|
||||
enable | boolean | No | true/false | all | allow to display the web interface
|
||||
title | string | No | $authenticated | all | HTML head title description
|
||||
logo | string | No | http://my.logo.domain/logo.png | all | a URI where logo is located
|
||||
35
docs/what-is-verdaccio.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
id: what-is-verdaccio
|
||||
title: "What is Verdaccio?"
|
||||
---
|
||||
|
||||
## In a nutshell
|
||||
|
||||
* It's a web app based on Node.js
|
||||
* It's a private npm registry
|
||||
* It's a local network proxy
|
||||
* It's a Pluggable application
|
||||
* It's a fairly easy install and use
|
||||
* We offer Docker and Kubernetes support
|
||||
* It is 100% compatible with yarn, npm and pnpm
|
||||
* It was born based on `sinopia@1.4.0` fork and *backward compatible*
|
||||
* Verdaccio means **A green color popular in late medieval Italy for fresco painting**.
|
||||
|
||||
## What's a registry
|
||||
|
||||
* A repository for packages that implements the CommonJS Compliant Package Registry specification for reading package info
|
||||
* Store npm packages
|
||||
* Provide an API compatible with npm clients
|
||||
* Semantic Versioning (semver) compatible
|
||||
|
||||
```bash
|
||||
curl -v https://registry.npmjs.org/aaa
|
||||
|
||||
* Connected to registry.npmjs.org (151.101.12.162) port 443 (#0)
|
||||
|
||||
* Connection #0 to host registry.npmjs.org left intact
|
||||
{"_id":"aaa","_rev":"6-ad86dfc8720569871753b5bf561f2741","name":"aaa","description":"aaa...","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"aaa","version":"0.0.1","description":"aaa...","main":"index.js","scripts":{"test":"test.js"},"repository":{"type":"git","url":"http:/www.google.git"},"keywords":["math"],"author":{"name":"peter"},"license":"BSD","_id":"aaa@0.0.1","dist":
|
||||
{"shasum":"a04fa88ad887a70dd5429652ce23823619dfd7c3","tarball":"https://registry.npmjs.org/aaa/-/aaa-0.0.1.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"erhu65","email":"erhu65@gmail.com"},"maintainers":[{"name":"erhu65","email":"erhu65@gmail.com"}],"directories":{}},"0.0.2":{"name":"aaa","version":"0.0.2","description":"aaa...","main":"index.js","scripts":{"test":"test.js"},"repository":{"type":"git","url":"http:/www.google.git"},"keywords":["math"],"author":{"name":"peter"},"license":"BSD","_id":"aaa@0.0.2","dist":
|
||||
{"shasum":"acd2f632b94b0f89765e75bb7b7549ce5b01caa2","tarball":"https://registry.npmjs.org/aaa/-/aaa-0.0.2.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"erhu65","email":"erhu65@gmail.com"},"maintainers":[{"name":"erhu65","email":"erhu65@gmail.com"}],"directories":{}}},"readme":"ERROR: No README.md file found!","maintainers":[{"name":"erhu65","email":"erhu65@gmail.com"}],"timmacbook-j:verdaccio.mmacbookmacbook-j:verdaccio.master.git jpicmacbook-j:verdaccio.master.git jpicmacbookmacbookmacbookmacbookmacbook
|
||||
````
|
||||
|
||||
57
docs/windows.md
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
id: windows
|
||||
title: "Installing As a Windows Service"
|
||||
---
|
||||
|
||||
Loosely based upon the instructions found [here](http://asysadmin.tumblr.com/post/32941224574/running-nginx-on-windows-as-a-service). I crafted the following and it provided me with a fully working verdaccio service installation:
|
||||
|
||||
1. Create a directory for verdaccio
|
||||
* mkdir `c:\verdaccio`
|
||||
* cd `c:\verdaccio`
|
||||
2. Install verdaccio locally (I ran into npm issues with global installs)
|
||||
* npm install verdaccio
|
||||
3. Create your `config.yaml` file in this location `(c:\verdaccio\config.yaml)`
|
||||
4. Windows Service Setup
|
||||
|
||||
## Using NSSM
|
||||
|
||||
ALTERNATIVE METHOD: (WinSW package was missing when I tried to download it)
|
||||
|
||||
* Download [NSSM](https://www.nssm.cc/download/) and extract
|
||||
|
||||
* Add the path that contains nssm.exe to the PATH
|
||||
|
||||
* Open an administrative command
|
||||
|
||||
* Run nssm install verdaccio At a minimum you must fill in the Application tab Path,
|
||||
Startup directory and Arguments fields. Assuming an install with node in the system path and a
|
||||
location of c:\verdaccio the below values will work:
|
||||
* Path: `node`
|
||||
* Startup directory: `c:\verdaccio`
|
||||
* Arguments: `c:\verdaccio\node_modules\verdaccio\src\lib\cli.js -c c:\verdaccio\config.yaml`
|
||||
|
||||
You can adjust other service settings under other tabs as desired. When you are done, click Install service button
|
||||
|
||||
* Start the service sc start verdaccio
|
||||
|
||||
## Using WinSW
|
||||
|
||||
* As of 2015-10-27, WinSW is no longer available at the below location. Please follow the Using NSSM instructions above.
|
||||
* Download [WinSW](http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/)
|
||||
* Place the executable (e.g. `winsw-1.9-bin.exe`) into this folder (`c:\verdaccio`) and rename it to `verdaccio-winsw.exe`
|
||||
* Create a configuration file in `c:\verdaccio`, named `verdaccio-winsw.xml`
|
||||
with the following configuration `xml verdaccio verdaccio verdaccio node c:\verdaccio\node_modules\verdaccio\src\lib\cli.js -c c:\verdaccio\config.yaml roll c:\verdaccio\ `.
|
||||
* Install your service
|
||||
* `cd c:\verdaccio`
|
||||
* `verdaccio-winsw.exe install`
|
||||
* Start your service
|
||||
* `verdaccio-winsw.exe start`
|
||||
|
||||
Some of the above config is more verbose than I had expected, it appears as though 'workingdirectory'
|
||||
is ignored, but other than that, this works for me and allows my verdaccio instance to
|
||||
persist between restarts of the server, and also restart itself should there be any crashes of the verdaccio process.
|
||||
|
||||
|
||||
## Repositories
|
||||
|
||||
* [verdaccio-deamon-windows](https://github.com/davidenke/verdaccio-deamon-windows)
|
||||
199
flow-typed/npm/JSONStream_vx.x.x.js
vendored
Normal file
@@ -0,0 +1,199 @@
|
||||
// flow-typed signature: 12a8262920099086254f18882b49d862
|
||||
// flow-typed version: <<STUB>>/JSONStream_v1.3.2/flow_v0.64.0
|
||||
|
||||
/**
|
||||
* This is an autogenerated libdef stub for:
|
||||
*
|
||||
* 'JSONStream'
|
||||
*
|
||||
* Fill this stub out by replacing all the `any` types.
|
||||
*
|
||||
* Once filled out, we encourage you to share your work with the
|
||||
* community by sending a pull request to:
|
||||
* https://github.com/flowtype/flow-typed
|
||||
*/
|
||||
|
||||
declare module 'JSONStream' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* We include stubs for each file inside this npm package in case you need to
|
||||
* require those files directly. Feel free to delete any files that aren't
|
||||
* needed.
|
||||
*/
|
||||
declare module 'JSONStream/bin' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/examples/all_docs' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/bool' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/browser' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/destroy_missing' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/disabled/doubledot1' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/disabled/doubledot2' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/empty' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/error_contents' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/fn' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/gen' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/header_footer' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/issues' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/keys' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/map' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/multiple_objects_error' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/multiple_objects' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/null' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/parsejson' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/stringify_object' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/stringify' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/test' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/test2' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'JSONStream/test/two-ways' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
// Filename aliases
|
||||
declare module 'JSONStream/bin.js' {
|
||||
declare module.exports: $Exports<'JSONStream/bin'>;
|
||||
}
|
||||
declare module 'JSONStream/examples/all_docs.js' {
|
||||
declare module.exports: $Exports<'JSONStream/examples/all_docs'>;
|
||||
}
|
||||
declare module 'JSONStream/index' {
|
||||
declare module.exports: $Exports<'JSONStream'>;
|
||||
}
|
||||
declare module 'JSONStream/index.js' {
|
||||
declare module.exports: $Exports<'JSONStream'>;
|
||||
}
|
||||
declare module 'JSONStream/test/bool.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/bool'>;
|
||||
}
|
||||
declare module 'JSONStream/test/browser.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/browser'>;
|
||||
}
|
||||
declare module 'JSONStream/test/destroy_missing.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/destroy_missing'>;
|
||||
}
|
||||
declare module 'JSONStream/test/disabled/doubledot1.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/disabled/doubledot1'>;
|
||||
}
|
||||
declare module 'JSONStream/test/disabled/doubledot2.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/disabled/doubledot2'>;
|
||||
}
|
||||
declare module 'JSONStream/test/empty.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/empty'>;
|
||||
}
|
||||
declare module 'JSONStream/test/error_contents.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/error_contents'>;
|
||||
}
|
||||
declare module 'JSONStream/test/fn.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/fn'>;
|
||||
}
|
||||
declare module 'JSONStream/test/gen.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/gen'>;
|
||||
}
|
||||
declare module 'JSONStream/test/header_footer.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/header_footer'>;
|
||||
}
|
||||
declare module 'JSONStream/test/issues.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/issues'>;
|
||||
}
|
||||
declare module 'JSONStream/test/keys.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/keys'>;
|
||||
}
|
||||
declare module 'JSONStream/test/map.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/map'>;
|
||||
}
|
||||
declare module 'JSONStream/test/multiple_objects_error.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/multiple_objects_error'>;
|
||||
}
|
||||
declare module 'JSONStream/test/multiple_objects.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/multiple_objects'>;
|
||||
}
|
||||
declare module 'JSONStream/test/null.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/null'>;
|
||||
}
|
||||
declare module 'JSONStream/test/parsejson.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/parsejson'>;
|
||||
}
|
||||
declare module 'JSONStream/test/stringify_object.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/stringify_object'>;
|
||||
}
|
||||
declare module 'JSONStream/test/stringify.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/stringify'>;
|
||||
}
|
||||
declare module 'JSONStream/test/test.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/test'>;
|
||||
}
|
||||
declare module 'JSONStream/test/test2.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/test2'>;
|
||||
}
|
||||
declare module 'JSONStream/test/two-ways.js' {
|
||||
declare module.exports: $Exports<'JSONStream/test/two-ways'>;
|
||||
}
|
||||
913
flow-typed/npm/async_vx.x.x.js
vendored
Normal file
@@ -0,0 +1,913 @@
|
||||
// flow-typed signature: 9f4aa70155d93ad082ea38137cded473
|
||||
// flow-typed version: <<STUB>>/async_v2.6.0/flow_v0.64.0
|
||||
|
||||
/**
|
||||
* This is an autogenerated libdef stub for:
|
||||
*
|
||||
* 'async'
|
||||
*
|
||||
* Fill this stub out by replacing all the `any` types.
|
||||
*
|
||||
* Once filled out, we encourage you to share your work with the
|
||||
* community by sending a pull request to:
|
||||
* https://github.com/flowtype/flow-typed
|
||||
*/
|
||||
|
||||
declare module 'async' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* We include stubs for each file inside this npm package in case you need to
|
||||
* require those files directly. Feel free to delete any files that aren't
|
||||
* needed.
|
||||
*/
|
||||
declare module 'async/all' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/allLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/allSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/any' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/anyLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/anySeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/apply' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/applyEach' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/applyEachSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/asyncify' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/auto' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/autoInject' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/cargo' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/compose' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/concat' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/concatLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/concatSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/constant' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/detect' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/detectLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/detectSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/dir' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/dist/async' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/dist/async.min' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/doDuring' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/doUntil' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/doWhilst' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/during' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/each' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/eachLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/eachOf' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/eachOfLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/eachOfSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/eachSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/ensureAsync' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/every' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/everyLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/everySeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/filter' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/filterLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/filterSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/find' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/findLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/findSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/foldl' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/foldr' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/forEach' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/forEachLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/forEachOf' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/forEachOfLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/forEachOfSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/forEachSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/forever' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/groupBy' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/groupByLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/groupBySeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/inject' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/applyEach' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/breakLoop' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/consoleFunc' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/createTester' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/doLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/doParallel' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/doParallelLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/DoublyLinkedList' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/eachOfLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/filter' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/findGetResult' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/getIterator' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/initialParams' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/iterator' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/map' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/notId' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/once' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/onlyOnce' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/parallel' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/queue' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/reject' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/setImmediate' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/slice' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/withoutIndex' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/internal/wrapAsync' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/log' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/map' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/mapLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/mapSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/mapValues' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/mapValuesLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/mapValuesSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/memoize' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/nextTick' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/parallel' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/parallelLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/priorityQueue' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/queue' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/race' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/reduce' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/reduceRight' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/reflect' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/reflectAll' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/reject' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/rejectLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/rejectSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/retry' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/retryable' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/select' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/selectLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/selectSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/seq' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/series' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/setImmediate' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/some' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/someLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/someSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/sortBy' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/timeout' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/times' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/timesLimit' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/timesSeries' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/transform' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/tryEach' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/unmemoize' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/until' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/waterfall' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/whilst' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
declare module 'async/wrapSync' {
|
||||
declare module.exports: any;
|
||||
}
|
||||
|
||||
// Filename aliases
|
||||
declare module 'async/all.js' {
|
||||
declare module.exports: $Exports<'async/all'>;
|
||||
}
|
||||
declare module 'async/allLimit.js' {
|
||||
declare module.exports: $Exports<'async/allLimit'>;
|
||||
}
|
||||
declare module 'async/allSeries.js' {
|
||||
declare module.exports: $Exports<'async/allSeries'>;
|
||||
}
|
||||
declare module 'async/any.js' {
|
||||
declare module.exports: $Exports<'async/any'>;
|
||||
}
|
||||
declare module 'async/anyLimit.js' {
|
||||
declare module.exports: $Exports<'async/anyLimit'>;
|
||||
}
|
||||
declare module 'async/anySeries.js' {
|
||||
declare module.exports: $Exports<'async/anySeries'>;
|
||||
}
|
||||
declare module 'async/apply.js' {
|
||||
declare module.exports: $Exports<'async/apply'>;
|
||||
}
|
||||
declare module 'async/applyEach.js' {
|
||||
declare module.exports: $Exports<'async/applyEach'>;
|
||||
}
|
||||
declare module 'async/applyEachSeries.js' {
|
||||
declare module.exports: $Exports<'async/applyEachSeries'>;
|
||||
}
|
||||
declare module 'async/asyncify.js' {
|
||||
declare module.exports: $Exports<'async/asyncify'>;
|
||||
}
|
||||
declare module 'async/auto.js' {
|
||||
declare module.exports: $Exports<'async/auto'>;
|
||||
}
|
||||
declare module 'async/autoInject.js' {
|
||||
declare module.exports: $Exports<'async/autoInject'>;
|
||||
}
|
||||
declare module 'async/cargo.js' {
|
||||
declare module.exports: $Exports<'async/cargo'>;
|
||||
}
|
||||
declare module 'async/compose.js' {
|
||||
declare module.exports: $Exports<'async/compose'>;
|
||||
}
|
||||
declare module 'async/concat.js' {
|
||||
declare module.exports: $Exports<'async/concat'>;
|
||||
}
|
||||
declare module 'async/concatLimit.js' {
|
||||
declare module.exports: $Exports<'async/concatLimit'>;
|
||||
}
|
||||
declare module 'async/concatSeries.js' {
|
||||
declare module.exports: $Exports<'async/concatSeries'>;
|
||||
}
|
||||
declare module 'async/constant.js' {
|
||||
declare module.exports: $Exports<'async/constant'>;
|
||||
}
|
||||
declare module 'async/detect.js' {
|
||||
declare module.exports: $Exports<'async/detect'>;
|
||||
}
|
||||
declare module 'async/detectLimit.js' {
|
||||
declare module.exports: $Exports<'async/detectLimit'>;
|
||||
}
|
||||
declare module 'async/detectSeries.js' {
|
||||
declare module.exports: $Exports<'async/detectSeries'>;
|
||||
}
|
||||
declare module 'async/dir.js' {
|
||||
declare module.exports: $Exports<'async/dir'>;
|
||||
}
|
||||
declare module 'async/dist/async.js' {
|
||||
declare module.exports: $Exports<'async/dist/async'>;
|
||||
}
|
||||
declare module 'async/dist/async.min.js' {
|
||||
declare module.exports: $Exports<'async/dist/async.min'>;
|
||||
}
|
||||
declare module 'async/doDuring.js' {
|
||||
declare module.exports: $Exports<'async/doDuring'>;
|
||||
}
|
||||
declare module 'async/doUntil.js' {
|
||||
declare module.exports: $Exports<'async/doUntil'>;
|
||||
}
|
||||
declare module 'async/doWhilst.js' {
|
||||
declare module.exports: $Exports<'async/doWhilst'>;
|
||||
}
|
||||
declare module 'async/during.js' {
|
||||
declare module.exports: $Exports<'async/during'>;
|
||||
}
|
||||
declare module 'async/each.js' {
|
||||
declare module.exports: $Exports<'async/each'>;
|
||||
}
|
||||
declare module 'async/eachLimit.js' {
|
||||
declare module.exports: $Exports<'async/eachLimit'>;
|
||||
}
|
||||
declare module 'async/eachOf.js' {
|
||||
declare module.exports: $Exports<'async/eachOf'>;
|
||||
}
|
||||
declare module 'async/eachOfLimit.js' {
|
||||
declare module.exports: $Exports<'async/eachOfLimit'>;
|
||||
}
|
||||
declare module 'async/eachOfSeries.js' {
|
||||
declare module.exports: $Exports<'async/eachOfSeries'>;
|
||||
}
|
||||
declare module 'async/eachSeries.js' {
|
||||
declare module.exports: $Exports<'async/eachSeries'>;
|
||||
}
|
||||
declare module 'async/ensureAsync.js' {
|
||||
declare module.exports: $Exports<'async/ensureAsync'>;
|
||||
}
|
||||
declare module 'async/every.js' {
|
||||
declare module.exports: $Exports<'async/every'>;
|
||||
}
|
||||
declare module 'async/everyLimit.js' {
|
||||
declare module.exports: $Exports<'async/everyLimit'>;
|
||||
}
|
||||
declare module 'async/everySeries.js' {
|
||||
declare module.exports: $Exports<'async/everySeries'>;
|
||||
}
|
||||
declare module 'async/filter.js' {
|
||||
declare module.exports: $Exports<'async/filter'>;
|
||||
}
|
||||
declare module 'async/filterLimit.js' {
|
||||
declare module.exports: $Exports<'async/filterLimit'>;
|
||||
}
|
||||
declare module 'async/filterSeries.js' {
|
||||
declare module.exports: $Exports<'async/filterSeries'>;
|
||||
}
|
||||
declare module 'async/find.js' {
|
||||
declare module.exports: $Exports<'async/find'>;
|
||||
}
|
||||
declare module 'async/findLimit.js' {
|
||||
declare module.exports: $Exports<'async/findLimit'>;
|
||||
}
|
||||
declare module 'async/findSeries.js' {
|
||||
declare module.exports: $Exports<'async/findSeries'>;
|
||||
}
|
||||
declare module 'async/foldl.js' {
|
||||
declare module.exports: $Exports<'async/foldl'>;
|
||||
}
|
||||
declare module 'async/foldr.js' {
|
||||
declare module.exports: $Exports<'async/foldr'>;
|
||||
}
|
||||
declare module 'async/forEach.js' {
|
||||
declare module.exports: $Exports<'async/forEach'>;
|
||||
}
|
||||
declare module 'async/forEachLimit.js' {
|
||||
declare module.exports: $Exports<'async/forEachLimit'>;
|
||||
}
|
||||
declare module 'async/forEachOf.js' {
|
||||
declare module.exports: $Exports<'async/forEachOf'>;
|
||||
}
|
||||
declare module 'async/forEachOfLimit.js' {
|
||||
declare module.exports: $Exports<'async/forEachOfLimit'>;
|
||||
}
|
||||
declare module 'async/forEachOfSeries.js' {
|
||||
declare module.exports: $Exports<'async/forEachOfSeries'>;
|
||||
}
|
||||
declare module 'async/forEachSeries.js' {
|
||||
declare module.exports: $Exports<'async/forEachSeries'>;
|
||||
}
|
||||
declare module 'async/forever.js' {
|
||||
declare module.exports: $Exports<'async/forever'>;
|
||||
}
|
||||
declare module 'async/groupBy.js' {
|
||||
declare module.exports: $Exports<'async/groupBy'>;
|
||||
}
|
||||
declare module 'async/groupByLimit.js' {
|
||||
declare module.exports: $Exports<'async/groupByLimit'>;
|
||||
}
|
||||
declare module 'async/groupBySeries.js' {
|
||||
declare module.exports: $Exports<'async/groupBySeries'>;
|
||||
}
|
||||
declare module 'async/index' {
|
||||
declare module.exports: $Exports<'async'>;
|
||||
}
|
||||
declare module 'async/index.js' {
|
||||
declare module.exports: $Exports<'async'>;
|
||||
}
|
||||
declare module 'async/inject.js' {
|
||||
declare module.exports: $Exports<'async/inject'>;
|
||||
}
|
||||
declare module 'async/internal/applyEach.js' {
|
||||
declare module.exports: $Exports<'async/internal/applyEach'>;
|
||||
}
|
||||
declare module 'async/internal/breakLoop.js' {
|
||||
declare module.exports: $Exports<'async/internal/breakLoop'>;
|
||||
}
|
||||
declare module 'async/internal/consoleFunc.js' {
|
||||
declare module.exports: $Exports<'async/internal/consoleFunc'>;
|
||||
}
|
||||
declare module 'async/internal/createTester.js' {
|
||||
declare module.exports: $Exports<'async/internal/createTester'>;
|
||||
}
|
||||
declare module 'async/internal/doLimit.js' {
|
||||
declare module.exports: $Exports<'async/internal/doLimit'>;
|
||||
}
|
||||
declare module 'async/internal/doParallel.js' {
|
||||
declare module.exports: $Exports<'async/internal/doParallel'>;
|
||||
}
|
||||
declare module 'async/internal/doParallelLimit.js' {
|
||||
declare module.exports: $Exports<'async/internal/doParallelLimit'>;
|
||||
}
|
||||
declare module 'async/internal/DoublyLinkedList.js' {
|
||||
declare module.exports: $Exports<'async/internal/DoublyLinkedList'>;
|
||||
}
|
||||
declare module 'async/internal/eachOfLimit.js' {
|
||||
declare module.exports: $Exports<'async/internal/eachOfLimit'>;
|
||||
}
|
||||
declare module 'async/internal/filter.js' {
|
||||
declare module.exports: $Exports<'async/internal/filter'>;
|
||||
}
|
||||
declare module 'async/internal/findGetResult.js' {
|
||||
declare module.exports: $Exports<'async/internal/findGetResult'>;
|
||||
}
|
||||
declare module 'async/internal/getIterator.js' {
|
||||
declare module.exports: $Exports<'async/internal/getIterator'>;
|
||||
}
|
||||
declare module 'async/internal/initialParams.js' {
|
||||
declare module.exports: $Exports<'async/internal/initialParams'>;
|
||||
}
|
||||
declare module 'async/internal/iterator.js' {
|
||||
declare module.exports: $Exports<'async/internal/iterator'>;
|
||||
}
|
||||
declare module 'async/internal/map.js' {
|
||||
declare module.exports: $Exports<'async/internal/map'>;
|
||||
}
|
||||
declare module 'async/internal/notId.js' {
|
||||
declare module.exports: $Exports<'async/internal/notId'>;
|
||||
}
|
||||
declare module 'async/internal/once.js' {
|
||||
declare module.exports: $Exports<'async/internal/once'>;
|
||||
}
|
||||
declare module 'async/internal/onlyOnce.js' {
|
||||
declare module.exports: $Exports<'async/internal/onlyOnce'>;
|
||||
}
|
||||
declare module 'async/internal/parallel.js' {
|
||||
declare module.exports: $Exports<'async/internal/parallel'>;
|
||||
}
|
||||
declare module 'async/internal/queue.js' {
|
||||
declare module.exports: $Exports<'async/internal/queue'>;
|
||||
}
|
||||
declare module 'async/internal/reject.js' {
|
||||
declare module.exports: $Exports<'async/internal/reject'>;
|
||||
}
|
||||
declare module 'async/internal/setImmediate.js' {
|
||||
declare module.exports: $Exports<'async/internal/setImmediate'>;
|
||||
}
|
||||
declare module 'async/internal/slice.js' {
|
||||
declare module.exports: $Exports<'async/internal/slice'>;
|
||||
}
|
||||
declare module 'async/internal/withoutIndex.js' {
|
||||
declare module.exports: $Exports<'async/internal/withoutIndex'>;
|
||||
}
|
||||
declare module 'async/internal/wrapAsync.js' {
|
||||
declare module.exports: $Exports<'async/internal/wrapAsync'>;
|
||||
}
|
||||
declare module 'async/log.js' {
|
||||
declare module.exports: $Exports<'async/log'>;
|
||||
}
|
||||
declare module 'async/map.js' {
|
||||
declare module.exports: $Exports<'async/map'>;
|
||||
}
|
||||
declare module 'async/mapLimit.js' {
|
||||
declare module.exports: $Exports<'async/mapLimit'>;
|
||||
}
|
||||
declare module 'async/mapSeries.js' {
|
||||
declare module.exports: $Exports<'async/mapSeries'>;
|
||||
}
|
||||
declare module 'async/mapValues.js' {
|
||||
declare module.exports: $Exports<'async/mapValues'>;
|
||||
}
|
||||
declare module 'async/mapValuesLimit.js' {
|
||||
declare module.exports: $Exports<'async/mapValuesLimit'>;
|
||||
}
|
||||
declare module 'async/mapValuesSeries.js' {
|
||||
declare module.exports: $Exports<'async/mapValuesSeries'>;
|
||||
}
|
||||
declare module 'async/memoize.js' {
|
||||
declare module.exports: $Exports<'async/memoize'>;
|
||||
}
|
||||
declare module 'async/nextTick.js' {
|
||||
declare module.exports: $Exports<'async/nextTick'>;
|
||||
}
|
||||
declare module 'async/parallel.js' {
|
||||
declare module.exports: $Exports<'async/parallel'>;
|
||||
}
|
||||
declare module 'async/parallelLimit.js' {
|
||||
declare module.exports: $Exports<'async/parallelLimit'>;
|
||||
}
|
||||
declare module 'async/priorityQueue.js' {
|
||||
declare module.exports: $Exports<'async/priorityQueue'>;
|
||||
}
|
||||
declare module 'async/queue.js' {
|
||||
declare module.exports: $Exports<'async/queue'>;
|
||||
}
|
||||
declare module 'async/race.js' {
|
||||
declare module.exports: $Exports<'async/race'>;
|
||||
}
|
||||
declare module 'async/reduce.js' {
|
||||
declare module.exports: $Exports<'async/reduce'>;
|
||||
}
|
||||
declare module 'async/reduceRight.js' {
|
||||
declare module.exports: $Exports<'async/reduceRight'>;
|
||||
}
|
||||
declare module 'async/reflect.js' {
|
||||
declare module.exports: $Exports<'async/reflect'>;
|
||||
}
|
||||
declare module 'async/reflectAll.js' {
|
||||
declare module.exports: $Exports<'async/reflectAll'>;
|
||||
}
|
||||
declare module 'async/reject.js' {
|
||||
declare module.exports: $Exports<'async/reject'>;
|
||||
}
|
||||
declare module 'async/rejectLimit.js' {
|
||||
declare module.exports: $Exports<'async/rejectLimit'>;
|
||||
}
|
||||
declare module 'async/rejectSeries.js' {
|
||||
declare module.exports: $Exports<'async/rejectSeries'>;
|
||||
}
|
||||
declare module 'async/retry.js' {
|
||||
declare module.exports: $Exports<'async/retry'>;
|
||||
}
|
||||
declare module 'async/retryable.js' {
|
||||
declare module.exports: $Exports<'async/retryable'>;
|
||||
}
|
||||
declare module 'async/select.js' {
|
||||
declare module.exports: $Exports<'async/select'>;
|
||||
}
|
||||
declare module 'async/selectLimit.js' {
|
||||
declare module.exports: $Exports<'async/selectLimit'>;
|
||||
}
|
||||
declare module 'async/selectSeries.js' {
|
||||
declare module.exports: $Exports<'async/selectSeries'>;
|
||||
}
|
||||
declare module 'async/seq.js' {
|
||||
declare module.exports: $Exports<'async/seq'>;
|
||||
}
|
||||
declare module 'async/series.js' {
|
||||
declare module.exports: $Exports<'async/series'>;
|
||||
}
|
||||
declare module 'async/setImmediate.js' {
|
||||
declare module.exports: $Exports<'async/setImmediate'>;
|
||||
}
|
||||
declare module 'async/some.js' {
|
||||
declare module.exports: $Exports<'async/some'>;
|
||||
}
|
||||
declare module 'async/someLimit.js' {
|
||||
declare module.exports: $Exports<'async/someLimit'>;
|
||||
}
|
||||
declare module 'async/someSeries.js' {
|
||||
declare module.exports: $Exports<'async/someSeries'>;
|
||||
}
|
||||
declare module 'async/sortBy.js' {
|
||||
declare module.exports: $Exports<'async/sortBy'>;
|
||||
}
|
||||
declare module 'async/timeout.js' {
|
||||
declare module.exports: $Exports<'async/timeout'>;
|
||||
}
|
||||
declare module 'async/times.js' {
|
||||
declare module.exports: $Exports<'async/times'>;
|
||||
}
|
||||
declare module 'async/timesLimit.js' {
|
||||
declare module.exports: $Exports<'async/timesLimit'>;
|
||||
}
|
||||
declare module 'async/timesSeries.js' {
|
||||
declare module.exports: $Exports<'async/timesSeries'>;
|
||||
}
|
||||
declare module 'async/transform.js' {
|
||||
declare module.exports: $Exports<'async/transform'>;
|
||||
}
|
||||
declare module 'async/tryEach.js' {
|
||||
declare module.exports: $Exports<'async/tryEach'>;
|
||||
}
|
||||
declare module 'async/unmemoize.js' {
|
||||
declare module.exports: $Exports<'async/unmemoize'>;
|
||||
}
|
||||
declare module 'async/until.js' {
|
||||
declare module.exports: $Exports<'async/until'>;
|
||||
}
|
||||
declare module 'async/waterfall.js' {
|
||||
declare module.exports: $Exports<'async/waterfall'>;
|
||||
}
|
||||
declare module 'async/whilst.js' {
|
||||
declare module.exports: $Exports<'async/whilst'>;
|
||||
}
|
||||
declare module 'async/wrapSync.js' {
|
||||
declare module.exports: $Exports<'async/wrapSync'>;
|
||||
}
|
||||
143
flow-typed/npm/axios_v0.17.x.js
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
// flow-typed signature: 9fd7b9287df55ee8cfa980889d107499
|
||||
// flow-typed version: a8b5058d19/axios_v0.17.x/flow_>=v0.25.x
|
||||
|
||||
declare module "axios" {
|
||||
declare interface ProxyConfig {
|
||||
host: string;
|
||||
port: number;
|
||||
}
|
||||
declare interface Cancel {
|
||||
constructor(message?: string): Cancel;
|
||||
message: string;
|
||||
}
|
||||
declare interface Canceler {
|
||||
(message?: string): void;
|
||||
}
|
||||
declare interface CancelTokenSource {
|
||||
token: CancelToken;
|
||||
cancel: Canceler;
|
||||
}
|
||||
declare class CancelToken {
|
||||
constructor(executor: (cancel: Canceler) => void): CancelToken;
|
||||
static source(): CancelTokenSource;
|
||||
promise: Promise<Cancel>;
|
||||
reason?: Cancel;
|
||||
throwIfRequested(): void;
|
||||
}
|
||||
declare interface AxiosXHRConfigBase<T> {
|
||||
adapter?: <T>(config: AxiosXHRConfig<T>) => Promise<AxiosXHR<T>>;
|
||||
auth?: {
|
||||
username: string,
|
||||
password: string
|
||||
};
|
||||
baseURL?: string;
|
||||
cancelToken?: CancelToken;
|
||||
headers?: Object;
|
||||
httpAgent?: mixed; // Missing the type in the core flow node libdef
|
||||
httpsAgent?: mixed; // Missing the type in the core flow node libdef
|
||||
maxContentLength?: number;
|
||||
maxRedirects?: 5;
|
||||
params?: Object;
|
||||
paramsSerializer?: (params: Object) => string;
|
||||
progress?: (progressEvent: Event) => void | mixed;
|
||||
proxy?: ProxyConfig | false;
|
||||
responseType?:
|
||||
| "arraybuffer"
|
||||
| "blob"
|
||||
| "document"
|
||||
| "json"
|
||||
| "text"
|
||||
| "stream";
|
||||
timeout?: number;
|
||||
transformRequest?: Array<<U>(data: T) => U | Array<<U>(data: T) => U>>;
|
||||
transformResponse?: Array<<U>(data: T) => U>;
|
||||
validateStatus?: (status: number) => boolean;
|
||||
withCredentials?: boolean;
|
||||
xsrfCookieName?: string;
|
||||
xsrfHeaderName?: string;
|
||||
}
|
||||
declare type $AxiosXHRConfigBase<T> = AxiosXHRConfigBase<T>;
|
||||
declare interface AxiosXHRConfig<T> extends AxiosXHRConfigBase<T> {
|
||||
data?: T;
|
||||
method?: string;
|
||||
url: string;
|
||||
}
|
||||
declare type $AxiosXHRConfig<T> = AxiosXHRConfig<T>;
|
||||
declare class AxiosXHR<T> {
|
||||
config: AxiosXHRConfig<T>;
|
||||
data: T;
|
||||
headers?: Object;
|
||||
status: number;
|
||||
statusText: string;
|
||||
request: http$ClientRequest | XMLHttpRequest;
|
||||
}
|
||||
declare type $AxiosXHR<T> = AxiosXHR<T>;
|
||||
declare class AxiosInterceptorIdent extends String {}
|
||||
declare class AxiosRequestInterceptor<T> {
|
||||
use(
|
||||
successHandler: ?(
|
||||
response: AxiosXHRConfig<T>
|
||||
) => Promise<AxiosXHRConfig<*>> | AxiosXHRConfig<*>,
|
||||
errorHandler: ?(error: mixed) => mixed
|
||||
): AxiosInterceptorIdent;
|
||||
eject(ident: AxiosInterceptorIdent): void;
|
||||
}
|
||||
declare class AxiosResponseInterceptor<T> {
|
||||
use(
|
||||
successHandler: ?(response: AxiosXHR<T>) => mixed,
|
||||
errorHandler: ?(error: $AxiosError<any>) => mixed
|
||||
): AxiosInterceptorIdent;
|
||||
eject(ident: AxiosInterceptorIdent): void;
|
||||
}
|
||||
declare type AxiosPromise<T> = Promise<AxiosXHR<T>>;
|
||||
declare class Axios {
|
||||
constructor<T>(config?: AxiosXHRConfigBase<T>): void;
|
||||
$call: <T>(
|
||||
config: AxiosXHRConfig<T> | string,
|
||||
config?: AxiosXHRConfig<T>
|
||||
) => AxiosPromise<T>;
|
||||
request<T>(config: AxiosXHRConfig<T>): AxiosPromise<T>;
|
||||
delete<T>(url: string, config?: AxiosXHRConfigBase<T>): AxiosPromise<T>;
|
||||
get<T>(url: string, config?: AxiosXHRConfigBase<T>): AxiosPromise<T>;
|
||||
head<T>(url: string, config?: AxiosXHRConfigBase<T>): AxiosPromise<T>;
|
||||
post<T>(
|
||||
url: string,
|
||||
data?: mixed,
|
||||
config?: AxiosXHRConfigBase<T>
|
||||
): AxiosPromise<T>;
|
||||
put<T>(
|
||||
url: string,
|
||||
data?: mixed,
|
||||
config?: AxiosXHRConfigBase<T>
|
||||
): AxiosPromise<T>;
|
||||
patch<T>(
|
||||
url: string,
|
||||
data?: mixed,
|
||||
config?: AxiosXHRConfigBase<T>
|
||||
): AxiosPromise<T>;
|
||||
interceptors: {
|
||||
request: AxiosRequestInterceptor<mixed>,
|
||||
response: AxiosResponseInterceptor<mixed>
|
||||
};
|
||||
defaults: { headers: Object } & AxiosXHRConfig<*>;
|
||||
}
|
||||
|
||||
declare class AxiosError<T> extends Error {
|
||||
config: AxiosXHRConfig<T>;
|
||||
response: AxiosXHR<T>;
|
||||
code?: string;
|
||||
}
|
||||
|
||||
declare type $AxiosError<T> = AxiosError<T>;
|
||||
|
||||
declare interface AxiosExport extends Axios {
|
||||
Axios: typeof Axios;
|
||||
Cancel: Class<Cancel>;
|
||||
CancelToken: Class<CancelToken>;
|
||||
isCancel(value: any): boolean;
|
||||
create(config?: AxiosXHRConfigBase<any>): Axios;
|
||||
all: typeof Promise.all;
|
||||
spread(callback: Function): (arr: Array<any>) => Function;
|
||||
}
|
||||
declare module.exports: AxiosExport;
|
||||
}
|
||||
46
flow-typed/npm/body-parser_v1.x.x.js
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
// flow-typed signature: bac0ee66e0653772d037dc47b51a5e1f
|
||||
// flow-typed version: da30fe6876/body-parser_v1.x.x/flow_>=v0.25.x
|
||||
|
||||
import type { Middleware, $Request, $Response } from "express";
|
||||
|
||||
declare type bodyParser$Options = {
|
||||
inflate?: boolean,
|
||||
limit?: number | string,
|
||||
type?: string | string[] | ((req: $Request) => any),
|
||||
verify?: (
|
||||
req: $Request,
|
||||
res: $Response,
|
||||
buf: Buffer,
|
||||
encoding: string
|
||||
) => void
|
||||
};
|
||||
|
||||
declare type bodyParser$OptionsText = bodyParser$Options & {
|
||||
reviver?: (key: string, value: any) => any,
|
||||
strict?: boolean
|
||||
};
|
||||
|
||||
declare type bodyParser$OptionsJson = bodyParser$Options & {
|
||||
reviver?: (key: string, value: any) => any,
|
||||
strict?: boolean
|
||||
};
|
||||
|
||||
declare type bodyParser$OptionsUrlencoded = bodyParser$Options & {
|
||||
extended?: boolean,
|
||||
parameterLimit?: number
|
||||
};
|
||||
|
||||
declare module "body-parser" {
|
||||
declare type Options = bodyParser$Options;
|
||||
declare type OptionsText = bodyParser$OptionsText;
|
||||
declare type OptionsJson = bodyParser$OptionsJson;
|
||||
declare type OptionsUrlencoded = bodyParser$OptionsUrlencoded;
|
||||
|
||||
declare function json(options?: OptionsJson): Middleware;
|
||||
|
||||
declare function raw(options?: Options): Middleware;
|
||||
|
||||
declare function text(options?: OptionsText): Middleware;
|
||||
|
||||
declare function urlencoded(options?: OptionsUrlencoded): Middleware;
|
||||
}
|
||||
156
flow-typed/npm/bunyan_v1.x.x.js
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
// flow-typed signature: b3827b7e37fa457f58d7a6656d830369
|
||||
// flow-typed version: da30fe6876/bunyan_v1.x.x/flow_>=v0.25.x
|
||||
|
||||
declare module "bunyan" {
|
||||
declare var TRACE: 10;
|
||||
declare var DEBUG: 20;
|
||||
declare var INFO: 30;
|
||||
declare var WARN: 40;
|
||||
declare var ERROR: 50;
|
||||
declare var FATAL: 60;
|
||||
|
||||
declare type BunyanLogLevels =
|
||||
| 60 // fatal
|
||||
| 50 // error
|
||||
| 40 // warn
|
||||
| 30 // info
|
||||
| 20 // debug
|
||||
| 10; // info
|
||||
declare type BunyanRecord = {
|
||||
v: number,
|
||||
level: BunyanLogLevels,
|
||||
name: string,
|
||||
hostname: string,
|
||||
pid: string,
|
||||
time: Date,
|
||||
msg: string,
|
||||
src: string,
|
||||
err?: {
|
||||
message: string,
|
||||
name: string,
|
||||
code: any,
|
||||
signal: any,
|
||||
stack: string
|
||||
},
|
||||
[key: string]: any
|
||||
};
|
||||
declare type Writable = {
|
||||
write(rec: BunyanRecord): void
|
||||
};
|
||||
declare class Logger extends events$EventEmitter {
|
||||
constructor(options: LoggerOptions): any;
|
||||
addStream(stream: Stream): void;
|
||||
addSerializers(serializers: Serializers): void;
|
||||
child(opts?: LoggerOptions, simple?: boolean): Logger;
|
||||
reopenFileStreams(): void;
|
||||
level(): string | number;
|
||||
level(value: number | string): void;
|
||||
levels(name: number | string, value: number | string): void;
|
||||
trace(...params: Array<void>): boolean;
|
||||
trace(error: Error, format?: any, ...params: Array<any>): void;
|
||||
trace(buffer: Buffer, format?: any, ...params: Array<any>): void;
|
||||
trace(obj: Object, format?: any, ...params: Array<any>): void;
|
||||
trace(format: string, ...params: Array<any>): void;
|
||||
debug(...params: Array<void>): boolean;
|
||||
debug(error: Error, format?: any, ...params: Array<any>): void;
|
||||
debug(buffer: Buffer, format?: any, ...params: Array<any>): void;
|
||||
debug(obj: Object, format?: any, ...params: Array<any>): void;
|
||||
debug(format: string, ...params: Array<any>): void;
|
||||
info(...params: Array<void>): boolean;
|
||||
info(error: Error, format?: any, ...params: Array<any>): void;
|
||||
info(buffer: Buffer, format?: any, ...params: Array<any>): void;
|
||||
info(obj: Object, format?: any, ...params: Array<any>): void;
|
||||
info(format: string, ...params: Array<any>): void;
|
||||
warn(...params: Array<void>): boolean;
|
||||
warn(error: Error, format?: any, ...params: Array<any>): void;
|
||||
warn(buffer: Buffer, format?: any, ...params: Array<any>): void;
|
||||
warn(obj: Object, format?: any, ...params: Array<any>): void;
|
||||
warn(format: string, ...params: Array<any>): void;
|
||||
error(...params: Array<void>): boolean;
|
||||
error(error: Error, format?: any, ...params: Array<any>): void;
|
||||
error(buffer: Buffer, format?: any, ...params: Array<any>): void;
|
||||
error(obj: Object, format?: any, ...params: Array<any>): void;
|
||||
error(format: string, ...params: Array<any>): void;
|
||||
fatal(...params: Array<void>): boolean;
|
||||
fatal(error: Error, format?: any, ...params: Array<any>): void;
|
||||
fatal(buffer: Buffer, format?: any, ...params: Array<any>): void;
|
||||
fatal(obj: Object, format?: any, ...params: Array<any>): void;
|
||||
fatal(format: string, ...params: Array<any>): void;
|
||||
static stdSerializers: {
|
||||
req: (
|
||||
req: http$ClientRequest
|
||||
) => {
|
||||
method: string,
|
||||
url: string,
|
||||
headers: mixed,
|
||||
remoteAddress: string,
|
||||
remotePort: number
|
||||
},
|
||||
res: (
|
||||
res: http$IncomingMessage
|
||||
) => { statusCode: number, header: string },
|
||||
err: (
|
||||
err: Error
|
||||
) => {
|
||||
message: string,
|
||||
name: string,
|
||||
stack: string,
|
||||
code: string,
|
||||
signal: string
|
||||
}
|
||||
};
|
||||
}
|
||||
declare interface LoggerOptions {
|
||||
streams?: Array<Stream>;
|
||||
level?: BunyanLogLevels | string;
|
||||
stream?: stream$Writable;
|
||||
serializers?: Serializers;
|
||||
src?: boolean;
|
||||
}
|
||||
declare type Serializers = {
|
||||
[key: string]: (input: any) => mixed
|
||||
};
|
||||
declare type Stream = {
|
||||
type?: string,
|
||||
level?: number | string,
|
||||
path?: string,
|
||||
stream?: stream$Writable | tty$WriteStream | Stream | Writable,
|
||||
closeOnExit?: boolean,
|
||||
period?: string,
|
||||
count?: number
|
||||
};
|
||||
declare var stdSerializers: Serializers;
|
||||
declare function resolveLevel(value: number | string): number;
|
||||
declare function createLogger(
|
||||
options: LoggerOptions & { name: string }
|
||||
): Logger;
|
||||
declare class RingBuffer extends events$EventEmitter {
|
||||
constructor(options: RingBufferOptions): any;
|
||||
writable: boolean;
|
||||
records: Array<any>;
|
||||
write(record: BunyanRecord): void;
|
||||
end(record?: any): void;
|
||||
destroy(): void;
|
||||
destroySoon(): void;
|
||||
}
|
||||
declare interface RingBufferOptions {
|
||||
limit: number;
|
||||
}
|
||||
declare function safeCycles(): (key: string, value: any) => any;
|
||||
declare class ConsoleRawStream {
|
||||
write(rec: BunyanRecord): void;
|
||||
}
|
||||
declare var levelFromName: {
|
||||
trace: typeof TRACE,
|
||||
debug: typeof DEBUG,
|
||||
info: typeof INFO,
|
||||
warn: typeof WARN,
|
||||
error: typeof ERROR,
|
||||
fatal: typeof FATAL
|
||||
};
|
||||
declare var nameFromLevel: {
|
||||
[key: BunyanLogLevels]: string
|
||||
};
|
||||
declare var VERSION: string;
|
||||
declare var LOG_VERSION: string;
|
||||
}
|
||||
108
flow-typed/npm/chalk_v2.x.x.js
vendored
Normal file
@@ -0,0 +1,108 @@
|
||||
// flow-typed signature: fa51178772ad1f35158cb4238bc3f1eb
|
||||
// flow-typed version: da30fe6876/chalk_v2.x.x/flow_>=v0.25.x
|
||||
|
||||
type $npm$chalk$StyleElement = {
|
||||
open: string,
|
||||
close: string
|
||||
};
|
||||
|
||||
type $npm$chalk$Chain = $npm$chalk$Style & ((...text: any[]) => string);
|
||||
|
||||
type $npm$chalk$Style = {
|
||||
// General
|
||||
reset: $npm$chalk$Chain,
|
||||
bold: $npm$chalk$Chain,
|
||||
dim: $npm$chalk$Chain,
|
||||
italic: $npm$chalk$Chain,
|
||||
underline: $npm$chalk$Chain,
|
||||
inverse: $npm$chalk$Chain,
|
||||
strikethrough: $npm$chalk$Chain,
|
||||
|
||||
// Text colors
|
||||
black: $npm$chalk$Chain,
|
||||
red: $npm$chalk$Chain,
|
||||
redBright: $npm$chalk$Chain,
|
||||
green: $npm$chalk$Chain,
|
||||
greenBright: $npm$chalk$Chain,
|
||||
yellow: $npm$chalk$Chain,
|
||||
yellowBright: $npm$chalk$Chain,
|
||||
blue: $npm$chalk$Chain,
|
||||
blueBright: $npm$chalk$Chain,
|
||||
magenta: $npm$chalk$Chain,
|
||||
magentaBright: $npm$chalk$Chain,
|
||||
cyan: $npm$chalk$Chain,
|
||||
cyanBright: $npm$chalk$Chain,
|
||||
white: $npm$chalk$Chain,
|
||||
whiteBright: $npm$chalk$Chain,
|
||||
gray: $npm$chalk$Chain,
|
||||
grey: $npm$chalk$Chain,
|
||||
|
||||
// Background colors
|
||||
bgBlack: $npm$chalk$Chain,
|
||||
bgBlackBright: $npm$chalk$Chain,
|
||||
bgRed: $npm$chalk$Chain,
|
||||
bgRedBright: $npm$chalk$Chain,
|
||||
bgGreen: $npm$chalk$Chain,
|
||||
bgGreenBright: $npm$chalk$Chain,
|
||||
bgYellow: $npm$chalk$Chain,
|
||||
bgYellowBright: $npm$chalk$Chain,
|
||||
bgBlue: $npm$chalk$Chain,
|
||||
bgBlueBright: $npm$chalk$Chain,
|
||||
bgMagenta: $npm$chalk$Chain,
|
||||
bgMagentaBright: $npm$chalk$Chain,
|
||||
bgCyan: $npm$chalk$Chain,
|
||||
bgCyanBright: $npm$chalk$Chain,
|
||||
bgWhite: $npm$chalk$Chain,
|
||||
bgWhiteBright: $npm$chalk$Chain
|
||||
};
|
||||
|
||||
declare module "chalk" {
|
||||
declare var enabled: boolean;
|
||||
declare var supportsColor: boolean;
|
||||
|
||||
// General
|
||||
declare var reset: $npm$chalk$Chain;
|
||||
declare var bold: $npm$chalk$Chain;
|
||||
declare var dim: $npm$chalk$Chain;
|
||||
declare var italic: $npm$chalk$Chain;
|
||||
declare var underline: $npm$chalk$Chain;
|
||||
declare var inverse: $npm$chalk$Chain;
|
||||
declare var strikethrough: $npm$chalk$Chain;
|
||||
|
||||
// Text colors
|
||||
declare var black: $npm$chalk$Chain;
|
||||
declare var red: $npm$chalk$Chain;
|
||||
declare var redBright: $npm$chalk$Chain;
|
||||
declare var green: $npm$chalk$Chain;
|
||||
declare var greenBright: $npm$chalk$Chain;
|
||||
declare var yellow: $npm$chalk$Chain;
|
||||
declare var yellowBright: $npm$chalk$Chain;
|
||||
declare var blue: $npm$chalk$Chain;
|
||||
declare var blueBright: $npm$chalk$Chain;
|
||||
declare var magenta: $npm$chalk$Chain;
|
||||
declare var magentaBright: $npm$chalk$Chain;
|
||||
declare var cyan: $npm$chalk$Chain;
|
||||
declare var cyanBright: $npm$chalk$Chain;
|
||||
declare var white: $npm$chalk$Chain;
|
||||
declare var whiteBright: $npm$chalk$Chain;
|
||||
declare var gray: $npm$chalk$Chain;
|
||||
declare var grey: $npm$chalk$Chain;
|
||||
|
||||
// Background colors
|
||||
declare var bgBlack: $npm$chalk$Chain;
|
||||
declare var bgBlackBright: $npm$chalk$Chain;
|
||||
declare var bgRed: $npm$chalk$Chain;
|
||||
declare var bgRedBright: $npm$chalk$Chain;
|
||||
declare var bgGreen: $npm$chalk$Chain;
|
||||
declare var bgGreenBright: $npm$chalk$Chain;
|
||||
declare var bgYellow: $npm$chalk$Chain;
|
||||
declare var bgYellowBright: $npm$chalk$Chain;
|
||||
declare var bgBlue: $npm$chalk$Chain;
|
||||
declare var bgBlueBright: $npm$chalk$Chain;
|
||||
declare var bgMagenta: $npm$chalk$Chain;
|
||||
declare var bgMagentaBright: $npm$chalk$Chain;
|
||||
declare var bgCyan: $npm$chalk$Chain;
|
||||
declare var bgCyanBright: $npm$chalk$Chain;
|
||||
declare var bgWhite: $npm$chalk$Chain;
|
||||
declare var bgWhiteBright: $npm$chalk$Chain;
|
||||
}
|
||||
281
flow-typed/npm/commander_v2.x.x.js
vendored
Normal file
@@ -0,0 +1,281 @@
|
||||
// flow-typed signature: 9a1fb3feac221b50aab621209bf8ca9c
|
||||
// flow-typed version: 94e9f7e0a4/commander_v2.x.x/flow_>=v0.28.x
|
||||
|
||||
declare module "commander" {
|
||||
declare class Command extends events$EventEmitter {
|
||||
/**
|
||||
* Initialize a new `Command`.
|
||||
*
|
||||
* @param {String} name
|
||||
* @api public
|
||||
*/
|
||||
constructor(name?: string): Command;
|
||||
|
||||
/**
|
||||
* Add command `name`.
|
||||
*
|
||||
* The `.action()` callback is invoked when the
|
||||
* command `name` is specified via __ARGV__,
|
||||
* and the remaining arguments are applied to the
|
||||
* function for access.
|
||||
*
|
||||
* When the `name` is "*" an un-matched command
|
||||
* will be passed as the first arg, followed by
|
||||
* the rest of __ARGV__ remaining.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* program
|
||||
* .version('0.0.1')
|
||||
* .option('-C, --chdir <path>', 'change the working directory')
|
||||
* .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
|
||||
* .option('-T, --no-tests', 'ignore test hook')
|
||||
*
|
||||
* program
|
||||
* .command('setup')
|
||||
* .description('run remote setup commands')
|
||||
* .action(function(){
|
||||
* console.log('setup');
|
||||
* });
|
||||
*
|
||||
* program
|
||||
* .command('exec <cmd>')
|
||||
* .description('run the given remote command')
|
||||
* .action(function(cmd){
|
||||
* console.log('exec "%s"', cmd);
|
||||
* });
|
||||
*
|
||||
* program
|
||||
* .command('*')
|
||||
* .description('deploy the given env')
|
||||
* .action(function(env){
|
||||
* console.log('deploying "%s"', env);
|
||||
* });
|
||||
*
|
||||
* program.parse(process.argv);
|
||||
*
|
||||
* @param {String} name
|
||||
* @param {String} [desc]
|
||||
* @param {Mixed} [opts]
|
||||
* @return {Command} the new command
|
||||
* @api public
|
||||
*/
|
||||
command(
|
||||
name: string,
|
||||
desc?: string,
|
||||
opts?: { isDefault: boolean, noHelp: boolean }
|
||||
): Command;
|
||||
|
||||
/**
|
||||
* Parse expected `args`.
|
||||
*
|
||||
* For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
|
||||
*
|
||||
* @param {Array} args
|
||||
* @return {Command} for chaining
|
||||
* @api public
|
||||
*/
|
||||
parseExpectedArgs(args: Array<string>): this;
|
||||
|
||||
/**
|
||||
* Register callback `fn` for the command.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* program
|
||||
* .command('help')
|
||||
* .description('display verbose help')
|
||||
* .action(function(){
|
||||
* // output help here
|
||||
* });
|
||||
*
|
||||
* @param {Function} fn
|
||||
* @return {Command} for chaining
|
||||
* @api public
|
||||
*/
|
||||
action(fn: (...args: Array<any>) => mixed): this;
|
||||
|
||||
/**
|
||||
* Define option with `flags`, `description` and optional
|
||||
* coercion `fn`.
|
||||
*
|
||||
* The `flags` string should contain both the short and long flags,
|
||||
* separated by comma, a pipe or space. The following are all valid
|
||||
* all will output this way when `--help` is used.
|
||||
*
|
||||
* "-p, --pepper"
|
||||
* "-p|--pepper"
|
||||
* "-p --pepper"
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* // simple boolean defaulting to false
|
||||
* program.option('-p, --pepper', 'add pepper');
|
||||
*
|
||||
* --pepper
|
||||
* program.pepper
|
||||
* // => Boolean
|
||||
*
|
||||
* // simple boolean defaulting to true
|
||||
* program.option('-C, --no-cheese', 'remove cheese');
|
||||
*
|
||||
* program.cheese
|
||||
* // => true
|
||||
*
|
||||
* --no-cheese
|
||||
* program.cheese
|
||||
* // => false
|
||||
*
|
||||
* // required argument
|
||||
* program.option('-C, --chdir <path>', 'change the working directory');
|
||||
*
|
||||
* --chdir /tmp
|
||||
* program.chdir
|
||||
* // => "/tmp"
|
||||
*
|
||||
* // optional argument
|
||||
* program.option('-c, --cheese [type]', 'add cheese [marble]');
|
||||
*
|
||||
* @param {String} flags
|
||||
* @param {String} description
|
||||
* @param {Function|Mixed} fn or default
|
||||
* @param {Mixed} defaultValue
|
||||
* @return {Command} for chaining
|
||||
* @api public
|
||||
*/
|
||||
option(flags: string, description?: string, fn?: ((val: any, memo: any) => mixed) | RegExp, defaultValue?: mixed): this;
|
||||
option(flags: string, description?: string, defaultValue?: mixed): this;
|
||||
|
||||
/**
|
||||
* Allow unknown options on the command line.
|
||||
*
|
||||
* @param {Boolean} arg if `true` or omitted, no error will be thrown
|
||||
* for unknown options.
|
||||
* @api public
|
||||
*/
|
||||
allowUnknownOption(arg?: boolean): this;
|
||||
|
||||
/**
|
||||
* Parse `argv`, settings options and invoking commands when defined.
|
||||
*
|
||||
* @param {Array} argv
|
||||
* @return {Command} for chaining
|
||||
* @api public
|
||||
*/
|
||||
parse(argv: Array<string>): this;
|
||||
|
||||
/**
|
||||
* Parse options from `argv` returning `argv`
|
||||
* void of these options.
|
||||
*
|
||||
* @param {Array} argv
|
||||
* @return {Array}
|
||||
* @api public
|
||||
*/
|
||||
parseOptions(argv: Array<string>): { args: Array<string>, unknown: Array<string> };
|
||||
|
||||
/**
|
||||
* Define argument syntax for the top-level command.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
arguments(desc: string): this;
|
||||
|
||||
/**
|
||||
* Return an object containing options as key-value pairs
|
||||
*
|
||||
* @return {Object}
|
||||
* @api public
|
||||
*/
|
||||
opts(): { [key: string]: any };
|
||||
|
||||
/**
|
||||
* Set the program version to `str`.
|
||||
*
|
||||
* This method auto-registers the "-V, --version" flag
|
||||
* which will print the version number when passed.
|
||||
*
|
||||
* @param {String} str
|
||||
* @param {String} flags
|
||||
* @return {Command} for chaining
|
||||
* @api public
|
||||
*/
|
||||
version(str: string, flags?: string): this;
|
||||
|
||||
/**
|
||||
* Set the description to `str`.
|
||||
*
|
||||
* @param {String} str
|
||||
* @return {String|Command}
|
||||
* @api public
|
||||
*/
|
||||
description(str: string): this;
|
||||
description(): string;
|
||||
|
||||
/**
|
||||
* Set an alias for the command
|
||||
*
|
||||
* @param {String} alias
|
||||
* @return {String|Command}
|
||||
* @api public
|
||||
*/
|
||||
alias(alias: string): this;
|
||||
alias(): string;
|
||||
|
||||
/**
|
||||
* Set / get the command usage `str`.
|
||||
*
|
||||
* @param {String} str
|
||||
* @return {String|Command}
|
||||
* @api public
|
||||
*/
|
||||
usage(str: string): this;
|
||||
usage(): string;
|
||||
|
||||
/**
|
||||
* Get the name of the command
|
||||
*
|
||||
* @param {String} name
|
||||
* @return {String|Command}
|
||||
* @api public
|
||||
*/
|
||||
name(): string;
|
||||
|
||||
/**
|
||||
* Output help information for this command
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
outputHelp(): void;
|
||||
|
||||
/**
|
||||
* Output help information and exit.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
help(): void;
|
||||
}
|
||||
|
||||
declare class Option {
|
||||
/**
|
||||
* Initialize a new `Option` with the given `flags` and `description`.
|
||||
*
|
||||
* @param {String} flags
|
||||
* @param {String} description
|
||||
* @api public
|
||||
*/
|
||||
constructor(flags: string, description?: string): Option;
|
||||
flags: string;
|
||||
required: boolean;
|
||||
optional: boolean;
|
||||
bool: boolean;
|
||||
short?: string;
|
||||
long: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
declare module.exports: Command & {
|
||||
Command: Command,
|
||||
Option: Option
|
||||
};
|
||||
}
|
||||
127
flow-typed/npm/enzyme_v3.x.x.js
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
// flow-typed signature: 02db3523747059d89e87d4dec6873edf
|
||||
// flow-typed version: 62a0c60689/enzyme_v3.x.x/flow_>=v0.53.x
|
||||
|
||||
import * as React from "react";
|
||||
|
||||
declare module "enzyme" {
|
||||
declare type PredicateFunction<T: Wrapper> = (
|
||||
wrapper: T,
|
||||
index: number
|
||||
) => boolean;
|
||||
declare type NodeOrNodes = React.Node | Array<React.Node>;
|
||||
declare type EnzymeSelector = string | Class<React.Component<*, *>> | Object;
|
||||
|
||||
// CheerioWrapper is a type alias for an actual cheerio instance
|
||||
// TODO: Reference correct type from cheerio's type declarations
|
||||
declare type CheerioWrapper = any;
|
||||
|
||||
declare class Wrapper {
|
||||
find(selector: EnzymeSelector): this,
|
||||
findWhere(predicate: PredicateFunction<this>): this,
|
||||
filter(selector: EnzymeSelector): this,
|
||||
filterWhere(predicate: PredicateFunction<this>): this,
|
||||
hostNodes(): this,
|
||||
contains(nodeOrNodes: NodeOrNodes): boolean,
|
||||
containsMatchingElement(node: React.Node): boolean,
|
||||
containsAllMatchingElements(nodes: NodeOrNodes): boolean,
|
||||
containsAnyMatchingElements(nodes: NodeOrNodes): boolean,
|
||||
dive(option?: { context?: Object }): this,
|
||||
exists(): boolean,
|
||||
isEmptyRender(): boolean,
|
||||
matchesElement(node: React.Node): boolean,
|
||||
hasClass(className: string): boolean,
|
||||
is(selector: EnzymeSelector): boolean,
|
||||
isEmpty(): boolean,
|
||||
not(selector: EnzymeSelector): this,
|
||||
children(selector?: EnzymeSelector): this,
|
||||
childAt(index: number): this,
|
||||
parents(selector?: EnzymeSelector): this,
|
||||
parent(): this,
|
||||
closest(selector: EnzymeSelector): this,
|
||||
render(): CheerioWrapper,
|
||||
unmount(): this,
|
||||
text(): string,
|
||||
html(): string,
|
||||
get(index: number): React.Node,
|
||||
getNodes(): Array<React.Node>,
|
||||
getDOMNode(): HTMLElement | HTMLInputElement,
|
||||
at(index: number): this,
|
||||
first(): this,
|
||||
last(): this,
|
||||
state(key?: string): any,
|
||||
context(key?: string): any,
|
||||
props(): Object,
|
||||
prop(key: string): any,
|
||||
key(): string,
|
||||
simulate(event: string, ...args: Array<any>): this,
|
||||
setState(state: {}, callback?: Function): this,
|
||||
setProps(props: {}): this,
|
||||
setContext(context: Object): this,
|
||||
instance(): React.Component<*, *>,
|
||||
update(): this,
|
||||
debug(): string,
|
||||
type(): string | Function | null,
|
||||
name(): string,
|
||||
forEach(fn: (node: this, index: number) => mixed): this,
|
||||
map<T>(fn: (node: this, index: number) => T): Array<T>,
|
||||
reduce<T>(
|
||||
fn: (value: T, node: this, index: number) => T,
|
||||
initialValue?: T
|
||||
): Array<T>,
|
||||
reduceRight<T>(
|
||||
fn: (value: T, node: this, index: number) => T,
|
||||
initialValue?: T
|
||||
): Array<T>,
|
||||
some(selector: EnzymeSelector): boolean,
|
||||
someWhere(predicate: PredicateFunction<this>): boolean,
|
||||
every(selector: EnzymeSelector): boolean,
|
||||
everyWhere(predicate: PredicateFunction<this>): boolean,
|
||||
length: number
|
||||
}
|
||||
|
||||
declare class ReactWrapper extends Wrapper {
|
||||
constructor(nodes: NodeOrNodes, root: any, options?: ?Object): ReactWrapper,
|
||||
mount(): this,
|
||||
ref(refName: string): this,
|
||||
detach(): void
|
||||
}
|
||||
|
||||
declare class ShallowWrapper extends Wrapper {
|
||||
constructor(
|
||||
nodes: NodeOrNodes,
|
||||
root: any,
|
||||
options?: ?Object
|
||||
): ShallowWrapper,
|
||||
equals(node: React.Node): boolean,
|
||||
shallow(options?: { context?: Object }): ShallowWrapper
|
||||
}
|
||||
|
||||
declare function shallow(
|
||||
node: React.Node,
|
||||
options?: { context?: Object, disableLifecycleMethods?: boolean }
|
||||
): ShallowWrapper;
|
||||
declare function mount(
|
||||
node: React.Node,
|
||||
options?: {
|
||||
context?: Object,
|
||||
attachTo?: HTMLElement,
|
||||
childContextTypes?: Object
|
||||
}
|
||||
): ReactWrapper;
|
||||
declare function render(
|
||||
node: React.Node,
|
||||
options?: { context?: Object }
|
||||
): CheerioWrapper;
|
||||
|
||||
declare module.exports: {
|
||||
configure(options: {
|
||||
Adapter?: any,
|
||||
disableLifecycleMethods?: boolean
|
||||
}): void,
|
||||
render: typeof render,
|
||||
mount: typeof mount,
|
||||
shallow: typeof shallow,
|
||||
ShallowWrapper: typeof ShallowWrapper,
|
||||
ReactWrapper: typeof ReactWrapper
|
||||
};
|
||||
}
|
||||
285
flow-typed/npm/express_v4.16.x.js
vendored
Normal file
@@ -0,0 +1,285 @@
|
||||
// flow-typed signature: 41a220e96fcef89a09244ac3797039e8
|
||||
// flow-typed version: 9f7cf2ab0c/express_v4.16.x/flow_>=v0.32.x
|
||||
|
||||
import type { Server } from "http";
|
||||
import type { Socket } from "net";
|
||||
|
||||
declare type express$RouterOptions = {
|
||||
caseSensitive?: boolean,
|
||||
mergeParams?: boolean,
|
||||
strict?: boolean
|
||||
};
|
||||
|
||||
declare class express$RequestResponseBase {
|
||||
app: express$Application;
|
||||
get(field: string): string | void;
|
||||
}
|
||||
|
||||
declare type express$RequestParams = {
|
||||
[param: string]: string
|
||||
};
|
||||
|
||||
declare class express$Request extends http$IncomingMessage mixins express$RequestResponseBase {
|
||||
baseUrl: string;
|
||||
body: mixed;
|
||||
cookies: { [cookie: string]: string };
|
||||
connection: Socket;
|
||||
fresh: boolean;
|
||||
hostname: string;
|
||||
ip: string;
|
||||
ips: Array<string>;
|
||||
method: string;
|
||||
originalUrl: string;
|
||||
params: express$RequestParams;
|
||||
path: string;
|
||||
protocol: "https" | "http";
|
||||
query: { [name: string]: string | Array<string> };
|
||||
route: string;
|
||||
secure: boolean;
|
||||
signedCookies: { [signedCookie: string]: string };
|
||||
stale: boolean;
|
||||
subdomains: Array<string>;
|
||||
xhr: boolean;
|
||||
accepts(types: string): string | false;
|
||||
accepts(types: Array<string>): string | false;
|
||||
acceptsCharsets(...charsets: Array<string>): string | false;
|
||||
acceptsEncodings(...encoding: Array<string>): string | false;
|
||||
acceptsLanguages(...lang: Array<string>): string | false;
|
||||
header(field: string): string | void;
|
||||
is(type: string): boolean;
|
||||
param(name: string, defaultValue?: string): string | void;
|
||||
}
|
||||
|
||||
declare type express$CookieOptions = {
|
||||
domain?: string,
|
||||
encode?: (value: string) => string,
|
||||
expires?: Date,
|
||||
httpOnly?: boolean,
|
||||
maxAge?: number,
|
||||
path?: string,
|
||||
secure?: boolean,
|
||||
signed?: boolean
|
||||
};
|
||||
|
||||
declare type express$Path = string | RegExp;
|
||||
|
||||
declare type express$RenderCallback = (
|
||||
err: Error | null,
|
||||
html?: string
|
||||
) => mixed;
|
||||
|
||||
declare type express$SendFileOptions = {
|
||||
maxAge?: number,
|
||||
root?: string,
|
||||
lastModified?: boolean,
|
||||
headers?: { [name: string]: string },
|
||||
dotfiles?: "allow" | "deny" | "ignore"
|
||||
};
|
||||
|
||||
declare class express$Response extends http$ServerResponse mixins express$RequestResponseBase {
|
||||
headersSent: boolean;
|
||||
locals: { [name: string]: mixed };
|
||||
append(field: string, value?: string): this;
|
||||
attachment(filename?: string): this;
|
||||
cookie(name: string, value: string, options?: express$CookieOptions): this;
|
||||
clearCookie(name: string, options?: express$CookieOptions): this;
|
||||
download(
|
||||
path: string,
|
||||
filename?: string,
|
||||
callback?: (err?: ?Error) => void
|
||||
): this;
|
||||
format(typesObject: { [type: string]: Function }): this;
|
||||
json(body?: mixed): this;
|
||||
jsonp(body?: mixed): this;
|
||||
links(links: { [name: string]: string }): this;
|
||||
location(path: string): this;
|
||||
redirect(url: string, ...args: Array<void>): this;
|
||||
redirect(status: number, url: string, ...args: Array<void>): this;
|
||||
render(
|
||||
view: string,
|
||||
locals?: { [name: string]: mixed },
|
||||
callback?: express$RenderCallback
|
||||
): this;
|
||||
send(body?: mixed): this;
|
||||
sendFile(
|
||||
path: string,
|
||||
options?: express$SendFileOptions,
|
||||
callback?: (err?: ?Error) => mixed
|
||||
): this;
|
||||
sendStatus(statusCode: number): this;
|
||||
header(field: string, value?: string): this;
|
||||
header(headers: { [name: string]: string }): this;
|
||||
set(field: string, value?: string | string[]): this;
|
||||
set(headers: { [name: string]: string }): this;
|
||||
status(statusCode: number): this;
|
||||
type(type: string): this;
|
||||
vary(field: string): this;
|
||||
req: express$Request;
|
||||
}
|
||||
|
||||
declare type express$NextFunction = (err?: ?Error | "route") => mixed;
|
||||
declare type express$Middleware =
|
||||
| ((
|
||||
req: $Subtype<express$Request>,
|
||||
res: express$Response,
|
||||
next: express$NextFunction
|
||||
) => mixed)
|
||||
| ((
|
||||
error: Error,
|
||||
req: $Subtype<express$Request>,
|
||||
res: express$Response,
|
||||
next: express$NextFunction
|
||||
) => mixed);
|
||||
declare interface express$RouteMethodType<T> {
|
||||
(middleware: express$Middleware): T;
|
||||
(...middleware: Array<express$Middleware>): T;
|
||||
(
|
||||
path: express$Path | express$Path[],
|
||||
...middleware: Array<express$Middleware>
|
||||
): T;
|
||||
}
|
||||
declare class express$Route {
|
||||
all: express$RouteMethodType<this>;
|
||||
get: express$RouteMethodType<this>;
|
||||
post: express$RouteMethodType<this>;
|
||||
put: express$RouteMethodType<this>;
|
||||
head: express$RouteMethodType<this>;
|
||||
delete: express$RouteMethodType<this>;
|
||||
options: express$RouteMethodType<this>;
|
||||
trace: express$RouteMethodType<this>;
|
||||
copy: express$RouteMethodType<this>;
|
||||
lock: express$RouteMethodType<this>;
|
||||
mkcol: express$RouteMethodType<this>;
|
||||
move: express$RouteMethodType<this>;
|
||||
purge: express$RouteMethodType<this>;
|
||||
propfind: express$RouteMethodType<this>;
|
||||
proppatch: express$RouteMethodType<this>;
|
||||
unlock: express$RouteMethodType<this>;
|
||||
report: express$RouteMethodType<this>;
|
||||
mkactivity: express$RouteMethodType<this>;
|
||||
checkout: express$RouteMethodType<this>;
|
||||
merge: express$RouteMethodType<this>;
|
||||
|
||||
// @TODO Missing 'm-search' but get flow illegal name error.
|
||||
|
||||
notify: express$RouteMethodType<this>;
|
||||
subscribe: express$RouteMethodType<this>;
|
||||
unsubscribe: express$RouteMethodType<this>;
|
||||
patch: express$RouteMethodType<this>;
|
||||
search: express$RouteMethodType<this>;
|
||||
connect: express$RouteMethodType<this>;
|
||||
}
|
||||
|
||||
declare class express$Router extends express$Route {
|
||||
constructor(options?: express$RouterOptions): void;
|
||||
route(path: string): express$Route;
|
||||
static (options?: express$RouterOptions): express$Router;
|
||||
use(middleware: express$Middleware): this;
|
||||
use(...middleware: Array<express$Middleware>): this;
|
||||
use(
|
||||
path: express$Path | express$Path[],
|
||||
...middleware: Array<express$Middleware>
|
||||
): this;
|
||||
use(path: string, router: express$Router): this;
|
||||
handle(
|
||||
req: http$IncomingMessage,
|
||||
res: http$ServerResponse,
|
||||
next: express$NextFunction
|
||||
): void;
|
||||
param(
|
||||
param: string,
|
||||
callback: (
|
||||
req: $Subtype<express$Request>,
|
||||
res: express$Response,
|
||||
next: express$NextFunction,
|
||||
id: string
|
||||
) => mixed
|
||||
): void;
|
||||
|
||||
// Can't use regular callable signature syntax due to https://github.com/facebook/flow/issues/3084
|
||||
$call: (
|
||||
req: http$IncomingMessage,
|
||||
res: http$ServerResponse,
|
||||
next?: ?express$NextFunction
|
||||
) => void;
|
||||
}
|
||||
|
||||
/*
|
||||
With flow-bin ^0.59, express app.listen() is deemed to return any and fails flow type coverage.
|
||||
Which is ironic because https://github.com/facebook/flow/blob/master/Changelog.md#misc-2 (release notes for 0.59)
|
||||
says "Improves typings for Node.js HTTP server listen() function." See that? IMPROVES!
|
||||
To work around this issue, we changed Server to ?Server here, so that our invocations of express.listen() will
|
||||
not be deemed to lack type coverage.
|
||||
*/
|
||||
|
||||
declare class express$Application extends express$Router mixins events$EventEmitter {
|
||||
constructor(): void;
|
||||
locals: { [name: string]: mixed };
|
||||
mountpath: string;
|
||||
listen(
|
||||
port: number,
|
||||
hostname?: string,
|
||||
backlog?: number,
|
||||
callback?: (err?: ?Error) => mixed
|
||||
): ?Server;
|
||||
listen(
|
||||
port: number,
|
||||
hostname?: string,
|
||||
callback?: (err?: ?Error) => mixed
|
||||
): ?Server;
|
||||
listen(port: number, callback?: (err?: ?Error) => mixed): ?Server;
|
||||
listen(path: string, callback?: (err?: ?Error) => mixed): ?Server;
|
||||
listen(handle: Object, callback?: (err?: ?Error) => mixed): ?Server;
|
||||
disable(name: string): void;
|
||||
disabled(name: string): boolean;
|
||||
enable(name: string): express$Application;
|
||||
enabled(name: string): boolean;
|
||||
engine(name: string, callback: Function): void;
|
||||
/**
|
||||
* Mixed will not be taken as a value option. Issue around using the GET http method name and the get for settings.
|
||||
*/
|
||||
// get(name: string): mixed;
|
||||
set(name: string, value: mixed): mixed;
|
||||
render(
|
||||
name: string,
|
||||
optionsOrFunction: { [name: string]: mixed },
|
||||
callback: express$RenderCallback
|
||||
): void;
|
||||
handle(
|
||||
req: http$IncomingMessage,
|
||||
res: http$ServerResponse,
|
||||
next?: ?express$NextFunction
|
||||
): void;
|
||||
}
|
||||
|
||||
declare type JsonOptions = {
|
||||
inflate?: boolean,
|
||||
limit?: string | number,
|
||||
reviver?: (key: string, value: mixed) => mixed,
|
||||
strict?: boolean,
|
||||
type?: string | Array<string> | ((req: express$Request) => boolean),
|
||||
verify?: (
|
||||
req: express$Request,
|
||||
res: express$Response,
|
||||
buf: Buffer,
|
||||
encoding: string
|
||||
) => mixed
|
||||
};
|
||||
|
||||
declare module "express" {
|
||||
declare export type RouterOptions = express$RouterOptions;
|
||||
declare export type CookieOptions = express$CookieOptions;
|
||||
declare export type Middleware = express$Middleware;
|
||||
declare export type NextFunction = express$NextFunction;
|
||||
declare export type RequestParams = express$RequestParams;
|
||||
declare export type $Response = express$Response;
|
||||
declare export type $Request = express$Request;
|
||||
declare export type $Application = express$Application;
|
||||
|
||||
declare module.exports: {
|
||||
(): express$Application, // If you try to call like a function, it will use this signature
|
||||
json: (opts: ?JsonOptions) => express$Middleware,
|
||||
static: (root: string, options?: Object) => express$Middleware, // `static` property on the function
|
||||
Router: typeof express$Router // `Router` property on the function
|
||||
};
|
||||
}
|
||||
6
flow-typed/npm/flow-bin_v0.x.x.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
// flow-typed signature: 6a5610678d4b01e13bbfbbc62bdaf583
|
||||
// flow-typed version: 3817bc6980/flow-bin_v0.x.x/flow_>=v0.25.x
|
||||
|
||||
declare module "flow-bin" {
|
||||
declare module.exports: string;
|
||||
}
|
||||
59
flow-typed/npm/http-errors_v1.x.x.js
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
// flow-typed signature: 573c576fe34eb3c3c65dd7a9c90a46d2
|
||||
// flow-typed version: b43dff3e0e/http-errors_v1.x.x/flow_>=v0.25.x
|
||||
|
||||
declare module 'http-errors' {
|
||||
declare class SpecialHttpError extends HttpError {
|
||||
constructor(): SpecialHttpError;
|
||||
}
|
||||
declare class HttpError extends Error {
|
||||
expose: bool;
|
||||
message: string;
|
||||
status: number;
|
||||
statusCode: number;
|
||||
}
|
||||
declare module.exports: {
|
||||
(status?: number, message?: string, props?: Object): HttpError;
|
||||
HttpError: typeof HttpError;
|
||||
BadRequest: typeof SpecialHttpError;
|
||||
Unauthorized: typeof SpecialHttpError;
|
||||
PaymentRequired: typeof SpecialHttpError;
|
||||
Forbidden: typeof SpecialHttpError;
|
||||
NotFound: typeof SpecialHttpError;
|
||||
MethodNotAllowed: typeof SpecialHttpError;
|
||||
NotAcceptable: typeof SpecialHttpError;
|
||||
ProxyAuthenticationRequired: typeof SpecialHttpError;
|
||||
RequestTimeout: typeof SpecialHttpError;
|
||||
Conflict: typeof SpecialHttpError;
|
||||
Gone: typeof SpecialHttpError;
|
||||
LengthRequired: typeof SpecialHttpError;
|
||||
PreconditionFailed: typeof SpecialHttpError;
|
||||
PayloadTooLarge: typeof SpecialHttpError;
|
||||
URITooLong: typeof SpecialHttpError;
|
||||
UnsupportedMediaType: typeof SpecialHttpError;
|
||||
RangeNotStatisfiable: typeof SpecialHttpError;
|
||||
ExpectationFailed: typeof SpecialHttpError;
|
||||
ImATeapot: typeof SpecialHttpError;
|
||||
MisdirectedRequest: typeof SpecialHttpError;
|
||||
UnprocessableEntity: typeof SpecialHttpError;
|
||||
Locked: typeof SpecialHttpError;
|
||||
FailedDependency: typeof SpecialHttpError;
|
||||
UnorderedCollection: typeof SpecialHttpError;
|
||||
UpgradeRequired: typeof SpecialHttpError;
|
||||
PreconditionRequired: typeof SpecialHttpError;
|
||||
TooManyRequests: typeof SpecialHttpError;
|
||||
RequestHeaderFieldsTooLarge: typeof SpecialHttpError;
|
||||
UnavailableForLegalReasons: typeof SpecialHttpError;
|
||||
InternalServerError: typeof SpecialHttpError;
|
||||
NotImplemented: typeof SpecialHttpError;
|
||||
BadGateway: typeof SpecialHttpError;
|
||||
ServiceUnavailable: typeof SpecialHttpError;
|
||||
GatewayTimeout: typeof SpecialHttpError;
|
||||
HTTPVersionNotSupported: typeof SpecialHttpError;
|
||||
VariantAlsoNegotiates: typeof SpecialHttpError;
|
||||
InsufficientStorage: typeof SpecialHttpError;
|
||||
LoopDetected: typeof SpecialHttpError;
|
||||
BandwidthLimitExceeded: typeof SpecialHttpError;
|
||||
NotExtended: typeof SpecialHttpError;
|
||||
NetworkAuthenticationRequired: typeof SpecialHttpError;
|
||||
}
|
||||
}
|
||||
588
flow-typed/npm/jest_v22.x.x.js
vendored
Normal file
@@ -0,0 +1,588 @@
|
||||
// flow-typed signature: 6e1fc0a644aa956f79029fec0709e597
|
||||
// flow-typed version: 07ebad4796/jest_v22.x.x/flow_>=v0.39.x
|
||||
|
||||
type JestMockFn<TArguments: $ReadOnlyArray<*>, TReturn> = {
|
||||
(...args: TArguments): TReturn,
|
||||
/**
|
||||
* An object for introspecting mock calls
|
||||
*/
|
||||
mock: {
|
||||
/**
|
||||
* An array that represents all calls that have been made into this mock
|
||||
* function. Each call is represented by an array of arguments that were
|
||||
* passed during the call.
|
||||
*/
|
||||
calls: Array<TArguments>,
|
||||
/**
|
||||
* An array that contains all the object instances that have been
|
||||
* instantiated from this mock function.
|
||||
*/
|
||||
instances: Array<TReturn>
|
||||
},
|
||||
/**
|
||||
* Resets all information stored in the mockFn.mock.calls and
|
||||
* mockFn.mock.instances arrays. Often this is useful when you want to clean
|
||||
* up a mock's usage data between two assertions.
|
||||
*/
|
||||
mockClear(): void,
|
||||
/**
|
||||
* Resets all information stored in the mock. This is useful when you want to
|
||||
* completely restore a mock back to its initial state.
|
||||
*/
|
||||
mockReset(): void,
|
||||
/**
|
||||
* Removes the mock and restores the initial implementation. This is useful
|
||||
* when you want to mock functions in certain test cases and restore the
|
||||
* original implementation in others. Beware that mockFn.mockRestore only
|
||||
* works when mock was created with jest.spyOn. Thus you have to take care of
|
||||
* restoration yourself when manually assigning jest.fn().
|
||||
*/
|
||||
mockRestore(): void,
|
||||
/**
|
||||
* Accepts a function that should be used as the implementation of the mock.
|
||||
* The mock itself will still record all calls that go into and instances
|
||||
* that come from itself -- the only difference is that the implementation
|
||||
* will also be executed when the mock is called.
|
||||
*/
|
||||
mockImplementation(
|
||||
fn: (...args: TArguments) => TReturn
|
||||
): JestMockFn<TArguments, TReturn>,
|
||||
/**
|
||||
* Accepts a function that will be used as an implementation of the mock for
|
||||
* one call to the mocked function. Can be chained so that multiple function
|
||||
* calls produce different results.
|
||||
*/
|
||||
mockImplementationOnce(
|
||||
fn: (...args: TArguments) => TReturn
|
||||
): JestMockFn<TArguments, TReturn>,
|
||||
/**
|
||||
* Just a simple sugar function for returning `this`
|
||||
*/
|
||||
mockReturnThis(): void,
|
||||
/**
|
||||
* Deprecated: use jest.fn(() => value) instead
|
||||
*/
|
||||
mockReturnValue(value: TReturn): JestMockFn<TArguments, TReturn>,
|
||||
/**
|
||||
* Sugar for only returning a value once inside your mock
|
||||
*/
|
||||
mockReturnValueOnce(value: TReturn): JestMockFn<TArguments, TReturn>
|
||||
};
|
||||
|
||||
type JestAsymmetricEqualityType = {
|
||||
/**
|
||||
* A custom Jasmine equality tester
|
||||
*/
|
||||
asymmetricMatch(value: mixed): boolean
|
||||
};
|
||||
|
||||
type JestCallsType = {
|
||||
allArgs(): mixed,
|
||||
all(): mixed,
|
||||
any(): boolean,
|
||||
count(): number,
|
||||
first(): mixed,
|
||||
mostRecent(): mixed,
|
||||
reset(): void
|
||||
};
|
||||
|
||||
type JestClockType = {
|
||||
install(): void,
|
||||
mockDate(date: Date): void,
|
||||
tick(milliseconds?: number): void,
|
||||
uninstall(): void
|
||||
};
|
||||
|
||||
type JestMatcherResult = {
|
||||
message?: string | (() => string),
|
||||
pass: boolean
|
||||
};
|
||||
|
||||
type JestMatcher = (actual: any, expected: any) => JestMatcherResult;
|
||||
|
||||
type JestPromiseType = {
|
||||
/**
|
||||
* Use rejects to unwrap the reason of a rejected promise so any other
|
||||
* matcher can be chained. If the promise is fulfilled the assertion fails.
|
||||
*/
|
||||
rejects: JestExpectType,
|
||||
/**
|
||||
* Use resolves to unwrap the value of a fulfilled promise so any other
|
||||
* matcher can be chained. If the promise is rejected the assertion fails.
|
||||
*/
|
||||
resolves: JestExpectType
|
||||
};
|
||||
|
||||
/**
|
||||
* Plugin: jest-enzyme
|
||||
*/
|
||||
type EnzymeMatchersType = {
|
||||
toBeChecked(): void,
|
||||
toBeDisabled(): void,
|
||||
toBeEmpty(): void,
|
||||
toBePresent(): void,
|
||||
toContainReact(element: React$Element<any>): void,
|
||||
toHaveClassName(className: string): void,
|
||||
toHaveHTML(html: string): void,
|
||||
toHaveProp(propKey: string, propValue?: any): void,
|
||||
toHaveRef(refName: string): void,
|
||||
toHaveState(stateKey: string, stateValue?: any): void,
|
||||
toHaveStyle(styleKey: string, styleValue?: any): void,
|
||||
toHaveTagName(tagName: string): void,
|
||||
toHaveText(text: string): void,
|
||||
toIncludeText(text: string): void,
|
||||
toHaveValue(value: any): void,
|
||||
toMatchElement(element: React$Element<any>): void,
|
||||
toMatchSelector(selector: string): void
|
||||
};
|
||||
|
||||
type JestExpectType = {
|
||||
not: JestExpectType & EnzymeMatchersType,
|
||||
/**
|
||||
* If you have a mock function, you can use .lastCalledWith to test what
|
||||
* arguments it was last called with.
|
||||
*/
|
||||
lastCalledWith(...args: Array<any>): void,
|
||||
/**
|
||||
* toBe just checks that a value is what you expect. It uses === to check
|
||||
* strict equality.
|
||||
*/
|
||||
toBe(value: any): void,
|
||||
/**
|
||||
* Use .toHaveBeenCalled to ensure that a mock function got called.
|
||||
*/
|
||||
toBeCalled(): void,
|
||||
/**
|
||||
* Use .toBeCalledWith to ensure that a mock function was called with
|
||||
* specific arguments.
|
||||
*/
|
||||
toBeCalledWith(...args: Array<any>): void,
|
||||
/**
|
||||
* Using exact equality with floating point numbers is a bad idea. Rounding
|
||||
* means that intuitive things fail.
|
||||
*/
|
||||
toBeCloseTo(num: number, delta: any): void,
|
||||
/**
|
||||
* Use .toBeDefined to check that a variable is not undefined.
|
||||
*/
|
||||
toBeDefined(): void,
|
||||
/**
|
||||
* Use .toBeFalsy when you don't care what a value is, you just want to
|
||||
* ensure a value is false in a boolean context.
|
||||
*/
|
||||
toBeFalsy(): void,
|
||||
/**
|
||||
* To compare floating point numbers, you can use toBeGreaterThan.
|
||||
*/
|
||||
toBeGreaterThan(number: number): void,
|
||||
/**
|
||||
* To compare floating point numbers, you can use toBeGreaterThanOrEqual.
|
||||
*/
|
||||
toBeGreaterThanOrEqual(number: number): void,
|
||||
/**
|
||||
* To compare floating point numbers, you can use toBeLessThan.
|
||||
*/
|
||||
toBeLessThan(number: number): void,
|
||||
/**
|
||||
* To compare floating point numbers, you can use toBeLessThanOrEqual.
|
||||
*/
|
||||
toBeLessThanOrEqual(number: number): void,
|
||||
/**
|
||||
* Use .toBeInstanceOf(Class) to check that an object is an instance of a
|
||||
* class.
|
||||
*/
|
||||
toBeInstanceOf(cls: Class<*>): void,
|
||||
/**
|
||||
* .toBeNull() is the same as .toBe(null) but the error messages are a bit
|
||||
* nicer.
|
||||
*/
|
||||
toBeNull(): void,
|
||||
/**
|
||||
* Use .toBeTruthy when you don't care what a value is, you just want to
|
||||
* ensure a value is true in a boolean context.
|
||||
*/
|
||||
toBeTruthy(): void,
|
||||
/**
|
||||
* Use .toBeUndefined to check that a variable is undefined.
|
||||
*/
|
||||
toBeUndefined(): void,
|
||||
/**
|
||||
* Use .toContain when you want to check that an item is in a list. For
|
||||
* testing the items in the list, this uses ===, a strict equality check.
|
||||
*/
|
||||
toContain(item: any): void,
|
||||
/**
|
||||
* Use .toContainEqual when you want to check that an item is in a list. For
|
||||
* testing the items in the list, this matcher recursively checks the
|
||||
* equality of all fields, rather than checking for object identity.
|
||||
*/
|
||||
toContainEqual(item: any): void,
|
||||
/**
|
||||
* Use .toEqual when you want to check that two objects have the same value.
|
||||
* This matcher recursively checks the equality of all fields, rather than
|
||||
* checking for object identity.
|
||||
*/
|
||||
toEqual(value: any): void,
|
||||
/**
|
||||
* Use .toHaveBeenCalled to ensure that a mock function got called.
|
||||
*/
|
||||
toHaveBeenCalled(): void,
|
||||
/**
|
||||
* Use .toHaveBeenCalledTimes to ensure that a mock function got called exact
|
||||
* number of times.
|
||||
*/
|
||||
toHaveBeenCalledTimes(number: number): void,
|
||||
/**
|
||||
* Use .toHaveBeenCalledWith to ensure that a mock function was called with
|
||||
* specific arguments.
|
||||
*/
|
||||
toHaveBeenCalledWith(...args: Array<any>): void,
|
||||
/**
|
||||
* Use .toHaveBeenLastCalledWith to ensure that a mock function was last called
|
||||
* with specific arguments.
|
||||
*/
|
||||
toHaveBeenLastCalledWith(...args: Array<any>): void,
|
||||
/**
|
||||
* Check that an object has a .length property and it is set to a certain
|
||||
* numeric value.
|
||||
*/
|
||||
toHaveLength(number: number): void,
|
||||
/**
|
||||
*
|
||||
*/
|
||||
toHaveProperty(propPath: string, value?: any): void,
|
||||
/**
|
||||
* Use .toMatch to check that a string matches a regular expression or string.
|
||||
*/
|
||||
toMatch(regexpOrString: RegExp | string): void,
|
||||
/**
|
||||
* Use .toMatchObject to check that a javascript object matches a subset of the properties of an object.
|
||||
*/
|
||||
toMatchObject(object: Object | Array<Object>): void,
|
||||
/**
|
||||
* This ensures that a React component matches the most recent snapshot.
|
||||
*/
|
||||
toMatchSnapshot(name?: string): void,
|
||||
/**
|
||||
* Use .toThrow to test that a function throws when it is called.
|
||||
* If you want to test that a specific error gets thrown, you can provide an
|
||||
* argument to toThrow. The argument can be a string for the error message,
|
||||
* a class for the error, or a regex that should match the error.
|
||||
*
|
||||
* Alias: .toThrowError
|
||||
*/
|
||||
toThrow(message?: string | Error | Class<Error> | RegExp): void,
|
||||
toThrowError(message?: string | Error | Class<Error> | RegExp): void,
|
||||
/**
|
||||
* Use .toThrowErrorMatchingSnapshot to test that a function throws a error
|
||||
* matching the most recent snapshot when it is called.
|
||||
*/
|
||||
toThrowErrorMatchingSnapshot(): void
|
||||
};
|
||||
|
||||
type JestObjectType = {
|
||||
/**
|
||||
* Disables automatic mocking in the module loader.
|
||||
*
|
||||
* After this method is called, all `require()`s will return the real
|
||||
* versions of each module (rather than a mocked version).
|
||||
*/
|
||||
disableAutomock(): JestObjectType,
|
||||
/**
|
||||
* An un-hoisted version of disableAutomock
|
||||
*/
|
||||
autoMockOff(): JestObjectType,
|
||||
/**
|
||||
* Enables automatic mocking in the module loader.
|
||||
*/
|
||||
enableAutomock(): JestObjectType,
|
||||
/**
|
||||
* An un-hoisted version of enableAutomock
|
||||
*/
|
||||
autoMockOn(): JestObjectType,
|
||||
/**
|
||||
* Clears the mock.calls and mock.instances properties of all mocks.
|
||||
* Equivalent to calling .mockClear() on every mocked function.
|
||||
*/
|
||||
clearAllMocks(): JestObjectType,
|
||||
/**
|
||||
* Resets the state of all mocks. Equivalent to calling .mockReset() on every
|
||||
* mocked function.
|
||||
*/
|
||||
resetAllMocks(): JestObjectType,
|
||||
/**
|
||||
* Restores all mocks back to their original value.
|
||||
*/
|
||||
restoreAllMocks(): JestObjectType,
|
||||
/**
|
||||
* Removes any pending timers from the timer system.
|
||||
*/
|
||||
clearAllTimers(): void,
|
||||
/**
|
||||
* The same as `mock` but not moved to the top of the expectation by
|
||||
* babel-jest.
|
||||
*/
|
||||
doMock(moduleName: string, moduleFactory?: any): JestObjectType,
|
||||
/**
|
||||
* The same as `unmock` but not moved to the top of the expectation by
|
||||
* babel-jest.
|
||||
*/
|
||||
dontMock(moduleName: string): JestObjectType,
|
||||
/**
|
||||
* Returns a new, unused mock function. Optionally takes a mock
|
||||
* implementation.
|
||||
*/
|
||||
fn<TArguments: $ReadOnlyArray<*>, TReturn>(
|
||||
implementation?: (...args: TArguments) => TReturn
|
||||
): JestMockFn<TArguments, TReturn>,
|
||||
/**
|
||||
* Determines if the given function is a mocked function.
|
||||
*/
|
||||
isMockFunction(fn: Function): boolean,
|
||||
/**
|
||||
* Given the name of a module, use the automatic mocking system to generate a
|
||||
* mocked version of the module for you.
|
||||
*/
|
||||
genMockFromModule(moduleName: string): any,
|
||||
/**
|
||||
* Mocks a module with an auto-mocked version when it is being required.
|
||||
*
|
||||
* The second argument can be used to specify an explicit module factory that
|
||||
* is being run instead of using Jest's automocking feature.
|
||||
*
|
||||
* The third argument can be used to create virtual mocks -- mocks of modules
|
||||
* that don't exist anywhere in the system.
|
||||
*/
|
||||
mock(
|
||||
moduleName: string,
|
||||
moduleFactory?: any,
|
||||
options?: Object
|
||||
): JestObjectType,
|
||||
/**
|
||||
* Returns the actual module instead of a mock, bypassing all checks on
|
||||
* whether the module should receive a mock implementation or not.
|
||||
*/
|
||||
requireActual(moduleName: string): any,
|
||||
/**
|
||||
* Returns a mock module instead of the actual module, bypassing all checks
|
||||
* on whether the module should be required normally or not.
|
||||
*/
|
||||
requireMock(moduleName: string): any,
|
||||
/**
|
||||
* Resets the module registry - the cache of all required modules. This is
|
||||
* useful to isolate modules where local state might conflict between tests.
|
||||
*/
|
||||
resetModules(): JestObjectType,
|
||||
/**
|
||||
* Exhausts the micro-task queue (usually interfaced in node via
|
||||
* process.nextTick).
|
||||
*/
|
||||
runAllTicks(): void,
|
||||
/**
|
||||
* Exhausts the macro-task queue (i.e., all tasks queued by setTimeout(),
|
||||
* setInterval(), and setImmediate()).
|
||||
*/
|
||||
runAllTimers(): void,
|
||||
/**
|
||||
* Exhausts all tasks queued by setImmediate().
|
||||
*/
|
||||
runAllImmediates(): void,
|
||||
/**
|
||||
* Executes only the macro task queue (i.e. all tasks queued by setTimeout()
|
||||
* or setInterval() and setImmediate()).
|
||||
*/
|
||||
runTimersToTime(msToRun: number): void,
|
||||
/**
|
||||
* Executes only the macro-tasks that are currently pending (i.e., only the
|
||||
* tasks that have been queued by setTimeout() or setInterval() up to this
|
||||
* point)
|
||||
*/
|
||||
runOnlyPendingTimers(): void,
|
||||
/**
|
||||
* Explicitly supplies the mock object that the module system should return
|
||||
* for the specified module. Note: It is recommended to use jest.mock()
|
||||
* instead.
|
||||
*/
|
||||
setMock(moduleName: string, moduleExports: any): JestObjectType,
|
||||
/**
|
||||
* Indicates that the module system should never return a mocked version of
|
||||
* the specified module from require() (e.g. that it should always return the
|
||||
* real module).
|
||||
*/
|
||||
unmock(moduleName: string): JestObjectType,
|
||||
/**
|
||||
* Instructs Jest to use fake versions of the standard timer functions
|
||||
* (setTimeout, setInterval, clearTimeout, clearInterval, nextTick,
|
||||
* setImmediate and clearImmediate).
|
||||
*/
|
||||
useFakeTimers(): JestObjectType,
|
||||
/**
|
||||
* Instructs Jest to use the real versions of the standard timer functions.
|
||||
*/
|
||||
useRealTimers(): JestObjectType,
|
||||
/**
|
||||
* Creates a mock function similar to jest.fn but also tracks calls to
|
||||
* object[methodName].
|
||||
*/
|
||||
spyOn(object: Object, methodName: string): JestMockFn<any, any>,
|
||||
/**
|
||||
* Set the default timeout interval for tests and before/after hooks in milliseconds.
|
||||
* Note: The default timeout interval is 5 seconds if this method is not called.
|
||||
*/
|
||||
setTimeout(timeout: number): JestObjectType
|
||||
};
|
||||
|
||||
type JestSpyType = {
|
||||
calls: JestCallsType
|
||||
};
|
||||
|
||||
/** Runs this function after every test inside this context */
|
||||
declare function afterEach(
|
||||
fn: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void;
|
||||
/** Runs this function before every test inside this context */
|
||||
declare function beforeEach(
|
||||
fn: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void;
|
||||
/** Runs this function after all tests have finished inside this context */
|
||||
declare function afterAll(
|
||||
fn: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void;
|
||||
/** Runs this function before any tests have started inside this context */
|
||||
declare function beforeAll(
|
||||
fn: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void;
|
||||
|
||||
/** A context for grouping tests together */
|
||||
declare var describe: {
|
||||
/**
|
||||
* Creates a block that groups together several related tests in one "test suite"
|
||||
*/
|
||||
(name: string, fn: () => void): void,
|
||||
|
||||
/**
|
||||
* Only run this describe block
|
||||
*/
|
||||
only(name: string, fn: () => void): void,
|
||||
|
||||
/**
|
||||
* Skip running this describe block
|
||||
*/
|
||||
skip(name: string, fn: () => void): void
|
||||
};
|
||||
|
||||
/** An individual test unit */
|
||||
declare var it: {
|
||||
/**
|
||||
* An individual test unit
|
||||
*
|
||||
* @param {string} Name of Test
|
||||
* @param {Function} Test
|
||||
* @param {number} Timeout for the test, in milliseconds.
|
||||
*/
|
||||
(
|
||||
name: string,
|
||||
fn?: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void,
|
||||
/**
|
||||
* Only run this test
|
||||
*
|
||||
* @param {string} Name of Test
|
||||
* @param {Function} Test
|
||||
* @param {number} Timeout for the test, in milliseconds.
|
||||
*/
|
||||
only(
|
||||
name: string,
|
||||
fn?: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void,
|
||||
/**
|
||||
* Skip running this test
|
||||
*
|
||||
* @param {string} Name of Test
|
||||
* @param {Function} Test
|
||||
* @param {number} Timeout for the test, in milliseconds.
|
||||
*/
|
||||
skip(
|
||||
name: string,
|
||||
fn?: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void,
|
||||
/**
|
||||
* Run the test concurrently
|
||||
*
|
||||
* @param {string} Name of Test
|
||||
* @param {Function} Test
|
||||
* @param {number} Timeout for the test, in milliseconds.
|
||||
*/
|
||||
concurrent(
|
||||
name: string,
|
||||
fn?: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void
|
||||
};
|
||||
declare function fit(
|
||||
name: string,
|
||||
fn: (done: () => void) => ?Promise<mixed>,
|
||||
timeout?: number
|
||||
): void;
|
||||
/** An individual test unit */
|
||||
declare var test: typeof it;
|
||||
/** A disabled group of tests */
|
||||
declare var xdescribe: typeof describe;
|
||||
/** A focused group of tests */
|
||||
declare var fdescribe: typeof describe;
|
||||
/** A disabled individual test */
|
||||
declare var xit: typeof it;
|
||||
/** A disabled individual test */
|
||||
declare var xtest: typeof it;
|
||||
|
||||
/** The expect function is used every time you want to test a value */
|
||||
declare var expect: {
|
||||
/** The object that you want to make assertions against */
|
||||
(value: any): JestExpectType & JestPromiseType & EnzymeMatchersType,
|
||||
/** Add additional Jasmine matchers to Jest's roster */
|
||||
extend(matchers: { [name: string]: JestMatcher }): void,
|
||||
/** Add a module that formats application-specific data structures. */
|
||||
addSnapshotSerializer(serializer: (input: Object) => string): void,
|
||||
assertions(expectedAssertions: number): void,
|
||||
hasAssertions(): void,
|
||||
any(value: mixed): JestAsymmetricEqualityType,
|
||||
anything(): void,
|
||||
arrayContaining(value: Array<mixed>): void,
|
||||
objectContaining(value: Object): void,
|
||||
/** Matches any received string that contains the exact expected string. */
|
||||
stringContaining(value: string): void,
|
||||
stringMatching(value: string | RegExp): void
|
||||
};
|
||||
|
||||
// TODO handle return type
|
||||
// http://jasmine.github.io/2.4/introduction.html#section-Spies
|
||||
declare function spyOn(value: mixed, method: string): Object;
|
||||
|
||||
/** Holds all functions related to manipulating test runner */
|
||||
declare var jest: JestObjectType;
|
||||
|
||||
/**
|
||||
* The global Jasmine object, this is generally not exposed as the public API,
|
||||
* using features inside here could break in later versions of Jest.
|
||||
*/
|
||||
declare var jasmine: {
|
||||
DEFAULT_TIMEOUT_INTERVAL: number,
|
||||
any(value: mixed): JestAsymmetricEqualityType,
|
||||
anything(): void,
|
||||
arrayContaining(value: Array<mixed>): void,
|
||||
clock(): JestClockType,
|
||||
createSpy(name: string): JestSpyType,
|
||||
createSpyObj(
|
||||
baseName: string,
|
||||
methodNames: Array<string>
|
||||
): { [methodName: string]: JestSpyType },
|
||||
objectContaining(value: Object): void,
|
||||
stringMatching(value: string): void
|
||||
};
|
||||
18
flow-typed/npm/lockfile_v1.x.x.js
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
// flow-typed signature: 20e87b8d51bb8f98aaf129f4b0bdaf81
|
||||
// flow-typed version: c5395b57b9/lockfile_v1.x.x/flow_>=v0.47.x
|
||||
|
||||
declare module "lockfile" {
|
||||
declare type Callback = (err: ?Error) => void | mixed;
|
||||
declare type LockOptions = {
|
||||
wait?: number,
|
||||
pollPeriod?: number,
|
||||
stale?: number,
|
||||
retries?: number,
|
||||
retryWait?: number
|
||||
};
|
||||
declare interface LockFileExport {
|
||||
lock(fileName: string, opts: LockOptions, cb: Callback): void,
|
||||
unlock(fileName: string, cb: Callback): void
|
||||
}
|
||||
declare module.exports: LockFileExport;
|
||||
}
|
||||
5976
flow-typed/npm/lodash_v4.x.x.js
vendored
Normal file
163
flow-typed/npm/marked_v0.3.x.js
vendored
Normal file
@@ -0,0 +1,163 @@
|
||||
// flow-typed signature: 85ea5a515c42c00188d893614f410655
|
||||
// flow-typed version: 72fe9c1b53/marked_v0.3.x/flow_>=v0.28.x
|
||||
|
||||
type marked$AlignFlag = 'left' | 'right' | 'center'
|
||||
|
||||
type marked$NodeCallback<T> = (e: ?Error, d: ?T) => void
|
||||
|
||||
class marked$Renderer {
|
||||
options: marked$MarkedOptions;
|
||||
code: (c: string, l: string) => string;
|
||||
blockquote: (q: string) => string;
|
||||
html: (h: string) => string;
|
||||
heading: (t: string, l: number) => string;
|
||||
hr: () => string;
|
||||
list: (b: string, o: boolean) => string;
|
||||
listitem: (t: string) => string;
|
||||
paragraph: (t: string) => string;
|
||||
table: (h: string, b: string) => string;
|
||||
tablerow: (c: string) => string;
|
||||
tablecell: (c: string, f: ?marked$AlignFlag) => string;
|
||||
heading: (t: string, l: number) => string;
|
||||
strong: (t: string) => string;
|
||||
em: (t: string) => string;
|
||||
codespan: (c: string) => string;
|
||||
br: () => string;
|
||||
del: (t: string) => string;
|
||||
link: (h: string, ti: string, te: string) => string;
|
||||
image: (h: string, ti: string, te: string) => string;
|
||||
text: (t: string) => string;
|
||||
constructor(o?: marked$MarkedOptions): marked$Renderer {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
type marked$HighlightFunction =
|
||||
((c: string, l: string, cb: marked$NodeCallback<string>) => void)
|
||||
| ((c: string, cb: marked$NodeCallback<string>) => void)
|
||||
| ((c: string, l?: string) => string)
|
||||
|
||||
type marked$MarkedOptions = {
|
||||
highlight?: marked$HighlightFunction;
|
||||
renderer?: marked$Renderer;
|
||||
gfm?: boolean;
|
||||
tables?: boolean;
|
||||
breaks?: boolean;
|
||||
pedantic?: boolean;
|
||||
sanitize?: boolean;
|
||||
smartLists?: boolean;
|
||||
smartypants?: boolean;
|
||||
}
|
||||
|
||||
/*
|
||||
* marked$Tokens
|
||||
*/
|
||||
|
||||
type marked$Space = { type: 'space'; }
|
||||
type marked$Code = { type: 'code'; text: string; lang?: string; }
|
||||
type marked$Heading = { type: 'heading'; depth: number; text: string; }
|
||||
type marked$Table = { type: 'table'; header: string; align: Array<marked$AlignFlag> ; cells: Array<Array<string>> }
|
||||
type marked$Hr = { type: 'hr'; }
|
||||
type marked$BlockquoteStart = { type: 'blockquote_start' }
|
||||
type marked$BlockquoteEnd = { type: 'blockquote_end' }
|
||||
type marked$ListStart = { type: 'list_start' }
|
||||
type marked$ListEnd = { type: 'list_end' }
|
||||
type marked$Paragraph = { type: 'paragraph'; pre: boolean; text: string; }
|
||||
type marked$Html = { type: 'paragraph'; pre: boolean; text: string; }
|
||||
type marked$Text = { type: 'text'; text: string; }
|
||||
|
||||
type marked$Token =
|
||||
marked$Space
|
||||
| marked$Code
|
||||
| marked$Heading
|
||||
| marked$Table
|
||||
| marked$Hr
|
||||
| marked$BlockquoteStart
|
||||
| marked$BlockquoteEnd
|
||||
| marked$ListStart
|
||||
| marked$ListEnd
|
||||
| marked$Paragraph
|
||||
| marked$Html
|
||||
| marked$Text
|
||||
|
||||
type marked$Link = {
|
||||
title: ?string;
|
||||
href: string;
|
||||
}
|
||||
|
||||
type marked$Tokens = { links: Array<marked$Link> } & Array<marked$Token>;
|
||||
|
||||
type marked$NoopRule = {
|
||||
(i: mixed): void;
|
||||
exec: (i: mixed) => void;
|
||||
}
|
||||
|
||||
type marked$Rule = RegExp | marked$NoopRule
|
||||
|
||||
type marked$lex = (t: string) => marked$Tokens;
|
||||
|
||||
class marked$Lexer {
|
||||
static lexer: (t: string, o?: marked$MarkedOptions) => marked$Tokens;
|
||||
static rules: { [key: string]: marked$Rule };
|
||||
rules: { [key: string]: marked$Rule };
|
||||
lex: marked$lex;
|
||||
tokens: marked$Tokens;
|
||||
options: marked$MarkedOptions;
|
||||
constructor(o?: marked$MarkedOptions): marked$Lexer {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class marked$Parser {
|
||||
static parse: (t: marked$Tokens, o?: marked$MarkedOptions) => string;
|
||||
parse: (t: marked$Tokens) => string;
|
||||
next: () => marked$Token;
|
||||
peek: () => marked$Token;
|
||||
parsemarked$Text: () => string;
|
||||
tok: () => string;
|
||||
tokens: marked$Tokens;
|
||||
token: ?marked$Token;
|
||||
options: marked$MarkedOptions;
|
||||
renderer: marked$Renderer;
|
||||
constructor(o?: marked$MarkedOptions): marked$Parser {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class marked$InlineLexer {
|
||||
static rules: Array<marked$Rule>;
|
||||
static output: (s: string, l: Array<marked$Link>, o?: marked$MarkedOptions) => string;
|
||||
output: (s: string) => string;
|
||||
outputmarked$Link: (c: Array<string>, l: marked$Link) => string;
|
||||
smartypants: (t: string) => string;
|
||||
mangle: (t: string) => string;
|
||||
options: marked$MarkedOptions;
|
||||
links: Array<marked$Link>;
|
||||
rules: Array<marked$Rule>;
|
||||
renderer: marked$Renderer;
|
||||
constructor(l: Array<marked$Link>, o?: marked$MarkedOptions): marked$InlineLexer {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
type marked$Marked = {
|
||||
(md: string, o: marked$MarkedOptions, cb: marked$NodeCallback<string>): void;
|
||||
(md: string, cb: marked$NodeCallback<string>): void;
|
||||
(md: string, o?: marked$MarkedOptions): string;
|
||||
setOptions: (o: marked$MarkedOptions) => void;
|
||||
defaults: marked$MarkedOptions;
|
||||
Parser: typeof marked$Parser;
|
||||
parser: typeof marked$Parser.parse;
|
||||
Lexer: typeof marked$Lexer;
|
||||
lexer: typeof marked$Lexer.lexer;
|
||||
InlineLexer: typeof marked$InlineLexer;
|
||||
inlinelexer: marked$InlineLexer.output;
|
||||
Renderer: typeof marked$Renderer;
|
||||
parse: marked$Marked;
|
||||
}
|
||||
|
||||
|
||||
declare module marked {
|
||||
declare export default marked$Marked;
|
||||
}
|
||||
|
||||
53
flow-typed/npm/minimatch_v3.x.x.js
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
// flow-typed signature: bc0af4a44bb8631039f713b1afba6988
|
||||
// flow-typed version: d42cbef63c/minimatch_v3.x.x/flow_>=v0.25.x
|
||||
|
||||
type $npm$minimatch$Options = {
|
||||
debug?: boolean,
|
||||
nobrace?: boolean,
|
||||
noglobstar?: boolean,
|
||||
dot?: boolean,
|
||||
noext?: boolean,
|
||||
nocase?: boolean,
|
||||
nonull?: boolean,
|
||||
matchBase?: boolean,
|
||||
nocomment?: boolean,
|
||||
nonegate?: boolean,
|
||||
flipNegate?: boolean
|
||||
};
|
||||
|
||||
declare module "minimatch" {
|
||||
declare class Minimatch {
|
||||
constructor(pattern: string, options?: $npm$minimatch$Options): Minimatch,
|
||||
set: Array<Array<string | RegExp>>,
|
||||
regexp: null | RegExp, // null until .makeRe() is called
|
||||
negate: boolean,
|
||||
comment: boolean,
|
||||
empty: boolean,
|
||||
makeRe(): RegExp | false,
|
||||
match(name: string): boolean,
|
||||
matchOne(
|
||||
fileArray: Array<string>,
|
||||
patternArray: Array<string>,
|
||||
partial?: boolean
|
||||
): boolean
|
||||
}
|
||||
|
||||
declare class MinimatchModule {
|
||||
Minimatch: Class<Minimatch>,
|
||||
|
||||
(name: string, pattern: string, options?: $npm$minimatch$Options): boolean,
|
||||
|
||||
filter(
|
||||
pattern: string,
|
||||
options?: $npm$minimatch$Options
|
||||
): (value: string) => boolean,
|
||||
|
||||
match(
|
||||
list: Array<string>,
|
||||
pattern: string,
|
||||
options?: $npm$minimatch$Options
|
||||
): Array<string>
|
||||
}
|
||||
|
||||
declare module.exports: MinimatchModule;
|
||||
}
|
||||
13
flow-typed/npm/mkdirp_v0.5.x.js
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
// flow-typed signature: 82aa0feffc2bbd64dce3bec492f5d601
|
||||
// flow-typed version: 3315d89a00/mkdirp_v0.5.x/flow_>=v0.25.0
|
||||
|
||||
declare module 'mkdirp' {
|
||||
declare type Options = number | { mode?: number; fs?: mixed };
|
||||
|
||||
declare type Callback = (err: ?Error, path: ?string) => void;
|
||||
|
||||
declare module.exports: {
|
||||
(path: string, options?: Options | Callback, callback?: Callback): void;
|
||||
sync(path: string, options?: Options): void;
|
||||
};
|
||||
}
|
||||
9
flow-typed/npm/normalize.css_v7.x.x.js
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
// flow-typed signature: b0a8c8851219a1c2a933509d842e0bc8
|
||||
// flow-typed version: 4a2d036a51/normalize.css_v7.x.x/flow_>=v0.34.x
|
||||
|
||||
// normalize.css may be imported for side-effects,
|
||||
// e.g. to force webpack to bundle it alongside CSS modules
|
||||
|
||||
declare module "normalize.css" {
|
||||
declare export default empty
|
||||
}
|
||||
34
flow-typed/npm/prop-types_v15.x.x.js
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
// flow-typed signature: 3eaa1f24c7397b78a7481992d2cddcb2
|
||||
// flow-typed version: a1a20d4928/prop-types_v15.x.x/flow_>=v0.41.x
|
||||
|
||||
type $npm$propTypes$ReactPropsCheckType = (
|
||||
props: any,
|
||||
propName: string,
|
||||
componentName: string,
|
||||
href?: string) => ?Error;
|
||||
|
||||
declare module 'prop-types' {
|
||||
declare var array: React$PropType$Primitive<Array<any>>;
|
||||
declare var bool: React$PropType$Primitive<boolean>;
|
||||
declare var func: React$PropType$Primitive<Function>;
|
||||
declare var number: React$PropType$Primitive<number>;
|
||||
declare var object: React$PropType$Primitive<Object>;
|
||||
declare var string: React$PropType$Primitive<string>;
|
||||
declare var any: React$PropType$Primitive<any>;
|
||||
declare var arrayOf: React$PropType$ArrayOf;
|
||||
declare var element: React$PropType$Primitive<any>; /* TODO */
|
||||
declare var instanceOf: React$PropType$InstanceOf;
|
||||
declare var node: React$PropType$Primitive<any>; /* TODO */
|
||||
declare var objectOf: React$PropType$ObjectOf;
|
||||
declare var oneOf: React$PropType$OneOf;
|
||||
declare var oneOfType: React$PropType$OneOfType;
|
||||
declare var shape: React$PropType$Shape;
|
||||
|
||||
declare function checkPropTypes<V>(
|
||||
propTypes: $Subtype<{[_: $Keys<V>]: $npm$propTypes$ReactPropsCheckType}>,
|
||||
values: V,
|
||||
location: string,
|
||||
componentName: string,
|
||||
getStack: ?(() => ?string)
|
||||
) : void;
|
||||
}
|
||||