mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-11 12:57:46 +00:00
Compare commits
1732 Commits
@now/pytho
...
@now/pytho
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
888ff83309 | ||
|
|
7191421470 | ||
|
|
e9c9aa5ce1 | ||
|
|
d98f3d8140 | ||
|
|
fbf659e4e1 | ||
|
|
6f7069aadd | ||
|
|
cef2c889f6 | ||
|
|
e42d6c422a | ||
|
|
2e9241b454 | ||
|
|
257a3b07fc | ||
|
|
df9322b392 | ||
|
|
28b5476bf3 | ||
|
|
70a61f045f | ||
|
|
238a8a8593 | ||
|
|
6f2d5c0045 | ||
|
|
fc798da398 | ||
|
|
0804483316 | ||
|
|
4a087f842e | ||
|
|
01c7bf0059 | ||
|
|
6c439516db | ||
|
|
0db4ee69ef | ||
|
|
aec8a7ac9a | ||
|
|
882bc8cb99 | ||
|
|
9aad701dfd | ||
|
|
f224f574be | ||
|
|
e201eaa315 | ||
|
|
b0ed1f2be0 | ||
|
|
4ac33e1c03 | ||
|
|
27ca517666 | ||
|
|
734e9c072d | ||
|
|
8db54f3093 | ||
|
|
886c0718d6 | ||
|
|
e160a2f21f | ||
|
|
e09a418423 | ||
|
|
52d4464368 | ||
|
|
4dc635e5f2 | ||
|
|
510fb7ee7e | ||
|
|
243451e94b | ||
|
|
11bbda977d | ||
|
|
62c050f394 | ||
|
|
bd5a013312 | ||
|
|
1823cf452e | ||
|
|
c426d72ccf | ||
|
|
ddf59c052d | ||
|
|
1dcf6e7fb1 | ||
|
|
d4f4792988 | ||
|
|
7e1f2bd10e | ||
|
|
a80a1d0c1d | ||
|
|
8ff747b4d7 | ||
|
|
aa63b5a581 | ||
|
|
2094ec3c99 | ||
|
|
bf30d10211 | ||
|
|
ccc03c9c6e | ||
|
|
4b7367e2dc | ||
|
|
00aa56a095 | ||
|
|
56ae93a2a5 | ||
|
|
adb32a09d3 | ||
|
|
3358d8e44c | ||
|
|
c3bd2698e8 | ||
|
|
a7baa4761d | ||
|
|
5dd2daa970 | ||
|
|
dd36a489ed | ||
|
|
2e742209e3 | ||
|
|
8d13464cba | ||
|
|
20fdcfa0af | ||
|
|
fac004f83c | ||
|
|
5fee4bbad1 | ||
|
|
18e4b18839 | ||
|
|
b8627fd384 | ||
|
|
4e2db6f8a5 | ||
|
|
b685a3afdd | ||
|
|
aea3f58970 | ||
|
|
b0bb90dc11 | ||
|
|
2132c2463f | ||
|
|
60bf6e2420 | ||
|
|
9badc9048c | ||
|
|
a74c1921f8 | ||
|
|
e6044f2e8d | ||
|
|
78d1afa25e | ||
|
|
4792adf524 | ||
|
|
4d8a99141b | ||
|
|
7954ddc1d0 | ||
|
|
216a1fd9d2 | ||
|
|
e5add6750c | ||
|
|
b7533650e1 | ||
|
|
6272f5ce5c | ||
|
|
bde0538efe | ||
|
|
5e6775fca0 | ||
|
|
e05e0dc40e | ||
|
|
96dbc6d348 | ||
|
|
0a63bd47e8 | ||
|
|
35dd50eb61 | ||
|
|
f70ed94c8c | ||
|
|
fb0c8600a2 | ||
|
|
5023bdd25d | ||
|
|
bf4917ccf2 | ||
|
|
64aff3aef4 | ||
|
|
62b87d1ed1 | ||
|
|
5872114c87 | ||
|
|
ce04246051 | ||
|
|
02b03d4533 | ||
|
|
ea396a2c20 | ||
|
|
8c083acf78 | ||
|
|
4edc1ff2ca | ||
|
|
ce76dc980d | ||
|
|
fc4cb9a044 | ||
|
|
a83eb5e729 | ||
|
|
1ab6af86c8 | ||
|
|
b95d2bdcdc | ||
|
|
29222fda9d | ||
|
|
13b22b38fd | ||
|
|
9f9d5546ef | ||
|
|
22d93baf20 | ||
|
|
a63ea8c884 | ||
|
|
41023c488e | ||
|
|
ebffc8af43 | ||
|
|
e7cb9fc5e2 | ||
|
|
bf92ffc1a7 | ||
|
|
4f88089cfe | ||
|
|
c0416189eb | ||
|
|
e2105cec87 | ||
|
|
6cb89c3cab | ||
|
|
9a1877de56 | ||
|
|
ea36b9e11c | ||
|
|
478104cf99 | ||
|
|
c1dd0cfaba | ||
|
|
15ce92b9e7 | ||
|
|
dd1b5f3421 | ||
|
|
b8a11be1a5 | ||
|
|
1e308dc6ce | ||
|
|
117ce28ddc | ||
|
|
85296de51d | ||
|
|
0b659326d9 | ||
|
|
f35f244deb | ||
|
|
9ee86df69d | ||
|
|
daa5cbdd4b | ||
|
|
17b7a7bea9 | ||
|
|
bcbe0d8060 | ||
|
|
3fdea52ff9 | ||
|
|
3cd5a87e20 | ||
|
|
4625f66ebd | ||
|
|
0c6c6677a7 | ||
|
|
2db627b79d | ||
|
|
7064f4ee40 | ||
|
|
bf06e9c63c | ||
|
|
c65336e63b | ||
|
|
ac72e944a7 | ||
|
|
fdb74b7971 | ||
|
|
b7eca1d069 | ||
|
|
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 | ||
|
|
b7f8f7c366 | ||
|
|
9adbb10fca | ||
|
|
6646b97a65 | ||
|
|
939c3a11d7 | ||
|
|
363c3ea39f | ||
|
|
935fca6986 | ||
|
|
7e20c585a1 | ||
|
|
7ecdfbb043 | ||
|
|
2a39f61f34 | ||
|
|
6e0182af02 | ||
|
|
1fd630460c | ||
|
|
4583880377 | ||
|
|
abacaf8d40 | ||
|
|
de8829ccfe | ||
|
|
ba18a3a0cb | ||
|
|
0a0f13994f | ||
|
|
eff29463e7 | ||
|
|
9c62b74122 | ||
|
|
5f19e63409 | ||
|
|
1fd4c3a278 | ||
|
|
281b385188 | ||
|
|
4e4b672af9 | ||
|
|
b70ac1ca1c | ||
|
|
36fc64d0ed | ||
|
|
2dee810e74 | ||
|
|
4fa468299f | ||
|
|
90eac2cf54 | ||
|
|
63ad08074c | ||
|
|
31fcc56dbd | ||
|
|
958b067303 | ||
|
|
6af183c7f1 | ||
|
|
92d9f2d809 | ||
|
|
4d7aaff8d0 | ||
|
|
68b19c8122 | ||
|
|
5b600fea44 | ||
|
|
2c867295e6 | ||
|
|
996c0ffffc | ||
|
|
2344357113 | ||
|
|
e919c591fe | ||
|
|
88516137de | ||
|
|
f515138074 | ||
|
|
6d04016054 | ||
|
|
eb968d813c | ||
|
|
37881e0830 | ||
|
|
e3dd13ba9e | ||
|
|
9054b7f2f5 | ||
|
|
17cd17ac96 | ||
|
|
d7c2d071c1 | ||
|
|
483a117a6a | ||
|
|
3c630343d0 | ||
|
|
fe61b31197 | ||
|
|
af14d0af4b | ||
|
|
e04e6bb188 | ||
|
|
e36f3d355e | ||
|
|
24891e3ce8 | ||
|
|
147c703cce | ||
|
|
3aa92c3f27 | ||
|
|
0d29e37dcb | ||
|
|
089b29c2ca | ||
|
|
af513c249c | ||
|
|
d567b5f2fc | ||
|
|
c336353020 | ||
|
|
523b9de1e0 | ||
|
|
6151f11657 | ||
|
|
c0d3847aab | ||
|
|
93d295ac5c | ||
|
|
8430de13c2 | ||
|
|
c78af57d76 | ||
|
|
172605d77d | ||
|
|
d7dc5a0c45 | ||
|
|
75edd0bab5 | ||
|
|
ac60b3660c | ||
|
|
372a674625 | ||
|
|
fafeadb7ba | ||
|
|
966b1e763f | ||
|
|
6e22c07ecc | ||
|
|
857e4ef874 | ||
|
|
aa03f69bdc | ||
|
|
8fc77139e0 | ||
|
|
bb60e1a5fe | ||
|
|
87802cb002 | ||
|
|
cac9f807cc | ||
|
|
a0b1254820 | ||
|
|
0faff4132b | ||
|
|
1793a1287d | ||
|
|
5b572239c1 | ||
|
|
f6a66d937e | ||
|
|
2cf9a2f489 | ||
|
|
454f4dcc61 | ||
|
|
6e1065fde2 | ||
|
|
80ce06b20c | ||
|
|
99f3ab8b64 | ||
|
|
ca4f6d2491 | ||
|
|
dcd57e148f | ||
|
|
18fa193a17 | ||
|
|
34dce350be | ||
|
|
c7caa7b905 | ||
|
|
2ceb2a78aa | ||
|
|
d97da21afc | ||
|
|
7b52b26ff0 | ||
|
|
3c958a4429 | ||
|
|
d8660b1db3 | ||
|
|
0996640798 | ||
|
|
079f4ba6bf | ||
|
|
bdf78efbfb | ||
|
|
07ba180ede | ||
|
|
94a2b017d4 | ||
|
|
37c06c89d0 | ||
|
|
42ffc2dafb | ||
|
|
cf65fabe27 | ||
|
|
03b5a0c0bf | ||
|
|
f76abe3372 | ||
|
|
cdd43b74ae | ||
|
|
fa633d0e02 | ||
|
|
9b46e60c09 | ||
|
|
58eef7f394 | ||
|
|
e97e0fbb64 | ||
|
|
b82876fd82 | ||
|
|
02ad32ec22 | ||
|
|
433fe35c93 | ||
|
|
90c59d6ae2 | ||
|
|
33672c3d78 | ||
|
|
59ae7a989a | ||
|
|
5767e9e8c2 | ||
|
|
e62b9e8ed9 | ||
|
|
59597ccd17 | ||
|
|
7be49c66ef | ||
|
|
1380e25ef3 | ||
|
|
e825ce746f | ||
|
|
dc9b9c240a | ||
|
|
84d8f73a2d | ||
|
|
b24cfb605b | ||
|
|
57f66fe62f | ||
|
|
d2cd4a3c5a | ||
|
|
4e58951808 | ||
|
|
fbd805aad7 | ||
|
|
2a2705c6e3 | ||
|
|
986c957183 | ||
|
|
c5d063e876 | ||
|
|
110e1445fa | ||
|
|
f9355cbc77 | ||
|
|
0a9bbd902f | ||
|
|
c8c960f785 | ||
|
|
fb0f4beca6 | ||
|
|
21398d7214 | ||
|
|
a5a56836a8 | ||
|
|
e7fd1e3c3f | ||
|
|
64b24bde56 | ||
|
|
613958d6a5 | ||
|
|
21e4ebc7a9 | ||
|
|
16ef6229e4 | ||
|
|
9ecb011732 | ||
|
|
de48e28fa1 | ||
|
|
3aecb0905a | ||
|
|
c1b2da1d57 | ||
|
|
c4bee64abd | ||
|
|
dbf9c5c46b | ||
|
|
630ec06d48 | ||
|
|
d38e464bfe | ||
|
|
49bd2439a7 | ||
|
|
e97314a3c7 | ||
|
|
acb46cef14 | ||
|
|
06b9ff233e | ||
|
|
a189e72fbe | ||
|
|
75e6b15199 | ||
|
|
85170d7231 | ||
|
|
eeffb55021 | ||
|
|
1fe8317f1e | ||
|
|
6398ef194c | ||
|
|
e4d691eda1 | ||
|
|
d9bb6c8a54 | ||
|
|
c3020e3071 | ||
|
|
e3f31e3e52 | ||
|
|
8c40e1be0f | ||
|
|
b278c7148b | ||
|
|
2791338e04 | ||
|
|
0af87dc2be | ||
|
|
32134dd1f5 | ||
|
|
bdd4441d5c | ||
|
|
99bc1ae7b6 | ||
|
|
32aa94bf3d | ||
|
|
3201227430 | ||
|
|
09a421c23b | ||
|
|
73ce59b492 | ||
|
|
7911d5857d | ||
|
|
05a44a0c70 | ||
|
|
efd8863f8b | ||
|
|
6699028342 | ||
|
|
aa9a234a0b | ||
|
|
91f836818c | ||
|
|
5e37bdc54c | ||
|
|
31c48df795 | ||
|
|
0383b9112b | ||
|
|
f4fe8be4df | ||
|
|
cc643e373d | ||
|
|
651429cb52 | ||
|
|
a374a5ce96 | ||
|
|
bbb4501e9b | ||
|
|
947f9093be | ||
|
|
42f16b6d1e | ||
|
|
9ae747a612 | ||
|
|
9217c5e436 | ||
|
|
d23e7b1054 | ||
|
|
d23eab61cf | ||
|
|
e631de4cfe | ||
|
|
0814bef36f | ||
|
|
ddce65416c | ||
|
|
9e66f9bb08 | ||
|
|
961fbfde55 | ||
|
|
22550c0c48 | ||
|
|
4336f48d22 | ||
|
|
cf299562e3 | ||
|
|
2cd5b35603 | ||
|
|
81abab81f7 | ||
|
|
ad0d7bd560 | ||
|
|
140d10e87b | ||
|
|
6bebc49607 | ||
|
|
a3aa855290 | ||
|
|
a853cb84cd | ||
|
|
a07082ca5c | ||
|
|
81c27771bc | ||
|
|
502f78e835 | ||
|
|
d8935cf121 | ||
|
|
e3c61ac5b7 | ||
|
|
e8e95b8df6 | ||
|
|
f55be4f2de | ||
|
|
ef081cc4b8 | ||
|
|
8e2444d3cd | ||
|
|
f26407e282 | ||
|
|
cded895bf7 | ||
|
|
1211ee4fb3 | ||
|
|
a42bdefe1a | ||
|
|
f025f1007b | ||
|
|
1c11a57371 | ||
|
|
db2d033484 | ||
|
|
40537c9eba | ||
|
|
5cabcb7a27 | ||
|
|
1be9ac59f0 | ||
|
|
64356baed3 | ||
|
|
c944706a0f | ||
|
|
f15deaa51e | ||
|
|
61c3b94460 | ||
|
|
89b018240f | ||
|
|
0124dc9969 | ||
|
|
936441c8a6 | ||
|
|
c80570e096 | ||
|
|
11c67e1c4c | ||
|
|
0d1c0e0f30 | ||
|
|
f50572813e | ||
|
|
648b3a4ae2 | ||
|
|
efe114fa86 | ||
|
|
4445d5e00f | ||
|
|
96b3c1ee7f | ||
|
|
e1a770ac29 | ||
|
|
db1a2e6482 | ||
|
|
ecdde7c367 | ||
|
|
4d31291ea4 | ||
|
|
b70bd670fd | ||
|
|
d3017649e0 | ||
|
|
e970584219 | ||
|
|
c6205293a9 | ||
|
|
cb47f7bf4b | ||
|
|
a60f107e4b | ||
|
|
6e43c322cc | ||
|
|
4b6387bdb5 | ||
|
|
bcd770c0fe | ||
|
|
bb8c7e9f3b | ||
|
|
6e469272c3 | ||
|
|
5e7fa71148 | ||
|
|
12d9a4b4f4 | ||
|
|
084ab2d0e5 | ||
|
|
4ca0d936aa | ||
|
|
5d5a55e7e1 | ||
|
|
e033e5e0ca | ||
|
|
7cb36ef1dd | ||
|
|
9aafb168e9 | ||
|
|
fbb5caf955 | ||
|
|
3f93da550b | ||
|
|
a194e0cc6e | ||
|
|
b007200bcf | ||
|
|
05d88da887 | ||
|
|
0a429bb2f3 | ||
|
|
468ccb7598 | ||
|
|
e47f6f55dc | ||
|
|
17deed91b2 | ||
|
|
cc0bd9f0a2 | ||
|
|
f6f99fef25 | ||
|
|
eb252edc7f | ||
|
|
f3213dbcdc | ||
|
|
c637da7710 | ||
|
|
ab05595582 | ||
|
|
ba8e714329 | ||
|
|
ef86bb0bd9 | ||
|
|
be18b54bfd | ||
|
|
ed168db23c | ||
|
|
236f5f4159 | ||
|
|
e44a91634e | ||
|
|
8b9426eb6c | ||
|
|
c62c57f122 | ||
|
|
c81db0c8d2 | ||
|
|
1c64990e9f | ||
|
|
f1dc7fd14a | ||
|
|
6079d4be25 | ||
|
|
2c4b8335ce | ||
|
|
9bd2f22d5c | ||
|
|
7c421f92e1 | ||
|
|
0626db51bd | ||
|
|
dc29a8b816 | ||
|
|
e00e5e18ea | ||
|
|
d0999e7937 | ||
|
|
158cfad978 | ||
|
|
9145b43a62 | ||
|
|
479d271356 | ||
|
|
8119f4cad2 | ||
|
|
e73b32e9cc | ||
|
|
45bd08e4e5 | ||
|
|
4528243b5c | ||
|
|
bd741cfbeb | ||
|
|
b3b10f0fd7 | ||
|
|
084c014fff | ||
|
|
63614e5303 | ||
|
|
099d2c8195 | ||
|
|
ae813423d8 | ||
|
|
2a5f3f779e | ||
|
|
89e1d83ad4 | ||
|
|
ce23f9e204 | ||
|
|
743eb21682 | ||
|
|
b9f5de2b7a | ||
|
|
229a62d8b6 | ||
|
|
52a6e60f78 | ||
|
|
a7cb747130 | ||
|
|
918d60576f | ||
|
|
62111977fd | ||
|
|
00c05b95e4 | ||
|
|
9ee83b858c | ||
|
|
e4a181321a | ||
|
|
dd6f6aa418 | ||
|
|
b37bfbc1ed | ||
|
|
dd06c4c63d | ||
|
|
a6174cde03 | ||
|
|
c85ab97321 | ||
|
|
957fe9084a | ||
|
|
70f72e5bb8 | ||
|
|
4feb961091 | ||
|
|
6ddc252978 | ||
|
|
5eca7cf5f7 | ||
|
|
76486246c5 | ||
|
|
740a7c8886 | ||
|
|
40b69b4924 | ||
|
|
c5ef4b1dc5 | ||
|
|
ef793bf7e9 | ||
|
|
2be1dd4fcb | ||
|
|
a734eb79d9 | ||
|
|
24dc2a36de | ||
|
|
12881c1b57 | ||
|
|
c66188a6f2 | ||
|
|
61457b532a | ||
|
|
d2ff3749ca | ||
|
|
38bc7cc6d6 | ||
|
|
413fdd7c39 | ||
|
|
f48bb493b0 | ||
|
|
962c5db9fe | ||
|
|
9e961b479c | ||
|
|
718100fafc | ||
|
|
2b38f545d0 | ||
|
|
55b1327119 | ||
|
|
a75ec505ad | ||
|
|
36b1e129b4 | ||
|
|
331b6e0a23 | ||
|
|
fc72ecb223 | ||
|
|
ca51cbcc6b | ||
|
|
6ce8acc4db | ||
|
|
a9edec1619 | ||
|
|
8638d17d87 | ||
|
|
db6ae2998b | ||
|
|
d667a83af5 | ||
|
|
f2a1fb50da | ||
|
|
eb356a5d3d | ||
|
|
efe0ca57f0 | ||
|
|
409b7099be | ||
|
|
e6653992a7 | ||
|
|
c133e81f6e | ||
|
|
28bfcb4c58 | ||
|
|
5cf8f8a70a | ||
|
|
b31ab033c2 | ||
|
|
24a3b99ee3 | ||
|
|
9a6ad1ae43 | ||
|
|
687ef375c8 | ||
|
|
538525e639 | ||
|
|
aff5a0cbed | ||
|
|
b1b1529bd6 | ||
|
|
bb934f0146 | ||
|
|
7d2c5dc39a | ||
|
|
9894869427 | ||
|
|
8e0c1da441 | ||
|
|
6a165e8377 | ||
|
|
eeed5a8273 | ||
|
|
75d98c649a | ||
|
|
d54cc4df51 | ||
|
|
f211f1fa70 | ||
|
|
f60a373479 | ||
|
|
80a82ba276 | ||
|
|
8a3d0fb370 | ||
|
|
20c2930a90 | ||
|
|
bccf602496 | ||
|
|
ed92ef8952 | ||
|
|
1b9c14bd30 | ||
|
|
c287cbeb22 | ||
|
|
d29b1b9cfa | ||
|
|
49293ae44b | ||
|
|
39103f5ae6 | ||
|
|
af2c894fb9 | ||
|
|
42f9745420 | ||
|
|
f016f05c11 | ||
|
|
257f5f293e | ||
|
|
35c3d87055 | ||
|
|
a78813bd74 | ||
|
|
05c2f69523 | ||
|
|
e389a836e1 | ||
|
|
64c526fe1d | ||
|
|
e132d74aa8 | ||
|
|
975c8dc5fc | ||
|
|
3d2929b345 | ||
|
|
c91e529782 | ||
|
|
495ba3bf98 | ||
|
|
c799886f53 | ||
|
|
bcbaad4371 | ||
|
|
91c80ca0a9 | ||
|
|
e7e0ab7d0d | ||
|
|
0b6b74938f | ||
|
|
256ca8796f | ||
|
|
17c659124b | ||
|
|
bcac213114 | ||
|
|
7f4b2bdc87 | ||
|
|
94a958f460 | ||
|
|
7a02249f37 | ||
|
|
94681f28c6 | ||
|
|
9fd1cee6f0 | ||
|
|
2054bb06f1 | ||
|
|
c0b5a01cae | ||
|
|
0bbe5f7806 | ||
|
|
9e25d8e11c | ||
|
|
8623c5201c | ||
|
|
862728f889 | ||
|
|
ad4e20c7e6 | ||
|
|
62d782255a | ||
|
|
3f18d24915 | ||
|
|
23318d9fc9 | ||
|
|
c413cc7349 | ||
|
|
f268a1b390 | ||
|
|
19dd33b037 | ||
|
|
a29890c8ee | ||
|
|
6e3a495914 | ||
|
|
e1005deeb3 | ||
|
|
c61502e24c | ||
|
|
7674a4af4a | ||
|
|
0245a04db9 | ||
|
|
340537bc0b | ||
|
|
c9383b2535 | ||
|
|
eae9f9ed42 | ||
|
|
dfa134e8e4 | ||
|
|
bb7b99bcf9 | ||
|
|
074e96e117 | ||
|
|
0b82c74c58 | ||
|
|
5cc4af257e | ||
|
|
1979e2074f | ||
|
|
e788743f58 | ||
|
|
dae525e56a | ||
|
|
0e32313395 | ||
|
|
2ea1b00fda | ||
|
|
398b371ded | ||
|
|
da89cecaab | ||
|
|
e821d28ccd | ||
|
|
3cd2de7728 | ||
|
|
8e32c66840 | ||
|
|
7716bb5439 | ||
|
|
42a8dc14b0 | ||
|
|
97ff4515ae | ||
|
|
ad6c04b78d | ||
|
|
68c1f7163f | ||
|
|
b94e8a1563 | ||
|
|
60a5659dff | ||
|
|
06b8ccb672 | ||
|
|
ca06186cfe | ||
|
|
b5349fe6a5 | ||
|
|
7ac3c75ee8 | ||
|
|
00437fe3f8 | ||
|
|
930648da13 | ||
|
|
4945218ea6 | ||
|
|
12c3987e94 | ||
|
|
18cedcb7e6 | ||
|
|
925af8066d | ||
|
|
5f46eb9dd7 | ||
|
|
24245bd4bb | ||
|
|
005dd24b18 | ||
|
|
116ee34a10 | ||
|
|
81cf441f66 | ||
|
|
c5a588744a | ||
|
|
48c126a911 | ||
|
|
18c295a88e | ||
|
|
893871e043 | ||
|
|
f2b1c89a53 | ||
|
|
271d7ffc29 | ||
|
|
fd99217303 | ||
|
|
77d07f838f | ||
|
|
1f81d80505 | ||
|
|
7e950496ae | ||
|
|
ec43780e1b | ||
|
|
66fe14d8e2 | ||
|
|
a29abc7d45 | ||
|
|
5d329e0bc3 | ||
|
|
2de9edeed4 | ||
|
|
954d433f6f | ||
|
|
b18196b394 | ||
|
|
926c14e0ef | ||
|
|
c2c986e780 | ||
|
|
26e87093e1 | ||
|
|
ba0323e434 | ||
|
|
55229e1ed7 | ||
|
|
064213ce52 | ||
|
|
f0802c681c | ||
|
|
a6d2ab7d77 | ||
|
|
c5ced92978 | ||
|
|
7efe32f9c8 | ||
|
|
60f163d540 | ||
|
|
f507f28f30 | ||
|
|
54ae7001ec | ||
|
|
d044cfe142 | ||
|
|
3a1c68b439 | ||
|
|
e0489dc171 | ||
|
|
9919701e2d | ||
|
|
9ed9ba472e | ||
|
|
8513ff260b | ||
|
|
900c2a11f7 | ||
|
|
00ffd8d46c | ||
|
|
cfc326b1ce | ||
|
|
dab4c6bf66 | ||
|
|
e21ece1626 | ||
|
|
f80f1f79a6 | ||
|
|
2414767026 | ||
|
|
887b2ccc6b | ||
|
|
164d29ccbe | ||
|
|
4eb46d0436 | ||
|
|
e0c6bb4094 | ||
|
|
3926055a5e | ||
|
|
8c00134ad1 | ||
|
|
6a104004e0 | ||
|
|
52df58b7dc | ||
|
|
983d58c5a6 | ||
|
|
ec46e616db | ||
|
|
3758e57cb8 | ||
|
|
1eaa8f76ea | ||
|
|
8e64d0b5ef | ||
|
|
baceee2ecf | ||
|
|
a23b7dd2bc | ||
|
|
0225163353 | ||
|
|
9dbe89f5aa | ||
|
|
f89effaa66 | ||
|
|
b7e37af8f1 | ||
|
|
1436e636d3 | ||
|
|
d2c33bbb06 | ||
|
|
c5c22620a6 | ||
|
|
fb7b890e40 | ||
|
|
4e8512e660 | ||
|
|
29de58b5a7 | ||
|
|
7a36b9c6a3 | ||
|
|
85ba820b27 | ||
|
|
54ff8ca196 | ||
|
|
9f40a7cca6 | ||
|
|
9be5970378 | ||
|
|
2214516689 | ||
|
|
b7f6d4a859 | ||
|
|
03404e9858 | ||
|
|
236edcc535 | ||
|
|
822b12cc96 | ||
|
|
79d8157798 | ||
|
|
12795f7298 | ||
|
|
86f6df6607 | ||
|
|
b837aca0f8 | ||
|
|
557ea38869 | ||
|
|
6a78563b32 | ||
|
|
ec6f71aed9 | ||
|
|
faccd7fb9e | ||
|
|
796bc0acee | ||
|
|
ae2638f7a9 | ||
|
|
51b7716cc7 | ||
|
|
c368f98ded | ||
|
|
5f1e77cd67 | ||
|
|
a5b4f0bd87 | ||
|
|
aab2acf008 | ||
|
|
d740df9600 | ||
|
|
cb464939a0 | ||
|
|
0f2b35175c | ||
|
|
33fe99ea43 | ||
|
|
22344045b8 | ||
|
|
a81ed47ebc | ||
|
|
9d247a4fb6 | ||
|
|
33f6db1daf | ||
|
|
cf7e0e14f5 | ||
|
|
88a896684f | ||
|
|
55f5aa5b79 | ||
|
|
a4be2eb79d | ||
|
|
81c7705690 | ||
|
|
4dda34fe28 | ||
|
|
5a05f6896f | ||
|
|
e8f7158d52 | ||
|
|
fa10b78b30 | ||
|
|
b9be120b17 | ||
|
|
4020eb1254 | ||
|
|
15178f0332 | ||
|
|
04c11e266a | ||
|
|
7bd40f0aae | ||
|
|
ca17c6da36 | ||
|
|
16b99a6f72 | ||
|
|
88a4f52ccd | ||
|
|
e975ddca8b | ||
|
|
225afafe43 | ||
|
|
1bafb4686f | ||
|
|
2777ec3e2c | ||
|
|
6f817971d0 | ||
|
|
9358b01cac | ||
|
|
a8f8da9906 | ||
|
|
b2d8550777 | ||
|
|
51b6031eab | ||
|
|
370961e872 | ||
|
|
43e2970620 | ||
|
|
385c4e4a2f | ||
|
|
39591b4776 | ||
|
|
2f0218aaa5 | ||
|
|
9ed897c6be | ||
|
|
b53d907b74 | ||
|
|
7aa2a27fc9 | ||
|
|
742be77cfb | ||
|
|
44946520ef | ||
|
|
35d45f7493 | ||
|
|
a6fa395822 | ||
|
|
48ff96d9e7 | ||
|
|
53e0f89311 | ||
|
|
871a89bf50 | ||
|
|
648fb6f949 | ||
|
|
709fd1bf12 | ||
|
|
cf51fdb026 | ||
|
|
1e8a825e94 | ||
|
|
2ab71798de | ||
|
|
683de6048e | ||
|
|
49e619ce11 | ||
|
|
fc5c8dd74f | ||
|
|
fb46cc7761 | ||
|
|
332867a9f5 | ||
|
|
dfea510e68 | ||
|
|
baff58eecc | ||
|
|
0db933b6a3 | ||
|
|
4552ad9b36 | ||
|
|
78a04905f1 | ||
|
|
3caa922e76 | ||
|
|
24572b554b | ||
|
|
35109800d5 | ||
|
|
1c009266cc | ||
|
|
5ec45459e5 | ||
|
|
37964c1e0f | ||
|
|
ea8add7316 | ||
|
|
baed2da509 | ||
|
|
7be66960b7 | ||
|
|
ab6f72e44d | ||
|
|
251083bf38 | ||
|
|
6426b1e430 | ||
|
|
635b20d4ab | ||
|
|
f38669576a | ||
|
|
c7ed5d7850 | ||
|
|
67a918401c | ||
|
|
08f0e02f42 | ||
|
|
0748cb7698 | ||
|
|
76c9a233b9 | ||
|
|
b3f584686b | ||
|
|
18f06fde2a | ||
|
|
c13545d585 | ||
|
|
112497d55e | ||
|
|
91069f6d38 | ||
|
|
2cf846ead3 | ||
|
|
310e1b4247 | ||
|
|
2f12b08616 | ||
|
|
744ef92faa | ||
|
|
aa8d77e571 | ||
|
|
6f8c9fe548 | ||
|
|
b6ded9a7fe | ||
|
|
468fa88139 | ||
|
|
1aa46713c2 | ||
|
|
9029a51707 | ||
|
|
6df363e2da | ||
|
|
36f5b265c8 | ||
|
|
929ea187ce | ||
|
|
822f203f5a | ||
|
|
54d02b6ab2 | ||
|
|
f9919fe854 | ||
|
|
73de0f228a | ||
|
|
9d73f7735e | ||
|
|
a0209f4667 | ||
|
|
60b36cb3f8 | ||
|
|
454ce02565 | ||
|
|
048434a564 | ||
|
|
0334b75cfa | ||
|
|
ce0ed935c8 | ||
|
|
ad89a63091 | ||
|
|
d148edcb67 | ||
|
|
36d2e29954 | ||
|
|
76d3643e0f | ||
|
|
a12e228cc4 | ||
|
|
669ee6a65f | ||
|
|
a7f734fadf | ||
|
|
8405c2d6cd | ||
|
|
10316c871b | ||
|
|
3b94b105fe | ||
|
|
d7abf96414 | ||
|
|
2c4d9d5af0 | ||
|
|
e14ddc11ee | ||
|
|
11eb122ecc | ||
|
|
40be8ef688 | ||
|
|
d7a72a92f2 | ||
|
|
6338809487 | ||
|
|
68408df4d6 | ||
|
|
7266a97b54 | ||
|
|
808038160f | ||
|
|
994b01719e | ||
|
|
6e6330bf07 | ||
|
|
f8b4958986 | ||
|
|
b7530d494c | ||
|
|
e6aed4bd71 | ||
|
|
57d6723adb | ||
|
|
c0ee3f071e | ||
|
|
54cfe2e99e | ||
|
|
25f6cb7522 | ||
|
|
0a69920b3f | ||
|
|
adad86401f | ||
|
|
6b3a5880b1 | ||
|
|
de4e340338 | ||
|
|
c10519acc2 | ||
|
|
dfb4e8921a | ||
|
|
6e51e5db30 | ||
|
|
7a9e12affa | ||
|
|
011d41af57 | ||
|
|
469e8c0505 | ||
|
|
d59bc07b89 | ||
|
|
e7d101c37e | ||
|
|
b0f83bd1a0 | ||
|
|
9016f25504 | ||
|
|
02134807d8 | ||
|
|
fb4da34562 | ||
|
|
0da322560c | ||
|
|
4aece1395e | ||
|
|
cc06b39905 | ||
|
|
de9eebdf76 | ||
|
|
db1af88681 | ||
|
|
7979110f2b | ||
|
|
9a81b5a598 | ||
|
|
23d44347ac | ||
|
|
6f2526a75a | ||
|
|
2bd4341c07 | ||
|
|
2f3581fe1c | ||
|
|
6ddb7246d8 | ||
|
|
ce2773491a | ||
|
|
614b9c412a | ||
|
|
2dfd4e84e1 | ||
|
|
0f74a0695c | ||
|
|
e85c416d01 | ||
|
|
6ac63baaa5 | ||
|
|
96c630b27c | ||
|
|
ff353a264e | ||
|
|
45097563f0 | ||
|
|
12370a8033 | ||
|
|
d1c67b013b | ||
|
|
3dda3e84bf | ||
|
|
a1a85732d4 | ||
|
|
bc4a2c8dce | ||
|
|
f22c288bf4 | ||
|
|
37a63e1c70 | ||
|
|
0c50c5a1a6 | ||
|
|
f2c487162f | ||
|
|
430696f486 | ||
|
|
2426547762 | ||
|
|
e877467a98 | ||
|
|
060c3de74e | ||
|
|
4c297d2ab4 | ||
|
|
53ccc9e02b | ||
|
|
477b30583e | ||
|
|
315bbbe25e | ||
|
|
62cc84fc9a | ||
|
|
e28bf1152c | ||
|
|
9519b3b0e7 | ||
|
|
b7462211e6 | ||
|
|
13d447a81b | ||
|
|
049d6e61df | ||
|
|
482aba0c45 | ||
|
|
f9a931dbd2 | ||
|
|
ec376e272d | ||
|
|
c13d250577 | ||
|
|
c372f1b66b | ||
|
|
bd1aa229e3 | ||
|
|
1819c69de5 | ||
|
|
4fb043c46a | ||
|
|
4995318418 | ||
|
|
6eaf6ecd14 | ||
|
|
822971fc7d | ||
|
|
fb48402f87 | ||
|
|
fd241c1e85 | ||
|
|
a3fc36e573 | ||
|
|
402b4d3457 | ||
|
|
62625df203 | ||
|
|
658c220c85 | ||
|
|
4190a6bfbc | ||
|
|
7aea928a5a | ||
|
|
58d4326511 | ||
|
|
f7b782440a | ||
|
|
17422184e4 | ||
|
|
c765e7efbb | ||
|
|
a3f4c6290d | ||
|
|
c0cd13abcd | ||
|
|
6fab380cd9 | ||
|
|
3732f89362 | ||
|
|
e25388066d | ||
|
|
a7f823609d | ||
|
|
f9362a1e53 | ||
|
|
7a9d5e646f | ||
|
|
1108daa8ed | ||
|
|
d59de91fd6 | ||
|
|
0cfc31f4ad | ||
|
|
e1df47dedc | ||
|
|
b6e4e0d670 | ||
|
|
5d0338a278 | ||
|
|
57aad64c23 | ||
|
|
743db0d265 | ||
|
|
a96a3c6623 | ||
|
|
60c17953c9 | ||
|
|
2068de722c | ||
|
|
33d86505e8 | ||
|
|
2a52d04064 | ||
|
|
7911bc6aea | ||
|
|
733d908c89 | ||
|
|
798ea44c60 | ||
|
|
08d4a3759b | ||
|
|
b29f602ce9 | ||
|
|
09c8144f31 | ||
|
|
b3bd8c5929 | ||
|
|
99790b1560 | ||
|
|
31441e8890 | ||
|
|
f693acbaa9 | ||
|
|
c1548a8cbb | ||
|
|
fc7a75cae2 | ||
|
|
adced907c9 | ||
|
|
49ae9d43ad | ||
|
|
b40ae12e63 | ||
|
|
0ae9fa8342 | ||
|
|
833d0b293f | ||
|
|
ea9a870604 | ||
|
|
c7e5427200 | ||
|
|
96ddda0009 | ||
|
|
635115f94b | ||
|
|
9bb1d799d8 | ||
|
|
eabd15092c | ||
|
|
5e85389792 | ||
|
|
42eb69bb95 | ||
|
|
09c9ff5ecd | ||
|
|
2678656f12 | ||
|
|
eb2a7b56b0 | ||
|
|
f33329d396 | ||
|
|
7d7340bbfc | ||
|
|
0bf2115701 | ||
|
|
0357bfdbaa | ||
|
|
52a76299c5 | ||
|
|
8de3151b8f | ||
|
|
2b3ceba353 | ||
|
|
378274bc3f | ||
|
|
c3145b0801 | ||
|
|
5aca7dafec | ||
|
|
803b1ae91b | ||
|
|
402c4e75a2 | ||
|
|
7a1859d1dd | ||
|
|
927117d5db | ||
|
|
837f433b5c | ||
|
|
b5b18ffefe | ||
|
|
48451e3f81 | ||
|
|
ec9e334f9a | ||
|
|
f646ddfc0f | ||
|
|
2102441cd0 | ||
|
|
95149c3fe4 | ||
|
|
0bfbd40810 | ||
|
|
b3a70e980e | ||
|
|
952c369646 | ||
|
|
3effec0dd5 | ||
|
|
2d563e1694 | ||
|
|
e9ceac13b8 | ||
|
|
06a0607287 | ||
|
|
7e159646fb | ||
|
|
d2781430d3 | ||
|
|
1bb8c80342 | ||
|
|
01e83247ee | ||
|
|
12653f97ad | ||
|
|
6bcb8651a0 | ||
|
|
0071ca68be | ||
|
|
a89bbdfdf9 | ||
|
|
c7bd599e16 | ||
|
|
c66a5b580d | ||
|
|
f145b6a7d2 | ||
|
|
4337f0bab0 | ||
|
|
6b37797de9 | ||
|
|
1843ac4d31 | ||
|
|
6399253318 | ||
|
|
f3638fb871 | ||
|
|
dc88a310cb | ||
|
|
aea9bd4882 | ||
|
|
b69bb4346c | ||
|
|
9af6aa4ba3 | ||
|
|
dff2704662 | ||
|
|
4849352b34 | ||
|
|
87700d9ab9 | ||
|
|
c69c0fd915 | ||
|
|
4c4d5c7baa | ||
|
|
1e9d2cf9a0 | ||
|
|
5579aba636 | ||
|
|
c66ad6a60f | ||
|
|
8e7f087a68 | ||
|
|
72142c32a1 | ||
|
|
5999ec7acd | ||
|
|
af401cdc9b | ||
|
|
f879e3ebdd | ||
|
|
a0b838c947 | ||
|
|
eb2fac75cd | ||
|
|
f0b1e57dcb | ||
|
|
f8f12b0596 | ||
|
|
de25859329 | ||
|
|
b4430de8de | ||
|
|
6d6c4aa4b8 | ||
|
|
baadff146e | ||
|
|
0b85490804 | ||
|
|
8d256228a0 | ||
|
|
5ad1af6d91 | ||
|
|
38b3095b82 | ||
|
|
9289d0cd43 | ||
|
|
d834c0fc0a | ||
|
|
7a995c3801 | ||
|
|
2f41a2bc09 | ||
|
|
e1a80c30be | ||
|
|
19994ccf60 | ||
|
|
1a59b0605f | ||
|
|
1c9aeee901 | ||
|
|
31bfaa0569 | ||
|
|
b24182df5b | ||
|
|
38923e1f91 | ||
|
|
aefee0fad2 | ||
|
|
aa2f53f2d5 | ||
|
|
a0bce9b3c5 | ||
|
|
8e5b7fdc19 | ||
|
|
4ee63506f8 | ||
|
|
1a239f92f4 | ||
|
|
4f15b724ac | ||
|
|
1c68a24a70 | ||
|
|
d863acbc65 | ||
|
|
c736f2ccb4 | ||
|
|
3942b88565 | ||
|
|
a5ac2aca10 | ||
|
|
55ced7a3e5 | ||
|
|
0f2c677035 | ||
|
|
7493f7d485 | ||
|
|
ccbe18b520 | ||
|
|
8bde0bc204 | ||
|
|
28df25e804 | ||
|
|
fa5cb50df9 | ||
|
|
b847e02ff8 | ||
|
|
3e7411440b | ||
|
|
52fa239ae1 | ||
|
|
fdaed3fd8f | ||
|
|
8a3235ce6f | ||
|
|
e054c17e31 | ||
|
|
c7b6b4fc3e | ||
|
|
4d60b96a75 | ||
|
|
0f0b546fa6 | ||
|
|
ed454218b6 | ||
|
|
b2345de9cc | ||
|
|
5dc393f397 | ||
|
|
ca654d938b | ||
|
|
0b0fb6bf1f | ||
|
|
ce85bb0578 | ||
|
|
4c9538d51f | ||
|
|
dc5157a252 | ||
|
|
9cc6d7f4da | ||
|
|
18b301e2a6 | ||
|
|
35f52410d9 | ||
|
|
cf55c05691 | ||
|
|
be9360fbf3 | ||
|
|
3fc07738cb | ||
|
|
299452eb8d | ||
|
|
655bce7795 | ||
|
|
0289b38e4e | ||
|
|
bceb401d19 | ||
|
|
cef74ff787 | ||
|
|
de3b1c896f | ||
|
|
c94bbbc3d3 | ||
|
|
877737d872 | ||
|
|
2c47baeed4 | ||
|
|
0321a03e38 | ||
|
|
ba28773dae | ||
|
|
fcb3f7fb4f | ||
|
|
1db52a9384 | ||
|
|
47986470a3 | ||
|
|
4ddafa700f | ||
|
|
2d90f1b02d | ||
|
|
19d67cb42b | ||
|
|
df2e5c8ab0 | ||
|
|
02d43366c7 | ||
|
|
b51ceb26f8 | ||
|
|
96f559c513 | ||
|
|
1ed613d5be | ||
|
|
2cba7cad2a | ||
|
|
57c684abf3 | ||
|
|
eb3970d779 | ||
|
|
39f09d1b4b | ||
|
|
b876da60aa | ||
|
|
48f85b4450 | ||
|
|
6af4b9ecd5 | ||
|
|
7441730b24 | ||
|
|
f444350a4f | ||
|
|
0892443104 | ||
|
|
c97a0cffe1 | ||
|
|
8ff7340eb2 | ||
|
|
9dcf4d0264 | ||
|
|
4a38798595 | ||
|
|
b80804dae5 | ||
|
|
8e4d885268 | ||
|
|
51f229b0bd | ||
|
|
c6a16a0279 | ||
|
|
16c0a93d46 | ||
|
|
857129c60f | ||
|
|
84e6a52834 | ||
|
|
9a47c6c6d5 | ||
|
|
17362c0cad | ||
|
|
e022bffe40 | ||
|
|
f3381e95ef | ||
|
|
294f1d7983 | ||
|
|
9bfb33d88c | ||
|
|
12b874507f | ||
|
|
cee97582fc | ||
|
|
c66b6843a4 | ||
|
|
9fc03bbc9a | ||
|
|
36c875a7f7 | ||
|
|
48b175fa43 | ||
|
|
4d35ea9bf3 | ||
|
|
62368fda23 | ||
|
|
6b89eca022 | ||
|
|
000c02247d | ||
|
|
6b899188c4 | ||
|
|
24f0efc0e2 | ||
|
|
b6bbb28757 | ||
|
|
8e1cd54c92 | ||
|
|
8b3dff12e8 | ||
|
|
c82b18f772 | ||
|
|
2642e15aff | ||
|
|
bf4dac5c3b | ||
|
|
8729214f8b | ||
|
|
ff6073a932 | ||
|
|
2cfee720a3 | ||
|
|
061e3d212d | ||
|
|
04bb549e36 | ||
|
|
68fcb587a9 | ||
|
|
93165ef0b2 | ||
|
|
a616124cc6 | ||
|
|
2ccb8f9a17 | ||
|
|
4b58fac608 | ||
|
|
a4a3d8a6eb | ||
|
|
dbcb18bffc | ||
|
|
a499580b4d | ||
|
|
4fd952b0da | ||
|
|
234ed2718f | ||
|
|
77c1818572 | ||
|
|
b704aca0fe | ||
|
|
8226f81026 | ||
|
|
1b062aa597 | ||
|
|
3f863cace4 | ||
|
|
737536297c | ||
|
|
c9017b5bf9 | ||
|
|
89dc51fab5 | ||
|
|
78067113d7 | ||
|
|
bef3abbe2c | ||
|
|
1255c24898 | ||
|
|
4e0b923552 | ||
|
|
ef9a6ac6aa | ||
|
|
60c0d725c9 | ||
|
|
59450f470a | ||
|
|
09dfd736db | ||
|
|
3852c9bf3f | ||
|
|
f3d9208d08 | ||
|
|
c62236791a | ||
|
|
bbe6ff820a | ||
|
|
47679469ac | ||
|
|
f7e79a31a0 | ||
|
|
2d8c995756 | ||
|
|
70a0a594b4 | ||
|
|
4273d62460 | ||
|
|
847c71ecf2 | ||
|
|
c493d651db | ||
|
|
06c954f8fe | ||
|
|
9567656b45 | ||
|
|
966737be23 | ||
|
|
6c1188a787 | ||
|
|
39fffe6874 | ||
|
|
a75ae8a1b1 | ||
|
|
c1d49fe8aa | ||
|
|
577831f775 | ||
|
|
098ad6e98c | ||
|
|
248fdbaddf | ||
|
|
417a1abcf7 | ||
|
|
d36ecec9c4 | ||
|
|
7a2895d3a3 | ||
|
|
58f156a491 | ||
|
|
02ee8602cd | ||
|
|
e999f5dd72 | ||
|
|
5e1b099285 | ||
|
|
87b1f5a5fb | ||
|
|
ae8cbdce0a | ||
|
|
95de48c03f | ||
|
|
5ea4fd9a5e | ||
|
|
1f3d9e7e0f | ||
|
|
05e4528b1c | ||
|
|
40789776bc | ||
|
|
75759edd26 | ||
|
|
2a5dc1dba6 | ||
|
|
0cbf50b7ff | ||
|
|
a3f5b805bb | ||
|
|
c337877501 | ||
|
|
a6e9dd850a | ||
|
|
a14d4057de | ||
|
|
210240ce66 | ||
|
|
d21f7fe75c | ||
|
|
54805cd2a0 | ||
|
|
c7da2e732a | ||
|
|
4b4beaa892 | ||
|
|
e13596acae | ||
|
|
8eb065181f | ||
|
|
1d97219fef | ||
|
|
d312f94825 | ||
|
|
478a6f7369 | ||
|
|
e309123296 | ||
|
|
777646cb0e | ||
|
|
39e23f7144 | ||
|
|
b68b5c0ea3 | ||
|
|
46dfeb8ca9 | ||
|
|
6771ad43af | ||
|
|
1881b9c6cb | ||
|
|
dae6b7a980 | ||
|
|
aed6209f6a | ||
|
|
b44a590aa0 | ||
|
|
936b5fc983 | ||
|
|
473d6617f2 | ||
|
|
fcf50b5aeb | ||
|
|
a3835d2e8a | ||
|
|
d89481966e | ||
|
|
3148ce0f31 | ||
|
|
f65363856a | ||
|
|
e205b57352 | ||
|
|
f44a1dbf21 | ||
|
|
b7fe2f606c | ||
|
|
6e81c1795c | ||
|
|
141d8e4467 | ||
|
|
edbfeab75f | ||
|
|
e48ea10ebb | ||
|
|
8565af5526 | ||
|
|
511d3bae8f | ||
|
|
8df233fef1 | ||
|
|
4b97410cc0 | ||
|
|
aadf8097d1 | ||
|
|
40d8b74b1b | ||
|
|
8c4d42891c | ||
|
|
3672374d23 | ||
|
|
9ff9d3f174 | ||
|
|
86540fa7fd | ||
|
|
1538c80a7d | ||
|
|
0225fcfe51 | ||
|
|
57f3861de6 | ||
|
|
04c365a251 | ||
|
|
7dfe4690ce | ||
|
|
92bcf1b7c9 | ||
|
|
8a15d5c65a | ||
|
|
f64374225d | ||
|
|
7537eac6a7 | ||
|
|
e2880d2434 | ||
|
|
8296de16ef | ||
|
|
5cff5e9dfd | ||
|
|
cb07a748c2 | ||
|
|
c7b985bdc6 | ||
|
|
bf32ca0e4a | ||
|
|
a4e52de0e3 | ||
|
|
e43e9b11a0 | ||
|
|
847b9e97c4 | ||
|
|
baad689286 | ||
|
|
5e7afc4385 | ||
|
|
d724b7a631 | ||
|
|
5e17fe5ad6 | ||
|
|
b216adadc0 | ||
|
|
5078c95667 | ||
|
|
7612d77647 | ||
|
|
0d76041c10 | ||
|
|
59be596d24 | ||
|
|
63e51a3c98 | ||
|
|
7f3128b3e5 | ||
|
|
c235813ae7 | ||
|
|
3ee18e7051 | ||
|
|
14fc5d8796 | ||
|
|
9fb0077385 | ||
|
|
2e9c7265b6 | ||
|
|
d9e77b784a | ||
|
|
b5b296ad7f | ||
|
|
acdfde5aa2 | ||
|
|
0eddfbd28c | ||
|
|
037f0610bc | ||
|
|
dd45f8f2ab | ||
|
|
d454c84f61 | ||
|
|
a4c98e07a5 | ||
|
|
85715630bd | ||
|
|
45d8d4a84f | ||
|
|
690882c97a | ||
|
|
e03836e4a1 | ||
|
|
d4ec54135a | ||
|
|
b29785d851 | ||
|
|
148870d706 | ||
|
|
ed1f7e335d | ||
|
|
eaf4695194 | ||
|
|
c312d42302 | ||
|
|
a8a2a6c066 | ||
|
|
8b3512cb07 | ||
|
|
945facdd2c | ||
|
|
8676ed4cff | ||
|
|
e4d4afa840 | ||
|
|
81cf286ea4 | ||
|
|
e834625728 | ||
|
|
a7c22eb08c | ||
|
|
837c358371 | ||
|
|
9743db27e7 | ||
|
|
ce725143e6 | ||
|
|
677805c33a | ||
|
|
3d3f1fe39b | ||
|
|
123c68ad2b | ||
|
|
86861c58af | ||
|
|
d4ddb6b3f9 | ||
|
|
0fc7de40d4 | ||
|
|
3cb4a9c8dd | ||
|
|
d681289457 | ||
|
|
bc1c3c3f5b | ||
|
|
5ae4287c0f | ||
|
|
cde9f56886 | ||
|
|
2b6b006bbd | ||
|
|
54e1bcafc0 | ||
|
|
7e98d0a22b | ||
|
|
c27b4a6aaf | ||
|
|
8f17ffd817 | ||
|
|
0a7d688d32 | ||
|
|
8cb2fe1284 | ||
|
|
e6e375232e | ||
|
|
08c4ab8a0c | ||
|
|
f86647fc26 | ||
|
|
f310f6a86f | ||
|
|
58c6acd265 | ||
|
|
c7d97e3866 | ||
|
|
0890144c61 | ||
|
|
69a7d91b57 | ||
|
|
a9016c88f6 | ||
|
|
e8990742cf | ||
|
|
f51400a3a1 | ||
|
|
e763ee5301 | ||
|
|
fd978699e8 | ||
|
|
bbd9585829 | ||
|
|
54cf1ebb31 | ||
|
|
6fc77c6cfa | ||
|
|
f8372e3bb9 | ||
|
|
6728be7b1a | ||
|
|
65e1a1e731 | ||
|
|
cd9478e853 | ||
|
|
b9364ed4fc | ||
|
|
2715e8e9d8 | ||
|
|
f987c93cf0 | ||
|
|
5c254a7151 | ||
|
|
f253e29f33 | ||
|
|
f37fa13eab | ||
|
|
64765b393a | ||
|
|
54c84b4ce0 | ||
|
|
146bcba794 | ||
|
|
d3dd1b731d | ||
|
|
d608ee7390 | ||
|
|
4e2e0950c7 | ||
|
|
ddc7e97ab6 | ||
|
|
a21759ee42 | ||
|
|
cc4beb94cf | ||
|
|
0bfafa9311 | ||
|
|
4eefc34629 | ||
|
|
4d3f882dc0 | ||
|
|
3a802fbb70 | ||
|
|
6f00b03d24 |
@@ -1,490 +0,0 @@
|
||||
version: 2
|
||||
jobs:
|
||||
install:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
environment:
|
||||
GOPATH: $HOME/go
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v1-dependencies-{{ checksum "yarn.lock" }}
|
||||
# fallback to using the latest cache if no exact match is found
|
||||
- v1-dependencies-
|
||||
- run:
|
||||
name: Updating apt packages
|
||||
command: sudo apt-get update
|
||||
- run:
|
||||
name: Installing the latest version of Go
|
||||
command: sudo apt-get install golang-go
|
||||
- run:
|
||||
name: Installing Dependencies
|
||||
command: yarn install --check-files --frozen-lockfile
|
||||
- save_cache:
|
||||
paths:
|
||||
- node_modules
|
||||
- packages/gatsby-plugin-now/node_modules
|
||||
- packages/now-build-utils/node_modules
|
||||
- packages/now-cgi/node_modules
|
||||
- packages/now-cli/node_modules
|
||||
- packages/now-client/node_modules
|
||||
- packages/now-go/node_modules
|
||||
- packages/now-next/node_modules
|
||||
- packages/now-node/node_modules
|
||||
- packages/now-node-bridge/node_modules
|
||||
- packages/now-python/node_modules
|
||||
- packages/now-routing-utils/node_modules
|
||||
- packages/now-ruby/node_modules
|
||||
- packages/now-static-build/node_modules
|
||||
key: v1-dependencies-{{ checksum "yarn.lock" }}
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- node_modules
|
||||
- packages/gatsby-plugin-now/node_modules
|
||||
- packages/now-build-utils/node_modules
|
||||
- packages/now-cgi/node_modules
|
||||
- packages/now-cli/node_modules
|
||||
- packages/now-client/node_modules
|
||||
- packages/now-go/node_modules
|
||||
- packages/now-next/node_modules
|
||||
- packages/now-node/node_modules
|
||||
- packages/now-node-bridge/node_modules
|
||||
- packages/now-python/node_modules
|
||||
- packages/now-routing-utils/node_modules
|
||||
- packages/now-ruby/node_modules
|
||||
- packages/now-static-build/node_modules
|
||||
|
||||
build:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
name: Installing apt dependencies
|
||||
command: sudo apt install -y rsync
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Linking dependencies
|
||||
command: yarn bootstrap
|
||||
- run:
|
||||
name: Building
|
||||
command: yarn build
|
||||
- store_artifacts:
|
||||
path: packages/now-cli/dist
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- packages/gatsby-plugin-now/test/fixtures
|
||||
- packages/now-build-utils/dist
|
||||
- packages/now-cgi/dist
|
||||
- packages/now-cli/dist
|
||||
- packages/now-cli/assets
|
||||
- packages/now-client/dist
|
||||
- packages/now-go/dist
|
||||
- packages/now-next/dist
|
||||
- packages/now-node/dist
|
||||
- packages/now-node/test/fixtures/15-helpers/ts/types.d.ts
|
||||
- packages/now-node/test/fixtures/11-symlinks/symlink
|
||||
- packages/now-node-bridge/index.js
|
||||
- packages/now-node-bridge/bridge.js
|
||||
- packages/now-python/dist
|
||||
- packages/now-routing-utils/dist
|
||||
- packages/now-ruby/dist
|
||||
- packages/now-static-build/dist
|
||||
- packages/now-static-build/test/fixtures/10a-gatsby-redirects/plugins
|
||||
|
||||
test-lint:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Compiling `now dev` HTML error templates
|
||||
command: node packages/now-cli/scripts/compile-templates.js
|
||||
- run:
|
||||
name: Linting Code
|
||||
command: yarn test-lint
|
||||
|
||||
test-integration-macos-node-8:
|
||||
macos:
|
||||
xcode: '9.2.0'
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Update Node.js
|
||||
command: curl -sfLS install-node.now.sh/8.11 | sh -s -- --yes
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Running Integration Tests
|
||||
command: yarn test-integration --clean false
|
||||
|
||||
test-integration-macos-node-10:
|
||||
macos:
|
||||
xcode: '10.0.0'
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Running Integration Tests
|
||||
command: yarn test-integration --clean false
|
||||
|
||||
test-integration-macos-node-12:
|
||||
macos:
|
||||
xcode: '10.3.0'
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Running Integration Tests
|
||||
command: yarn test-integration --clean false
|
||||
|
||||
test-integration-linux-node-8:
|
||||
docker:
|
||||
- image: circleci/node:8
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Running Integration Tests
|
||||
command: yarn test-integration --clean false
|
||||
|
||||
test-integration-linux-node-10:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Running Integration Tests
|
||||
command: yarn test-integration --clean false
|
||||
|
||||
test-integration-linux-node-12:
|
||||
docker:
|
||||
- image: circleci/node:12
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Running Integration Tests
|
||||
command: yarn test-integration --clean false
|
||||
|
||||
test-integration-macos-now-dev-node-8:
|
||||
macos:
|
||||
xcode: '9.2.0'
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Update Node.js
|
||||
command: curl -sfLS install-node.now.sh/8.11 | sh -s -- --yes
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Downloading Hugo
|
||||
command: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.56.0/hugo_0.56.0_macOS-64bit.tar.gz && tar -xzf hugo_0.56.0_macOS-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run:
|
||||
name: Running Integration Tests for `now dev`
|
||||
command: yarn test-integration-now-dev --clean false
|
||||
|
||||
test-integration-macos-now-dev-node-10:
|
||||
macos:
|
||||
xcode: '10.0.0'
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Downloading Hugo
|
||||
command: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.56.0/hugo_0.56.0_macOS-64bit.tar.gz && tar -xzf hugo_0.56.0_macOS-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run:
|
||||
name: Running Integration Tests for `now dev`
|
||||
command: yarn test-integration-now-dev --clean false
|
||||
|
||||
test-integration-macos-now-dev-node-12:
|
||||
macos:
|
||||
xcode: '10.3.0'
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Downloading Hugo
|
||||
command: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.56.0/hugo_0.56.0_macOS-64bit.tar.gz && tar -xzf hugo_0.56.0_macOS-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run:
|
||||
name: Running Integration Tests for `now dev`
|
||||
command: yarn test-integration-now-dev --clean false
|
||||
|
||||
test-integration-linux-now-dev-node-8:
|
||||
docker:
|
||||
- image: circleci/node:8
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Downloading Hugo
|
||||
command: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.55.6/hugo_0.55.6_Linux-64bit.tar.gz && tar -xzf hugo_0.55.6_Linux-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run:
|
||||
name: Running Integration Tests for `now dev`
|
||||
command: yarn test-integration-now-dev --clean false
|
||||
|
||||
test-integration-linux-now-dev-node-10:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Downloading Hugo
|
||||
command: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.55.6/hugo_0.55.6_Linux-64bit.tar.gz && tar -xzf hugo_0.55.6_Linux-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run:
|
||||
name: Running Integration Tests for `now dev`
|
||||
command: yarn test-integration-now-dev --clean false
|
||||
|
||||
test-integration-linux-now-dev-node-12:
|
||||
docker:
|
||||
- image: circleci/node:12
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Downloading Hugo
|
||||
command: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.55.6/hugo_0.55.6_Linux-64bit.tar.gz && tar -xzf hugo_0.55.6_Linux-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run:
|
||||
name: Running Integration Tests for `now dev`
|
||||
command: yarn test-integration-now-dev --clean false
|
||||
|
||||
test-integration-once:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Output version
|
||||
command: node --version
|
||||
- run:
|
||||
name: Running Integration Tests Once
|
||||
command: yarn test-integration-once --clean false
|
||||
|
||||
coverage:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- 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
|
||||
|
||||
source-maps:
|
||||
docker:
|
||||
- image: circleci/node:10
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- checkout
|
||||
- attach_workspace:
|
||||
at: .
|
||||
- run:
|
||||
name: Installing Sentry CLI
|
||||
command: npm install -g @sentry/cli
|
||||
- run:
|
||||
name: Creating a New Sentry Release
|
||||
command: sentry-cli releases new now-cli@`git describe --tags`
|
||||
- run:
|
||||
name: Upload Sourcemap Files
|
||||
command: sentry-cli releases files now-cli@`git describe --tags` upload-sourcemaps ./dist
|
||||
- run:
|
||||
name: Finalize Sentry Release
|
||||
command: sentry-cli releases finalize now-cli@`git describe --tags`
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
unscheduled:
|
||||
jobs:
|
||||
- install:
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- build:
|
||||
requires:
|
||||
- install
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-lint:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-macos-node-8:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-macos-node-10:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-macos-node-12:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-linux-node-8:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-linux-node-10:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-linux-node-12:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-macos-now-dev-node-8:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-macos-now-dev-node-10:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-macos-now-dev-node-12:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-linux-now-dev-node-8:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-linux-now-dev-node-10:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-linux-now-dev-node-12:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- test-integration-once:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
- coverage:
|
||||
requires:
|
||||
- test-integration-macos-node-8
|
||||
- test-integration-macos-node-10
|
||||
- test-integration-macos-node-12
|
||||
- test-integration-linux-node-8
|
||||
- test-integration-linux-node-10
|
||||
- test-integration-linux-node-12
|
||||
- test-integration-macos-now-dev-node-8
|
||||
- test-integration-macos-now-dev-node-10
|
||||
- test-integration-macos-now-dev-node-12
|
||||
- test-integration-linux-now-dev-node-8
|
||||
- test-integration-linux-now-dev-node-10
|
||||
- test-integration-linux-now-dev-node-12
|
||||
- test-integration-once
|
||||
- test-lint
|
||||
filters:
|
||||
tags:
|
||||
only: /.*/
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
12
.github/CODEOWNERS
vendored
12
.github/CODEOWNERS
vendored
@@ -2,6 +2,7 @@
|
||||
# https://help.github.com/en/articles/about-code-owners
|
||||
|
||||
* @tootallnate @leo
|
||||
/packages/frameworks @AndyBitz
|
||||
/packages/now-cli/src/commands/dev/ @tootallnate @leo @styfle @AndyBitz
|
||||
/packages/now-cli/src/util/dev/ @tootallnate @leo @styfle @AndyBitz
|
||||
/packages/now-cli/src/commands/domains/ @javivelasco @mglagola @anatrajkovska
|
||||
@@ -10,9 +11,16 @@
|
||||
/packages/now-build-utils @styfle @AndyBitz
|
||||
/packages/now-node @styfle @tootallnate @lucleray
|
||||
/packages/now-node-bridge @styfle @tootallnate @lucleray
|
||||
/packages/now-next @Timer
|
||||
/packages/now-next @Timer @ijjk
|
||||
/packages/now-go @styfle @sophearak
|
||||
/packages/now-python @styfle @sophearak
|
||||
/packages/now-ruby @styfle @coetry @nathancahill
|
||||
/packages/now-static-build @styfle @AndyBitz
|
||||
/packages/now-routing-utils @dav-is
|
||||
/packages/now-routing-utils @styfle @dav-is @ijjk
|
||||
|
||||
/examples @msweeneydev @timothyis
|
||||
/examples/create-react-app @Timer
|
||||
/examples/nextjs @timneutkens
|
||||
/examples/hugo @msweeneydev @timothyis @styfle
|
||||
/examples/jekyll @msweeneydev @timothyis @sarupbanskota
|
||||
/examples/zola @msweeneydev @timothyis @styfle
|
||||
|
||||
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/
|
||||
13
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
13
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
@@ -94,3 +94,16 @@ Sometimes you want to test changes to a Builder against an existing project, may
|
||||
4. Run `now *.tgz` to upload the tarball file and get a URL
|
||||
5. Edit any existing `now.json` project and replace `use` with the URL
|
||||
6. Run `now` or `now dev` to deploy with the experimental Builder
|
||||
|
||||
## Add a New Framework
|
||||
|
||||
You can add support for a new framework by creating a Pull Request for this repository by following the steps below.
|
||||
|
||||
1. Add the framework to the `@now/frameworks` package.
|
||||
The file is located in `packages/frameworks/frameworks.json`. You can copy the structure of an existing one and adjust the required fields. Note that the `settings` property either contains a `value` or a `placeholder`. The `value` property is used when something is not configurable, the `placeholder` is used when something is configurable and can be changed with configuration. An example would be the output directory for Hugo, it's `public` by default but can be changed through its config file, so we use `placeholder` with an explanation of what can be used.
|
||||
2. Add an example to the `examples/` directory.
|
||||
The name of the directory should equal the slug of the framework used in `@now/frameworks`.
|
||||
The `.github/EXAMPLE_README_TEMPLATE.md` file can be used to create a README for the example.
|
||||
3. Update the `@now/static-build` package
|
||||
The files `packages/now-static-build/src/frameworks.ts` has to be extended. You can add default routes that will always be applied to projects that use this framework or specify some paths that will be cached to speed up the build process.
|
||||
4. After your PR has been merged and released other users can use `now init` to get the example and deploy it to ZEIT Now.
|
||||
25
.github/EXAMPLE_README_TEMPLATE.md
vendored
Normal file
25
.github/EXAMPLE_README_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# [Name] Example
|
||||
|
||||
This directory is a brief example of a [Name](site-link) site that can be deployed with ZEIT Now and zero configuration.
|
||||
|
||||
## Deploy Your Own
|
||||
|
||||
Deploy your own [Name] project with ZEIT Now.
|
||||
|
||||
[](https://zeit.co/new/project?template=https://github.com/zeit/now-examples/tree/master/example-directory)
|
||||
|
||||
### How We Created This Example
|
||||
|
||||
To get started with [Name] on Now, you can use the [CLI Tool Used](CLI-link) to initialize the project:
|
||||
|
||||
```shell
|
||||
$ now init charge
|
||||
```
|
||||
|
||||
### Deploying From Your Terminal
|
||||
|
||||
Once initialized, you can deploy the [Name] example with just a single command:
|
||||
|
||||
```shell
|
||||
$ now
|
||||
```
|
||||
96
.github/workflows/continuous-integration.yml
vendored
Normal file
96
.github/workflows/continuous-integration.yml
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags:
|
||||
- '!*'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
test-unit:
|
||||
name: Unit Tests
|
||||
timeout-minutes: 15
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: git fetch origin master --depth=10
|
||||
- run: git fetch origin ${{ github.ref }} --depth=10
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10
|
||||
- run: yarn install && yarn run build
|
||||
- run: yarn run test-lint
|
||||
- run: yarn run test-unit --clean false
|
||||
- uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: test-unit-output
|
||||
path: packages/now-cli/.nyc_output
|
||||
|
||||
test-integration:
|
||||
name: Integration Tests
|
||||
timeout-minutes: 120
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: git fetch origin master --depth=10
|
||||
- run: git fetch origin ${{ github.ref }} --depth=10
|
||||
- run: yarn install && yarn run build
|
||||
- run: yarn test-integration-once --clean false
|
||||
|
||||
test-now-cli:
|
||||
name: Now CLI Tests
|
||||
timeout-minutes: 30
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
node: [10, 12]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: git fetch origin master --depth=10
|
||||
- run: git fetch origin ${{ github.ref }} --depth=10
|
||||
- run: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.56.0/hugo_0.56.0_macOS-64bit.tar.gz && tar -xzf hugo_0.56.0_macOS-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run: yarn install && yarn run build
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
- run: yarn test-integration --clean false
|
||||
|
||||
test-now-dev:
|
||||
name: "`now dev` Tests"
|
||||
timeout-minutes: 30
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
node: [10, 12]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: git fetch origin master --depth=10
|
||||
- run: git fetch origin ${{ github.ref }} --depth=10
|
||||
- run: curl -L -O https://github.com/gohugoio/hugo/releases/download/v0.56.0/hugo_0.56.0_macOS-64bit.tar.gz && tar -xzf hugo_0.56.0_macOS-64bit.tar.gz && mv ./hugo packages/now-cli/test/dev/fixtures/08-hugo/
|
||||
- run: yarn install && yarn run build
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
- run: yarn test-integration-now-dev --clean false
|
||||
|
||||
coverage:
|
||||
name: Coverage
|
||||
timeout-minutes: 10
|
||||
needs: [test-unit, test-now-cli, test-now-dev, test-integration]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: git fetch origin master --depth=10
|
||||
- run: git fetch origin ${{ github.ref }} --depth=10
|
||||
- uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: test-unit-output
|
||||
path: packages/now-cli/.nyc_output
|
||||
- run: yarn install
|
||||
- run: yarn workspace now run coverage
|
||||
15
.github/workflows/publish.yml
vendored
15
.github/workflows/publish.yml
vendored
@@ -4,25 +4,18 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- canary
|
||||
tags:
|
||||
- '!*'
|
||||
|
||||
jobs:
|
||||
Publish:
|
||||
|
||||
publish:
|
||||
name: Publish
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [10.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Checkout
|
||||
uses: actions/setup-node@v1
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
node-version: 10
|
||||
- name: Install
|
||||
run: yarn install --check-files --frozen-lockfile
|
||||
- name: Build
|
||||
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
node_modules
|
||||
package-lock.json
|
||||
dist
|
||||
.vscode
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
.nyc_output
|
||||
@@ -18,3 +19,8 @@ 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
|
||||
.env
|
||||
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"
|
||||
}
|
||||
@@ -1,20 +1,20 @@
|
||||
# Builders Developer Reference
|
||||
# Runtime Developer Reference
|
||||
|
||||
The following page is a reference for how to create a Builder using the available Builder's API.
|
||||
The following page is a reference for how to create a Runtime using the available Runtime API.
|
||||
|
||||
A Builder is an npm module that exposes a `build` function and optionally an `analyze` function and `prepareCache` function.
|
||||
Official Builders 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 Builder.
|
||||
A Runtime is an npm module that exposes a `build` function and optionally an `analyze` function and `prepareCache` function.
|
||||
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 [Builders Documentation](https://zeit.co/docs/v2/advanced/builders) to view example usage.
|
||||
See the [Runtimes Documentation](https://zeit.co/docs/runtimes) to view example usage.
|
||||
|
||||
## Builder Exports
|
||||
## Runtime Exports
|
||||
|
||||
### `version`
|
||||
|
||||
A **required** exported constant that decides which version of the Builder API to use.
|
||||
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
|
||||
}
|
||||
```
|
||||
|
||||
@@ -109,7 +109,7 @@ export prepareCache(options: PrepareCacheOptions) {
|
||||
|
||||
### `shouldServe`
|
||||
|
||||
An **optional** exported function that is only used by `now dev` in [Now CLI](https:///download) and indicates whether a [Builder](https://zeit.co/docs/v2/advanced/builders) wants to be responsible for building a certain request path.
|
||||
An **optional** exported function that is only used by `now dev` in [Now CLI](https:///download) and indicates whether a [Runtime](https://zeit.co/docs/v2/advanced/runtimes) wants to be responsible for building a certain request path.
|
||||
|
||||
```js
|
||||
shouldServe({
|
||||
@@ -133,7 +133,7 @@ export shouldServe(options: ShouldServeOptions) {
|
||||
|
||||
If this method is not defined, Now CLI will default to [this function](https://github.com/zeit/now/blob/52994bfe26c5f4f179bdb49783ee57ce19334631/packages/now-build-utils/src/should-serve.ts).
|
||||
|
||||
### Builder Options
|
||||
### Runtime Options
|
||||
|
||||
The exported functions [`analyze`](#analyze), [`build`](#build), and [`prepareCache`](#preparecache) receive one argument with the following properties.
|
||||
|
||||
@@ -145,78 +145,15 @@ The exported functions [`analyze`](#analyze), [`build`](#build), and [`prepareCa
|
||||
- `cachePath`: A writable temporary directory where you can build a cache for the next run. This is only passed to `prepareCache`.
|
||||
- `config`: An arbitrary object passed from by the user in the [Build definition](#defining-the-build-step) in `now.json`.
|
||||
|
||||
## Example: html-minifier
|
||||
## Examples
|
||||
|
||||
Let's walk through what it takes to create a simple builder that takes in a HTML source file and yields a minified HTML static file as its build output.
|
||||
|
||||
While this is a very simple builder, the approach demonstrated here can be used to return anything: one or more static files and/or one or more lambdas.
|
||||
|
||||
## Setting up the module
|
||||
|
||||
### Defining the analyze step
|
||||
|
||||
The `analyze` hook is optional. Its goal is to give the developer a tool to avoid wasting time _re-computing a build_ that has already occurred.
|
||||
|
||||
The return value of `analyze` is a _fingerprint_: a simple string that uniquely identifies the build process.
|
||||
|
||||
If `analyze` is not specified, its behavior is to use as the fingerprint the combined checksums of **all the files in the same directory level as the entrypoint**. This is a default that errs on making sure that we re-execute builds when files _other than the entrypoint_ (like dependencies, manifest files, etc) have changed.
|
||||
|
||||
For our `html-minify` example, we know that HTML files don't have dependencies. Therefore, our analyze step can just return the `digest` of the entrypoint.
|
||||
|
||||
Our `index.js` file looks as follows:
|
||||
|
||||
```js
|
||||
exports.analyze = function({ files, entrypoint }) {
|
||||
return files[entrypoint].digest
|
||||
}
|
||||
```
|
||||
|
||||
This means that we will only re-minify and re-create the build output _only if the file contents (and therefore its digest) change._
|
||||
|
||||
### Defining the build step
|
||||
|
||||
Your module will need some utilities to manipulate the data structures we pass you, create new ones and alter the filesystem.
|
||||
|
||||
To that end, we expose our API as part of a `@now/build-utils` package. This package is always loaded on your behalf, so make sure it's only included as `peerDependencies` in your `package.json`.
|
||||
|
||||
Builders can include dependencies of their liking:
|
||||
|
||||
```js
|
||||
const htmlMinifier = require('html-minifier')
|
||||
|
||||
exports.version = 2
|
||||
|
||||
exports.analyze = ({ files, entrypoint }) => files[entrypoint].digest
|
||||
|
||||
exports.build = async ({ files, entrypoint, config }) => {
|
||||
const stream = files[entrypoint].toStream()
|
||||
const options = Object.assign({}, config || {})
|
||||
const { data } = await FileBlob.fromStream({ stream })
|
||||
const content = data.toString()
|
||||
const minified = htmlMinifier(content, options)
|
||||
const result = new FileBlob({ data: minified })
|
||||
|
||||
return {
|
||||
output: {
|
||||
[entrypoint]: result
|
||||
},
|
||||
watch: [],
|
||||
routes: {}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Defining a `prepareCache` step
|
||||
|
||||
If our builder had performed work that could be re-used in the next build invocation, we could define a `prepareCache` step.
|
||||
|
||||
In this case, there are not intermediate artifacts that we can cache, and our `analyze` step already takes care of caching the full output based on the fingerprint of the input.
|
||||
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
|
||||
|
||||
### Execution Context
|
||||
|
||||
A [Serverless Function](https://zeit.co/docs/v2/advanced/concepts/lambdas) is created where the builder logic is executed. The lambda is run using the Node.js 8 runtime. A brand new sandbox is created for each deployment, for security reasons. The sandbox is cleaned up between executions to ensure no lingering temporary files are shared from build to build.
|
||||
A [Serverless Function](https://zeit.co/docs/v2/advanced/concepts/lambdas) is created where the Runtime logic is executed. The lambda is run using the Node.js 8 runtime. A brand new sandbox is created for each deployment, for security reasons. The sandbox is cleaned up between executions to ensure no lingering temporary files are shared from build to build.
|
||||
|
||||
All the APIs you export ([`analyze`](#analyze), [`build`](#build) and [`prepareCache`](#preparecache)) are not guaranteed to be run in the same process, but the filesystem we expose (e.g.: `workPath` and the results of calling [`getWriteableDirectory`](#getWriteableDirectory) ) is retained.
|
||||
|
||||
@@ -228,23 +165,23 @@ When a new build is created, we pre-populate the `workPath` supplied to `analyze
|
||||
|
||||
The `analyze` step can modify that directory, and it will not be re-created when it's supplied to `build` and `prepareCache`.
|
||||
|
||||
To learn how the cache key is computed and invalidated, refer to the [overview](https://zeit.co/docs/v2/advanced/builders#technical-details).
|
||||
To learn how the cache key is computed and invalidated, refer to the [overview](https://zeit.co/docs/v2/advanced/runtimes#technical-details).
|
||||
|
||||
### Accessing Environment and Secrets
|
||||
|
||||
The env and secrets specified by the user as `build.env` are passed to the builder process. This means you can access user env via `process.env` in Node.js.
|
||||
The env and secrets specified by the user as `build.env` are passed to the Runtime process. This means you can access user env via `process.env` in Node.js.
|
||||
|
||||
### Utilities as peerDependencies
|
||||
|
||||
When you publish your builder to npm, make sure to not specify `@now/build-utils` (as seen below in the API definitions) as a dependency, but rather as part of `peerDependencies`.
|
||||
When you publish your Runtime to npm, make sure to not specify `@now/build-utils` (as seen below in the API definitions) as a dependency, but rather as part of `peerDependencies`.
|
||||
|
||||
## Types
|
||||
|
||||
### `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.
|
||||
@@ -265,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:
|
||||
@@ -277,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`.
|
||||
@@ -294,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.
|
||||
@@ -312,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.
|
||||
@@ -330,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:**
|
||||
|
||||
@@ -346,39 +283,39 @@ 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
|
||||
|
||||
The following is exposed by `@now/build-utils` to simplify the process of writing Builders, manipulating the file system, using the above types, etc.
|
||||
The following is exposed by `@now/build-utils` to simplify the process of writing Runtimes, manipulating the file system, using the above types, etc.
|
||||
|
||||
### `createLambda`
|
||||
|
||||
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`
|
||||
@@ -386,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.
|
||||
@@ -396,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`
|
||||
@@ -404,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).
|
||||
@@ -425,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.
|
||||
@@ -435,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.
|
||||
25
api/_lib/examples/example-list.ts
Normal file
25
api/_lib/examples/example-list.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import Frameworks, { Framework } from '../../../packages/frameworks';
|
||||
|
||||
interface Example {
|
||||
example: string;
|
||||
path: string;
|
||||
demo: string;
|
||||
description: string;
|
||||
tagline: string;
|
||||
framework: string;
|
||||
}
|
||||
|
||||
export async function getExampleList(): Promise<Example[]> {
|
||||
return (Frameworks as Framework[])
|
||||
.filter(f => f.demo)
|
||||
.map(framework => {
|
||||
return {
|
||||
example: framework.name,
|
||||
path: `/${framework.slug}`,
|
||||
demo: framework.demo,
|
||||
description: framework.description,
|
||||
tagline: framework.tagline,
|
||||
framework: framework.slug,
|
||||
};
|
||||
});
|
||||
}
|
||||
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.'));
|
||||
});
|
||||
});
|
||||
}
|
||||
72
api/_lib/examples/github-repo-info.ts
Normal file
72
api/_lib/examples/github-repo-info.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
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' && data.subdir && data.subdir[0] === 'examples') {
|
||||
// from our examples, add `homepage` and `description` fields
|
||||
const example = data.subdir[1];
|
||||
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.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,
|
||||
};
|
||||
}
|
||||
28
api/_lib/examples/map-old-to-new.ts
Normal file
28
api/_lib/examples/map-old-to-new.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
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'],
|
||||
umi: ['umijs'],
|
||||
'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;
|
||||
}
|
||||
9
api/_lib/util/assert-env.ts
Normal file
9
api/_lib/util/assert-env.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export function assertEnv(name: string) {
|
||||
const value = process.env[name];
|
||||
|
||||
if (!value) {
|
||||
throw new Error(`Missing env "${name}"`);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
43
api/_lib/util/error-handler.ts
Normal file
43
api/_lib/util/error-handler.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { init, captureException, withScope } from '@sentry/node';
|
||||
import { assertEnv } from './assert-env';
|
||||
|
||||
const serviceName = 'api-frameworks';
|
||||
|
||||
let sentryInitDone = false;
|
||||
|
||||
function initSentry() {
|
||||
if (sentryInitDone) {
|
||||
return;
|
||||
}
|
||||
|
||||
sentryInitDone = true;
|
||||
|
||||
init({
|
||||
dsn: assertEnv('SENTRY_DSN'),
|
||||
environment: process.env.NODE_ENV || 'production',
|
||||
release: `${serviceName}`,
|
||||
});
|
||||
}
|
||||
|
||||
export function errorHandler(error: Error, extras?: { [key: string]: any }) {
|
||||
if (!process.env.SENTRY_DSN) {
|
||||
return;
|
||||
}
|
||||
|
||||
initSentry();
|
||||
|
||||
try {
|
||||
withScope(scope => {
|
||||
scope.setTag('service', serviceName);
|
||||
scope.setTag('function_name', assertEnv('AWS_LAMBDA_FUNCTION_NAME'));
|
||||
|
||||
for (const [k, v] of Object.entries(extras)) {
|
||||
scope.setExtra(k, v);
|
||||
}
|
||||
|
||||
captureException(error);
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(`Failed to report error to Sentry: ${e}`);
|
||||
}
|
||||
}
|
||||
44
api/_lib/util/with-api-handler.ts
Normal file
44
api/_lib/util/with-api-handler.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { NowRequest, NowResponse } from '@now/node';
|
||||
import { errorHandler } from './error-handler';
|
||||
|
||||
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.',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await handler(req, res);
|
||||
return result;
|
||||
} catch (error) {
|
||||
errorHandler(error, {
|
||||
url: req.url,
|
||||
});
|
||||
|
||||
return res.status(500).json({
|
||||
error: {
|
||||
code: 'unexpected_error',
|
||||
message: 'An unexpected error occurred.',
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
57
api/examples/download/[segment].ts
Normal file
57
api/examples/download/[segment].ts
Normal file
@@ -0,0 +1,57 @@
|
||||
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);
|
||||
|
||||
await extract('https://github.com/zeit/now/archive/master.zip', TMP_DIR);
|
||||
const 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());
|
||||
});
|
||||
27
api/examples/list.ts
Normal file
27
api/examples/list.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
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
|
||||
) {
|
||||
await extract('https://github.com/zeit/now/archive/master.zip', '/tmp');
|
||||
const exampleList = summary('/tmp/now-master/examples');
|
||||
|
||||
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);
|
||||
});
|
||||
24
api/package.json
Normal file
24
api/package.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"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": {
|
||||
"@sentry/node": "5.11.1",
|
||||
"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"]
|
||||
}
|
||||
468
api/yarn.lock
Normal file
468
api/yarn.lock
Normal file
@@ -0,0 +1,468 @@
|
||||
# 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" "*"
|
||||
|
||||
"@sentry/apm@5.11.1":
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/apm/-/apm-5.11.1.tgz#cc89fa4150056fbf009f92eca94fccc3980db34e"
|
||||
integrity sha512-4iZH11p/7w9IMLT9hqNY1+EqLESltiIoF6/YsbpK93sXWGEs8VQ83IuvGuKWxajvHgDmj4ND0TxIliTsYqTqFw==
|
||||
dependencies:
|
||||
"@sentry/browser" "5.11.1"
|
||||
"@sentry/hub" "5.11.1"
|
||||
"@sentry/minimal" "5.11.1"
|
||||
"@sentry/types" "5.11.0"
|
||||
"@sentry/utils" "5.11.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/browser@5.11.1":
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.11.1.tgz#337ffcb52711b23064c847a07629e966f54a5ebb"
|
||||
integrity sha512-oqOX/otmuP92DEGRyZeBuQokXdeT9HQRxH73oqIURXXNLMP3PWJALSb4HtT4AftEt/2ROGobZLuA4TaID6My/Q==
|
||||
dependencies:
|
||||
"@sentry/core" "5.11.1"
|
||||
"@sentry/types" "5.11.0"
|
||||
"@sentry/utils" "5.11.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/core@5.11.1":
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.11.1.tgz#9e2da485e196ae32971545c1c49ee6fe719930e2"
|
||||
integrity sha512-BpvPosVNT20Xso4gAV54Lu3KqDmD20vO63HYwbNdST5LUi8oYV4JhvOkoBraPEM2cbBwQvwVcFdeEYKk4tin9A==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.11.1"
|
||||
"@sentry/minimal" "5.11.1"
|
||||
"@sentry/types" "5.11.0"
|
||||
"@sentry/utils" "5.11.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/hub@5.11.1":
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.11.1.tgz#ddcb865563fae53852d405885c46b4c6de68a91b"
|
||||
integrity sha512-ucKprYCbGGLLjVz4hWUqHN9KH0WKUkGf5ZYfD8LUhksuobRkYVyig0ZGbshECZxW5jcDTzip4Q9Qimq/PkkXBg==
|
||||
dependencies:
|
||||
"@sentry/types" "5.11.0"
|
||||
"@sentry/utils" "5.11.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/minimal@5.11.1":
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.11.1.tgz#0e705d01a567282d8fbbda2aed848b4974cc3cec"
|
||||
integrity sha512-HK8zs7Pgdq7DsbZQTThrhQPrJsVWzz7MaluAbQA0rTIAJ3TvHKQpsVRu17xDpjZXypqWcKCRsthDrC4LxDM1Bg==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.11.1"
|
||||
"@sentry/types" "5.11.0"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/node@5.11.1":
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.11.1.tgz#2a9c18cd1209cfdf7a69b9d91303413149d2c910"
|
||||
integrity sha512-FbJs0blJ36gEzE0rc2yBfA/KE+kXOLl8MUfFTcyJCBdCGF8XMETDCmgINnJ4TyBUJviwKoPw2TCk9TL2pa/A1w==
|
||||
dependencies:
|
||||
"@sentry/apm" "5.11.1"
|
||||
"@sentry/core" "5.11.1"
|
||||
"@sentry/hub" "5.11.1"
|
||||
"@sentry/types" "5.11.0"
|
||||
"@sentry/utils" "5.11.1"
|
||||
cookie "^0.3.1"
|
||||
https-proxy-agent "^4.0.0"
|
||||
lru_map "^0.3.3"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/types@5.11.0":
|
||||
version "5.11.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.11.0.tgz#40f0f3174362928e033ddd9725d55e7c5cb7c5b6"
|
||||
integrity sha512-1Uhycpmeo1ZK2GLvrtwZhTwIodJHcyIS6bn+t4IMkN9MFoo6ktbAfhvexBDW/IDtdLlCGJbfm8nIZerxy0QUpg==
|
||||
|
||||
"@sentry/utils@5.11.1":
|
||||
version "5.11.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.11.1.tgz#aa19fcc234cf632257b2281261651d2fac967607"
|
||||
integrity sha512-O0Zl4R2JJh8cTkQ8ZL2cDqGCmQdpA5VeXpuBbEl1v78LQPkBDISi35wH4mKmLwMsLBtTVpx2UeUHBj0KO5aLlA==
|
||||
dependencies:
|
||||
"@sentry/types" "5.11.0"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@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" "*"
|
||||
|
||||
agent-base@5:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c"
|
||||
integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==
|
||||
|
||||
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"
|
||||
|
||||
cookie@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
|
||||
integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
|
||||
|
||||
debug@4:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
||||
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
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==
|
||||
|
||||
https-proxy-agent@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b"
|
||||
integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==
|
||||
dependencies:
|
||||
agent-base "5"
|
||||
debug "4"
|
||||
|
||||
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==
|
||||
|
||||
lru_map@^0.3.3:
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
|
||||
integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=
|
||||
|
||||
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"
|
||||
|
||||
ms@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
|
||||
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=
|
||||
|
||||
tslib@^1.9.3:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
||||
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
||||
|
||||
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]);
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#### Why This Error Occurred
|
||||
|
||||
The domain you supplied cannot be verified using either the intended set of nameservers of the given verification TXT record.
|
||||
The domain you supplied cannot be verified using either the intended set of nameservers or the given verification TXT record.
|
||||
|
||||
#### Possible Ways to Fix It
|
||||
|
||||
|
||||
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).
|
||||
@@ -19,6 +19,8 @@ the provided `$PORT` that the builder expects the server to bind to.
|
||||
For example, if you are using Gatsby, your `now-dev` script must use the `-p`
|
||||
(port) option to bind to the `$PORT` specified from the builder:
|
||||
|
||||
> *In Windows environments, reference the `PORT` environment variable with `%PORT%`*
|
||||
|
||||
```
|
||||
{
|
||||
...
|
||||
|
||||
85
examples/README.md
Normal file
85
examples/README.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# ZEIT Now Examples
|
||||
|
||||
This is the public list of examples for **ZEIT Now**.
|
||||
|
||||
All of these ready to deploy examples feature a frontend framework or static site, created with zero configuration using the CLI tools they provide.
|
||||
|
||||
The `+functions` examples feature an `/api` directory as well, highlighting how to use serverless functions on top of a framework, again with zero configuration required.
|
||||
|
||||
## What is ZEIT Now?
|
||||
|
||||
ZEIT Now is a cloud platform for static frontends and serverless functions. It enables developers to host websites and web applications that deploy instantly, scale automatically, and require no supervision.
|
||||
|
||||
## What Does this Repository Contain?
|
||||
|
||||
This repository consists of multiple examples, created for use with the [ZEIT Now](https://zeit.co/now) platform. In addition to this, it also contains:
|
||||
|
||||
- [Code of Conduct](https://github.com/zeit/now/blob/master/.github/CODE_OF_CONDUCT.md) - our Code of Conduct, adapted from the [Contributor Covenant](http://contributor-covenant.org)
|
||||
- [Contributing Guidelines](https://github.com/zeit/now/blob/master/.github/CONTRIBUTING.md) - a guide on how to contribute to the Now Examples repository
|
||||
- [License](https://github.com/zeit/now/blob/master/LICENSE) - the standard MIT license under which these examples are published
|
||||
|
||||
We recommend familiarizing yourself with the above sections, particularly if you are looking to make a contribution.
|
||||
|
||||
## Deploying Examples
|
||||
|
||||
To get started using any of these examples as your own project, [install Now](https://zeit.co/download) and use either of the following commands in your terminal:
|
||||
|
||||
```sh
|
||||
now init # Pick an example in the CLI
|
||||
now init <example> # Create a new project from a specific <example>
|
||||
now init <example> <name> # Create a new project from a specific <example> with a different folder <name>
|
||||
```
|
||||
|
||||
Deploying your project takes seconds and can be done with **just a single command**:
|
||||
|
||||
```sh
|
||||
now # Deploys the project with Now
|
||||
```
|
||||
|
||||
With the `now` command, your project will be built and served by Now, providing you with a URL that can be shared immediately.
|
||||
|
||||
## New Examples
|
||||
|
||||
We are continuously improving our examples based on best practices and feedback from the community. As a result, it is possible that example names will change and on occasion deprecated in favor of an improved implementation.
|
||||
|
||||
For example, the previous `nodejs` example showed a static frontend with a Node.js API. This is illustrated now in the `svelte` example. Below is a table that lists some of the most popular previous examples and the equivalent replacement:
|
||||
|
||||
| Previous Example | New Example |
|
||||
| ----------------- | ------------------------------------------------------------------------------------- |
|
||||
| **monorepo** | [gatsby-functions](https://github.com/zeit/now/tree/master/examples/gatsby) |
|
||||
| **nodejs** | [svelte-functions](https://github.com/zeit/now/tree/master/examples/svelte) |
|
||||
| **nextjs-static** | [nextjs](https://github.com/zeit/now/tree/master/examples/nextjs) |
|
||||
| **vanilla-go** | [create-react-app](https://github.com/zeit/now/tree/master/examples/create-react-app) |
|
||||
| **typescript** | [gatsby-functions](https://github.com/zeit/now/tree/master/examples/gatsby) |
|
||||
|
||||
## Migrating and Upgrading
|
||||
|
||||
If you have an existing project you would like to deploy with ZEIT Now, we recommend reading our guide on [migrating to Now and zero configuration](https://zeit.co/guides/migrate-to-zeit-now/). By combining the guide with this repository, you will quickly be able to understand how to deploy your application.
|
||||
|
||||
If you would like to upgrade a project to take advantage of zero configuration, you may find the [upgrade guide](https://zeit.co/guides/upgrade-to-zero-configuration/) useful. The upgrade guide covers how to remove configuration from existing projects along with how to use the `/api` directory.
|
||||
|
||||
## How to Contribute
|
||||
|
||||
Contributing to Now Examples should be an enjoyable experience, as such we have created a set of [contributing guidelines](https://github.com/zeit/docs/blob/master/CONTRIBUTING.md) to help you do so.
|
||||
|
||||
The guidelines cover important information such as the requirements for new examples and where to get help if you have any questions.
|
||||
|
||||
We have tried to make contributing to Now Examples as easy as possible, especially for those new to Open Source. If anything is unclear or you have any questions then please reach out to us on [ZEIT Spectrum](https://spectrum.chat/zeit) where we will do our best to help you.
|
||||
|
||||
## Reporting Issues
|
||||
|
||||
We actively encourage our community to raise issues and provide feedback on areas of Now Examples that could be improved.
|
||||
|
||||
An issue can be raised by clicking the 'Issues' tab at the top of the repository, followed by the Green 'New issue' button.
|
||||
|
||||
When submitting an issue, please thoroughly and concisely describe the problem you are experiencing so that we may easily understand and resolve the issue in a timely manner.
|
||||
|
||||
## License
|
||||
|
||||
Now Examples is an open source project released under the [MIT License](https://github.com/zeit/docs/blob/master/LICENSE.md).
|
||||
|
||||
## Get In Touch
|
||||
|
||||
If you have any questions that are not covered by raising an issue then please get in touch with us on the [ZEIT Spectrum](https://spectrum.chat/zeit). There you will find both members of the community and staff who are happy to help answer questions on anything ZEIT related.
|
||||
|
||||
[](https://spectrum.chat/zeit)
|
||||
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/tree/master/examples/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/tree/master/examples/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/tree/master/examples/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/tree/master/examples/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) {
|
||||
//
|
||||
}
|
||||
}
|
||||
`;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user