mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-24 03:39:11 +00:00
Compare commits
1280 Commits
@now/pytho
...
@now/routi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4930028674 | ||
|
|
14a82717f1 | ||
|
|
9a31d49bc9 | ||
|
|
f8ddda9a4a | ||
|
|
9d0b0c6e41 | ||
|
|
7e584be2cd | ||
|
|
4dd640636c | ||
|
|
0a3ed02a33 | ||
|
|
97792dbad0 | ||
|
|
25ab63c969 | ||
|
|
6e06b13bf3 | ||
|
|
6cf5892e27 | ||
|
|
f65b7ec546 | ||
|
|
a36c2eabb3 | ||
|
|
be93c55c0b | ||
|
|
eeefbeaed4 | ||
|
|
027bc6ab5a | ||
|
|
890de6a625 | ||
|
|
537d508a1e | ||
|
|
3b98cdac4b | ||
|
|
aaf7d6b1cd | ||
|
|
d4b6814d40 | ||
|
|
a85f11aaef | ||
|
|
090c3ef9fc | ||
|
|
46c8cb1a68 | ||
|
|
faeb053ea6 | ||
|
|
708a09b86a | ||
|
|
89403e93e4 | ||
|
|
ecb0c08fe2 | ||
|
|
0b88c158b9 | ||
|
|
ec3a38107a | ||
|
|
0c0f1c6eb5 | ||
|
|
ed296ef733 | ||
|
|
246f47ec95 | ||
|
|
9d95b99b72 | ||
|
|
3de8ae9d7e | ||
|
|
44f6e1904e | ||
|
|
d9c84fc4ce | ||
|
|
b5142d935b | ||
|
|
718a451110 | ||
|
|
9755847855 | ||
|
|
abc417b6b3 | ||
|
|
d6f71c8d7b | ||
|
|
d90892dc9c | ||
|
|
60d2f8b96c | ||
|
|
2488adf80d | ||
|
|
9deb5b31d2 | ||
|
|
ae55823c3c | ||
|
|
d3395553fe | ||
|
|
e742dd3a48 | ||
|
|
4f0f44e746 | ||
|
|
0da98a7f5d | ||
|
|
685989ae57 | ||
|
|
6bc121e7b1 | ||
|
|
56d3fed954 | ||
|
|
40bbff9bee | ||
|
|
66ab011f4a | ||
|
|
f4237d3db0 | ||
|
|
6f9a083dba | ||
|
|
688fcc6a5b | ||
|
|
847102cf62 | ||
|
|
25d5b9c9cf | ||
|
|
271bab786e | ||
|
|
028e023aba | ||
|
|
39719eed20 | ||
|
|
438339258d | ||
|
|
be445c987c | ||
|
|
93fef7885b | ||
|
|
899c9962ad | ||
|
|
2b601d2424 | ||
|
|
3e36b05434 | ||
|
|
59c9665c3f | ||
|
|
901137c7f6 | ||
|
|
e594e7bbbb | ||
|
|
a477b1c22e | ||
|
|
22ac20d838 | ||
|
|
3794234d7a | ||
|
|
92a40db048 | ||
|
|
502aad7c2b | ||
|
|
b49afb61a6 | ||
|
|
d380902ad3 | ||
|
|
ffaed62094 | ||
|
|
b0adeb68fe | ||
|
|
2372832654 | ||
|
|
e6a9586b7e | ||
|
|
9687415eed | ||
|
|
49b375ed6a | ||
|
|
906dea096e | ||
|
|
3225a83084 | ||
|
|
87794cfcc5 | ||
|
|
79ad0ce0c4 | ||
|
|
fda5987465 | ||
|
|
5cfdd5a6b2 | ||
|
|
bd6e0f9f93 | ||
|
|
aa8d002309 | ||
|
|
42ce9aca86 | ||
|
|
156f596189 | ||
|
|
8acfd5bf71 | ||
|
|
76c99ebb28 | ||
|
|
5fb119b99c | ||
|
|
99b766d9cb | ||
|
|
c207cf9b40 | ||
|
|
dd00ac4621 | ||
|
|
3d18a067a0 | ||
|
|
c48571a799 | ||
|
|
6eeb6983d9 | ||
|
|
aee33f040d | ||
|
|
b100677b3b | ||
|
|
9241b3ae2f | ||
|
|
1088da6871 | ||
|
|
f7b4dd4458 | ||
|
|
fb85b6b27a | ||
|
|
2e5e9b9a6f | ||
|
|
d3cc306e5b | ||
|
|
d6c6a2a271 | ||
|
|
6171a58ae3 | ||
|
|
5a6d1a135f | ||
|
|
68deab9007 | ||
|
|
d6114e2bef | ||
|
|
5fdc55f3fb | ||
|
|
751b166536 | ||
|
|
6ffc8d97f4 | ||
|
|
67a80d6b83 | ||
|
|
934cf772bc | ||
|
|
b01a24afdb | ||
|
|
0ad75b52bf | ||
|
|
050772e78a | ||
|
|
7c05dc1420 | ||
|
|
bdd25ac727 | ||
|
|
3a27328828 | ||
|
|
c076a5620f | ||
|
|
2bd8ef9eed | ||
|
|
500014f2fc | ||
|
|
17687e9bcd | ||
|
|
90354e9fe7 | ||
|
|
6236631beb | ||
|
|
75aefdddd6 | ||
|
|
566d82e873 | ||
|
|
44ae0b654e | ||
|
|
d8cfaae596 | ||
|
|
a40e0f21ee | ||
|
|
ac1f506c98 | ||
|
|
68d5bdcf3d | ||
|
|
beb51f8c67 | ||
|
|
b881cb7111 | ||
|
|
d83bc59257 | ||
|
|
5be9f297de | ||
|
|
51d440431e | ||
|
|
7cf061122c | ||
|
|
1254368505 | ||
|
|
9d4b830c5f | ||
|
|
37401b4363 | ||
|
|
10fe08e14f | ||
|
|
0ecdb35d50 | ||
|
|
caee8fe9ef | ||
|
|
7d92c27b2d | ||
|
|
701eabbaba | ||
|
|
e74a1b2d1a | ||
|
|
e087b02333 | ||
|
|
eea7f902b5 | ||
|
|
db7583201b | ||
|
|
023001a8b1 | ||
|
|
4ff8ab2435 | ||
|
|
d2cccbfce6 | ||
|
|
970e6c400c | ||
|
|
b4cb7345a1 | ||
|
|
7e75d8c1a3 | ||
|
|
a4ea551160 | ||
|
|
f56ad447a0 | ||
|
|
7656422057 | ||
|
|
afa2231add | ||
|
|
21fe0a2006 | ||
|
|
23acd3cec6 | ||
|
|
7892f88a42 | ||
|
|
aae0e3bec7 | ||
|
|
0f8bf39421 | ||
|
|
36fd96cc6c | ||
|
|
3de08e9f3b | ||
|
|
3e739724b3 | ||
|
|
847e538c69 | ||
|
|
64684dd486 | ||
|
|
a229747249 | ||
|
|
d1b59c3543 | ||
|
|
b241441e37 | ||
|
|
40bfa25b1b | ||
|
|
c5a4386c1d | ||
|
|
b3aa3be4b8 | ||
|
|
528aefcc1e | ||
|
|
620ee2b7e4 | ||
|
|
d55acc246a | ||
|
|
2a59db3029 | ||
|
|
990dec0fec | ||
|
|
162b17b249 | ||
|
|
e0aea30618 | ||
|
|
49cba94178 | ||
|
|
7dd87815f3 | ||
|
|
f6fdde816f | ||
|
|
4c8c6ff236 | ||
|
|
46b615a963 | ||
|
|
8e293dd633 | ||
|
|
e040753b27 | ||
|
|
463aaf094d | ||
|
|
bf867b028d | ||
|
|
6dfefc2fe4 | ||
|
|
9ba8a8454c | ||
|
|
9c72839bfa | ||
|
|
2e24c92799 | ||
|
|
fa98c8aeeb | ||
|
|
f92e3496b1 | ||
|
|
0ceea76aa4 | ||
|
|
897d11a1e1 | ||
|
|
8ed59fcdd3 | ||
|
|
7f211cc7fc | ||
|
|
c511147c7c | ||
|
|
2f7f965188 | ||
|
|
24da26e7cf | ||
|
|
f8f9d656e8 | ||
|
|
b357f3055d | ||
|
|
f9c1f519f4 | ||
|
|
057f9f7045 | ||
|
|
58ec38437d | ||
|
|
2964bf50e0 | ||
|
|
c9572c352a | ||
|
|
b69f176143 | ||
|
|
484dcd5dc1 | ||
|
|
a3412113b7 | ||
|
|
693043bc27 | ||
|
|
82a5bafb42 | ||
|
|
1c8c4c6f72 | ||
|
|
28a2e354d3 | ||
|
|
c89e478fc1 | ||
|
|
7e29a24ea6 | ||
|
|
5fc9b7d36d | ||
|
|
a211c648ed | ||
|
|
c24d8de960 | ||
|
|
34f6e52335 | ||
|
|
77348ea71e | ||
|
|
a1273d1c9e | ||
|
|
4e6e51af9c | ||
|
|
a6366eaff6 | ||
|
|
1403cf47b2 | ||
|
|
6a5a964b55 | ||
|
|
1c40d693c1 | ||
|
|
9cff4ca2c3 | ||
|
|
d1f675bd46 | ||
|
|
cce292f639 | ||
|
|
adbf2d9c31 | ||
|
|
06e94a1f6f | ||
|
|
92e396830a | ||
|
|
f4df1dfe41 | ||
|
|
be3bc4273d | ||
|
|
b12ed4127e | ||
|
|
b6311d5897 | ||
|
|
cb40985b0e | ||
|
|
7ace8b7103 | ||
|
|
aea17f0c6f | ||
|
|
5d56eeb871 | ||
|
|
f3cb60f707 | ||
|
|
1e57be0710 | ||
|
|
ee8e4bfb20 | ||
|
|
7355182586 | ||
|
|
e0683d51fa | ||
|
|
1f1d5ca8bf | ||
|
|
4dfd11ad8e | ||
|
|
d46e106dba | ||
|
|
cd7eabb6b6 | ||
|
|
bfedde6a4d | ||
|
|
ece00674b6 | ||
|
|
aa51f9005a | ||
|
|
836d0dd6ec | ||
|
|
1947813f04 | ||
|
|
9a1eeb6fca | ||
|
|
ca8f347e3a | ||
|
|
51146f5baf | ||
|
|
f2bd36b4f9 | ||
|
|
818018ce42 | ||
|
|
89114179da | ||
|
|
d50c72f2c3 | ||
|
|
ce241e7690 | ||
|
|
b72cbfb708 | ||
|
|
ef7b60225d | ||
|
|
b3718d9378 | ||
|
|
c8c56bcdb1 | ||
|
|
a84b9273b2 | ||
|
|
3d67ad16ff | ||
|
|
dd5d4491e2 | ||
|
|
7dd1199ce0 | ||
|
|
ee7b64ff3a | ||
|
|
6efe7d04bc | ||
|
|
147c703cce | ||
|
|
3aa92c3f27 | ||
|
|
d567b5f2fc | ||
|
|
c336353020 | ||
|
|
523b9de1e0 | ||
|
|
93d295ac5c | ||
|
|
8430de13c2 | ||
|
|
372a674625 | ||
|
|
fafeadb7ba | ||
|
|
966b1e763f | ||
|
|
bb60e1a5fe | ||
|
|
cac9f807cc | ||
|
|
a0b1254820 | ||
|
|
0faff4132b | ||
|
|
1793a1287d | ||
|
|
5b572239c1 | ||
|
|
f6a66d937e | ||
|
|
2cf9a2f489 | ||
|
|
454f4dcc61 | ||
|
|
6e1065fde2 | ||
|
|
80ce06b20c | ||
|
|
99f3ab8b64 | ||
|
|
ca4f6d2491 | ||
|
|
2ceb2a78aa | ||
|
|
d97da21afc | ||
|
|
03b5a0c0bf | ||
|
|
f76abe3372 | ||
|
|
cdd43b74ae | ||
|
|
fa633d0e02 | ||
|
|
9b46e60c09 | ||
|
|
58eef7f394 | ||
|
|
e97e0fbb64 | ||
|
|
b82876fd82 | ||
|
|
02ad32ec22 | ||
|
|
433fe35c93 | ||
|
|
90c59d6ae2 | ||
|
|
33672c3d78 | ||
|
|
59ae7a989a | ||
|
|
5767e9e8c2 | ||
|
|
e62b9e8ed9 | ||
|
|
59597ccd17 | ||
|
|
7be49c66ef | ||
|
|
1380e25ef3 | ||
|
|
e825ce746f | ||
|
|
4e58951808 | ||
|
|
fbd805aad7 | ||
|
|
2a2705c6e3 | ||
|
|
986c957183 | ||
|
|
c5d063e876 | ||
|
|
500c36f5d4 | ||
|
|
69dbbeac44 | ||
|
|
69486c3adb | ||
|
|
e6692bb79b | ||
|
|
94fba1d7af | ||
|
|
223d8f4774 | ||
|
|
42e7a7e4e3 | ||
|
|
6716fdd49b | ||
|
|
3b69092fd8 | ||
|
|
aa8eaedbc8 | ||
|
|
f519ed373f | ||
|
|
851dff4b03 | ||
|
|
c5ebaa11ea | ||
|
|
934fbc8992 | ||
|
|
72cb5515fd | ||
|
|
c7f0770d53 | ||
|
|
7ea49e8ada | ||
|
|
cae6ce96b3 | ||
|
|
3699dfd756 | ||
|
|
6dca96d877 | ||
|
|
88c14b27a2 | ||
|
|
0d2a9539f6 | ||
|
|
bae160bd7c | ||
|
|
92852ecff2 | ||
|
|
ac0c841cb8 | ||
|
|
53e4b71f89 | ||
|
|
017a2692ca | ||
|
|
311f89eecb | ||
|
|
40d2bc4743 | ||
|
|
37160cbc8b | ||
|
|
3807a2b018 | ||
|
|
b6697dd432 | ||
|
|
6c33496e8a | ||
|
|
89f32625ed | ||
|
|
8253e76ec0 | ||
|
|
e0b3e9606a | ||
|
|
dc75a303f7 | ||
|
|
c1eb8ec78c | ||
|
|
12435f25fd | ||
|
|
d4dc5222cf | ||
|
|
bf1e59b2d3 | ||
|
|
3657e4a36e | ||
|
|
09efc1d865 | ||
|
|
22bded50b6 | ||
|
|
b5b02be3c2 | ||
|
|
776f372eb3 | ||
|
|
81279fd40b | ||
|
|
3342485d29 | ||
|
|
028ee848f5 | ||
|
|
7e64c3b8a9 | ||
|
|
704031f7b2 | ||
|
|
5e3c184735 | ||
|
|
88a8022787 | ||
|
|
96844dc4a5 | ||
|
|
a09acd6969 | ||
|
|
4e232f78de | ||
|
|
b146a04772 | ||
|
|
eaaa50e616 | ||
|
|
c893eaeb7a | ||
|
|
5bf7d7fd07 | ||
|
|
ca8fc92b94 | ||
|
|
9956e85f12 | ||
|
|
7fa4739c78 | ||
|
|
0ef2e2a7ec | ||
|
|
8fd1752acf | ||
|
|
14a1446faf | ||
|
|
0c2c8c5ae5 | ||
|
|
511b27ad39 | ||
|
|
e22ce7da0a | ||
|
|
d9a4ce06bc | ||
|
|
77fb14cc60 | ||
|
|
17c397211e | ||
|
|
6ca83644bc | ||
|
|
d1946ea9b6 | ||
|
|
cc9eae3b71 | ||
|
|
7bbc17df4b | ||
|
|
df6b2be482 | ||
|
|
5ff6263fb7 | ||
|
|
04dc8aaf73 | ||
|
|
5435805e58 | ||
|
|
903f819c5d | ||
|
|
5d927b2d25 | ||
|
|
b7a260cc6d | ||
|
|
e8ba8fb97b | ||
|
|
dd1d9d856b | ||
|
|
eef4c65e5f | ||
|
|
3f64594a22 | ||
|
|
3f5f71f8ab | ||
|
|
2a44179898 | ||
|
|
4a6ddf8b1d | ||
|
|
eeb1b2442c | ||
|
|
129f234aaa | ||
|
|
331c352e2b | ||
|
|
2ccbaea9dd | ||
|
|
069eca3c62 | ||
|
|
305e364f8b | ||
|
|
4068805ae0 | ||
|
|
9a1e7a4a7a | ||
|
|
bbad3d1b96 | ||
|
|
c62116d9a4 | ||
|
|
c94086ff21 | ||
|
|
e99caa7b97 | ||
|
|
658b9e9007 | ||
|
|
3ef27ae45c | ||
|
|
e669cd1152 | ||
|
|
b22aa7c0cf | ||
|
|
582cbb61fb | ||
|
|
7f4197cf43 | ||
|
|
30889db487 | ||
|
|
2d08d5d23e | ||
|
|
59e7367e03 | ||
|
|
84af278e86 | ||
|
|
67d9ee39e2 | ||
|
|
6c67bb81f7 | ||
|
|
aba19701c0 | ||
|
|
bb79402999 | ||
|
|
420bc4b244 | ||
|
|
323c3d74cb | ||
|
|
4ecec8a8f6 | ||
|
|
98883f9978 | ||
|
|
37cf3be437 | ||
|
|
62e3949c65 | ||
|
|
c191861639 | ||
|
|
c820509c29 | ||
|
|
199f98153f | ||
|
|
a64b96f87b | ||
|
|
f179864986 | ||
|
|
73af1b3d91 | ||
|
|
56afa1b464 | ||
|
|
0e0f453e4e | ||
|
|
78d25d97fb | ||
|
|
d6ce0e4c23 | ||
|
|
434de228cc | ||
|
|
d75b0c9578 | ||
|
|
16e24e8464 | ||
|
|
8365d7c4de | ||
|
|
a958492256 | ||
|
|
6285ac589d | ||
|
|
2ac87b0144 | ||
|
|
21fd1761ae | ||
|
|
3664a2da8b | ||
|
|
8a6f3c61bb | ||
|
|
f5f7dd9e8a | ||
|
|
b0ad5238f7 | ||
|
|
774e0a0ebb | ||
|
|
ec7a258b37 | ||
|
|
5fbe136485 | ||
|
|
e6c56a69ce | ||
|
|
d93c76d5e6 | ||
|
|
e0814d6ed5 | ||
|
|
5e6a241baa | ||
|
|
8cbebc936e | ||
|
|
90f7f8620c | ||
|
|
59bbe7e0c9 | ||
|
|
151b66a3f9 | ||
|
|
d9f3367a77 | ||
|
|
f3f6880632 | ||
|
|
59335cdd81 | ||
|
|
a93c09a794 | ||
|
|
b60768a8b3 | ||
|
|
da96ead170 | ||
|
|
45f7dc126c | ||
|
|
7d41511564 | ||
|
|
a4e184007d | ||
|
|
2055eb32b8 | ||
|
|
3ae3cbf34b | ||
|
|
56d4a75d39 | ||
|
|
c86a9217c4 | ||
|
|
dc7c6166e3 | ||
|
|
25facf4934 | ||
|
|
7f0ce26472 | ||
|
|
031067869a | ||
|
|
2e30bbef7e | ||
|
|
13d04a069e | ||
|
|
26b3d36101 | ||
|
|
3db861fcc4 | ||
|
|
df580d4873 | ||
|
|
78567ff89b | ||
|
|
605a9f68e7 | ||
|
|
4e4bc98194 | ||
|
|
3efa988f5e | ||
|
|
d3366403fe | ||
|
|
5860645cdb | ||
|
|
3ff2004929 | ||
|
|
9a38260a2b | ||
|
|
96fca45a41 | ||
|
|
cb106185cb | ||
|
|
cd6d98b314 | ||
|
|
0aa8fa09cb | ||
|
|
d71f74fa54 | ||
|
|
47ce713a86 | ||
|
|
3c5b94855a | ||
|
|
0fb6c77dec | ||
|
|
8da0534d4f | ||
|
|
79e0792a57 | ||
|
|
3e5ddad5ca | ||
|
|
92cff5c947 | ||
|
|
4f8cf6793b | ||
|
|
2877563064 | ||
|
|
dea74233c6 | ||
|
|
4fbd75f384 | ||
|
|
21bd8297e0 | ||
|
|
188150da26 | ||
|
|
83d50374ff | ||
|
|
2b3d4cd449 | ||
|
|
0ef680484d | ||
|
|
54ee476f91 | ||
|
|
4d81ee8c87 | ||
|
|
33cd5d6c1d | ||
|
|
24525ec768 | ||
|
|
482ca7a8a6 | ||
|
|
e8c81fbd81 | ||
|
|
6322be2bf7 | ||
|
|
88a0fb2009 | ||
|
|
ba007f89ff | ||
|
|
00129ea452 | ||
|
|
924b0ff427 | ||
|
|
70571d10c1 | ||
|
|
aee22a3d38 | ||
|
|
81162c0ccf | ||
|
|
69e7c57975 | ||
|
|
4e796ca952 | ||
|
|
518d0313f7 | ||
|
|
6ea080d48b | ||
|
|
748e34757e | ||
|
|
c93c458cd4 | ||
|
|
3c10787621 | ||
|
|
f60a9f0c58 | ||
|
|
544d26dea9 | ||
|
|
9244e43ccf | ||
|
|
d44b147684 | ||
|
|
bb5fbc28a0 | ||
|
|
3a501a0c08 | ||
|
|
1fe5dbd7cd | ||
|
|
7a97a40039 | ||
|
|
cda6a2cbb6 | ||
|
|
50a87c4965 | ||
|
|
f6552c48d6 | ||
|
|
577cd76ae6 | ||
|
|
bed4efeef0 | ||
|
|
53f0adb88a | ||
|
|
61c82890c1 | ||
|
|
176a750ece | ||
|
|
88cdcdf979 | ||
|
|
bf12602aca | ||
|
|
bafb14526d | ||
|
|
778b77e829 | ||
|
|
91a1a4828a | ||
|
|
5a187b97ab | ||
|
|
d78cd371ed | ||
|
|
a720d5b181 | ||
|
|
dd50eae762 | ||
|
|
4ceb4c8984 | ||
|
|
f9c262f4bb | ||
|
|
57d9c6e39b | ||
|
|
e45e403bb3 | ||
|
|
2fe38b1527 | ||
|
|
f6a38717f2 | ||
|
|
31c0ac8a54 | ||
|
|
3774792740 | ||
|
|
a9b3ee96cd | ||
|
|
b6946e2f15 | ||
|
|
a4ad8c64e6 | ||
|
|
29d18dccb2 | ||
|
|
89057232eb | ||
|
|
8a2d3d0c2c | ||
|
|
a01c210bf0 | ||
|
|
53515e6142 | ||
|
|
2aeab737d9 | ||
|
|
64caeeb115 | ||
|
|
e5e33549f8 | ||
|
|
d812b18d52 | ||
|
|
d7ef4b533f | ||
|
|
a5e857df7b | ||
|
|
c3001fe708 | ||
|
|
8309ec6327 | ||
|
|
921a54ed22 | ||
|
|
c82350dca6 | ||
|
|
7e3a5a7e2c | ||
|
|
ada83ccb63 | ||
|
|
a4220a0e7d | ||
|
|
92be615c3c | ||
|
|
847dace212 | ||
|
|
5a43516354 | ||
|
|
868d4522db | ||
|
|
4d0c638688 | ||
|
|
0080c456d8 | ||
|
|
cd36a835eb | ||
|
|
01b9913204 | ||
|
|
d58a189265 | ||
|
|
9f9ce09acc | ||
|
|
8e1ca16d38 | ||
|
|
9291efcfc3 | ||
|
|
6d4a552c96 | ||
|
|
350d63eacd | ||
|
|
a7d4ce8c3f | ||
|
|
a4fdc8561c | ||
|
|
08fff2a145 | ||
|
|
6b4b73ee94 | ||
|
|
98d511b03c | ||
|
|
ad5aa576f3 | ||
|
|
855940c6fc | ||
|
|
ac794e704d | ||
|
|
09e663d86e | ||
|
|
20ee6752ad | ||
|
|
586e76f930 | ||
|
|
27730b4568 | ||
|
|
00c792297a | ||
|
|
ee80ea59f4 | ||
|
|
d355e9e202 | ||
|
|
8289c159c5 | ||
|
|
d11f8e4ebf | ||
|
|
43bf805392 | ||
|
|
e57cf657fe | ||
|
|
020f9d8da5 | ||
|
|
a40f0b6d65 | ||
|
|
69f81e0ab9 | ||
|
|
37a3fb0497 | ||
|
|
1a9958c71e | ||
|
|
6688935436 | ||
|
|
0541ac8284 | ||
|
|
cf4eebbc95 | ||
|
|
3383798bf1 | ||
|
|
aba51841a2 | ||
|
|
1712405cd3 | ||
|
|
27186a377e | ||
|
|
f5fca3a0fb | ||
|
|
4b75f20f9b | ||
|
|
64fe29bfea | ||
|
|
eea09ca6cc | ||
|
|
f7919230fc | ||
|
|
5e092cde57 | ||
|
|
96bb51f266 | ||
|
|
ad8b141c1c | ||
|
|
9b23d61720 | ||
|
|
d993650a84 | ||
|
|
f0dbb33fd1 | ||
|
|
b22b3787ff | ||
|
|
e700ad78ee | ||
|
|
85ccf59a08 | ||
|
|
094277cb2e | ||
|
|
e5c7e2d8f0 | ||
|
|
3ee7babf4a | ||
|
|
e630eaebcd | ||
|
|
493e972720 | ||
|
|
e008b6e1cb | ||
|
|
c739d564a9 | ||
|
|
dd6dbbfc9b | ||
|
|
498615b6b3 | ||
|
|
491da80c90 | ||
|
|
7ceeaf9a6a | ||
|
|
d6e09b098e | ||
|
|
9056ba54c3 | ||
|
|
964d5b3238 | ||
|
|
8c035be63f | ||
|
|
6c264fe243 | ||
|
|
1380c9fb2c | ||
|
|
9827f1cb69 | ||
|
|
8fe220c330 | ||
|
|
9b5b360465 | ||
|
|
a8d4b7826f | ||
|
|
593bcb1025 | ||
|
|
ece9f46798 | ||
|
|
e245b2fd90 | ||
|
|
ba6ddc380d | ||
|
|
402ec684eb | ||
|
|
8b8af21445 | ||
|
|
1ead4f2e2c | ||
|
|
43047cfa24 | ||
|
|
33dc9a5767 | ||
|
|
8bf7ed52c4 | ||
|
|
a495b19793 | ||
|
|
42b24b4904 | ||
|
|
10347279ba | ||
|
|
a31c29fc13 | ||
|
|
9d110bd1c9 | ||
|
|
de7c0aec39 | ||
|
|
6232078ad3 | ||
|
|
418d550f2a | ||
|
|
81b0e995e1 | ||
|
|
22fd52c8db | ||
|
|
6a20529b89 | ||
|
|
1988f820bf | ||
|
|
0bafb6286a | ||
|
|
80ebd659fc | ||
|
|
2d16c36f8d | ||
|
|
ca1930cb44 | ||
|
|
91b4e7a308 | ||
|
|
4fac67f39e | ||
|
|
7c4ab3989a | ||
|
|
2c6faa5eab | ||
|
|
2707149352 | ||
|
|
2834c188e7 | ||
|
|
0f31bc1f68 | ||
|
|
6f3ff2abf0 | ||
|
|
3398e6da27 | ||
|
|
22f7d69a7e | ||
|
|
cb76d02dcc | ||
|
|
49d5802e3d | ||
|
|
38164f980b | ||
|
|
1cff0342e8 | ||
|
|
b6117e4a63 | ||
|
|
48c6510135 | ||
|
|
4e505f40f7 | ||
|
|
a3fe672b2a | ||
|
|
e029e875d8 | ||
|
|
ef6e6c8d0d | ||
|
|
4a4e9764de | ||
|
|
4260b6c390 | ||
|
|
d47591ccda | ||
|
|
6e5915a664 | ||
|
|
a1631dfd9f | ||
|
|
db15047cc1 | ||
|
|
ba8c641c58 | ||
|
|
3d17f3b38b | ||
|
|
5ca3cae9e8 | ||
|
|
97d3413621 | ||
|
|
bddab3c5d1 | ||
|
|
14aaf3b375 | ||
|
|
ecaee451c8 | ||
|
|
a43d6f9792 | ||
|
|
78aea6ab13 | ||
|
|
3fa104a531 | ||
|
|
864c937de1 | ||
|
|
8114ede173 | ||
|
|
7294f8f2e1 | ||
|
|
f53feed8f5 | ||
|
|
18dc7cb3f4 | ||
|
|
5d8b27ebbe | ||
|
|
8a347d0a7a | ||
|
|
4e884fb59d | ||
|
|
1bf4af7269 | ||
|
|
e383c2c4d6 | ||
|
|
8fce8bb75d | ||
|
|
ee158a7862 | ||
|
|
c80a5b6f9d | ||
|
|
97763ce5e8 | ||
|
|
f5f0c9eccd | ||
|
|
2822c314eb | ||
|
|
2f170dbd45 | ||
|
|
b5ed4c48ed | ||
|
|
672cd5efbb | ||
|
|
37d410c6cf | ||
|
|
d270a07e2a | ||
|
|
1f66976beb | ||
|
|
ff601a4c70 | ||
|
|
73d23126f5 | ||
|
|
5a1b6e6569 | ||
|
|
f8f5a554e1 | ||
|
|
b93e8edb83 | ||
|
|
4fe1a3831d | ||
|
|
2be128639c | ||
|
|
8557c4baf0 | ||
|
|
037283ed07 | ||
|
|
122a83e556 | ||
|
|
c13fc9d406 | ||
|
|
4595449561 | ||
|
|
fb474e5a5f | ||
|
|
582fb18c22 | ||
|
|
26c4f91c58 | ||
|
|
aa1d41f89c | ||
|
|
a23ad79c99 | ||
|
|
18f3c50003 | ||
|
|
28a478311c | ||
|
|
01d380a7e7 | ||
|
|
276860aead | ||
|
|
2ccbaba654 | ||
|
|
737aa45a81 | ||
|
|
e39dfdd329 | ||
|
|
71f6711ab4 | ||
|
|
4849381e60 | ||
|
|
1dcd5a7e4e | ||
|
|
8e4d7d769e | ||
|
|
56fabb8b87 | ||
|
|
c4bd356fc7 | ||
|
|
97ec2d1011 | ||
|
|
35e9bb4e5e | ||
|
|
5a0ff896a2 | ||
|
|
03915685eb | ||
|
|
0dae0401ee | ||
|
|
b706a526a4 | ||
|
|
071c523dd6 | ||
|
|
8de99d13f5 | ||
|
|
db9ed9ea54 | ||
|
|
defb2f1776 | ||
|
|
de560ea31a | ||
|
|
f90179761f | ||
|
|
e35ce0591f | ||
|
|
5ccf7013fe | ||
|
|
74d2a7da58 | ||
|
|
691e9ea1ee | ||
|
|
3ea00009aa | ||
|
|
10af9ce5c5 | ||
|
|
d4fbbd6dfe | ||
|
|
9994fc0824 | ||
|
|
c7beaaab94 | ||
|
|
ba02d56a4e | ||
|
|
e03d16462f | ||
|
|
0547a82a5c | ||
|
|
16c2946e32 | ||
|
|
ce4d9d21d6 | ||
|
|
479f224240 | ||
|
|
b8abd8e6b2 | ||
|
|
6748053233 | ||
|
|
3cc3b17b1d | ||
|
|
1d525023df | ||
|
|
be1ebdbdd3 | ||
|
|
90aae568c5 | ||
|
|
c311ecbc07 | ||
|
|
1a676c0203 | ||
|
|
692a08c134 | ||
|
|
321ee681c5 | ||
|
|
8847783063 | ||
|
|
9c0cf1eb9e | ||
|
|
688d50b662 | ||
|
|
4039ae9772 | ||
|
|
88842d5a54 | ||
|
|
44d02b78ac | ||
|
|
c3d5a7b8ff | ||
|
|
403d24d934 | ||
|
|
943fe8989b | ||
|
|
893fe29514 | ||
|
|
568559daa5 | ||
|
|
9e713e0565 | ||
|
|
583b566133 | ||
|
|
4f639e608b | ||
|
|
70c2c42416 | ||
|
|
ec56091f98 | ||
|
|
4325aa9eb4 | ||
|
|
e01549a978 | ||
|
|
2d855391b6 | ||
|
|
feb88e5aa3 | ||
|
|
257a8e7be1 | ||
|
|
f0473e9155 | ||
|
|
e0a3a39faa | ||
|
|
c24afe3714 | ||
|
|
705fdfba38 | ||
|
|
210d4f9d5c | ||
|
|
8396f17c40 | ||
|
|
cc22b4a005 | ||
|
|
f8cbe364be | ||
|
|
242be8da28 | ||
|
|
67157c5a92 | ||
|
|
f3764abd19 | ||
|
|
5a49c41b20 | ||
|
|
810e27c08d | ||
|
|
37e3c6132c | ||
|
|
4a6e565027 | ||
|
|
03f45f5d3e | ||
|
|
0c5bae6f37 | ||
|
|
f9f29485ad | ||
|
|
9033bcddfe | ||
|
|
f1873c51d2 | ||
|
|
af3594e106 | ||
|
|
3e8a8ac79f | ||
|
|
bc7153883d | ||
|
|
92826db86b | ||
|
|
9ea2216d4a | ||
|
|
df6eb070d8 | ||
|
|
632d7b0651 | ||
|
|
fd3c110c02 | ||
|
|
6c8dc90267 | ||
|
|
3f57d1381e | ||
|
|
02b3c5f535 | ||
|
|
4e11f7f064 | ||
|
|
52d214f1ff | ||
|
|
3a0b5c33cd | ||
|
|
809356afed | ||
|
|
1b01015a8c | ||
|
|
ef2d75394a | ||
|
|
c0c4a7f254 | ||
|
|
121343e1dd | ||
|
|
a4294cfe84 | ||
|
|
c86e750883 | ||
|
|
75dd772811 | ||
|
|
f4849cd55e | ||
|
|
ce7d75d6b2 | ||
|
|
720aee7250 | ||
|
|
47ca5f3072 | ||
|
|
0ce633a1ea | ||
|
|
93d0019153 | ||
|
|
f89417c06c | ||
|
|
6344a08c91 | ||
|
|
a981c711b6 | ||
|
|
3b250af6d6 | ||
|
|
70de080be7 | ||
|
|
f629787d04 | ||
|
|
e20ba6e741 | ||
|
|
00d30d2ddc | ||
|
|
9921d282d3 | ||
|
|
b70678a8a9 | ||
|
|
3fc9051268 | ||
|
|
436c7fe0ad | ||
|
|
7c837caef9 | ||
|
|
fbe751e348 | ||
|
|
dc95b8584d | ||
|
|
4e715bc408 | ||
|
|
9093fcebcd | ||
|
|
d6e1508ffc | ||
|
|
02b59926d5 | ||
|
|
a78770c11e | ||
|
|
d3d72f0bb3 | ||
|
|
09aa8400ab | ||
|
|
41cea25bb0 | ||
|
|
6f386e7ca2 | ||
|
|
ae2dfd41d2 | ||
|
|
473eae1c65 | ||
|
|
b0ab91d794 | ||
|
|
d059597a63 | ||
|
|
8ee47fbc90 | ||
|
|
8d33b2c866 | ||
|
|
0e2d23f01c | ||
|
|
d8d51b7128 | ||
|
|
2fea26772d | ||
|
|
d430953d1e | ||
|
|
f099496aba | ||
|
|
78ac52c3b4 | ||
|
|
60ea982ed8 | ||
|
|
dc80b099bf | ||
|
|
f40e0a8ff9 | ||
|
|
9341136f16 | ||
|
|
d1261dd0a5 | ||
|
|
7486b6fb60 | ||
|
|
6e3993ecf8 | ||
|
|
81c5c15437 | ||
|
|
d66bf78e23 | ||
|
|
48786382ec | ||
|
|
4440bb3741 | ||
|
|
ef7ead405c | ||
|
|
c61c90a224 | ||
|
|
bb222b2466 | ||
|
|
1a0cc26f69 | ||
|
|
f95cdb30a1 | ||
|
|
8308b2a4f3 | ||
|
|
c89a19ab84 | ||
|
|
8eaebdee4e | ||
|
|
07041e1b7b | ||
|
|
f0c97a33d9 | ||
|
|
424ad79c36 | ||
|
|
c51f902a0c | ||
|
|
9a5d097f57 | ||
|
|
3b9e5b91b1 | ||
|
|
19c74080b8 | ||
|
|
a5dd13912c | ||
|
|
046fb8c38e | ||
|
|
16acc6c424 | ||
|
|
9b74c2db3e | ||
|
|
c462c27751 | ||
|
|
ba33cd9106 | ||
|
|
e26f31babd | ||
|
|
618bcf236c | ||
|
|
1264b33b49 | ||
|
|
101de40cc6 | ||
|
|
9e4dc9e0db | ||
|
|
d851a5b2d0 | ||
|
|
16fed01d72 | ||
|
|
3ad9b03066 | ||
|
|
f794c99462 | ||
|
|
9e79e06da9 | ||
|
|
45bf56671a | ||
|
|
937fb75eb2 | ||
|
|
5405828d4d | ||
|
|
5b16110d0b | ||
|
|
258d7a3feb | ||
|
|
2dd5cd3f63 | ||
|
|
7e92912972 | ||
|
|
bf2abe724f | ||
|
|
5d6e1e6210 | ||
|
|
ba9cae2d56 | ||
|
|
4b243346e8 | ||
|
|
a9fe32611f | ||
|
|
7d54ccc668 | ||
|
|
946e5cb78c | ||
|
|
402b9e3daa | ||
|
|
3c20c4b690 | ||
|
|
3ee1cf1eee | ||
|
|
d2931a540a | ||
|
|
9596a415bf | ||
|
|
4e1ebfc541 | ||
|
|
ca086e01c7 | ||
|
|
4dae0cd0d5 | ||
|
|
4dfacb63a1 | ||
|
|
531a2dc12c | ||
|
|
0e011570be | ||
|
|
e785d967bf | ||
|
|
55004d4a6a | ||
|
|
ac7ff6a4a7 | ||
|
|
d768b93441 | ||
|
|
ecf0df8c6e | ||
|
|
2da216d9ca | ||
|
|
9e512690ff | ||
|
|
ec25aae9ea | ||
|
|
4c96c2feef | ||
|
|
25eeafb6c3 | ||
|
|
da8801d236 | ||
|
|
60da071e7d | ||
|
|
80fe47ef79 | ||
|
|
c0e4ed05bf | ||
|
|
a300096620 | ||
|
|
c3281a6cbc | ||
|
|
fcf3f63796 | ||
|
|
a86c1d980b | ||
|
|
4f1e6c4a6f | ||
|
|
d0ffac21d3 | ||
|
|
721639ae6b | ||
|
|
0ade88209d | ||
|
|
553f299299 | ||
|
|
07dd59b017 | ||
|
|
869a48f392 | ||
|
|
5ffa933b7f | ||
|
|
e14681e6c4 | ||
|
|
48f790c60f | ||
|
|
df01e07f66 | ||
|
|
61bd0b7038 | ||
|
|
e8570dd47f | ||
|
|
4f549a1fa5 | ||
|
|
e160e4e578 | ||
|
|
2378b78c69 | ||
|
|
3b500bad64 | ||
|
|
ab81bbea68 | ||
|
|
1f2a0d6163 | ||
|
|
9b922c9f7d | ||
|
|
b1bce843d4 | ||
|
|
067bd9f75e | ||
|
|
b6213b17ae | ||
|
|
869375a6ac | ||
|
|
cb460beb86 | ||
|
|
6e8cc57b65 | ||
|
|
d18ae25c19 | ||
|
|
62176311c9 | ||
|
|
ae03014b87 | ||
|
|
6defc8eb31 | ||
|
|
6635e72598 | ||
|
|
0eacea6fcd | ||
|
|
fae3c2e1bd | ||
|
|
ed89a92f39 | ||
|
|
c4e2a63f76 | ||
|
|
0baa065fce | ||
|
|
075c1522f8 | ||
|
|
9c52309fb3 | ||
|
|
ebaa5dc70b | ||
|
|
5f9c5b1cf4 | ||
|
|
57f6895f92 | ||
|
|
fee4e23c11 | ||
|
|
adac5826bd | ||
|
|
e2885e2a00 | ||
|
|
6879e0e819 | ||
|
|
d3fd83c2ac | ||
|
|
da5c75c911 | ||
|
|
e6802d89aa | ||
|
|
731e36a393 | ||
|
|
e94b0dfa88 | ||
|
|
5cf6016d50 | ||
|
|
cde888ed2b | ||
|
|
fe07405971 | ||
|
|
c154d600fd | ||
|
|
25bdc3b5a8 | ||
|
|
71dce28494 | ||
|
|
cf39c76986 | ||
|
|
e779b8342d | ||
|
|
f229f09715 | ||
|
|
80d166ad0d | ||
|
|
2b7e21b31d | ||
|
|
c157e08179 | ||
|
|
96ff68a8a1 | ||
|
|
46fc00918e | ||
|
|
be98a38c9a | ||
|
|
59717b32a5 | ||
|
|
0ee868e009 | ||
|
|
075dea2b8f | ||
|
|
a6ab26f93c | ||
|
|
520d3e2a06 | ||
|
|
f3ed32e06b | ||
|
|
eded40049d | ||
|
|
56e1a37ae1 | ||
|
|
49d29b2a0d | ||
|
|
f330d2c7ed | ||
|
|
dbdc0ed52f | ||
|
|
fd59f931fa | ||
|
|
5139c1fa3f | ||
|
|
b78f61e03d | ||
|
|
42253cdb53 | ||
|
|
e4bcb809f3 | ||
|
|
3d2edff0d3 | ||
|
|
f93538cf1e | ||
|
|
69d5c480a1 | ||
|
|
550ce4ea2a | ||
|
|
57aa4dbce4 | ||
|
|
16b351de2e | ||
|
|
badd37e150 | ||
|
|
60de863a2c | ||
|
|
6272e1fba3 | ||
|
|
d717381df4 | ||
|
|
3fa28867bd | ||
|
|
e1058f0ab3 | ||
|
|
aa2913ea07 | ||
|
|
2f07212e20 | ||
|
|
43eeaa1abf | ||
|
|
164ae1fac1 | ||
|
|
6123df568c | ||
|
|
705cb5fed3 | ||
|
|
c5ce183705 | ||
|
|
2cf750b309 | ||
|
|
ac85a4f313 | ||
|
|
76904d1d13 | ||
|
|
bb110697a3 | ||
|
|
2d2f671681 | ||
|
|
ff7f6c5a19 | ||
|
|
e03d036131 | ||
|
|
5bb5f18b7e | ||
|
|
33b9c6b03c | ||
|
|
11e03c331a | ||
|
|
417901d048 | ||
|
|
fc7b267ccf | ||
|
|
5c78a80923 | ||
|
|
8f365cdd66 | ||
|
|
bff8c8d549 | ||
|
|
e189ab86be | ||
|
|
1563cc9b4f | ||
|
|
ec09c16e0a | ||
|
|
12d3a2057b | ||
|
|
fb7e0b9fb6 | ||
|
|
6d32834716 | ||
|
|
5121541af3 | ||
|
|
40514cd51c | ||
|
|
24e302ac06 | ||
|
|
8d3095ecf3 | ||
|
|
563b16e180 | ||
|
|
47a646f5f1 | ||
|
|
1d2dfcd686 | ||
|
|
dcb2508a0d | ||
|
|
2bb4c2e467 | ||
|
|
790a7c577e | ||
|
|
4d29f1a848 | ||
|
|
1a19e1df42 | ||
|
|
be5ba54a3f | ||
|
|
4eaa10f104 | ||
|
|
6001899745 | ||
|
|
87e2339b26 | ||
|
|
c1659eae06 | ||
|
|
edc397209c | ||
|
|
975def8281 | ||
|
|
d910135e84 | ||
|
|
186d1e452a | ||
|
|
68820cb76a | ||
|
|
2c725b0360 | ||
|
|
cb525d368d | ||
|
|
a62a60b5e6 | ||
|
|
d4382007d6 | ||
|
|
d27963dd32 | ||
|
|
a8839d1904 | ||
|
|
a7283efe8e | ||
|
|
c46e70ba8c | ||
|
|
72e0ec6af7 | ||
|
|
8873c3fe28 | ||
|
|
8c4d54e50b | ||
|
|
be926ae491 | ||
|
|
6547bb709e | ||
|
|
c9e88b6ca4 | ||
|
|
a94136c3a7 | ||
|
|
3672f3e925 | ||
|
|
9ccea637ab | ||
|
|
8b2efb6367 | ||
|
|
a5e3f0d65a | ||
|
|
cd5ca57ca3 | ||
|
|
fd59680b8e | ||
|
|
24a1561ddc | ||
|
|
64ae48dc93 | ||
|
|
09b366b273 | ||
|
|
cfee3bfff4 | ||
|
|
fca499925c | ||
|
|
d379ce1011 | ||
|
|
cb87e8f21c | ||
|
|
d4c90da151 | ||
|
|
722c0a8bc2 | ||
|
|
55585204b3 | ||
|
|
4156f465da | ||
|
|
90905d598b | ||
|
|
0e3f241389 | ||
|
|
83abedf811 | ||
|
|
94128271ed | ||
|
|
759442edac | ||
|
|
38c90e29ad | ||
|
|
83a853054c | ||
|
|
eb51f69c8a | ||
|
|
835679cd0c | ||
|
|
76bff85b7f | ||
|
|
861a193446 | ||
|
|
a4935c33b4 | ||
|
|
aa3919f870 | ||
|
|
0e18114d6d | ||
|
|
0e5a300a14 | ||
|
|
95a68395b9 | ||
|
|
6d7917c879 | ||
|
|
686b9aa92f | ||
|
|
381d5993e6 | ||
|
|
8475cde41b | ||
|
|
e82c550da8 | ||
|
|
baa1404771 | ||
|
|
9beb114ae5 | ||
|
|
1162463777 | ||
|
|
33356b3240 | ||
|
|
3b3faa21a1 | ||
|
|
776d89b70a | ||
|
|
afc2b0380a | ||
|
|
e4ba6040cc | ||
|
|
7d19db4686 | ||
|
|
0371874dbb | ||
|
|
6cbd61554a | ||
|
|
48a490790c | ||
|
|
b96b7fc3a7 | ||
|
|
dfdd002708 | ||
|
|
001c5f04b2 | ||
|
|
7ef2be299d | ||
|
|
9feb6ebff2 | ||
|
|
12a8aa8a40 | ||
|
|
ea18c2c7ce | ||
|
|
b721acb49e | ||
|
|
024a3d16db | ||
|
|
75e493332e | ||
|
|
ff0b772b62 | ||
|
|
eb746ae0f8 | ||
|
|
82eefe68e2 | ||
|
|
538e1e7b9c | ||
|
|
c12d2f4226 | ||
|
|
b4428d099b | ||
|
|
0acf907f47 | ||
|
|
d837756200 | ||
|
|
f54566725e | ||
|
|
ff34e3dfb1 | ||
|
|
0b7a726f08 | ||
|
|
b53aef6254 | ||
|
|
ba4612042c | ||
|
|
0d22fef2a0 | ||
|
|
6f6ff45062 | ||
|
|
8ba2ae634f | ||
|
|
fc1eae21ea | ||
|
|
454a15cb25 | ||
|
|
84b8b85f8d | ||
|
|
2a2a7a7bd9 | ||
|
|
addc237f7a | ||
|
|
034763218b |
@@ -63,9 +63,6 @@ jobs:
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Installing apt dependencies
|
||||
command: sudo apt install -y rsync
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
@@ -343,6 +340,10 @@ jobs:
|
||||
- run:
|
||||
name: Running Unit Tests
|
||||
command: yarn test-unit --clean false
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- packages/now-cli/.nyc_output
|
||||
|
||||
coverage:
|
||||
docker:
|
||||
@@ -352,12 +353,6 @@ jobs:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Compiling `now dev` HTML error templates
|
||||
command: node packages/now-cli/scripts/compile-templates.js
|
||||
- run:
|
||||
name: Run unit tests
|
||||
command: yarn workspace now run test-unit
|
||||
- run:
|
||||
name: Run coverage report
|
||||
command: yarn workspace now run coverage
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
node_modules
|
||||
dist
|
||||
examples
|
||||
|
||||
# gatsby-plugin-now
|
||||
packages/gatsby-plugin-now/test/fixtures
|
||||
|
||||
# now-build-utils
|
||||
packages/now-build-utils/test/fixtures
|
||||
|
||||
# now-cli
|
||||
packages/now-cli/@types
|
||||
packages/now-cli/download
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
{
|
||||
"root": true,
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2018,
|
||||
"sourceType": "module",
|
||||
"modules": true
|
||||
},
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"prettier",
|
||||
"prettier/@typescript-eslint"
|
||||
],
|
||||
"env": {
|
||||
"node": true,
|
||||
"jest": true,
|
||||
"es6": true
|
||||
},
|
||||
"rules": {
|
||||
"require-atomic-updates": 0,
|
||||
"@typescript-eslint/ban-ts-ignore": 0,
|
||||
"@typescript-eslint/camelcase": 0,
|
||||
"@typescript-eslint/explicit-function-return-type": 0,
|
||||
"@typescript-eslint/no-empty-function": 0,
|
||||
"@typescript-eslint/no-use-before-define": 0
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["**/*.js"],
|
||||
"rules": {
|
||||
"@typescript-eslint/no-var-requires": "off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["packages/now-cli/**/*"],
|
||||
"rules": {
|
||||
"lines-between-class-members": 0,
|
||||
"no-async-promise-executor": 0,
|
||||
"no-control-regex": 0,
|
||||
"no-empty": 0,
|
||||
"prefer-const": 0,
|
||||
"prefer-destructuring": 0,
|
||||
"@typescript-eslint/ban-types": 0,
|
||||
"@typescript-eslint/consistent-type-assertions": 0,
|
||||
"@typescript-eslint/member-delimiter-style": 0,
|
||||
"@typescript-eslint/no-empty-function": 0,
|
||||
"@typescript-eslint/no-explicit-any": 0,
|
||||
"@typescript-eslint/no-inferrable-types": 0,
|
||||
"@typescript-eslint/no-var-requires": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"files": ["packages/now-client/**/*"],
|
||||
"rules": {
|
||||
"prefer-const": 0,
|
||||
"require-atomic-updates": 0,
|
||||
"@typescript-eslint/ban-ts-ignore": 0,
|
||||
"@typescript-eslint/no-explicit-any": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
36
CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md
vendored
36
CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md
vendored
@@ -1,28 +1,28 @@
|
||||
## Code of Conduct
|
||||
|
||||
### Our Pledge
|
||||
### Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
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
|
||||
### Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
- Using welcoming and inclusive language
|
||||
- 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:
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
- The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
- 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
|
||||
@@ -31,44 +31,44 @@ include:
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
### Our Responsibilities
|
||||
### Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
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
|
||||
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
|
||||
### Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
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
|
||||
### Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at [abuse@zeit.co](mailto:abuse@zeit.co). All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and 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
|
||||
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
|
||||
### Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
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
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
node_modules
|
||||
package-lock.json
|
||||
dist
|
||||
.vscode
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
.nyc_output
|
||||
@@ -18,3 +19,7 @@ packages/now-cli/test/dev/fixtures/08-hugo/hugo
|
||||
packages/now-cli/test/dev/fixtures/**/dist
|
||||
packages/now-cli/test/dev/fixtures/**/public
|
||||
packages/now-cli/test/fixtures/integration
|
||||
test/lib/deployment/failed-page.txt
|
||||
.DS_Store
|
||||
.next
|
||||
public
|
||||
|
||||
17
.nowignore
Normal file
17
.nowignore
Normal file
@@ -0,0 +1,17 @@
|
||||
*
|
||||
|
||||
# general
|
||||
!utils/
|
||||
!utils/run.js
|
||||
!.yarnrc
|
||||
!yarn.lock
|
||||
!package.json
|
||||
|
||||
# api
|
||||
!api/
|
||||
!api/**
|
||||
|
||||
# packages
|
||||
!packages/
|
||||
!packages/frameworks
|
||||
!packages/frameworks/**
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5"
|
||||
}
|
||||
@@ -6,7 +6,7 @@ A Runtime is an npm module that exposes a `build` function and optionally an `an
|
||||
Official Runtimes are published to [npmjs.com](https://npmjs.com) as a package and referenced in the `use` property of the `now.json` configuration file.
|
||||
However, the `use` property will work with any [npm install argument](https://docs.npmjs.com/cli/install) such as a git repo url which is useful for testing your Runtime.
|
||||
|
||||
See the [Runtimes Documentation](https://zeit.co/docs/v2/advanced/runtimes) to view example usage.
|
||||
See the [Runtimes Documentation](https://zeit.co/docs/runtimes) to view example usage.
|
||||
|
||||
## Runtime Exports
|
||||
|
||||
@@ -14,7 +14,7 @@ See the [Runtimes Documentation](https://zeit.co/docs/v2/advanced/runtimes) to v
|
||||
|
||||
A **required** exported constant that decides which version of the Runtime API to use.
|
||||
|
||||
The latest and suggested version is `2`.
|
||||
The latest and suggested version is `3`.
|
||||
|
||||
### `analyze`
|
||||
|
||||
@@ -41,7 +41,7 @@ export analyze(options: AnalyzeOptions) {
|
||||
|
||||
### `build`
|
||||
|
||||
A **required** exported function that returns a [Files](#files) data structure that contains the Build outputs, which can be a [Static File](#file) or a [Serverless Function](#serverless-function).
|
||||
A **required** exported function that returns a [Serverless Function](#serverless-function).
|
||||
|
||||
What's a Serverless Function? Read about [Serverless Function concepts](https://zeit.co/docs/v2/deployments/concepts/lambdas) to learn more.
|
||||
|
||||
@@ -58,9 +58,9 @@ build({
|
||||
filesRemoved?: Array<String>
|
||||
}
|
||||
}) : {
|
||||
watch: Array<String>,
|
||||
output: Files output,
|
||||
routes: Object
|
||||
watch?: Array<String>,
|
||||
output: Lambda,
|
||||
routes?: Object
|
||||
}
|
||||
```
|
||||
|
||||
@@ -147,7 +147,7 @@ The exported functions [`analyze`](#analyze), [`build`](#build), and [`prepareCa
|
||||
|
||||
## Examples
|
||||
|
||||
Check out our [Node.js Runtime](https://github.com/zeit/now/tree/canary/packages/now-node), [Go Runtime](https://github.com/zeit/now/tree/canary/packages/now-go), [Python Runtime](https://github.com/zeit/now/tree/canary/packages/now-python) or [Ruby Runtime](https://github.com/zeit/now/tree/canary/packages/now-ruby) for examples of how to build one.
|
||||
Check out our [Node.js Runtime](https://github.com/zeit/now/tree/master/packages/now-node), [Go Runtime](https://github.com/zeit/now/tree/master/packages/now-go), [Python Runtime](https://github.com/zeit/now/tree/master/packages/now-python) or [Ruby Runtime](https://github.com/zeit/now/tree/master/packages/now-ruby) for examples of how to build one.
|
||||
|
||||
## Technical Details
|
||||
|
||||
@@ -180,8 +180,8 @@ When you publish your Runtime to npm, make sure to not specify `@now/build-utils
|
||||
### `Files`
|
||||
|
||||
```ts
|
||||
import { File } from '@now/build-utils'
|
||||
type Files = { [filePath: string]: File }
|
||||
import { File } from '@now/build-utils';
|
||||
type Files = { [filePath: string]: File };
|
||||
```
|
||||
|
||||
This is an abstract type that is implemented as a plain [JavaScript Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object). It's helpful to think of it as a virtual filesystem representation.
|
||||
@@ -202,7 +202,7 @@ An example of a valid output `Files` object is:
|
||||
This is an abstract type that can be imported if you are using TypeScript.
|
||||
|
||||
```ts
|
||||
import { File } from '@now/build-utils'
|
||||
import { File } from '@now/build-utils';
|
||||
```
|
||||
|
||||
Valid `File` types include:
|
||||
@@ -214,7 +214,7 @@ Valid `File` types include:
|
||||
### `FileRef`
|
||||
|
||||
```ts
|
||||
import { FileRef } from '@now/build-utils'
|
||||
import { FileRef } from '@now/build-utils';
|
||||
```
|
||||
|
||||
This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) that represents an abstract file instance stored in our platform, based on the file identifier string (its checksum). When a `Files` object is passed as an input to `analyze` or `build`, all its values will be instances of `FileRef`.
|
||||
@@ -231,7 +231,7 @@ This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaSc
|
||||
### `FileFsRef`
|
||||
|
||||
```ts
|
||||
import { FileFsRef } from '@now/build-utils'
|
||||
import { FileFsRef } from '@now/build-utils';
|
||||
```
|
||||
|
||||
This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) that represents an abstract instance of a file present in the filesystem that the build process is executing in.
|
||||
@@ -249,7 +249,7 @@ This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaSc
|
||||
### `FileBlob`
|
||||
|
||||
```ts
|
||||
import { FileBlob } from '@now/build-utils'
|
||||
import { FileBlob } from '@now/build-utils';
|
||||
```
|
||||
|
||||
This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) that represents an abstract instance of a file present in memory.
|
||||
@@ -267,10 +267,10 @@ This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaSc
|
||||
### `Lambda`
|
||||
|
||||
```ts
|
||||
import { Lambda } from '@now/build-utils'
|
||||
import { Lambda } from '@now/build-utils';
|
||||
```
|
||||
|
||||
This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), called a Serverless Function, that can be created by supplying `files`, `handler`, `runtime`, and `environment` as an object to the [`createLambda`](#createlambda) helper. The instances of this class should not be created directly. Instead use a call to [`createLambda`](#createlambda).
|
||||
This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), called a Serverless Function, that can be created by supplying `files`, `handler`, `runtime`, and `environment` as an object to the [`createLambda`](#createlambda) helper. The instances of this class should not be created directly. Instead, invoke the [`createLambda`](#createlambda) helper function.
|
||||
|
||||
**Properties:**
|
||||
|
||||
@@ -283,15 +283,15 @@ This is a [JavaScript class](https://developer.mozilla.org/en-US/docs/Web/JavaSc
|
||||
|
||||
This is an abstract enumeration type that is implemented by one of the following possible `String` values:
|
||||
|
||||
- `nodejs12.x`
|
||||
- `nodejs10.x`
|
||||
- `nodejs8.10`
|
||||
- `go1.x`
|
||||
- `java-1.8.0-openjdk`
|
||||
- `java11`
|
||||
- `python3.8`
|
||||
- `python3.6`
|
||||
- `python2.7`
|
||||
- `dotnetcore2.1`
|
||||
- `dotnetcore2.0`
|
||||
- `dotnetcore1.0`
|
||||
- `ruby2.5`
|
||||
- `provided`
|
||||
|
||||
## JavaScript API
|
||||
|
||||
@@ -302,20 +302,20 @@ The following is exposed by `@now/build-utils` to simplify the process of writin
|
||||
Signature: `createLambda(Object spec) : Lambda`
|
||||
|
||||
```ts
|
||||
import { createLambda } from '@now/build-utils'
|
||||
import { createLambda } from '@now/build-utils';
|
||||
```
|
||||
|
||||
Constructor for the [`Lambda`](#lambda) type.
|
||||
|
||||
```js
|
||||
const { createLambda, FileBlob } = require('@now/build-utils')
|
||||
const { createLambda, FileBlob } = require('@now/build-utils');
|
||||
await createLambda({
|
||||
runtime: 'nodejs8.10',
|
||||
handler: 'index.main',
|
||||
files: {
|
||||
'index.js': new FileBlob({ data: 'exports.main = () => {}' })
|
||||
}
|
||||
})
|
||||
'index.js': new FileBlob({ data: 'exports.main = () => {}' }),
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### `download`
|
||||
@@ -323,7 +323,7 @@ await createLambda({
|
||||
Signature: `download() : Files`
|
||||
|
||||
```ts
|
||||
import { download } from '@now/build-utils'
|
||||
import { download } from '@now/build-utils';
|
||||
```
|
||||
|
||||
This utility allows you to download the contents of a [`Files`](#files) data structure, therefore creating the filesystem represented in it.
|
||||
@@ -333,7 +333,7 @@ Since `Files` is an abstract way of representing files, you can think of `downlo
|
||||
If the **optional** `meta` property is passed (the argument for [build](#build)), only the files that have changed are downloaded. This is decided using `filesRemoved` and `filesChanged` inside that object.
|
||||
|
||||
```js
|
||||
await download(files, workPath, meta)
|
||||
await download(files, workPath, meta);
|
||||
```
|
||||
|
||||
### `glob`
|
||||
@@ -341,7 +341,7 @@ await download(files, workPath, meta)
|
||||
Signature: `glob() : Files`
|
||||
|
||||
```ts
|
||||
import { glob } from '@now/build-utils'
|
||||
import { glob } from '@now/build-utils';
|
||||
```
|
||||
|
||||
This utility allows you to _scan_ the filesystem and return a [`Files`](#files) representation of the matched glob search string. It can be thought of as the reverse of [`download`](#download).
|
||||
@@ -362,7 +362,7 @@ exports.build = ({ files, workPath }) => {
|
||||
Signature: `getWriteableDirectory() : String`
|
||||
|
||||
```ts
|
||||
import { getWriteableDirectory } from '@now/build-utils'
|
||||
import { getWriteableDirectory } from '@now/build-utils';
|
||||
```
|
||||
|
||||
In some occasions, you might want to write to a temporary directory.
|
||||
@@ -372,7 +372,7 @@ In some occasions, you might want to write to a temporary directory.
|
||||
Signature: `rename(Files) : Files`
|
||||
|
||||
```ts
|
||||
import { rename } from '@now/build-utils'
|
||||
import { rename } from '@now/build-utils';
|
||||
```
|
||||
|
||||
Renames the keys of the [`Files`](#files) object, which represent the paths. For example, to remove the `*.go` suffix you can use:
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
[](https://circleci.com/gh/zeit/workflows/now/tree/master)
|
||||
[](https://spectrum.chat/zeit)
|
||||
|
||||
**NOTE**: The [canary](https://github.com/zeit/now/tree/canary) branch is under heavy development – the stable release branch is [master](https://github.com/zeit/now/tree/master).
|
||||
|
||||
## Usage
|
||||
|
||||
To install the latest version of Now CLI, visit [zeit.co/download](https://zeit.co/download) or run this command:
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
# Versioning
|
||||
|
||||
Builders are released to two different channels.
|
||||
|
||||
## Channels
|
||||
|
||||
| Channel | Git Branch | npm dist-tag | use example |
|
||||
| ------- | ------------------------------------------------------------- | ------------ | ------------------ |
|
||||
| Canary | [canary](https://github.com/zeit/now/commits/canary) | `@canary` | `@now/node@canary` |
|
||||
| Stable | [master](https://github.com/zeit/now/commits/master) | `@latest` | `@now/node@latest` |
|
||||
|
||||
All PRs are submitted to the `canary` branch. Once a PR is merged into the `canary` branch, it should be published to npm immediately using the Canary Channel.
|
||||
|
||||
## Version Selection
|
||||
|
||||
Since Builders are published to [npmjs.com](https://npmjs.com), this makes versioning works the same for Builders as it does for any npm package. The `use` statement in [now.json](https://zeit.co/docs/v2/advanced/configuration#builds) has a similar syntax to `npm install`.
|
||||
|
||||
The following are valid examples [@now/node](https://www.npmjs.com/package/@now/node?activeTab=versions):
|
||||
|
||||
- `@now/node`
|
||||
- `@now/node@0.7.3`
|
||||
- `@now/node@canary`
|
||||
- `@now/node@0.7.2-canary.2`
|
||||
|
||||
We always recommend using the latest version by leaving off the dist-tag suffix, `@now/node` for example.
|
||||
21
api/_lib/examples/example-list.ts
Normal file
21
api/_lib/examples/example-list.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
// Currently we read & parse the README file from zeit/now-examples
|
||||
// TODO: create a `manifest.json` for zeit/now-examples
|
||||
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
/**
|
||||
* Fetch and parse the `Frameworks and Libraries` table
|
||||
* in the README file of zeit/now-examples
|
||||
*/
|
||||
export async function getExampleList() {
|
||||
const response = await fetch(
|
||||
`https://raw.githubusercontent.com/zeit/now-examples/master/manifest.json`
|
||||
);
|
||||
|
||||
if (response.status !== 200) {
|
||||
console.log('manifest.json missing in zeit/now-examples');
|
||||
return null;
|
||||
}
|
||||
|
||||
return response.json();
|
||||
}
|
||||
18
api/_lib/examples/extract.ts
Normal file
18
api/_lib/examples/extract.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Download zip and extract to target directory
|
||||
*/
|
||||
|
||||
import got from 'got';
|
||||
import unzip from 'unzip-stream';
|
||||
|
||||
export async function extract(sourceUrl: string, targetPath: string) {
|
||||
return new Promise((resolve, reject) => {
|
||||
got
|
||||
.stream(sourceUrl)
|
||||
.pipe(unzip.Extract({ path: targetPath }))
|
||||
.on('close', resolve)
|
||||
.on('error', err => {
|
||||
reject(new Error('Failed extracting from github.'));
|
||||
});
|
||||
});
|
||||
}
|
||||
73
api/_lib/examples/github-repo-info.ts
Normal file
73
api/_lib/examples/github-repo-info.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import fetch from 'node-fetch';
|
||||
import { Repo } from '../types';
|
||||
import { getExampleList } from './example-list';
|
||||
|
||||
/**
|
||||
* Fetch the meta info of a public github repo
|
||||
* @param {object} repo parsed by the `parse-github-url` package
|
||||
*/
|
||||
export async function getGitHubRepoInfo(repo: Repo) {
|
||||
const response = await fetch(`https://api.github.com/repos/${repo.repo}`, {
|
||||
headers: {
|
||||
Accept: 'application/vnd.github.machine-man-preview+json',
|
||||
// If we don't use a personal access token,
|
||||
// it will get rate limited very easily.
|
||||
Authorization: `Bearer ${process.env.GITHUB_ACCESS_TOKEN}`
|
||||
},
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
console.log(`Non-200 response code from GitHub: ${response.status}`);
|
||||
console.log(await response.text());
|
||||
return null;
|
||||
}
|
||||
|
||||
const parsed = await response.json();
|
||||
|
||||
if (parsed.full_name !== repo.repo) {
|
||||
console.log(`Invalid response from GitHub`);
|
||||
console.log(`Received:`, parsed);
|
||||
return null;
|
||||
}
|
||||
|
||||
const data: { [key: string]: any } = {
|
||||
id: parsed.full_name,
|
||||
name: parsed.name,
|
||||
url: parsed.html_url,
|
||||
owner: parsed.owner.login,
|
||||
description: parsed.description,
|
||||
homepage: parsed.homepage,
|
||||
size: parsed.size,
|
||||
createdAt: parsed.created_at,
|
||||
updatedAt: parsed.updated_at,
|
||||
stars: parsed.stargazers_count,
|
||||
branch: repo.branch,
|
||||
};
|
||||
|
||||
const subdirPath = repo.repo + '/tree/' + repo.branch + '/';
|
||||
|
||||
if (repo.path.startsWith(subdirPath)) {
|
||||
// subdir
|
||||
data.subdir = repo.path.slice(subdirPath.length).split('/');
|
||||
}
|
||||
|
||||
if (data.id === 'zeit/now-examples' && data.subdir) {
|
||||
// from our examples, add `homepage` and `description` fields
|
||||
const example = data.subdir[0];
|
||||
const exampleList = await getExampleList();
|
||||
|
||||
for (const item of exampleList) {
|
||||
if (item.path === `/${example}`) {
|
||||
data.homepage = item.demo;
|
||||
data.description = item.description;
|
||||
data.exampleName = item.example;
|
||||
data.icon = item.icon;
|
||||
data.tagline = item.tagline;
|
||||
data.framework = item.framework;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
45
api/_lib/examples/gitlab-repo-info.ts
Normal file
45
api/_lib/examples/gitlab-repo-info.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
interface Repo {
|
||||
repo: string;
|
||||
owner: {
|
||||
username: string;
|
||||
};
|
||||
username: string;
|
||||
branch: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the meta info of a public gitlab repo
|
||||
* @param {object} repo parsed by the `parse-github-url` package
|
||||
*/
|
||||
export async function getGitLabRepoInfo(repo: Repo) {
|
||||
const response = await fetch(
|
||||
`https://gitlab.com/api/v4/projects/${encodeURIComponent(repo.repo)}`
|
||||
);
|
||||
|
||||
if (response.status !== 200) {
|
||||
console.log(`Non-200 response code from GitLab: ${response.status}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const parsed = await response.json();
|
||||
if (parsed.path_with_namespace !== repo.repo) {
|
||||
console.log(`Invalid response from GitLab`);
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
id: parsed.path_with_namespace,
|
||||
name: parsed.path,
|
||||
url: parsed.web_url,
|
||||
owner: parsed.owner ? parsed.owner.username : repo.owner,
|
||||
description: parsed.description,
|
||||
homepage: null,
|
||||
size: 0,
|
||||
createdAt: parsed.created_at,
|
||||
updatedAt: parsed.last_activity_at,
|
||||
stars: parsed.star_count,
|
||||
branch: repo.branch,
|
||||
};
|
||||
}
|
||||
27
api/_lib/examples/map-old-to-new.ts
Normal file
27
api/_lib/examples/map-old-to-new.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
export const mapOldToNew: { [key: string]: string[] } = {
|
||||
'go-image-to-ascii': ['vanilla-functions'],
|
||||
markdown: ['hexo', 'docusaurus', 'docz', 'jekyll'],
|
||||
'mdx-deck': ['docz'],
|
||||
'mdx-deck-advanced': ['docz'],
|
||||
'nextjs-mysql': ['nextjs'],
|
||||
'nextjs-news': ['nextjs'],
|
||||
'nextjs-nodejs-mongodb': ['nextjs'],
|
||||
'nextjs-static': ['nextjs'],
|
||||
'node-server': ['svelte-functions'],
|
||||
nodejs: ['svelte-functions'],
|
||||
'nodejs-canvas-partyparrot': ['svelte-functions'],
|
||||
'nodejs-coffee': ['svelte-functions'],
|
||||
'nodejs-hapi': ['svelte-functions'],
|
||||
'nodejs-koa': ['svelte-functions'],
|
||||
'nodejs-koa-ts': ['gatsby-functions'],
|
||||
'nodejs-micro': ['svelte-functions'],
|
||||
'nodejs-ms-graph-security-api': ['svelte-functions'],
|
||||
'nodejs-pdfkit': ['svelte-functions'],
|
||||
'nodejs-ts': ['gatsby-functions'],
|
||||
'nuxt-static': ['nuxtjs'],
|
||||
static: ['vanilla'],
|
||||
typescript: ['gatsby-functions'],
|
||||
'vanilla-go': ['vanilla-functions'],
|
||||
'vanilla-json-api': ['svelte-functions'],
|
||||
'vue-ssr': ['vue'],
|
||||
};
|
||||
20
api/_lib/examples/summary.ts
Normal file
20
api/_lib/examples/summary.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Get example list from extracted folder
|
||||
*/
|
||||
|
||||
import { join } from 'path';
|
||||
import { lstatSync, existsSync, readdirSync } from 'fs';
|
||||
|
||||
const exists = (path: string) => existsSync(path);
|
||||
const isDotFile = (name: string) => name.startsWith('.');
|
||||
const isDirectory = (path: string) => lstatSync(path).isDirectory();
|
||||
|
||||
export function summary(source: string) {
|
||||
if (!exists(source) || !isDirectory(source)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return readdirSync(source)
|
||||
.filter(name => !isDotFile(name))
|
||||
.filter(name => isDirectory(join(source, name)));
|
||||
}
|
||||
9
api/_lib/types.ts
Normal file
9
api/_lib/types.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export interface Repo {
|
||||
repo: string;
|
||||
owner: {
|
||||
username: string;
|
||||
};
|
||||
username: string;
|
||||
branch: string;
|
||||
path: string;
|
||||
}
|
||||
29
api/_lib/util/with-api-handler.ts
Normal file
29
api/_lib/util/with-api-handler.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { NowRequest, NowResponse } from '@now/node';
|
||||
|
||||
type Handler = (req: NowRequest, res: NowResponse) => Promise<any>;
|
||||
|
||||
export function withApiHandler(handler: Handler): Handler {
|
||||
return async (req: NowRequest, res: NowResponse) => {
|
||||
res.setHeader('Access-Control-Allow-Origin', '*');
|
||||
res.setHeader('Access-Control-Allow-Methods', 'GET');
|
||||
res.setHeader(
|
||||
'Access-Control-Allow-Headers',
|
||||
'Authorization, Accept, Content-Type'
|
||||
);
|
||||
|
||||
if (req.method === 'OPTIONS') {
|
||||
return res.status(200).json({});
|
||||
}
|
||||
|
||||
if (req.method !== 'GET') {
|
||||
return res.status(404).json({
|
||||
error: {
|
||||
code: 'not_found',
|
||||
message: 'Only GET requests are supported for this endpoint.',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return handler(req, res);
|
||||
};
|
||||
}
|
||||
70
api/examples/download/[segment].ts
Normal file
70
api/examples/download/[segment].ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import fs from 'fs';
|
||||
// @ts-ignore
|
||||
import tar from 'tar-fs';
|
||||
import { extract } from '../../_lib/examples/extract';
|
||||
import { NowRequest, NowResponse } from '@now/node';
|
||||
import { withApiHandler } from '../../_lib/util/with-api-handler';
|
||||
|
||||
const TMP_DIR = '/tmp';
|
||||
|
||||
function isDirectory(path: string) {
|
||||
return fs.existsSync(path) && fs.lstatSync(path).isDirectory();
|
||||
}
|
||||
|
||||
function notFound(res: NowResponse, message: string) {
|
||||
return res.status(404).send({
|
||||
error: {
|
||||
code: 'not_found',
|
||||
message
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function streamToBuffer(stream: any) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const buffers: any[] = [];
|
||||
stream.on('error', (err: any) => {
|
||||
reject(err);
|
||||
});
|
||||
stream.on('data', (b: any) => {
|
||||
buffers.push(b);
|
||||
});
|
||||
stream.on('end', () => {
|
||||
resolve(Buffer.concat(buffers));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export default withApiHandler(async function(req: NowRequest, res: NowResponse) {
|
||||
const ext = '.tar.gz';
|
||||
const { segment = '' } = req.query;
|
||||
|
||||
if (Array.isArray(segment) || !segment.endsWith(ext)) {
|
||||
return notFound(res, `Missing ${ext} suffix.`);
|
||||
}
|
||||
|
||||
const example = segment.slice(0, -ext.length);
|
||||
let directory;
|
||||
|
||||
if (Number(req.query.version) === 1) {
|
||||
// The old cli is pinned to a specific commit hash
|
||||
await extract('https://github.com/zeit/now-examples/archive/7c7b27e49b8b17d0d3f0e1604dc74fd005cd69e3.zip', TMP_DIR);
|
||||
directory = `${TMP_DIR}/now-examples-7c7b27e49b8b17d0d3f0e1604dc74fd005cd69e3/${example}`;
|
||||
} else {
|
||||
await extract('https://github.com/zeit/now-examples/archive/master.zip', TMP_DIR);
|
||||
directory = `${TMP_DIR}/now-examples-master/${example}`;
|
||||
|
||||
if (!isDirectory(directory)) {
|
||||
// Use `now` instead of `now-examples` if the searched example does not exist
|
||||
await extract('https://github.com/zeit/now/archive/master.zip', TMP_DIR);
|
||||
directory = `${TMP_DIR}/now-master/examples/${example}`;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isDirectory(directory)) {
|
||||
return notFound(res, `Example '${example}' was not found.`);
|
||||
}
|
||||
|
||||
const stream = tar.pack(directory);
|
||||
return res.send(await streamToBuffer(stream));
|
||||
});
|
||||
44
api/examples/info.ts
Normal file
44
api/examples/info.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
// A proxy to get the basic info of an existing github/gitlab repo:
|
||||
// GET /info?repo=zeit/micro
|
||||
|
||||
// @ts-ignore
|
||||
import parseGitUrl from 'parse-github-url';
|
||||
import { NowRequest, NowResponse } from '@now/node';
|
||||
import { withApiHandler } from '../_lib/util/with-api-handler';
|
||||
import { getGitHubRepoInfo } from '../_lib/examples/github-repo-info';
|
||||
import { getGitLabRepoInfo } from '../_lib/examples/gitlab-repo-info';
|
||||
|
||||
export default withApiHandler(async function(
|
||||
req: NowRequest,
|
||||
res: NowResponse
|
||||
) {
|
||||
const repoPath = decodeURIComponent((req.query.repo as string) || '');
|
||||
|
||||
if (!repoPath) {
|
||||
return res.status(404).json({
|
||||
error: {
|
||||
code: 'not_found',
|
||||
message: 'Please provide the `repo` parameter.',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const repo = parseGitUrl(repoPath);
|
||||
|
||||
if (!repo.repo) {
|
||||
return res.status(400).json({
|
||||
error: {
|
||||
code: 'invalid_repo_url',
|
||||
message: 'Repository URL is invalid.',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (repo.host === 'github.com') {
|
||||
// URL is 'https://github.com/user/repo' or 'user/repo'
|
||||
return res.json((await getGitHubRepoInfo(repo)) || {});
|
||||
}
|
||||
|
||||
// gitlab
|
||||
res.json((await getGitLabRepoInfo(repo)) || {});
|
||||
});
|
||||
10
api/examples/list-all.ts
Normal file
10
api/examples/list-all.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { NowRequest, NowResponse } from '@now/node';
|
||||
import { getExampleList } from '../_lib/examples/example-list';
|
||||
import { withApiHandler } from '../_lib/util/with-api-handler';
|
||||
|
||||
export default withApiHandler(async function(
|
||||
req: NowRequest,
|
||||
res: NowResponse
|
||||
) {
|
||||
res.status(200).json(await getExampleList());
|
||||
});
|
||||
46
api/examples/list.ts
Normal file
46
api/examples/list.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { extract } from '../_lib/examples/extract';
|
||||
import { summary } from '../_lib/examples/summary';
|
||||
import { NowRequest, NowResponse } from '@now/node';
|
||||
import { mapOldToNew } from '../_lib/examples/map-old-to-new';
|
||||
import { withApiHandler } from '../_lib/util/with-api-handler';
|
||||
|
||||
export default withApiHandler(async function(
|
||||
req: NowRequest,
|
||||
res: NowResponse
|
||||
) {
|
||||
if (Number(req.query.version) === 1) {
|
||||
// The old cli is pinned to a specific commit hash
|
||||
await extract(
|
||||
'https://github.com/zeit/now-examples/archive/7c7b27e49b8b17d0d3f0e1604dc74fd005cd69e3.zip',
|
||||
'/tmp'
|
||||
);
|
||||
const exampleList = summary(
|
||||
'/tmp/now-examples-7c7b27e49b8b17d0d3f0e1604dc74fd005cd69e3'
|
||||
);
|
||||
return res.send(exampleList);
|
||||
}
|
||||
|
||||
await Promise.all([
|
||||
extract('https://github.com/zeit/now/archive/master.zip', '/tmp'),
|
||||
extract('https://github.com/zeit/now-examples/archive/master.zip', '/tmp'),
|
||||
]);
|
||||
|
||||
const exampleList = new Set([
|
||||
...summary('/tmp/now-master/examples'),
|
||||
...summary('/tmp/now-examples-master'),
|
||||
]);
|
||||
|
||||
const existingExamples = Array.from(exampleList).map(key => ({
|
||||
name: key,
|
||||
visible: true,
|
||||
suggestions: [],
|
||||
}));
|
||||
|
||||
const oldExamples = Object.keys(mapOldToNew).map(key => ({
|
||||
name: key,
|
||||
visible: false,
|
||||
suggestions: mapOldToNew[key],
|
||||
}));
|
||||
|
||||
res.status(200).json([...existingExamples, ...oldExamples]);
|
||||
});
|
||||
22
api/frameworks.ts
Normal file
22
api/frameworks.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { NowRequest, NowResponse } from '@now/node';
|
||||
import { withApiHandler } from './_lib/util/with-api-handler';
|
||||
import frameworkList, { Framework } from '../packages/frameworks';
|
||||
|
||||
const frameworks: Framework[] = (frameworkList as Framework[]).map(
|
||||
framework => {
|
||||
delete framework.detectors;
|
||||
|
||||
if (framework.logo) {
|
||||
framework.logo = `https://res.cloudinary.com/zeit-inc/image/fetch/${framework.logo}`;
|
||||
}
|
||||
|
||||
return framework;
|
||||
}
|
||||
);
|
||||
|
||||
export default withApiHandler(async function(
|
||||
req: NowRequest,
|
||||
res: NowResponse
|
||||
) {
|
||||
return res.status(200).json(frameworks);
|
||||
});
|
||||
23
api/package.json
Normal file
23
api/package.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "api",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"description": "API for the zeit/now repo",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build": "yarn --cwd .. && node ../utils/run.js build all"
|
||||
},
|
||||
"dependencies": {
|
||||
"got": "10.2.1",
|
||||
"node-fetch": "2.6.0",
|
||||
"parse-github-url": "1.0.2",
|
||||
"tar-fs": "2.0.0",
|
||||
"typescript": "3.7.4",
|
||||
"unzip-stream": "0.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@now/node": "1.3.3",
|
||||
"@types/node": "13.1.4",
|
||||
"@types/node-fetch": "2.5.4"
|
||||
}
|
||||
}
|
||||
15
api/tsconfig.json
Normal file
15
api/tsconfig.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"skipLibCheck": true,
|
||||
"strict": false,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true
|
||||
},
|
||||
"include": ["examples", "frameworks.ts"]
|
||||
}
|
||||
349
api/yarn.lock
Normal file
349
api/yarn.lock
Normal file
@@ -0,0 +1,349 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@now/node@1.3.3":
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@now/node/-/node-1.3.3.tgz#5407cb6a730d4dd9b6b6b0bc4a316f29086c9feb"
|
||||
integrity sha512-s1qajtQttWhhSs1k6FX0/6eTFYFUplzultrQeKfOPMoYzzz6OxDq5qrQ3elpsGlZlDVmO+x+JOJ7yad+3yBgpg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@sindresorhus/is@^1.0.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-1.2.0.tgz#63ce3638cb85231f3704164c90a18ef816da3fb7"
|
||||
integrity sha512-mwhXGkRV5dlvQc4EgPDxDxO6WuMBVymGFd1CA+2Y+z5dG9MNspoQ+AWjl/Ld1MnpCL8AKbosZlDVohqcIwuWsw==
|
||||
|
||||
"@szmarczak/http-timer@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.0.tgz#309789ccb7842ff1e41848cf43da587f78068836"
|
||||
integrity sha512-3yoXv8OtGr/r3R5gaWWNQ3VUoQ5G3Gmo8DXX95V14ZVvE2b7Pj6Ide9uIDON8ym4D/ItyfL9ejohYUPqOyvRXw==
|
||||
dependencies:
|
||||
defer-to-connect "^1.1.1"
|
||||
|
||||
"@types/cacheable-request@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976"
|
||||
integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==
|
||||
dependencies:
|
||||
"@types/http-cache-semantics" "*"
|
||||
"@types/keyv" "*"
|
||||
"@types/node" "*"
|
||||
"@types/responselike" "*"
|
||||
|
||||
"@types/http-cache-semantics@*":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a"
|
||||
integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==
|
||||
|
||||
"@types/keyv@*":
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7"
|
||||
integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node-fetch@2.5.4":
|
||||
version "2.5.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.4.tgz#5245b6d8841fc3a6208b82291119bc11c4e0ce44"
|
||||
integrity sha512-Oz6id++2qAOFuOlE1j0ouk1dzl3mmI1+qINPNBhi9nt/gVOz0G+13Ao6qjhdF0Ys+eOkhu6JnFmt38bR3H0POQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node@*", "@types/node@13.1.4":
|
||||
version "13.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.4.tgz#4cfd90175a200ee9b02bd6b1cd19bc349741607e"
|
||||
integrity sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==
|
||||
|
||||
"@types/responselike@*":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
|
||||
integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
binary@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79"
|
||||
integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=
|
||||
dependencies:
|
||||
buffers "~0.1.1"
|
||||
chainsaw "~0.1.0"
|
||||
|
||||
bl@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
|
||||
integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
|
||||
dependencies:
|
||||
readable-stream "^3.0.1"
|
||||
|
||||
buffers@~0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"
|
||||
integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s=
|
||||
|
||||
cacheable-lookup@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-0.2.1.tgz#f474ae2c686667d7ea08c43409ad31b2b31b26c2"
|
||||
integrity sha512-BQ8MRjxJASEq2q+w0SusPU3B054gS278K8sj58QCLMZIso5qG05+MdCdmXxuyVlfvI8h4bPsNOavVUauVCGxrg==
|
||||
dependencies:
|
||||
keyv "^3.1.0"
|
||||
|
||||
cacheable-request@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.0.tgz#12421aa084e943ec81eac8c93e56af90c624788a"
|
||||
integrity sha512-UVG4gMn3WjnAeFBBx7RFoprgOANIAkMwN5Dta6ONmfSwrCxfm0Ip7g0mIBxIRJZX9aDsoID0Ry3dU5Pr0csKKA==
|
||||
dependencies:
|
||||
clone-response "^1.0.2"
|
||||
get-stream "^5.1.0"
|
||||
http-cache-semantics "^4.0.0"
|
||||
keyv "^3.0.0"
|
||||
lowercase-keys "^2.0.0"
|
||||
normalize-url "^4.1.0"
|
||||
responselike "^2.0.0"
|
||||
|
||||
chainsaw@~0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98"
|
||||
integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=
|
||||
dependencies:
|
||||
traverse ">=0.3.0 <0.4"
|
||||
|
||||
chownr@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142"
|
||||
integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==
|
||||
|
||||
clone-response@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
|
||||
integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
|
||||
dependencies:
|
||||
mimic-response "^1.0.0"
|
||||
|
||||
decompress-response@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f"
|
||||
integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==
|
||||
dependencies:
|
||||
mimic-response "^2.0.0"
|
||||
|
||||
defer-to-connect@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.1.tgz#88ae694b93f67b81815a2c8c769aef6574ac8f2f"
|
||||
integrity sha512-J7thop4u3mRTkYRQ+Vpfwy2G5Ehoy82I14+14W4YMDLKdWloI9gSzRbV30s/NckQGVJtPkWNcW4oMAUigTdqiQ==
|
||||
|
||||
duplexer3@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
|
||||
integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
|
||||
|
||||
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
fs-constants@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
||||
|
||||
get-stream@^5.0.0, get-stream@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
|
||||
integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
got@10.2.1:
|
||||
version "10.2.1"
|
||||
resolved "https://registry.yarnpkg.com/got/-/got-10.2.1.tgz#7087485482fb31aa6e6399fd493dd04639da117b"
|
||||
integrity sha512-IQX//hGm5oLjUj743GJG30U2RzjS58ZlhQQjwQXjsyR50TTD+etVMHlMEbNxYJGWVFa0ASgDVhRkAvQPe6M9iQ==
|
||||
dependencies:
|
||||
"@sindresorhus/is" "^1.0.0"
|
||||
"@szmarczak/http-timer" "^4.0.0"
|
||||
"@types/cacheable-request" "^6.0.1"
|
||||
cacheable-lookup "^0.2.1"
|
||||
cacheable-request "^7.0.0"
|
||||
decompress-response "^5.0.0"
|
||||
duplexer3 "^0.1.4"
|
||||
get-stream "^5.0.0"
|
||||
lowercase-keys "^2.0.0"
|
||||
mimic-response "^2.0.0"
|
||||
p-cancelable "^2.0.0"
|
||||
responselike "^2.0.0"
|
||||
to-readable-stream "^2.0.0"
|
||||
type-fest "^0.8.0"
|
||||
|
||||
http-cache-semantics@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5"
|
||||
integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==
|
||||
|
||||
inherits@^2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
|
||||
json-buffer@3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898"
|
||||
integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
|
||||
|
||||
keyv@^3.0.0, keyv@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
|
||||
integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
|
||||
dependencies:
|
||||
json-buffer "3.0.0"
|
||||
|
||||
lowercase-keys@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
|
||||
integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
|
||||
|
||||
mimic-response@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
||||
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
|
||||
|
||||
mimic-response@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46"
|
||||
integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==
|
||||
|
||||
minimist@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
||||
|
||||
mkdirp@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
||||
dependencies:
|
||||
minimist "0.0.8"
|
||||
|
||||
node-fetch@2.6.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
|
||||
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
|
||||
|
||||
normalize-url@^4.1.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
|
||||
integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
|
||||
|
||||
once@^1.3.1, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
p-cancelable@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e"
|
||||
integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==
|
||||
|
||||
parse-github-url@1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395"
|
||||
integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==
|
||||
|
||||
pump@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
readable-stream@^3.0.1, readable-stream@^3.1.1:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
|
||||
integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
string_decoder "^1.1.1"
|
||||
util-deprecate "^1.0.1"
|
||||
|
||||
responselike@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723"
|
||||
integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==
|
||||
dependencies:
|
||||
lowercase-keys "^2.0.0"
|
||||
|
||||
safe-buffer@~5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
|
||||
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
|
||||
|
||||
string_decoder@^1.1.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
||||
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
|
||||
dependencies:
|
||||
safe-buffer "~5.2.0"
|
||||
|
||||
tar-fs@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad"
|
||||
integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==
|
||||
dependencies:
|
||||
chownr "^1.1.1"
|
||||
mkdirp "^0.5.1"
|
||||
pump "^3.0.0"
|
||||
tar-stream "^2.0.0"
|
||||
|
||||
tar-stream@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
|
||||
integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
|
||||
dependencies:
|
||||
bl "^3.0.0"
|
||||
end-of-stream "^1.4.1"
|
||||
fs-constants "^1.0.0"
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^3.1.1"
|
||||
|
||||
to-readable-stream@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8"
|
||||
integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==
|
||||
|
||||
"traverse@>=0.3.0 <0.4":
|
||||
version "0.3.9"
|
||||
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
|
||||
integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=
|
||||
|
||||
type-fest@^0.8.0:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
|
||||
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
|
||||
|
||||
typescript@3.7.4:
|
||||
version "3.7.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19"
|
||||
integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==
|
||||
|
||||
unzip-stream@0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/unzip-stream/-/unzip-stream-0.3.0.tgz#c30c054cd6b0d64b13a23cd3ece911eb0b2b52d8"
|
||||
integrity sha512-NG1h/MdGIX3HzyqMjyj1laBCmlPYhcO4xEy7gEqqzGiSLw7XqDQCnY4nYSn5XSaH8mQ6TFkaujrO8d/PIZN85A==
|
||||
dependencies:
|
||||
binary "^0.3.0"
|
||||
mkdirp "^0.5.1"
|
||||
|
||||
util-deprecate@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
18
changelog.js
18
changelog.js
@@ -1,18 +0,0 @@
|
||||
const { execSync } = require('child_process');
|
||||
|
||||
const commit = execSync('git log --pretty=format:"%s %H"')
|
||||
.toString()
|
||||
.trim()
|
||||
.split('\n')
|
||||
.find(line => line.startsWith('Publish '))
|
||||
.split(' ')
|
||||
.pop();
|
||||
|
||||
if (!commit) {
|
||||
throw new Error('Unable to find last publish commit');
|
||||
}
|
||||
|
||||
const log = execSync(`git log --pretty=format:"- %s [%an]" ${commit}...HEAD`).toString().trim();
|
||||
|
||||
console.log(`Changes since the last publish commit ${commit}:`);
|
||||
console.log(`\n${log}\n`);
|
||||
36
diff.js
36
diff.js
@@ -1,36 +0,0 @@
|
||||
const { execSync } = require('child_process');
|
||||
const { join } = require('path');
|
||||
const { tmpdir } = require('os');
|
||||
const { mkdirSync, writeFileSync } = require('fs');
|
||||
|
||||
function getCommits(count) {
|
||||
return execSync('git log --pretty=format:"%s [%an]"')
|
||||
.toString()
|
||||
.trim()
|
||||
.split('\n')
|
||||
.slice(0, count)
|
||||
.filter(line => !line.startsWith('Publish '))
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
function main(count = '100') {
|
||||
console.log(`Generating diff using last ${count} commits...`);
|
||||
const randomTmpId = Math.random().toString().slice(2);
|
||||
const dir = join(tmpdir(), 'now-diff' + randomTmpId);
|
||||
mkdirSync(dir);
|
||||
|
||||
execSync('git checkout canary && git pull');
|
||||
const canary = getCommits(count);
|
||||
execSync('git checkout master && git pull');
|
||||
const master = getCommits(count);
|
||||
|
||||
writeFileSync(join(dir, 'log.txt'), '# canary\n' + canary);
|
||||
execSync('git init && git add -A && git commit -m "init"', { cwd: dir });
|
||||
writeFileSync(join(dir, 'log.txt'), '# master\n' + master);
|
||||
|
||||
console.log(`Done generating diff. Run the following:`);
|
||||
console.log(`cd ${dir}`);
|
||||
console.log('Then use `git diff` or `git difftool` to view the differences.');
|
||||
}
|
||||
|
||||
main(process.argv[2]);
|
||||
33
errors/invalid-route-source.md
Normal file
33
errors/invalid-route-source.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Invalid Custom Route `source`
|
||||
|
||||
#### Why This Error Occurred
|
||||
|
||||
When defining custom routes a route was added that causes an error during parsing. This can be due to trying to use normal `RegExp` syntax like negative lookaheads (`?!exclude`) without following `path-to-regexp`'s syntax for it.
|
||||
|
||||
#### Possible Ways to Fix It
|
||||
|
||||
Wrap the `RegExp` part of your `source` as an un-named parameter.
|
||||
|
||||
**Before**
|
||||
|
||||
```js
|
||||
{
|
||||
source: '/feedback/(?!general)',
|
||||
destination: '/feedback/general'
|
||||
}
|
||||
```
|
||||
|
||||
**After**
|
||||
|
||||
```js
|
||||
{
|
||||
source: '/feedback/((?!general).*)',
|
||||
destination: '/feedback/general'
|
||||
}
|
||||
```
|
||||
|
||||
### Useful Links
|
||||
|
||||
- [path-to-regexp](https://github.com/pillarjs/path-to-regexp/tree/v6.1.0)
|
||||
- [named parameters](https://github.com/pillarjs/path-to-regexp/blob/v6.1.0/Readme.md#named-parameters)
|
||||
- [un-named paramters](https://github.com/pillarjs/path-to-regexp/blob/v6.1.0/Readme.md#unnamed-parameters)
|
||||
11
errors/invalid-token-value.md
Normal file
11
errors/invalid-token-value.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Invalid Token Value
|
||||
|
||||
#### Why This Error Occurred
|
||||
|
||||
The `--token` flag was specified, but its contents are invalid.
|
||||
|
||||
#### Possible Ways to Fix It
|
||||
|
||||
The `--token` flag must only contain numbers (0-9) and letters from the alphabet (a-z and A-Z). This needs to be the token of the user account as which you'd like to act.
|
||||
|
||||
You can either get the token from the `./now/auth.json` file located in your user directory or [from the dashboard](https://zeit.co/account/tokens).
|
||||
1
examples/amp/.gitignore
vendored
Normal file
1
examples/amp/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.env
|
||||
27
examples/amp/README.md
Normal file
27
examples/amp/README.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# AMP Example
|
||||
|
||||
This directory is a brief example of an [AMP](https://amp.dev/) site that can be deployed with ZEIT Now and zero configuration.
|
||||
|
||||
## Deploy Your Own
|
||||
|
||||
Deploy your own AMP project with ZEIT Now.
|
||||
|
||||
[](https://zeit.co/new/project?template=https://github.com/zeit/now-examples/tree/master/amp)
|
||||
|
||||
_Live Example: https://amp.now-examples.now.sh_
|
||||
|
||||
### How We Created This Example
|
||||
|
||||
To get started deploying AMP with ZEIT Now, you can use the [Now CLI](https://zeit.co/download) to initialize the project:
|
||||
|
||||
```shell
|
||||
$ now init amp
|
||||
```
|
||||
|
||||
### Deploying From Your Terminal
|
||||
|
||||
You can deploy your new AMP project with a single command from your terminal using Now CLI:
|
||||
|
||||
```shell
|
||||
$ now
|
||||
```
|
||||
BIN
examples/amp/favicon.png
Normal file
BIN
examples/amp/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
72
examples/amp/index.html
Normal file
72
examples/amp/index.html
Normal file
@@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html ⚡>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width,minimum-scale=1" />
|
||||
<link rel="shortcut icon" href="favicon.png">
|
||||
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
|
||||
<link rel="canonical" href="index.html" />
|
||||
<title>AMP Website</title>
|
||||
<script async src="https://cdn.ampproject.org/v0.js"></script>
|
||||
<style amp-custom>
|
||||
body > * {
|
||||
margin: 3rem 1rem;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
color: #525252;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 1.2rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
|
||||
.links {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.links a {
|
||||
margin: 0 10px;
|
||||
font-size: 1rem;
|
||||
color: #005af0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<amp-img width=150 height=150 layout="fixed" class="logo" src="logo.png"></amp-img>
|
||||
<h3>Welcome to your AMP page</h3>
|
||||
<p>AMP is a web component framework to <br> easily create user-first websites, stories, ads and emails.</p>
|
||||
|
||||
<h4>Links</h4>
|
||||
<div class="links">
|
||||
<a href="https://amp.dev/">Homepage</a>
|
||||
<a href="https://amp.dev/documentation/guides-and-tutorials/?format=websites">Tutorials</a>
|
||||
<a href="https://amp.dev/documentation/examples/">Examples</a>
|
||||
<a href="https://blog.amp.dev">Blog</a>
|
||||
</div>
|
||||
|
||||
<h4>Ready to get started?</h4>
|
||||
<div class="links">
|
||||
<a href="https://amp.dev/documentation/guides-and-tutorials/start/create/?format=websites">Create your first AMP page</a>
|
||||
</div>
|
||||
|
||||
<h4>Get involved</h4>
|
||||
<div class="links">
|
||||
<a href="https://twitter.com/amphtml">Twitter</a>
|
||||
<a href="https://amphtml.slack.com">Slack</a>
|
||||
<a href="https://amp.dev/events/amp-conf-2019">AMP Conf</a>
|
||||
<a href="https://amp.dev/events/amp-roadshow">AMP Roadshow</a>
|
||||
</div>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
BIN
examples/amp/logo.png
Normal file
BIN
examples/amp/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
13
examples/angular/.editorconfig
Normal file
13
examples/angular/.editorconfig
Normal file
@@ -0,0 +1,13 @@
|
||||
# Editor configuration, see https://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
max_line_length = off
|
||||
trim_trailing_whitespace = false
|
||||
50
examples/angular/.gitignore
vendored
Normal file
50
examples/angular/.gitignore
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
||||
|
||||
# compiled output
|
||||
/dist
|
||||
/tmp
|
||||
/out-tsc
|
||||
# Only exists if Bazel was run
|
||||
/bazel-out
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
|
||||
# profiling files
|
||||
chrome-profiler-events.json
|
||||
speed-measure-plugin.json
|
||||
|
||||
# IDEs and editors
|
||||
/.idea
|
||||
.project
|
||||
.classpath
|
||||
.c9/
|
||||
*.launch
|
||||
.settings/
|
||||
*.sublime-workspace
|
||||
|
||||
# IDE - VSCode
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
.history/*
|
||||
|
||||
# misc
|
||||
/.sass-cache
|
||||
/connect.lock
|
||||
/coverage
|
||||
/libpeerconnection.log
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
testem.log
|
||||
/typings
|
||||
|
||||
# System Files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Environment Variables
|
||||
.env
|
||||
.env.build
|
||||
2
examples/angular/.nowignore
Normal file
2
examples/angular/.nowignore
Normal file
@@ -0,0 +1,2 @@
|
||||
README.md
|
||||
yarn.lock
|
||||
29
examples/angular/README.md
Normal file
29
examples/angular/README.md
Normal file
@@ -0,0 +1,29 @@
|
||||

|
||||
|
||||
# Angular Example
|
||||
|
||||
This directory is a brief example of an [Angular](https://angular.io/) app that can be deployed with ZEIT Now and zero configuration.
|
||||
|
||||
## Deploy Your Own
|
||||
|
||||
Deploy your own Angular project with ZEIT Now.
|
||||
|
||||
[](https://zeit.co/new/project?template=https://github.com/zeit/now-examples/tree/master/angular)
|
||||
|
||||
_Live Example: https://angular.now-examples.now.sh_
|
||||
|
||||
### How We Created This Example
|
||||
|
||||
To get started with Angular, you can use the [Angular CLI](https://cli.angular.io/) to initialize the project:
|
||||
|
||||
```shell
|
||||
$ ng new
|
||||
```
|
||||
|
||||
### Deploying From Your Terminal
|
||||
|
||||
You can deploy your new Angular project with a single command from your terminal using [Now CLI](https://zeit.co/download):
|
||||
|
||||
```shell
|
||||
$ now
|
||||
```
|
||||
109
examples/angular/angular.json
Normal file
109
examples/angular/angular.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||
"version": 1,
|
||||
"newProjectRoot": "projects",
|
||||
"projects": {
|
||||
"angular": {
|
||||
"projectType": "application",
|
||||
"schematics": {},
|
||||
"root": "",
|
||||
"sourceRoot": "src",
|
||||
"prefix": "app",
|
||||
"architect": {
|
||||
"build": {
|
||||
"builder": "@angular-devkit/build-angular:browser",
|
||||
"options": {
|
||||
"outputPath": "dist/angular",
|
||||
"index": "src/index.html",
|
||||
"main": "src/main.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
"tsConfig": "tsconfig.app.json",
|
||||
"aot": false,
|
||||
"assets": ["src/favicon.ico", "src/assets"],
|
||||
"styles": ["src/styles.css"],
|
||||
"scripts": []
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"fileReplacements": [
|
||||
{
|
||||
"replace": "src/environments/environment.ts",
|
||||
"with": "src/environments/environment.prod.ts"
|
||||
}
|
||||
],
|
||||
"optimization": true,
|
||||
"outputHashing": "all",
|
||||
"sourceMap": false,
|
||||
"extractCss": true,
|
||||
"namedChunks": false,
|
||||
"aot": true,
|
||||
"extractLicenses": true,
|
||||
"vendorChunk": false,
|
||||
"buildOptimizer": true,
|
||||
"budgets": [
|
||||
{
|
||||
"type": "initial",
|
||||
"maximumWarning": "2mb",
|
||||
"maximumError": "5mb"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"serve": {
|
||||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
"options": {
|
||||
"browserTarget": "angular:build"
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"browserTarget": "angular:build:production"
|
||||
}
|
||||
}
|
||||
},
|
||||
"extract-i18n": {
|
||||
"builder": "@angular-devkit/build-angular:extract-i18n",
|
||||
"options": {
|
||||
"browserTarget": "angular:build"
|
||||
}
|
||||
},
|
||||
"test": {
|
||||
"builder": "@angular-devkit/build-angular:karma",
|
||||
"options": {
|
||||
"main": "src/test.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
"tsConfig": "tsconfig.spec.json",
|
||||
"karmaConfig": "karma.conf.js",
|
||||
"assets": ["src/favicon.ico", "src/assets"],
|
||||
"styles": ["src/styles.css"],
|
||||
"scripts": []
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"builder": "@angular-devkit/build-angular:tslint",
|
||||
"options": {
|
||||
"tsConfig": [
|
||||
"tsconfig.app.json",
|
||||
"tsconfig.spec.json",
|
||||
"e2e/tsconfig.json"
|
||||
],
|
||||
"exclude": ["**/node_modules/**"]
|
||||
}
|
||||
},
|
||||
"e2e": {
|
||||
"builder": "@angular-devkit/build-angular:protractor",
|
||||
"options": {
|
||||
"protractorConfig": "e2e/protractor.conf.js",
|
||||
"devServerTarget": "angular:serve"
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
"devServerTarget": "angular:serve:production"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultProject": "angular"
|
||||
}
|
||||
12
examples/angular/browserslist
Normal file
12
examples/angular/browserslist
Normal file
@@ -0,0 +1,12 @@
|
||||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
|
||||
# For additional information regarding the format and rule options, please see:
|
||||
# https://github.com/browserslist/browserslist#queries
|
||||
|
||||
# You can see what browsers were selected by your queries by running:
|
||||
# npx browserslist
|
||||
|
||||
> 0.5%
|
||||
last 2 versions
|
||||
Firefox ESR
|
||||
not dead
|
||||
not IE 9-11 # For IE 9-11 support, remove 'not'.
|
||||
32
examples/angular/e2e/protractor.conf.js
Normal file
32
examples/angular/e2e/protractor.conf.js
Normal file
@@ -0,0 +1,32 @@
|
||||
// @ts-check
|
||||
// Protractor configuration file, see link for more information
|
||||
// https://github.com/angular/protractor/blob/master/lib/config.ts
|
||||
|
||||
const { SpecReporter } = require('jasmine-spec-reporter');
|
||||
|
||||
/**
|
||||
* @type { import("protractor").Config }
|
||||
*/
|
||||
exports.config = {
|
||||
allScriptsTimeout: 11000,
|
||||
specs: ['./src/**/*.e2e-spec.ts'],
|
||||
capabilities: {
|
||||
browserName: 'chrome',
|
||||
},
|
||||
directConnect: true,
|
||||
baseUrl: 'http://localhost:4200/',
|
||||
framework: 'jasmine',
|
||||
jasmineNodeOpts: {
|
||||
showColors: true,
|
||||
defaultTimeoutInterval: 30000,
|
||||
print: function() {},
|
||||
},
|
||||
onPrepare() {
|
||||
require('ts-node').register({
|
||||
project: require('path').join(__dirname, './tsconfig.json'),
|
||||
});
|
||||
jasmine
|
||||
.getEnv()
|
||||
.addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
|
||||
},
|
||||
};
|
||||
28
examples/angular/e2e/src/app.e2e-spec.ts
Normal file
28
examples/angular/e2e/src/app.e2e-spec.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { AppPage } from './app.po';
|
||||
import { browser, logging } from 'protractor';
|
||||
|
||||
describe('workspace-project App', () => {
|
||||
let page: AppPage;
|
||||
|
||||
beforeEach(() => {
|
||||
page = new AppPage();
|
||||
});
|
||||
|
||||
it('should display welcome message', () => {
|
||||
page.navigateTo();
|
||||
expect(page.getTitleText()).toEqual('Welcome to angular!');
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
// Assert that there are no errors emitted from the browser
|
||||
const logs = await browser
|
||||
.manage()
|
||||
.logs()
|
||||
.get(logging.Type.BROWSER);
|
||||
expect(logs).not.toContain(
|
||||
jasmine.objectContaining({
|
||||
level: logging.Level.SEVERE,
|
||||
} as logging.Entry)
|
||||
);
|
||||
});
|
||||
});
|
||||
11
examples/angular/e2e/src/app.po.ts
Normal file
11
examples/angular/e2e/src/app.po.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { browser, by, element } from 'protractor';
|
||||
|
||||
export class AppPage {
|
||||
navigateTo() {
|
||||
return browser.get(browser.baseUrl) as Promise<any>;
|
||||
}
|
||||
|
||||
getTitleText() {
|
||||
return element(by.css('app-root h1')).getText() as Promise<string>;
|
||||
}
|
||||
}
|
||||
9
examples/angular/e2e/tsconfig.json
Normal file
9
examples/angular/e2e/tsconfig.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../out-tsc/e2e",
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"types": ["jasmine", "jasminewd2", "node"]
|
||||
}
|
||||
}
|
||||
32
examples/angular/karma.conf.js
Normal file
32
examples/angular/karma.conf.js
Normal file
@@ -0,0 +1,32 @@
|
||||
// Karma configuration file, see link for more information
|
||||
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
||||
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
basePath: '',
|
||||
frameworks: ['jasmine', '@angular-devkit/build-angular'],
|
||||
plugins: [
|
||||
require('karma-jasmine'),
|
||||
require('karma-chrome-launcher'),
|
||||
require('karma-jasmine-html-reporter'),
|
||||
require('karma-coverage-istanbul-reporter'),
|
||||
require('@angular-devkit/build-angular/plugins/karma'),
|
||||
],
|
||||
client: {
|
||||
clearContext: false, // leave Jasmine Spec Runner output visible in browser
|
||||
},
|
||||
coverageIstanbulReporter: {
|
||||
dir: require('path').join(__dirname, './coverage/angular'),
|
||||
reports: ['html', 'lcovonly', 'text-summary'],
|
||||
fixWebpackSourcePaths: true,
|
||||
},
|
||||
reporters: ['progress', 'kjhtml'],
|
||||
port: 9876,
|
||||
colors: true,
|
||||
logLevel: config.LOG_INFO,
|
||||
autoWatch: true,
|
||||
browsers: ['Chrome'],
|
||||
singleRun: false,
|
||||
restartOnFileChange: true,
|
||||
});
|
||||
};
|
||||
48
examples/angular/package.json
Normal file
48
examples/angular/package.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "angular",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
"dev": "ng serve --port $PORT",
|
||||
"build": "ng build",
|
||||
"test": "ng test",
|
||||
"lint": "ng lint",
|
||||
"e2e": "ng e2e"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "~8.1.0",
|
||||
"@angular/common": "~8.1.0",
|
||||
"@angular/compiler": "~8.1.0",
|
||||
"@angular/core": "~8.1.0",
|
||||
"@angular/forms": "~8.1.0",
|
||||
"@angular/platform-browser": "~8.1.0",
|
||||
"@angular/platform-browser-dynamic": "~8.1.0",
|
||||
"@angular/router": "~8.1.0",
|
||||
"rxjs": "~6.4.0",
|
||||
"tslib": "^1.9.0",
|
||||
"zone.js": "~0.9.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.801.0",
|
||||
"@angular/cli": "~8.1.0",
|
||||
"@angular/compiler-cli": "~8.1.0",
|
||||
"@angular/language-service": "~8.1.0",
|
||||
"@types/node": "~8.9.4",
|
||||
"@types/jasmine": "~3.3.8",
|
||||
"@types/jasminewd2": "~2.0.3",
|
||||
"codelyzer": "^5.0.0",
|
||||
"jasmine-core": "~3.4.0",
|
||||
"jasmine-spec-reporter": "~4.2.1",
|
||||
"karma": "~4.1.0",
|
||||
"karma-chrome-launcher": "~2.2.0",
|
||||
"karma-coverage-istanbul-reporter": "~2.0.1",
|
||||
"karma-jasmine": "~2.0.1",
|
||||
"karma-jasmine-html-reporter": "^1.4.0",
|
||||
"protractor": "~5.4.0",
|
||||
"ts-node": "~7.0.0",
|
||||
"tslint": "~5.15.0",
|
||||
"typescript": "~3.4.3"
|
||||
}
|
||||
}
|
||||
0
examples/angular/src/app/app.component.css
Normal file
0
examples/angular/src/app/app.component.css
Normal file
20
examples/angular/src/app/app.component.html
Normal file
20
examples/angular/src/app/app.component.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<!--The content below is only a placeholder and can be replaced.-->
|
||||
<div style="text-align:center">
|
||||
<h1>
|
||||
Welcome to {{ title }}!
|
||||
</h1>
|
||||
<img width="300" alt="Angular Logo" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==">
|
||||
</div>
|
||||
<h2>Here are some links to help you start: </h2>
|
||||
<ul>
|
||||
<li>
|
||||
<h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
|
||||
</li>
|
||||
<li>
|
||||
<h2><a target="_blank" rel="noopener" href="https://angular.io/cli">CLI Documentation</a></h2>
|
||||
</li>
|
||||
<li>
|
||||
<h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
31
examples/angular/src/app/app.component.spec.ts
Normal file
31
examples/angular/src/app/app.component.spec.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { TestBed, async } from '@angular/core/testing';
|
||||
import { AppComponent } from './app.component';
|
||||
|
||||
describe('AppComponent', () => {
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [AppComponent],
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
it('should create the app', () => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
const app = fixture.debugElement.componentInstance;
|
||||
expect(app).toBeTruthy();
|
||||
});
|
||||
|
||||
it(`should have as title 'angular'`, () => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
const app = fixture.debugElement.componentInstance;
|
||||
expect(app.title).toEqual('angular');
|
||||
});
|
||||
|
||||
it('should render title in a h1 tag', () => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
fixture.detectChanges();
|
||||
const compiled = fixture.debugElement.nativeElement;
|
||||
expect(compiled.querySelector('h1').textContent).toContain(
|
||||
'Welcome to angular!'
|
||||
);
|
||||
});
|
||||
});
|
||||
10
examples/angular/src/app/app.component.ts
Normal file
10
examples/angular/src/app/app.component.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: './app.component.html',
|
||||
styleUrls: ['./app.component.css'],
|
||||
})
|
||||
export class AppComponent {
|
||||
title = 'angular';
|
||||
}
|
||||
12
examples/angular/src/app/app.module.ts
Normal file
12
examples/angular/src/app/app.module.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { AppComponent } from './app.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [AppComponent],
|
||||
imports: [BrowserModule],
|
||||
providers: [],
|
||||
bootstrap: [AppComponent],
|
||||
})
|
||||
export class AppModule {}
|
||||
0
examples/angular/src/assets/.gitkeep
Normal file
0
examples/angular/src/assets/.gitkeep
Normal file
3
examples/angular/src/environments/environment.prod.ts
Normal file
3
examples/angular/src/environments/environment.prod.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export const environment = {
|
||||
production: true,
|
||||
};
|
||||
16
examples/angular/src/environments/environment.ts
Normal file
16
examples/angular/src/environments/environment.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
// This file can be replaced during build by using the `fileReplacements` array.
|
||||
// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
|
||||
// The list of file replacements can be found in `angular.json`.
|
||||
|
||||
export const environment = {
|
||||
production: false,
|
||||
};
|
||||
|
||||
/*
|
||||
* For easier debugging in development mode, you can import the following file
|
||||
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
|
||||
*
|
||||
* This import should be commented out in production mode because it will have a negative impact
|
||||
* on performance if an error is thrown.
|
||||
*/
|
||||
// import 'zone.js/dist/zone-error'; // Included with Angular CLI.
|
||||
BIN
examples/angular/src/favicon.ico
Normal file
BIN
examples/angular/src/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
14
examples/angular/src/index.html
Normal file
14
examples/angular/src/index.html
Normal file
@@ -0,0 +1,14 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Angular</title>
|
||||
<base href="/">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||
</head>
|
||||
<body>
|
||||
<app-root></app-root>
|
||||
</body>
|
||||
</html>
|
||||
13
examples/angular/src/main.ts
Normal file
13
examples/angular/src/main.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { enableProdMode } from '@angular/core';
|
||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||
|
||||
import { AppModule } from './app/app.module';
|
||||
import { environment } from './environments/environment';
|
||||
|
||||
if (environment.production) {
|
||||
enableProdMode();
|
||||
}
|
||||
|
||||
platformBrowserDynamic()
|
||||
.bootstrapModule(AppModule)
|
||||
.catch(err => console.error(err));
|
||||
62
examples/angular/src/polyfills.ts
Normal file
62
examples/angular/src/polyfills.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* This file includes polyfills needed by Angular and is loaded before the app.
|
||||
* You can add your own extra polyfills to this file.
|
||||
*
|
||||
* This file is divided into 2 sections:
|
||||
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
|
||||
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
|
||||
* file.
|
||||
*
|
||||
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
|
||||
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
|
||||
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
|
||||
*
|
||||
* Learn more in https://angular.io/guide/browser-support
|
||||
*/
|
||||
|
||||
/***************************************************************************************************
|
||||
* BROWSER POLYFILLS
|
||||
*/
|
||||
|
||||
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
|
||||
// import 'classlist.js'; // Run `npm install --save classlist.js`.
|
||||
|
||||
/**
|
||||
* Web Animations `@angular/platform-browser/animations`
|
||||
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
|
||||
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
|
||||
*/
|
||||
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
||||
|
||||
/**
|
||||
* By default, zone.js will patch all possible macroTask and DomEvents
|
||||
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
||||
* because those flags need to be set before `zone.js` being loaded, and webpack
|
||||
* will put import in the top of bundle, so user need to create a separate file
|
||||
* in this directory (for example: zone-flags.ts), and put the following flags
|
||||
* into that file, and then add the following code before importing zone.js.
|
||||
* import './zone-flags.ts';
|
||||
*
|
||||
* The flags allowed in zone-flags.ts are listed here.
|
||||
*
|
||||
* The following flags will work for all browsers.
|
||||
*
|
||||
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
|
||||
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
|
||||
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
|
||||
*
|
||||
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
|
||||
* with the following flag, it will bypass `zone.js` patch for IE/Edge
|
||||
*
|
||||
* (window as any).__Zone_enable_cross_context_check = true;
|
||||
*
|
||||
*/
|
||||
|
||||
/***************************************************************************************************
|
||||
* Zone JS is required by default for Angular itself.
|
||||
*/
|
||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||
|
||||
/***************************************************************************************************
|
||||
* APPLICATION IMPORTS
|
||||
*/
|
||||
1
examples/angular/src/styles.css
Normal file
1
examples/angular/src/styles.css
Normal file
@@ -0,0 +1 @@
|
||||
/* You can add global styles to this file, and also import other style files */
|
||||
20
examples/angular/src/test.ts
Normal file
20
examples/angular/src/test.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
||||
|
||||
import 'zone.js/dist/zone-testing';
|
||||
import { getTestBed } from '@angular/core/testing';
|
||||
import {
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting,
|
||||
} from '@angular/platform-browser-dynamic/testing';
|
||||
|
||||
declare const require: any;
|
||||
|
||||
// First, initialize the Angular testing environment.
|
||||
getTestBed().initTestEnvironment(
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting()
|
||||
);
|
||||
// Then we find all the tests.
|
||||
const context = require.context('./', true, /\.spec\.ts$/);
|
||||
// And load the modules.
|
||||
context.keys().map(context);
|
||||
9
examples/angular/tsconfig.app.json
Normal file
9
examples/angular/tsconfig.app.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./out-tsc/app",
|
||||
"types": []
|
||||
},
|
||||
"include": ["src/**/*.ts"],
|
||||
"exclude": ["src/test.ts", "src/**/*.spec.ts"]
|
||||
}
|
||||
21
examples/angular/tsconfig.json
Normal file
21
examples/angular/tsconfig.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"compileOnSave": false,
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./",
|
||||
"outDir": "./dist/out-tsc",
|
||||
"sourceMap": true,
|
||||
"declaration": false,
|
||||
"downlevelIteration": true,
|
||||
"experimentalDecorators": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"importHelpers": true,
|
||||
"target": "es2015",
|
||||
"typeRoots": ["node_modules/@types"],
|
||||
"lib": ["es2018", "dom"]
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"fullTemplateTypeCheck": true,
|
||||
"strictInjectionParameters": true
|
||||
}
|
||||
}
|
||||
9
examples/angular/tsconfig.spec.json
Normal file
9
examples/angular/tsconfig.spec.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./out-tsc/spec",
|
||||
"types": ["jasmine", "node"]
|
||||
},
|
||||
"files": ["src/test.ts", "src/polyfills.ts"],
|
||||
"include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
|
||||
}
|
||||
58
examples/angular/tslint.json
Normal file
58
examples/angular/tslint.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"extends": "tslint:recommended",
|
||||
"rules": {
|
||||
"array-type": false,
|
||||
"arrow-parens": false,
|
||||
"deprecation": {
|
||||
"severity": "warning"
|
||||
},
|
||||
"component-class-suffix": true,
|
||||
"contextual-lifecycle": true,
|
||||
"directive-class-suffix": true,
|
||||
"directive-selector": [true, "attribute", "app", "camelCase"],
|
||||
"component-selector": [true, "element", "app", "kebab-case"],
|
||||
"import-blacklist": [true, "rxjs/Rx"],
|
||||
"interface-name": false,
|
||||
"max-classes-per-file": false,
|
||||
"max-line-length": [true, 140],
|
||||
"member-access": false,
|
||||
"member-ordering": [
|
||||
true,
|
||||
{
|
||||
"order": [
|
||||
"static-field",
|
||||
"instance-field",
|
||||
"static-method",
|
||||
"instance-method"
|
||||
]
|
||||
}
|
||||
],
|
||||
"no-consecutive-blank-lines": false,
|
||||
"no-console": [true, "debug", "info", "time", "timeEnd", "trace"],
|
||||
"no-empty": false,
|
||||
"no-inferrable-types": [true, "ignore-params"],
|
||||
"no-non-null-assertion": true,
|
||||
"no-redundant-jsdoc": true,
|
||||
"no-switch-case-fall-through": true,
|
||||
"no-use-before-declare": true,
|
||||
"no-var-requires": false,
|
||||
"object-literal-key-quotes": [true, "as-needed"],
|
||||
"object-literal-sort-keys": false,
|
||||
"ordered-imports": false,
|
||||
"quotemark": [true, "single"],
|
||||
"trailing-comma": false,
|
||||
"no-conflicting-lifecycle": true,
|
||||
"no-host-metadata-property": true,
|
||||
"no-input-rename": true,
|
||||
"no-inputs-metadata-property": true,
|
||||
"no-output-native": true,
|
||||
"no-output-on-prefix": true,
|
||||
"no-output-rename": true,
|
||||
"no-outputs-metadata-property": true,
|
||||
"template-banana-in-box": true,
|
||||
"template-no-negated-async": true,
|
||||
"use-lifecycle-interface": true,
|
||||
"use-pipe-transform-interface": true
|
||||
},
|
||||
"rulesDirectory": ["codelyzer"]
|
||||
}
|
||||
14
examples/assemble/.gitattributes
vendored
Normal file
14
examples/assemble/.gitattributes
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# Enforce Unix newlines
|
||||
*.* text eol=lf
|
||||
*.css text eol=lf
|
||||
*.html text eol=lf
|
||||
*.js text eol=lf
|
||||
*.json text eol=lf
|
||||
*.less text eol=lf
|
||||
*.md text eol=lf
|
||||
*.yml text eol=lf
|
||||
|
||||
*.jpg binary
|
||||
*.gif binary
|
||||
*.png binary
|
||||
*.jpeg binary
|
||||
47
examples/assemble/.gitignore
vendored
Normal file
47
examples/assemble/.gitignore
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
# Numerous always-ignore extensions
|
||||
.ruby-version
|
||||
*.diff
|
||||
*.err
|
||||
*.orig
|
||||
*.log
|
||||
*.rej
|
||||
*.swo
|
||||
*.swp
|
||||
*.zip
|
||||
*.vi
|
||||
*~
|
||||
|
||||
# OS or Editor folders
|
||||
*.esproj
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
._*
|
||||
.cache
|
||||
.DS_Store
|
||||
.idea
|
||||
.project
|
||||
.settings
|
||||
.tmproj
|
||||
nbproject
|
||||
Thumbs.db
|
||||
|
||||
# Komodo
|
||||
*.komodoproject
|
||||
.komodotools
|
||||
|
||||
# grunt-html-validation
|
||||
validation-status.json
|
||||
validation-report.json
|
||||
|
||||
# Folders to ignore
|
||||
tmp
|
||||
temp
|
||||
TODO.md
|
||||
vendor
|
||||
node_modules
|
||||
bower_components
|
||||
_gh_pages
|
||||
_site
|
||||
_draft
|
||||
.env
|
||||
.env.build
|
||||
1
examples/assemble/.nowignore
Normal file
1
examples/assemble/.nowignore
Normal file
@@ -0,0 +1 @@
|
||||
README.md
|
||||
30
examples/assemble/Gruntfile.js
Normal file
30
examples/assemble/Gruntfile.js
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* assemble-examples <https://github.com/assemble/assemble-examples>
|
||||
*
|
||||
* Copyright (c) 2014 Jon Schlinkert, Brian Woodward, contributors.
|
||||
* Licensed under the MIT license.
|
||||
*/
|
||||
|
||||
module.exports = function(grunt) {
|
||||
'use strict';
|
||||
|
||||
grunt.initConfig({
|
||||
assemble: {
|
||||
options: {
|
||||
flatten: true,
|
||||
partials: ['templates/includes/*.hbs'],
|
||||
layoutdir: 'templates/layouts',
|
||||
layout: 'default.hbs',
|
||||
},
|
||||
site: {
|
||||
files: { 'public/index.js': ['templates/*.hbs'] },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Load the Assemble plugin.
|
||||
grunt.loadNpmTasks('assemble');
|
||||
|
||||
// The default task to run with the `grunt` command.
|
||||
grunt.registerTask('default', ['assemble']);
|
||||
};
|
||||
27
examples/assemble/README.md
Normal file
27
examples/assemble/README.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Assemble Example
|
||||
|
||||
This directory is a brief example of a [Assemble](http://assemble.io/) app that can be deployed with ZEIT Now and zero configuration.
|
||||
|
||||
## Deploy Your Own
|
||||
|
||||
Deploy your own Assemble project with ZEIT Now.
|
||||
|
||||
[](https://zeit.co/new/project?template=https://github.com/zeit/now-examples/tree/master/assemble)
|
||||
|
||||
_Live Example: https://assemble.now-examples.now.sh_
|
||||
|
||||
### How We Created This Example
|
||||
|
||||
To get started with Assemble deployed with ZEIT Now, you can use [Now CLI](https://zeit.co/download) to initialize the project:
|
||||
|
||||
```shell
|
||||
$ now init assemble
|
||||
```
|
||||
|
||||
### Deploying From Your Terminal
|
||||
|
||||
You can deploy your new Assemble project with a single command from your terminal using [Now CLI](https://zeit.co/download):
|
||||
|
||||
```shell
|
||||
$ now
|
||||
```
|
||||
7
examples/assemble/content/blog-post.md
Normal file
7
examples/assemble/content/blog-post.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# Blog post
|
||||
|
||||
> This is an example blog post
|
||||
|
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
||||
|
||||
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||
38
examples/assemble/package.json
Normal file
38
examples/assemble/package.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "assemble-example",
|
||||
"private": true,
|
||||
"description": "Example Assemble project.",
|
||||
"version": "0.1.1",
|
||||
"homepage": "https://github.com/jonschlinkert/assemble-example",
|
||||
"scripts": {
|
||||
"build": "grunt assemble"
|
||||
},
|
||||
"author": {
|
||||
"name": "Jon Schlinkert",
|
||||
"url": "https://github.com/jonschlinkert"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jonschlinkert/assemble-example.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/jonschlinkert/assemble-example/issues"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/jonschlinkert/assemble-example/blob/master/LICENSE-MIT"
|
||||
}
|
||||
],
|
||||
"main": "index.js",
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"assemble": "~0.4.37",
|
||||
"grunt": "~0.4.3",
|
||||
"grunt-cli": "^1.3.2"
|
||||
},
|
||||
"keywords": []
|
||||
}
|
||||
7
examples/assemble/templates/about.hbs
Normal file
7
examples/assemble/templates/about.hbs
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: About
|
||||
description: This is the about page.
|
||||
---
|
||||
<h2>{{description}}</h2>
|
||||
|
||||
{{> button }}
|
||||
5
examples/assemble/templates/blog.hbs
Normal file
5
examples/assemble/templates/blog.hbs
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: Blog
|
||||
---
|
||||
|
||||
{{md 'content/blog-post.md'}}
|
||||
7
examples/assemble/templates/home.hbs
Normal file
7
examples/assemble/templates/home.hbs
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Home
|
||||
description: This is the home page.
|
||||
---
|
||||
<h2>{{description}}</h2>
|
||||
|
||||
{{> button }}
|
||||
1
examples/assemble/templates/includes/button.hbs
Normal file
1
examples/assemble/templates/includes/button.hbs
Normal file
@@ -0,0 +1 @@
|
||||
<a href="https://github.com/assemble/assemble" class="btn btn-default">Star Assemble on GitHub!</a>
|
||||
4
examples/assemble/templates/includes/head.hbs
Normal file
4
examples/assemble/templates/includes/head.hbs
Normal file
@@ -0,0 +1,4 @@
|
||||
<meta charset="UTF-8">
|
||||
<title>{{title}}</title>
|
||||
<link rel="stylesheet" href="http://getbootstrap.com/dist/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="http://getbootstrap.com/assets/css/docs.min.css">
|
||||
11
examples/assemble/templates/layouts/default.hbs
Normal file
11
examples/assemble/templates/layouts/default.hbs
Normal file
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
{{> head }}
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
{{> body }}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
35
examples/aurelia/.babelrc.js
Normal file
35
examples/aurelia/.babelrc.js
Normal file
@@ -0,0 +1,35 @@
|
||||
module.exports = api => {
|
||||
api.cache.using(() => {
|
||||
// cache based on the two env vars
|
||||
return (
|
||||
'babel:' +
|
||||
process.env.BABEL_TARGET +
|
||||
' protractor:' +
|
||||
process.env.IN_PROTRACTOR
|
||||
);
|
||||
});
|
||||
|
||||
return {
|
||||
plugins: [
|
||||
['@babel/plugin-proposal-decorators', { legacy: true }],
|
||||
['@babel/plugin-proposal-class-properties', { loose: true }],
|
||||
],
|
||||
presets: [
|
||||
[
|
||||
'@babel/preset-env',
|
||||
{
|
||||
targets:
|
||||
process.env.BABEL_TARGET === 'node'
|
||||
? {
|
||||
node: process.env.IN_PROTRACTOR ? '6' : 'current',
|
||||
}
|
||||
: {
|
||||
browsers: ['last 2 versions'],
|
||||
},
|
||||
loose: true,
|
||||
modules: process.env.BABEL_TARGET === 'node' ? 'commonjs' : false,
|
||||
},
|
||||
],
|
||||
],
|
||||
};
|
||||
};
|
||||
12
examples/aurelia/.editorconfig
Normal file
12
examples/aurelia/.editorconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
# EditorConfig is awesome: http://EditorConfig.org
|
||||
|
||||
# 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
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
41
examples/aurelia/.gitignore
vendored
Normal file
41
examples/aurelia/.gitignore
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
# You may want to customise this file depending on your Operating System
|
||||
# and the editor that you use.
|
||||
#
|
||||
# We recommend that you use a Global Gitignore for files that are not related
|
||||
# to the project. (https://help.github.com/articles/ignoring-files/#create-a-global-gitignore)
|
||||
|
||||
# OS
|
||||
#
|
||||
# Ref: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
|
||||
# Ref: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
|
||||
# Ref: https://github.com/github/gitignore/blob/master/Global/Linux.gitignore
|
||||
.DS_STORE
|
||||
Thumbs.db
|
||||
|
||||
# Editors
|
||||
#
|
||||
# Ref: https://github.com/github/gitignore/blob/master/Global
|
||||
# Ref: https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore
|
||||
# Ref: https://github.com/github/gitignore/blob/master/Global/VisualStudioCode.gitignore
|
||||
.idea
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
|
||||
# Dependencies
|
||||
node_modules
|
||||
|
||||
# Compiled files
|
||||
/scripts
|
||||
/src/environment.js
|
||||
/src/environment.ts
|
||||
/dist
|
||||
/test/coverage-jest
|
||||
/test/coverage-karma
|
||||
|
||||
# Environment Variables
|
||||
.env
|
||||
.env.build
|
||||
2
examples/aurelia/.nowignore
Normal file
2
examples/aurelia/.nowignore
Normal file
@@ -0,0 +1,2 @@
|
||||
README.md
|
||||
yarn.lock
|
||||
27
examples/aurelia/README.md
Normal file
27
examples/aurelia/README.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Aurelia Example
|
||||
|
||||
This directory is a brief example of an [Aurelia](https://aurelia.io/) app that can be deployed with ZEIT Now and zero configuration.
|
||||
|
||||
## Deploy Your Own
|
||||
|
||||
Deploy your own Aurelia project with ZEIT Now.
|
||||
|
||||
[](https://zeit.co/new/project?template=https://github.com/zeit/now-examples/tree/master/aurelia)
|
||||
|
||||
_Live Example: https://aurelia.now-examples.now.sh_
|
||||
|
||||
### How We Created This Example
|
||||
|
||||
To get started deploying Aurelia with ZEIT Now, you can use the [Aurelia CLI](https://aurelia.io/docs/cli/basics/) to initialize the project:
|
||||
|
||||
```shell
|
||||
$ au new
|
||||
```
|
||||
|
||||
### Deploying From Your Terminal
|
||||
|
||||
You can deploy your new Aurelia project with a single command from your terminal using [Now CLI](https://zeit.co/download):
|
||||
|
||||
```shell
|
||||
$ now
|
||||
```
|
||||
30
examples/aurelia/aurelia_project/aurelia.json
Normal file
30
examples/aurelia/aurelia_project/aurelia.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "aurelia",
|
||||
"type": "project:application",
|
||||
"paths": {
|
||||
"root": "src",
|
||||
"resources": "resources",
|
||||
"elements": "resources/elements",
|
||||
"attributes": "resources/attributes",
|
||||
"valueConverters": "resources/value-converters",
|
||||
"bindingBehaviors": "resources/binding-behaviors"
|
||||
},
|
||||
"transpiler": {
|
||||
"id": "babel",
|
||||
"fileExtension": ".js"
|
||||
},
|
||||
"build": {
|
||||
"options": {
|
||||
"server": "dev",
|
||||
"extractCss": "prod",
|
||||
"coverage": false
|
||||
}
|
||||
},
|
||||
"platform": {
|
||||
"hmr": false,
|
||||
"open": false,
|
||||
"port": 8080,
|
||||
"output": "public"
|
||||
},
|
||||
"packageManager": "yarn"
|
||||
}
|
||||
4
examples/aurelia/aurelia_project/environments/dev.js
Normal file
4
examples/aurelia/aurelia_project/environments/dev.js
Normal file
@@ -0,0 +1,4 @@
|
||||
export default {
|
||||
debug: true,
|
||||
testing: true,
|
||||
};
|
||||
4
examples/aurelia/aurelia_project/environments/prod.js
Normal file
4
examples/aurelia/aurelia_project/environments/prod.js
Normal file
@@ -0,0 +1,4 @@
|
||||
export default {
|
||||
debug: false,
|
||||
testing: false,
|
||||
};
|
||||
4
examples/aurelia/aurelia_project/environments/stage.js
Normal file
4
examples/aurelia/aurelia_project/environments/stage.js
Normal file
@@ -0,0 +1,4 @@
|
||||
export default {
|
||||
debug: true,
|
||||
testing: false,
|
||||
};
|
||||
44
examples/aurelia/aurelia_project/generators/attribute.js
Normal file
44
examples/aurelia/aurelia_project/generators/attribute.js
Normal file
@@ -0,0 +1,44 @@
|
||||
import { inject } from 'aurelia-dependency-injection';
|
||||
import { Project, ProjectItem, CLIOptions, UI } from 'aurelia-cli';
|
||||
|
||||
@inject(Project, CLIOptions, UI)
|
||||
export default class AttributeGenerator {
|
||||
constructor(project, options, ui) {
|
||||
this.project = project;
|
||||
this.options = options;
|
||||
this.ui = ui;
|
||||
}
|
||||
|
||||
async execute() {
|
||||
const name = await this.ui.ensureAnswer(
|
||||
this.options.args[0],
|
||||
'What would you like to call the custom attribute?'
|
||||
);
|
||||
|
||||
let fileName = this.project.makeFileName(name);
|
||||
let className = this.project.makeClassName(name);
|
||||
|
||||
this.project.attributes.add(
|
||||
ProjectItem.text(`${fileName}.js`, this.generateSource(className))
|
||||
);
|
||||
|
||||
await this.project.commitChanges();
|
||||
await this.ui.log(`Created ${fileName}.`);
|
||||
}
|
||||
|
||||
generateSource(className) {
|
||||
return `import {inject} from 'aurelia-framework';
|
||||
|
||||
@inject(Element)
|
||||
export class ${className}CustomAttribute {
|
||||
constructor(element) {
|
||||
this.element = element;
|
||||
}
|
||||
|
||||
valueChanged(newValue, oldValue) {
|
||||
//
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "attribute",
|
||||
"description": "Creates a custom attribute class and places it in the project resources."
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
import { inject } from 'aurelia-dependency-injection';
|
||||
import { Project, ProjectItem, CLIOptions, UI } from 'aurelia-cli';
|
||||
|
||||
@inject(Project, CLIOptions, UI)
|
||||
export default class BindingBehaviorGenerator {
|
||||
constructor(project, options, ui) {
|
||||
this.project = project;
|
||||
this.options = options;
|
||||
this.ui = ui;
|
||||
}
|
||||
|
||||
async execute() {
|
||||
const name = await this.ui.ensureAnswer(
|
||||
this.options.args[0],
|
||||
'What would you like to call the binding behavior?'
|
||||
);
|
||||
|
||||
let fileName = this.project.makeFileName(name);
|
||||
let className = this.project.makeClassName(name);
|
||||
|
||||
this.project.bindingBehaviors.add(
|
||||
ProjectItem.text(`${fileName}.js`, this.generateSource(className))
|
||||
);
|
||||
|
||||
await this.project.commitChanges();
|
||||
await this.ui.log(`Created ${fileName}.`);
|
||||
}
|
||||
|
||||
generateSource(className) {
|
||||
return `export class ${className}BindingBehavior {
|
||||
bind(binding, source) {
|
||||
//
|
||||
}
|
||||
|
||||
unbind(binding, source) {
|
||||
//
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "binding-behavior",
|
||||
"description": "Creates a binding behavior class and places it in the project resources."
|
||||
}
|
||||
64
examples/aurelia/aurelia_project/generators/component.js
Normal file
64
examples/aurelia/aurelia_project/generators/component.js
Normal file
@@ -0,0 +1,64 @@
|
||||
import { inject } from 'aurelia-dependency-injection';
|
||||
import { Project, ProjectItem, CLIOptions, UI } from 'aurelia-cli';
|
||||
|
||||
var path = require('path');
|
||||
|
||||
@inject(Project, CLIOptions, UI)
|
||||
export default class ElementGenerator {
|
||||
constructor(project, options, ui) {
|
||||
this.project = project;
|
||||
this.options = options;
|
||||
this.ui = ui;
|
||||
}
|
||||
|
||||
async execute() {
|
||||
const name = await this.ui.ensureAnswer(
|
||||
this.options.args[0],
|
||||
'What would you like to call the component?'
|
||||
);
|
||||
|
||||
const subFolders = await this.ui.ensureAnswer(
|
||||
this.options.args[1],
|
||||
"What sub-folder would you like to add it to?\nIf it doesn't exist it will be created for you.\n\nDefault folder is the source folder (src).",
|
||||
'.'
|
||||
);
|
||||
|
||||
let fileName = this.project.makeFileName(name);
|
||||
let className = this.project.makeClassName(name);
|
||||
|
||||
this.project.root.add(
|
||||
ProjectItem.text(
|
||||
path.join(subFolders, fileName + '.js'),
|
||||
this.generateJSSource(className)
|
||||
),
|
||||
ProjectItem.text(
|
||||
path.join(subFolders, fileName + '.html'),
|
||||
this.generateHTMLSource(className)
|
||||
)
|
||||
);
|
||||
|
||||
await this.project.commitChanges();
|
||||
await this.ui.log(
|
||||
`Created ${name} in the '${path.join(
|
||||
this.project.root.name,
|
||||
subFolders
|
||||
)}' folder`
|
||||
);
|
||||
}
|
||||
|
||||
generateJSSource(className) {
|
||||
return `export class ${className} {
|
||||
constructor() {
|
||||
this.message = 'Hello world';
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
||||
generateHTMLSource(className) {
|
||||
return `<template>
|
||||
<h1>\${message}</h1>
|
||||
</template>
|
||||
`;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "component",
|
||||
"description": "Creates a custom component class and template (view model and view), placing them in the project source folder (or optionally in sub folders)."
|
||||
}
|
||||
49
examples/aurelia/aurelia_project/generators/element.js
Normal file
49
examples/aurelia/aurelia_project/generators/element.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import { inject } from 'aurelia-dependency-injection';
|
||||
import { Project, ProjectItem, CLIOptions, UI } from 'aurelia-cli';
|
||||
|
||||
@inject(Project, CLIOptions, UI)
|
||||
export default class ElementGenerator {
|
||||
constructor(project, options, ui) {
|
||||
this.project = project;
|
||||
this.options = options;
|
||||
this.ui = ui;
|
||||
}
|
||||
|
||||
async execute() {
|
||||
const name = await this.ui.ensureAnswer(
|
||||
this.options.args[0],
|
||||
'What would you like to call the custom element?'
|
||||
);
|
||||
|
||||
let fileName = this.project.makeFileName(name);
|
||||
let className = this.project.makeClassName(name);
|
||||
|
||||
this.project.elements.add(
|
||||
ProjectItem.text(`${fileName}.js`, this.generateJSSource(className)),
|
||||
ProjectItem.text(`${fileName}.html`, this.generateHTMLSource(className))
|
||||
);
|
||||
|
||||
await this.project.commitChanges();
|
||||
await this.ui.log(`Created ${fileName}.`);
|
||||
}
|
||||
|
||||
generateJSSource(className) {
|
||||
return `import {bindable} from 'aurelia-framework';
|
||||
|
||||
export class ${className} {
|
||||
@bindable value;
|
||||
|
||||
valueChanged(newValue, oldValue) {
|
||||
//
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
|
||||
generateHTMLSource(className) {
|
||||
return `<template>
|
||||
<h1>\${value}</h1>
|
||||
</template>
|
||||
`;
|
||||
}
|
||||
}
|
||||
4
examples/aurelia/aurelia_project/generators/element.json
Normal file
4
examples/aurelia/aurelia_project/generators/element.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "element",
|
||||
"description": "Creates a custom element class and template, placing them in the project resources."
|
||||
}
|
||||
72
examples/aurelia/aurelia_project/generators/generator.js
Normal file
72
examples/aurelia/aurelia_project/generators/generator.js
Normal file
@@ -0,0 +1,72 @@
|
||||
import { inject } from 'aurelia-dependency-injection';
|
||||
import { Project, ProjectItem, CLIOptions, UI } from 'aurelia-cli';
|
||||
|
||||
@inject(Project, CLIOptions, UI)
|
||||
export default class GeneratorGenerator {
|
||||
constructor(project, options, ui) {
|
||||
this.project = project;
|
||||
this.options = options;
|
||||
this.ui = ui;
|
||||
}
|
||||
|
||||
async execute() {
|
||||
const name = await this.ui.ensureAnswer(
|
||||
this.options.args[0],
|
||||
'What would you like to call the generator?'
|
||||
);
|
||||
|
||||
let fileName = this.project.makeFileName(name);
|
||||
let className = this.project.makeClassName(name);
|
||||
|
||||
this.project.generators.add(
|
||||
ProjectItem.text(`${fileName}.js`, this.generateSource(className))
|
||||
);
|
||||
|
||||
await this.project.commitChanges();
|
||||
await this.ui.log(`Created ${fileName}.`);
|
||||
}
|
||||
|
||||
generateSource(className) {
|
||||
return `import {inject} from 'aurelia-dependency-injection';
|
||||
import {Project, ProjectItem, CLIOptions, UI} from 'aurelia-cli';
|
||||
|
||||
@inject(Project, CLIOptions, UI)
|
||||
export default class ${className}Generator {
|
||||
constructor(project, options, ui) {
|
||||
this.project = project;
|
||||
this.options = options;
|
||||
this.ui = ui;
|
||||
}
|
||||
|
||||
execute() {
|
||||
return this.ui
|
||||
.ensureAnswer(this.options.args[0], 'What would you like to call the new item?')
|
||||
.then(name => {
|
||||
let fileName = this.project.makeFileName(name);
|
||||
let className = this.project.makeClassName(name);
|
||||
|
||||
this.project.elements.add(
|
||||
ProjectItem.text(\`\${fileName}.js\`, this.generateSource(className))
|
||||
);
|
||||
|
||||
return this.project.commitChanges()
|
||||
.then(() => this.ui.log(\`Created \${fileName}.\`));
|
||||
});
|
||||
}
|
||||
|
||||
generateSource(className) {
|
||||
return \`import {bindable} from 'aurelia-framework';
|
||||
|
||||
export class \${className} {
|
||||
@bindable value;
|
||||
|
||||
valueChanged(newValue, oldValue) {
|
||||
//
|
||||
}
|
||||
}
|
||||
\`
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "generator",
|
||||
"description": "Creates a generator class and places it in the project generators folder."
|
||||
}
|
||||
39
examples/aurelia/aurelia_project/generators/task.js
Normal file
39
examples/aurelia/aurelia_project/generators/task.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import { inject } from 'aurelia-dependency-injection';
|
||||
import { Project, ProjectItem, CLIOptions, UI } from 'aurelia-cli';
|
||||
|
||||
@inject(Project, CLIOptions, UI)
|
||||
export default class TaskGenerator {
|
||||
constructor(project, options, ui) {
|
||||
this.project = project;
|
||||
this.options = options;
|
||||
this.ui = ui;
|
||||
}
|
||||
|
||||
async execute() {
|
||||
const name = await this.ui.ensureAnswer(
|
||||
this.options.args[0],
|
||||
'What would you like to call the task?'
|
||||
);
|
||||
|
||||
let fileName = this.project.makeFileName(name);
|
||||
let functionName = this.project.makeFunctionName(name);
|
||||
|
||||
this.project.tasks.add(
|
||||
ProjectItem.text(`${fileName}.js`, this.generateSource(functionName))
|
||||
);
|
||||
|
||||
await this.project.commitChanges();
|
||||
await this.ui.log(`Created ${fileName}.`);
|
||||
}
|
||||
|
||||
generateSource(functionName) {
|
||||
return `import gulp from 'gulp';
|
||||
import project from '../aurelia.json';
|
||||
|
||||
export default function ${functionName}() {
|
||||
return gulp.src(project.paths.???)
|
||||
.pipe(gulp.dest(project.paths.output));
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
4
examples/aurelia/aurelia_project/generators/task.json
Normal file
4
examples/aurelia/aurelia_project/generators/task.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "task",
|
||||
"description": "Creates a task and places it in the project tasks folder."
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user