Compare commits
2178 Commits
Author | SHA1 | Date | |
---|---|---|---|
5edeee69dd | |||
ce85cbf2d3 | |||
c305b5ca31 | |||
b970028057 | |||
e67c69a782 | |||
03a8b16ec9 | |||
fd4ce84584 | |||
0671e540c2 | |||
45c7b23cc8 | |||
9b31f77c19 | |||
927d691d56 | |||
4fb5e21426 | |||
6518dae45e | |||
83d68b3521 | |||
cf28373629 | |||
598b3ff5d7 | |||
011937555f | |||
f33d8fe11d | |||
c9d80b2fc8 | |||
81c40cb5e8 | |||
822036362b | |||
eee8c7f718 | |||
1797390c8b | |||
4a4b6be731 | |||
4b1dcaf0f5 | |||
4f8d30361a | |||
098ba19560 | |||
5149d98acc | |||
db693f482f | |||
84c9c6ecc2 | |||
a52d103341 | |||
ec77bc4fc5 | |||
1129f10f26 | |||
3006a560fd | |||
8e9be6ce0d | |||
99e4daec94 | |||
90c249bc78 | |||
83941d68df | |||
a30fd2993b | |||
a84093a971 | |||
37e1c04e6a | |||
985762b5bc | |||
be0f994657 | |||
6aa259246e | |||
ad7850e4b8 | |||
c3b5ce4bb2 | |||
554c2cbd5c | |||
a245e9d0a3 | |||
e19eebcba1 | |||
fe42930ddd | |||
c99165f789 | |||
cd2ffea668 | |||
94d002b64e | |||
3cc24a9ac4 | |||
d13cab77fc | |||
91a2fd5c33 | |||
9251519a0e | |||
baf77e4adf | |||
d9fcfd3b24 | |||
bfcf6d09e1 | |||
9f03a85694 | |||
6d39a4a031 | |||
480a4c3061 | |||
18ed9dcd83 | |||
411d4ad79a | |||
b285630767 | |||
32d103816e | |||
5b5dc811c1 | |||
dea1b962c7 | |||
dce230eb00 | |||
672abb5871 | |||
b582bc26d7 | |||
c3c11403c0 | |||
24ffe3745b | |||
dfa8356dc4 | |||
b6a3a739bf | |||
da85e733d7 | |||
f3f4195ec9 | |||
55cc2040d1 | |||
8e3c0d6639 | |||
14fc1812f3 | |||
7c1fd91b8f | |||
931338e9d8 | |||
829f506732 | |||
727f92f75d | |||
4e6d237e54 | |||
0599d6f7bc | |||
b81631e737 | |||
acf8d49829 | |||
60b887090c | |||
bcb539f6de | |||
20237d2f1d | |||
f4b9d664f2 | |||
dd01329408 | |||
becab76c4a | |||
bdda57c23c | |||
1da1c3ca4d | |||
933bf53803 | |||
41f7db792f | |||
b72fce8acf | |||
483ba6aef7 | |||
24555dbb2d | |||
7de87728e2 | |||
cf3071f16a | |||
cf1fa6039c | |||
eefafbd65a | |||
67b3c969c9 | |||
d5eada64fc | |||
a06a5741c5 | |||
8e3d2460d5 | |||
6e595d92d8 | |||
1a23c79835 | |||
63868df49d | |||
ca95af10c6 | |||
ad9ec5204c | |||
a5c9cd7e52 | |||
110289276c | |||
3f7be7d608 | |||
f83be86f9d | |||
537562ea19 | |||
7dac29abd0 | |||
a320dc90f5 | |||
7a09530d7f | |||
152eec5543 | |||
22357d4796 | |||
122b042f4d | |||
c2ef5ac329 | |||
31e9873373 | |||
6a771d9659 | |||
60823ae135 | |||
54b5ec496e | |||
cac2d102a1 | |||
c30c518898 | |||
d21b7a458c | |||
ab12529941 | |||
58dbe662ff | |||
ae0df83493 | |||
e31eb1c8d2 | |||
f12f84091d | |||
093ac3938e | |||
be34503b3c | |||
633e070e30 | |||
7f96fbb79f | |||
0de632a102 | |||
2984c00f43 | |||
e4cf71c9f3 | |||
3ec64f92fd | |||
8dce6b4463 | |||
c7f0c017ca | |||
2172929099 | |||
1799f18264 | |||
48004c3917 | |||
bd8605adf6 | |||
bfbf2eae69 | |||
53322dfe77 | |||
ccf3f41e39 | |||
701952b61e | |||
54e86fd181 | |||
3bdf1164ce | |||
9fb11a8070 | |||
36dfca979f | |||
25e9ca0113 | |||
15c732c240 | |||
7bca243ab0 | |||
3b612afff3 | |||
36b8c0320b | |||
19c489524f | |||
dd0084609b | |||
0390d20d60 | |||
9b7d703b0b | |||
46cdc91da6 | |||
5b71c859b3 | |||
e82ed07227 | |||
7e0a031543 | |||
eaa4a5a76f | |||
4bc0abf003 | |||
4975f89fdd | |||
0e76821045 | |||
71f5417792 | |||
a332433141 | |||
e554f2d3ed | |||
2d377b03d6 | |||
c8440511ec | |||
03690442dc | |||
8f0732fb17 | |||
37c4da8ed6 | |||
8b858fb30a | |||
23c0147f25 | |||
9ccf181f89 | |||
900f8c8f3c | |||
d4857e4fe9 | |||
85c4f3aa8d | |||
fd03709e9c | |||
1543186c89 | |||
ce5afcc0be | |||
04c73e55c4 | |||
718176fe63 | |||
110f6c91b9 | |||
1d31c81624 | |||
2a537273ca | |||
c246787ccc | |||
bd79a16869 | |||
71a3c7208f | |||
c7c7b20684 | |||
c0e73e0d67 | |||
3843ffbdc7 | |||
96a671466e | |||
bbd5bd97b2 | |||
35916d3b5d | |||
baf4a63284 | |||
37467e6214 | |||
7038a5f3e7 | |||
efb17ae0c8 | |||
323de9be7b | |||
ae8802a519 | |||
b310c3b2c4 | |||
7c6a53fb8b | |||
4a6093d002 | |||
7a956c3d36 | |||
6b36d6ffb9 | |||
789706fe78 | |||
95e19a0ecb | |||
bdd3865314 | |||
8fca9b6530 | |||
b9adcf9ebc | |||
03f0f43fe0 | |||
49d68730f6 | |||
b890d10fc6 | |||
2e1a16bf95 | |||
3bbe1d9f30 | |||
49e8028f26 | |||
1ccf3e54f7 | |||
36268a7f4c | |||
4e3eb25edc | |||
904363528f | |||
6b20883c84 | |||
aa7f05f90a | |||
4f3e6e0faf | |||
d566621fef | |||
239c602f69 | |||
b57f7c7776 | |||
622737cee3 | |||
62e1186140 | |||
65354fb4ac | |||
bca432c60f | |||
ef70a89c7f | |||
c9db7bdb8a | |||
37727ce898 | |||
080a8bfd43 | |||
8f5c920474 | |||
c80392bcd2 | |||
92d26e26ea | |||
326c2ed15f | |||
43e2fd2c9f | |||
adc663e43b | |||
1e7851cf7c | |||
a95ae5d68e | |||
cc7fca4dc1 | |||
6a4186c017 | |||
28e9d0a2a6 | |||
81af3ed183 | |||
e69d02c69f | |||
2cf7d0fd05 | |||
1bccb7d403 | |||
bf01b665bc | |||
ba7f2f1617 | |||
b04d4ba9ef | |||
4eeb6cf24d | |||
a10d2a8dc4 | |||
8215b345e3 | |||
c99a4f8b3e | |||
2f2396cac0 | |||
73adfa23a1 | |||
3999d7adf0 | |||
b6dfb4da2d | |||
7b77b3d62e | |||
3897fb9014 | |||
6dd51f1cc2 | |||
d243d851a5 | |||
aa4f6c699d | |||
a4cbb86360 | |||
34c30ae0aa | |||
10ed25d335 | |||
7e8aac128b | |||
e83fe875a0 | |||
6fbc72f7da | |||
20dc436585 | |||
d4c1ab54a0 | |||
d8c29ffb28 | |||
41df82e60a | |||
f566705fba | |||
82f8d07b0f | |||
516c531207 | |||
065c788875 | |||
c1823f83cc | |||
a651fb98c5 | |||
81c114e8ef | |||
641c7cf35c | |||
05c4c0ccbc | |||
da693353f3 | |||
4eec1a94c7 | |||
aafd823669 | |||
86add54e39 | |||
92c17fe560 | |||
4090bb9461 | |||
4242c43545 | |||
a357e4c809 | |||
01dcb1d542 | |||
820e43289d | |||
c1fd5a9861 | |||
e5a352c3c6 | |||
4ace602ace | |||
7f93684f33 | |||
7643913298 | |||
21a9a41c5b | |||
93a035f7f6 | |||
f6fbe3a4a9 | |||
47a547da10 | |||
aff9f5f992 | |||
251d548a95 | |||
e689ef0313 | |||
55790663ce | |||
66d32acb28 | |||
0b6987e355 | |||
762c531e30 | |||
0945f2808f | |||
04ebe125b2 | |||
2f88faf5d9 | |||
484af4699e | |||
ae38e1e57c | |||
51a9f6c540 | |||
8560f016cd | |||
449a9fccc2 | |||
cdf5bd76e7 | |||
7fb43d0d02 | |||
fa30e31cd5 | |||
1cf28929f1 | |||
d1bac3bbbe | |||
f7415731cf | |||
bf695d7526 | |||
7f7d3584b3 | |||
c8ba576021 | |||
fb7a6ce586 | |||
32d4d97111 | |||
1268f77937 | |||
b6bc3887f0 | |||
76a84bfffc | |||
ad3d964955 | |||
7e98c5fc07 | |||
d05c5b1461 | |||
c8a9ef2fe5 | |||
26b8a639a2 | |||
331a59f48a | |||
72e075d570 | |||
99f7ac99f5 | |||
80521e4739 | |||
40fdb01108 | |||
f1eecd75ba | |||
373157970a | |||
fa39a8c026 | |||
c4d035e886 | |||
a7ca658d68 | |||
3113bb7ad2 | |||
e100bbc696 | |||
995bafd007 | |||
c9c0113a46 | |||
b1d213bece | |||
84fc2b09d8 | |||
4bffaf63da | |||
d16d1d8d3b | |||
7e10366977 | |||
a15f20b208 | |||
1ec9515f4f | |||
4928f1a492 | |||
6212bab745 | |||
a8c789d98d | |||
a7cd7d4df6 | |||
5b3e0d6d49 | |||
c18a3fe455 | |||
965f5575c7 | |||
d318249125 | |||
2c0b9ea310 | |||
b3af2202b9 | |||
76d7aa7b19 | |||
1f05929c22 | |||
eb5c20cf64 | |||
fe19327d14 | |||
7305b02023 | |||
b0164c6a29 | |||
f1cdb8f15d | |||
ff02ddfd9b | |||
f48c81c1ca | |||
8ef1c60bcc | |||
a0eb57fb81 | |||
00675269cc | |||
f33ec38182 | |||
f8d4ce74fc | |||
bd85c0d9a6 | |||
71f94afe48 | |||
9801fc3c0a | |||
06fed476e7 | |||
80315b517f | |||
08c25818d8 | |||
a7d8dcd2ea | |||
31841d29fb | |||
c3490f7092 | |||
42d7039caa | |||
4955c256d2 | |||
0e01d5c5de | |||
368ea28e40 | |||
c9fdc661d6 | |||
cdf1b5f985 | |||
0bdaac7b77 | |||
30d4605000 | |||
38750e3f0b | |||
bb6d033a9c | |||
27a552d98e | |||
2d30e7dd28 | |||
64b807e201 | |||
d71c1215f6 | |||
d530dfc747 | |||
96941c7300 | |||
80a7bc8168 | |||
a5cdad57fe | |||
87d2c0739f | |||
613367508f | |||
58cc83ef1f | |||
c4e9cef314 | |||
3e72381bb0 | |||
d83071c3b1 | |||
68e6db5d7a | |||
f7dc3a7b64 | |||
e175878480 | |||
d35451327e | |||
3a5147bc7a | |||
1ec2eb4376 | |||
1bb0fbd733 | |||
e03c0f6ae5 | |||
9f051752af | |||
a812880054 | |||
94e6452bac | |||
a9f13015b2 | |||
0d9c7ba6b3 | |||
2ef0b500ef | |||
a88dc17e5b | |||
56a19f833e | |||
cb7dcb3d23 | |||
2b878f4a18 | |||
f312848c2e | |||
f7a2ed7d66 | |||
cbb175f010 | |||
d63572e87c | |||
937d3fd112 | |||
180d214ff4 | |||
7a5c892557 | |||
417682bbea | |||
05c31fbbc6 | |||
8804e422e4 | |||
16a799d28d | |||
bbeb0605ec | |||
f2952403dd | |||
66a1db7c6d | |||
e2e030d5cd | |||
83868be713 | |||
4def99ed38 | |||
7df28388c9 | |||
8a295ac012 | |||
1ea82785d9 | |||
8e6c5213dc | |||
98ed7c620f | |||
d9ae70e883 | |||
7c3172a469 | |||
7ddf794274 | |||
619e68b95b | |||
6274b02e99 | |||
79be3544c1 | |||
7bbfccfcd8 | |||
ba4aeed2eb | |||
186d310f6b | |||
10acac07e1 | |||
e5498460d1 | |||
6b68f4019c | |||
67a5460c14 | |||
4f3215d281 | |||
a53f510c63 | |||
c42b90b81d | |||
17801c3076 | |||
56be6288a0 | |||
15c8efd5ef | |||
a56b11ca9a | |||
a980551e93 | |||
37912362a2 | |||
0f11bfec77 | |||
e6850a3c51 | |||
c692757029 | |||
fa43184c0f | |||
8573677528 | |||
0be9456b0a | |||
4ce67d7c3e | |||
ba4c31cd95 | |||
925a861ca1 | |||
22533fb5b4 | |||
963ed711d8 | |||
7a0d6e7cba | |||
166009584f | |||
284559614e | |||
5f640c47bd | |||
32d321d1da | |||
532a911325 | |||
d5e0073efd | |||
ac67c5b1f8 | |||
88adc3036e | |||
8a25cd4e96 | |||
4414fce46e | |||
381b895a34 | |||
ca8b584097 | |||
fde5067996 | |||
6c33b7040d | |||
f563c7c656 | |||
0638e65ab1 | |||
197620c24b | |||
c1fd6293fe | |||
e18c679880 | |||
d6edeab1a6 | |||
82297645a2 | |||
3e695da964 | |||
76219f6e4b | |||
2ef633ef8b | |||
44034888fc | |||
c0c2ab30cb | |||
4bffb6bd6e | |||
84a7d8a4e4 | |||
9ca5faab47 | |||
b2a8466e45 | |||
5ec4fb2f2a | |||
1ebb405ef0 | |||
2ea26de2b6 | |||
4e41bf9e30 | |||
7ea39849ff | |||
82dce68e13 | |||
deeb87dc24 | |||
c58edd3216 | |||
4063b1dbf7 | |||
03e236a9f4 | |||
f48e807d9a | |||
e5d992c175 | |||
b1d4c58b81 | |||
76e4870a3f | |||
11257b85fa | |||
ab614802e4 | |||
7916b1e595 | |||
6607fb496a | |||
ee1eebd5d8 | |||
05b4f8eb9d | |||
da425b7553 | |||
931cb5ecd4 | |||
c9172cf1df | |||
caae6738c2 | |||
dfed492214 | |||
d2f40b9595 | |||
199d7da343 | |||
c511d3d09b | |||
3de87d7150 | |||
ff06c05494 | |||
60d1d5efa1 | |||
d83599d8b1 | |||
65fb2fd765 | |||
08ce0262c3 | |||
3c3c07e40e | |||
0ff54f2369 | |||
9bff8e73c5 | |||
bed62b15a2 | |||
4d99dfe6da | |||
8c8eaa460f | |||
4779d24e75 | |||
d661f1e993 | |||
5e075ae96c | |||
35ccf5a101 | |||
fb4a11a859 | |||
adb0663d58 | |||
940e62ba11 | |||
5d871b56c6 | |||
82442c588d | |||
eb9a8ac52c | |||
ce9419220b | |||
45b73c2a7d | |||
bfc575139c | |||
418d586908 | |||
c387952739 | |||
e6ead8a066 | |||
631e70b6ae | |||
25b210a269 | |||
c26738df12 | |||
241f948358 | |||
de71f9152c | |||
8c01446b68 | |||
cfa135d4e6 | |||
382631b20e | |||
5ea93196ac | |||
81c75cf560 | |||
63366af648 | |||
1489e5e969 | |||
d55370e004 | |||
305fecf879 | |||
5d48dbc162 | |||
b490f0d7fb | |||
7ca4f763db | |||
184b83911c | |||
d7c459a81a | |||
b4d49eafc1 | |||
7fe9145f1f | |||
ad82ed891e | |||
bcebc5f4f3 | |||
676aca108f | |||
4b95ba43a5 | |||
7ed984b30c | |||
c66fd060c0 | |||
d3ec306d98 | |||
bbb9412a17 | |||
edfaab62bc | |||
059206b7b7 | |||
74bbe3e413 | |||
46f9201e6f | |||
7b59159443 | |||
b0d5784b63 | |||
7c2bb37e4e | |||
8c53de2cce | |||
3b3610164b | |||
0d07d8379b | |||
24d1f9e87c | |||
3cd43c1173 | |||
599dcd0d85 | |||
60051ebb59 | |||
e3d829fc66 | |||
1347064342 | |||
d0160e71f9 | |||
eb8cd6cb57 | |||
10a33efc3e | |||
26dba2180f | |||
24bbcafe78 | |||
af36bc6ba3 | |||
6e944acaae | |||
8288f8f0a4 | |||
5dcc7e4524 | |||
7dfd327099 | |||
6c70ba7376 | |||
9a43749854 | |||
0e911f87b0 | |||
99745009a8 | |||
46393379e1 | |||
b4680a64c5 | |||
72a5a8cab7 | |||
5f0703de16 | |||
178016b69e | |||
ab85c39589 | |||
50e115e609 | |||
5aeb16f422 | |||
81c8b83a8f | |||
b4600cadbf | |||
83ccaa6cec | |||
b5f2824913 | |||
f87f011e7c | |||
4bf1bdc69a | |||
69dd516666 | |||
aa2b5789a2 | |||
a97d2c06c5 | |||
a616c429ab | |||
1183075d16 | |||
a02bde74d2 | |||
848018f5d3 | |||
95557318bc | |||
f1737ff578 | |||
4d025562c4 | |||
25462614db | |||
c92c9f7e21 | |||
668692598b | |||
41ea3c214a | |||
eae541b6e2 | |||
b712065726 | |||
00f7372554 | |||
5a98410a7d | |||
65cd811de8 | |||
0044c6621e | |||
91f4b81f79 | |||
383be62afa | |||
6123261ad6 | |||
d2538cab5a | |||
dd6da21068 | |||
d516d5253b | |||
c89017a286 | |||
65755edfa0 | |||
4836fe08b5 | |||
1bab8c2757 | |||
f4d714ca0b | |||
5cf5843be3 | |||
64317c680d | |||
93ac362848 | |||
62d384dbbd | |||
33d3340bac | |||
7414ece2fa | |||
54bfd8a0c1 | |||
cba37734b4 | |||
f11c6b1d42 | |||
60c350cd95 | |||
3516213632 | |||
396779f6e6 | |||
fb22f18694 | |||
db4789bf91 | |||
354f66b904 | |||
716fc845f5 | |||
ce79cacd03 | |||
7504543962 | |||
b640d38fd1 | |||
c3c363fef9 | |||
d5a48b2cc0 | |||
69d27f3a08 | |||
daa403fb61 | |||
572e731b63 | |||
0d102bb918 | |||
bbfca62b66 | |||
08c0e6a002 | |||
9995d87f96 | |||
3224d7e79c | |||
a5fe8501c4 | |||
7a7e999fb5 | |||
29de8d3ab1 | |||
bfeb4d2324 | |||
75f4757173 | |||
12e4aa0bb6 | |||
127baa0d38 | |||
075f01341d | |||
2f8bbec6af | |||
4e766b8e0c | |||
846ff256c3 | |||
325e2665ff | |||
bf16b0e4be | |||
ca88f7d2ef | |||
7385e9d06d | |||
ef8b95abae | |||
fc2db27446 | |||
b05ce85391 | |||
7faa9bbc09 | |||
7402430d06 | |||
5a8d25dfc6 | |||
955a3129f0 | |||
e059df3bad | |||
a7b298a4fd | |||
00f8d6ac64 | |||
1b4fac192a | |||
7e6350ce2e | |||
9e5065a778 | |||
1eddb1ae15 | |||
9255dc3468 | |||
c5584b2dbc | |||
60db3505f6 | |||
6904319847 | |||
dda9b9ea7e | |||
e8ec296fdd | |||
4745aef9e8 | |||
a122311773 | |||
6bf258178d | |||
fec9f7dce5 | |||
d2784c7894 | |||
5cc362fbbf | |||
dee0c33a1d | |||
1d14f85dd6 | |||
5e530e917b | |||
781003fd2f | |||
cbc28f255d | |||
8a565c8814 | |||
d228801af4 | |||
978b500961 | |||
b659aa32c9 | |||
1d513e8978 | |||
d22f3d6f85 | |||
bbc8b0f142 | |||
ebe3229da5 | |||
caf5cffd53 | |||
cf420194ed | |||
420750bd05 | |||
7d8b112a91 | |||
abb8c90df9 | |||
efd626c4bc | |||
8c2ff79d04 | |||
457ac3ac46 | |||
688b188484 | |||
f63fca1e3a | |||
60570d0cb2 | |||
00f1ffbbb4 | |||
9d41b5bdd4 | |||
83989b879b | |||
290739f301 | |||
8ed7b73dc1 | |||
7b77ead88f | |||
27f775a65d | |||
f2bb9cc95e | |||
9248dba8fa | |||
1ffbde14ab | |||
4946be0b35 | |||
274ed2ca74 | |||
21ec7d92dd | |||
85a4a1ac60 | |||
e24ed8d0e2 | |||
229bfd507f | |||
af77e5289d | |||
b4c839ccb9 | |||
99e68d0318 | |||
971228b4f4 | |||
bda3c2245d | |||
63c9123924 | |||
aa4d2b785b | |||
719ca1d23c | |||
18574cfed1 | |||
ad9b9a3534 | |||
a54096ab5b | |||
e456e5833a | |||
4a42be27ee | |||
9719047df8 | |||
f1bf5b26d1 | |||
a528006d7a | |||
c1c04dc8ad | |||
90a9043abb | |||
a172644c6c | |||
d3825c20d5 | |||
c01fa1823f | |||
9a5334c75e | |||
250e6fdd39 | |||
196808eebb | |||
c6695faf47 | |||
3814674f9a | |||
e17f051601 | |||
ca5d7723ff | |||
1394781cef | |||
197f042fb1 | |||
fc6ad19089 | |||
90cd9682d2 | |||
80ecf12b4b | |||
b12fde4ceb | |||
94257ac8d3 | |||
fbd2133610 | |||
a09d60cb50 | |||
61cc7a3437 | |||
4e0eb3627d | |||
05a18cc4cb | |||
6da5230003 | |||
b8ba6b036c | |||
b31afc2aa9 | |||
3b5e1668ed | |||
7c7d432085 | |||
213e3c3e49 | |||
5267c92a93 | |||
595375f7a3 | |||
d92da1335d | |||
30ddadc4d7 | |||
dc8e300029 | |||
a7e2327212 | |||
a7d6829cde | |||
bc97c25efe | |||
49571bf11a | |||
14156bd262 | |||
e42fa81aa9 | |||
c7a3694eb9 | |||
839ac3c0a7 | |||
105616cd2b | |||
edd624b254 | |||
56801c74b9 | |||
01af94ccd7 | |||
456ea5cce4 | |||
1e78fafd37 | |||
83140f7926 | |||
b08bb411b9 | |||
1b4d264ccf | |||
05d5c4fc76 | |||
c126a6e3fc | |||
97ff04a7bd | |||
b744505620 | |||
b707c48817 | |||
2d7b015ed7 | |||
b53a1ac999 | |||
bc28ca7b0c | |||
b7c1a5e45f | |||
f136ddad0d | |||
5be23a309e | |||
6d06d9d3c6 | |||
b7c012f91b | |||
1b7aa05699 | |||
1218ce4f5f | |||
7ffbe54ef0 | |||
2f8c9e1990 | |||
bde55ecc91 | |||
aeaf530de6 | |||
66ecab6e8c | |||
f3d8f6adca | |||
a05e42ad09 | |||
0854dc8688 | |||
5926b2897f | |||
0405ddb521 | |||
1a9904d2f1 | |||
37243ce680 | |||
59a4b76b57 | |||
80cd7d7a40 | |||
e47638ec7c | |||
7567f2b8c8 | |||
ebf3afb7f0 | |||
d562625960 | |||
e57a8350e1 | |||
dafdf9a87b | |||
0e20453273 | |||
5bfcd8231a | |||
e641eaaae0 | |||
3074cdfea9 | |||
c182dea146 | |||
502fa906cd | |||
430293abe2 | |||
cba6b7dd20 | |||
09480d3a9d | |||
ca633535c5 | |||
9761ebe7bd | |||
9882a8215a | |||
0688a28be3 | |||
af2cca0c7a | |||
4a4888b276 | |||
d45bbccb58 | |||
d49c830064 | |||
12d67e0d31 | |||
d39b643553 | |||
84524583e9 | |||
a61fb76d51 | |||
b1d0a4f84d | |||
63c3569e2a | |||
aaa38cf3f3 | |||
a9d834fe69 | |||
987d2bd181 | |||
a16a57e52a | |||
1860a9edbc | |||
5fd0d15d86 | |||
8e5ed203bc | |||
06e36e5972 | |||
21bd8c9a2e | |||
1c1240c21a | |||
4c706086a7 | |||
93ba4c2418 | |||
3f6d9a9870 | |||
ba4f171fac | |||
744a3854f3 | |||
ac9fa2f2eb | |||
de8cf75ff5 | |||
5ad1e5f5ec | |||
b4d7a684f8 | |||
49e517d049 | |||
e1df98be17 | |||
1b489083bc | |||
9f10aa0d8c | |||
ecf38d48cf | |||
5f9a2d1cf8 | |||
8ed32e5e71 | |||
d67a38b7f5 | |||
f750f187d5 | |||
4e027fe3e4 | |||
1b0255c3b0 | |||
29852960c3 | |||
508bbfd92f | |||
e4cb91d373 | |||
71238a95d9 | |||
c22f15812c | |||
da01dbc459 | |||
37ae45e2ec | |||
4ec079f852 | |||
b75a21294f | |||
faaa96c737 | |||
c315881d04 | |||
bb9b8030d0 | |||
20e27a86d4 | |||
7c4366dce8 | |||
f8e9c1e6f1 | |||
4988094e7d | |||
9ab49def61 | |||
66157436f8 | |||
72796b98b1 | |||
ea83125df3 | |||
83626962cf | |||
5b292bf125 | |||
3160193719 | |||
9045e3e495 | |||
c5400616f8 | |||
f67802ddc0 | |||
ffb010d3ab | |||
f45d5dc331 | |||
9396b19631 | |||
343483cae0 | |||
682eaef690 | |||
011ecdf939 | |||
cdceb60bd0 | |||
4613639a02 | |||
f32ce01d93 | |||
3d13a6d318 | |||
46b5e4ae69 | |||
e6f383fe20 | |||
86d656bc67 | |||
c5737f4a19 | |||
0b998844c8 | |||
fc24a69a6b | |||
b789c891bb | |||
eb9ed8cc13 | |||
139b2e4f40 | |||
290ae43db3 | |||
c7f913d1ec | |||
ba68b560bc | |||
69fdcbd71c | |||
a6ddda8834 | |||
2910d1a65f | |||
811275cd15 | |||
c8c51a9879 | |||
33f6cd4799 | |||
c1bd3bc76a | |||
0248d6b8a7 | |||
4f69ff7e85 | |||
9df1178fe7 | |||
76e52c5297 | |||
83b635cb3f | |||
09cf0cd878 | |||
cb55f60c74 | |||
cd8333cf0d | |||
854a377232 | |||
8164d28b6c | |||
59b25da76b | |||
68380e4af2 | |||
4029c98f16 | |||
99ead47bff | |||
d09ad82293 | |||
4924d73b8e | |||
7bccef516f | |||
204620291e | |||
3419b5002f | |||
687582fd99 | |||
55b1b7745b | |||
a20979d5f6 | |||
2ed04ffcdc | |||
cf598f71fd | |||
1c22e464b2 | |||
fe12d0dc78 | |||
7b87392f47 | |||
e2d7b25e0d | |||
d749dd3ea1 | |||
2a4061a3fd | |||
41560b47c4 | |||
e89c2dd8d0 | |||
3297a76195 | |||
5453c4cd96 | |||
8e6bed988e | |||
8c6fb17d29 | |||
3de72e4124 | |||
d751ca7596 | |||
974005b064 | |||
1bd8fdb766 | |||
29007e406d | |||
c0ad47a3fb | |||
4b62ba9017 | |||
0addaab270 | |||
bf10e98891 | |||
44623a1161 | |||
c5894e08bc | |||
7e8eec57f0 | |||
5b21b71c9a | |||
cd6ab209b6 | |||
a3c44124ab | |||
502dd89290 | |||
85298e345d | |||
93a23b9ae0 | |||
90f33dd11d | |||
8d0de89ece | |||
d9a38928f5 | |||
25aaff2ee1 | |||
5bc1b6f9ac | |||
4abf15c50c | |||
9c13d6e8e6 | |||
91147ade2e | |||
e3189f97ff | |||
4ff43e1324 | |||
66725b7b37 | |||
5437e2da29 | |||
c83f5013bf | |||
ac9d044cad | |||
9e83814e61 | |||
f185fabc11 | |||
4857c53a49 | |||
4e7ffbfbac | |||
02308c4f71 | |||
a8f4f14bdc | |||
f02213a661 | |||
09536423e8 | |||
fc8eecad3f | |||
feb5f27d09 | |||
31116f0ced | |||
9ebac71521 | |||
ce30888a26 | |||
4d4b527474 | |||
602eeee7d6 | |||
38758d856a | |||
9db59d010d | |||
72eba7745f | |||
083d48e072 | |||
df1bef31a4 | |||
4452d6d848 | |||
41caafcaf2 | |||
2c208f98a9 | |||
3ff712a0f5 | |||
1d141a8ab1 | |||
d5ae854b5b | |||
d863839ecc | |||
66ab701606 | |||
64ac106248 | |||
4099822ba2 | |||
7355906a95 | |||
2b1ba1835e | |||
12703d5601 | |||
e4ebffab8d | |||
c4695bb387 | |||
7caed51c24 | |||
2eed7e33ef | |||
a38508122a | |||
c35587ba56 | |||
31dccab2da | |||
300d7ca6da | |||
563a507315 | |||
a5167bd53c | |||
87743f1aa1 | |||
502fb7e307 | |||
f197191a5f | |||
7e135f6d3a | |||
fba72f0d4d | |||
5666d11633 | |||
540d104b17 | |||
7193e151d7 | |||
1de757993d | |||
5ed6abe3df | |||
649093c0ec | |||
bf913cc39b | |||
ba0c178dbb | |||
c3e93564d0 | |||
d1246a1d10 | |||
f4160b5d5d | |||
936700ad9f | |||
a3034ef92e | |||
bd40c89688 | |||
da4eb91283 | |||
afa50838a7 | |||
4e38cabc49 | |||
27745c5d8c | |||
2f6c97e93c | |||
8b5ca670ad | |||
89704cc5f3 | |||
2c623fde16 | |||
c2f13a1e3a | |||
e483acaa17 | |||
e16f75db56 | |||
c61f413477 | |||
eb0d8c09e3 | |||
d8d8b8915c | |||
4ee354da99 | |||
41979d6a27 | |||
62b2840822 | |||
e23bc4991d | |||
7a280b1a21 | |||
26f44c0d6b | |||
5607ad8c62 | |||
335854f6bc | |||
4d23b60d09 | |||
eeecbf28e4 | |||
4b81bb5c97 | |||
14c4b1b205 | |||
3505692f75 | |||
8d15bfa6ee | |||
e4e8dbdee0 | |||
f085fd5666 | |||
49bfc7421a | |||
01455d70e3 | |||
aa36b55bd9 | |||
348615be62 | |||
e2310732d7 | |||
a78b70178e | |||
6323a35468 | |||
b381497126 | |||
818c514968 | |||
6b267482d7 | |||
2e5e1dd5f5 | |||
3858b26211 | |||
31b9492951 | |||
0de2dbfec1 | |||
dcdb433b7d | |||
ee4fc12e42 | |||
3f195fefa9 | |||
a17cc9beee | |||
0d9be22023 | |||
113411c9b0 | |||
d8ce2129d5 | |||
4aa51b751b | |||
09a2bb839f | |||
9ea3430a5b | |||
4821330a17 | |||
d883007cc6 | |||
4c4217c5b7 | |||
93a0b1ba13 | |||
73530a9e25 | |||
b00189bb9a | |||
a42057d0f8 | |||
9a5e08f2a7 | |||
63f0ded5cf | |||
25ed82db23 | |||
f76b370d70 | |||
fb84ea74fe | |||
f17072c7af | |||
fde8363e0d | |||
ed4244e932 | |||
efbbae5a48 | |||
22e483858e | |||
122f755b21 | |||
3d11355fec | |||
2805af900f | |||
2f3812a1ef | |||
f1269d98dc | |||
a1d7b6bb86 | |||
d40ee6a259 | |||
c79d6ec502 | |||
0e9140c738 | |||
2f541a979e | |||
e2211ed211 | |||
77240e1b60 | |||
ba29e4d953 | |||
355e54a410 | |||
1b607529a6 | |||
2ecc4c7886 | |||
3f257e96c6 | |||
8bc5fb2ab6 | |||
b04de1363d | |||
bd89626e2e | |||
66519de2dd | |||
f013515307 | |||
43ac02e566 | |||
ed4d96f858 | |||
383457f898 | |||
49eec5d872 | |||
c0b90c2010 | |||
398ff1e7e7 | |||
b3d6d500be | |||
1b8b04cf26 | |||
5632424d04 | |||
f1ffd57105 | |||
7f7dc7c294 | |||
5d86e4a9b1 | |||
aaa08f7be3 | |||
58b3a51e64 | |||
03103d2d59 | |||
447e251736 | |||
72d7eb7a93 | |||
df92abc60a | |||
65a0d2b53d | |||
e030375d9a | |||
c4733c15c0 | |||
a86a179f45 | |||
ec482dadb1 | |||
427a1ccd9a | |||
403bb6bee3 | |||
418e9cf3c4 | |||
fa0ab38546 | |||
3b643b8f3c | |||
37a87418b6 | |||
2ea52b0cb9 | |||
931739ac73 | |||
717bace7ba | |||
9de4b1c441 | |||
ff36a8daf6 | |||
8e2e1f8340 | |||
3ae72dccfb | |||
3f273f8d63 | |||
fbf6ec8813 | |||
56731f624a | |||
e5081bcf25 | |||
c0ebecf54d | |||
160547dad6 | |||
6471a2668e | |||
609d2557bc | |||
abd2a58c67 | |||
d7dc6cbc04 | |||
8017229292 | |||
755a80c7ec | |||
1b4eaea6d4 | |||
d4db746898 | |||
29bc3a775f | |||
8d44b5edac | |||
f289411fa9 | |||
32b042014d | |||
940fbbb014 | |||
1799f621b7 | |||
cb4f803238 | |||
0e08ad628a | |||
e0059c7d51 | |||
e122d27176 | |||
bab740d793 | |||
60e4490808 | |||
251a512222 | |||
692535a935 | |||
7c64b8d3fd | |||
c44a1a78a9 | |||
f6667f8281 | |||
6958d11d95 | |||
bfd07b3c94 | |||
01d3599f32 | |||
a0d16dcfea | |||
f0366843ea | |||
86e1e6c082 | |||
117ca7cf39 | |||
7fb55f29b6 | |||
eaa1984d41 | |||
d2222541e8 | |||
9e7668f16b | |||
5dfbcd5631 | |||
de445709d4 | |||
50710838bf | |||
4da2dda647 | |||
afcff73be3 | |||
2196114501 | |||
fd4fed14d8 | |||
422eb14dc0 | |||
7b64680670 | |||
d5b59009d4 | |||
f45c43188f | |||
9d54679e66 | |||
7e64bbe5a8 | |||
1a8bd22fa3 | |||
78214e72ea | |||
bb53b6549c | |||
43487f6761 | |||
6f203c9575 | |||
08cb2fa80f | |||
6c3c030f0d | |||
b60541c92a | |||
d1323b5c8f | |||
06093559a2 | |||
4800fa1c08 | |||
cc7c2a81df | |||
ab09895810 | |||
a9fd36f2f8 | |||
16fe90d6ac | |||
0e260d2c3b | |||
3dc6490e72 | |||
082aed6e46 | |||
d192a7b47a | |||
9e9491272f | |||
e4504a40bd | |||
a914859067 | |||
724707c6e4 | |||
e9ee6859e3 | |||
a67df6520a | |||
e71a93afb3 | |||
25bc56ed64 | |||
31b5db6fa8 | |||
11bf7679a1 | |||
43241a560a | |||
becd62d4a1 | |||
86104b82b8 | |||
cda9248b33 | |||
3e14c2d02c | |||
aef7dca234 | |||
21c1e14385 | |||
4c63e6ba04 | |||
4659cc26ea | |||
67c914819a | |||
51b9ce44ea | |||
d3f3d9b4cb | |||
4198ea7ca6 | |||
8c57a23b90 | |||
ad72c90447 | |||
11e04b1892 | |||
ec6a9f2a02 | |||
30d25f67af | |||
ca94d2b7f0 | |||
0bdb71c122 | |||
1cda80eb3a | |||
a86893c10f | |||
ce7f934c66 | |||
6bc016f3fa | |||
b6dfc8b08c | |||
8b0cb2f0c5 | |||
ac745c8356 | |||
a9228aabac | |||
8321bd8a74 | |||
72494c4411 | |||
10dcbcf45d | |||
5265b74138 | |||
64aae3a9df | |||
4c0726db9c | |||
fc93dafab1 | |||
d62eff7316 | |||
f433d6604b | |||
e409ed0eab | |||
0de2a5e408 | |||
c3aaa5211e | |||
dcbc3b197d | |||
0004896ff9 | |||
5e694e519b | |||
cd7b199219 | |||
f05999730a | |||
ece0b2d7ce | |||
50bf17aca0 | |||
39587ad127 | |||
5557dec120 | |||
52483bf680 | |||
1353afc2b1 | |||
b04488d692 | |||
68f06c8dd6 | |||
e2d5bc2514 | |||
868b3f9463 | |||
83425fa119 | |||
1845faa66b | |||
d617373a76 | |||
127cec0214 | |||
4b30108734 | |||
25af147a8c | |||
1a34fbce25 | |||
4acf0a09ac | |||
84ba1f012e | |||
1a67d70bf8 | |||
d8249d1230 | |||
c88305d2eb | |||
64fd0d6db9 | |||
d4d07233dc | |||
dcca80bb1e | |||
b800b88224 | |||
0b1daa9ebd | |||
15e3b5f531 | |||
0c69ec20c2 | |||
0dcff40ec2 | |||
b934898e45 | |||
9c153cfb3e | |||
c8fd94ea44 | |||
2ddc851090 | |||
f54adf10b5 | |||
b0834fe962 | |||
6ab5f3648a | |||
1ae77da609 | |||
100ba0bd06 | |||
df78d7c0d9 | |||
90007e97ca | |||
916762440c | |||
35a95a8a7e | |||
728cd8446f | |||
f640a4a494 | |||
5ede5b7807 | |||
af1f27e756 | |||
b2decf0266 | |||
8d111da7f6 | |||
22d4efbed1 | |||
3001716a2f | |||
ebd557c1e1 | |||
d349cd91b1 | |||
a2d2a5d572 | |||
b2666a2857 | |||
9abc1f9156 | |||
4283e1f784 | |||
4541b9b565 | |||
dcd28b591d | |||
4e1f37fc17 | |||
be54c580bf | |||
676a95a21c | |||
a3ef3e11c4 | |||
57d099ceea | |||
6028159dfb | |||
748edb81ec | |||
305f3686c3 | |||
009cab8dce | |||
90855f331f | |||
2cdb3a079d | |||
d5b87d32b0 | |||
b2b917d2d8 | |||
9f0c549bc8 | |||
affae99b22 | |||
ed711418f1 | |||
c653a16b57 | |||
64823f561c | |||
e1d07b2fd2 | |||
cdfbda3d3b | |||
78ada980a6 | |||
3830f6fc14 | |||
f783244ad1 | |||
2265cb5938 | |||
c507dda21a | |||
40d87dd801 | |||
0ce8621196 | |||
2089727db9 | |||
c1bb88603e | |||
fee28e20bb | |||
3efb060127 | |||
c61e4d7841 | |||
393398e6f5 | |||
e007918e35 | |||
3c2770bfc7 | |||
90fb5d9f7a | |||
d18289fa9c | |||
bad3434337 | |||
0119f46daf | |||
f8eca840ee | |||
7f6429d802 | |||
94b9b7e154 | |||
3a53e2c960 | |||
01677b21b6 | |||
60047037a3 | |||
e6881b5b42 | |||
8593d0d52e | |||
53d13c3fc6 | |||
442f323a32 | |||
480b775ba7 | |||
32b16de8ea | |||
ea9245446f | |||
ad753d3fa7 | |||
7c9219f029 | |||
eb72cecc42 | |||
bc886a64a7 | |||
75fd407bbd | |||
adb562bca6 | |||
900d0055e0 | |||
7806596fba | |||
deaac32bbd | |||
65297cde19 | |||
fca3e79415 | |||
bcbf3e4123 | |||
fc28b266cd | |||
447fa2fccd | |||
0f21ae9a74 | |||
9364a14d36 | |||
efbce7501b | |||
5332b04f35 | |||
6f5f481fda | |||
90dda5873a | |||
7503e3540d | |||
32e315755b | |||
9188751adc | |||
d24ade91b8 | |||
9b15588188 | |||
97d5700456 | |||
601f87c2ec | |||
052cae6427 | |||
e7729b6863 | |||
0d186dda35 | |||
3de59d48b5 | |||
3c7ac5f835 | |||
41ed694d01 | |||
954b8e53a2 | |||
a3b6b109d8 | |||
4e35e348af | |||
2729747225 | |||
be83ae752e | |||
70429bf350 | |||
add5c3992c | |||
04bfe87764 | |||
879ad69602 | |||
39e8ceb2cd | |||
448749cafa | |||
25219baeb4 | |||
948b01ce55 | |||
0f3a48e4d4 | |||
653eb0fef9 | |||
fc3260d87e | |||
296954041e | |||
1115961892 | |||
6db5c4a6f6 | |||
5d5c94d83a | |||
090732fc2d | |||
206fb82330 | |||
63256b511a | |||
01e4d44e8c | |||
66658c447f | |||
668f57abaa | |||
72f3747d7b | |||
088435c5eb | |||
32b6548be9 | |||
98feee7e0e | |||
28358b6395 | |||
9e7aa60ae7 | |||
ffc34b3676 | |||
b3549e6680 | |||
475e36abb5 | |||
53b32f17b3 | |||
45c893d0e1 | |||
c32b2ae0a8 | |||
747f0cff9e | |||
002a97d852 | |||
f438ae8a3a | |||
d5071651df | |||
8985233804 | |||
877f9ad7b9 | |||
a23ee2b0a1 | |||
e41cbfb585 | |||
84feda1db7 | |||
ecd7554051 | |||
5ae48d52e6 | |||
966c2a326a | |||
278d634723 | |||
f6914159e4 | |||
2e730287fb | |||
a7d090d22e | |||
85990c3213 | |||
fbad4ff65c | |||
c07b6fece5 | |||
e9867e8ae1 | |||
0ea4875b10 | |||
c1346462db | |||
c8be987b40 | |||
a54adcaff0 | |||
fe54af9ba6 | |||
8da26d9de9 | |||
4dddee7424 | |||
39bc6f7bea | |||
948714c17c | |||
e668d7971d | |||
3a96631387 | |||
c093390c22 | |||
32b6c2285e | |||
86fd5719b5 | |||
32f4544f34 | |||
f8f7c1540a | |||
52552b0520 | |||
5651fa3a95 | |||
353368cccd | |||
7a00c676ec | |||
04ddcfecd8 | |||
f3859ff2b9 | |||
0450f39625 | |||
5d12cb9fdf | |||
ec0aa88f4e | |||
f88f717094 | |||
0618bed83e | |||
708ae4c8ef | |||
5c2e890d76 | |||
5ace90f04d | |||
9d8dc793da | |||
2846505dbd | |||
ab29874f09 | |||
9b0861c649 | |||
df1c456347 | |||
05e1b3b312 | |||
3ace25f4a1 | |||
4726ac2481 | |||
252966bcca | |||
f1b1de9a3d | |||
4c168ed9ba | |||
cd4021ba41 | |||
a0d04c628c | |||
b741a1c3e7 | |||
357aa4a097 | |||
870d189433 | |||
c7abb7d196 | |||
fd62ed66e3 | |||
e5a3de575f | |||
894c4b5390 | |||
d9054803e3 | |||
4ff9c942c0 | |||
67d08b15e0 | |||
d2bf8fac5b | |||
a2e890e4f7 | |||
4f41473048 | |||
e6ed4a21e4 | |||
4c061271db | |||
52a6da043d | |||
1748aeb9c8 | |||
f6d66671b6 | |||
3a90a7cb43 | |||
8415460b12 | |||
217db9b216 | |||
be13e8b1e4 | |||
bfb3995869 | |||
5328bb223a | |||
0477bfc8ed | |||
e1065eec5b | |||
082b0d3ef8 | |||
c442c0334f | |||
c7ea3260bc | |||
bbb2798d41 | |||
2bf5606bbe | |||
e82f56b96f | |||
3c7da767d8 | |||
c4e039a43a | |||
5a830c49cf | |||
bd679581e2 | |||
ad178c55fd | |||
adeee0fa7f | |||
88c28ce208 | |||
e013aee636 | |||
373e1337de | |||
2279cb8dc0 | |||
222af38462 | |||
73cb581728 | |||
527ce3b142 | |||
f06505aafd | |||
51292e27c9 | |||
6674746e86 | |||
024765b86a | |||
eab959aa18 | |||
1771d6ff25 | |||
7a569a7c52 | |||
5cf597249c | |||
0a0489d3d0 | |||
fcdd06896e | |||
ea378a993a | |||
5f095a501e | |||
a85eccd6ff | |||
5356826a38 | |||
97dae900fb | |||
f0a969579d | |||
b6f439d91b | |||
d30cd3309b | |||
a32df388f8 | |||
8a911773b8 | |||
f5982fd746 | |||
4f033235b1 | |||
53dbff66d7 | |||
bb9e61202c | |||
c1ac21d5f7 | |||
15aeab1620 | |||
55b55e7c97 | |||
ff228b14d1 | |||
43bbc409a2 | |||
c84c27f7f4 | |||
a813ae07e2 | |||
6ccb4e0bab | |||
65f5c0476f | |||
d0dd69f177 | |||
79b673a17f | |||
3b37469735 | |||
8a7129e21a | |||
7059f7af11 | |||
f937f8f604 | |||
9448828b0d | |||
21245887e6 | |||
72807101ed | |||
25d90dabbe | |||
544eb89198 | |||
e38351fce7 | |||
f00bb85b58 | |||
5b2408f0a6 | |||
bbd4a33f6c | |||
6052b12fb3 | |||
ded57245e1 | |||
8a6e54a06d | |||
a1beba4b6e | |||
664e0015d4 | |||
2230dfaea7 | |||
ea6a2e9f25 | |||
9166baf709 | |||
a64eded521 | |||
a391aebbcf | |||
c3a1ef219e | |||
2895edc9c6 | |||
66df745721 | |||
18798a1cb2 | |||
8296f6b681 | |||
c714330856 | |||
e36e6c85ef | |||
f4e4bb2085 | |||
2844dd2972 | |||
0cf94e3ed5 | |||
9270d3f279 | |||
3127ba3c35 | |||
5c213e5474 | |||
3d9dd6df0e | |||
38359b166e | |||
bd1de32b33 | |||
bf15d3eea8 | |||
a65d3fa1de | |||
b5eda603a2 | |||
df5924abd0 | |||
33038f6ebe | |||
1716b91334 | |||
8ae7f14252 | |||
bc061b78be | |||
4c3674f660 | |||
497d6b1323 | |||
62d92f8091 | |||
098feec4a0 | |||
a9ff48e67f | |||
da42a7648a | |||
5ab7cb4188 | |||
fed6b25be0 | |||
7bbc3523ba | |||
f00d03356f | |||
36d613dd67 | |||
e505fa61f3 | |||
cc06153e85 | |||
d4003452c7 | |||
007282d2bb | |||
094538c0ce | |||
bda2b4ebb6 | |||
20dc5e83ee | |||
24b8b3427c | |||
a731119f9f | |||
0187b3288b | |||
4b037abda4 | |||
c849a30db4 | |||
5d8eb74634 | |||
7cc4225eb9 | |||
f6e88cd659 | |||
bdbf0c94b1 | |||
01e0f58dd6 | |||
f0bdf2a1ae | |||
641c5c1c1e | |||
a383a5a165 | |||
cfa09b84dd | |||
e213080c0b | |||
04d4fea3e8 | |||
89434e09c2 | |||
1a7c79746d | |||
c207ad80fd | |||
970b58b13f | |||
1ed3531049 | |||
a20fcbbe06 | |||
d0b3688a23 | |||
e8f9ba4b6c | |||
f5bec3ff50 | |||
9a55eaf10d | |||
8cdfcc5489 | |||
fe5caca884 | |||
a7f61e63fa | |||
c024d89448 | |||
fa79f51645 | |||
b21397bde9 | |||
b34bdf5c42 | |||
260217a800 | |||
c8b065524e | |||
60f963986f | |||
c507e4907d | |||
afc6ab5442 | |||
c56c2416a9 | |||
d498314850 | |||
8dc3f3647c | |||
67d80f9ae8 | |||
43619fc847 | |||
ad13520b24 | |||
350ea47def | |||
8c388e3730 | |||
9bbe67f286 | |||
ab30b2ad01 | |||
ba5e07efc7 | |||
df8e6750a1 | |||
1537791f06 | |||
77c382ccba | |||
8a47b48912 | |||
f7471eea3c | |||
4161d19374 | |||
375897801b | |||
03cbce8c66 | |||
288e5d894d | |||
b48dd52494 | |||
7fb3cc07de | |||
3af99a7b4a | |||
b4d3468088 | |||
266c267b62 | |||
d5101dff3b | |||
63dff9c888 | |||
7742a99cee | |||
5635505f2e | |||
cc288aec3d | |||
2d96576a10 | |||
a9864471a4 | |||
47a4edb817 | |||
3aba7ebe6a | |||
2b28b91fd9 | |||
18ce58c2bc | |||
852afb312a | |||
d4703d9316 | |||
1bb9ce5d8c | |||
97fc45f32a | |||
4b1251106e | |||
a1e91b00d2 | |||
fac066ea9f | |||
85864ed9f7 | |||
581b837e88 | |||
60a056d5dc | |||
543631f2b3 | |||
d0f3539e6e | |||
e5636a322c | |||
b094936d72 | |||
f3e4cb491e | |||
cb5701f8d9 | |||
c0680602f9 | |||
30dabdf8fc | |||
ede5786d1e | |||
46caf88b2c | |||
98420c27de | |||
a8131365c5 | |||
3e52e32dce | |||
0a09fb1432 | |||
2f6062f632 | |||
066b281979 | |||
125ef0a0ec | |||
65aaffcfe4 | |||
ac11a0be15 | |||
e3f42818e9 | |||
ef2047555a | |||
d953c1cee3 | |||
7c7fcd7ab8 | |||
c885178d5f | |||
14feb56139 | |||
f209aacbfa | |||
55eaa5fb6d | |||
70cf8ed05d | |||
c7c7f9fbe8 | |||
1cb62346e4 | |||
f57c17de2c | |||
0874bf42b6 | |||
3a4839c97e | |||
82abbecddf | |||
e63a7b0532 | |||
e3422e0aed | |||
860b5d0efa | |||
9bc9685911 | |||
cf4b944865 | |||
28c8b03797 | |||
24127a2492 | |||
bceeeba405 | |||
7bcd42e7be | |||
4908a5cffc | |||
c3f9893d81 | |||
25f31f2a14 | |||
e563d77128 | |||
e79ba194b4 | |||
ae9960be53 | |||
c7f4d500db | |||
e188c9703c | |||
b9fbd9bb03 | |||
a58a5fd7bb | |||
9bb5f05cb9 | |||
3693d7ad23 | |||
c624b14e8e | |||
3dd614db61 | |||
d443a28743 | |||
21bb74d16f | |||
1d1ab37546 | |||
a00824c986 | |||
d5aca7ef51 | |||
47cc92f004 | |||
e21e01ca22 | |||
6d11154652 | |||
6b245a39ee | |||
4f7c971ee7 | |||
0677cf0cbe | |||
904a2018e0 | |||
b6fa9299e5 | |||
21edc6a82e | |||
a367b90a82 | |||
a84b5ef81b | |||
5c94833b8f | |||
b85ac03136 | |||
7fed0faa44 | |||
02a567e46f | |||
0b009f06a9 | |||
e8c09e3b57 | |||
53bfa7c6d6 | |||
53f33c1cec | |||
10629600c5 | |||
4d549f69f8 | |||
de8ebbdfd0 | |||
0287b234ea | |||
bfc26bcd8c | |||
daac386f4d | |||
0db1b5d8f1 | |||
8e1a725462 | |||
424ab48672 | |||
62f4140634 | |||
64770571b2 | |||
c957dfc167 | |||
10ea3a9f4d | |||
ec4381dd40 | |||
2b64031ddc | |||
388578fec9 | |||
dd6070a49b | |||
3dbc4ab572 | |||
cfed0c0cf1 | |||
bb3c684b98 | |||
f8b995dbf9 | |||
639b732024 | |||
5da5ca5c23 | |||
0b1bf14cd8 | |||
d1cc7a0b26 | |||
431ddb9a45 | |||
7c2cd97e60 | |||
c2868de25a | |||
994264c0ba | |||
4bbf16e654 | |||
ae142a6827 | |||
e85ec23037 | |||
172bb76964 | |||
adb4f7c7cb | |||
5f76de1d71 | |||
71ada483bf | |||
abb44f7db0 | |||
43163523f6 | |||
ee486233e9 | |||
4c3b791ff3 | |||
964d72610f | |||
02bab8cf90 | |||
69ce1c2d41 | |||
6a0b1d58ba | |||
373d9660d0 | |||
1c6516199e | |||
3cf2005a93 | |||
2e4d17f3a9 | |||
40b28742a9 | |||
253a1125bf | |||
f41c41fd50 | |||
33fab26930 | |||
be665d8de1 | |||
c422c7210f | |||
f6a1de6b31 | |||
5a562d8a0a | |||
d6bbc4d76d | |||
4055150910 | |||
4d436800de | |||
0660903784 | |||
984d23f687 | |||
8af85d812d | |||
843881120a | |||
9e6c677135 | |||
9808d91c62 | |||
7a75f7805c | |||
cda205deb4 | |||
466f5c67d6 | |||
b9dfe66028 | |||
4d96cf5197 | |||
024c31da25 | |||
5064dc75ac | |||
bef27f2a28 | |||
628b0c1154 | |||
e4d5102b17 | |||
b25f925311 | |||
7d4c9e4b67 | |||
a5f39aeda6 | |||
a91ab15525 | |||
a95f860a96 | |||
6215636bc6 | |||
3cd8a2b907 | |||
ebcf79d7f3 | |||
a91a55a6d2 | |||
48487cb70e | |||
c68371ed14 | |||
9406104c0a | |||
c0194e0115 | |||
914900a561 | |||
4ea3e7e000 | |||
6eb9c2fab0 | |||
7b9414565e | |||
37de490e23 | |||
753080133b | |||
9a37e827e2 | |||
3df54be9e4 | |||
c0d5684078 | |||
2b289250d8 | |||
ddd02044ea | |||
c198a27a3c | |||
4f37487b1c | |||
0ddf0c4895 | |||
fd6ed1713d | |||
eb5412d76f | |||
7533338362 | |||
9896d438c0 | |||
684579b338 | |||
695f322dc1 | |||
f90c7a9df0 | |||
f2466cf4ee | |||
bed680cff8 | |||
a647298412 | |||
2abbe98e33 | |||
7613f13e54 | |||
4b8cdd4b57 | |||
17e289c39f | |||
2913340af7 | |||
f8c27d42ed | |||
17bb633031 | |||
9106271f2c | |||
48a3741d5a | |||
9d1f43f3ba | |||
6f98107d5e | |||
a8e2ee1343 | |||
e906a4f0d8 | |||
b5b33d12d6 | |||
22d3cabc10 | |||
a06043b703 | |||
4689ea2727 | |||
939529ce5d | |||
46304a4f83 | |||
f7eebd0227 | |||
8af2cc1efe | |||
e5a89e047c | |||
29d3b68554 | |||
93d27eefd5 | |||
ed70f73794 | |||
ef12e10e59 | |||
2954d1b5ca | |||
3077c9a1f8 | |||
9537b2ff84 | |||
961d663fbe | |||
57e15fc08b | |||
b70746a113 | |||
0709ed4c2b | |||
fa699f65d7 | |||
18bc4eda9f | |||
f542649b2b | |||
a574e462c9 | |||
65cafa0eec | |||
18aa173d39 | |||
bc8eb8508b | |||
7db269ba6a | |||
8e5567d964 | |||
541ce98432 | |||
e7e3f5d952 | |||
382d3ed1d2 | |||
a07de82f79 | |||
2e84f4e0cd | |||
a5b12db7d6 | |||
8b94d6a402 | |||
96cbcd6da4 | |||
2a6e6c02ed | |||
fa4e17082c | |||
ebb27727e4 | |||
046532b661 | |||
7b9891d7cd | |||
a2183ddb7a | |||
3122f3415a | |||
aaf29c8099 | |||
32e2f4daef | |||
a7c71d1a57 | |||
f2d47c96c4 | |||
184d270725 | |||
a610d12266 | |||
d0d875a3fe | |||
e8b8f6d09b | |||
9e9179e915 | |||
c1ae6124c8 | |||
b3b5c66414 | |||
82b97280f3 | |||
ecffbda664 | |||
adc39752f3 | |||
584b42343f | |||
8e7a0d4ff9 | |||
4db959260b | |||
76503e65c8 | |||
eac993dfce | |||
975917bafd | |||
185b3dd08e | |||
78659ec0b0 | |||
a9ec3db91a | |||
561ec6a5be | |||
c0317d40c9 | |||
a4bc0db474 | |||
430124a051 | |||
e08391b333 | |||
a77d0e22bf | |||
4f42eb4e77 | |||
f216724c2c | |||
5c9a8961da | |||
3479fddf68 | |||
5bebac42f9 | |||
cbcbe23fd1 | |||
fc6f48185c | |||
80f290e301 | |||
5e5be43acd | |||
0386c964b5 | |||
f5c605b608 | |||
14dba72aee | |||
5f0d5e9ccf | |||
5296c04f61 | |||
40a0666651 | |||
4da805243a | |||
14ae50b4c3 | |||
397d0ba9a3 | |||
859ebdd836 | |||
30673090ec | |||
6033446d2d | |||
174770e6f3 |
@ -6,4 +6,5 @@ aio/node_modules
|
|||||||
aio/tools/examples/shared/node_modules
|
aio/tools/examples/shared/node_modules
|
||||||
integration/bazel
|
integration/bazel
|
||||||
integration/bazel-schematics/demo
|
integration/bazel-schematics/demo
|
||||||
|
integration/platform-server/node_modules
|
||||||
packages/bazel/node_modules
|
packages/bazel/node_modules
|
||||||
|
87
.bazelrc
87
.bazelrc
@ -18,11 +18,8 @@ test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test
|
|||||||
# See https://github.com/bazelbuild/bazel/issues/4603
|
# See https://github.com/bazelbuild/bazel/issues/4603
|
||||||
build --symlink_prefix=dist/
|
build --symlink_prefix=dist/
|
||||||
|
|
||||||
# Disable watchfs as it causes tests to be flaky on Windows
|
|
||||||
# https://github.com/angular/angular/issues/29541
|
|
||||||
build --nowatchfs
|
|
||||||
|
|
||||||
# Turn off legacy external runfiles
|
# Turn off legacy external runfiles
|
||||||
|
build --nolegacy_external_runfiles
|
||||||
run --nolegacy_external_runfiles
|
run --nolegacy_external_runfiles
|
||||||
test --nolegacy_external_runfiles
|
test --nolegacy_external_runfiles
|
||||||
|
|
||||||
@ -46,6 +43,7 @@ test --incompatible_strict_action_env
|
|||||||
# This command assumes node on the path and is a workaround for
|
# This command assumes node on the path and is a workaround for
|
||||||
# https://github.com/bazelbuild/bazel/issues/4802
|
# https://github.com/bazelbuild/bazel/issues/4802
|
||||||
build:release --workspace_status_command="node ./tools/bazel_stamp_vars.js"
|
build:release --workspace_status_command="node ./tools/bazel_stamp_vars.js"
|
||||||
|
build:release --stamp
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# Output #
|
# Output #
|
||||||
@ -62,27 +60,39 @@ test --test_output=errors
|
|||||||
# Settings for CircleCI #
|
# Settings for CircleCI #
|
||||||
################################
|
################################
|
||||||
|
|
||||||
# Bazel flags for CircleCI are in /.circleci/bazel.rc
|
# Bazel flags for CircleCI are in /.circleci/bazel.linux.rc and /.circleci/bazel.windows.rc
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# Temporary Settings for Ivy #
|
# Temporary Settings for Ivy #
|
||||||
################################
|
################################
|
||||||
# to determine if the compiler used should be Ivy or ViewEngine one can use `--define=compile=aot` on
|
# To determine if the compiler used should be Ivy instead of ViewEngine, one can use `--config=ivy`
|
||||||
# any bazel target. This is a temporary flag until codebase is permanently switched to Ivy.
|
# on any bazel target. This is a temporary flag until codebase is permanently switched to Ivy.
|
||||||
build --define=compile=legacy
|
build --define=angular_ivy_enabled=False
|
||||||
|
|
||||||
###############################
|
build:view-engine --define=angular_ivy_enabled=False
|
||||||
# Remote Build Execution support
|
build:ivy --define=angular_ivy_enabled=True
|
||||||
# Turn on these settings with
|
|
||||||
# --config=remote
|
|
||||||
###############################
|
|
||||||
|
|
||||||
# Load default settings for Remote Build Execution.
|
##################################
|
||||||
import %workspace%/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/.bazelrc.notoolchain
|
# Remote Build Execution support #
|
||||||
|
# Turn on these settings with #
|
||||||
|
# --config=remote #
|
||||||
|
##################################
|
||||||
|
|
||||||
|
# The following --define=EXECUTOR=remote will be able to be removed
|
||||||
|
# once https://github.com/bazelbuild/bazel/issues/7254 is fixed
|
||||||
|
build:remote --define=EXECUTOR=remote
|
||||||
|
|
||||||
|
# Set a higher timeout value, just in case.
|
||||||
|
build:remote --remote_timeout=600
|
||||||
|
|
||||||
# Increase the default number of jobs by 50% because our build has lots of
|
# Increase the default number of jobs by 50% because our build has lots of
|
||||||
# parallelism
|
# parallelism
|
||||||
build:remote --jobs=150
|
build:remote --jobs=150
|
||||||
|
build:remote --google_default_credentials
|
||||||
|
|
||||||
|
# Force remote exeuctions to consider the entire run as linux
|
||||||
|
build:remote --cpu=k8
|
||||||
|
build:remote --host_cpu=k8
|
||||||
|
|
||||||
# Toolchain and platform related flags
|
# Toolchain and platform related flags
|
||||||
build:remote --host_javabase=@rbe_ubuntu1604_angular//java:jdk
|
build:remote --host_javabase=@rbe_ubuntu1604_angular//java:jdk
|
||||||
@ -96,21 +106,21 @@ build:remote --extra_execution_platforms=//tools:rbe_ubuntu1604-angular
|
|||||||
build:remote --host_platform=//tools:rbe_ubuntu1604-angular
|
build:remote --host_platform=//tools:rbe_ubuntu1604-angular
|
||||||
build:remote --platforms=//tools:rbe_ubuntu1604-angular
|
build:remote --platforms=//tools:rbe_ubuntu1604-angular
|
||||||
|
|
||||||
# Remote instance.
|
# Remote instance and caching
|
||||||
build:remote --remote_instance_name=projects/internal-200822/instances/default_instance
|
build:remote --remote_instance_name=projects/internal-200822/instances/default_instance
|
||||||
build:remote --project_id=internal-200822
|
build:remote --project_id=internal-200822
|
||||||
|
|
||||||
# Remote caching
|
|
||||||
build:remote --remote_cache=remotebuildexecution.googleapis.com
|
build:remote --remote_cache=remotebuildexecution.googleapis.com
|
||||||
# By default, do not accept remote cache, to be set to true for CI based on environment
|
build:remote --remote_executor=remotebuildexecution.googleapis.com
|
||||||
build:remote --remote_accept_cached=false
|
|
||||||
# By default, do not upload local results to cache, to be set to true for CI based on environment
|
|
||||||
build:remote --remote_upload_local_results=false
|
|
||||||
|
|
||||||
# Build Event Service Configuration
|
##################################
|
||||||
build:remote --bes_backend=buildeventservice.googleapis.com
|
# Saucelabs tests settings #
|
||||||
build:remote --bes_timeout=30s
|
# Turn on these settings with #
|
||||||
build:remote --bes_results_url="https://source.cloud.google.com/results/invocations/"
|
# --config=saucelabs #
|
||||||
|
##################################
|
||||||
|
|
||||||
|
# For saucelabs tests we don't want to enable flaky test attempts. Karma has its own integrated
|
||||||
|
# retry mechanism and we do not want to retry unnecessarily if Karma already tried multiple times.
|
||||||
|
test:saucelabs --flaky_test_attempts=1
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# NodeJS rules settings
|
# NodeJS rules settings
|
||||||
@ -121,31 +131,6 @@ build:remote --bes_results_url="https://source.cloud.google.com/results/invocati
|
|||||||
# This allows us to avoid installing a second copy of node_modules
|
# This allows us to avoid installing a second copy of node_modules
|
||||||
common --experimental_allow_incremental_repository_updates
|
common --experimental_allow_incremental_repository_updates
|
||||||
|
|
||||||
# This option is changed to true in Bazel 0.27 and exposes a possible
|
|
||||||
# regression in Bazel 0.27.0.
|
|
||||||
# Error observed is in npm_package target `//packages/common/locales:package`:
|
|
||||||
# ```
|
|
||||||
# ERROR: /home/circleci/ng/packages/common/locales/BUILD.bazel:13:1: Assembling
|
|
||||||
# npm package packages/common/locales/package failed: No usable spawn strategy found
|
|
||||||
# for spawn with mnemonic SkylarkAction. Your --spawn_strategyor --strategy flags
|
|
||||||
# are probably too strict. Visit https://github.com/bazelbuild/bazel/issues/7480 for
|
|
||||||
# migration advises
|
|
||||||
# ```
|
|
||||||
# Suspect is https://github.com/bazelbuild/rules_nodejs/blob/master/internal/npm_package/npm_package.bzl#L75-L82:
|
|
||||||
# ```
|
|
||||||
# execution_requirements = {
|
|
||||||
# # Never schedule this action remotely because it's not computationally expensive.
|
|
||||||
# # It just copies files into a directory; it's not worth copying inputs and outputs to a remote worker.
|
|
||||||
# # Also don't run it in a sandbox, because it resolves an absolute path to the bazel-out directory
|
|
||||||
# # allowing the .pack and .publish runnables to work with no symlink_prefix
|
|
||||||
# # See https://github.com/bazelbuild/rules_nodejs/issues/187
|
|
||||||
# "local": "1",
|
|
||||||
# },
|
|
||||||
# ```
|
|
||||||
build --incompatible_list_based_execution_strategy_selection=false
|
|
||||||
test --incompatible_list_based_execution_strategy_selection=false
|
|
||||||
run --incompatible_list_based_execution_strategy_selection=false
|
|
||||||
|
|
||||||
####################################################
|
####################################################
|
||||||
# User bazel configuration
|
# User bazel configuration
|
||||||
# NOTE: This needs to be the *last* entry in the config.
|
# NOTE: This needs to be the *last* entry in the config.
|
||||||
|
15
.circleci/bazel.common.rc
Normal file
15
.circleci/bazel.common.rc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Settings in this file should be OS agnostic. Use the bazel.<OS>.rc files for OS specific settings.
|
||||||
|
|
||||||
|
# Don't be spammy in the logs
|
||||||
|
build --noshow_progress
|
||||||
|
|
||||||
|
# Print all the options that apply to the build.
|
||||||
|
# This helps us diagnose which options override others
|
||||||
|
# (e.g. /etc/bazel.bazelrc vs. tools/bazel.rc)
|
||||||
|
build --announce_rc
|
||||||
|
|
||||||
|
# Retry in the event of flakes, eg. https://circleci.com/gh/angular/angular/31309
|
||||||
|
test --flaky_test_attempts=2
|
||||||
|
|
||||||
|
# More details on failures
|
||||||
|
build --verbose_failures=true
|
21
.circleci/bazel.linux.rc
Normal file
21
.circleci/bazel.linux.rc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# These options are enabled when running on CI
|
||||||
|
# We do this by copying this file to /etc/bazel.bazelrc at the start of the build.
|
||||||
|
# See documentation in /docs/BAZEL.md
|
||||||
|
|
||||||
|
# Import config items common to both Linux and Windows setups.
|
||||||
|
# https://docs.bazel.build/versions/master/guide.html#bazelrc-syntax-and-semantics
|
||||||
|
try-import %workspace%/.circleci/bazel.common.rc
|
||||||
|
|
||||||
|
# Save downloaded repositories in a location that can be cached by CircleCI. This helps us
|
||||||
|
# speeding up the analysis time significantly with Bazel managed node dependencies on the CI.
|
||||||
|
build --repository_cache=/home/circleci/bazel_repository_cache
|
||||||
|
|
||||||
|
# Workaround https://github.com/bazelbuild/bazel/issues/3645
|
||||||
|
# Bazel doesn't calculate the memory ceiling correctly when running under Docker.
|
||||||
|
# Limit Bazel to consuming resources that fit in CircleCI "xlarge" class
|
||||||
|
# https://circleci.com/docs/2.0/configuration-reference/#resource_class
|
||||||
|
build --local_resources=14336,8.0,1.0
|
||||||
|
|
||||||
|
# All build executed remotely should be done using our RBE configuration.
|
||||||
|
build:remote --google_default_credentials
|
||||||
|
build --config=remote
|
@ -1,41 +0,0 @@
|
|||||||
# These options are enabled when running on CI
|
|
||||||
# We do this by copying this file to /etc/bazel.bazelrc at the start of the build.
|
|
||||||
# See documentation in /docs/BAZEL.md
|
|
||||||
|
|
||||||
# Save downloaded repositories in a location that can be cached by CircleCI. This helps us
|
|
||||||
# speeding up the analysis time significantly with Bazel managed node dependencies on the CI.
|
|
||||||
build --repository_cache=/home/circleci/bazel_repository_cache
|
|
||||||
|
|
||||||
# Don't be spammy in the logs
|
|
||||||
# TODO(gmagolan): Hide progress again once build performance improves
|
|
||||||
# Presently, CircleCI can timeout during bazel test ... with the following
|
|
||||||
# error: Too long with no output (exceeded 10m0s)
|
|
||||||
# build --noshow_progress
|
|
||||||
|
|
||||||
# Print all the options that apply to the build.
|
|
||||||
# This helps us diagnose which options override others
|
|
||||||
# (e.g. /etc/bazel.bazelrc vs. tools/bazel.rc)
|
|
||||||
build --announce_rc
|
|
||||||
|
|
||||||
# Workaround https://github.com/bazelbuild/bazel/issues/3645
|
|
||||||
# Bazel doesn't calculate the memory ceiling correctly when running under Docker.
|
|
||||||
# Limit Bazel to consuming resources that fit in CircleCI "xlarge" class
|
|
||||||
# https://circleci.com/docs/2.0/configuration-reference/#resource_class
|
|
||||||
build --local_resources=14336,8.0,1.0
|
|
||||||
|
|
||||||
# Retry in the event of flakes, eg. https://circleci.com/gh/angular/angular/31309
|
|
||||||
test --flaky_test_attempts=2
|
|
||||||
|
|
||||||
# More details on failures
|
|
||||||
build --verbose_failures=true
|
|
||||||
|
|
||||||
# We have seen some flakiness in using TS workers on CircleCI
|
|
||||||
# https://angular-team.slack.com/archives/C07DT5M6V/p1562693245183400
|
|
||||||
# > failures like `ERROR: /home/circleci/ng/packages/core/test/BUILD.bazel:5:1:
|
|
||||||
# > Compiling TypeScript (devmode) //packages/core/test:test_lib failed: Worker process did not return a WorkResponse:`
|
|
||||||
# > I saw that issue a couple times today.
|
|
||||||
# > Example job: https://circleci.com/gh/angular/angular/385517
|
|
||||||
# We expect that TypeScript compilations will parallelize wider than the number of local cores anyway
|
|
||||||
# so we should saturate remote workers with TS compilations
|
|
||||||
build --strategy=AngularTemplateCompile=local
|
|
||||||
build --strategy=TypeScriptCompile=local
|
|
17
.circleci/bazel.windows.rc
Normal file
17
.circleci/bazel.windows.rc
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# These options are enabled when running on CI
|
||||||
|
# We do this by copying this file to $env:ProgramData\bazel.bazelrc at the start of the build.
|
||||||
|
# See documentation in /docs/BAZEL.md
|
||||||
|
|
||||||
|
# Import config items common to both Linux and Windows setups.
|
||||||
|
# https://docs.bazel.build/versions/master/guide.html#bazelrc-syntax-and-semantics
|
||||||
|
try-import %workspace%/.circleci/bazel.common.rc
|
||||||
|
|
||||||
|
# Save downloaded repositories in a location that can be cached by CircleCI. This helps us
|
||||||
|
# speeding up the analysis time significantly with Bazel managed node dependencies on the CI.
|
||||||
|
build --repository_cache=C:/Users/circleci/bazel_repository_cache
|
||||||
|
|
||||||
|
# All windows jobs run on master and should use http caching
|
||||||
|
build --remote_http_cache=https://storage.googleapis.com/angular-team-cache
|
||||||
|
build --remote_accept_cached=true
|
||||||
|
build --remote_upload_local_results=true
|
||||||
|
build --google_default_credentials
|
File diff suppressed because it is too large
Load Diff
@ -3,7 +3,6 @@
|
|||||||
# Variables
|
# Variables
|
||||||
readonly projectDir=$(realpath "$(dirname ${BASH_SOURCE[0]})/..")
|
readonly projectDir=$(realpath "$(dirname ${BASH_SOURCE[0]})/..")
|
||||||
readonly envHelpersPath="$projectDir/.circleci/env-helpers.inc.sh";
|
readonly envHelpersPath="$projectDir/.circleci/env-helpers.inc.sh";
|
||||||
readonly getCommitRangePath="$projectDir/.circleci/get-commit-range.js";
|
|
||||||
|
|
||||||
# Load helpers and make them available everywhere (through `$BASH_ENV`).
|
# Load helpers and make them available everywhere (through `$BASH_ENV`).
|
||||||
source $envHelpersPath;
|
source $envHelpersPath;
|
||||||
@ -19,16 +18,11 @@ setPublicVar PROJECT_ROOT "$projectDir";
|
|||||||
setPublicVar CI_AIO_MIN_PWA_SCORE "95";
|
setPublicVar CI_AIO_MIN_PWA_SCORE "95";
|
||||||
# This is the branch being built; e.g. `pull/12345` for PR builds.
|
# This is the branch being built; e.g. `pull/12345` for PR builds.
|
||||||
setPublicVar CI_BRANCH "$CIRCLE_BRANCH";
|
setPublicVar CI_BRANCH "$CIRCLE_BRANCH";
|
||||||
# ChromeDriver version compatible with the Chrome version included in the docker image used in
|
setPublicVar CI_BUILD_URL "$CIRCLE_BUILD_URL";
|
||||||
# `.circleci/config.yml`. See http://chromedriver.chromium.org/downloads for a list of versions.
|
|
||||||
# This variable is intended to be passed as an arg to the `webdriver-manager update` command (e.g.
|
|
||||||
# `"postinstall": "webdriver-manager update $CI_CHROMEDRIVER_VERSION_ARG"`).
|
|
||||||
setPublicVar CI_CHROMEDRIVER_VERSION_ARG "--versions.chrome 75.0.3770.90";
|
|
||||||
setPublicVar CI_COMMIT "$CIRCLE_SHA1";
|
setPublicVar CI_COMMIT "$CIRCLE_SHA1";
|
||||||
# `CI_COMMIT_RANGE` will only be available when `CIRCLE_COMPARE_URL` is also available (or can be
|
# `CI_COMMIT_RANGE` is only used on push builds (a.k.a. non-PR, non-scheduled builds and rerun
|
||||||
# retrieved via `get-compare-url.js`), i.e. on push builds (a.k.a. non-PR, non-scheduled builds and
|
# workflows of such builds).
|
||||||
# rerun workflows of such builds). That is fine, since we only need it in push builds.
|
setPublicVar CI_COMMIT_RANGE "$CIRCLE_GIT_BASE_REVISION..$CIRCLE_GIT_REVISION";
|
||||||
setPublicVar CI_COMMIT_RANGE "`[[ ${CIRCLE_PR_NUMBER:-false} != false ]] && echo "" || node $getCommitRangePath "$CIRCLE_BUILD_NUM" "$CIRCLE_COMPARE_URL"`";
|
|
||||||
setPublicVar CI_PULL_REQUEST "${CIRCLE_PR_NUMBER:-false}";
|
setPublicVar CI_PULL_REQUEST "${CIRCLE_PR_NUMBER:-false}";
|
||||||
setPublicVar CI_REPO_NAME "$CIRCLE_PROJECT_REPONAME";
|
setPublicVar CI_REPO_NAME "$CIRCLE_PROJECT_REPONAME";
|
||||||
setPublicVar CI_REPO_OWNER "$CIRCLE_PROJECT_USERNAME";
|
setPublicVar CI_REPO_OWNER "$CIRCLE_PROJECT_USERNAME";
|
||||||
@ -51,36 +45,47 @@ setSecretVar CI_SECRET_PAYLOAD_FIREBASE_TOKEN "$ANGULAR_PAYLOAD_TOKEN";
|
|||||||
####################################################################################################
|
####################################################################################################
|
||||||
# Define SauceLabs environment variables for CircleCI.
|
# Define SauceLabs environment variables for CircleCI.
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
# In order to have a meaningful SauceLabs badge on the repo page,
|
setPublicVar SAUCE_USERNAME "angular-framework";
|
||||||
# the angular2-ci account is used only when pushing commits to master;
|
setSecretVar SAUCE_ACCESS_KEY "0c731274ed5f-cbc9-16f4-021a-9835e39f";
|
||||||
# in all other cases, the regular angular-ci account is used.
|
|
||||||
if [ "${CI_PULL_REQUEST}" = "false" ] && [ "${CI_REPO_OWNER}" = "angular" ] && [ "${CI_BRANCH}" = "master" ]; then
|
|
||||||
setPublicVar SAUCE_USERNAME "angular2-ci";
|
|
||||||
setSecretVar SAUCE_ACCESS_KEY "693ebc16208a-0b5b-1614-8d66-a2662f4e";
|
|
||||||
else
|
|
||||||
setPublicVar SAUCE_USERNAME "angular-ci";
|
|
||||||
setSecretVar SAUCE_ACCESS_KEY "9b988f434ff8-fbca-8aa4-4ae3-35442987";
|
|
||||||
fi
|
|
||||||
# TODO(josephperrott): Remove environment variables once all saucelabs tests are via bazel method.
|
# TODO(josephperrott): Remove environment variables once all saucelabs tests are via bazel method.
|
||||||
setPublicVar SAUCE_LOG_FILE /tmp/angular/sauce-connect.log
|
setPublicVar SAUCE_LOG_FILE /tmp/angular/sauce-connect.log
|
||||||
setPublicVar SAUCE_READY_FILE /tmp/angular/sauce-connect-ready-file.lock
|
setPublicVar SAUCE_READY_FILE /tmp/angular/sauce-connect-ready-file.lock
|
||||||
setPublicVar SAUCE_PID_FILE /tmp/angular/sauce-connect-pid-file.lock
|
setPublicVar SAUCE_PID_FILE /tmp/angular/sauce-connect-pid-file.lock
|
||||||
setPublicVar SAUCE_TUNNEL_IDENTIFIER "angular-${CIRCLE_BUILD_NUM}-${CIRCLE_NODE_INDEX}"
|
setPublicVar SAUCE_TUNNEL_IDENTIFIER "angular-framework-${CIRCLE_BUILD_NUM}-${CIRCLE_NODE_INDEX}"
|
||||||
# Amount of seconds we wait for sauceconnect to establish a tunnel instance. In order to not
|
# Amount of seconds we wait for sauceconnect to establish a tunnel instance. In order to not
|
||||||
# acquire CircleCI instances for too long if sauceconnect failed, we need a connect timeout.
|
# acquire CircleCI instances for too long if sauceconnect failed, we need a connect timeout.
|
||||||
setPublicVar SAUCE_READY_FILE_TIMEOUT 120
|
setPublicVar SAUCE_READY_FILE_TIMEOUT 120
|
||||||
|
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
# Define environment variables for the Angular Material unit tests job.
|
# Define environment variables for the `angular/components` repo unit tests job.
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
# We specifically use a directory within "/tmp" here because we want the cloned repo to be
|
# We specifically use a directory within "/tmp" here because we want the cloned repo to be
|
||||||
# completely isolated from angular/angular in order to avoid any bad interactions between
|
# completely isolated from angular/angular in order to avoid any bad interactions between
|
||||||
# their separate build setups.
|
# their separate build setups. **NOTE**: When updating the temporary directory, also update
|
||||||
setPublicVar MATERIAL_REPO_TMP_DIR "/tmp/material2"
|
# the `save_cache` path configuration in `config.yml`
|
||||||
setPublicVar MATERIAL_REPO_URL "https://github.com/angular/material2.git"
|
setPublicVar COMPONENTS_REPO_TMP_DIR "/tmp/angular-components-repo"
|
||||||
setPublicVar MATERIAL_REPO_BRANCH "master"
|
setPublicVar COMPONENTS_REPO_URL "https://github.com/angular/components.git"
|
||||||
# **NOTE**: When updating the commit SHA, also update the cache key in the CircleCI "config.yml".
|
setPublicVar COMPONENTS_REPO_BRANCH "master"
|
||||||
setPublicVar MATERIAL_REPO_COMMIT "18b9ef3f5529f0fa8f034944681486447af7b879"
|
# **NOTE**: When updating the commit SHA, also update the cache key in the CircleCI `config.yml`.
|
||||||
|
setPublicVar COMPONENTS_REPO_COMMIT "2ec7254f88c4865e0de251f74c27e64c9d00d40a"
|
||||||
|
|
||||||
# Source `$BASH_ENV` to make the variables available immediately.
|
|
||||||
|
####################################################################################################
|
||||||
|
# Decrypt GCP Credentials and store them as the Google default credentials.
|
||||||
|
####################################################################################################
|
||||||
|
mkdir -p "$HOME/.config/gcloud";
|
||||||
|
openssl aes-256-cbc -d -in "${projectDir}/.circleci/gcp_token" \
|
||||||
|
-md md5 -k "$CIRCLE_PROJECT_REPONAME" -out "$HOME/.config/gcloud/application_default_credentials.json"
|
||||||
|
####################################################################################################
|
||||||
|
# Set bazel configuration for CircleCI runs.
|
||||||
|
####################################################################################################
|
||||||
|
cp "${projectDir}/.circleci/bazel.linux.rc" "$HOME/.bazelrc";
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
####################################################################################################
|
||||||
|
## Source `$BASH_ENV` to make the variables available immediately. ##
|
||||||
|
## ***NOTE: This must remain the the last action in this script*** ##
|
||||||
|
####################################################################################################
|
||||||
|
####################################################################################################
|
||||||
source $BASH_ENV;
|
source $BASH_ENV;
|
||||||
|
@ -1,159 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
|
|
||||||
/**
|
|
||||||
* **Usage:**
|
|
||||||
* ```
|
|
||||||
* node get-commit-range <build-number> [<compare-url> [<circle-token>]]
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* Returns the commit range, either extracting it from `compare-url` (if defined), which is of the
|
|
||||||
* format of the `CIRCLE_COMPARE_URL` environment variable, or by retrieving the equivalent of
|
|
||||||
* `CIRCLE_COMPARE_URL` for jobs that are part of a rerun workflow and extracting it from there.
|
|
||||||
*
|
|
||||||
* **Context:**
|
|
||||||
* CircleCI sets the `CIRCLE_COMPARE_URL` environment variable (from which we can extract the commit
|
|
||||||
* range) on push builds (a.k.a. non-PR, non-scheduled builds). Yet, when a workflow is rerun
|
|
||||||
* (either from the beginning or from failed jobs) - e.g. when a job flakes - CircleCI does not set
|
|
||||||
* the `CIRCLE_COMPARE_URL`.
|
|
||||||
*
|
|
||||||
* **Implementation details:**
|
|
||||||
* This script relies on the fact that all rerun workflows share the same CircleCI workspace and the
|
|
||||||
* (undocumented) fact that the workspace ID happens to be the same as the workflow ID that first
|
|
||||||
* created it.
|
|
||||||
*
|
|
||||||
* For example, for a job on push build workflow, the CircleCI API will return data that look like:
|
|
||||||
* ```js
|
|
||||||
* {
|
|
||||||
* compare: 'THE_COMPARE_URL_WE_ARE_LOOKING_FOR',
|
|
||||||
* //...
|
|
||||||
* previous: {
|
|
||||||
* // ...
|
|
||||||
* build_num: 12345,
|
|
||||||
* },
|
|
||||||
* //...
|
|
||||||
* workflows: {
|
|
||||||
* //...
|
|
||||||
* workflow_id: 'SOME_ID_A',
|
|
||||||
* workspace_id: 'SOME_ID_A', // Same as `workflow_id`.
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* If the workflow is rerun, the data for jobs on the new workflow will look like:
|
|
||||||
* ```js
|
|
||||||
* {
|
|
||||||
* compare: null, // ¯\_(ツ)_/¯
|
|
||||||
* //...
|
|
||||||
* previous: {
|
|
||||||
* // ...
|
|
||||||
* build_num: 23456,
|
|
||||||
* },
|
|
||||||
* //...
|
|
||||||
* workflows: {
|
|
||||||
* //...
|
|
||||||
* workflow_id: 'SOME_ID_B',
|
|
||||||
* workspace_id: 'SOME_ID_A', // Different from current `workflow_id`.
|
|
||||||
* // Same as original `workflow_id`. \o/
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* This script uses the `previous.build_num` (which points to the previous build number on the same
|
|
||||||
* branch) to traverse the jobs backwards, until it finds a job from the original workflow. Such a
|
|
||||||
* job (if found) should also contain the compare URL.
|
|
||||||
*
|
|
||||||
* **NOTE 1:**
|
|
||||||
* This is only useful on workflows which are created by rerunning a workflow for which
|
|
||||||
* `CIRCLE_COMPARE_URL` was defined.
|
|
||||||
*
|
|
||||||
* **NOTE 2:**
|
|
||||||
* The `circleToken` will be used for CircleCI API requests if provided, but it is not needed for
|
|
||||||
* accessing the read-only endpoints that we need (as long as the current project is FOSS and the
|
|
||||||
* corresponding setting is turned on in "Advanced Settings" in the project dashboard).
|
|
||||||
*
|
|
||||||
* ---
|
|
||||||
* Inspired by https://circleci.com/orbs/registry/orb/iynere/compare-url
|
|
||||||
* (source code: https://github.com/iynere/compare-url-orb).
|
|
||||||
*
|
|
||||||
* We are not using the `compare-url` orb for the following reasons:
|
|
||||||
* 1. (By looking at the code) it would only work if the rerun workflow is the latest workflow on
|
|
||||||
* the branch (which is not guaranteed to be true).
|
|
||||||
* 2. It is less efficient (e.g. makes unnecessary CircleCI API requests for builds on different
|
|
||||||
* branches, installs extra dependencies, persists files to the workspace (as a means of passing
|
|
||||||
* the result to the calling job), etc.).
|
|
||||||
* 3. It is slightly more complicated to setup and consume than our own script.
|
|
||||||
* 4. Its implementation is more complicated than needed for our usecase (e.g. handles different git
|
|
||||||
* providers, handles newly created branches, etc.).
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Imports
|
|
||||||
const {get: httpsGet} = require('https');
|
|
||||||
|
|
||||||
// Constants
|
|
||||||
const API_URL_BASE = 'https://circleci.com/api/v1.1/project/github/angular/angular';
|
|
||||||
const COMPARE_URL_RE = /^.*\/([0-9a-f]+\.\.\.[0-9a-f]+)$/i;
|
|
||||||
|
|
||||||
// Run
|
|
||||||
_main(process.argv.slice(2));
|
|
||||||
|
|
||||||
// Helpers
|
|
||||||
async function _main([buildNumber, compareUrl = '', circleToken = '']) {
|
|
||||||
try {
|
|
||||||
if (!buildNumber || isNaN(buildNumber)) {
|
|
||||||
throw new Error(
|
|
||||||
'Missing or invalid arguments.\n' +
|
|
||||||
'Expected: buildNumber (number), compareUrl? (string), circleToken? (string)');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!compareUrl) {
|
|
||||||
compareUrl = await getCompareUrl(buildNumber, circleToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
const commitRangeMatch = COMPARE_URL_RE.exec(compareUrl)
|
|
||||||
const commitRange = commitRangeMatch ? commitRangeMatch[1] : '';
|
|
||||||
|
|
||||||
console.log(commitRange);
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getBuildInfo(buildNumber, circleToken) {
|
|
||||||
console.error(`BUILD ${buildNumber}`);
|
|
||||||
const url = `${API_URL_BASE}/${buildNumber}?circle-token=${circleToken}`;
|
|
||||||
return getJson(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getCompareUrl(buildNumber, circleToken) {
|
|
||||||
let info = await getBuildInfo(buildNumber, circleToken);
|
|
||||||
const targetWorkflowId = info.workflows.workspace_id;
|
|
||||||
|
|
||||||
while (info.workflows.workflow_id !== targetWorkflowId) {
|
|
||||||
info = await getBuildInfo(info.previous.build_num, circleToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
return info.compare || '';
|
|
||||||
}
|
|
||||||
|
|
||||||
function getJson(url) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const opts = {headers: {Accept: 'application/json'}};
|
|
||||||
const onResponse = res => {
|
|
||||||
const statusCode = res.statusCode || -1;
|
|
||||||
const isSuccess = (200 <= statusCode) && (statusCode < 400);
|
|
||||||
let responseText = '';
|
|
||||||
|
|
||||||
res.
|
|
||||||
on('error', reject).
|
|
||||||
on('data', d => responseText += d).
|
|
||||||
on('end', () => isSuccess ?
|
|
||||||
resolve(JSON.parse(responseText)) :
|
|
||||||
reject(`Error getting '${url}' (status ${statusCode}):\n${responseText}`));
|
|
||||||
};
|
|
||||||
|
|
||||||
httpsGet(url, opts, onResponse).
|
|
||||||
on('error', reject).
|
|
||||||
end();
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -u -e -o pipefail
|
|
||||||
|
|
||||||
# The path of the .bazelrc.user file to update should be passed as first parameter to this script.
|
|
||||||
# This allows to setup RBE for both the Angular repo and the Material repo.
|
|
||||||
bazelrc_user="$1"
|
|
||||||
|
|
||||||
echo "Writing RBE configuration to ${bazelrc_user}"
|
|
||||||
|
|
||||||
touch ${bazelrc_user}
|
|
||||||
echo -e 'build --config=remote\n' >> ${bazelrc_user}
|
|
||||||
echo -e 'build:remote --remote_accept_cached=true\n' >> ${bazelrc_user}
|
|
||||||
echo "Reading from remote cache for bazel remote jobs."
|
|
||||||
if [[ "$CI_PULL_REQUEST" == "false" ]]; then
|
|
||||||
echo -e 'build:remote --remote_upload_local_results=true\n' >> ${bazelrc_user}
|
|
||||||
echo "Uploading local build results to remote cache."
|
|
||||||
else
|
|
||||||
echo -e 'build:remote --remote_upload_local_results=false\n' >> ${bazelrc_user}
|
|
||||||
echo "Not uploading local build results to remote cache."
|
|
||||||
fi
|
|
56
.circleci/windows-env.ps1
Normal file
56
.circleci/windows-env.ps1
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# Install Bazel pre-reqs on Windows
|
||||||
|
# https://docs.bazel.build/versions/master/install-windows.html
|
||||||
|
# https://docs.bazel.build/versions/master/windows.html
|
||||||
|
# Install MSYS2 and packages
|
||||||
|
choco install msys2 --version 20180531.0.0 --no-progress --package-parameters "/NoUpdate"
|
||||||
|
C:\tools\msys64\usr\bin\bash.exe -l -c "pacman --needed --noconfirm -S zip unzip patch diffutils git"
|
||||||
|
|
||||||
|
# Add PATH modifications to the Powershell profile. This is the win equivalent of .bash_profile.
|
||||||
|
# https://docs.microsoft.com/en-us/previous-versions//bb613488(v=vs.85)
|
||||||
|
new-item -path $profile -itemtype file -force
|
||||||
|
# Paths for nodejs, npm, yarn, and msys2. Use single quotes to prevent interpolation.
|
||||||
|
# Add before the original path to use msys2 instead of the installed gitbash.
|
||||||
|
Add-Content $profile '$Env:path = "${Env:ProgramFiles}\nodejs\;C:\Users\circleci\AppData\Roaming\npm\;${Env:ProgramFiles(x86)}\Yarn\bin\;C:\Users\circleci\AppData\Local\Yarn\bin\;C:\tools\msys64\usr\bin\;" + $Env:path'
|
||||||
|
# Environment variables for Bazel
|
||||||
|
Add-Content $profile '$Env:BAZEL_SH = "C:\tools\msys64\usr\bin\bash.exe"'
|
||||||
|
|
||||||
|
# Get the bazel version devdep and store it in a global var for use in the circleci job.
|
||||||
|
$bazelVersion = & ${Env:ProgramFiles}\nodejs\node.exe -e "console.log(require('./package.json').devDependencies['@bazel/bazel'])"
|
||||||
|
# This is a tricky situation: we want $bazelVersion to be evaluated but not $Env:BAZEL_VERSION.
|
||||||
|
# Formatting works https://stackoverflow.com/questions/32127583/expand-variable-inside-single-quotes
|
||||||
|
$bazelVersionGlobalVar = '$Env:BAZEL_VERSION = "{0}"' -f $bazelVersion
|
||||||
|
Add-Content $profile $bazelVersionGlobalVar
|
||||||
|
|
||||||
|
# Remove the CircleCI checkout SSH override, because it breaks cloning repositories through Bazel.
|
||||||
|
# See https://circleci.com/gh/angular/angular/401454 for an example.
|
||||||
|
# TODO: is this really needed? Maybe there's a better way. It doesn't happen on Linux or on Codefresh.
|
||||||
|
git config --global --unset url.ssh://git@github.com.insteadOf
|
||||||
|
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
# Decrypt GCP Credentials and store them as the Google default credentials.
|
||||||
|
####################################################################################################
|
||||||
|
mkdir ${env:APPDATA}\gcloud
|
||||||
|
openssl aes-256-cbc -d -in .circleci\gcp_token -md md5 -out "$env:APPDATA\gcloud\application_default_credentials.json" -k "$env:CIRCLE_PROJECT_REPONAME"
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
# Set bazel configuration for CircleCI runs.
|
||||||
|
####################################################################################################
|
||||||
|
copy .circleci\bazel.windows.rc ${Env:USERPROFILE}\.bazelrc
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
# Install specific version of node.
|
||||||
|
####################################################################################################
|
||||||
|
choco install nodejs --version 12.14.1 --no-progress
|
||||||
|
|
||||||
|
# These Bazel prereqs aren't needed because the CircleCI image already includes them.
|
||||||
|
# choco install yarn --version 1.16.0 --no-progress
|
||||||
|
# choco install vcredist2015 --version 14.0.24215.20170201
|
||||||
|
|
||||||
|
# We don't need VS Build Tools for the tested bazel targets.
|
||||||
|
# If it's needed again, uncomment these lines.
|
||||||
|
# VS Build Tools are needed for Bazel C++ targets (like com_google_protobuf)
|
||||||
|
# choco install visualstudio2019buildtools --version 16.1.2.0 --no-progress --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.Component.VC.Runtime.UCRTSDK --add Microsoft.VisualStudio.Component.Windows10SDK.17763"
|
||||||
|
# Add-Content $profile '$Env:BAZEL_VC = "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2019\BuildTools\VC\"'
|
||||||
|
# Python is needed for Bazel Python targets
|
||||||
|
# choco install python --version 3.5.1 --no-progress
|
31
.devcontainer/README.md
Normal file
31
.devcontainer/README.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# VSCode Remote Development - Developing inside a Containers
|
||||||
|
|
||||||
|
This folder contains configuration files that can be used to opt into working on this repository in a [Docker container](https://www.docker.com/resources/what-container) via [VSCode](https://code.visualstudio.com/)'s Remote Development feature (see below).
|
||||||
|
|
||||||
|
Info on remote development and developing inside a container with VSCode:
|
||||||
|
- [VSCode: Remote Development](https://code.visualstudio.com/docs/remote/remote-overview)
|
||||||
|
- [VSCode: Developing inside a Container](https://code.visualstudio.com/docs/remote/containers)
|
||||||
|
- [VSCode: Remote Development FAQ](https://code.visualstudio.com/docs/remote/faq)
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
_Prerequisite: [Install Docker](https://docs.docker.com/install) on your local environment._
|
||||||
|
|
||||||
|
To get started, read and follow the instuctions in [Developing inside a Container](https://code.visualstudio.com/docs/remote/containers). The [.devcontainer/](.) directory contains pre-configured `devcontainer.json` and `Dockerfile` files, which you can use to set up remote development with a docker container.
|
||||||
|
|
||||||
|
In a nutshell, you need to:
|
||||||
|
- Install the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension.
|
||||||
|
- Copy [recommended-Dockerfile](./recommended-Dockerfile) to `Dockerfile` (and optionally tweak to suit your needs).
|
||||||
|
- Copy [recommended-devcontainer.json](./recommended-devcontainer.json) to `devcontainer.json` (and optionally tweak to suit your needs).
|
||||||
|
- Open VSCode and bring up the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).
|
||||||
|
- Type `Remote-Containers: Open Folder in Container` and choose your local clone of [angular/angular](https://github.com/angular/angular).
|
||||||
|
|
||||||
|
The `.devcontainer/devcontainer.json` and `.devcontainer/Dockerfile` files are ignored by git, so you can have your own local versions. We may occasionally update the template files ([recommended-devcontainer.json](./recommended-devcontainer.json), [recommended-Dockerfile](./recommended-Dockerfile)), in which case you will need to manually update your local copies (if desired).
|
||||||
|
|
||||||
|
|
||||||
|
## Updating `recommended-devcontainer.json` and `recommended-Dockerfile`
|
||||||
|
|
||||||
|
You can update and commit the recommended config files (which people use as basis for their local configs), if you find that something is broken, out-of-date or can be improved.
|
||||||
|
|
||||||
|
Please, keep in mind that any changes you make will potentially be used by many people on different environments. Try to keep these config files cross-platform compatible and free of personal preferences.
|
@ -1,5 +1,6 @@
|
|||||||
# Image metadata and config.
|
# Image metadata and config.
|
||||||
FROM circleci/node:10-browsers
|
FROM circleci/node:10-browsers # Ideally, the image version should be what we use on CI.
|
||||||
|
# See `executors > browsers-executor` in `.circleci/config.yml`.
|
||||||
|
|
||||||
LABEL name="Angular dev environment" \
|
LABEL name="Angular dev environment" \
|
||||||
description="This image can be used to create a dev environment for building Angular." \
|
description="This image can be used to create a dev environment for building Angular." \
|
||||||
@ -15,7 +16,8 @@ USER root
|
|||||||
|
|
||||||
# Configure `Node.js`/`npm` and install utilities.
|
# Configure `Node.js`/`npm` and install utilities.
|
||||||
RUN npm config --global set user root
|
RUN npm config --global set user root
|
||||||
RUN npm install --global yarn@1.13.0 # This needs to be in sync with what we use on CI.
|
RUN npm install --global yarn@latest # Ideally, the version should be what we use on CI.
|
||||||
|
# See `commands > overwrite_yarn` in `.circleci/config.yml`.
|
||||||
|
|
||||||
|
|
||||||
# Go! (And keep going.)
|
# Go! (And keep going.)
|
||||||
|
929
.github/CODEOWNERS
vendored
929
.github/CODEOWNERS
vendored
@ -1,929 +0,0 @@
|
|||||||
# ==================================================================================
|
|
||||||
# ==================================================================================
|
|
||||||
# Angular CODEOWNERS
|
|
||||||
# ==================================================================================
|
|
||||||
# ==================================================================================
|
|
||||||
#
|
|
||||||
# Configuration of code ownership and review approvals for the angular/angular repo.
|
|
||||||
#
|
|
||||||
# More info: https://help.github.com/articles/about-codeowners/
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# General rules / philosophy
|
|
||||||
# ================================================
|
|
||||||
#
|
|
||||||
# - we trust that people do the right thing and not approve changes they don't feel confident reviewing
|
|
||||||
# - we use github teams so that we funnel code reviews to the most appropriate reviewer, this is why the team structure is fine-grained
|
|
||||||
# - we enforce that only approved PRs get merged to ensure that unreviewed code doesn't get accidentally merged
|
|
||||||
# - we delegate approval rights as much as possible so that we can scale better
|
|
||||||
# - each group must have at least one person, but several people are preferable to avoid a single point of failure issues
|
|
||||||
# - most file groups have one or two global approvers groups as fallbacks:
|
|
||||||
# - @angular/fw-global-approvers: for approving minor changes, large-scale refactorings, and emergency situations.
|
|
||||||
# - @angular/fw-global-approvers-for-docs-only-changes: for approving minor documentation-only changes that don't require engineering review
|
|
||||||
# - a small number of file groups have very limited number of reviewers because incorrect changes to the files they guard would have serious consequences (e.g. security, public api)
|
|
||||||
#
|
|
||||||
# Configuration nuances:
|
|
||||||
#
|
|
||||||
# - This configuration works in conjunction with the protected branch settings that require all changes to be made via pull requests with at least one approval.
|
|
||||||
# - This approval can come from an appropriate codeowner, or any repo collaborator (person with write access) if the PR is authored by a codeowner.
|
|
||||||
# - Each codeowners team must have write access to the repo, otherwise their reviews won't count.
|
|
||||||
#
|
|
||||||
# In the case of emergency, the repo administrators which include angular-caretaker can bypass this requirement.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# GitHub username registry
|
|
||||||
# (just to make this file easier to understand)
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
# alan-agius4 - Alan Agius
|
|
||||||
# alexeagle - Alex Eagle
|
|
||||||
# alxhub - Alex Rickabaugh
|
|
||||||
# AndrewKushnir - Andrew Kushnir
|
|
||||||
# andrewseguin - Andrew Seguin
|
|
||||||
# benlesh - Ben Lesh
|
|
||||||
# brandonroberts - Brandon Roberts
|
|
||||||
# devversion - Paul Gschwendtner
|
|
||||||
# filipesilva - Filipe Silva
|
|
||||||
# gkalpak - George Kalpakas
|
|
||||||
# hansl - Hans Larsen
|
|
||||||
# IgorMinar - Igor Minar
|
|
||||||
# jasonaden - Jason Aden
|
|
||||||
# jenniferfell - Jennifer Fell
|
|
||||||
# JiaLiPassion - Jia Li
|
|
||||||
# josephperrott - Joey Perrott
|
|
||||||
# kara - Kara Erickson
|
|
||||||
# kyliau - Keen Yee Liau
|
|
||||||
# matsko - Matias Niemelä
|
|
||||||
# mgechev - Minko Gechev
|
|
||||||
# mhevery - Misko Hevery
|
|
||||||
# ocombe - Olivier Combe
|
|
||||||
# petebacondarwin - Pete Bacon Darwin
|
|
||||||
# pkozlowski-opensource - Pawel Kozlowski
|
|
||||||
# robwormald - Rob Wormald
|
|
||||||
# stephenfluin - Stephen Fluin
|
|
||||||
# vikerman - Vikram Subramanian
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
#
|
|
||||||
# Team structure and memberships
|
|
||||||
# ------------------------------
|
|
||||||
#
|
|
||||||
# This section is here just because the GitHub UI is too hard to navigate and audit.
|
|
||||||
#
|
|
||||||
# Any changes to team structure or memberships must first be made in this file and only then
|
|
||||||
# implemented in the GitHub UI.
|
|
||||||
#######################################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/framework-global-approvers
|
|
||||||
# ===========================================================
|
|
||||||
# Used for approving minor changes, large-scale refactorings, and emergency situations.
|
|
||||||
# (secret team to avoid review requests, it also doesn't inherit from @angular/framework because nested teams can't be secret)
|
|
||||||
#
|
|
||||||
# - IgorMinar
|
|
||||||
# - kara
|
|
||||||
# - mhevery
|
|
||||||
# - alexeagle
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
# ===========================================================
|
|
||||||
# Used for approving minor documentation-only changes that don't require engineering review.
|
|
||||||
# (secret team to avoid review requests, it also doesn't inherit from @angular/framework because nested teams can't be secret)
|
|
||||||
#
|
|
||||||
# - brandonroberts
|
|
||||||
# - gkalpak
|
|
||||||
# - petebacondarwin
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-animations
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - matsko
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/tools-bazel
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alexeagle
|
|
||||||
# - kyliau
|
|
||||||
# - IgorMinar
|
|
||||||
# - mgechev
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/tools-cli
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alexeagle
|
|
||||||
# - filipesilva
|
|
||||||
# - hansl
|
|
||||||
# - mgechev
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-compiler
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alxhub
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-ngcc
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alxhub
|
|
||||||
# - gkalpak
|
|
||||||
# - petebacondarwin
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-core
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alxhub
|
|
||||||
# - AndrewKushnir
|
|
||||||
# - kara
|
|
||||||
# - mhevery
|
|
||||||
# - pkozlowski-opensource
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-http
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alxhub
|
|
||||||
# - IgorMinar
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-elements
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - andrewseguin
|
|
||||||
# - gkalpak
|
|
||||||
# - robwormald
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-forms
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - kara
|
|
||||||
# - jasonaden
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/tools-language-service
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - kyliau
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-server
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alxhub
|
|
||||||
# - vikerman
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-router
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - jasonaden
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-service-worker
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alxhub
|
|
||||||
# - gkalpak
|
|
||||||
# - IgorMinar
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-upgrade
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - gkalpak
|
|
||||||
# - petebacondarwin
|
|
||||||
# - jasonaden
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-testing
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - vikerman
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-i18n
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - AndrewKushnir
|
|
||||||
# - mhevery
|
|
||||||
# - ocombe
|
|
||||||
# - vikerman
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-security
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - IgorMinar
|
|
||||||
# - mhevery
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-zones
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - JiaLiPassion
|
|
||||||
# - mhevery
|
|
||||||
# - vikerman
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/tools-benchpress
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alxhub
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-integration
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alexeagle
|
|
||||||
# - IgorMinar
|
|
||||||
# - mhevery
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/docs-infra
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - brandonroberts
|
|
||||||
# - gkalpak
|
|
||||||
# - IgorMinar
|
|
||||||
# - petebacondarwin
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-docs-intro
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - jenniferfell
|
|
||||||
# - brandonroberts
|
|
||||||
# - IgorMinar
|
|
||||||
# - stephenfluin
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-docs-observables
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - benlesh
|
|
||||||
# - jasonaden
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-docs-packaging
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alexeagle
|
|
||||||
# - IgorMinar
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/tools-docs-libraries
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alan-agius4
|
|
||||||
# - alexeagle
|
|
||||||
# - hansl
|
|
||||||
# - IgorMinar
|
|
||||||
# - mgechev
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/tools-docs-schematics
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alan-agius4
|
|
||||||
# - alexeagle
|
|
||||||
# - hansl
|
|
||||||
# - IgorMinar
|
|
||||||
# - mgechev
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-docs-marketing
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - IgorMinar
|
|
||||||
# - stephenfluin
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-public-api
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - IgorMinar
|
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
|
||||||
# @angular/fw-dev-infra
|
|
||||||
# ===========================================================
|
|
||||||
#
|
|
||||||
# - alexeagle
|
|
||||||
# - devversion
|
|
||||||
# - filipesilva
|
|
||||||
# - gkalpak
|
|
||||||
# - IgorMinar
|
|
||||||
# - josephperrott
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
#
|
|
||||||
# CODEOWNERS rules
|
|
||||||
# -----------------
|
|
||||||
#
|
|
||||||
# All the following rules are applied in the order specified in this file.
|
|
||||||
# The last rule that matches wins!
|
|
||||||
#
|
|
||||||
# See https://git-scm.com/docs/gitignore#_pattern_format for pattern syntax docs.
|
|
||||||
#
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Default Owners
|
|
||||||
# (in case no pattern matches a path in a PR - this should be treated as a bug and result in adding the path to CODEOWNERS)
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
* @IgorMinar @angular/framework-global-approvers
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/animations
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/platform-browser/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/animations.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/complex-animation-sequences.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/reusable-animations.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/route-animations.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/transition-and-triggers.md @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/bazel
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/bazel/** @angular/tools-bazel @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/compiler
|
|
||||||
# @angular/compiler-cli
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/compiler/** @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/compiler-cli/** @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/aot-compiler.md @angular/fw-compiler @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# packages/compiler-cli/ngcc/
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/compiler-cli/ngcc/** @angular/fw-ngcc @angular/framework-global-approvers
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Framework/cli integration
|
|
||||||
#
|
|
||||||
# a rule to control API changes between @angular/compiler-cli and @angular/cli
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/compiler-cli/src/ngtools/** @angular/tools-cli @angular/framework-global-approvers
|
|
||||||
/aio/content/guide/ivy.md @angular/tools-cli @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/web-worker.md @angular/tools-cli @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/core
|
|
||||||
# @angular/common (except @angular/common/http)
|
|
||||||
# @angular/platform-browser
|
|
||||||
# @angular/platform-browser-dynamic
|
|
||||||
# @angular/platform-webworker
|
|
||||||
# @angular/platform-webworker-dynamic
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/core/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/platform-browser/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/platform-browser-dynamic/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/platform-webworker/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/platform-webworker-dynamic/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/examples/common/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/architecture-components.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/architecture-modules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/architecture-next-steps.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/architecture-services.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/architecture.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/architecture/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/architecture/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/attribute-directives.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/attribute-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/attribute-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/bootstrapping.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/bootstrapping/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/cheatsheet.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/component-interaction.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/component-interaction/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/component-interaction/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/component-styles.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/component-styles/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/dependency-injection.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/dependency-injection/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/dependency-injection/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/dependency-injection-in-action.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/dependency-injection-in-action/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/dependency-injection-in-action/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/dependency-injection-navtree.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/dependency-injection-providers.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/displaying-data.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/displaying-data/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/displaying-data/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/dynamic-component-loader.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/dynamic-component-loader/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/dynamic-component-loader/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/entry-components.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/feature-modules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/feature-modules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/feature-modules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/frequent-ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/frequent-ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/hierarchical-dependency-injection.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/hierarchical-dependency-injection/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/lazy-loading-ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/lazy-loading-ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/lazy-loading-ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/lifecycle-hooks.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/lifecycle-hooks/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/lifecycle-hooks/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/examples/ngcontainer/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/ngmodule-api.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/ngmodule-faq.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/ngmodule-faq/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/ngmodule-vs-jsmodule.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/module-types.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/template-syntax.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/built-in-template-functions/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/event-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/interpolation/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/template-syntax/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/template-syntax/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/binding-syntax/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/property-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/attribute-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/two-way-binding/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/built-in-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/template-reference-variables/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/inputs-outputs/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/template-expression-operators/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
/aio/content/guide/pipes.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/pipes/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/pipes/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/providers.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/providers/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/singleton-services.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/set-document-title.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/set-document-title/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/set-document-title/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/sharing-ngmodules.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/structural-directives.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/structural-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/structural-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
/aio/content/guide/user-input.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/user-input/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/user-input/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/common/http
|
|
||||||
# @angular/http
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/common/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/http.md @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/http/** @angular/fw-http @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/elements
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/elements/** @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/elements/** @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/elements/** @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/elements.md @angular/fw-elements @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/forms
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/forms.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/forms-overview.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/forms-overview/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/forms-overview/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/form-validation.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/form-validation/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/form-validation/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/dynamic-form.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/dynamic-form/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/dynamic-form/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/reactive-forms.md @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/reactive-forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/reactive-forms/** @angular/fw-forms @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/language-service
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/language-service/** @angular/tools-language-service @angular/framework-global-approvers
|
|
||||||
/aio/content/guide/language-service.md @angular/tools-language-service @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/language-service/** @angular/tools-language-service @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/platform-server
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/platform-server/** @angular/fw-server @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/universal.md @angular/fw-server @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/universal/** @angular/fw-server @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/router
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/router/** @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/router.md @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/router/** @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/router/** @angular/fw-router @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/service-worker
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/service-worker/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/service-worker-getting-started.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/service-worker-getting-started/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/app-shell.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/service-worker-communications.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/service-worker-config.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/service-worker-devops.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/service-worker-intro.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/service-worker/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/upgrade
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/examples/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/upgrade.md @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/upgrade-lazy-load-ajs/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/upgrade-module/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/upgrade-phonecat-1-typescript/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/upgrade-phonecat-2-hybrid/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/upgrade-phonecat-3-final/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/upgrade-performance.md @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/ajs-quick-reference.md @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/ajs-quick-reference/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular/**/testing
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
testing/** @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/testing.md @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/testing/** @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/testing/** @angular/fw-testing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular i18n
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/core/src/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/core/src/render3/i18n.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/core/src/render3/i18n.md @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/core/src/render3/interfaces/i18n.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/locales/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/src/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/src/pipes/date_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/src/pipes/i18n_plural_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/src/pipes/i18n_select_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/common/src/pipes/number_pipe.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/compiler/src/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/compiler/src/render3/view/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/packages/compiler-cli/src/extract_i18n.ts @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/i18n.md @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/i18n/** @angular/fw-i18n @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# @angular security
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/core/src/sanitization/** @angular/fw-security
|
|
||||||
/packages/core/test/linker/security_integration_spec.ts @angular/fw-security
|
|
||||||
/packages/compiler/src/schema/** @angular/fw-security
|
|
||||||
/packages/platform-browser/src/security/** @angular/fw-security
|
|
||||||
/aio/content/guide/security.md @angular/fw-security @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/security/** @angular/fw-security @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/security/** @angular/fw-security @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# zone.js
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/zone.js/** @angular/fw-zones @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# benchpress
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/packages/benchpress/** @angular/tools-benchpress @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# /integration/*
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/integration/** @angular/fw-integration @angular/framework-global-approvers
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# docs-infra
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/aio/* @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/aio-builds-setup/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/content/examples/* @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/scripts/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/src/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/tests/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/tools/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
|
|
||||||
# Hidden docs
|
|
||||||
/aio/content/guide/change-log.md @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/content/guide/docs-style-guide.md @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/content/examples/docs-style-guide/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/content/images/guide/docs-style-guide/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/content/guide/visual-studio-2015.md @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
/aio/content/examples/visual-studio-2015/** @angular/docs-infra @angular/framework-global-approvers
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Docs: getting started & tutorial
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/aio/content/guide/quickstart.md @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/cli-quickstart/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/cli-quickstart/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/tutorial/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/toh/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/toh-pt0/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/toh-pt1/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/toh-pt2/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/toh-pt3/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/toh-pt4/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/toh-pt5/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/toh-pt6/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/getting-started-v0/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/getting-started/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/getting-started/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/getting-started/** @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Docs: observables
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/aio/content/guide/observables.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/observables/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/comparing-observables.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/observables-in-angular.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/observables-in-angular/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/practical-observable-usage.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/practical-observable-usage/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/rx-library.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/rx-library/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Docs: packaging, tooling, releasing
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/aio/content/guide/npm-packages.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/browser-support.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/typescript-configuration.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/setup.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/setup/** @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/build.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/build/** @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/deployment.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/file-structure.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/releases.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/updating.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/workspace-config.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/deprecations.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Docs: libraries
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/aio/content/guide/creating-libraries.md @angular/tools-docs-libraries @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/libraries.md @angular/tools-docs-libraries @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/using-libraries.md @angular/tools-docs-libraries @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Docs: schematics
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/aio/content/guide/schematics.md @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/schematics-authoring.md @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/schematics-for-libraries.md @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/schematics/** @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/examples/schematics-for-libraries/** @angular/tools-docs-schematics @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Docs: marketing
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/aio/content/marketing/** @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/bios/** @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/marketing/** @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/navigation.json @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/license.md @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Build & CI Owners
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/* @angular/fw-dev-infra
|
|
||||||
/.buildkite/** @angular/fw-dev-infra
|
|
||||||
/.circleci/** @angular/fw-dev-infra
|
|
||||||
/.devcontainer/** @angular/fw-dev-infra
|
|
||||||
/.github/** @angular/fw-dev-infra
|
|
||||||
/.vscode/** @angular/fw-dev-infra
|
|
||||||
/docs/BAZEL.md @angular/fw-dev-infra
|
|
||||||
/packages/* @angular/fw-dev-infra
|
|
||||||
/scripts/** @angular/fw-dev-infra
|
|
||||||
/third_party/** @angular/fw-dev-infra
|
|
||||||
/tools/build/** @angular/fw-dev-infra
|
|
||||||
/tools/cjs-jasmine/** @angular/fw-dev-infra
|
|
||||||
/tools/gulp-tasks/** @angular/fw-dev-infra
|
|
||||||
/tools/ngcontainer/** @angular/fw-dev-infra
|
|
||||||
/tools/npm/** @angular/fw-dev-infra
|
|
||||||
/tools/npm_workspace/** @angular/fw-dev-infra
|
|
||||||
/tools/public_api_guard/** @angular/fw-dev-infra
|
|
||||||
/tools/rxjs/** @angular/fw-dev-infra
|
|
||||||
/tools/source-map-test/** @angular/fw-dev-infra
|
|
||||||
/tools/symbol-extractor/** @angular/fw-dev-infra
|
|
||||||
/tools/testing/** @angular/fw-dev-infra
|
|
||||||
/tools/ts-api-guardian/** @angular/fw-dev-infra
|
|
||||||
/tools/tslint/** @angular/fw-dev-infra
|
|
||||||
/tools/validate-commit-message/** @angular/fw-dev-infra
|
|
||||||
/tools/yarn/** @angular/fw-dev-infra
|
|
||||||
/tools/*
|
|
||||||
*.bzl @angular/fw-dev-infra
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# Public API
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/tools/public_api_guard/** @angular/fw-public-api
|
|
||||||
/aio/content/guide/glossary.md @angular/fw-public-api
|
|
||||||
/aio/content/guide/styleguide.md @angular/fw-public-api
|
|
||||||
/aio/content/examples/styleguide/** @angular/fw-public-api
|
|
||||||
/aio/content/images/guide/styleguide/** @angular/fw-public-api
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
|
||||||
# CODEOWNERS Owners owners ...
|
|
||||||
# ================================================
|
|
||||||
|
|
||||||
/.github/CODEOWNERS @IgorMinar @angular/framework-global-approvers
|
|
13
.github/ISSUE_TEMPLATE/7-angular-components.md
vendored
Normal file
13
.github/ISSUE_TEMPLATE/7-angular-components.md
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
name: "\U0001F48EAngular Components"
|
||||||
|
about: Issues and feature requests for Angular Components
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
||||||
|
|
||||||
|
Please file any Angular Components issues at: https://github.com/angular/components/issues/new
|
||||||
|
|
||||||
|
For the time being, we keep Angular Components issues in a separate repository.
|
||||||
|
|
||||||
|
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
13
.github/ISSUE_TEMPLATE/7-angular-material.md
vendored
13
.github/ISSUE_TEMPLATE/7-angular-material.md
vendored
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
name: "\U0001F48EAngular Material"
|
|
||||||
about: Issues and feature requests for Angular Material
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
|
||||||
|
|
||||||
Please file any Angular Material issues at: https://github.com/angular/material2/issues/new
|
|
||||||
|
|
||||||
For the time being, we keep Angular Material issues in a separate repository.
|
|
||||||
|
|
||||||
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
|
9
.github/angular-robot.yml
vendored
9
.github/angular-robot.yml
vendored
@ -30,7 +30,7 @@ merge:
|
|||||||
# text to show when the status is success
|
# text to show when the status is success
|
||||||
successDesc: "Does not affect google3"
|
successDesc: "Does not affect google3"
|
||||||
# link to use for the details
|
# link to use for the details
|
||||||
url: "http://go/angular-g3sync"
|
url: "http://go/angular/g3sync"
|
||||||
# list of patterns to check for the files changed by the PR
|
# list of patterns to check for the files changed by the PR
|
||||||
# this list must be manually kept in sync with google3/third_party/javascript/angular2/copy.bara.sky
|
# this list must be manually kept in sync with google3/third_party/javascript/angular2/copy.bara.sky
|
||||||
include:
|
include:
|
||||||
@ -52,6 +52,7 @@ merge:
|
|||||||
- "packages/elements/schematics/**"
|
- "packages/elements/schematics/**"
|
||||||
- "packages/examples/**"
|
- "packages/examples/**"
|
||||||
- "packages/language-service/**"
|
- "packages/language-service/**"
|
||||||
|
- "packages/localize/**"
|
||||||
- "packages/private/**"
|
- "packages/private/**"
|
||||||
- "packages/service-worker/**"
|
- "packages/service-worker/**"
|
||||||
- "**/.gitignore"
|
- "**/.gitignore"
|
||||||
@ -61,10 +62,15 @@ merge:
|
|||||||
- "**/third_party/**"
|
- "**/third_party/**"
|
||||||
- "**/tsconfig-build.json"
|
- "**/tsconfig-build.json"
|
||||||
- "**/tsconfig.json"
|
- "**/tsconfig.json"
|
||||||
|
- "**/rollup.config.js"
|
||||||
- "**/BUILD.bazel"
|
- "**/BUILD.bazel"
|
||||||
- "**/*.md"
|
- "**/*.md"
|
||||||
- "packages/**/integrationtest/**"
|
- "packages/**/integrationtest/**"
|
||||||
- "packages/**/test/**"
|
- "packages/**/test/**"
|
||||||
|
- "packages/zone.js/*"
|
||||||
|
- "packages/zone.js/doc/**"
|
||||||
|
- "packages/zone.js/example/**"
|
||||||
|
- "packages/zone.js/scripts/**"
|
||||||
|
|
||||||
# comment that will be added to a PR when there is a conflict, leave empty or set to false to disable
|
# comment that will be added to a PR when there is a conflict, leave empty or set to false to disable
|
||||||
mergeConflictComment: "Hi @{{PRAuthor}}! This PR has merge conflicts due to recent upstream merges.
|
mergeConflictComment: "Hi @{{PRAuthor}}! This PR has merge conflicts due to recent upstream merges.
|
||||||
@ -109,6 +115,7 @@ merge:
|
|||||||
- "ci/angular: size"
|
- "ci/angular: size"
|
||||||
- "cla/google"
|
- "cla/google"
|
||||||
- "google3"
|
- "google3"
|
||||||
|
- "pullapprove"
|
||||||
|
|
||||||
|
|
||||||
# the comment that will be added when the merge label is added despite failing checks, leave empty or set to false to disable
|
# the comment that will be added when the merge label is added despite failing checks, leave empty or set to false to disable
|
||||||
|
14
.github/workflows/lock-closed.yml
vendored
Normal file
14
.github/workflows/lock-closed.yml
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
name: Lock closed inactive issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# Run at 16:00 every day
|
||||||
|
- cron: '0 16 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lock_closed:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: angular/dev-infra/github-actions/lock-closed@66462f6
|
||||||
|
with:
|
||||||
|
lock-bot-key: ${{ secrets.LOCK_BOT_PRIVATE_KEY }}
|
8
.gitignore
vendored
8
.gitignore
vendored
@ -3,7 +3,7 @@
|
|||||||
/dist/
|
/dist/
|
||||||
/bazel-out
|
/bazel-out
|
||||||
/integration/bazel/bazel-*
|
/integration/bazel/bazel-*
|
||||||
e2e_test.*
|
*.log
|
||||||
node_modules
|
node_modules
|
||||||
tools/gulp-tasks/cldr/cldr-data/
|
tools/gulp-tasks/cldr/cldr-data/
|
||||||
|
|
||||||
@ -12,14 +12,18 @@ pubspec.lock
|
|||||||
.c9
|
.c9
|
||||||
.idea/
|
.idea/
|
||||||
.devcontainer/*
|
.devcontainer/*
|
||||||
|
!.devcontainer/README.md
|
||||||
!.devcontainer/recommended-devcontainer.json
|
!.devcontainer/recommended-devcontainer.json
|
||||||
!.devcontainer/recommended-Dockerfile
|
!.devcontainer/recommended-Dockerfile
|
||||||
.settings/
|
.settings/
|
||||||
.vscode/launch.json
|
.vscode/launch.json
|
||||||
.vscode/settings.json
|
.vscode/settings.json
|
||||||
|
.vscode/tasks.json
|
||||||
*.swo
|
*.swo
|
||||||
modules/.settings
|
modules/.settings
|
||||||
modules/.vscode
|
modules/.vscode
|
||||||
|
.vimrc
|
||||||
|
.nvimrc
|
||||||
|
|
||||||
# Don't check in secret files
|
# Don't check in secret files
|
||||||
*secret.js
|
*secret.js
|
||||||
@ -37,3 +41,5 @@ yarn-error.log
|
|||||||
# User specific bazel settings
|
# User specific bazel settings
|
||||||
.bazelrc.user
|
.bazelrc.user
|
||||||
|
|
||||||
|
.notes.md
|
||||||
|
baseline.json
|
||||||
|
1057
.pullapprove.yml
Normal file
1057
.pullapprove.yml
Normal file
File diff suppressed because it is too large
Load Diff
18
.vscode/README.md
vendored
18
.vscode/README.md
vendored
@ -1,23 +1,25 @@
|
|||||||
# VSCode Configuration
|
# VSCode Configuration
|
||||||
|
|
||||||
This folder contains opt-in [Workspace Settings](https://code.visualstudio.com/docs/getstarted/settings) and [Extension Recommendations](https://code.visualstudio.com/docs/editor/extension-gallery#_workspace-recommended-extensions) that the Angular team recommends using when working on this repository.
|
This folder contains opt-in [Workspace Settings](https://code.visualstudio.com/docs/getstarted/settings), [Tasks](https://code.visualstudio.com/docs/editor/tasks), [Launch Configurations](https://code.visualstudio.com/Docs/editor/debugging#_launch-configurations) and [Extension Recommendations](https://code.visualstudio.com/docs/editor/extension-gallery#_workspace-recommended-extensions) that the Angular team recommends using when working on this repository.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the recommended settings follow the steps below:
|
To use the recommended configurations follow the steps below:
|
||||||
|
|
||||||
- install <https://marketplace.visualstudio.com/items?itemName=xaver.clang-format>
|
- install the recommneded extensions in `.vscode/extensions.json`
|
||||||
- copy `.vscode/recommended-settings.json` to `.vscode/settings.json`
|
- copy (or link) `.vscode/recommended-settings.json` to `.vscode/settings.json`
|
||||||
|
- copy (or link) `.vscode/recommended-launch.json` to `.vscode/launch.json`
|
||||||
|
- copy (or link) `.vscode/recommended-tasks.json` to `.vscode/tasks.json`
|
||||||
- restart the editor
|
- restart the editor
|
||||||
|
|
||||||
If you already have your custom workspace settings you should instead manually merge the file content.
|
If you already have your custom workspace settings you should instead manually merge the file contents.
|
||||||
|
|
||||||
This isn't an automatic process so you will need to repeat it when settings are updated.
|
This isn't an automatic process so you will need to repeat it when settings are updated.
|
||||||
|
|
||||||
To see the recommended extensions select "Extensions: Show Recommended Extensions" in the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).
|
To see the recommended extensions select "Extensions: Show Recommended Extensions" in the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).
|
||||||
|
|
||||||
## Editing `.vscode/recommended-settings.json`
|
## Editing `.vscode/recommended-*.json` files
|
||||||
|
|
||||||
If you wish to add extra configuration items please keep in mind any settings you add here will be used by many users.
|
If you wish to add extra configuration items please keep in mind any modifications you make here will be used by many users.
|
||||||
|
|
||||||
Try to keep these settings to things that help facilitate the development process and avoid altering the user workflow whenever possible.
|
Try to keep these settings/configuations to things that help facilitate the development process and avoid altering the user workflow whenever possible.
|
||||||
|
85
.vscode/recommended-launch.json
vendored
Normal file
85
.vscode/recommended-launch.json
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Attach to bazel test ... --config=debug",
|
||||||
|
"type": "node",
|
||||||
|
"request": "attach",
|
||||||
|
"port": 9229,
|
||||||
|
"address": "localhost",
|
||||||
|
"restart": false,
|
||||||
|
"sourceMaps": true,
|
||||||
|
"localRoot": "${workspaceRoot}",
|
||||||
|
"remoteRoot": "${workspaceRoot}",
|
||||||
|
"stopOnEntry": false,
|
||||||
|
"timeout": 600000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Attach to bazel test ... --config=debug (no source maps)",
|
||||||
|
"type": "node",
|
||||||
|
"request": "attach",
|
||||||
|
"port": 9229,
|
||||||
|
"address": "localhost",
|
||||||
|
"restart": false,
|
||||||
|
"sourceMaps": false,
|
||||||
|
"localRoot": "${workspaceRoot}",
|
||||||
|
"remoteRoot": "${workspaceRoot}",
|
||||||
|
"stopOnEntry": false,
|
||||||
|
"timeout": 600000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "IVY:packages/core/test/acceptance",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--config=ivy",
|
||||||
|
"packages/core/test/acceptance",
|
||||||
|
"--config=debug"
|
||||||
|
],
|
||||||
|
"port": 9229,
|
||||||
|
"address": "localhost",
|
||||||
|
"restart": true,
|
||||||
|
"sourceMaps": true,
|
||||||
|
"timeout": 600000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "IVY:packages/core/test/render3",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--config=ivy",
|
||||||
|
"packages/core/test/render3",
|
||||||
|
"--config=debug"
|
||||||
|
],
|
||||||
|
"port": 9229,
|
||||||
|
"address": "localhost",
|
||||||
|
"restart": true,
|
||||||
|
"sourceMaps": true,
|
||||||
|
"timeout": 600000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "IVY:packages/core/test",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--config=ivy",
|
||||||
|
"packages/core/test",
|
||||||
|
"--config=debug"
|
||||||
|
],
|
||||||
|
"port": 9229,
|
||||||
|
"address": "localhost",
|
||||||
|
"restart": true,
|
||||||
|
"sourceMaps": true,
|
||||||
|
"timeout": 600000,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
113
.vscode/recommended-tasks.json
vendored
Normal file
113
.vscode/recommended-tasks.json
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
{
|
||||||
|
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||||
|
// for the documentation about the tasks.json format
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "IVY:packages/core/test/...",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--config=ivy",
|
||||||
|
"packages/core/test",
|
||||||
|
"packages/core/test/acceptance",
|
||||||
|
"packages/core/test/render3",
|
||||||
|
],
|
||||||
|
"group": "test",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "always",
|
||||||
|
"panel": "dedicated",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "VE:packages/core/test/...",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"packages/core/test",
|
||||||
|
"packages/core/test/acceptance",
|
||||||
|
"packages/core/test/render3",
|
||||||
|
],
|
||||||
|
"group": "test",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "always",
|
||||||
|
"panel": "dedicated",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "IVY:packages/core/test/acceptance",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--config=ivy",
|
||||||
|
"packages/core/test/acceptance",
|
||||||
|
],
|
||||||
|
"group": "test",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "always",
|
||||||
|
"panel": "dedicated",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "VE:packages/core/test/acceptance",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"packages/core/test/acceptance",
|
||||||
|
],
|
||||||
|
"group": "test",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "always",
|
||||||
|
"panel": "dedicated",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "IVY:packages/core/test",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--config=ivy",
|
||||||
|
"packages/core/test",
|
||||||
|
],
|
||||||
|
"group": "test",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "always",
|
||||||
|
"panel": "dedicated",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "VE:packages/core/test",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"packages/core/test",
|
||||||
|
],
|
||||||
|
"group": "test",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "always",
|
||||||
|
"panel": "dedicated",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "IVY:packages/core/test/render3",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "${workspaceFolder}/node_modules/.bin/bazel",
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--config=ivy",
|
||||||
|
"packages/core/test/render3",
|
||||||
|
],
|
||||||
|
"group": "test",
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "always",
|
||||||
|
"panel": "dedicated",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
13
.yarn/README.md
Normal file
13
.yarn/README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Yarn Vendoring
|
||||||
|
We utilize Yarn's `yarn-path` configuration in a shared `.yarnrc` file to enforce
|
||||||
|
everyone using the same version of Yarn. Yarn checks the `.yarnrc` file to
|
||||||
|
determine if yarn should delegate the command to a vendored version at the
|
||||||
|
provided path.
|
||||||
|
|
||||||
|
## How to update
|
||||||
|
To update to the latest version of Yarn as our vendored version:
|
||||||
|
- Run this command
|
||||||
|
```sh
|
||||||
|
yarn policies set-version latest
|
||||||
|
```
|
||||||
|
- Remove the previous version
|
22711
third_party/github.com/yarnpkg/yarn/releases/download/v1.13.0/bin/yarn.js → .yarn/releases/yarn-1.21.1.js
vendored
Normal file → Executable file
22711
third_party/github.com/yarnpkg/yarn/releases/download/v1.13.0/bin/yarn.js → .yarn/releases/yarn-1.21.1.js
vendored
Normal file → Executable file
File diff suppressed because one or more lines are too long
5
.yarnrc
Normal file
5
.yarnrc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
yarn-path ".yarn/releases/yarn-1.21.1.js"
|
106
BUILD.bazel
106
BUILD.bazel
@ -19,9 +19,9 @@ filegroup(
|
|||||||
# do not sort
|
# do not sort
|
||||||
srcs = [
|
srcs = [
|
||||||
"@npm//:node_modules/core-js/client/core.js",
|
"@npm//:node_modules/core-js/client/core.js",
|
||||||
"@npm//:node_modules/zone.js/dist/zone.js",
|
"//packages/zone.js/dist:zone.js",
|
||||||
"@npm//:node_modules/zone.js/dist/zone-testing.js",
|
"//packages/zone.js/dist:zone-testing.js",
|
||||||
"@npm//:node_modules/zone.js/dist/task-tracking.js",
|
"//packages/zone.js/dist:task-tracking.js",
|
||||||
"//:test-events.js",
|
"//:test-events.js",
|
||||||
"//:shims_for_IE.js",
|
"//:shims_for_IE.js",
|
||||||
# Including systemjs because it defines `__eval`, which produces correct stack traces.
|
# Including systemjs because it defines `__eval`, which produces correct stack traces.
|
||||||
@ -47,47 +47,75 @@ filegroup(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
# To run a karma_web_test target locally on SauceLabs:
|
# To run manually:
|
||||||
# 1) have SAUCE_USERNAME, SAUCE_ACCESS_KEY (and optionally a SAUCE_TUNNEL_IDENTIFIER) set in your environment
|
# Setup your SAUCE_USERNAME, SAUCE_ACCESS_KEY & SAUCE_TUNNEL_IDENTIFIER.
|
||||||
# 2) open a sauce connection with `./scripts/saucelabs/start-tunnel.sh`
|
# If on OSX, also set SAUCE_CONNECT to the path of your `sc` binary.
|
||||||
# NOTE: start-tunnel.sh uses `node_modules/sauce-connect` which is current linux specific:
|
# environment variables and run:
|
||||||
# "sauce-connect": "https://saucelabs.com/downloads/sc-4.5.3-linux.tar.gz".
|
# ```
|
||||||
# On OSX or Windows you'll need to use the appropriate sauce-connect binary.
|
# yarn bazel run //tools/saucelabs:sauce_service_setup
|
||||||
# 3) run target with `yarn bazel test --config=saucelabs <target>`
|
# yarn bazel test //:saucelabs_unit_tests --config=saucelabs --config=ivy
|
||||||
# NOTE: --config=saucelabs is required as it makes the SAUCE_XXX environment variables available to
|
# ```
|
||||||
# the action. See /.bazelrc.
|
# See /tools/saucelabs/README.md for more info on karma Saucelabs tests under Bazel.
|
||||||
karma_web_test(
|
karma_web_test(
|
||||||
name = "test_web_all",
|
name = "saucelabs_unit_tests",
|
||||||
|
# Default timeout is moderate (5min). This causes the test to be terminated while
|
||||||
|
# Saucelabs browsers keep running. Ultimately resulting in failing tests and browsers
|
||||||
|
# unnecessarily being acquired. Our specified Saucelabs idle timeout is 10min, so we use
|
||||||
|
# Bazel's long timeout (15min). This ensures that Karma can shut down properly.
|
||||||
|
timeout = "long",
|
||||||
|
karma = "//tools/saucelabs:karma-saucelabs",
|
||||||
tags = [
|
tags = [
|
||||||
"local",
|
|
||||||
"manual",
|
"manual",
|
||||||
|
"no-remote-exec",
|
||||||
"saucelabs",
|
"saucelabs",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
# We combine all tests into a single karma_web_test target
|
"//packages/core/test/acceptance:acceptance_lib",
|
||||||
# as running them as seperate targets in parallel leads to too many
|
|
||||||
# browsers being acquired at once in SauceLabs and the tests flake out
|
|
||||||
# TODO: this is an example subset of tests below, add all remaining angular tests
|
|
||||||
"//packages/common/http/test:test_lib",
|
|
||||||
"//packages/common/http/testing/test:test_lib",
|
|
||||||
"//packages/common/test:test_lib",
|
|
||||||
"//packages/core/test:test_lib",
|
|
||||||
"//packages/forms/test:test_lib",
|
|
||||||
"//packages/http/test:test_lib",
|
|
||||||
"//packages/zone.js/test:karma_jasmine_test_ci",
|
|
||||||
# "//packages/router/test:test_lib",
|
|
||||||
# //packages/router/test:test_lib fails with:
|
|
||||||
# IE 11.0.0 (Windows 8.1.0.0) bootstrap should restore the scrolling position FAILED
|
|
||||||
# Expected undefined to equal 5000.
|
|
||||||
# at stack (eval code:2338:11)
|
|
||||||
# at buildExpectationResult (eval code:2305:5)
|
|
||||||
# at expectationResultFactory (eval code:858:11)
|
|
||||||
# at Spec.prototype.addExpectationResult (eval code:487:5)
|
|
||||||
# at addExpectationResult (eval code:802:9)
|
|
||||||
# at Anonymous function (eval code:2252:7)
|
|
||||||
# at Anonymous function (eval code:339:25)
|
|
||||||
# at step (eval code:133:17)
|
|
||||||
# at Anonymous function (eval code:114:50)
|
|
||||||
# at fulfilled (eval code:104:47)
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SAUCE_TEST_SUITE_TARGETS = [
|
||||||
|
"packages/common/http/test:test_lib",
|
||||||
|
"packages/common/http/testing/test:test_lib",
|
||||||
|
"packages/common/test:test_lib",
|
||||||
|
"packages/core/test:test_lib",
|
||||||
|
"packages/forms/test:test_lib",
|
||||||
|
"packages/http/test:test_lib",
|
||||||
|
]
|
||||||
|
|
||||||
|
[
|
||||||
|
# These target runs in CI with View Engine as a Saucelabs and Bazel proof-of-concept. It's a
|
||||||
|
# subset of the legacy saucelabs tests.
|
||||||
|
karma_web_test(
|
||||||
|
name = "saucelabs_unit_tests_poc_%s" % test.replace("/", "_").replace(":", "_").replace(".", "_"),
|
||||||
|
# Default timeout is moderate (5min). This causes the test to be terminated while
|
||||||
|
# Saucelabs browsers keep running. Ultimately resulting in failing tests and browsers
|
||||||
|
# unnecessarily being acquired. Our specified Saucelabs idle timeout is 10min, so we use
|
||||||
|
# Bazel's long timeout (15min). This ensures that Karma can shut down properly.
|
||||||
|
timeout = "long",
|
||||||
|
karma = "//tools/saucelabs:karma-saucelabs",
|
||||||
|
tags = [
|
||||||
|
"exclusive",
|
||||||
|
"manual",
|
||||||
|
"no-remote-exec",
|
||||||
|
"saucelabs",
|
||||||
|
],
|
||||||
|
deps = ["//%s" % test],
|
||||||
|
)
|
||||||
|
for test in SAUCE_TEST_SUITE_TARGETS
|
||||||
|
]
|
||||||
|
|
||||||
|
# To run manually:
|
||||||
|
# Setup your SAUCE_USERNAME, SAUCE_ACCESS_KEY & SAUCE_TUNNEL_IDENTIFIER.
|
||||||
|
# If on OSX, also set SAUCE_CONNECT to the path of your `sc` binary.
|
||||||
|
# environment variables and run:
|
||||||
|
# ```
|
||||||
|
# yarn bazel run //tools/saucelabs:sauce_service_setup
|
||||||
|
# yarn bazel test //:saucelabs_unit_tests_poc_suite --config=saucelabs
|
||||||
|
# ```
|
||||||
|
# See /tools/saucelabs/README.md for more info on karma Saucelabs tests under Bazel.
|
||||||
|
test_suite(
|
||||||
|
name = "saucelabs_unit_tests_poc_suite",
|
||||||
|
tags = ["manual"],
|
||||||
|
tests = ["//:saucelabs_unit_tests_poc_%s" % test.replace("/", "_").replace(":", "_").replace(".", "_") for test in SAUCE_TEST_SUITE_TARGETS],
|
||||||
|
)
|
||||||
|
1594
CHANGELOG.md
1594
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@ -55,9 +55,9 @@ We want to fix all the issues as soon as possible, but before fixing a bug we ne
|
|||||||
|
|
||||||
A minimal reproduction allows us to quickly confirm a bug (or point out a coding problem) as well as confirm that we are fixing the right problem.
|
A minimal reproduction allows us to quickly confirm a bug (or point out a coding problem) as well as confirm that we are fixing the right problem.
|
||||||
|
|
||||||
We will be insisting on a minimal reproduction scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal reproduction. We understand that sometimes it might be hard to extract essential bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
|
We will be insisting on a minimal reproduction scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience, users often find coding problems themselves while preparing a minimal reproduction. We understand that sometimes it might be hard to extract essential bits of code from a larger codebase but we really need to isolate the problem before we can fix it.
|
||||||
|
|
||||||
Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you we are going to close an issue that doesn't have enough info to be reproduced.
|
Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you, we are going to close an issue that doesn't have enough info to be reproduced.
|
||||||
|
|
||||||
You can file new issues by selecting from our [new issue templates](https://github.com/angular/angular/issues/new/choose) and filling out the issue template.
|
You can file new issues by selecting from our [new issue templates](https://github.com/angular/angular/issues/new/choose) and filling out the issue template.
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ format that includes a **type**, a **scope** and a **subject**:
|
|||||||
|
|
||||||
The **header** is mandatory and the **scope** of the header is optional.
|
The **header** is mandatory and the **scope** of the header is optional.
|
||||||
|
|
||||||
Any line of the commit message cannot be longer 100 characters! This allows the message to be easier
|
Any line of the commit message cannot be longer than 100 characters! This allows the message to be easier
|
||||||
to read on GitHub as well as in various git tools.
|
to read on GitHub as well as in various git tools.
|
||||||
|
|
||||||
The footer should contain a [closing reference to an issue](https://help.github.com/articles/closing-issues-via-commit-messages/) if any.
|
The footer should contain a [closing reference to an issue](https://help.github.com/articles/closing-issues-via-commit-messages/) if any.
|
||||||
@ -201,7 +201,7 @@ Must be one of the following:
|
|||||||
* **test**: Adding missing tests or correcting existing tests
|
* **test**: Adding missing tests or correcting existing tests
|
||||||
|
|
||||||
### Scope
|
### Scope
|
||||||
The scope should be the name of the npm package affected (as perceived by the person reading the changelog generated from commit messages.
|
The scope should be the name of the npm package affected (as perceived by the person reading the changelog generated from commit messages).
|
||||||
|
|
||||||
The following is the list of supported scopes:
|
The following is the list of supported scopes:
|
||||||
|
|
||||||
@ -262,8 +262,8 @@ A detailed explanation can be found in this [document][commit-message-format].
|
|||||||
Please sign our Contributor License Agreement (CLA) before sending pull requests. For any code
|
Please sign our Contributor License Agreement (CLA) before sending pull requests. For any code
|
||||||
changes to be accepted, the CLA must be signed. It's a quick process, we promise!
|
changes to be accepted, the CLA must be signed. It's a quick process, we promise!
|
||||||
|
|
||||||
* For individuals we have a [simple click-through form][individual-cla].
|
* For individuals, we have a [simple click-through form][individual-cla].
|
||||||
* For corporations we'll need you to
|
* For corporations, we'll need you to
|
||||||
[print, sign and one of scan+email, fax or mail the form][corporate-cla].
|
[print, sign and one of scan+email, fax or mail the form][corporate-cla].
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
@ -279,7 +279,6 @@ changes to be accepted, the CLA must be signed. It's a quick process, we promise
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
[angular-group]: https://groups.google.com/forum/#!forum/angular
|
[angular-group]: https://groups.google.com/forum/#!forum/angular
|
||||||
[coc]: https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md
|
[coc]: https://github.com/angular/code-of-conduct/blob/master/CODE_OF_CONDUCT.md
|
||||||
[commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#
|
[commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#
|
||||||
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2010-2019 Google LLC. http://angular.io/license
|
Copyright (c) 2010-2020 Google LLC. http://angular.io/license
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
67
WORKSPACE
67
WORKSPACE
@ -5,32 +5,20 @@ workspace(
|
|||||||
|
|
||||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
# Uncomment for local bazel rules development
|
|
||||||
#local_repository(
|
|
||||||
# name = "build_bazel_rules_nodejs",
|
|
||||||
# path = "../rules_nodejs",
|
|
||||||
#)
|
|
||||||
#local_repository(
|
|
||||||
# name = "npm_bazel_typescript",
|
|
||||||
# path = "../rules_typescript",
|
|
||||||
#)
|
|
||||||
|
|
||||||
# Fetch rules_nodejs so we can install our npm dependencies
|
# Fetch rules_nodejs so we can install our npm dependencies
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "build_bazel_rules_nodejs",
|
name = "build_bazel_rules_nodejs",
|
||||||
patch_args = ["-p1"],
|
sha256 = "b6670f9f43faa66e3009488bbd909bc7bc46a5a9661a33f6bc578068d1837f37",
|
||||||
# Patch https://github.com/bazelbuild/rules_nodejs/pull/903
|
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.3.0/rules_nodejs-1.3.0.tar.gz"],
|
||||||
patches = ["//tools:rollup_bundle_commonjs_ignoreGlobal.patch"],
|
|
||||||
sha256 = "7c4a690268be97c96f04d505224ec4cb1ae53c2c2b68be495c9bd2634296a5cd",
|
|
||||||
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.34.0/rules_nodejs-0.34.0.tar.gz"],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Check the bazel version and download npm dependencies
|
# Check the bazel version and download npm dependencies
|
||||||
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "check_rules_nodejs_version", "node_repositories", "yarn_install")
|
load("@build_bazel_rules_nodejs//:index.bzl", "check_bazel_version", "check_rules_nodejs_version", "node_repositories", "yarn_install")
|
||||||
|
|
||||||
# Bazel version must be at least the following version because:
|
# Bazel version must be at least the following version because:
|
||||||
# - 0.26.0 managed_directories feature added which is required for nodejs rules 0.30.0
|
# - 0.26.0 managed_directories feature added which is required for nodejs rules 0.30.0
|
||||||
# - 0.27.0 has a fix for managed_directories after `rm -rf node_modules`
|
# - 0.27.0 has a fix for managed_directories after `rm -rf node_modules`
|
||||||
|
# - 2.1.0 feature added to honor .bazelignore in external repositories
|
||||||
check_bazel_version(
|
check_bazel_version(
|
||||||
message = """
|
message = """
|
||||||
You no longer need to install Bazel on your machine.
|
You no longer need to install Bazel on your machine.
|
||||||
@ -39,41 +27,20 @@ Try running `yarn bazel` instead.
|
|||||||
(If you did run that, check that you've got a fresh `yarn install`)
|
(If you did run that, check that you've got a fresh `yarn install`)
|
||||||
|
|
||||||
""",
|
""",
|
||||||
minimum_bazel_version = "0.27.0",
|
minimum_bazel_version = "2.1.0",
|
||||||
)
|
)
|
||||||
|
|
||||||
# The NodeJS rules version must be at least the following version because:
|
check_rules_nodejs_version(minimum_version_string = "1.3.0")
|
||||||
# - 0.15.2 Re-introduced the prod_only attribute on yarn_install
|
|
||||||
# - 0.15.3 Includes a fix for the `jasmine_node_test` rule ignoring target tags
|
|
||||||
# - 0.16.8 Supports npm installed bazel workspaces
|
|
||||||
# - 0.26.0 Fix for data files in yarn_install and npm_install
|
|
||||||
# - 0.27.12 Adds NodeModuleSources provider for transtive npm deps support
|
|
||||||
# - 0.30.0 yarn_install now uses symlinked node_modules with new managed directories Bazel 0.26.0 feature
|
|
||||||
# - 0.31.1 entry_point attribute of nodejs_binary & rollup_bundle is now a label
|
|
||||||
# - 0.32.0 yarn_install and npm_install no longer puts build files under symlinked node_modules
|
|
||||||
# - 0.32.1 remove override of @bazel/tsetse & exclude typescript lib declarations in node_module_library transitive_declarations
|
|
||||||
# - 0.32.2 resolves bug in @bazel/hide-bazel-files postinstall step
|
|
||||||
# - 0.34.0 introduces protractor rule
|
|
||||||
check_rules_nodejs_version(minimum_version_string = "0.34.0")
|
|
||||||
|
|
||||||
# Setup the Node.js toolchain
|
# Setup the Node.js toolchain
|
||||||
node_repositories(
|
node_repositories(
|
||||||
node_repositories = {
|
node_repositories = {
|
||||||
"10.16.0-darwin_amd64": ("node-v10.16.0-darwin-x64.tar.gz", "node-v10.16.0-darwin-x64", "6c009df1b724026d84ae9a838c5b382662e30f6c5563a0995532f2bece39fa9c"),
|
"12.14.1-darwin_amd64": ("node-v12.14.1-darwin-x64.tar.gz", "node-v12.14.1-darwin-x64", "0be10a28737527a1e5e3784d3ad844d742fe8b0718acd701fd48f718fd3af78f"),
|
||||||
"10.16.0-linux_amd64": ("node-v10.16.0-linux-x64.tar.xz", "node-v10.16.0-linux-x64", "1827f5b99084740234de0c506f4dd2202a696ed60f76059696747c34339b9d48"),
|
"12.14.1-linux_amd64": ("node-v12.14.1-linux-x64.tar.xz", "node-v12.14.1-linux-x64", "07cfcaa0aa9d0fcb6e99725408d9e0b07be03b844701588e3ab5dbc395b98e1b"),
|
||||||
"10.16.0-windows_amd64": ("node-v10.16.0-win-x64.zip", "node-v10.16.0-win-x64", "aa22cb357f0fb54ccbc06b19b60e37eefea5d7dd9940912675d3ed988bf9a059"),
|
"12.14.1-windows_amd64": ("node-v12.14.1-win-x64.zip", "node-v12.14.1-win-x64", "1f96ccce3ba045ecea3f458e189500adb90b8bc1a34de5d82fc10a5bf66ce7e3"),
|
||||||
},
|
},
|
||||||
node_version = "10.16.0",
|
node_version = "12.14.1",
|
||||||
package_json = ["//:package.json"],
|
package_json = ["//:package.json"],
|
||||||
# yarn 1.13.0 under Bazel has a regression on Windows that causes build errors on rebuilds:
|
|
||||||
# ```
|
|
||||||
# ERROR: Source forest creation failed: C:/.../fyuc5c3n/execroot/angular/external (Directory not empty)
|
|
||||||
# ```
|
|
||||||
# See https://github.com/angular/angular/pull/29431 for more information.
|
|
||||||
# It possible that versions of yarn past 1.13.0 do not have this issue, however, before
|
|
||||||
# advancing this version we need to test manually on Windows that the above error does not
|
|
||||||
# happen as the issue is not caught by CI.
|
|
||||||
yarn_version = "1.12.1",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
yarn_install(
|
yarn_install(
|
||||||
@ -98,18 +65,16 @@ load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
|
|||||||
npm_bazel_protractor_dependencies()
|
npm_bazel_protractor_dependencies()
|
||||||
|
|
||||||
# Load karma dependencies
|
# Load karma dependencies
|
||||||
load("@npm_bazel_karma//:package.bzl", "rules_karma_dependencies")
|
load("@npm_bazel_karma//:package.bzl", "npm_bazel_karma_dependencies")
|
||||||
|
|
||||||
rules_karma_dependencies()
|
npm_bazel_karma_dependencies()
|
||||||
|
|
||||||
# Setup the rules_webtesting toolchain
|
# Setup the rules_webtesting toolchain
|
||||||
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
|
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
|
||||||
|
|
||||||
web_test_repositories()
|
web_test_repositories()
|
||||||
|
|
||||||
# Temporary work-around for https://github.com/angular/angular/issues/28681
|
load("//tools/browsers:browser_repositories.bzl", "browser_repositories")
|
||||||
# TODO(gregmagolan): go back to @io_bazel_rules_webtesting browser_repositories
|
|
||||||
load("//:browser_repositories.bzl", "browser_repositories")
|
|
||||||
|
|
||||||
browser_repositories()
|
browser_repositories()
|
||||||
|
|
||||||
@ -136,14 +101,14 @@ rbe_autoconfig(
|
|||||||
# Need to specify a base container digest in order to ensure that we can use the checked-in
|
# Need to specify a base container digest in order to ensure that we can use the checked-in
|
||||||
# platform configurations for the "ubuntu16_04" image. Otherwise the autoconfig rule would
|
# platform configurations for the "ubuntu16_04" image. Otherwise the autoconfig rule would
|
||||||
# need to pull the image and run it in order determine the toolchain configuration. See:
|
# need to pull the image and run it in order determine the toolchain configuration. See:
|
||||||
# https://github.com/bazelbuild/bazel-toolchains/blob/0.27.0/configs/ubuntu16_04_clang/versions.bzl
|
# https://github.com/bazelbuild/bazel-toolchains/blob/1.1.2/configs/ubuntu16_04_clang/versions.bzl
|
||||||
base_container_digest = "sha256:94d7d8552902d228c32c8c148cc13f0effc2b4837757a6e95b73fdc5c5e4b07b",
|
base_container_digest = "sha256:1ab40405810effefa0b2f45824d6d608634ccddbf06366760c341ef6fbead011",
|
||||||
# Note that if you change the `digest`, you might also need to update the
|
# Note that if you change the `digest`, you might also need to update the
|
||||||
# `base_container_digest` to make sure marketplace.gcr.io/google/rbe-ubuntu16-04-webtest:<digest>
|
# `base_container_digest` to make sure marketplace.gcr.io/google/rbe-ubuntu16-04-webtest:<digest>
|
||||||
# and marketplace.gcr.io/google/rbe-ubuntu16-04:<base_container_digest> have
|
# and marketplace.gcr.io/google/rbe-ubuntu16-04:<base_container_digest> have
|
||||||
# the same Clang and JDK installed. Clang is needed because of the dependency on
|
# the same Clang and JDK installed. Clang is needed because of the dependency on
|
||||||
# @com_google_protobuf. Java is needed for the Bazel's test executor Java tool.
|
# @com_google_protobuf. Java is needed for the Bazel's test executor Java tool.
|
||||||
digest = "sha256:76e2e4a894f9ffbea0a0cb2fbde741b5d223d40f265dbb9bca78655430173990",
|
digest = "sha256:0b8fa87db4b8e5366717a7164342a029d1348d2feea7ecc4b18c780bc2507059",
|
||||||
env = clang_env(),
|
env = clang_env(),
|
||||||
registry = "marketplace.gcr.io",
|
registry = "marketplace.gcr.io",
|
||||||
# We can't use the default "ubuntu16_04" RBE image provided by the autoconfig because we need
|
# We can't use the default "ubuntu16_04" RBE image provided by the autoconfig because we need
|
||||||
|
@ -18,8 +18,8 @@ Here are the most important tasks you might need to use:
|
|||||||
|
|
||||||
* `yarn build` - create a production build of the application (after installing dependencies, boilerplate, etc).
|
* `yarn build` - create a production build of the application (after installing dependencies, boilerplate, etc).
|
||||||
* `yarn build-local` - same as `build`, but use `setup-local` instead of `setup`.
|
* `yarn build-local` - same as `build`, but use `setup-local` instead of `setup`.
|
||||||
* `yarn build-with-ivy` - same as `build-local`, but in addition also turns on `ivy` mode in aio.
|
* `yarn build-local-with-viewengine` - same as `build-local`, but in addition also turns on `ViewEngine` mode in aio.
|
||||||
(Note: To turn on `ivy` mode in examples, see `yarn boilerplate:add` below.)
|
(Note: Docs examples run in `ViewEngine` mode by default. To turn on `ivy` mode in examples, see `yarn boilerplate:add` below.)
|
||||||
|
|
||||||
* `yarn start` - run a development web server that watches the files; then builds the doc-viewer and reloads the page, as necessary.
|
* `yarn start` - run a development web server that watches the files; then builds the doc-viewer and reloads the page, as necessary.
|
||||||
* `yarn serve-and-sync` - run both the `docs-watch` and `start` in the same console.
|
* `yarn serve-and-sync` - run both the `docs-watch` and `start` in the same console.
|
||||||
@ -34,18 +34,28 @@ Here are the most important tasks you might need to use:
|
|||||||
* `yarn docs-test` - run the unit tests for the doc generation code.
|
* `yarn docs-test` - run the unit tests for the doc generation code.
|
||||||
|
|
||||||
* `yarn boilerplate:add` - generate all the boilerplate code for the examples, so that they can be run locally.
|
* `yarn boilerplate:add` - generate all the boilerplate code for the examples, so that they can be run locally.
|
||||||
- Add the option `--local` to use your local version of Angular contained in the "dist" folder.
|
* `yarn boilerplate:add:ivy` - same as `boilerplate:add` but also turns on `ivy` mode.
|
||||||
- Add the option `--ivy` to turn on `ivy` mode.
|
|
||||||
|
|
||||||
* `yarn boilerplate:remove` - remove all the boilerplate code that was added via `yarn boilerplate:add`.
|
* `yarn boilerplate:remove` - remove all the boilerplate code that was added via `yarn boilerplate:add`.
|
||||||
* `yarn generate-stackblitz` - generate the stackblitz files that are used by the `live-example` tags in the docs.
|
* `yarn generate-stackblitz` - generate the stackblitz files that are used by the `live-example` tags in the docs.
|
||||||
* `yarn generate-zips` - generate the zip files from the examples. Zip available via the `live-example` tags in the docs.
|
* `yarn generate-zips` - generate the zip files from the examples. Zip available via the `live-example` tags in the docs.
|
||||||
|
|
||||||
* `yarn example-e2e` - run all e2e tests for examples
|
* `yarn example-e2e` - run all e2e tests for examples. Available options:
|
||||||
- `yarn example-e2e --setup` - force webdriver update & other setup, then run tests
|
- `--setup`: generate boilerplate, force webdriver update & other setup, then run tests.
|
||||||
- `yarn example-e2e --filter=foo` - limit e2e tests to those containing the word "foo"
|
- `--local`: run e2e tests with the local version of Angular contained in the "dist" folder.
|
||||||
- `yarn example-e2e --setup --local` - run e2e tests with the local version of Angular contained in the "dist" folder
|
_Requires `--setup` in order to take effect._
|
||||||
|
- `--ivy`: run e2e tests in `ivy` mode.
|
||||||
|
- `--filter=foo`: limit e2e tests to those containing the word "foo".
|
||||||
|
|
||||||
|
> **Note for Windows users**
|
||||||
|
>
|
||||||
|
> Setting up the examples involves creating some [symbolic links](https://en.wikipedia.org/wiki/Symbolic_link) (see [here](./tools/examples/README.md#symlinked-node_modules) for details). On Windows, this requires to either have [Developer Mode enabled](https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10) (supported on Windows 10 or newer) or run the setup commands as administrator.
|
||||||
|
>
|
||||||
|
> The affected commands are:
|
||||||
|
> - `yarn setup` / `yarn setup-*`
|
||||||
|
> - `yarn build` / `yarn build-*`
|
||||||
|
> - `yarn boilerplate:add`
|
||||||
|
> - `yarn example-e2e --setup`
|
||||||
|
|
||||||
## Using ServiceWorker locally
|
## Using ServiceWorker locally
|
||||||
|
|
||||||
@ -94,7 +104,7 @@ You also want to see those changes displayed properly in the doc viewer
|
|||||||
with a quick, edit/view cycle time.
|
with a quick, edit/view cycle time.
|
||||||
|
|
||||||
For this purpose, use the `yarn docs-watch` task, which watches for changes to source files and only
|
For this purpose, use the `yarn docs-watch` task, which watches for changes to source files and only
|
||||||
re-processes the the files necessary to generate the docs that are related to the file that has changed.
|
re-processes the files necessary to generate the docs that are related to the file that has changed.
|
||||||
Since this task takes shortcuts, it is much faster (often less than 1 second) but it won't produce full
|
Since this task takes shortcuts, it is much faster (often less than 1 second) but it won't produce full
|
||||||
fidelity content. For example, links to other docs and code examples may not render correctly. This is
|
fidelity content. For example, links to other docs and code examples may not render correctly. This is
|
||||||
most particularly noticed in links to other docs and in the embedded examples, which may not always render
|
most particularly noticed in links to other docs and in the embedded examples, which may not always render
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
"shelljs": "^0.8.2",
|
"shelljs": "^0.8.2",
|
||||||
"source-map-support": "^0.5.9",
|
"source-map-support": "^0.5.9",
|
||||||
"tar-stream": "^1.6.1",
|
"tar-stream": "^1.6.1",
|
||||||
"tslib": "^1.9.3"
|
"tslib": "^1.10.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/body-parser": "^1.17.0",
|
"@types/body-parser": "^1.17.0",
|
||||||
|
@ -2444,7 +2444,12 @@ touch@^3.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
nopt "~1.0.10"
|
nopt "~1.0.10"
|
||||||
|
|
||||||
tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.3:
|
tslib@^1.10.0:
|
||||||
|
version "1.10.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
||||||
|
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
||||||
|
|
||||||
|
tslib@^1.8.0, tslib@^1.8.1:
|
||||||
version "1.9.3"
|
version "1.9.3"
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
||||||
|
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
"packageManager": "yarn",
|
"packageManager": "yarn",
|
||||||
"warnings": {
|
"warnings": {
|
||||||
"typescriptMismatch": false
|
"typescriptMismatch": false
|
||||||
}
|
},
|
||||||
|
"analytics": false
|
||||||
},
|
},
|
||||||
"newProjectRoot": "projects",
|
"newProjectRoot": "projects",
|
||||||
"projects": {
|
"projects": {
|
||||||
@ -59,7 +60,13 @@
|
|||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"scripts": []
|
"scripts": [],
|
||||||
|
"budgets": [
|
||||||
|
{
|
||||||
|
"type": "anyComponentStyle",
|
||||||
|
"maximumWarning": "6kb"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"fast": {
|
"fast": {
|
||||||
@ -91,6 +98,9 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"serviceWorker": true
|
"serviceWorker": true
|
||||||
|
},
|
||||||
|
"ci": {
|
||||||
|
"progress": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -113,7 +123,7 @@
|
|||||||
"browserTarget": "site:build:archive"
|
"browserTarget": "site:build:archive"
|
||||||
},
|
},
|
||||||
"ci": {
|
"ci": {
|
||||||
"progress": false
|
"browserTarget": "site:build:ci"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -183,4 +193,4 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"defaultProject": "site"
|
"defaultProject": "site"
|
||||||
}
|
}
|
21
aio/content/examples/accessibility/e2e/src/app.e2e-spec.ts
Normal file
21
aio/content/examples/accessibility/e2e/src/app.e2e-spec.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
'use strict'; // necessary for es6 output in node
|
||||||
|
|
||||||
|
import { browser, element, by } from 'protractor';
|
||||||
|
|
||||||
|
describe('Accessibility example e2e tests', () => {
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
browser.get('');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display Accessibility Example', function () {
|
||||||
|
expect(element(by.css('h1')).getText()).toEqual('Accessibility Example');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should take a number and change progressbar width', function () {
|
||||||
|
element(by.css('input')).sendKeys('16');
|
||||||
|
expect(element(by.css('input')).getAttribute('value')).toEqual('016');
|
||||||
|
expect(element(by.css('app-example-progressbar div')).getCssValue('width')).toBe('48px');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
13
aio/content/examples/accessibility/src/app/app.component.html
Executable file
13
aio/content/examples/accessibility/src/app/app.component.html
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
<h1>Accessibility Example</h1>
|
||||||
|
<!-- #docregion template -->
|
||||||
|
<label>
|
||||||
|
Enter an example progress value
|
||||||
|
<input type="number" min="0" max="100"
|
||||||
|
[value]="progress" (input)="progress = $event.target.value">
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<!-- The user of the progressbar sets an aria-label to communicate what the progress means. -->
|
||||||
|
<app-example-progressbar [value]="progress" aria-label="Example of a progress bar">
|
||||||
|
</app-example-progressbar>
|
||||||
|
<!-- #enddocregion template -->
|
||||||
|
|
10
aio/content/examples/accessibility/src/app/app.component.ts
Executable file
10
aio/content/examples/accessibility/src/app/app.component.ts
Executable 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 {
|
||||||
|
progress = 0;
|
||||||
|
}
|
12
aio/content/examples/accessibility/src/app/app.module.ts
Executable file
12
aio/content/examples/accessibility/src/app/app.module.ts
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
import { ExampleProgressbarComponent } from './progress-bar.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [ BrowserModule ],
|
||||||
|
declarations: [ AppComponent, ExampleProgressbarComponent ],
|
||||||
|
bootstrap: [ AppComponent ]
|
||||||
|
})
|
||||||
|
export class AppModule { }
|
12
aio/content/examples/accessibility/src/app/progress-bar.component.css
Executable file
12
aio/content/examples/accessibility/src/app/progress-bar.component.css
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
:host {
|
||||||
|
display: block;
|
||||||
|
width: 300px;
|
||||||
|
height: 25px;
|
||||||
|
border: 1px solid black;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bar {
|
||||||
|
background: blue;
|
||||||
|
height: 100%;
|
||||||
|
}
|
28
aio/content/examples/accessibility/src/app/progress-bar.component.ts
Executable file
28
aio/content/examples/accessibility/src/app/progress-bar.component.ts
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
// #docregion progressbar-component
|
||||||
|
import { Component, Input } from '@angular/core';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example progressbar component.
|
||||||
|
*/
|
||||||
|
@Component({
|
||||||
|
selector: 'app-example-progressbar',
|
||||||
|
template: `<div class="bar" [style.width.%]="value"></div>`,
|
||||||
|
styleUrls: ['./progress-bar.component.css'],
|
||||||
|
host: {
|
||||||
|
// Sets the role for this component to "progressbar"
|
||||||
|
role: 'progressbar',
|
||||||
|
|
||||||
|
// Sets the minimum and maximum values for the progressbar role.
|
||||||
|
'aria-valuemin': '0',
|
||||||
|
'aria-valuemax': '100',
|
||||||
|
|
||||||
|
// Binding that updates the current value of the progressbar.
|
||||||
|
'[attr.aria-valuenow]': 'value',
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export class ExampleProgressbarComponent {
|
||||||
|
/** Current value of the progressbar. */
|
||||||
|
@Input() value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// #enddocregion progressbar-component
|
14
aio/content/examples/accessibility/src/index.html
Normal file
14
aio/content/examples/accessibility/src/index.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Accessibility Example</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>Loading...</app-root>
|
||||||
|
</body>
|
||||||
|
</html>
|
11
aio/content/examples/accessibility/src/main.ts
Normal file
11
aio/content/examples/accessibility/src/main.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
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);
|
9
aio/content/examples/accessibility/stackblitz.json
Normal file
9
aio/content/examples/accessibility/stackblitz.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"description": "Accessibility",
|
||||||
|
"files": [
|
||||||
|
"!**/*.d.ts",
|
||||||
|
"!**/*.js",
|
||||||
|
"!**/*.[1,2].*"
|
||||||
|
],
|
||||||
|
"tags": ["Accessibility"]
|
||||||
|
}
|
@ -89,14 +89,14 @@ describe('Animation Tests', () => {
|
|||||||
sleepFor(2000);
|
sleepFor(2000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be inactive with an orange background', async () => {
|
it('should be inactive with a blue background', async () => {
|
||||||
const toggleButton = statusSlider.getToggleButton();
|
const toggleButton = statusSlider.getToggleButton();
|
||||||
const container = statusSlider.getComponentContainer();
|
const container = statusSlider.getComponentContainer();
|
||||||
let text = await container.getText();
|
let text = await container.getText();
|
||||||
|
|
||||||
if (text === 'Active') {
|
if (text === 'Active') {
|
||||||
await toggleButton.click();
|
await toggleButton.click();
|
||||||
await browser.wait(async () => await container.getCssValue('backgroundColor') === inactiveColor, 2000);
|
await browser.wait(async () => await container.getCssValue('backgroundColor') === inactiveColor, 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
text = await container.getText();
|
text = await container.getText();
|
||||||
@ -106,14 +106,14 @@ describe('Animation Tests', () => {
|
|||||||
expect(bgColor).toBe(inactiveColor);
|
expect(bgColor).toBe(inactiveColor);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be active with a blue background', async () => {
|
it('should be active with an orange background', async () => {
|
||||||
const toggleButton = statusSlider.getToggleButton();
|
const toggleButton = statusSlider.getToggleButton();
|
||||||
const container = statusSlider.getComponentContainer();
|
const container = statusSlider.getComponentContainer();
|
||||||
let text = await container.getText();
|
let text = await container.getText();
|
||||||
|
|
||||||
if (text === 'Inactive') {
|
if (text === 'Inactive') {
|
||||||
await toggleButton.click();
|
await toggleButton.click();
|
||||||
await browser.wait(async () => await container.getCssValue('backgroundColor') === activeColor, 2000);
|
await browser.wait(async () => await container.getCssValue('backgroundColor') === activeColor, 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
text = await container.getText();
|
text = await container.getText();
|
||||||
|
@ -12,10 +12,12 @@ Toggle All Animations <input type="checkbox" [checked]="!animationsDisabled" (cl
|
|||||||
<a id="auto" routerLink="/auto" routerLinkActive="active">Auto Calculation</a>
|
<a id="auto" routerLink="/auto" routerLinkActive="active">Auto Calculation</a>
|
||||||
<a id="heroes" routerLink="/heroes" routerLinkActive="active">Filter/Stagger</a>
|
<a id="heroes" routerLink="/heroes" routerLinkActive="active">Filter/Stagger</a>
|
||||||
<a id="hero-groups" routerLink="/hero-groups" routerLinkActive="active">Hero Groups</a>
|
<a id="hero-groups" routerLink="/hero-groups" routerLinkActive="active">Hero Groups</a>
|
||||||
|
<a id="insert-remove" routerLink="/insert-remove" routerLinkActive="active">Insert/Remove</a>
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- #docregion route-animations-outlet -->
|
<!-- #docregion route-animations-outlet -->
|
||||||
<div [@routeAnimations]="prepareRoute(outlet)" >
|
<div [@routeAnimations]="prepareRoute(outlet)" >
|
||||||
<router-outlet #outlet="outlet"></router-outlet>
|
<router-outlet #outlet="outlet"></router-outlet>
|
||||||
</div>
|
</div>
|
||||||
<!-- #enddocregion route-animations-outlet -->
|
<!-- #enddocregion route-animations-outlet -->
|
||||||
|
@ -35,6 +35,7 @@ import { InsertRemoveComponent } from './insert-remove.component';
|
|||||||
{ path: 'hero-groups', component: HeroListGroupPageComponent },
|
{ path: 'hero-groups', component: HeroListGroupPageComponent },
|
||||||
{ path: 'enter-leave', component: HeroListEnterLeavePageComponent },
|
{ path: 'enter-leave', component: HeroListEnterLeavePageComponent },
|
||||||
{ path: 'auto', component: HeroListAutoCalcPageComponent },
|
{ path: 'auto', component: HeroListAutoCalcPageComponent },
|
||||||
|
{ path: 'insert-remove', component: InsertRemoveComponent},
|
||||||
{ path: 'home', component: HomeComponent, data: {animation: 'HomePage'} },
|
{ path: 'home', component: HomeComponent, data: {animation: 'HomePage'} },
|
||||||
{ path: 'about', component: AboutComponent, data: {animation: 'AboutPage'} },
|
{ path: 'about', component: AboutComponent, data: {animation: 'AboutPage'} },
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export class Hero {
|
export interface Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
<!-- #docplaster -->
|
<!-- #docplaster -->
|
||||||
|
|
||||||
|
<h2>Insert/Remove</h2>
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
<button (click)="toggle()">Toggle Insert/Remove</button>
|
<button (click)="toggle()">Toggle Insert/Remove</button>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -9,10 +9,10 @@ import { trigger, transition, animate, style } from '@angular/animations';
|
|||||||
trigger('myInsertRemoveTrigger', [
|
trigger('myInsertRemoveTrigger', [
|
||||||
transition(':enter', [
|
transition(':enter', [
|
||||||
style({ opacity: 0 }),
|
style({ opacity: 0 }),
|
||||||
animate('5s', style({ opacity: 1 })),
|
animate('100ms', style({ opacity: 1 })),
|
||||||
]),
|
]),
|
||||||
transition(':leave', [
|
transition(':leave', [
|
||||||
animate('5s', style({ opacity: 0 }))
|
animate('100ms', style({ opacity: 0 }))
|
||||||
])
|
])
|
||||||
]),
|
]),
|
||||||
// #enddocregion enter-leave-trigger
|
// #enddocregion enter-leave-trigger
|
||||||
|
@ -36,9 +36,6 @@ import { transAnimation } from './animations';
|
|||||||
})
|
})
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
// #docregion runtime
|
|
||||||
],
|
|
||||||
// #enddocregion runtime
|
|
||||||
// #enddocregion reusable
|
// #enddocregion reusable
|
||||||
templateUrl: 'open-close.component.html',
|
templateUrl: 'open-close.component.html',
|
||||||
styleUrls: ['open-close.component.css']
|
styleUrls: ['open-close.component.css']
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1,2,3].*"
|
"!**/*.[1,2,3].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags": ["animations"]
|
"tags": ["animations"]
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import { protractor, browser, element, by, ElementFinder } from 'protractor';
|
|||||||
|
|
||||||
const nameSuffix = 'X';
|
const nameSuffix = 'X';
|
||||||
|
|
||||||
class Hero {
|
interface Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,5 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
"file": "src/app/app.module.ts"
|
"file": "src/app/hero-list.component.html"
|
||||||
}
|
}
|
||||||
|
@ -25,23 +25,12 @@ describe('Attribute binding example', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should display a blue div with a red border', function () {
|
it('should display a blue div with a red border', function () {
|
||||||
expect(element.all(by.css('div')).get(4).getCssValue('border')).toEqual('2px solid rgb(212, 30, 46)');
|
expect(element.all(by.css('div')).get(1).getCssValue('border')).toEqual('2px solid rgb(212, 30, 46)');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display a div with replaced classes', function () {
|
it('should display a div with many classes', function () {
|
||||||
expect(element.all(by.css('div')).get(5).getAttribute('class')).toEqual('new-class');
|
expect(element.all(by.css('div')).get(1).getAttribute('class')).toContain('special');
|
||||||
});
|
expect(element.all(by.css('div')).get(1).getAttribute('class')).toContain('clearance');
|
||||||
|
|
||||||
it('should display four buttons', function() {
|
|
||||||
let redButton = element.all(by.css('button')).get(1);
|
|
||||||
let saveButton = element.all(by.css('button')).get(2);
|
|
||||||
let bigButton = element.all(by.css('button')).get(3);
|
|
||||||
let smallButton = element.all(by.css('button')).get(4);
|
|
||||||
|
|
||||||
expect(redButton.getCssValue('color')).toEqual('rgba(255, 0, 0, 1)');
|
|
||||||
expect(saveButton.getCssValue('background-color')).toEqual('rgba(0, 255, 255, 1)');
|
|
||||||
expect(bigButton.getText()).toBe('Big');
|
|
||||||
expect(smallButton.getText()).toBe('Small');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -27,39 +27,41 @@
|
|||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<h2>Class binding</h2>
|
<h2>Styling precedence</h2>
|
||||||
|
|
||||||
<!-- #docregion is-special -->
|
<!-- #docregion basic-specificity -->
|
||||||
<h3>toggle the "special" class on/off with a property:</h3>
|
<h3>Basic specificity</h3>
|
||||||
<div [class.special]="isSpecial">The class binding is special.</div>
|
|
||||||
|
|
||||||
<h3>binding to class.special overrides the class attribute:</h3>
|
<!-- The `class.special` binding will override any value for the `special` class in `classExpr`. -->
|
||||||
<div class="special" [class.special]="!isSpecial">This one is not so special.</div>
|
<div [class.special]="isSpecial" [class]="classExpr">Some text.</div>
|
||||||
|
|
||||||
<h3>Using the bind- syntax:</h3>
|
<!-- The `style.color` binding will override any value for the `color` property in `styleExpr`. -->
|
||||||
<div bind-class.special="isSpecial">This class binding is special too.</div>
|
<div [style.color]="color" [style]="styleExpr">Some text.</div>
|
||||||
<!-- #enddocregion is-special -->
|
<!-- #enddocregion basic-specificity -->
|
||||||
|
|
||||||
<!-- #docregion add-class -->
|
<!-- #docregion source-specificity -->
|
||||||
<h3>Add a class:</h3>
|
<h3>Source specificity</h3>
|
||||||
<div class="item clearance special" [class.item-clearance]="itemClearance">Add another class</div>
|
|
||||||
<!-- #enddocregion add-class -->
|
|
||||||
|
|
||||||
<!-- #docregion class-override -->
|
<!-- The `class.special` template binding will override any host binding to the `special` class set by `dirWithClassBinding` or `comp-with-host-binding`.-->
|
||||||
<h3>Overwrite all existing classes with a new class:</h3>
|
<comp-with-host-binding [class.special]="isSpecial" dirWithClassBinding>Some text.</comp-with-host-binding>
|
||||||
<div class="item clearance special" [attr.class]="resetClasses">Reset all classes at once</div>
|
|
||||||
<!-- #enddocregion class-override -->
|
|
||||||
|
|
||||||
<hr />
|
<!-- The `style.color` template binding will override any host binding to the `color` property set by `dirWithStyleBinding` or `comp-with-host-binding`. -->
|
||||||
|
<comp-with-host-binding [style.color]="color" dirWithStyleBinding>Some text.</comp-with-host-binding>
|
||||||
|
<!-- #enddocregion source-specificity -->
|
||||||
|
|
||||||
<h2>Style binding</h2>
|
<!-- #docregion dynamic-priority -->
|
||||||
|
<h3>Dynamic vs static</h3>
|
||||||
|
|
||||||
|
<!-- If `classExpr` has a value for the `special` class, this value will override the `class="special"` below -->
|
||||||
|
<div class="special" [class]="classExpr">Some text.</div>
|
||||||
|
|
||||||
|
<!-- If `styleExpr` has a value for the `color` property, this value will override the `style="color: blue"` below -->
|
||||||
|
<div style="color: blue" [style]="styleExpr">Some text.</div>
|
||||||
|
|
||||||
|
<!-- #enddocregion dynamic-priority -->
|
||||||
|
|
||||||
|
<!-- #docregion style-delegation -->
|
||||||
|
<comp-with-host-binding dirWithHostBinding></comp-with-host-binding>
|
||||||
|
<!-- #enddocregion style-delegation -->
|
||||||
|
|
||||||
<!-- #docregion style-binding-->
|
|
||||||
<button [style.color]="isSpecial ? 'red': 'green'">Red</button>
|
|
||||||
<button [style.background-color]="canSave ? 'cyan': 'grey'" >Save</button>
|
|
||||||
<!-- #enddocregion style-binding -->
|
|
||||||
|
|
||||||
<!-- #docregion style-binding-condition-->
|
|
||||||
<button [style.font-size.em]="isSpecial ? 3 : 1" >Big</button>
|
|
||||||
<button [style.font-size.%]="!isSpecial ? 150 : 50" >Small</button>
|
|
||||||
<!-- #enddocregion style-binding-condition-->
|
|
||||||
|
@ -8,8 +8,8 @@ import { Component } from '@angular/core';
|
|||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
actionName = 'Go for it';
|
actionName = 'Go for it';
|
||||||
isSpecial = true;
|
isSpecial = true;
|
||||||
itemClearance = true;
|
|
||||||
resetClasses = 'new-class';
|
|
||||||
canSave = true;
|
canSave = true;
|
||||||
|
classExpr = 'special clearance';
|
||||||
|
styleExpr = 'color: red';
|
||||||
|
color = 'blue';
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,13 @@ import { NgModule } from '@angular/core';
|
|||||||
|
|
||||||
|
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
|
import { CompWithHostBindingComponent } from './comp-with-host-binding.component';
|
||||||
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
AppComponent
|
AppComponent,
|
||||||
|
CompWithHostBindingComponent
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule
|
BrowserModule
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'comp-with-host-binding',
|
||||||
|
template: 'I am a component!',
|
||||||
|
host: {
|
||||||
|
'[class.special]': 'isSpecial',
|
||||||
|
'[style.color]': 'color',
|
||||||
|
'[style.width]': 'width'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export class CompWithHostBindingComponent {
|
||||||
|
isSpecial = false;
|
||||||
|
color = 'green';
|
||||||
|
width = '200px';
|
||||||
|
}
|
@ -5,5 +5,6 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1,2,3].*"
|
"!**/*.[1,2,3].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/highlight.directive.ts",
|
||||||
"tags": ["attribute", "directive"]
|
"tags": ["attribute", "directive"]
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import { Component, ViewChild, ElementRef } from '@angular/core';
|
|||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
|
|
||||||
@ViewChild('bindingInput', { static: false }) bindingInput: ElementRef;
|
@ViewChild('bindingInput') bindingInput: ElementRef;
|
||||||
|
|
||||||
isUnchanged = true;
|
isUnchanged = true;
|
||||||
|
|
||||||
|
48
aio/content/examples/cli-builder/src/my-builder.spec.ts
Normal file
48
aio/content/examples/cli-builder/src/my-builder.spec.ts
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
// #docregion
|
||||||
|
import { Architect } from '@angular-devkit/architect';
|
||||||
|
import { TestingArchitectHost } from '@angular-devkit/architect/testing';
|
||||||
|
import { logging, schema } from '@angular-devkit/core';
|
||||||
|
|
||||||
|
describe('Command Runner Builder', () => {
|
||||||
|
let architect: Architect;
|
||||||
|
let architectHost: TestingArchitectHost;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const registry = new schema.CoreSchemaRegistry();
|
||||||
|
registry.addPostTransform(schema.transforms.addUndefinedDefaults);
|
||||||
|
|
||||||
|
// TestingArchitectHost() takes workspace and current directories.
|
||||||
|
// Since we don't use those, both are the same in this case.
|
||||||
|
architectHost = new TestingArchitectHost(__dirname, __dirname);
|
||||||
|
architect = new Architect(architectHost, registry);
|
||||||
|
|
||||||
|
// This will either take a Node package name, or a path to the directory
|
||||||
|
// for the package.json file.
|
||||||
|
await architectHost.addBuilderFromPackage('..');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can run node', async () => {
|
||||||
|
// Create a logger that keeps an array of all messages that were logged.
|
||||||
|
const logger = new logging.Logger('');
|
||||||
|
const logs = [];
|
||||||
|
logger.subscribe(ev => logs.push(ev.message));
|
||||||
|
|
||||||
|
// A "run" can have multiple outputs, and contains progress information.
|
||||||
|
const run = await architect.scheduleBuilder('@example/command-runner:command', {
|
||||||
|
command: 'node',
|
||||||
|
args: ['--print', '\'foo\''],
|
||||||
|
}, { logger }); // We pass the logger for checking later.
|
||||||
|
|
||||||
|
// The "result" member (of type BuilderOutput) is the next output.
|
||||||
|
const output = await run.result;
|
||||||
|
|
||||||
|
// Stop the builder from running. This stops Architect from keeping
|
||||||
|
// the builder-associated states in memory, since builders keep waiting
|
||||||
|
// to be scheduled.
|
||||||
|
await run.stop();
|
||||||
|
|
||||||
|
// Expect that foo was logged
|
||||||
|
expect(logs).toContain('foo');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// #enddocregion
|
46
aio/content/examples/cli-builder/src/my-builder.ts
Normal file
46
aio/content/examples/cli-builder/src/my-builder.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// #docplaster
|
||||||
|
// #docregion builder, builder-skeleton, handling-output, progress-reporting
|
||||||
|
import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect';
|
||||||
|
import { JsonObject } from '@angular-devkit/core';
|
||||||
|
// #enddocregion builder-skeleton
|
||||||
|
import * as childProcess from 'child_process';
|
||||||
|
// #docregion builder-skeleton
|
||||||
|
|
||||||
|
interface Options extends JsonObject {
|
||||||
|
command: string;
|
||||||
|
args: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export default createBuilder(commandBuilder);
|
||||||
|
|
||||||
|
function commandBuilder(
|
||||||
|
options: Options,
|
||||||
|
context: BuilderContext,
|
||||||
|
): Promise<BuilderOutput> {
|
||||||
|
// #enddocregion builder, builder-skeleton, handling-output
|
||||||
|
// #docregion report-status
|
||||||
|
context.reportStatus(`Executing "${options.command}"...`);
|
||||||
|
// #docregion builder, handling-output
|
||||||
|
const child = childProcess.spawn(options.command, options.args);
|
||||||
|
// #enddocregion builder, report-status
|
||||||
|
|
||||||
|
child.stdout.on('data', data => {
|
||||||
|
context.logger.info(data.toString());
|
||||||
|
});
|
||||||
|
child.stderr.on('data', data => {
|
||||||
|
context.logger.error(data.toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
// #docregion builder
|
||||||
|
return new Promise(resolve => {
|
||||||
|
// #enddocregion builder, handling-output
|
||||||
|
context.reportStatus(`Done.`);
|
||||||
|
// #docregion builder, handling-output
|
||||||
|
child.on('close', code => {
|
||||||
|
resolve({ success: code === 0 });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// #docregion builder-skeleton
|
||||||
|
}
|
||||||
|
|
||||||
|
// #enddocregion builder, builder-skeleton, handling-output, progress-reporting
|
@ -0,0 +1,40 @@
|
|||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
// #docregion observable
|
||||||
|
|
||||||
|
// declare a publishing operation
|
||||||
|
const observable = new Observable<number>(observer => {
|
||||||
|
// Subscriber fn...
|
||||||
|
});
|
||||||
|
|
||||||
|
// initiate execution
|
||||||
|
observable.subscribe(() => {
|
||||||
|
// observer handles notifications
|
||||||
|
});
|
||||||
|
|
||||||
|
// #enddocregion observable
|
||||||
|
|
||||||
|
// #docregion unsubscribe
|
||||||
|
|
||||||
|
const subscription = observable.subscribe(() => {
|
||||||
|
// observer handles notifications
|
||||||
|
});
|
||||||
|
|
||||||
|
subscription.unsubscribe();
|
||||||
|
|
||||||
|
// #enddocregion unsubscribe
|
||||||
|
|
||||||
|
// #docregion error
|
||||||
|
|
||||||
|
observable.subscribe(() => {
|
||||||
|
throw Error('my error');
|
||||||
|
});
|
||||||
|
|
||||||
|
// #enddocregion error
|
||||||
|
|
||||||
|
// #docregion chain
|
||||||
|
|
||||||
|
observable.pipe(map(v => 2 * v));
|
||||||
|
|
||||||
|
// #enddocregion chain
|
25
aio/content/examples/comparing-observables/src/promises.ts
Normal file
25
aio/content/examples/comparing-observables/src/promises.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// #docregion promise
|
||||||
|
// initiate execution
|
||||||
|
const promise = new Promise<number>((resolve, reject) => {
|
||||||
|
// Executer fn...
|
||||||
|
});
|
||||||
|
|
||||||
|
promise.then(value => {
|
||||||
|
// handle result here
|
||||||
|
});
|
||||||
|
|
||||||
|
// #enddocregion promise
|
||||||
|
|
||||||
|
// #docregion chain
|
||||||
|
|
||||||
|
promise.then(v => 2 * v);
|
||||||
|
|
||||||
|
// #enddocregion chain
|
||||||
|
|
||||||
|
// #docregion error
|
||||||
|
|
||||||
|
promise.then(() => {
|
||||||
|
throw Error('my error');
|
||||||
|
});
|
||||||
|
|
||||||
|
// #enddocregion error
|
@ -4,9 +4,10 @@
|
|||||||
"cmd": "yarn",
|
"cmd": "yarn",
|
||||||
"args": [
|
"args": [
|
||||||
"e2e",
|
"e2e",
|
||||||
|
"--protractor-config=e2e/protractor-puppeteer.conf.js",
|
||||||
"--no-webdriver-update",
|
"--no-webdriver-update",
|
||||||
"--port={PORT}"
|
"--port={PORT}"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ export class CountdownLocalVarParentComponent { }
|
|||||||
})
|
})
|
||||||
export class CountdownViewChildParentComponent implements AfterViewInit {
|
export class CountdownViewChildParentComponent implements AfterViewInit {
|
||||||
|
|
||||||
@ViewChild(CountdownTimerComponent, {static: false})
|
@ViewChild(CountdownTimerComponent)
|
||||||
private timerComponent: CountdownTimerComponent;
|
private timerComponent: CountdownTimerComponent;
|
||||||
|
|
||||||
seconds() { return 0; }
|
seconds() { return 0; }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export class Hero {
|
export interface Hero {
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,5 +6,6 @@
|
|||||||
"!**/*.native.*",
|
"!**/*.native.*",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/hero-app.component.ts",
|
||||||
"tags": ["CSS"]
|
"tags": ["CSS"]
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ export class HeroContactComponent {
|
|||||||
|
|
||||||
@Host() // limit search for logger; hides the application-wide logger
|
@Host() // limit search for logger; hides the application-wide logger
|
||||||
@Optional() // ok if the logger doesn't exist
|
@Optional() // ok if the logger doesn't exist
|
||||||
private loggerService: LoggerService
|
private loggerService?: LoggerService
|
||||||
// #enddocregion ctor-params
|
// #enddocregion ctor-params
|
||||||
) {
|
) {
|
||||||
if (loggerService) {
|
if (loggerService) {
|
||||||
|
@ -52,7 +52,7 @@ const templateC = `
|
|||||||
export class CarolComponent {
|
export class CarolComponent {
|
||||||
name = 'Carol';
|
name = 'Carol';
|
||||||
// #docregion carol-ctor
|
// #docregion carol-ctor
|
||||||
constructor( @Optional() public parent: Parent ) { }
|
constructor( @Optional() public parent?: Parent ) { }
|
||||||
// #enddocregion carol-ctor
|
// #enddocregion carol-ctor
|
||||||
}
|
}
|
||||||
// #enddocregion carol-class
|
// #enddocregion carol-class
|
||||||
@ -64,7 +64,7 @@ export class CarolComponent {
|
|||||||
})
|
})
|
||||||
export class ChrisComponent {
|
export class ChrisComponent {
|
||||||
name = 'Chris';
|
name = 'Chris';
|
||||||
constructor( @Optional() public parent: Parent ) { }
|
constructor( @Optional() public parent?: Parent ) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
////// Craig ///////////
|
////// Craig ///////////
|
||||||
@ -81,7 +81,7 @@ export class ChrisComponent {
|
|||||||
</div>`
|
</div>`
|
||||||
})
|
})
|
||||||
export class CraigComponent {
|
export class CraigComponent {
|
||||||
constructor( @Optional() public alex: Base ) { }
|
constructor( @Optional() public alex?: Base ) { }
|
||||||
}
|
}
|
||||||
// #enddocregion craig
|
// #enddocregion craig
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ const templateB = `
|
|||||||
export class BarryComponent implements Parent {
|
export class BarryComponent implements Parent {
|
||||||
name = 'Barry';
|
name = 'Barry';
|
||||||
// #docregion barry-ctor
|
// #docregion barry-ctor
|
||||||
constructor( @SkipSelf() @Optional() public parent: Parent ) { }
|
constructor( @SkipSelf() @Optional() public parent?: Parent ) { }
|
||||||
// #enddocregion barry-ctor
|
// #enddocregion barry-ctor
|
||||||
}
|
}
|
||||||
// #enddocregion barry
|
// #enddocregion barry
|
||||||
@ -117,7 +117,7 @@ export class BarryComponent implements Parent {
|
|||||||
})
|
})
|
||||||
export class BobComponent implements Parent {
|
export class BobComponent implements Parent {
|
||||||
name = 'Bob';
|
name = 'Bob';
|
||||||
constructor( @SkipSelf() @Optional() public parent: Parent ) { }
|
constructor( @SkipSelf() @Optional() public parent?: Parent ) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -129,7 +129,7 @@ export class BobComponent implements Parent {
|
|||||||
})
|
})
|
||||||
export class BethComponent implements Parent {
|
export class BethComponent implements Parent {
|
||||||
name = 'Beth';
|
name = 'Beth';
|
||||||
constructor( @SkipSelf() @Optional() public parent: Parent ) { }
|
constructor( @SkipSelf() @Optional() public parent?: Parent ) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
///////// A - Grandparent //////
|
///////// A - Grandparent //////
|
||||||
@ -200,7 +200,7 @@ export class AliceComponent implements Parent
|
|||||||
</div>`
|
</div>`
|
||||||
})
|
})
|
||||||
export class CathyComponent {
|
export class CathyComponent {
|
||||||
constructor( @Optional() public alex: AlexComponent ) { }
|
constructor( @Optional() public alex?: AlexComponent ) { }
|
||||||
}
|
}
|
||||||
// #enddocregion cathy
|
// #enddocregion cathy
|
||||||
|
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags":["cookbook"]
|
"tags":["cookbook"]
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,10 @@
|
|||||||
"cmd": "yarn",
|
"cmd": "yarn",
|
||||||
"args": [
|
"args": [
|
||||||
"e2e",
|
"e2e",
|
||||||
|
"--protractor-config=e2e/protractor-puppeteer.conf.js",
|
||||||
"--no-webdriver-update",
|
"--no-webdriver-update",
|
||||||
"--port={PORT}"
|
"--port={PORT}"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// #docregion
|
// #docregion
|
||||||
export class Hero {
|
export interface Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
isSecret = false;
|
isSecret: boolean;
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,7 @@ let some_message = 'Hello from the injected logger';
|
|||||||
export class Provider10Component implements OnInit {
|
export class Provider10Component implements OnInit {
|
||||||
log: string;
|
log: string;
|
||||||
// #docregion provider-10-ctor
|
// #docregion provider-10-ctor
|
||||||
constructor(@Optional() private logger: Logger) {
|
constructor(@Optional() private logger?: Logger) {
|
||||||
if (this.logger) {
|
if (this.logger) {
|
||||||
this.logger.log(some_message);
|
this.logger.log(some_message);
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,6 @@
|
|||||||
"!**/*.[0,1,2,3,4].*",
|
"!**/*.[0,1,2,3,4].*",
|
||||||
"!**/dummy.module.ts"
|
"!**/dummy.module.ts"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags": ["dependency", "di"]
|
"tags": ["dependency", "di"]
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,6 @@
|
|||||||
"!**/app-ctor.component.ts",
|
"!**/app-ctor.component.ts",
|
||||||
"!**/*.[1,2,3].*"
|
"!**/*.[1,2,3].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags": ["Template"]
|
"tags": ["Template"]
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
{
|
{
|
||||||
"description": "Second authors style guide stackblitz (non-executing)",
|
"description": "Second authors style guide stackblitz (non-executing)",
|
||||||
"files": [
|
"files": [
|
||||||
"src/index.2.html"
|
"src/main.2.ts",
|
||||||
|
"src/index.2.html",
|
||||||
|
"src/styles.css"
|
||||||
],
|
],
|
||||||
"main": "src/index.2.html",
|
"main": "src/index.2.html",
|
||||||
|
"file": "src/index.html",
|
||||||
"tags": ["author", "style guide"]
|
"tags": ["author", "style guide"]
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export class Hero {
|
export interface Hero {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
0
aio/content/examples/docs-style-guide/src/main.2.ts
Normal file
0
aio/content/examples/docs-style-guide/src/main.2.ts
Normal file
@ -4,5 +4,6 @@
|
|||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js"
|
"!**/*.js"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags":["cookbook component"]
|
"tags":["cookbook component"]
|
||||||
}
|
}
|
||||||
|
@ -2,21 +2,23 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
import { QuestionService } from './question.service';
|
import { QuestionService } from './question.service';
|
||||||
|
import { QuestionBase } from './question-base';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
template: `
|
template: `
|
||||||
<div>
|
<div>
|
||||||
<h2>Job Application for Heroes</h2>
|
<h2>Job Application for Heroes</h2>
|
||||||
<app-dynamic-form [questions]="questions"></app-dynamic-form>
|
<app-dynamic-form [questions]="questions$ | async"></app-dynamic-form>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
providers: [QuestionService]
|
providers: [QuestionService]
|
||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
questions: any[];
|
questions$: Observable<QuestionBase<any>[]>;
|
||||||
|
|
||||||
constructor(service: QuestionService) {
|
constructor(service: QuestionService) {
|
||||||
this.questions = service.getQuestions();
|
this.questions$ = service.getQuestions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<option *ngFor="let opt of question.options" [value]="opt.key">{{opt.value}}</option>
|
<option *ngFor="let opt of question.options" [value]="opt.key">{{opt.value}}</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="errorMessage" *ngIf="!isValid">{{question.label}} is required</div>
|
<div class="errorMessage" *ngIf="!isValid">{{question.label}} is required</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -9,7 +9,7 @@ import { QuestionBase } from './question-base';
|
|||||||
templateUrl: './dynamic-form-question.component.html'
|
templateUrl: './dynamic-form-question.component.html'
|
||||||
})
|
})
|
||||||
export class DynamicFormQuestionComponent {
|
export class DynamicFormQuestionComponent {
|
||||||
@Input() question: QuestionBase<any>;
|
@Input() question: QuestionBase<string>;
|
||||||
@Input() form: FormGroup;
|
@Input() form: FormGroup;
|
||||||
get isValid() { return this.form.controls[this.question.key].valid; }
|
get isValid() { return this.form.controls[this.question.key].valid; }
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import { QuestionControlService } from './question-control.service';
|
|||||||
})
|
})
|
||||||
export class DynamicFormComponent implements OnInit {
|
export class DynamicFormComponent implements OnInit {
|
||||||
|
|
||||||
@Input() questions: QuestionBase<any>[] = [];
|
@Input() questions: QuestionBase<string>[] = [];
|
||||||
form: FormGroup;
|
form: FormGroup;
|
||||||
payLoad = '';
|
payLoad = '';
|
||||||
|
|
||||||
@ -23,6 +23,6 @@ export class DynamicFormComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSubmit() {
|
onSubmit() {
|
||||||
this.payLoad = JSON.stringify(this.form.value);
|
this.payLoad = JSON.stringify(this.form.getRawValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@ export class QuestionBase<T> {
|
|||||||
required: boolean;
|
required: boolean;
|
||||||
order: number;
|
order: number;
|
||||||
controlType: string;
|
controlType: string;
|
||||||
|
type: string;
|
||||||
|
options: {key: string, value: string}[];
|
||||||
|
|
||||||
constructor(options: {
|
constructor(options: {
|
||||||
value?: T,
|
value?: T,
|
||||||
@ -13,7 +15,8 @@ export class QuestionBase<T> {
|
|||||||
label?: string,
|
label?: string,
|
||||||
required?: boolean,
|
required?: boolean,
|
||||||
order?: number,
|
order?: number,
|
||||||
controlType?: string
|
controlType?: string,
|
||||||
|
type?: string
|
||||||
} = {}) {
|
} = {}) {
|
||||||
this.value = options.value;
|
this.value = options.value;
|
||||||
this.key = options.key || '';
|
this.key = options.key || '';
|
||||||
@ -21,5 +24,6 @@ export class QuestionBase<T> {
|
|||||||
this.required = !!options.required;
|
this.required = !!options.required;
|
||||||
this.order = options.order === undefined ? 1 : options.order;
|
this.order = options.order === undefined ? 1 : options.order;
|
||||||
this.controlType = options.controlType || '';
|
this.controlType = options.controlType || '';
|
||||||
|
this.type = options.type || '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import { QuestionBase } from './question-base';
|
|||||||
export class QuestionControlService {
|
export class QuestionControlService {
|
||||||
constructor() { }
|
constructor() { }
|
||||||
|
|
||||||
toFormGroup(questions: QuestionBase<any>[] ) {
|
toFormGroup(questions: QuestionBase<string>[] ) {
|
||||||
let group: any = {};
|
let group: any = {};
|
||||||
|
|
||||||
questions.forEach(question => {
|
questions.forEach(question => {
|
||||||
|
@ -4,15 +4,15 @@ import { Injectable } from '@angular/core';
|
|||||||
import { DropdownQuestion } from './question-dropdown';
|
import { DropdownQuestion } from './question-dropdown';
|
||||||
import { QuestionBase } from './question-base';
|
import { QuestionBase } from './question-base';
|
||||||
import { TextboxQuestion } from './question-textbox';
|
import { TextboxQuestion } from './question-textbox';
|
||||||
|
import { of } from 'rxjs';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class QuestionService {
|
export class QuestionService {
|
||||||
|
|
||||||
// TODO: get from a remote source of question metadata
|
// TODO: get from a remote source of question metadata
|
||||||
// TODO: make asynchronous
|
|
||||||
getQuestions() {
|
getQuestions() {
|
||||||
|
|
||||||
let questions: QuestionBase<any>[] = [
|
let questions: QuestionBase<string>[] = [
|
||||||
|
|
||||||
new DropdownQuestion({
|
new DropdownQuestion({
|
||||||
key: 'brave',
|
key: 'brave',
|
||||||
@ -42,6 +42,6 @@ export class QuestionService {
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
return questions.sort((a, b) => a.order - b.order);
|
return of(questions.sort((a, b) => a.order - b.order));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags":["cookbook"]
|
"tags":["cookbook"]
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/popup.service.ts",
|
||||||
"tags":["cookbook"]
|
"tags":["cookbook"]
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
} from '@angular/forms';
|
} from '@angular/forms';
|
||||||
import { catchError, map } from 'rxjs/operators';
|
import { catchError, map } from 'rxjs/operators';
|
||||||
import { HeroesService } from './heroes.service';
|
import { HeroesService } from './heroes.service';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable, of } from 'rxjs';
|
||||||
|
|
||||||
// #docregion async-validator
|
// #docregion async-validator
|
||||||
@Injectable({ providedIn: 'root' })
|
@Injectable({ providedIn: 'root' })
|
||||||
@ -19,7 +19,7 @@ export class UniqueAlterEgoValidator implements AsyncValidator {
|
|||||||
): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {
|
): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {
|
||||||
return this.heroesService.isAlterEgoTaken(ctrl.value).pipe(
|
return this.heroesService.isAlterEgoTaken(ctrl.value).pipe(
|
||||||
map(isTaken => (isTaken ? { uniqueAlterEgo: true } : null)),
|
map(isTaken => (isTaken ? { uniqueAlterEgo: true } : null)),
|
||||||
catchError(() => null)
|
catchError(() => of(null))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,5 +4,6 @@
|
|||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[1].*"
|
"!**/*.[1].*"
|
||||||
]
|
],
|
||||||
|
"file": "src/app/app.component.ts"
|
||||||
}
|
}
|
||||||
|
@ -3,5 +3,6 @@
|
|||||||
"files":[
|
"files":[
|
||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js"
|
"!**/*.js"
|
||||||
]
|
],
|
||||||
|
"file": "src/app/app.component.ts"
|
||||||
}
|
}
|
||||||
|
@ -3,5 +3,6 @@
|
|||||||
"files":[
|
"files":[
|
||||||
"!**/*.d.ts",
|
"!**/*.d.ts",
|
||||||
"!**/*.js"
|
"!**/*.js"
|
||||||
]
|
],
|
||||||
|
"file": "src/app/hero-form/hero-form.component.html"
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,6 @@
|
|||||||
"!**/*.js",
|
"!**/*.js",
|
||||||
"!**/*.[0-9].*"
|
"!**/*.[0-9].*"
|
||||||
],
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
"tags": ["Angular", "getting started", "tutorial"]
|
"tags": ["Angular", "getting started", "tutorial"]
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// #docplaster
|
// #docplaster
|
||||||
// #docregion http-client-module-import, http-client-module
|
|
||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { BrowserModule } from '@angular/platform-browser';
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
// #docregion http-client-module-import
|
||||||
import { HttpClientModule } from '@angular/common/http';
|
import { HttpClientModule } from '@angular/common/http';
|
||||||
// #enddocregion http-client-module-import
|
// #enddocregion http-client-module-import
|
||||||
import { ReactiveFormsModule } from '@angular/forms';
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
@ -12,7 +12,6 @@ import { TopBarComponent } from './top-bar/top-bar.component';
|
|||||||
import { ProductListComponent } from './product-list/product-list.component';
|
import { ProductListComponent } from './product-list/product-list.component';
|
||||||
import { ProductAlertsComponent } from './product-alerts/product-alerts.component';
|
import { ProductAlertsComponent } from './product-alerts/product-alerts.component';
|
||||||
import { ProductDetailsComponent } from './product-details/product-details.component';
|
import { ProductDetailsComponent } from './product-details/product-details.component';
|
||||||
// #enddocregion http-client-module
|
|
||||||
import { CartComponent } from './cart/cart.component';
|
import { CartComponent } from './cart/cart.component';
|
||||||
import { ShippingComponent } from './shipping/shipping.component';
|
import { ShippingComponent } from './shipping/shipping.component';
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// #docplaster
|
// #docplaster
|
||||||
// #docregion imports
|
// #docregion imports
|
||||||
import { Component } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { CartService } from '../cart.service';
|
import { CartService } from '../cart.service';
|
||||||
// #enddocregion imports
|
// #enddocregion imports
|
||||||
|
|
||||||
@ -10,12 +10,14 @@ import { CartService } from '../cart.service';
|
|||||||
styleUrls: ['./cart.component.css']
|
styleUrls: ['./cart.component.css']
|
||||||
})
|
})
|
||||||
// #docregion props-services, submit
|
// #docregion props-services, submit
|
||||||
export class CartComponent {
|
export class CartComponent implements OnInit {
|
||||||
items;
|
items;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private cartService: CartService
|
private cartService: CartService
|
||||||
) {
|
) { }
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
this.items = this.cartService.getItems();
|
this.items = this.cartService.getItems();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user