Compare commits
1750 Commits
backup-7.2
...
8.0.0-rc.4
Author | SHA1 | Date | |
---|---|---|---|
b6aa99d3a7 | |||
e10b213784 | |||
a67cf99b0c | |||
04d04fd147 | |||
17361d2b2c | |||
9b88920aa9 | |||
b12e76d1d3 | |||
af001a8cbd | |||
db64b014f8 | |||
7e34975bb0 | |||
0fa48e8c00 | |||
fde3f467e2 | |||
7b378a6920 | |||
3136d9ff2e | |||
325e6cf557 | |||
381d7c4e44 | |||
1b6f3c1ead | |||
c38349127c | |||
a4817729a2 | |||
61c343e3eb | |||
24e6c1e80d | |||
42fc5c9b33 | |||
33e7b285ca | |||
74afdc37da | |||
3c1ffba0ad | |||
14c0017db8 | |||
4878f4890b | |||
b7edef0cd3 | |||
39fa937ab9 | |||
2977829c67 | |||
dbe845e048 | |||
e562acc884 | |||
e295c6a0ae | |||
10b43355f8 | |||
d4e7587bd8 | |||
cabe03cf6d | |||
0cefa9e342 | |||
e073daa48e | |||
994d48a96e | |||
806f8118c8 | |||
dd299f9eb2 | |||
49ec3f312c | |||
71eba450e6 | |||
192f108b0f | |||
dd8651db73 | |||
5bbbe3f684 | |||
a71d8a837b | |||
e8ceae14e1 | |||
c3246e6f16 | |||
685753361e | |||
6b07711f96 | |||
12fb639b7d | |||
644925fd0c | |||
bcc72b0924 | |||
e1091b2ba8 | |||
08841e31d9 | |||
d1fcc2bc13 | |||
fac00442d2 | |||
b8cbcbcf49 | |||
1ed45bd783 | |||
82fd1920b1 | |||
f6d7271ec7 | |||
c1f3faf1df | |||
97202278f9 | |||
132f01c5ca | |||
6a987f1b9c | |||
548b003ed3 | |||
48dc41de01 | |||
817c2b49bc | |||
fed07c735c | |||
390cac6874 | |||
8eb0b8bd40 | |||
d7283c6085 | |||
3fe3a84a4b | |||
28e4187bd6 | |||
7cbc69c890 | |||
1dc134bc6b | |||
6a61d37f95 | |||
8d2e92bcfe | |||
5038f5c909 | |||
6eeca70043 | |||
9f68c35fa9 | |||
21418ea109 | |||
02d8b4ed3c | |||
6748392edc | |||
d9fd301157 | |||
71c5d80ce7 | |||
9798229fde | |||
4b2fcfd5dc | |||
b4d291aa7a | |||
b0ecafdc2f | |||
6816bb62d7 | |||
4b05b8cea0 | |||
a0728aedf7 | |||
ea96f6112a | |||
b706800ea8 | |||
c6f95b1d70 | |||
d896126604 | |||
a20da5ddcc | |||
18878600ba | |||
d7e10f3f7e | |||
4d044ea5b2 | |||
e2d1e0cd98 | |||
4e056580bb | |||
e4c2e6a904 | |||
a50989832d | |||
525307b6a3 | |||
a3ab76b216 | |||
f2265d4b46 | |||
d3ac709b99 | |||
908d43a5bb | |||
71cdb0a08e | |||
c7fbbdfa99 | |||
10e4ab7712 | |||
5114c23c21 | |||
c3e585d7eb | |||
0776daec88 | |||
615e1a58b2 | |||
606758357e | |||
ba2a3595c6 | |||
a50bfe5054 | |||
c8983bc367 | |||
8d6d2c6704 | |||
6711f22e62 | |||
8dd9192fe3 | |||
870e0dab48 | |||
f45684ff95 | |||
5b134caf2d | |||
fcacb2a4a2 | |||
933772ed69 | |||
a03a9236f2 | |||
6de4cbdd41 | |||
61365a94ed | |||
3a9d2473ca | |||
6200732e23 | |||
304a12f027 | |||
acaf1aa530 | |||
282167a37f | |||
eb85c8a742 | |||
2002db28ff | |||
6c1ae294dc | |||
b8298f1b2d | |||
3def652e18 | |||
909557d5f8 | |||
957f594d7c | |||
8f120aff33 | |||
4cfba58072 | |||
aa53d6cc6d | |||
be28a6ad8e | |||
39c0152b76 | |||
d7887ab4ab | |||
2236ea4359 | |||
0ddf2e7a5b | |||
2dc4e8801c | |||
9914998e76 | |||
00866186a7 | |||
9e85d7ff0b | |||
28e6aa723a | |||
bb47ad295a | |||
169d51beb8 | |||
8b0ebe17b3 | |||
a400429faa | |||
e720675f8b | |||
d316a18dc6 | |||
79141f4424 | |||
28fd5ab12b | |||
c61df39323 | |||
abcb2cf9a0 | |||
a9379e0ed2 | |||
6da19599de | |||
46f547499d | |||
2864108510 | |||
e95f460f39 | |||
75a23ab623 | |||
071ee64d91 | |||
efdbbe1aa6 | |||
c0c8d2349c | |||
4277600d5e | |||
f185ff3792 | |||
ec455e1cf1 | |||
825efa8721 | |||
3a9cf3f2ba | |||
152d99eef0 | |||
b635fe80cc | |||
b44b14368f | |||
d0672c252e | |||
3938563565 | |||
00ea3983e3 | |||
ae93ba1140 | |||
2e21997016 | |||
24c61cb63e | |||
d0ca7c792d | |||
6c88eb7477 | |||
0fa76219ac | |||
6af9b8fb92 | |||
0b5f480eca | |||
2905bf5548 | |||
e8d3246c6e | |||
7e3137e7ed | |||
c7f1b0a97f | |||
8ca208ff59 | |||
089bfdf95f | |||
d92fb25161 | |||
aaf8145c48 | |||
04d13429f0 | |||
230e32905c | |||
c4dd2d115b | |||
4ca95641ee | |||
8e8e89a119 | |||
f84c4b066a | |||
2f1a862b83 | |||
24c06091f2 | |||
364250e7a6 | |||
00ce9aab5b | |||
8e73f9b0aa | |||
f7960c024c | |||
9873356bd0 | |||
0f9230d018 | |||
19dfadb717 | |||
0bcb2320ba | |||
0cab43785b | |||
54289aec2d | |||
57c8f78c8f | |||
8c80b851c8 | |||
ceea0b418c | |||
f730c72318 | |||
63523f7964 | |||
a9242c4fc2 | |||
94aeeec1dc | |||
645e305733 | |||
f53d0fd2d0 | |||
96a828993f | |||
71498a407a | |||
8cba4e1f6b | |||
5a07aa484d | |||
3f6bf6dfd1 | |||
c3c0df9d56 | |||
cb34514d05 | |||
017bf0b794 | |||
f348deae92 | |||
10217bb3bc | |||
a181e8e7d8 | |||
6ae0084255 | |||
2271f200d7 | |||
4e13700ad2 | |||
d9ce8a4ab5 | |||
42262e4e8c | |||
bea85ffe9c | |||
5268ae61a0 | |||
98f86de8da | |||
f4c536ae36 | |||
182e2c7449 | |||
cd1277cfb7 | |||
9277afce61 | |||
410151b07f | |||
073d258deb | |||
9f5288dad3 | |||
e3d5d41140 | |||
0df719a461 | |||
4229b41057 | |||
d7f7826363 | |||
9b93bd625f | |||
1f8325d6c4 | |||
5650e3847b | |||
11eef85133 | |||
f957c7c1cd | |||
e575892774 | |||
f9bb53a761 | |||
c1d5fbd0ad | |||
ca591641c7 | |||
2ba799ddc7 | |||
22294dfad1 | |||
d1b7d36646 | |||
0629ebd9e9 | |||
45c2429d30 | |||
78146c1890 | |||
e1f51eaa55 | |||
e5905bb035 | |||
b9251fd707 | |||
c0ec1d63ff | |||
4bde40f7c2 | |||
4271d35dc4 | |||
506f478f08 | |||
8a3a556c0c | |||
ce2713f5b1 | |||
7edfcf948f | |||
83291f01b0 | |||
725148a44d | |||
696e520842 | |||
5fee9daa5b | |||
1a56cd5c0b | |||
60e9d2da4f | |||
ca9b3eed9e | |||
a48d288ff8 | |||
d9c39dcab0 | |||
ca2462cff7 | |||
ab6036272c | |||
1794a8e42a | |||
86a3f90954 | |||
2bfb6a02e2 | |||
bd3164f88a | |||
b3edf494a4 | |||
5f1b6372c7 | |||
5d824c4153 | |||
ca755a6b72 | |||
2deac0a412 | |||
9147092a15 | |||
8027b3e19b | |||
3a836c362d | |||
ee603a3b01 | |||
b0c1282fbe | |||
446e3573e3 | |||
0d6c9d36a1 | |||
205a45e9a8 | |||
7a7781e925 | |||
b2962db4cb | |||
bd2ce9cd56 | |||
6a8cca7975 | |||
6a1441f727 | |||
d1d0f4a1ad | |||
70177e544b | |||
4f9c935473 | |||
ea70d41ac2 | |||
e2e637d70a | |||
911e0b8820 | |||
6c018001d3 | |||
0aa0f11a2b | |||
f6ee1c2219 | |||
d6b474f2f8 | |||
ac3dc3cfc6 | |||
bc6c671e6b | |||
b0578061ce | |||
54058ba3a7 | |||
91c7b451d5 | |||
387fbb8106 | |||
5b32f55a3a | |||
b507d076be | |||
cc2e4b639b | |||
6227d0bb3b | |||
ddadb8e22c | |||
def73a6728 | |||
f98093a30d | |||
77aff0b7bb | |||
712d60e467 | |||
3ea8d651cc | |||
faf8fdde14 | |||
4191344cb4 | |||
a80637e9a1 | |||
b71cd7b4ee | |||
147a15a419 | |||
1eb7e9b804 | |||
17c4ed9d0f | |||
675f3909d7 | |||
3e4698564a | |||
8c37cdc38a | |||
ad642e31cd | |||
09975120fd | |||
39bfd1a11f | |||
4e8c2c3422 | |||
ef85336719 | |||
138ca5a246 | |||
db62ccf9eb | |||
b0eefc872e | |||
4f0110e75a | |||
f24fd56ed1 | |||
411c505dae | |||
1102b02406 | |||
00bf636afa | |||
82c77ce232 | |||
632847d34d | |||
e682b4453c | |||
84be7c52dc | |||
98cf3e8fcd | |||
cb9ee3411f | |||
d144a3bd91 | |||
66b87cef33 | |||
c65ac7fbad | |||
ed12d7e949 | |||
cf40105fc0 | |||
38a3a5a1f1 | |||
902a53a4f6 | |||
e38115536f | |||
6d35c5094a | |||
4a2fb86b1e | |||
8bbf481d60 | |||
c5bba8d9f2 | |||
e02684e609 | |||
ec56354306 | |||
5c13feebfd | |||
30b04424a3 | |||
f8cdda63d4 | |||
b6f48dbe19 | |||
609024f93d | |||
9c056b974a | |||
c0ec8425c2 | |||
b02cb3dc01 | |||
2e66ddfdce | |||
7fbe138b1f | |||
0c47dc0466 | |||
2bd9214435 | |||
433b7b02a4 | |||
a4f3f3f81d | |||
6233cd55f7 | |||
c3aea737ff | |||
eaa49bdc04 | |||
96b76dc3f1 | |||
afd2417ecd | |||
699ecac2c2 | |||
c7ff728723 | |||
d96f62fdc4 | |||
b9fead7f83 | |||
648adb1894 | |||
9810c6c0f9 | |||
8e83b3bec1 | |||
3246399bff | |||
0f4f315f8e | |||
0a530e6b47 | |||
dc5577dcb1 | |||
a6809e0e7d | |||
ddb935fac7 | |||
afd4a4ed4d | |||
60afe88bcc | |||
2d372f48db | |||
45c6360e5a | |||
6b39c9cf32 | |||
c5799491e7 | |||
b14537a004 | |||
630aaa6bfb | |||
7c8f4e3202 | |||
15eb1e0ce1 | |||
780081def0 | |||
5a724b34bd | |||
03d914a6c2 | |||
98f8b0f328 | |||
5a1d21ebb4 | |||
cbd5d28f71 | |||
9f54d76ef5 | |||
e5201f92fc | |||
3487055d10 | |||
1c07061246 | |||
d11b0c0c41 | |||
1293da1cf7 | |||
7c1f73ac7b | |||
0e201ea9d8 | |||
53be333439 | |||
19081dc9a3 | |||
9e4c0bd815 | |||
deca6a60dd | |||
63013f1aeb | |||
8bfaaf164a | |||
1f469cd7bb | |||
7041e61562 | |||
7316212c1e | |||
aaa16f286d | |||
3e569767e3 | |||
abf69dec5b | |||
701da0099b | |||
f9497bf28b | |||
d7e5535d00 | |||
8d3d75e454 | |||
39345b6fae | |||
06859f1335 | |||
717aa7c6e4 | |||
9cd90532c1 | |||
ff2a55f14f | |||
0abd5f5f03 | |||
cd6581e4f0 | |||
76110d71d3 | |||
a4fb0486c1 | |||
8a13f6b278 | |||
ee7c5ed620 | |||
2ff3d2d421 | |||
33016b8929 | |||
b2c03b8cd4 | |||
fd4c939394 | |||
6759aa68dc | |||
ab4be7bf80 | |||
2b6e107b1e | |||
6a55ba28b2 | |||
33524d9d9c | |||
b99a070f88 | |||
799a5a4915 | |||
4b2407a4db | |||
ed19464be0 | |||
c67f6a7e60 | |||
d4c4a89431 | |||
12c9bd257d | |||
e8768acacc | |||
303eae918d | |||
50f7ab2a06 | |||
22b89ea58a | |||
e8921365b7 | |||
009acd2a6c | |||
333bfa0ffb | |||
eb0e29b269 | |||
71daa11357 | |||
a81fd5f750 | |||
57f7996b6d | |||
27ba4ac982 | |||
6c76dfc568 | |||
78ba503fb9 | |||
1df9908579 | |||
c456b73302 | |||
632669f069 | |||
33963ca0d3 | |||
7b27009e20 | |||
d46a7c8468 | |||
71ec99856a | |||
e958447100 | |||
931d356a10 | |||
e4c1c88cbc | |||
1e5a818719 | |||
e57ed61448 | |||
aaa8a3a957 | |||
80161d5033 | |||
6a66af7a27 | |||
9745f55a65 | |||
c9810064cb | |||
1727fe24fb | |||
4eb6b02f08 | |||
96b800c8bc | |||
dd69e4e780 | |||
401b8eedd5 | |||
8badf9808a | |||
f8c7c3c09c | |||
b17d1a9aa3 | |||
60f6d9e733 | |||
416b0d29b9 | |||
2b836c81a2 | |||
ac3ce0d793 | |||
6c33058856 | |||
50fb629012 | |||
309ffe7e16 | |||
fea2a0f2ac | |||
e0dcd11a49 | |||
3514543e4b | |||
d9162a872d | |||
06056b4a6d | |||
3c11646dd3 | |||
a2f8f5595f | |||
a28b3e3359 | |||
495a4c1754 | |||
17f7bdbd60 | |||
531fa00992 | |||
c412374854 | |||
9724247ad8 | |||
568140fb03 | |||
7951c4feb2 | |||
0f1da49b86 | |||
a5c9fa3c8f | |||
6feef368f6 | |||
c34c223122 | |||
26a8c5961e | |||
41225289d7 | |||
3612ddb433 | |||
09fab58109 | |||
b3102b9de1 | |||
cfe6581fc8 | |||
bef5043a5a | |||
b5295ad277 | |||
769d960db1 | |||
21be0fb926 | |||
9bcc1e8dce | |||
a06f0340d2 | |||
66b72bfa58 | |||
00075647be | |||
ce789b75a4 | |||
7baf45fe88 | |||
f3e0cc89ed | |||
cfa6e8e008 | |||
02debebcff | |||
ed8d60d060 | |||
9ea0d64d8b | |||
dfcf759e33 | |||
21835af70c | |||
2790352d04 | |||
bb6a3632f6 | |||
2d859a8c3a | |||
70fffba054 | |||
e185d3a4ad | |||
6f3052b799 | |||
c18fa7b5bd | |||
693b350567 | |||
0b27c09b51 | |||
861d6f1523 | |||
dc10355d61 | |||
6cd3743b44 | |||
a24f4b51b3 | |||
84baa0bb08 | |||
e721c08c7f | |||
37a154e4e6 | |||
415de9a291 | |||
b3dda0ebc1 | |||
41737bb4d3 | |||
afe3e72601 | |||
5e3bbf79a6 | |||
d2b64cc008 | |||
9eb8274991 | |||
17b3f11e07 | |||
10734ac607 | |||
68a9fe817c | |||
64e5628897 | |||
849b327986 | |||
a827bc2e3a | |||
083fb99033 | |||
55ea8da6eb | |||
7ea0d1bd3a | |||
bdcbd9ed4b | |||
b48d6e1b13 | |||
68f9d705f8 | |||
229f035969 | |||
c9f7cdaafd | |||
7b55ba58b9 | |||
cd449021c1 | |||
4bb0259bc0 | |||
66239b9d09 | |||
a770aa231d | |||
cf4718c366 | |||
07aeafa75c | |||
7a67f8935d | |||
bc88816c10 | |||
0d0445063a | |||
ddfdf3cd26 | |||
d6d081e120 | |||
38c778e371 | |||
3249020466 | |||
d6e27a41ed | |||
1a4d4a0e13 | |||
3121409957 | |||
fd122b0739 | |||
9a364a82fb | |||
a530ed11e8 | |||
2d7435daae | |||
b460b26308 | |||
ea90435a6b | |||
ea0e832e5f | |||
7c4afb0da7 | |||
603df13b14 | |||
f9b7b6d2f1 | |||
dafbbf8b64 | |||
d59f02d902 | |||
20bf4ca382 | |||
aae6f7b40b | |||
5f50562be5 | |||
efcd6af17d | |||
56c345baec | |||
19ff32036e | |||
37cc514f0f | |||
067657c1e9 | |||
8714daf276 | |||
d5e3f2c64b | |||
bc99b774ba | |||
a3ec058f6b | |||
4605df83e1 | |||
c0ad9e104d | |||
a9020a028f | |||
e769f9cfe4 | |||
4a665ca50b | |||
e9fab63385 | |||
5454227057 | |||
0244a2433e | |||
86aba1e8f3 | |||
ae4a86e3b5 | |||
ce4da3f8e5 | |||
e79f57a6b8 | |||
c439e14d39 | |||
a8d84660e5 | |||
4525619a73 | |||
4742385e95 | |||
d87b035ebb | |||
b759d63389 | |||
fe759ee0cf | |||
105cfaf5e4 | |||
2ab194c999 | |||
7b5d326d77 | |||
8e70ca39cc | |||
9d090cb3db | |||
3d5b98631a | |||
e8df000e97 | |||
604f37b679 | |||
4d912b6b12 | |||
bf2db12fc9 | |||
dfb220ea6b | |||
04b5ea089c | |||
7561698675 | |||
8ef690c342 | |||
3facdebd07 | |||
1db8bf312e | |||
f7738ad8d6 | |||
fc8048ddaf | |||
b2aadffbbc | |||
8ed13a37f0 | |||
1877e6c3f8 | |||
1a9ab2727e | |||
bf0704d685 | |||
1fb670e06c | |||
f50928f5b7 | |||
fe448e8222 | |||
7c297e05f3 | |||
487d4157ac | |||
90df7de54d | |||
8ef46f38f4 | |||
7b70760c8d | |||
6ab8c0b371 | |||
80379697e2 | |||
a5c747f46d | |||
410ccacf38 | |||
e76cf8c775 | |||
9be4ab51ea | |||
4990b935b4 | |||
08231f0bfa | |||
a3e105487d | |||
2064508876 | |||
0c59342cd0 | |||
018477e2c4 | |||
1f0eadfab6 | |||
f2dc32e5c7 | |||
019e65abfb | |||
0ffa2f2e73 | |||
a5a35ff54a | |||
7b20cec986 | |||
eb00a37eb8 | |||
75748d6044 | |||
9a7f5601fa | |||
955e4e704e | |||
73da2792c9 | |||
1625d86178 | |||
c4c34fe60e | |||
29fae6de08 | |||
ccb70e1c64 | |||
940fbf796c | |||
ec01594e97 | |||
ac0553e802 | |||
fe76494759 | |||
9d4b7d7d41 | |||
fa8669ac00 | |||
3f32c0e674 | |||
b7c17ff207 | |||
c5daaa91cf | |||
360730ce59 | |||
fca1724ebf | |||
3c53713616 | |||
c09d0ed627 | |||
af52536419 | |||
1c251e59d7 | |||
ec8b74da56 | |||
6085f335e8 | |||
7315a68ac6 | |||
e6117a3a49 | |||
a8b432d55d | |||
37b9f06f1e | |||
9d1423df7e | |||
df354d1b34 | |||
4227126305 | |||
e20a29a153 | |||
76119b84dc | |||
defc30c7ab | |||
869e1cdcec | |||
ed4675e5a1 | |||
4b39bdf7e5 | |||
146256a4e0 | |||
1d88c2bb81 | |||
99aa9674b2 | |||
6b6fdffc12 | |||
a29ce57732 | |||
4b9eb6185f | |||
ca20f571b8 | |||
a5b8420234 | |||
49dccf4bfc | |||
3a6ba00286 | |||
c37ec8b255 | |||
fc305305e1 | |||
b012ab210b | |||
b3ffdf92c5 | |||
7b0e9eddd1 | |||
a746b5b1ea | |||
b6f6b1178f | |||
37c5a26421 | |||
142ac41cac | |||
d4728c40d9 | |||
a68b1a1894 | |||
014841dfef | |||
63d18064fe | |||
fd5cd100a3 | |||
aa6db0d191 | |||
b14df413eb | |||
22c71b69ce | |||
d95e059480 | |||
ad9415af1d | |||
4f2773eaef | |||
f4f20daee3 | |||
36a1550e00 | |||
5ad2097be8 | |||
809452b921 | |||
f535f31d78 | |||
e3a401d20c | |||
423ac01dcf | |||
c7e4931f32 | |||
b73e02005b | |||
9a1959269f | |||
f71dae8f63 | |||
941c99ad7f | |||
3ef2002bd8 | |||
479ae51d1f | |||
eccbc785b3 | |||
29f57e315e | |||
c866c11bf8 | |||
15e84950ec | |||
7060d9038b | |||
14ce8a9c31 | |||
f856a6597b | |||
887faffa25 | |||
0bd4261f23 | |||
f96efd1c98 | |||
22ddbf4b02 | |||
268c3fe816 | |||
dc6192c8e5 | |||
7102ea80a9 | |||
6b98b534c8 | |||
c5d9035bab | |||
d5a8be76f2 | |||
9c1ced102e | |||
54286b8c27 | |||
84406e4d6d | |||
c29d2a4f16 | |||
84f3dfbca4 | |||
3bee0f684d | |||
881807dc36 | |||
20a9dbef8e | |||
25166d4f41 | |||
6215799055 | |||
ff9550542c | |||
69265b7b5d | |||
b446095c4d | |||
1efad3772e | |||
e8bb8f4912 | |||
4486dabf01 | |||
01577b0bed | |||
7c57293bee | |||
3063547975 | |||
72ecc45363 | |||
7d174969c2 | |||
79e2ca0c0e | |||
586234bb01 | |||
5fded9fcc8 | |||
866d500324 | |||
04cf4ef0c7 | |||
aa57bdbf90 | |||
78adcfe0ee | |||
48214e2a05 | |||
95989a12dd | |||
c5f1d08a43 | |||
3403027698 | |||
c875851bb4 | |||
d2f015f57e | |||
05a9090ded | |||
bfc40da6aa | |||
43ce6ec84a | |||
842d615928 | |||
a352b73962 | |||
fa82d2d6f1 | |||
83ba587c18 | |||
dcafddefb8 | |||
c0757d1d44 | |||
a06824aef6 | |||
ba602dbaec | |||
b1df9a30f4 | |||
3e5c1bcb9f | |||
b50283ed67 | |||
a23a0bc3a4 | |||
7ac58bec8a | |||
ff8e4dddb2 | |||
f01d1c4c8d | |||
b5629d98d8 | |||
ac76e5d8dd | |||
0bc26fc4e8 | |||
c532646f5b | |||
9fe522f3e2 | |||
4a1640bdd5 | |||
8cd72441f1 | |||
ea09430039 | |||
cd83a43462 | |||
1d4dde2adc | |||
58198075f2 | |||
2e43e15e12 | |||
5874247494 | |||
d207c4894a | |||
5fdf24e843 | |||
03d2e5cb1d | |||
2b974d4012 | |||
3a6e443e19 | |||
cb20b3b40a | |||
f7c867ebc2 | |||
76979e12c9 | |||
772b24ccc3 | |||
91a161aa13 | |||
efa10e33a9 | |||
daf8251998 | |||
a6ae759b46 | |||
827e89cfc4 | |||
40833ba54b | |||
34bdebcdd2 | |||
034de06ab1 | |||
2dd44d712d | |||
f16fca41d6 | |||
b8d87490f5 | |||
d127d05dc3 | |||
7b944c46d3 | |||
c4c3c1231b | |||
41de05e1ae | |||
dad5a258b8 | |||
ce68b4d839 | |||
dc335194ab | |||
f380263393 | |||
5a4c402663 | |||
262ba67525 | |||
dc9f0af080 | |||
8f8f9a6e61 | |||
25a2fef303 | |||
dbd9ecfd4c | |||
f01247f0a4 | |||
846c431eb7 | |||
edb6c2d814 | |||
3cb497c6ac | |||
bd65f58784 | |||
1930e8a072 | |||
7a11242388 | |||
65de0d6d0e | |||
ef1b9e6d71 | |||
65d3ddabf3 | |||
0b8aad2ca0 | |||
0071048cf9 | |||
9f7a9c607e | |||
22880eae16 | |||
3d48cde3b1 | |||
61495a138d | |||
319ed5168a | |||
f79cd5963e | |||
350802b207 | |||
10ba91b1d3 | |||
f75acbd99b | |||
395fb186a4 | |||
f0989b786b | |||
c64b13e593 | |||
7bae49b419 | |||
929fe029c2 | |||
ba6aa93aa3 | |||
f0f81f482e | |||
3144bf4d73 | |||
bb050a8ae0 | |||
75357ecb32 | |||
c1392ce618 | |||
15c065f9a0 | |||
fafabc0b92 | |||
ad4a9bf03f | |||
43181ea568 | |||
9dac04ff50 | |||
7f3e3a8c45 | |||
6ccf743627 | |||
230a941c3f | |||
7c20bf8845 | |||
82820b0b2c | |||
1778bd3470 | |||
33f71e8ce3 | |||
cbfc1f238e | |||
c7fe3a92de | |||
9ca356559b | |||
7c1b9ff5ec | |||
599e2e22bc | |||
2df2168c0a | |||
8043db570f | |||
de036d29e3 | |||
94223a09e5 | |||
65d839da03 | |||
32ae84da28 | |||
93a7836f7a | |||
9defc00b14 | |||
1145bdb478 | |||
f4d652568d | |||
3cc9ba24c6 | |||
3f2b51b837 | |||
d8704a3069 | |||
64e6aaa4f1 | |||
e1aaa7ec48 | |||
0ea216b993 | |||
ebffde7143 | |||
9ae14db343 | |||
95d9aa22ef | |||
df627e65df | |||
72d043f669 | |||
be121bba85 | |||
58436fd81a | |||
3336de0970 | |||
d0b6622b9a | |||
13b96ac91d | |||
623fd3fb5e | |||
bcdd4b5729 | |||
05c25ccca7 | |||
cfb2d176f8 | |||
d0e81eb593 | |||
09d894c283 | |||
81c3104f76 | |||
68da4658ff | |||
b9eb662c4a | |||
04ae1251c7 | |||
1832e0f293 | |||
9cecb0b5d2 | |||
bca0b44ff2 | |||
e5e4e63e71 | |||
96b597cfd0 | |||
669b4410f2 | |||
1eccf64b15 | |||
2d804198d5 | |||
fd4e1d69ee | |||
02ee8c7bc5 | |||
67ad8a2632 | |||
25aae64274 | |||
eb39633823 | |||
71d0eeb966 | |||
295a143ae0 | |||
ad6475ffac | |||
3c1a1620e3 | |||
a4638d5a81 | |||
ae16378ee7 | |||
73b9cd75b9 | |||
71e64e93e6 | |||
d8ae8993d8 | |||
19afb791b4 | |||
5e68e35112 | |||
745c9c5ca7 | |||
a834c745d7 | |||
4131715df5 | |||
692ddfcbb5 | |||
e0f3fd72dd | |||
00a8b07896 | |||
80c7aff5cc | |||
6788d86709 | |||
ababc5b4a4 | |||
af8d58cb51 | |||
9e82cebe5b | |||
90b304612e | |||
caefc5d4c4 | |||
1923c2f99c | |||
a17fd43fd5 | |||
0cc5804169 | |||
55b144bdf5 | |||
980bb52d36 | |||
6b511a33f6 | |||
3c7ce823a3 | |||
fdca0013d5 | |||
1e6ed52cba | |||
04a1923af7 | |||
911599d9a3 | |||
c1094cf46f | |||
2e3cc45c74 | |||
6fcf286344 | |||
fcc8c5690f | |||
8accc98d28 | |||
aa8d0809d3 | |||
80a5934af6 | |||
7cbc36fdac | |||
63e5d2787b | |||
83fd66d1d0 | |||
627cecdfe2 | |||
b41da03f00 | |||
65c2deacbb | |||
841a1d32e1 | |||
362c41de89 | |||
cf848c6ea0 | |||
47574fef11 | |||
b0afc4c638 | |||
1df3aefb81 | |||
8cec4b3ff7 | |||
9e5d1357fe | |||
3bb3d6d3e6 | |||
3d39100c85 | |||
3842dd6a6d | |||
36df9056af | |||
2c6a6f18c2 | |||
423b39e216 | |||
a529f53031 | |||
99d8582882 | |||
d2742cf473 | |||
f8b67712bc | |||
3477610f6d | |||
09af7ea4f5 | |||
dba2a406fd | |||
fb194d5146 | |||
0a4811c4ad | |||
13685131bc | |||
1a326d5690 | |||
28bdeeef3e | |||
6fa4235543 | |||
6d057cc05d | |||
2f27a8051b | |||
77eee42963 | |||
553f80ff46 | |||
5cafd44654 | |||
cb0a8b566f | |||
cf6d63ca63 | |||
1d20088291 | |||
7e895b9179 | |||
39d0311e4e | |||
644e7a28d8 | |||
f8b9e61469 | |||
2ea030c2c5 | |||
49fb8c3cb0 | |||
0c7581da89 | |||
06ec95f2ef | |||
91b7152852 | |||
fc8f4f8029 | |||
2afc40608d | |||
ac58d01a8e | |||
d68a98f0cd | |||
08de52b9f0 | |||
cffd86260a | |||
497619f25d | |||
c0dac184cd | |||
e6a00be014 | |||
4f46bfb779 | |||
a5ea55a636 | |||
0d6fdec4bd | |||
54ca24b47d | |||
8c3f1717a8 | |||
8d15dd8b70 | |||
2424184d42 | |||
eeb560ac88 | |||
1b0580a9ec | |||
673ac2945c | |||
81df5dcfc0 | |||
6050cd0c1b | |||
0cb02d906e | |||
0957d8cb3f | |||
1b82e11e69 | |||
cdabda1fc0 | |||
188f20fb16 | |||
3eec314ba9 | |||
e6c51b3e06 | |||
f358188ec1 | |||
5db3a6b198 | |||
94b8aaeba8 | |||
fe8301c462 | |||
e5861e1c79 | |||
2bf0d1a56f | |||
2ca77da4ca | |||
a9afe629c7 | |||
1e64f37257 | |||
99e3a04ea2 | |||
570f735a2a | |||
872a3656fe | |||
9ec8aa5eb7 | |||
5f2ae784da | |||
0a95f8af9f | |||
531aa5f8db | |||
bfee33edb9 | |||
1941d7c743 | |||
21b5940abd | |||
2852beaded | |||
206a21704d | |||
46e6363686 | |||
457e07ccb1 | |||
05a14f8a8b | |||
19f13b1ad4 | |||
d29f781685 | |||
0770978dfb | |||
863dbeeb7c | |||
425e0ee416 | |||
81329c85b3 | |||
fcd1f61476 | |||
e9bedc63bb | |||
7115e7c427 | |||
aadc332be2 | |||
c916b360bf | |||
fed8c1d160 | |||
fb9a4a668c | |||
f7591f1302 | |||
44de68ce40 | |||
2c00cb8f0f | |||
1ff3699d99 | |||
0e4705aec3 | |||
6e4ef91ceb | |||
ceada7785e | |||
d91ea2c499 | |||
faf0b255d0 | |||
90670252de | |||
94f042beba | |||
9d109929be | |||
e0d2ca261b | |||
4b7264f60f | |||
6f9dd1bf28 | |||
c3fadadaa9 | |||
b65fe62be1 | |||
f2a734bd06 | |||
00e24b3000 | |||
1950e2d9ba | |||
7660d0d74a | |||
264ef72800 | |||
f889317f93 | |||
df3cea41de | |||
36284713b2 | |||
ce83231ce9 | |||
2caa419990 | |||
71fa1f2a45 | |||
50732e1564 | |||
3de06dd794 | |||
9ce0c23c77 | |||
08f55b35a5 | |||
2b9811dad4 | |||
df74da02c6 | |||
8d90142a0f | |||
851cf16134 | |||
353362f5a4 | |||
0e6f799aec | |||
6709db9677 | |||
43081a01d8 | |||
e3032a0d17 | |||
01bb3c5820 | |||
43467c95ab | |||
69ecb96569 | |||
e991d825f5 | |||
ed032e08c1 | |||
ae8b7b1fdb | |||
62a13e795a | |||
22d3226491 | |||
5ebc0da640 | |||
eed59b713a | |||
b2a6bf2a80 | |||
0709f8411d | |||
d42f32cc61 | |||
2ea4f690e4 | |||
d4add5428b | |||
8f15cdbc7c | |||
baf103c98f | |||
3f73dfa151 | |||
7c5c1fae62 | |||
89eac702b5 | |||
5a2c3ff8b5 | |||
ed0cf7e2cb | |||
4ceb655c11 | |||
5a6f0d0af9 | |||
979582a2ed | |||
63b744bb6a | |||
fe4d811086 | |||
4142db0828 | |||
7a6237bc50 | |||
ebaceb37e0 | |||
62c0deac42 | |||
57034aa13d | |||
cec1fa04c2 | |||
0d1e065a1c | |||
8d11627e6c | |||
4a92fa9471 | |||
744b0205e2 | |||
40da1be1e1 | |||
c10d86cbc0 | |||
b91a25bfb2 | |||
e11ac7f24b | |||
4aa189da67 | |||
dde7e2f253 | |||
8edd9cd6c0 | |||
76a6eacb4e | |||
9ef8d2b823 | |||
07fb4b5677 | |||
728fe69625 | |||
7219639ff3 | |||
f2621dbb37 | |||
3c7fdc6a9e | |||
5cdbdc9ee0 | |||
16a78f97f5 | |||
ee74835619 | |||
5a257d02a6 | |||
e4fb93c28a | |||
b7738ef9e4 | |||
463a7894ae | |||
fc88a79b32 | |||
a98d66078d | |||
1e5012b2cc | |||
3d522716c4 | |||
52d3795336 | |||
4dfcbc6afa | |||
71b9d5539b | |||
7a22019b3d | |||
f6805de8eb | |||
72c36956de | |||
895a8d6f3b | |||
814ee260f5 | |||
bfd48d156d | |||
5c4d95541e | |||
8930f60a4b | |||
36902e2f0e | |||
ec6e7303dd | |||
1b33142595 | |||
1b6d8a78b0 | |||
6656328538 | |||
9efb39c8a2 | |||
f640941e1d | |||
c0b383590e | |||
35e45dc894 | |||
b35ef184a7 | |||
b1e099b657 | |||
a9c881e243 | |||
038303eed1 | |||
a227c528ca | |||
0eef958735 | |||
51a592cdfc | |||
fdc6e159b4 | |||
7d9aa67d8c | |||
495a9dd445 | |||
778d5739e2 | |||
66ce3b2f2f | |||
76cedb8bf3 | |||
ad499628cb | |||
24f5428187 | |||
a228d65412 | |||
dc8e461303 | |||
eeadb37b19 | |||
41e68f7a7a | |||
dabcb3e17b | |||
bcf17bc91c | |||
d45d3a3ef9 | |||
f99a668b04 | |||
70e426ba1b | |||
ec414b432e | |||
9af18c2fd0 | |||
2bb518c694 | |||
b87bf39eb4 | |||
227f7e44d6 | |||
22f76df8f2 | |||
e18a52e24a | |||
f38deb0f07 | |||
d940b5541f | |||
8e75a40735 | |||
59cc724e3b | |||
8ced999e47 | |||
4c8d17ffd4 | |||
3e6a1f0bc4 | |||
40d64b6b58 | |||
c84739dc55 | |||
bb94434d85 | |||
ebac5dba38 | |||
29513296fb | |||
98e5af1480 | |||
66335c36e6 | |||
6e16338302 | |||
9a3739142f | |||
e98d508df2 | |||
5639891e90 | |||
9d81bd39ca | |||
9d3dae42e9 | |||
1699c88655 | |||
074400da60 | |||
7d954dffd0 | |||
cac9199d7c | |||
a789a3f532 | |||
5dbc7d9a63 | |||
fd8dbd5e40 | |||
7033f39c61 | |||
3deda898d0 | |||
f8c70011b1 | |||
adfc55e2c3 | |||
a1f36e5f14 | |||
3b48d13af8 | |||
f7c551e16b | |||
e4f67dfe66 | |||
d83307adab | |||
873750609f | |||
664ea50b46 | |||
99886bd159 | |||
3d5a919ac5 | |||
ef6728207b | |||
2da82db3bc | |||
7421534873 | |||
7496630a94 | |||
6e949f9e98 | |||
6ad1c47df8 | |||
76144f156c | |||
fdc2b0bf77 | |||
54532dfdf1 | |||
2a02f4beb2 | |||
bf97d3b73e | |||
46aec4a58f | |||
c522e03fe9 | |||
b2811e50c5 | |||
e2c98fbe11 | |||
02975e9166 | |||
3414316fc8 | |||
67a41d8bff | |||
e50c5293fc | |||
056d35c97c | |||
465abab213 | |||
c1fb9c265c | |||
d4ecffe475 | |||
736cfa4e09 | |||
cbd626413c | |||
317cc922ac | |||
f9b103825a | |||
32c61f434c | |||
22a43cff4d | |||
9098225ff0 | |||
9f9024b7a1 | |||
03c8528fcb | |||
5430d2bc66 | |||
a95e81978b | |||
5552661fd7 | |||
030350f53e | |||
583061d043 | |||
0a564c3158 | |||
b9854e582f | |||
cf8770f3cc | |||
d8f2318811 | |||
1fd673504c | |||
8f1198ffcd | |||
fe9b3ea251 | |||
50df897fdc | |||
33e49c2894 | |||
ea1b5c100f | |||
18a9afc738 | |||
589dd479e2 | |||
661a98aeda | |||
988243437a | |||
3b9553bb17 | |||
522e4ea898 | |||
b6819fe9bb | |||
6c3b57a968 | |||
37f8263430 | |||
a84a9ba705 | |||
d73734dcb7 | |||
e0fbe8611e | |||
94e305f48e | |||
1964be0b17 | |||
41b2499f17 | |||
da85cee07c | |||
2fc5f002e0 | |||
19a2b783cf | |||
9e5016c845 | |||
070fca1591 | |||
d336bff200 | |||
f99082fd3c | |||
75074d009f | |||
197676a6dd | |||
1fb6731285 | |||
1df8be5573 | |||
6324ad45e7 | |||
7439b46c5a | |||
9a965c9145 | |||
351ef2a6de | |||
0b6eaca3c2 | |||
058aafcc0c | |||
7980f1d2ea | |||
6bd20e8b2f | |||
366a6bf192 | |||
5b08a880f7 | |||
7db035842d | |||
9dabeea807 | |||
73dcd72afb | |||
7bdf3fe41c | |||
38343a2388 | |||
45bf911df8 | |||
ab2bf83398 | |||
2b9cc8503d | |||
a58fd210e9 | |||
6940992932 | |||
c1c87462fd | |||
73616ab237 | |||
a0cdefb5fb | |||
f8ad4d1e99 | |||
5a582a8afd | |||
e172e97e13 | |||
0d6913f037 | |||
896cf35afb | |||
1f7d3b9a57 | |||
8a08ff1571 | |||
50cf2ac6d8 | |||
80967ce82c | |||
1a85de302d | |||
808898d015 | |||
f59f18c13e | |||
a570fdf0f0 | |||
e7d5c12ea4 | |||
1e5e62ef56 | |||
bac71ef419 | |||
da1d19b40f | |||
9a81f0d9a8 | |||
c61ea1d5bd | |||
47665c9937 | |||
3b7a571cc5 | |||
f983e99fb2 | |||
4f009e7a03 | |||
29bff0f02e | |||
3a31a2795e | |||
ce3a746644 | |||
bc02e31185 | |||
6072ca87e1 | |||
9460218f36 | |||
850b86749c | |||
a24120011e | |||
d49d1e7d73 | |||
2e5752eb06 | |||
da8ee29e72 | |||
693045165c | |||
e62eeed7d4 | |||
06e5bf1661 | |||
60fecc1284 | |||
b6510a320b | |||
fa53150692 | |||
b5c2ef2877 | |||
ddd8cd0573 | |||
cfb41452ce | |||
f1fb62d1e5 | |||
d12db4e114 | |||
68bdbf0520 | |||
857fcfe048 | |||
60fb27c4ab | |||
4c0104c846 | |||
72f2428cd8 | |||
d577b8df75 | |||
cd0451305a | |||
e8495b460f | |||
2c9f0139a3 | |||
fc881390d0 | |||
1ec01d6758 | |||
4bb5f638bc | |||
0897ebac9e | |||
657cf733a2 | |||
d6aca79410 | |||
e4c899e4ba | |||
5e6e96d844 | |||
9c2f6d72d6 | |||
638375b7ca | |||
c5b67b95b7 | |||
78bc21c63a | |||
48a03fcc80 | |||
6fff74e576 | |||
978ffa9d32 | |||
6a9a48b0ac | |||
da2880d7c4 | |||
fca185e191 | |||
e082fc24b2 | |||
133fe5e561 | |||
2afbcafab7 | |||
605f450251 | |||
9260b5e0b4 | |||
9a128a8068 | |||
cd51775390 | |||
fe4d3a1619 | |||
b73d6781da | |||
0c6fa1df52 | |||
ce51dfb499 | |||
8ebdb437dc | |||
b0caf02d4f | |||
091a8a6fd5 | |||
61bc61fc59 | |||
df292c2ce0 | |||
51e716b6f2 | |||
94893accdb | |||
6c6d43086f | |||
8c3f98fdbb | |||
89a39bb22a | |||
12f509c218 | |||
76104f395f | |||
18ccfc6d73 | |||
3ea9f0974a | |||
a100472b5d | |||
a6f7fe394a | |||
e31afb7118 | |||
d505468fb7 | |||
f854eb7dec | |||
b0f3c20a4c | |||
26a8c095d0 | |||
bccf8da35f | |||
acb2caced0 | |||
96f4969a2b | |||
aebec4b156 | |||
9277142d54 | |||
b78351cc7e | |||
885f1af509 | |||
b05baa59e0 | |||
ad6569c744 | |||
feebe03523 | |||
e8a57f0ee6 | |||
a6ba789599 | |||
3bafc002ae | |||
afaea110c7 | |||
dffcb9cda3 | |||
ee60c7679a | |||
e0e92cfef6 | |||
65e72e958e | |||
76ed13bffe | |||
7374dfd1fa | |||
c5ab3e8fd2 | |||
142553abc6 | |||
6003145422 | |||
3cf1b62722 | |||
5a0deb8d69 | |||
4694c93315 | |||
94c0b7a362 | |||
0136274f33 | |||
8934b736c8 | |||
11325bad4a | |||
d0c3e252a3 | |||
e1e4887feb | |||
6f9881f85f | |||
6beeb76ac0 | |||
1f904bffbc | |||
9b2b9b3bef | |||
91a8a4fb28 | |||
582395b8f5 | |||
76580b98f0 | |||
5609764886 | |||
29e3144269 | |||
d68ad3e617 | |||
d6cfe2ed7e | |||
eb1aae4043 | |||
935ce63b73 | |||
31fdff7121 | |||
c7d1890aaa | |||
c7346bfdba | |||
d2b2d813d5 | |||
72fc0a747d | |||
cea3b8f885 | |||
5e7c71e51c | |||
4e17212d44 | |||
c3aa24c3f9 | |||
1de4031d9c | |||
1c39ad38d3 | |||
0b9094ec63 | |||
ac157170c8 | |||
f4a9f5dae8 | |||
2a6108af97 | |||
37b716b298 | |||
f6c91c5a5a | |||
b621a69cda | |||
3fba6eff79 | |||
b9c6df6da7 | |||
1a7f92c423 | |||
a0840242d7 | |||
090801532e | |||
b541c48688 | |||
b432eb1cae | |||
cc5fb914bc | |||
d72ae7b71e | |||
aaa97f11d7 | |||
4b5b1f6d16 | |||
c2f19515d6 | |||
6e7c46af1b | |||
917c09cfc8 | |||
f5471107d9 | |||
e6ab55daa0 | |||
7db05c408c | |||
483f8250bf | |||
8e530a03b6 | |||
b47c43af45 | |||
4fc41517d1 | |||
c80071dd59 | |||
98472da03f | |||
7ac8b02ec5 | |||
0199e26167 | |||
17291e66a0 | |||
7de7b7a16a | |||
bb5ddee710 | |||
04ca3bcf10 | |||
c1dacdd890 | |||
9de9c8ad03 | |||
4613864fc8 | |||
ac5f5ed0a6 | |||
8122970f63 | |||
8473d68ea8 | |||
4caf6540d1 | |||
a75c734471 | |||
e775313188 | |||
996435b79a | |||
45880532bf | |||
e08feb7e54 | |||
8a3cebde8b | |||
d80c32310a | |||
3ac249b2ab | |||
e94e7eef4c | |||
654055b22f | |||
0efbb37381 | |||
6b0c1a71fa | |||
4c9aff5695 | |||
224d78765f | |||
7adcbb320f | |||
e7f43386a6 | |||
411de252d7 | |||
b61dafaeac | |||
929334b0bf | |||
fb7816fed4 | |||
5d3dcfc6ad | |||
0bd9deb9f5 | |||
13d23f315b | |||
48555f95c6 | |||
d026b675be | |||
7eb2c41fb2 | |||
3f2ebbd7ab | |||
38b4d15227 | |||
176b3f12f4 | |||
8a05199fb9 | |||
51a0bd2e75 | |||
1b0b36d143 | |||
e268a0579a | |||
1f1e77b641 | |||
880b4aabdb | |||
5fee444fea | |||
1e6c9be86c | |||
a9790018df | |||
1dc95c41eb | |||
a0a3648e7a | |||
7df9040c05 | |||
5638c1d507 | |||
755c8091af | |||
59f64dd361 | |||
27431e0e1e | |||
b7d0ab7de3 | |||
460be795cf | |||
c4f7727408 | |||
d1de9ff313 | |||
707c6828b5 | |||
3f64e87ed1 | |||
62e45cef2d | |||
c34eee4e8e | |||
9b91beed69 | |||
eea2b0f288 | |||
13eb57a59f | |||
0b3ae3d70c | |||
4b67b0af3e | |||
bba5e2632e | |||
c5ce4e62c6 | |||
509aa61619 | |||
cdd737e28b | |||
5da55d6246 | |||
50a91ba28c | |||
077a5fb04b | |||
bc0ee01d09 | |||
326b464d20 | |||
8a7498e0ef | |||
07ada7f3d9 | |||
880e8a5cfc | |||
a0585c9a9a | |||
a833b98fd0 | |||
4b70a4e905 | |||
f2a1c66031 | |||
cfb8c17511 | |||
99d0e27587 | |||
b08f3acf09 | |||
3ab25ab078 | |||
0604527199 | |||
8f8572fd3e | |||
e8f7241366 | |||
a20b2f72f2 |
@ -1,4 +1,7 @@
|
|||||||
node_modules
|
node_modules
|
||||||
dist
|
dist
|
||||||
|
aio/content
|
||||||
aio/node_modules
|
aio/node_modules
|
||||||
aio/tools/examples/shared/node_modules
|
aio/tools/examples/shared/node_modules
|
||||||
|
integration/bazel
|
||||||
|
packages/bazel/node_modules
|
||||||
|
72
.bazelrc
72
.bazelrc
@ -1,5 +1,3 @@
|
|||||||
# Load any settings specific to the current user
|
|
||||||
try-import .bazelrc.user
|
|
||||||
################################
|
################################
|
||||||
# Settings for Angular team members only
|
# Settings for Angular team members only
|
||||||
################################
|
################################
|
||||||
@ -12,8 +10,10 @@ build:angular-team --remote_http_cache=https://storage.googleapis.com/angular-te
|
|||||||
|
|
||||||
# Make compilation fast, by keeping a few copies of the compilers
|
# Make compilation fast, by keeping a few copies of the compilers
|
||||||
# running as daemons, and cache SourceFile AST's to reduce parse time.
|
# running as daemons, and cache SourceFile AST's to reduce parse time.
|
||||||
build --strategy=TypeScriptCompile=worker
|
|
||||||
build --strategy=AngularTemplateCompile=worker
|
build --strategy=AngularTemplateCompile=worker
|
||||||
|
# TODO(alexeagle): re-enable after fixing worker instability with rxjs typings
|
||||||
|
# build --strategy=TypeScriptCompile=worker
|
||||||
|
build --strategy=TypeScriptCompile=standalone
|
||||||
|
|
||||||
# Enable debugging tests with --config=debug
|
# Enable debugging tests with --config=debug
|
||||||
test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results
|
test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results
|
||||||
@ -22,20 +22,53 @@ test:debug --test_arg=--node_options=--inspect-brk --test_output=streamed --test
|
|||||||
# Filesystem interactions #
|
# Filesystem interactions #
|
||||||
###############################
|
###############################
|
||||||
|
|
||||||
# Don't create symlinks like bazel-out in the project.
|
# Create symlinks in the project:
|
||||||
# These cause VSCode to traverse a massive tree, opening file handles and
|
# - dist/bin for outputs
|
||||||
|
# - dist/testlogs, dist/genfiles
|
||||||
|
# - bazel-out
|
||||||
|
# NB: bazel-out should be excluded from the editor configuration.
|
||||||
|
# The checked-in /.vscode/settings.json does this for VSCode.
|
||||||
|
# Other editors may require manual config to ignore this directory.
|
||||||
|
# In the past, we say a problem where VSCode traversed a massive tree, opening file handles and
|
||||||
# eventually a surprising failure with auto-discovery of the C++ toolchain in
|
# eventually a surprising failure with auto-discovery of the C++ toolchain in
|
||||||
# MacOS High Sierra.
|
# MacOS High Sierra.
|
||||||
# See https://github.com/bazelbuild/bazel/issues/4603
|
# See https://github.com/bazelbuild/bazel/issues/4603
|
||||||
build --symlink_prefix=/
|
build --symlink_prefix=dist/
|
||||||
|
|
||||||
# Performance: avoid stat'ing input files
|
# Disable watchfs as it causes tests to be flaky on Windows
|
||||||
build --watchfs
|
# https://github.com/angular/angular/issues/29541
|
||||||
|
build --nowatchfs
|
||||||
|
|
||||||
# Turn off legacy external runfiles
|
# Turn off legacy external runfiles
|
||||||
run --nolegacy_external_runfiles
|
run --nolegacy_external_runfiles
|
||||||
test --nolegacy_external_runfiles
|
test --nolegacy_external_runfiles
|
||||||
|
|
||||||
|
# Turn on --incompatible_strict_action_env which was on by default
|
||||||
|
# in Bazel 0.21.0 but turned off again in 0.22.0. Follow
|
||||||
|
# https://github.com/bazelbuild/bazel/issues/7026 for more details.
|
||||||
|
# This flag is needed to so that the bazel cache is not invalidated
|
||||||
|
# when running bazel via `yarn bazel`.
|
||||||
|
# See https://github.com/angular/angular/issues/27514.
|
||||||
|
build --incompatible_strict_action_env
|
||||||
|
run --incompatible_strict_action_env
|
||||||
|
test --incompatible_strict_action_env
|
||||||
|
|
||||||
|
###############################
|
||||||
|
# Saucelabs support #
|
||||||
|
# Turn on these settings with #
|
||||||
|
# --config=saucelabs #
|
||||||
|
###############################
|
||||||
|
|
||||||
|
# Expose SauceLabs environment to actions
|
||||||
|
# These environment variables are needed by
|
||||||
|
# web_test_karma to run on Saucelabs
|
||||||
|
test:saucelabs --action_env=SAUCE_USERNAME
|
||||||
|
test:saucelabs --action_env=SAUCE_ACCESS_KEY
|
||||||
|
test:saucelabs --action_env=SAUCE_READY_FILE
|
||||||
|
test:saucelabs --action_env=SAUCE_PID_FILE
|
||||||
|
test:saucelabs --action_env=SAUCE_TUNNEL_IDENTIFIER
|
||||||
|
test:saucelabs --define=KARMA_WEB_TEST_MODE=SL_REQUIRED
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# Release support #
|
# Release support #
|
||||||
# Turn on these settings with #
|
# Turn on these settings with #
|
||||||
@ -43,7 +76,9 @@ test --nolegacy_external_runfiles
|
|||||||
###############################
|
###############################
|
||||||
|
|
||||||
# Releases should always be stamped with version control info
|
# Releases should always be stamped with version control info
|
||||||
build:release --workspace_status_command=./tools/bazel_stamp_vars.sh
|
# This command assumes node on the path and is a workaround for
|
||||||
|
# https://github.com/bazelbuild/bazel/issues/4802
|
||||||
|
build:release --workspace_status_command="node ./tools/bazel_stamp_vars.js"
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# Output #
|
# Output #
|
||||||
@ -81,16 +116,21 @@ build --define=compile=legacy
|
|||||||
# --config=remote
|
# --config=remote
|
||||||
###############################
|
###############################
|
||||||
|
|
||||||
# Load default settings for Remote Build Execution
|
# Load default settings for Remote Build Execution.
|
||||||
# When updating, the URLs of bazel_toolchains in packages/bazel/package.bzl
|
import %workspace%/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/.bazelrc.notoolchain
|
||||||
# may also need to be updated (see https://github.com/angular/angular/pull/27935)
|
|
||||||
import %workspace%/third_party/github.com/bazelbuild/bazel-toolchains/bazelrc/bazel-0.21.0.bazelrc
|
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
# Point to our custom execution platform; see tools/BUILD.bazel
|
# Toolchain and platform related flags
|
||||||
|
build:remote --host_javabase=@rbe_ubuntu1604_angular//java:jdk
|
||||||
|
build:remote --javabase=@rbe_ubuntu1604_angular//java:jdk
|
||||||
|
build:remote --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
|
||||||
|
build:remote --java_toolchain=@bazel_tools//tools/jdk:toolchain_hostjdk8
|
||||||
|
build:remote --crosstool_top=@rbe_ubuntu1604_angular//cc:toolchain
|
||||||
|
build:remote --action_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
|
||||||
|
build:remote --extra_toolchains=@rbe_ubuntu1604_angular//config:cc-toolchain
|
||||||
build:remote --extra_execution_platforms=//tools:rbe_ubuntu1604-angular
|
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
|
||||||
@ -101,3 +141,7 @@ build:remote --remote_instance_name=projects/internal-200822/instances/default_i
|
|||||||
# Do not accept remote cache.
|
# Do not accept remote cache.
|
||||||
# We need to understand the security risks of using prior build artifacts.
|
# We need to understand the security risks of using prior build artifacts.
|
||||||
build:remote --remote_accept_cached=false
|
build:remote --remote_accept_cached=false
|
||||||
|
|
||||||
|
# Load any settings specific to the current user. Needs to be last statement in this
|
||||||
|
# config, as the user configuration should be able to overwrite flags from this file.
|
||||||
|
try-import .bazelrc.user
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
# VM creation:
|
# VM creation:
|
||||||
# In Google Cloud Platform, create a Compute Engine instance.
|
# In Google Cloud Platform, create a Compute Engine instance.
|
||||||
# We recommend machine type n1-highcpu-16 (16 vCPUs, 14.4 GB memory).
|
# We recommend machine type n1-standard-16 (16 vCPUs, 60 GB memory).
|
||||||
# Use a windows boot disk with container support such as
|
# Use a recent windows boot disk with container support such as
|
||||||
# "Windows Server version 1803 Datacenter Core for Containers".
|
# "Windows Server version 1803 Datacenter Core for Containers", and add a 128GB SSD disk.
|
||||||
# Give it a name, then click "Create".
|
# Give it a name, then click "Create".
|
||||||
|
|
||||||
# VM setup:
|
# VM setup:
|
||||||
@ -35,7 +35,7 @@
|
|||||||
# Get the token and tags from arguments.
|
# Get the token and tags from arguments.
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory=$true)][string]$token,
|
[Parameter(Mandatory=$true)][string]$token,
|
||||||
[string]$tags = ""
|
[string]$tags = "",
|
||||||
[Int]$agents = 1
|
[Int]$agents = 1
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -54,6 +54,8 @@ Write-Host "Installing Git for Windows."
|
|||||||
Invoke-WebRequest -Uri https://github.com/git-for-windows/git/releases/download/v2.19.1.windows.1/Git-2.19.1-64-bit.exe -OutFile git.exe
|
Invoke-WebRequest -Uri https://github.com/git-for-windows/git/releases/download/v2.19.1.windows.1/Git-2.19.1-64-bit.exe -OutFile git.exe
|
||||||
.\git.exe /VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh" /DIR="C:\git"
|
.\git.exe /VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh" /DIR="C:\git"
|
||||||
Add-Path "C:\git\bin"
|
Add-Path "C:\git\bin"
|
||||||
|
# Sleep for 15s while git is installed. Trying to remove the git.exe before it finishes install causes an error.
|
||||||
|
Start-Sleep -s 15
|
||||||
Remove-Item git.exe
|
Remove-Item git.exe
|
||||||
|
|
||||||
# Download NSSM (https://nssm.cc/) to run the BuildKite agent as a service.
|
# Download NSSM (https://nssm.cc/) to run the BuildKite agent as a service.
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
# We do this by copying this file to /etc/bazel.bazelrc at the start of the build.
|
# We do this by copying this file to /etc/bazel.bazelrc at the start of the build.
|
||||||
# See documentation in /docs/BAZEL.md
|
# 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
|
# Don't be spammy in the logs
|
||||||
# TODO(gmagolan): Hide progress again once build performance improves
|
# TODO(gmagolan): Hide progress again once build performance improves
|
||||||
# Presently, CircleCI can timeout during bazel test ... with the following
|
# Presently, CircleCI can timeout during bazel test ... with the following
|
||||||
|
@ -11,16 +11,43 @@
|
|||||||
# needed for jobs that run tests without Bazel. Bazel runs tests with browsers that will be
|
# needed for jobs that run tests without Bazel. Bazel runs tests with browsers that will be
|
||||||
# fetched by the Webtesting rules. Therefore for jobs that run tests with Bazel, we don't need a
|
# fetched by the Webtesting rules. Therefore for jobs that run tests with Bazel, we don't need a
|
||||||
# docker image with browsers pre-installed.
|
# docker image with browsers pre-installed.
|
||||||
# **NOTE**: If you change the version of the docker images, also change the `cache_key` suffix.
|
# **NOTE 1**: If you change the version of the `*-browsers` docker image, make sure the
|
||||||
|
# `CI_CHROMEDRIVER_VERSION_ARG` env var (in `.circleci/env.sh`) points to a ChromeDriver
|
||||||
|
# version that is compatible with the Chrome version in the image.
|
||||||
|
# **NOTE 2**: If you change the version of the docker images, also change the `cache_key` suffix.
|
||||||
var_1: &default_docker_image circleci/node:10.12
|
var_1: &default_docker_image circleci/node:10.12
|
||||||
var_2: &browsers_docker_image circleci/node:10.12-browsers
|
var_2: &browsers_docker_image circleci/node:10.12-browsers
|
||||||
var_3: &cache_key v2-angular-{{ .Branch }}-{{ checksum "yarn.lock" }}-node-10.12
|
# We don't want to include the current branch name in the cache key because that would prevent
|
||||||
|
# PRs from being able to restore the cache since the branch names are always different for PRs.
|
||||||
|
# The cache key should only consist of dynamic values that change whenever something in the
|
||||||
|
# cache changes. For example:
|
||||||
|
# 1) yarn lock file changes --> cached "node_modules" are different.
|
||||||
|
# 2) bazel repository definitions change --> cached bazel repositories are different.
|
||||||
|
# **NOTE 1 **: If you change the cache key prefix, also sync the restore_cache fallback to match.
|
||||||
|
# **NOTE 2 **: Keep the static part of the cache key as prefix to enable correct fallbacks.
|
||||||
|
# See https://circleci.com/docs/2.0/caching/#restoring-cache for how prefixes work in CircleCI.
|
||||||
|
var_3: &cache_key v3-angular-node-10.12-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }}-{{ checksum "packages/bazel/package.bzl" }}-{{ checksum "aio/yarn.lock" }}
|
||||||
|
|
||||||
# Define common ENV vars
|
# Initializes the CI environment by setting up common environment variables.
|
||||||
var_4: &define_env_vars
|
var_4: &init_environment
|
||||||
run:
|
run:
|
||||||
name: Define environment variables
|
name: Initializing environment (setting up variables, overwriting Yarn)
|
||||||
command: ./.circleci/env.sh
|
# Overwrite the yarn installed in the docker container with our own version.
|
||||||
|
command: |
|
||||||
|
./.circleci/env.sh
|
||||||
|
ourYarn=$(realpath ./third_party/github.com/yarnpkg/yarn/releases/download/v1.13.0/bin/yarn.js)
|
||||||
|
sudo chmod a+x $ourYarn
|
||||||
|
sudo ln -fs $ourYarn /usr/local/bin/yarn
|
||||||
|
echo "Yarn version: $(yarn --version)"
|
||||||
|
|
||||||
|
# Add GitHub to known hosts.
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
echo 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==' >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
|
# use git+ssh instead of https
|
||||||
|
git config --global url."ssh://git@github.com".insteadOf "https://github.com" || true
|
||||||
|
git config --global gc.auto 0 || true
|
||||||
|
|
||||||
|
|
||||||
var_5: &setup_bazel_remote_execution
|
var_5: &setup_bazel_remote_execution
|
||||||
run:
|
run:
|
||||||
@ -36,33 +63,94 @@ var_6: &job_defaults
|
|||||||
docker:
|
docker:
|
||||||
- image: *default_docker_image
|
- image: *default_docker_image
|
||||||
|
|
||||||
# After checkout, rebase on top of master.
|
# After checkout, rebase on top of target branch.
|
||||||
# Similar to travis behavior, but not quite the same.
|
|
||||||
# See https://discuss.circleci.com/t/1662
|
|
||||||
var_7: &post_checkout
|
var_7: &post_checkout
|
||||||
post: git pull --ff-only origin "refs/pull/${CI_PULL_REQUEST//*pull\//}/merge"
|
run:
|
||||||
|
name: Rebase PR on target branch
|
||||||
|
command: >
|
||||||
|
if [[ -n "${CIRCLE_PR_NUMBER}" ]]; then
|
||||||
|
# User is required for rebase.
|
||||||
|
git config user.name "angular-ci"
|
||||||
|
git config user.email "angular-ci"
|
||||||
|
# Rebase PR on top of target branch.
|
||||||
|
node tools/rebase-pr.js angular/angular ${CIRCLE_PR_NUMBER}
|
||||||
|
else
|
||||||
|
echo "This build is not over a PR, nothing to do."
|
||||||
|
fi
|
||||||
|
|
||||||
var_8: &yarn_install
|
var_8: &yarn_install
|
||||||
run:
|
run:
|
||||||
name: Running Yarn install
|
name: Running Yarn install
|
||||||
command: yarn install --frozen-lockfile --non-interactive
|
command: |
|
||||||
|
# Yarn's requests sometimes take more than 10mins to complete.
|
||||||
|
# Print something to stdout, to prevent CircleCI from failing due to not output.
|
||||||
|
while true; do sleep 60; echo "[`date`] Keeping alive..."; done &
|
||||||
|
KEEP_ALIVE_PID=$!
|
||||||
|
yarn install --frozen-lockfile --non-interactive
|
||||||
|
kill $KEEP_ALIVE_PID
|
||||||
|
|
||||||
var_9: &setup_circleci_bazel_config
|
var_9: &setup_circleci_bazel_config
|
||||||
run:
|
run:
|
||||||
name: Setting up CircleCI bazel configuration
|
name: Setting up CircleCI bazel configuration
|
||||||
command: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
|
command: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
|
||||||
|
|
||||||
|
var_10: &restore_cache
|
||||||
|
restore_cache:
|
||||||
|
keys:
|
||||||
|
- *cache_key
|
||||||
|
# This fallback should be the cache_key without variables.
|
||||||
|
- v3-angular-node-10.12-
|
||||||
|
|
||||||
|
# Branch filter that can be specified for jobs that should only run on publish branches
|
||||||
|
# (e.g. master or the patch branch)
|
||||||
|
var_12: &publish_branches_filter
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
# e.g. 7.0.x, 7.1.x, etc.
|
||||||
|
- /\d+\.\d+\.x/
|
||||||
|
|
||||||
|
# Workspace initially persisted by the `install` job, and then enhanced by `test_aio` and
|
||||||
|
# `build-npm-packages`.
|
||||||
|
# https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs
|
||||||
|
# https://circleci.com/blog/deep-diving-into-circleci-workspaces/
|
||||||
|
var_13: &attach_workspace
|
||||||
|
attach_workspace:
|
||||||
|
at: ~/
|
||||||
|
|
||||||
version: 2
|
version: 2
|
||||||
jobs:
|
jobs:
|
||||||
|
setup:
|
||||||
|
<<: *job_defaults
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- *post_checkout
|
||||||
|
# This cache is saved in the build-npm-packages so that Bazel cache is also included.
|
||||||
|
- *restore_cache
|
||||||
|
- *init_environment
|
||||||
|
- *yarn_install
|
||||||
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
||||||
|
# Make the bazel directories and add a file to them if they don't exist already so that
|
||||||
|
# persist_to_workspace does not fail.
|
||||||
|
- run: |
|
||||||
|
if [ ! -d ~/bazel_repository_cache ]; then
|
||||||
|
mkdir ~/bazel_repository_cache
|
||||||
|
touch ~/bazel_repository_cache/MARKER
|
||||||
|
fi
|
||||||
|
# Persist any changes at this point to be reused by further jobs.
|
||||||
|
# **NOTE 1 **: Folders persisted here should be kept in sync with `var_13: &attach_workspace`.
|
||||||
|
# **NOTE 2 **: To add new content to the workspace, always persist on the same root.
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: ~/
|
||||||
|
paths:
|
||||||
|
- ./ng
|
||||||
|
- ./bazel_repository_cache
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *yarn_install
|
|
||||||
|
|
||||||
- run: 'yarn bazel:format -mode=check ||
|
- run: 'yarn bazel:format -mode=check ||
|
||||||
(echo "BUILD files not formatted. Please run ''yarn bazel:format''" ; exit 1)'
|
(echo "BUILD files not formatted. Please run ''yarn bazel:format''" ; exit 1)'
|
||||||
@ -70,45 +158,31 @@ jobs:
|
|||||||
- run: 'yarn bazel:lint ||
|
- run: 'yarn bazel:lint ||
|
||||||
(echo -e "\n.bzl files have lint errors. Please run ''yarn bazel:lint-fix''"; exit 1)'
|
(echo -e "\n.bzl files have lint errors. Please run ''yarn bazel:lint-fix''"; exit 1)'
|
||||||
|
|
||||||
- run: ./node_modules/.bin/gulp lint
|
- run: yarn gulp lint
|
||||||
|
|
||||||
test:
|
test:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
resource_class: xlarge
|
resource_class: xlarge
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *setup_circleci_bazel_config
|
- *setup_circleci_bazel_config
|
||||||
- *yarn_install
|
# Enable remote/sibling docker which is needed by auto-selection of toolchain configs for RBE.
|
||||||
|
- setup_remote_docker
|
||||||
# Setup remote execution and run RBE-compatible tests.
|
# Setup remote execution and run RBE-compatible tests.
|
||||||
- *setup_bazel_remote_execution
|
- *setup_bazel_remote_execution
|
||||||
- run: yarn bazel test //... --build_tag_filters=-ivy-only --test_tag_filters=-ivy-only,-local
|
- run: yarn bazel test //... --build_tag_filters=-ivy-only --test_tag_filters=-ivy-only
|
||||||
# Now run RBE incompatible tests locally.
|
|
||||||
- run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
|
|
||||||
- run: yarn bazel test //... --build_tag_filters=-ivy-only,local --test_tag_filters=-ivy-only,local
|
|
||||||
|
|
||||||
- save_cache:
|
|
||||||
key: *cache_key
|
|
||||||
paths:
|
|
||||||
- "node_modules"
|
|
||||||
- "~/bazel_repository_cache"
|
|
||||||
|
|
||||||
# Temporary job to test what will happen when we flip the Ivy flag to true
|
# Temporary job to test what will happen when we flip the Ivy flag to true
|
||||||
test_ivy_aot:
|
test_ivy_aot:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
resource_class: xlarge
|
resource_class: xlarge
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *setup_circleci_bazel_config
|
- *setup_circleci_bazel_config
|
||||||
- *yarn_install
|
# Enable remote/sibling docker which is needed by auto-selection of toolchain configs for RBE.
|
||||||
|
- setup_remote_docker
|
||||||
- *setup_bazel_remote_execution
|
- *setup_bazel_remote_execution
|
||||||
|
|
||||||
# We need to explicitly specify the --symlink_prefix option because otherwise we would
|
# We need to explicitly specify the --symlink_prefix option because otherwise we would
|
||||||
@ -135,17 +209,43 @@ jobs:
|
|||||||
path: dist/bin/packages/core/test/bundling/todo/bundle.min.js.br
|
path: dist/bin/packages/core/test/bundling/todo/bundle.min.js.br
|
||||||
destination: core/todo/bundle.br
|
destination: core/todo/bundle.br
|
||||||
|
|
||||||
|
test_saucelabs_bazel:
|
||||||
|
<<: *job_defaults
|
||||||
|
# In order to avoid the bottleneck of having a slow host machine, we acquire a better
|
||||||
|
# container for this job. This is necessary because we launch a lot of browsers concurrently
|
||||||
|
# and therefore the tunnel and Karma need to process a lot of file requests and tests.
|
||||||
|
resource_class: xlarge
|
||||||
|
steps:
|
||||||
|
- *attach_workspace
|
||||||
|
- *init_environment
|
||||||
|
- *setup_circleci_bazel_config
|
||||||
|
- run:
|
||||||
|
name: Preparing environment for running tests on Saucelabs.
|
||||||
|
command: setSecretVar SAUCE_ACCESS_KEY $(echo $SAUCE_ACCESS_KEY | rev)
|
||||||
|
- run:
|
||||||
|
name: Starting Saucelabs tunnel
|
||||||
|
command: ./scripts/saucelabs/start-tunnel.sh
|
||||||
|
background: true
|
||||||
|
# Waits for the Saucelabs tunnel to be ready. This ensures that we don't run tests
|
||||||
|
# too early without Saucelabs not being ready.
|
||||||
|
- run: ./scripts/saucelabs/wait-for-tunnel.sh
|
||||||
|
# All web tests are contained within a single //:test_web_all target for Saucelabs
|
||||||
|
# as running each set of tests as a separate target will attempt to acquire too
|
||||||
|
# many browsers on Saucelabs (7 per target currently) and some tests will always
|
||||||
|
# fail to acquire browsers. For example:
|
||||||
|
# 14 02 2019 19:52:33.170:WARN [launcher]: chrome beta on SauceLabs have not captured in 180000 ms, killing.
|
||||||
|
# //packages/forms/test:web_test_sauce TIMEOUT in 315.0s
|
||||||
|
- run: yarn bazel test --config=saucelabs //:test_web_all
|
||||||
|
- run: ./scripts/saucelabs/stop-tunnel.sh
|
||||||
|
|
||||||
test_aio:
|
test_aio:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
docker:
|
docker:
|
||||||
# Needed because the AIO tests and the PWA score test depend on Chrome being available.
|
# Needed because the AIO tests and the PWA score test depend on Chrome being available.
|
||||||
- image: *browsers_docker_image
|
- image: *browsers_docker_image
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
# Build aio
|
# Build aio
|
||||||
- run: yarn --cwd aio build --progress=false
|
- run: yarn --cwd aio build --progress=false
|
||||||
# Lint the code
|
# Lint the code
|
||||||
@ -157,9 +257,9 @@ jobs:
|
|||||||
# (Run before unit and e2e tests, which destroy the `dist/` directory.)
|
# (Run before unit and e2e tests, which destroy the `dist/` directory.)
|
||||||
- run: yarn --cwd aio payload-size
|
- run: yarn --cwd aio payload-size
|
||||||
# Run unit tests
|
# Run unit tests
|
||||||
- run: yarn --cwd aio test --watch=false
|
- run: yarn --cwd aio test --progress=false --watch=false
|
||||||
# Run e2e tests
|
# Run e2e tests
|
||||||
- run: yarn --cwd aio e2e
|
- run: yarn --cwd aio e2e --configuration=ci
|
||||||
# Run unit tests for Firebase redirects
|
# Run unit tests for Firebase redirects
|
||||||
- run: yarn --cwd aio redirects-test
|
- run: yarn --cwd aio redirects-test
|
||||||
|
|
||||||
@ -169,13 +269,10 @@ jobs:
|
|||||||
# Needed because before deploying the deploy-production script runs the PWA score tests.
|
# Needed because before deploying the deploy-production script runs the PWA score tests.
|
||||||
- image: *browsers_docker_image
|
- image: *browsers_docker_image
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
# Deploy angular.io to production (if necessary)
|
# Deploy angular.io to production (if necessary)
|
||||||
- run: setPublicVar CI_STABLE_BRANCH "$(npm info @angular/core dist-tags.latest | sed -r 's/^\s*([0-9]+\.[0-9]+)\.[0-9]+.*$/\1.x/')"
|
- run: setPublicVar_CI_STABLE_BRANCH
|
||||||
- run: yarn --cwd aio deploy-production
|
- run: yarn --cwd aio deploy-production
|
||||||
|
|
||||||
test_aio_local:
|
test_aio_local:
|
||||||
@ -184,33 +281,41 @@ jobs:
|
|||||||
# Needed because the AIO tests and the PWA score test depend on Chrome being available.
|
# Needed because the AIO tests and the PWA score test depend on Chrome being available.
|
||||||
- image: *browsers_docker_image
|
- image: *browsers_docker_image
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- attach_workspace:
|
|
||||||
at: dist
|
|
||||||
- *define_env_vars
|
|
||||||
# Build aio (with local Angular packages)
|
# Build aio (with local Angular packages)
|
||||||
- run: yarn --cwd aio build-local --progress=false
|
- run: yarn --cwd aio build-local --progress=false
|
||||||
# Run PWA-score tests
|
# Run PWA-score tests
|
||||||
# (Run before unit and e2e tests, which destroy the `dist/` directory.)
|
# (Run before unit and e2e tests, which destroy the `dist/` directory.)
|
||||||
- run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE
|
- run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE
|
||||||
# Run unit tests
|
# Run unit tests
|
||||||
- run: yarn --cwd aio test --watch=false
|
- run: yarn --cwd aio test --progress=false --watch=false
|
||||||
# Run e2e tests
|
# Run e2e tests
|
||||||
- run: yarn --cwd aio e2e
|
- run: yarn --cwd aio e2e --configuration=ci
|
||||||
|
|
||||||
|
test_aio_local_ivy:
|
||||||
|
<<: *job_defaults
|
||||||
|
docker:
|
||||||
|
# Needed because the AIO tests and the PWA score test depend on Chrome being available.
|
||||||
|
- image: *browsers_docker_image
|
||||||
|
steps:
|
||||||
|
- *attach_workspace
|
||||||
|
- *init_environment
|
||||||
|
# Build aio with Ivy (using local Angular packages)
|
||||||
|
- run: yarn --cwd aio build-with-ivy --progress=false
|
||||||
|
# Run PWA-score tests
|
||||||
|
# (Run before unit and e2e tests, which destroy the `dist/` directory.)
|
||||||
|
- run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE
|
||||||
|
# Run unit tests
|
||||||
|
- run: yarn --cwd aio test --progress=false --watch=false
|
||||||
|
# Run e2e tests
|
||||||
|
- run: yarn --cwd aio e2e --configuration=ci
|
||||||
|
|
||||||
test_aio_tools:
|
test_aio_tools:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- attach_workspace:
|
|
||||||
at: dist
|
|
||||||
- *define_env_vars
|
|
||||||
# Install
|
# Install
|
||||||
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
||||||
- run: yarn --cwd aio extract-cli-command-docs
|
- run: yarn --cwd aio extract-cli-command-docs
|
||||||
@ -223,23 +328,43 @@ jobs:
|
|||||||
docker:
|
docker:
|
||||||
# Needed because the example e2e tests depend on Chrome.
|
# Needed because the example e2e tests depend on Chrome.
|
||||||
- image: *browsers_docker_image
|
- image: *browsers_docker_image
|
||||||
parallelism: 3
|
parallelism: 4
|
||||||
|
resource_class: xlarge
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- attach_workspace:
|
|
||||||
at: dist
|
|
||||||
- *define_env_vars
|
|
||||||
# Install root
|
|
||||||
- *yarn_install
|
|
||||||
# Install aio
|
# Install aio
|
||||||
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
||||||
# Run examples tests. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled.
|
# Run examples tests. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled.
|
||||||
# Since the parallelism is set to "3", there will be three parallel CircleCI containers
|
# Since the parallelism is set to "3", there will be three parallel CircleCI containers
|
||||||
# with either "0", "1" or "2" as node index. This can be passed to the "--shard" argument.
|
# with either "0", "1" or "2" as node index. This can be passed to the "--shard" argument.
|
||||||
- run: yarn --cwd aio example-e2e --setup --local --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL}
|
- run: yarn --cwd aio example-e2e --setup --local --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL}
|
||||||
|
|
||||||
|
test_docs_examples_ivy:
|
||||||
|
<<: *job_defaults
|
||||||
|
docker:
|
||||||
|
# Needed because the example e2e tests depend on Chrome.
|
||||||
|
- image: *browsers_docker_image
|
||||||
|
resource_class: xlarge
|
||||||
|
# We increase the parallelism here to five while the "test_docs_examples" job runs with
|
||||||
|
# a parallelism of four. This is necessary because this job also need to run NGCC which
|
||||||
|
# takes up more time and we don't want these jobs to impact the overall CI turnaround.
|
||||||
|
parallelism: 5
|
||||||
|
steps:
|
||||||
|
- *attach_workspace
|
||||||
|
- *init_environment
|
||||||
|
# Install aio
|
||||||
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
||||||
|
# Rename the Ivy packages dist folder to "dist/packages-dist" as the AIO
|
||||||
|
# package installer picks up the locally built packages from that location.
|
||||||
|
# *Note*: We could also adjust the packages installer, but given we won't have
|
||||||
|
# two different folders of Angular distributions in the future, we should keep
|
||||||
|
# the packages installer unchanged.
|
||||||
|
- run: mv dist/packages-dist-ivy-aot dist/packages-dist
|
||||||
|
# Run examples tests with ivy. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled.
|
||||||
|
# Since the parallelism is set to "3", there will be three parallel CircleCI containers
|
||||||
|
# with either "0", "1" or "2" as node index. This can be passed to the "--shard" argument.
|
||||||
|
- run: yarn --cwd aio example-e2e --setup --local --ivy --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL}
|
||||||
|
|
||||||
# This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`.
|
# This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`.
|
||||||
aio_preview:
|
aio_preview:
|
||||||
@ -247,12 +372,8 @@ jobs:
|
|||||||
environment:
|
environment:
|
||||||
AIO_SNAPSHOT_ARTIFACT_PATH: &aio_preview_artifact_path 'aio/tmp/snapshot.tgz'
|
AIO_SNAPSHOT_ARTIFACT_PATH: &aio_preview_artifact_path 'aio/tmp/snapshot.tgz'
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *yarn_install
|
|
||||||
- run: ./aio/scripts/build-artifacts.sh $AIO_SNAPSHOT_ARTIFACT_PATH $CI_PULL_REQUEST $CI_COMMIT
|
- run: ./aio/scripts/build-artifacts.sh $AIO_SNAPSHOT_ARTIFACT_PATH $CI_PULL_REQUEST $CI_COMMIT
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: *aio_preview_artifact_path
|
path: *aio_preview_artifact_path
|
||||||
@ -268,45 +389,68 @@ jobs:
|
|||||||
# Needed because the test-preview script runs e2e tests and the PWA score test with Chrome.
|
# Needed because the test-preview script runs e2e tests and the PWA score test with Chrome.
|
||||||
- image: *browsers_docker_image
|
- image: *browsers_docker_image
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- run: yarn install --cwd aio --frozen-lockfile --non-interactive
|
|
||||||
- run:
|
- run:
|
||||||
name: Wait for preview and run tests
|
name: Wait for preview and run tests
|
||||||
command: node aio/scripts/test-preview.js $CI_PULL_REQUEST $CI_COMMIT $CI_AIO_MIN_PWA_SCORE
|
command: node aio/scripts/test-preview.js $CI_PULL_REQUEST $CI_COMMIT $CI_AIO_MIN_PWA_SCORE
|
||||||
|
|
||||||
# This job exists only for backwards-compatibility with old scripts and tests
|
|
||||||
# that rely on the pre-Bazel dist/packages-dist layout.
|
# The `build-npm-packages` tasks exist for backwards-compatibility with old scripts and
|
||||||
# It duplicates some work with the job above: we build the bazel packages
|
# tests that rely on the pre-Bazel `dist/packages-dist` output structure (build.sh).
|
||||||
# twice. Even though we have a remote cache, these jobs will typically run in
|
# Having multiple jobs that independently build in this manner duplicates some work; we build
|
||||||
# parallel so up-to-date outputs will not be available at the time the build
|
# the bazel packages more than once. Even though we have a remote cache, these jobs will
|
||||||
|
# typically run in parallel so up-to-date outputs will not be available at the time the build
|
||||||
# starts.
|
# starts.
|
||||||
# No new jobs should depend on this one.
|
|
||||||
build-packages-dist:
|
# Build the view engine npm packages. No new jobs should depend on this.
|
||||||
|
build-npm-packages:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
resource_class: xlarge
|
resource_class: xlarge
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *setup_circleci_bazel_config
|
- *setup_circleci_bazel_config
|
||||||
- *yarn_install
|
# Enable remote/sibling docker which is needed by auto-selection of toolchain configs for RBE.
|
||||||
|
- setup_remote_docker
|
||||||
- *setup_bazel_remote_execution
|
- *setup_bazel_remote_execution
|
||||||
|
|
||||||
- run: scripts/build-packages-dist.sh
|
- run: scripts/build-packages-dist.sh
|
||||||
|
|
||||||
# Save the npm packages from //packages/... for other workflow jobs to read
|
# Save the npm packages from //packages/... for other workflow jobs to read
|
||||||
# https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs
|
|
||||||
- persist_to_workspace:
|
- persist_to_workspace:
|
||||||
root: dist
|
root: ~/
|
||||||
paths:
|
paths:
|
||||||
- packages-dist
|
- ng/dist/packages-dist
|
||||||
- packages-dist-ivy-aot
|
|
||||||
|
# Save dependencies and bazel repository cache to use on subsequent runs.
|
||||||
|
- save_cache:
|
||||||
|
key: *cache_key
|
||||||
|
paths:
|
||||||
|
- "node_modules"
|
||||||
|
- "aio/node_modules"
|
||||||
|
- "~/bazel_repository_cache"
|
||||||
|
|
||||||
|
# Build the ivy npm packages.
|
||||||
|
build-ivy-npm-packages:
|
||||||
|
<<: *job_defaults
|
||||||
|
resource_class: xlarge
|
||||||
|
steps:
|
||||||
|
- *attach_workspace
|
||||||
|
- *init_environment
|
||||||
|
- *setup_circleci_bazel_config
|
||||||
|
# Enable remote/sibling docker which is needed by auto-selection of toolchain configs for RBE.
|
||||||
|
- setup_remote_docker
|
||||||
|
- *setup_bazel_remote_execution
|
||||||
|
|
||||||
|
- run: scripts/build-ivy-npm-packages.sh
|
||||||
|
|
||||||
|
# Save the npm packages from //packages/... for other workflow jobs to read
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: ~/
|
||||||
|
paths:
|
||||||
|
- ng/dist/packages-dist-ivy-aot
|
||||||
|
|
||||||
# We run the integration tests outside of Bazel for now.
|
# We run the integration tests outside of Bazel for now.
|
||||||
# They are a separate workflow job so that they can be easily re-run.
|
# They are a separate workflow job so that they can be easily re-run.
|
||||||
@ -325,13 +469,8 @@ jobs:
|
|||||||
# on a 4G worker so we use a larger machine here too.
|
# on a 4G worker so we use a larger machine here too.
|
||||||
resource_class: xlarge
|
resource_class: xlarge
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- attach_workspace:
|
|
||||||
at: dist
|
|
||||||
- *define_env_vars
|
|
||||||
# Runs the integration tests in parallel across multiple CircleCI container instances. The
|
# Runs the integration tests in parallel across multiple CircleCI container instances. The
|
||||||
# amount of container nodes for this job is controlled by the "parallelism" option.
|
# amount of container nodes for this job is controlled by the "parallelism" option.
|
||||||
- run: ./integration/run_tests.sh ${CIRCLE_NODE_INDEX} ${CIRCLE_NODE_TOTAL}
|
- run: ./integration/run_tests.sh ${CIRCLE_NODE_INDEX} ${CIRCLE_NODE_TOTAL}
|
||||||
@ -341,21 +480,20 @@ jobs:
|
|||||||
publish_snapshot:
|
publish_snapshot:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
|
||||||
<<: *post_checkout
|
|
||||||
- *define_env_vars
|
|
||||||
# See below - ideally this job should not trigger for non-upstream builds.
|
# See below - ideally this job should not trigger for non-upstream builds.
|
||||||
# But since it does, we have to check this condition.
|
# But since it does, we have to check this condition.
|
||||||
- run:
|
- run:
|
||||||
name: Skip this job for Pull Requests and Fork builds
|
name: Skip this job for Pull Requests and Fork builds
|
||||||
# Note, `|| true` on the end makes this step always exit 0
|
# Note: Using `CIRCLE_*` env variables (instead of those defined in `env.sh` so that this
|
||||||
command: '[[
|
# step can be run before `init_environment`.
|
||||||
"$CI_PULL_REQUEST" != "false"
|
command: >
|
||||||
|| "$CI_REPO_OWNER" != "angular"
|
if [[ -n "${CIRCLE_PR_NUMBER}" ]] ||
|
||||||
|| "$CI_REPO_NAME" != "angular"
|
[[ "$CIRCLE_PROJECT_USERNAME" != "angular" ]] ||
|
||||||
]] && circleci step halt || true'
|
[[ "$CIRCLE_PROJECT_REPONAME" != "angular" ]]; then
|
||||||
- attach_workspace:
|
circleci step halt
|
||||||
at: dist
|
fi
|
||||||
|
- *attach_workspace
|
||||||
|
- *init_environment
|
||||||
# CircleCI has a config setting to force SSH for all github connections
|
# CircleCI has a config setting to force SSH for all github connections
|
||||||
# This is not compatible with our mechanism of using a Personal Access Token
|
# This is not compatible with our mechanism of using a Personal Access Token
|
||||||
# Clear the global setting
|
# Clear the global setting
|
||||||
@ -365,41 +503,49 @@ jobs:
|
|||||||
command: 'openssl aes-256-cbc -d -in .circleci/github_token -k "${KEY}" -out ~/.git_credentials'
|
command: 'openssl aes-256-cbc -d -in .circleci/github_token -k "${KEY}" -out ~/.git_credentials'
|
||||||
- run: ./scripts/ci/publish-build-artifacts.sh
|
- run: ./scripts/ci/publish-build-artifacts.sh
|
||||||
|
|
||||||
aio_monitoring:
|
aio_monitoring_stable:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
docker:
|
docker:
|
||||||
# This job needs Chrome to be globally installed because the tests run with Protractor
|
# This job needs Chrome to be globally installed because the tests run with Protractor
|
||||||
# which does not load the browser through the Bazel webtesting rules.
|
# which does not load the browser through the Bazel webtesting rules.
|
||||||
- image: *browsers_docker_image
|
- image: *browsers_docker_image
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
- run: setPublicVar_CI_STABLE_BRANCH
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- run:
|
- run:
|
||||||
name: Run tests against the deployed apps
|
name: Check out `aio/` from the stable branch
|
||||||
command: ./aio/scripts/test-production.sh $CI_AIO_MIN_PWA_SCORE
|
command: |
|
||||||
|
git fetch origin $CI_STABLE_BRANCH
|
||||||
|
git checkout --force origin/$CI_STABLE_BRANCH -- aio/
|
||||||
|
- run:
|
||||||
|
name: Run tests against https://angular.io/
|
||||||
|
command: ./aio/scripts/test-production.sh https://angular.io/ $CI_AIO_MIN_PWA_SCORE
|
||||||
- run:
|
- run:
|
||||||
name: Notify caretaker about failure
|
name: Notify caretaker about failure
|
||||||
command: 'curl --request POST --header "Content-Type: application/json" --data "{\"text\":\":x: \`$CIRCLE_JOB\` job failed on build $CIRCLE_BUILD_NUM: $CIRCLE_BUILD_URL :scream:\"}" $CI_SECRET_SLACK_CARETAKER_WEBHOOK_URL'
|
# `$SLACK_CARETAKER_WEBHOOK_URL` is a secret env var defined in CircleCI project settings.
|
||||||
|
# The URL comes from https://angular-team.slack.com/apps/A0F7VRE7N-circleci.
|
||||||
|
command: 'curl --request POST --header "Content-Type: application/json" --data "{\"text\":\":x: \`$CIRCLE_JOB\` job failed on build $CIRCLE_BUILD_NUM: $CIRCLE_BUILD_URL :scream:\"}" $SLACK_CARETAKER_WEBHOOK_URL'
|
||||||
when: on_fail
|
when: on_fail
|
||||||
|
|
||||||
legacy-unit-tests-local:
|
aio_monitoring_next:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
docker:
|
docker:
|
||||||
|
# This job needs Chrome to be globally installed because the tests run with Protractor
|
||||||
|
# which does not load the browser through the Bazel webtesting rules.
|
||||||
- image: *browsers_docker_image
|
- image: *browsers_docker_image
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
- run:
|
||||||
key: *cache_key
|
name: Run tests against https://next.angular.io/
|
||||||
- *define_env_vars
|
command: ./aio/scripts/test-production.sh https://next.angular.io/ $CI_AIO_MIN_PWA_SCORE
|
||||||
- *yarn_install
|
- run:
|
||||||
- run: yarn tsc -p packages
|
name: Notify caretaker about failure
|
||||||
- run: yarn tsc -p packages/examples
|
# `$SLACK_CARETAKER_WEBHOOK_URL` is a secret env var defined in CircleCI project settings.
|
||||||
- run: yarn tsc -p modules
|
# The URL comes from https://angular-team.slack.com/apps/A0F7VRE7N-circleci.
|
||||||
- run: yarn karma start ./karma-js.conf.js --single-run --browsers=ChromeNoSandbox
|
command: 'curl --request POST --header "Content-Type: application/json" --data "{\"text\":\":x: \`$CIRCLE_JOB\` job failed on build $CIRCLE_BUILD_NUM: $CIRCLE_BUILD_URL :scream:\"}" $SLACK_CARETAKER_WEBHOOK_URL'
|
||||||
|
when: on_fail
|
||||||
|
|
||||||
legacy-unit-tests-saucelabs:
|
legacy-unit-tests-saucelabs:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
@ -408,12 +554,8 @@ jobs:
|
|||||||
# and therefore the tunnel and Karma need to process a lot of file requests and tests.
|
# and therefore the tunnel and Karma need to process a lot of file requests and tests.
|
||||||
resource_class: xlarge
|
resource_class: xlarge
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *yarn_install
|
|
||||||
- run:
|
- run:
|
||||||
name: Preparing environment for running tests on Saucelabs.
|
name: Preparing environment for running tests on Saucelabs.
|
||||||
command: |
|
command: |
|
||||||
@ -424,7 +566,6 @@ jobs:
|
|||||||
command: ./scripts/saucelabs/start-tunnel.sh
|
command: ./scripts/saucelabs/start-tunnel.sh
|
||||||
background: true
|
background: true
|
||||||
- run: yarn tsc -p packages
|
- run: yarn tsc -p packages
|
||||||
- run: yarn tsc -p packages/examples
|
|
||||||
- run: yarn tsc -p modules
|
- run: yarn tsc -p modules
|
||||||
# Waits for the Saucelabs tunnel to be ready. This ensures that we don't run tests
|
# Waits for the Saucelabs tunnel to be ready. This ensures that we don't run tests
|
||||||
# too early without Saucelabs not being ready.
|
# too early without Saucelabs not being ready.
|
||||||
@ -432,78 +573,111 @@ jobs:
|
|||||||
- run: yarn karma start ./karma-js.conf.js --single-run --browsers=${KARMA_JS_BROWSERS}
|
- run: yarn karma start ./karma-js.conf.js --single-run --browsers=${KARMA_JS_BROWSERS}
|
||||||
- run: ./scripts/saucelabs/stop-tunnel.sh
|
- run: ./scripts/saucelabs/stop-tunnel.sh
|
||||||
|
|
||||||
legacy-e2e-tests:
|
|
||||||
<<: *job_defaults
|
|
||||||
docker:
|
|
||||||
- image: *browsers_docker_image
|
|
||||||
steps:
|
|
||||||
- checkout:
|
|
||||||
<<: *post_checkout
|
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *setup_circleci_bazel_config
|
|
||||||
- *yarn_install
|
|
||||||
- *setup_bazel_remote_execution
|
|
||||||
- attach_workspace:
|
|
||||||
at: dist
|
|
||||||
# Build the e2e tests using the existing Bazel "packages-dist" output that has been
|
|
||||||
# attached to this job. This avoids multiple rebuilds across various CI jobs.
|
|
||||||
- run: ./scripts/build-e2e-tests.sh --use-existing-packages-dist
|
|
||||||
- run:
|
|
||||||
name: Starting servers for e2e tests
|
|
||||||
command: yarn gulp serve serve-examples
|
|
||||||
background: true
|
|
||||||
- run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-e2e.conf.js --bundles=true
|
|
||||||
- run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-examples-e2e.conf.js --bundles=true
|
|
||||||
- run: NODE_PATH=$NODE_PATH:./dist/all yarn protractor ./protractor-perf.conf.js --bundles=true --dryrun
|
|
||||||
|
|
||||||
legacy-misc-tests:
|
legacy-misc-tests:
|
||||||
<<: *job_defaults
|
<<: *job_defaults
|
||||||
steps:
|
steps:
|
||||||
- checkout:
|
- *attach_workspace
|
||||||
<<: *post_checkout
|
- *init_environment
|
||||||
- restore_cache:
|
|
||||||
key: *cache_key
|
|
||||||
- *define_env_vars
|
|
||||||
- *yarn_install
|
|
||||||
- attach_workspace:
|
|
||||||
at: dist
|
|
||||||
- run: yarn gulp check-cycle
|
- run: yarn gulp check-cycle
|
||||||
# TODO: disabled because the Bazel packages-dist does not seem to have map files for
|
# TODO: disabled because the Bazel packages-dist does not seem to have map files for
|
||||||
# the ESM5/ES2015 output. See: https://github.com/angular/angular/issues/27966
|
# the ESM5/ES2015 output. See: https://github.com/angular/angular/issues/27966
|
||||||
# - run: yarn gulp source-map-test
|
# - run: yarn gulp source-map-test
|
||||||
|
|
||||||
|
# Job to run unit tests from angular/material2. Needs a browser since all
|
||||||
|
# component unit tests assume they're running in the browser environment.
|
||||||
|
material-unit-tests:
|
||||||
|
<<: *job_defaults
|
||||||
|
resource_class: xlarge
|
||||||
|
docker:
|
||||||
|
- image: *browsers_docker_image
|
||||||
|
# The Material unit tests support splitting the browsers across multiple CircleCI
|
||||||
|
# instances. Since by default this job launches two browsers, we run each browser
|
||||||
|
# in its own container instance.
|
||||||
|
# https://github.com/angular/material2/blob/7baeaa797b19da2d2998f0d26f6fede3c8a13714/test/karma.conf.js#L107-L110
|
||||||
|
parallelism: 2
|
||||||
|
environment:
|
||||||
|
# The Material unit tests also support launching the same browser multiple times by
|
||||||
|
# sharding individual specs across the defined multiple instances.
|
||||||
|
# See: https://github.com/angular/material2/blob/7baeaa797b19da2d2998f0d26f6fede3c8a13714/test/karma.conf.js#L113-L116
|
||||||
|
KARMA_PARALLEL_BROWSERS: 3
|
||||||
|
steps:
|
||||||
|
- *attach_workspace
|
||||||
|
- *init_environment
|
||||||
|
- run:
|
||||||
|
name: "Cloning Material repository"
|
||||||
|
command: ./scripts/ci/clone_angular_material_repo.sh
|
||||||
|
- restore_cache:
|
||||||
|
# Material directory must be kept in sync with the `$MATERIAL_REPO_TMP_DIR` env variable.
|
||||||
|
# It needs to be hardcoded here, because env variables interpolation is not supported.
|
||||||
|
keys:
|
||||||
|
- v2-angular-material-{{ checksum "/tmp/material2/yarn.lock" }}
|
||||||
|
- v2-angular-material-
|
||||||
|
- run:
|
||||||
|
name: Installing Material dependencies.
|
||||||
|
command: yarn --cwd ${MATERIAL_REPO_TMP_DIR} install --frozen-lockfile --non-interactive
|
||||||
|
# Save the cache before we run the Material unit tests script. This is necessary
|
||||||
|
# because we don't want to cache the node modules which have been modified to contain
|
||||||
|
# the attached Ivy package output.
|
||||||
|
- save_cache:
|
||||||
|
# Material directory must be kept in sync with the `$MATERIAL_REPO_TMP_DIR` env variable.
|
||||||
|
# It needs to be hardcoded here, because env variables interpolation is not supported.
|
||||||
|
key: v2-angular-material-{{ checksum "/tmp/material2/yarn.lock" }}
|
||||||
|
paths:
|
||||||
|
- "/tmp/material2/node_modules"
|
||||||
|
- run:
|
||||||
|
name: "Running Material unit tests"
|
||||||
|
command: ./scripts/ci/run_angular_material_unit_tests.sh
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
default_workflow:
|
default_workflow:
|
||||||
jobs:
|
jobs:
|
||||||
- lint
|
- setup
|
||||||
- test
|
- lint:
|
||||||
- test_ivy_aot
|
requires:
|
||||||
- build-packages-dist
|
- setup
|
||||||
- test_aio
|
- test:
|
||||||
- legacy-unit-tests-local
|
requires:
|
||||||
- legacy-unit-tests-saucelabs
|
- setup
|
||||||
|
- test_ivy_aot:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
|
- build-npm-packages:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
|
- build-ivy-npm-packages:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
|
- test_aio:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
|
- legacy-unit-tests-saucelabs:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
- deploy_aio:
|
- deploy_aio:
|
||||||
requires:
|
requires:
|
||||||
- test_aio
|
- test_aio
|
||||||
- legacy-e2e-tests:
|
|
||||||
requires:
|
|
||||||
- build-packages-dist
|
|
||||||
- legacy-misc-tests:
|
- legacy-misc-tests:
|
||||||
requires:
|
requires:
|
||||||
- build-packages-dist
|
- build-npm-packages
|
||||||
- test_aio_local:
|
- test_aio_local:
|
||||||
requires:
|
requires:
|
||||||
- build-packages-dist
|
- build-npm-packages
|
||||||
|
- test_aio_local_ivy:
|
||||||
|
requires:
|
||||||
|
- build-npm-packages
|
||||||
- test_aio_tools:
|
- test_aio_tools:
|
||||||
requires:
|
requires:
|
||||||
- build-packages-dist
|
- build-npm-packages
|
||||||
- test_docs_examples:
|
- test_docs_examples:
|
||||||
requires:
|
requires:
|
||||||
- build-packages-dist
|
- build-npm-packages
|
||||||
|
- test_docs_examples_ivy:
|
||||||
|
requires:
|
||||||
|
- build-ivy-npm-packages
|
||||||
- aio_preview:
|
- aio_preview:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
# Only run on PR builds. (There can be no previews for non-PR builds.)
|
# Only run on PR builds. (There can be no previews for non-PR builds.)
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
@ -513,7 +687,7 @@ workflows:
|
|||||||
- aio_preview
|
- aio_preview
|
||||||
- integration_test:
|
- integration_test:
|
||||||
requires:
|
requires:
|
||||||
- build-packages-dist
|
- build-npm-packages
|
||||||
- publish_snapshot:
|
- publish_snapshot:
|
||||||
# Note: no filters on this job because we want it to run for all upstream branches
|
# Note: no filters on this job because we want it to run for all upstream branches
|
||||||
# We'd really like to filter out pull requests here, but not yet available:
|
# We'd really like to filter out pull requests here, but not yet available:
|
||||||
@ -526,22 +700,48 @@ workflows:
|
|||||||
- integration_test
|
- integration_test
|
||||||
# Only publish if `aio`/`docs` tests using the locally built Angular packages pass
|
# Only publish if `aio`/`docs` tests using the locally built Angular packages pass
|
||||||
- test_aio_local
|
- test_aio_local
|
||||||
|
- test_aio_local_ivy
|
||||||
- test_docs_examples
|
- test_docs_examples
|
||||||
|
- test_docs_examples_ivy
|
||||||
# Get the artifacts to publish from the build-packages-dist job
|
# Get the artifacts to publish from the build-packages-dist job
|
||||||
# since the publishing script expects the legacy outputs layout.
|
# since the publishing script expects the legacy outputs layout.
|
||||||
- build-packages-dist
|
- build-npm-packages
|
||||||
- legacy-e2e-tests
|
- build-ivy-npm-packages
|
||||||
- legacy-misc-tests
|
|
||||||
- legacy-unit-tests-local
|
|
||||||
- legacy-unit-tests-saucelabs
|
- legacy-unit-tests-saucelabs
|
||||||
|
- legacy-misc-tests
|
||||||
|
- material-unit-tests:
|
||||||
|
requires:
|
||||||
|
- build-ivy-npm-packages
|
||||||
|
|
||||||
|
saucelabs_tests:
|
||||||
|
jobs:
|
||||||
|
- setup
|
||||||
|
- test_saucelabs_bazel:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
|
triggers:
|
||||||
|
- schedule:
|
||||||
|
# Runs the Saucelabs legacy tests every hour. We still want to run Saucelabs
|
||||||
|
# frequently as the caretaker needs up-to-date results when merging PRs or creating
|
||||||
|
# a new release. Also we primarily moved the Saucelabs job into a cronjob that doesn't
|
||||||
|
# run for PRs, in order to ensure that PRs are not affected by Saucelabs flakiness or
|
||||||
|
# incidents. This is still guaranteed (even if we run the job every hour).
|
||||||
|
cron: "0 * * * *"
|
||||||
|
filters: *publish_branches_filter
|
||||||
|
|
||||||
aio_monitoring:
|
aio_monitoring:
|
||||||
jobs:
|
jobs:
|
||||||
- aio_monitoring
|
- setup
|
||||||
|
- aio_monitoring_stable:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
|
- aio_monitoring_next:
|
||||||
|
requires:
|
||||||
|
- setup
|
||||||
triggers:
|
triggers:
|
||||||
- schedule:
|
- schedule:
|
||||||
cron: "0 0 * * *"
|
# Runs AIO monitoring jobs at 10:00AM every day.
|
||||||
|
cron: "0 10 * * *"
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#
|
#
|
||||||
# Usage: `setPublicVar <name> <value>`
|
# Usage: `setPublicVar <name> <value>`
|
||||||
function setPublicVar() {
|
function setPublicVar() {
|
||||||
setSecretVar $1 $2;
|
setSecretVar $1 "$2";
|
||||||
echo "$1=$2";
|
echo "$1=$2";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,3 +36,38 @@ function setSecretVar() {
|
|||||||
# Restore original shell options.
|
# Restore original shell options.
|
||||||
eval "$originalShellOptions";
|
eval "$originalShellOptions";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Create a function to set an environment variable, when called.
|
||||||
|
#
|
||||||
|
# Use this function for creating setter for public environment variables that require expensive or
|
||||||
|
# time-consuming computaions and may not be needed. When needed, you can call this function to set
|
||||||
|
# the environment variable (which will be available through `$BASH_ENV` from that point onwards).
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# - `<name>`: The name of the environment variable. The generated setter function will be
|
||||||
|
# `setPublicVar_<name>`.
|
||||||
|
# - `<code>`: The code to run to compute the value for the variable. Since this code should be
|
||||||
|
# executed lazily, it must be properly escaped. For example:
|
||||||
|
# ```sh
|
||||||
|
# # DO NOT do this:
|
||||||
|
# createPublicVarSetter MY_VAR "$(whoami)"; # `whoami` will be evaluated eagerly
|
||||||
|
#
|
||||||
|
# # DO this isntead:
|
||||||
|
# createPublicVarSetter MY_VAR "\$(whoami)"; # `whoami` will NOT be evaluated eagerly
|
||||||
|
# ```
|
||||||
|
#
|
||||||
|
# Usage: `createPublicVarSetter <name> <code>`
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# ```sh
|
||||||
|
# createPublicVarSetter MY_VAR 'echo "FOO"';
|
||||||
|
# echo $MY_VAR; # Not defined
|
||||||
|
#
|
||||||
|
# setPublicVar_MY_VAR;
|
||||||
|
# source $BASH_ENV;
|
||||||
|
# echo $MY_VAR; # FOO
|
||||||
|
# ```
|
||||||
|
function createPublicVarSetter() {
|
||||||
|
echo "setPublicVar_$1() { setPublicVar $1 \"$2\"; }" >> $BASH_ENV;
|
||||||
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
readonly envHelpersPath="`dirname $0`/env-helpers.inc.sh";
|
readonly projectDir=$(realpath "$(dirname ${BASH_SOURCE[0]})/..")
|
||||||
readonly getCommitRangePath="`dirname $0`/get-commit-range.js";
|
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;
|
||||||
@ -14,10 +15,15 @@ echo "source $envHelpersPath;" >> $BASH_ENV;
|
|||||||
####################################################################################################
|
####################################################################################################
|
||||||
# See https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables for more info.
|
# See https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables for more info.
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
setPublicVar PROJECT_ROOT "$(pwd)";
|
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
|
||||||
|
# `.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 2.45";
|
||||||
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` will only be available when `CIRCLE_COMPARE_URL` is also available (or can be
|
||||||
# retrieved via `get-compare-url.js`), i.e. on push builds (a.k.a. non-PR, non-scheduled builds and
|
# retrieved via `get-compare-url.js`), i.e. on push builds (a.k.a. non-PR, non-scheduled builds and
|
||||||
@ -28,13 +34,18 @@ setPublicVar CI_REPO_NAME "$CIRCLE_PROJECT_REPONAME";
|
|||||||
setPublicVar CI_REPO_OWNER "$CIRCLE_PROJECT_USERNAME";
|
setPublicVar CI_REPO_OWNER "$CIRCLE_PROJECT_USERNAME";
|
||||||
|
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
# Define "lazy" PUBLIC environment variables for CircleCI.
|
||||||
|
# (I.e. functions to set an environment variable when called.)
|
||||||
|
####################################################################################################
|
||||||
|
createPublicVarSetter CI_STABLE_BRANCH "\$(npm info @angular/core dist-tags.latest | sed -r 's/^\\s*([0-9]+\\.[0-9]+)\\.[0-9]+.*$/\\1.x/')";
|
||||||
|
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
# Define SECRET environment variables for CircleCI.
|
# Define SECRET environment variables for CircleCI.
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
setSecretVar CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN "$AIO_DEPLOY_TOKEN";
|
setSecretVar CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN "$AIO_DEPLOY_TOKEN";
|
||||||
setSecretVar CI_SECRET_PAYLOAD_FIREBASE_TOKEN "$ANGULAR_PAYLOAD_TOKEN";
|
setSecretVar CI_SECRET_PAYLOAD_FIREBASE_TOKEN "$ANGULAR_PAYLOAD_TOKEN";
|
||||||
# Defined in https://angular-team.slack.com/apps/A0F7VRE7N-circleci.
|
|
||||||
setSecretVar CI_SECRET_SLACK_CARETAKER_WEBHOOK_URL "$SLACK_CARETAKER_WEBHOOK_URL";
|
|
||||||
|
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
@ -50,6 +61,7 @@ else
|
|||||||
setPublicVar SAUCE_USERNAME "angular-ci";
|
setPublicVar SAUCE_USERNAME "angular-ci";
|
||||||
setSecretVar SAUCE_ACCESS_KEY "9b988f434ff8-fbca-8aa4-4ae3-35442987";
|
setSecretVar SAUCE_ACCESS_KEY "9b988f434ff8-fbca-8aa4-4ae3-35442987";
|
||||||
fi
|
fi
|
||||||
|
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-${CIRCLE_BUILD_NUM}-${CIRCLE_NODE_INDEX}"
|
||||||
@ -57,6 +69,15 @@ setPublicVar SAUCE_TUNNEL_IDENTIFIER "angular-${CIRCLE_BUILD_NUM}-${CIRCLE_NODE_
|
|||||||
# 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.
|
||||||
|
####################################################################################################
|
||||||
|
# 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
|
||||||
|
# their separate build setups.
|
||||||
|
setPublicVar MATERIAL_REPO_TMP_DIR "/tmp/material2"
|
||||||
|
setPublicVar MATERIAL_REPO_URL "https://github.com/angular/material2.git"
|
||||||
|
setPublicVar MATERIAL_REPO_BRANCH "ivy-2019"
|
||||||
|
|
||||||
# Source `$BASH_ENV` to make the variables available immediately.
|
# Source `$BASH_ENV` to make the variables available immediately.
|
||||||
source $BASH_ENV;
|
source $BASH_ENV;
|
||||||
|
@ -141,7 +141,7 @@ function getJson(url) {
|
|||||||
const opts = {headers: {Accept: 'application/json'}};
|
const opts = {headers: {Accept: 'application/json'}};
|
||||||
const onResponse = res => {
|
const onResponse = res => {
|
||||||
const statusCode = res.statusCode || -1;
|
const statusCode = res.statusCode || -1;
|
||||||
const isSuccess = (200 <= statusCode) && (statusCode <= 400);
|
const isSuccess = (200 <= statusCode) && (statusCode < 400);
|
||||||
let responseText = '';
|
let responseText = '';
|
||||||
|
|
||||||
res.
|
res.
|
||||||
|
103
.codefresh/Dockerfile.win-1809
Normal file
103
.codefresh/Dockerfile.win-1809
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
ARG core=mcr.microsoft.com/windows/servercore:1809
|
||||||
|
ARG target=mcr.microsoft.com/powershell:windowsservercore-1809
|
||||||
|
|
||||||
|
FROM $core as download
|
||||||
|
|
||||||
|
ARG node_version=10.13.0
|
||||||
|
ARG yarn_version=1.13.0
|
||||||
|
|
||||||
|
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
|
||||||
|
|
||||||
|
ENV GPG_VERSION 2.3.4
|
||||||
|
|
||||||
|
RUN Invoke-WebRequest $('https://files.gpg4win.org/gpg4win-vanilla-{0}.exe' -f $env:GPG_VERSION) -OutFile 'gpg4win.exe' -UseBasicParsing ; \
|
||||||
|
Start-Process .\gpg4win.exe -ArgumentList '/S' -NoNewWindow -Wait
|
||||||
|
|
||||||
|
RUN @( \
|
||||||
|
'94AE36675C464D64BAFA68DD7434390BDBE9B9C5', \
|
||||||
|
'FD3A5288F042B6850C66B31F09FE44734EB7990E', \
|
||||||
|
'71DCFD284A79C3B38668286BC97EC7A07EDE3FC1', \
|
||||||
|
'DD8F2338BAE7501E3DD5AC78C273792F7D83545D', \
|
||||||
|
'C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8', \
|
||||||
|
'B9AE9905FFD7803F25714661B63B535A4C206CA9', \
|
||||||
|
'77984A986EBC2AA786BC0F66B01FBB92821C587A', \
|
||||||
|
'8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600', \
|
||||||
|
'4ED778F539E3634C779C87C6D7062848A1AB005C', \
|
||||||
|
'A48C2BEE680E841632CD4E44F07496B3EB3C1762', \
|
||||||
|
'B9E2F5981AA6E0CD28160D9FF13993A75599653C' \
|
||||||
|
) | foreach { \
|
||||||
|
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys $_ ; \
|
||||||
|
}
|
||||||
|
|
||||||
|
ENV NODE_VERSION=$node_version
|
||||||
|
|
||||||
|
RUN Invoke-WebRequest $('https://nodejs.org/dist/v{0}/SHASUMS256.txt.asc' -f $env:NODE_VERSION) -OutFile 'SHASUMS256.txt.asc' -UseBasicParsing ; \
|
||||||
|
gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc
|
||||||
|
|
||||||
|
RUN Invoke-WebRequest $('https://nodejs.org/dist/v{0}/node-v{0}-win-x64.zip' -f $env:NODE_VERSION) -OutFile 'node.zip' -UseBasicParsing ; \
|
||||||
|
$sum = $(cat SHASUMS256.txt.asc | sls $(' node-v{0}-win-x64.zip' -f $env:NODE_VERSION)) -Split ' ' ; \
|
||||||
|
if ((Get-FileHash node.zip -Algorithm sha256).Hash -ne $sum[0]) { Write-Error 'SHA256 mismatch' } ; \
|
||||||
|
Expand-Archive node.zip -DestinationPath C:\ ; \
|
||||||
|
Rename-Item -Path $('C:\node-v{0}-win-x64' -f $env:NODE_VERSION) -NewName 'C:\nodejs'
|
||||||
|
|
||||||
|
ENV YARN_VERSION=$yarn_version
|
||||||
|
|
||||||
|
RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; \
|
||||||
|
Invoke-WebRequest $('https://yarnpkg.com/downloads/{0}/yarn-{0}.msi' -f $env:YARN_VERSION) -OutFile yarn.msi -UseBasicParsing ; \
|
||||||
|
$sig = Get-AuthenticodeSignature yarn.msi ; \
|
||||||
|
if ($sig.Status -ne 'Valid') { Write-Error 'Authenticode signature is not valid' } ; \
|
||||||
|
Write-Output $sig.SignerCertificate.Thumbprint ; \
|
||||||
|
if (@( \
|
||||||
|
'7E253367F8A102A91D04829E37F3410F14B68A5F', \
|
||||||
|
'AF764E1EA56C762617BDC757C8B0F3780A0CF5F9' \
|
||||||
|
) -notcontains $sig.SignerCertificate.Thumbprint) { Write-Error 'Unknown signer certificate' } ; \
|
||||||
|
Start-Process msiexec.exe -ArgumentList '/i', 'yarn.msi', '/quiet', '/norestart' -NoNewWindow -Wait
|
||||||
|
|
||||||
|
ENV GIT_VERSION 2.20.1
|
||||||
|
ENV GIT_DOWNLOAD_URL https://github.com/git-for-windows/git/releases/download/v${GIT_VERSION}.windows.1/MinGit-${GIT_VERSION}-busybox-64-bit.zip
|
||||||
|
ENV GIT_SHA256 9817ab455d9cbd0b09d8664b4afbe4bbf78d18b556b3541d09238501a749486c
|
||||||
|
|
||||||
|
RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; \
|
||||||
|
Invoke-WebRequest -UseBasicParsing $env:GIT_DOWNLOAD_URL -OutFile git.zip; \
|
||||||
|
if ((Get-FileHash git.zip -Algorithm sha256).Hash -ne $env:GIT_SHA256) {exit 1} ; \
|
||||||
|
Expand-Archive git.zip -DestinationPath C:\git; \
|
||||||
|
Remove-Item git.zip
|
||||||
|
|
||||||
|
FROM $target as baseimage
|
||||||
|
|
||||||
|
ENV NPM_CONFIG_LOGLEVEL info
|
||||||
|
|
||||||
|
COPY --from=download /nodejs /nodejs
|
||||||
|
COPY --from=download [ "/Program Files (x86)/yarn", "/yarn" ]
|
||||||
|
COPY --from=download /git /git
|
||||||
|
|
||||||
|
ARG SETX=/M
|
||||||
|
RUN setx %SETX% PATH "%PATH%;C:\nodejs;C:\yarn\bin;C:\git\cmd;C:\git\mingw64\bin;C:\git\usr\bin"
|
||||||
|
|
||||||
|
CMD [ "node.exe" ]
|
||||||
|
|
||||||
|
FROM baseimage
|
||||||
|
|
||||||
|
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
|
||||||
|
|
||||||
|
RUN Invoke-WebRequest -UseBasicParsing 'https://www.7-zip.org/a/7z1805-x64.exe' -OutFile 7z.exe; \
|
||||||
|
Start-Process -FilePath 'C:\\7z.exe' -ArgumentList '/S', '/D=C:\\7zip0' -NoNewWindow -Wait; \
|
||||||
|
Invoke-WebRequest -UseBasicParsing 'http://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20180531.tar.xz' -OutFile msys2.tar.xz; \
|
||||||
|
Start-Process -FilePath 'C:\\7zip\\7z' -ArgumentList 'e', 'msys2.tar.xz' -Wait; \
|
||||||
|
Start-Process -FilePath 'C:\\7zip\\7z' -ArgumentList 'x', 'msys2.tar', '-oC:\\' -Wait; \
|
||||||
|
Remove-Item msys2.tar.xz; \
|
||||||
|
Remove-Item msys2.tar; \
|
||||||
|
Remove-Item 7z.exe; \
|
||||||
|
Remove-Item -Recurse 7zip; \
|
||||||
|
[Environment]::SetEnvironmentVariable('Path', $env:Path + ';C:\msys64\usr\bin', [System.EnvironmentVariableTarget]::Machine); \
|
||||||
|
[Environment]::SetEnvironmentVariable('BAZEL_SH', 'C:\msys64\usr\bin\bash.exe', [System.EnvironmentVariableTarget]::Machine); \
|
||||||
|
Invoke-WebRequest -UseBasicParsing 'https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe' -OutFile vc_redist.x64.exe; \
|
||||||
|
Start-Process 'c:\\vc_redist.x64.exe' -ArgumentList '/Install', '/Passive', '/NoRestart' -NoNewWindow -Wait; \
|
||||||
|
Remove-Item vc_redist.x64.exe
|
||||||
|
|
||||||
|
# Add a fix for https://github.com/docker/for-win/issues/2920 as entry point to the container.
|
||||||
|
SHELL ["cmd", "/c"]
|
||||||
|
COPY "fix-msys64.cmd" "C:\\fix-msys64.cmd"
|
||||||
|
ENTRYPOINT cmd /C C:\\fix-msys64.cmd && cmd /c
|
||||||
|
|
||||||
|
CMD ["cmd.exe"]
|
33
.codefresh/README.md
Normal file
33
.codefresh/README.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# CodeFresh configuration
|
||||||
|
|
||||||
|
[](https://g.codefresh.io/public/accounts/angular/pipelines/angular/angular/angular)
|
||||||
|
|
||||||
|
This folder contains configuration for the [CodeFresh](<https://codefresh.io/>) based CI checks for this repository.
|
||||||
|
|
||||||
|
## The build pipeline
|
||||||
|
|
||||||
|
CodeFresh uses a several pipeline for each repository. The `codefresh.yml` file defines pipeline [build steps](https://codefresh.io/docs/docs/configure-ci-cd-pipeline/introduction-to-codefresh-pipelines/) for this repository.
|
||||||
|
|
||||||
|
Run results can be seen in the GitHub checks interface and in the [public pipeline](https://g.codefresh.io/public/accounts/angular/pipelines/angular/angular/angular)
|
||||||
|
|
||||||
|
Although most configuration is done via `pipeline.yml`, some options are only available in the online [pipeline settings](https://g.codefresh.io/pipelines/angular/services?repoOwner=angular&repoName=angular&project=angular%2Fangular&context=github&serviceName=angular%2Fangular), which needs a login to access.
|
||||||
|
|
||||||
|
|
||||||
|
## Caretaker
|
||||||
|
|
||||||
|
CodeFresh status can be found at <http://status.codefresh.io/>.
|
||||||
|
|
||||||
|
Issues related to the CodeFresh setup should be escalated to the Tools Team via the current caretaker, followed by Alex Eagle and Filipe Silva.
|
||||||
|
|
||||||
|
## Rollout strategy
|
||||||
|
|
||||||
|
Currently it is only used for tests on Windows platforms, on the master branch, and without pushing user-facing reports. It's only possible to see current builds in the [public pipeline dashboard](https://g.codefresh.io/public/accounts/angular/pipelines/angular/angular/angular).
|
||||||
|
|
||||||
|
After a week or two of running like this, we should reassess how stable and reliable it is.
|
||||||
|
|
||||||
|
Next steps include:
|
||||||
|
- building PRs
|
||||||
|
- showing build status publicly
|
||||||
|
- blocking PRs that break the build
|
||||||
|
- expanding the test suite
|
||||||
|
|
42
.codefresh/bazel.rc
Normal file
42
.codefresh/bazel.rc
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# 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 CodeFresh and shared between
|
||||||
|
# builds. This helps speed up the analysis time significantly with Bazel managed node dependencies
|
||||||
|
# on the CI.
|
||||||
|
# https://codefresh.io/docs/docs/configure-ci-cd-pipeline/introduction-to-codefresh-pipelines/#caching-the-artifacts-of-your-build-system
|
||||||
|
build --repository_cache=C:/codefresh/volume/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 CodeFresh VMs
|
||||||
|
# TODO(filipesilva): determine the correct memory limit
|
||||||
|
build --local_resources=8000,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
|
||||||
|
|
||||||
|
# Include PATH in Windows build/tests
|
||||||
|
# https://github.com/bazelbuild/rules_typescript/pull/356
|
||||||
|
build --action_env=PATH
|
||||||
|
test --action_env=PATH --test_env=PATH
|
||||||
|
|
||||||
|
# Exclude tests known to not work on Windows.
|
||||||
|
|
||||||
|
# Chrome web tests are currently broken.
|
||||||
|
test --test_tag_filters=-browser:chromium-local
|
26
.codefresh/codefresh.yml
Normal file
26
.codefresh/codefresh.yml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
version: '1.0'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
BuildImage:
|
||||||
|
type: build
|
||||||
|
image_name: node-bazel-windows
|
||||||
|
working_directory: ./.codefresh
|
||||||
|
no_cf_cache: true
|
||||||
|
build_arguments:
|
||||||
|
- node_version=10.13.0
|
||||||
|
- yarn_version=1.13.0
|
||||||
|
dockerfile: ./Dockerfile.win-1809
|
||||||
|
|
||||||
|
RunTests:
|
||||||
|
title: Run Example
|
||||||
|
image: ${{BuildImage}}
|
||||||
|
commands:
|
||||||
|
# Install dependencies
|
||||||
|
- yarn install --frozen-lockfile --non-interactive --network-timeout 100000 --no-progress
|
||||||
|
# Add Bazel CI config
|
||||||
|
- copy .codefresh\bazel.rc %ProgramData%\bazel.bazelrc
|
||||||
|
# Run tests
|
||||||
|
- yarn bazel test //tools/ts-api-guardian:all //packages/language-service/test //packages/compiler/test //packages/compiler-cli/test:ngc //packages/compiler-cli/test/ngtsc:ngtsc
|
||||||
|
- yarn test-ivy-aot //packages/animations/test //packages/common/test //packages/forms/test //packages/http/test //packages/platform-browser/test //packages/platform-browser-dynamic/test //packages/router/test
|
||||||
|
- yarn bazel test //tools/public_api_guard/...
|
||||||
|
- yarn bazel test //packages/compiler-cli/integrationtest:integrationtest //packages/compiler-cli/test/compliance:compliance
|
6
.codefresh/fix-msys64.cmd
Normal file
6
.codefresh/fix-msys64.cmd
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
@echo off
|
||||||
|
REM Fix for https://github.com/docker/for-win/issues/2920
|
||||||
|
REM echo "Fixing msys64 folder..."
|
||||||
|
REM Touch all .dll files inside C:\msys64\
|
||||||
|
forfiles /p C:\msys64\ /s /m *.dll /c "cmd /c Copy /B @path+,, >NUL"
|
||||||
|
REM echo "Fixed msys64 folder."
|
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -5,5 +5,8 @@
|
|||||||
*.js eol=lf
|
*.js eol=lf
|
||||||
*.ts eol=lf
|
*.ts eol=lf
|
||||||
|
|
||||||
|
# API guardian patch must always use LF for tests to work
|
||||||
|
*.patch eol=lf
|
||||||
|
|
||||||
# Must keep Windows line ending to be parsed correctly
|
# Must keep Windows line ending to be parsed correctly
|
||||||
scripts/windows/packages.txt eol=crlf
|
scripts/windows/packages.txt eol=crlf
|
||||||
|
177
.github/CODEOWNERS
vendored
177
.github/CODEOWNERS
vendored
@ -39,12 +39,14 @@
|
|||||||
# (just to make this file easier to understand)
|
# (just to make this file easier to understand)
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
|
# alan-agius4 - Alan Agius
|
||||||
# alexeagle - Alex Eagle
|
# alexeagle - Alex Eagle
|
||||||
# alxhub - Alex Rickabaugh
|
# alxhub - Alex Rickabaugh
|
||||||
# AndrewKushnir - Andrew Kushnir
|
# AndrewKushnir - Andrew Kushnir
|
||||||
# andrewseguin - Andrew Seguin
|
# andrewseguin - Andrew Seguin
|
||||||
# benlesh - Ben Lesh
|
# benlesh - Ben Lesh
|
||||||
# brandonroberts - Brandon Roberts
|
# brandonroberts - Brandon Roberts
|
||||||
|
# devversion - Paul Gschwendtner
|
||||||
# filipesilva - Filipe Silva
|
# filipesilva - Filipe Silva
|
||||||
# gkalpak - George Kalpakas
|
# gkalpak - George Kalpakas
|
||||||
# hansl - Hans Larsen
|
# hansl - Hans Larsen
|
||||||
@ -54,6 +56,7 @@
|
|||||||
# kara - Kara Erickson
|
# kara - Kara Erickson
|
||||||
# kyliau - Keen Yee Liau
|
# kyliau - Keen Yee Liau
|
||||||
# matsko - Matias Niemelä
|
# matsko - Matias Niemelä
|
||||||
|
# mgechev - Minko Gechev
|
||||||
# mhevery - Misko Hevery
|
# mhevery - Misko Hevery
|
||||||
# ocombe - Olivier Combe
|
# ocombe - Olivier Combe
|
||||||
# petebacondarwin - Pete Bacon Darwin
|
# petebacondarwin - Pete Bacon Darwin
|
||||||
@ -85,6 +88,7 @@
|
|||||||
# - IgorMinar
|
# - IgorMinar
|
||||||
# - kara
|
# - kara
|
||||||
# - mhevery
|
# - mhevery
|
||||||
|
# - alexeagle
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
# ===========================================================
|
||||||
@ -113,6 +117,7 @@
|
|||||||
# - alexeagle
|
# - alexeagle
|
||||||
# - kyliau
|
# - kyliau
|
||||||
# - IgorMinar
|
# - IgorMinar
|
||||||
|
# - mgechev
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
# ===========================================================
|
||||||
@ -122,6 +127,7 @@
|
|||||||
# - alexeagle
|
# - alexeagle
|
||||||
# - filipesilva
|
# - filipesilva
|
||||||
# - hansl
|
# - hansl
|
||||||
|
# - mgechev
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
# ===========================================================
|
||||||
@ -212,6 +218,7 @@
|
|||||||
#
|
#
|
||||||
# - gkalpak
|
# - gkalpak
|
||||||
# - petebacondarwin
|
# - petebacondarwin
|
||||||
|
# - jasonaden
|
||||||
|
|
||||||
|
|
||||||
# ===========================================================
|
# ===========================================================
|
||||||
@ -269,6 +276,7 @@
|
|||||||
# @angular/fw-docs-intro
|
# @angular/fw-docs-intro
|
||||||
# ===========================================================
|
# ===========================================================
|
||||||
#
|
#
|
||||||
|
# - jenniferfell
|
||||||
# - brandonroberts
|
# - brandonroberts
|
||||||
# - IgorMinar
|
# - IgorMinar
|
||||||
# - stephenfluin
|
# - stephenfluin
|
||||||
@ -290,6 +298,29 @@
|
|||||||
# - IgorMinar
|
# - 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
|
# @angular/fw-docs-marketing
|
||||||
# ===========================================================
|
# ===========================================================
|
||||||
@ -310,6 +341,9 @@
|
|||||||
# ===========================================================
|
# ===========================================================
|
||||||
#
|
#
|
||||||
# - alexeagle
|
# - alexeagle
|
||||||
|
# - devversion
|
||||||
|
# - filipesilva
|
||||||
|
# - gkalpak
|
||||||
# - IgorMinar
|
# - IgorMinar
|
||||||
|
|
||||||
|
|
||||||
@ -344,10 +378,19 @@
|
|||||||
|
|
||||||
/packages/animations/** @angular/fw-animations @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
/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
|
/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/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/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/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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
@ -370,20 +413,22 @@
|
|||||||
|
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
# packages/compiler-cli/src/ngcc/
|
# packages/compiler-cli/ngcc/
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
/packages/compiler-cli/src/ngcc/** @angular/fw-ngcc @angular/framework-global-approvers
|
/packages/compiler-cli/ngcc/** @angular/fw-ngcc @angular/framework-global-approvers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
# @angular/compiler-cli/ngtools
|
# Framework/cli integration
|
||||||
#
|
#
|
||||||
# a rule to control API changes between @angular/compiler-cli and @angular/cli
|
# 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
|
/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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -402,6 +447,15 @@
|
|||||||
/packages/platform-browser-dynamic/** @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/** @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/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/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/examples/attribute-directives/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
@ -410,6 +464,8 @@
|
|||||||
/aio/content/guide/bootstrapping.md @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/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/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/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/images/guide/component-interaction/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
@ -425,7 +481,13 @@
|
|||||||
/aio/content/examples/dependency-injection-in-action/** @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/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-pattern.md @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/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/examples/dynamic-component-loader/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
@ -452,12 +514,9 @@
|
|||||||
/aio/content/images/guide/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/examples/ngcontainer/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
/aio/content/images/guide/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/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/examples/ngmodules/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
/aio/content/examples/ngmodule/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/ngmodule/** @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-api.md @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
@ -469,6 +528,9 @@
|
|||||||
/aio/content/guide/module-types.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/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/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/images/guide/template-syntax/** @angular/fw-core @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
|
|
||||||
@ -491,6 +553,10 @@
|
|||||||
/aio/content/examples/structural-directives/** @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/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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
@ -516,6 +582,7 @@
|
|||||||
/aio/content/guide/elements.md @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
|
# @angular/forms
|
||||||
# ================================================
|
# ================================================
|
||||||
@ -577,6 +644,7 @@
|
|||||||
/packages/service-worker/** @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
/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/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/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-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-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-devops.md @angular/fw-service-worker @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
@ -590,6 +658,7 @@
|
|||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
/packages/upgrade/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
/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
|
/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/guide/upgrade.md @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/examples/upgrade-module/** @angular/fw-upgrade @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
@ -646,6 +715,7 @@ testing/** @angular/fw-test
|
|||||||
/packages/platform-browser/src/security/** @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/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/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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -671,11 +741,20 @@ testing/** @angular/fw-test
|
|||||||
|
|
||||||
/aio/* @angular/docs-infra @angular/framework-global-approvers
|
/aio/* @angular/docs-infra @angular/framework-global-approvers
|
||||||
/aio/aio-builds-setup/** @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/scripts/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
/aio/src/** @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/tests/** @angular/docs-infra @angular/framework-global-approvers
|
||||||
/aio/tools/** @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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
@ -683,25 +762,36 @@ testing/** @angular/fw-test
|
|||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
/aio/content/guide/quickstart.md @angular/fw-docs-intro @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
/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/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
|
# Docs: observables
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
/aio/content/examples/observables/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/images/guide/observables/** @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
|
||||||
/aio/content/guide/observables.md @angular/fw-docs-observables @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
/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/comparing-observables.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/images/guide/observables-in-angular/** @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/guide/observables-in-angular.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/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/guide/practical-observable-usage.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
|
/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/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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -712,12 +802,36 @@ testing/** @angular/fw-test
|
|||||||
/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/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/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/typescript-configuration.md @angular/fw-docs-packaging @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
/aio/content/guide/setup-systemjs-anatomy.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/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/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/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/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/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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -726,6 +840,7 @@ testing/** @angular/fw-test
|
|||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
/aio/content/marketing/** @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
/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/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/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
|
/aio/content/license.md @angular/fw-docs-marketing @angular/framework-global-approvers @angular/framework-global-approvers-for-docs-only-changes
|
||||||
@ -739,20 +854,50 @@ testing/** @angular/fw-test
|
|||||||
/* @angular/fw-dev-infra
|
/* @angular/fw-dev-infra
|
||||||
/.buildkite/** @angular/fw-dev-infra
|
/.buildkite/** @angular/fw-dev-infra
|
||||||
/.circleci/** @angular/fw-dev-infra
|
/.circleci/** @angular/fw-dev-infra
|
||||||
|
/.codefresh/** @angular/fw-dev-infra
|
||||||
/.github/** @angular/fw-dev-infra
|
/.github/** @angular/fw-dev-infra
|
||||||
|
/.vscode/** @angular/fw-dev-infra
|
||||||
/docs/BAZEL.md @angular/fw-dev-infra
|
/docs/BAZEL.md @angular/fw-dev-infra
|
||||||
|
/packages/* @angular/fw-dev-infra
|
||||||
/scripts/** @angular/fw-dev-infra
|
/scripts/** @angular/fw-dev-infra
|
||||||
/third_party/** @angular/fw-dev-infra
|
/third_party/** @angular/fw-dev-infra
|
||||||
/tools/** @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
|
*.bzl @angular/fw-dev-infra
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ================================================
|
||||||
|
# Material CI
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
/tools/material-ci/** @angular/fw-core @angular/framework-global-approvers
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ================================================
|
# ================================================
|
||||||
# Public API
|
# Public API
|
||||||
# ================================================
|
# ================================================
|
||||||
|
|
||||||
/tools/public_api_guard/** @angular/fw-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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
4
.github/ISSUE_TEMPLATE/1-bug-report.md
vendored
4
.github/ISSUE_TEMPLATE/1-bug-report.md
vendored
@ -37,7 +37,9 @@ Please create and share minimal reproduction of the issue starting with this tem
|
|||||||
<!-- ✍️--> https://stackblitz.com/...
|
<!-- ✍️--> https://stackblitz.com/...
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
If StackBlitz is not suitable for reproduction of your issue, please create a minimal GitHub repository with the reproduction of the issue. Share the link to the repo below along with step-by-step instructions to reproduce the problem, as well as expected and actual behavior.
|
If StackBlitz is not suitable for reproduction of your issue, please create a minimal GitHub repository with the reproduction of the issue.
|
||||||
|
A good way to make a minimal reproduction is to create a new app via `ng new repro-app` and add the minimum possible code to show the problem.
|
||||||
|
Share the link to the repo below along with step-by-step instructions to reproduce the problem, as well as expected and actual behavior.
|
||||||
|
|
||||||
Issues that don't have enough info and can't be reproduced will be closed.
|
Issues that don't have enough info and can't be reproduced will be closed.
|
||||||
|
|
||||||
|
20
.github/angular-robot.yml
vendored
20
.github/angular-robot.yml
vendored
@ -35,17 +35,19 @@ merge:
|
|||||||
# 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:
|
||||||
- "LICENSE"
|
- "LICENSE"
|
||||||
- "modules/**"
|
- "modules/benchmarks/**"
|
||||||
|
- "modules/system.d.ts"
|
||||||
- "packages/**"
|
- "packages/**"
|
||||||
# list of patterns to ignore for the files changed by the PR
|
# list of patterns to ignore for the files changed by the PR
|
||||||
exclude:
|
exclude:
|
||||||
- "packages/*"
|
- "packages/*"
|
||||||
- "packages/bazel/*"
|
- "packages/bazel/*"
|
||||||
|
- "packages/bazel/src/api-extractor/**"
|
||||||
- "packages/bazel/src/builders/**"
|
- "packages/bazel/src/builders/**"
|
||||||
- "packages/bazel/src/ng_package/**"
|
- "packages/bazel/src/ng_package/**"
|
||||||
- "packages/bazel/src/protractor/**"
|
- "packages/bazel/src/protractor/**"
|
||||||
- "packages/bazel/src/schematics/**"
|
- "packages/bazel/src/schematics/**"
|
||||||
- "packages/compiler-cli/src/ngcc/**"
|
- "packages/compiler-cli/ngcc/**"
|
||||||
- "packages/docs/**"
|
- "packages/docs/**"
|
||||||
- "packages/elements/schematics/**"
|
- "packages/elements/schematics/**"
|
||||||
- "packages/examples/**"
|
- "packages/examples/**"
|
||||||
@ -56,9 +58,9 @@ merge:
|
|||||||
- "**/.gitkeep"
|
- "**/.gitkeep"
|
||||||
- "**/yarn.lock"
|
- "**/yarn.lock"
|
||||||
- "**/package.json"
|
- "**/package.json"
|
||||||
|
- "**/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/**"
|
||||||
@ -103,6 +105,11 @@ merge:
|
|||||||
requiredStatuses:
|
requiredStatuses:
|
||||||
- "ci/circleci: build"
|
- "ci/circleci: build"
|
||||||
- "ci/circleci: lint"
|
- "ci/circleci: lint"
|
||||||
|
- "ci/circleci: publish_snapshot"
|
||||||
|
- "ci/angular: size"
|
||||||
|
- "cla/google"
|
||||||
|
- "google3"
|
||||||
|
|
||||||
|
|
||||||
# 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
|
||||||
# {{MERGE_LABEL}} will be replaced by the value of the mergeLabel option
|
# {{MERGE_LABEL}} will be replaced by the value of the mergeLabel option
|
||||||
@ -160,3 +167,10 @@ triagePR:
|
|||||||
- "effort*"
|
- "effort*"
|
||||||
- "risk*"
|
- "risk*"
|
||||||
- "comp: *"
|
- "comp: *"
|
||||||
|
|
||||||
|
# options for rerunning CI
|
||||||
|
rerunCircleCI:
|
||||||
|
# set to true to disable
|
||||||
|
disabled: false
|
||||||
|
# the label which when added triggers a rerun of the default CircleCI workflow
|
||||||
|
triggerRerunLabel: "PR action: rerun CI at HEAD"
|
||||||
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,21 +1,22 @@
|
|||||||
.DS_STORE
|
.DS_STORE
|
||||||
|
|
||||||
/dist/
|
/dist/
|
||||||
/bazel-*
|
/bazel-out
|
||||||
/integration/bazel/bazel-*
|
/integration/bazel/bazel-*
|
||||||
e2e_test.*
|
e2e_test.*
|
||||||
node_modules
|
node_modules
|
||||||
bower_components
|
|
||||||
tools/gulp-tasks/cldr/cldr-data/
|
tools/gulp-tasks/cldr/cldr-data/
|
||||||
|
|
||||||
# Include when developing application packages.
|
# Include when developing application packages.
|
||||||
pubspec.lock
|
pubspec.lock
|
||||||
.c9
|
.c9
|
||||||
.idea/
|
.idea/
|
||||||
|
.devcontainer
|
||||||
.settings/
|
.settings/
|
||||||
|
.vscode/launch.json
|
||||||
|
.vscode/settings.json
|
||||||
*.swo
|
*.swo
|
||||||
modules/.settings
|
modules/.settings
|
||||||
.vscode
|
|
||||||
modules/.vscode
|
modules/.vscode
|
||||||
|
|
||||||
# Don't check in secret files
|
# Don't check in secret files
|
||||||
|
23
.vscode/README.md
vendored
Normal file
23
.vscode/README.md
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To use the recommended settings follow the steps below:
|
||||||
|
|
||||||
|
- install <https://marketplace.visualstudio.com/items?itemName=xaver.clang-format>
|
||||||
|
- copy `.vscode/recommended-settings.json` to `.vscode/settings.json`
|
||||||
|
- restart the editor
|
||||||
|
|
||||||
|
If you already have your custom workspace settings you should instead manually merge the file content.
|
||||||
|
|
||||||
|
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).
|
||||||
|
|
||||||
|
## Editing `.vscode/recommended-settings.json`
|
||||||
|
|
||||||
|
If you wish to add extra configuration items please keep in mind any settings you add 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.
|
12
.vscode/extensions.json
vendored
Normal file
12
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
// See http://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
|
||||||
|
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
|
||||||
|
|
||||||
|
// List of extensions which should be recommended for users of this workspace.
|
||||||
|
"recommendations": [
|
||||||
|
"devondcarew.bazel-code",
|
||||||
|
"gkalpak.aio-docs-utils",
|
||||||
|
"ms-vscode.vscode-typescript-tslint-plugin",
|
||||||
|
"xaver.clang-format",
|
||||||
|
],
|
||||||
|
}
|
31
.vscode/recommended-settings.json
vendored
Normal file
31
.vscode/recommended-settings.json
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
// Format js and ts files on save with `clang-format.executable`
|
||||||
|
// If `clang-format.executable` is not being used, these two settings should be removed otherwise it will break existing formatting.
|
||||||
|
// You can instead run `yarn gulp format` to manually format your code.
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
},
|
||||||
|
// Please install https://marketplace.visualstudio.com/items?itemName=xaver.clang-format to take advantage of `clang-format` in VSCode.
|
||||||
|
// (See https://clang.llvm.org/docs/ClangFormat.html for more info `clang-format`.)
|
||||||
|
"clang-format.executable": "${workspaceRoot}/node_modules/.bin/clang-format",
|
||||||
|
// Exclude third party modules and build artifacts from the editor watchers/searches.
|
||||||
|
"files.watcherExclude": {
|
||||||
|
"**/.git/objects/**": true,
|
||||||
|
"**/.git/subtree-cache/**": true,
|
||||||
|
"**/node_modules/**": true,
|
||||||
|
"**/bazel-out/**": true,
|
||||||
|
"**/dist/**": true,
|
||||||
|
"**/aio/src/generated/**": true,
|
||||||
|
},
|
||||||
|
"search.exclude": {
|
||||||
|
"**/node_modules": true,
|
||||||
|
"**/bower_components": true,
|
||||||
|
"**/bazel-out": true,
|
||||||
|
"**/dist": true,
|
||||||
|
"**/aio/src/generated": true,
|
||||||
|
},
|
||||||
|
"git.ignoreLimitWarning": true,
|
||||||
|
}
|
98
BUILD.bazel
98
BUILD.bazel
@ -1,22 +1,32 @@
|
|||||||
package(default_visibility = ["//visibility:public"])
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
load("@build_bazel_rules_nodejs//:defs.bzl", "node_modules_filegroup")
|
load("//tools:defaults.bzl", "karma_web_test")
|
||||||
|
|
||||||
exports_files([
|
exports_files([
|
||||||
"tsconfig.json",
|
|
||||||
"LICENSE",
|
"LICENSE",
|
||||||
"protractor-perf.conf.js",
|
"protractor-perf.conf.js",
|
||||||
|
"karma-js.conf.js",
|
||||||
|
"browser-providers.conf.js",
|
||||||
])
|
])
|
||||||
|
|
||||||
|
alias(
|
||||||
|
name = "tsconfig.json",
|
||||||
|
actual = "//packages:tsconfig-build.json",
|
||||||
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "web_test_bootstrap_scripts",
|
name = "web_test_bootstrap_scripts",
|
||||||
# do not sort
|
# do not sort
|
||||||
srcs = [
|
srcs = [
|
||||||
"@ngdeps//node_modules/reflect-metadata:Reflect.js",
|
"@npm//node_modules/core-js:client/core.js",
|
||||||
"@ngdeps//node_modules/zone.js:dist/zone.js",
|
"@npm//node_modules/zone.js:dist/zone.js",
|
||||||
"@ngdeps//node_modules/zone.js:dist/zone-testing.js",
|
"@npm//node_modules/zone.js:dist/zone-testing.js",
|
||||||
"@ngdeps//node_modules/zone.js:dist/task-tracking.js",
|
"@npm//node_modules/zone.js:dist/task-tracking.js",
|
||||||
"//:test-events.js",
|
"//:test-events.js",
|
||||||
|
"//:shims_for_IE.js",
|
||||||
|
# Including systemjs because it defines `__eval`, which produces correct stack traces.
|
||||||
|
"@npm//node_modules/systemjs:dist/system.src.js",
|
||||||
|
"@npm//node_modules/reflect-metadata:Reflect.js",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -25,32 +35,58 @@ filegroup(
|
|||||||
srcs = [
|
srcs = [
|
||||||
# We also declare the unminfied AngularJS files since these can be used for
|
# We also declare the unminfied AngularJS files since these can be used for
|
||||||
# local debugging (e.g. see: packages/upgrade/test/common/test_helpers.ts)
|
# local debugging (e.g. see: packages/upgrade/test/common/test_helpers.ts)
|
||||||
"@ngdeps//node_modules/angular:angular.js",
|
"@npm//node_modules/angular:angular.js",
|
||||||
"@ngdeps//node_modules/angular:angular.min.js",
|
"@npm//node_modules/angular:angular.min.js",
|
||||||
"@ngdeps//node_modules/angular-1.5:angular.js",
|
"@npm//node_modules/angular-1.5:angular.js",
|
||||||
"@ngdeps//node_modules/angular-1.5:angular.min.js",
|
"@npm//node_modules/angular-1.5:angular.min.js",
|
||||||
"@ngdeps//node_modules/angular-1.6:angular.js",
|
"@npm//node_modules/angular-1.6:angular.js",
|
||||||
"@ngdeps//node_modules/angular-1.6:angular.min.js",
|
"@npm//node_modules/angular-1.6:angular.min.js",
|
||||||
"@ngdeps//node_modules/angular-mocks:angular-mocks.js",
|
"@npm//node_modules/angular-mocks:angular-mocks.js",
|
||||||
"@ngdeps//node_modules/angular-mocks-1.5:angular-mocks.js",
|
"@npm//node_modules/angular-mocks-1.5:angular-mocks.js",
|
||||||
"@ngdeps//node_modules/angular-mocks-1.6:angular-mocks.js",
|
"@npm//node_modules/angular-mocks-1.6:angular-mocks.js",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
|
# To run a karma_web_test target locally on SauceLabs:
|
||||||
|
# 1) have SAUCE_USERNAME, SAUCE_ACCESS_KEY (and optionally a SAUCE_TUNNEL_IDENTIFIER) set in your environment
|
||||||
# A nodejs_binary for @angular/bazel/ngc-wrapped to use by default in
|
# 2) open a sauce connection with `./scripts/saucelabs/start-tunnel.sh`
|
||||||
# ng_module that depends on @npm//@angular/bazel instead of the
|
# NOTE: start-tunnel.sh uses `node_modules/sauce-connect` which is current linux specific:
|
||||||
# output of the //packages/bazel/src/ngc-wrapped ts_library rule. This
|
# "sauce-connect": "https://saucelabs.com/downloads/sc-4.5.3-linux.tar.gz".
|
||||||
# default is for downstream users that depend on the @angular/bazel npm
|
# On OSX or Windows you'll need to use the appropriate sauce-connect binary.
|
||||||
# package. The generated @npm//@angular/bazel/ngc-wrapped target
|
# 3) run target with `yarn bazel test --config=saucelabs <target>`
|
||||||
# does not work because it does not have the node `--expose-gc` flag
|
# NOTE: --config=saucelabs is required as it makes the SAUCE_XXX environment variables available to
|
||||||
# set which is required to support the call to `global.gc()`.
|
# the action. See /.bazelrc.
|
||||||
nodejs_binary(
|
karma_web_test(
|
||||||
name = "@angular/bazel/ngc-wrapped",
|
name = "test_web_all",
|
||||||
configuration_env_vars = ["compile"],
|
tags = [
|
||||||
data = ["@npm//@angular/bazel"],
|
"local",
|
||||||
entry_point = "@angular/bazel/src/ngc-wrapped/index.js",
|
"manual",
|
||||||
install_source_map_support = False,
|
"saucelabs",
|
||||||
templated_args = ["--node_options=--expose-gc"],
|
],
|
||||||
|
deps = [
|
||||||
|
# We combine all tests into a single karma_web_test target
|
||||||
|
# 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/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)
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
677
CHANGELOG.md
677
CHANGELOG.md
@ -1,3 +1,680 @@
|
|||||||
|
<a name="8.0.0-rc.4"></a>
|
||||||
|
# [8.0.0-rc.4](https://github.com/angular/angular/compare/8.0.0-rc.3...8.0.0-rc.4) (2019-05-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Directly spawn native Bazel binary ([#30306](https://github.com/angular/angular/issues/30306)) ([d1fcc2b](https://github.com/angular/angular/commit/d1fcc2b))
|
||||||
|
* **bazel:** pass correct arguments to http_server in Windows ([#30346](https://github.com/angular/angular/issues/30346)) ([71eba45](https://github.com/angular/angular/commit/71eba45)), closes [#29785](https://github.com/angular/angular/issues/29785)
|
||||||
|
* **bazel:** Use existing npm/yarn lock files ([#30438](https://github.com/angular/angular/issues/30438)) ([3136d9f](https://github.com/angular/angular/commit/3136d9f))
|
||||||
|
* **compiler:** ensure strict mode when evaluating in JIT ([#30122](https://github.com/angular/angular/issues/30122)) ([192f108](https://github.com/angular/angular/commit/192f108))
|
||||||
|
* **core:** migrations not always migrating all files ([#30269](https://github.com/angular/angular/issues/30269)) ([e8ceae1](https://github.com/angular/angular/commit/e8ceae1))
|
||||||
|
* **core:** static-query migration errors not printed properly ([#30458](https://github.com/angular/angular/issues/30458)) ([fde3f46](https://github.com/angular/angular/commit/fde3f46))
|
||||||
|
* **core:** static-query migration fails with default parameter values ([#30269](https://github.com/angular/angular/issues/30269)) ([c3246e6](https://github.com/angular/angular/commit/c3246e6))
|
||||||
|
* **core:** static-query migration should gracefully exit if AOT compiler throws ([#30269](https://github.com/angular/angular/issues/30269)) ([a71d8a8](https://github.com/angular/angular/commit/a71d8a8))
|
||||||
|
* **core:** static-query migration should handle queries on accessors ([#30327](https://github.com/angular/angular/issues/30327)) ([dd299f9](https://github.com/angular/angular/commit/dd299f9))
|
||||||
|
* **core:** static-query migration should not fallback to test strategy ([#30458](https://github.com/angular/angular/issues/30458)) ([0fa48e8](https://github.com/angular/angular/commit/0fa48e8))
|
||||||
|
* **core:** static-query migration should not prompt if no queries are used ([#30254](https://github.com/angular/angular/issues/30254)) ([12fb639](https://github.com/angular/angular/commit/12fb639))
|
||||||
|
* **core:** static-query usage migration strategy should detect ambiguous query usage ([#30215](https://github.com/angular/angular/issues/30215)) ([e295c6a](https://github.com/angular/angular/commit/e295c6a))
|
||||||
|
* **router:** ensure navigations start with the current URL value incase redirect is skipped ([#30344](https://github.com/angular/angular/issues/30344)) ([9b88920](https://github.com/angular/angular/commit/9b88920)), closes [#30340](https://github.com/angular/angular/issues/30340) [#30160](https://github.com/angular/angular/issues/30160)
|
||||||
|
* **router:** IE 11 bug can break URL unification when comparing objects ([#30393](https://github.com/angular/angular/issues/30393)) ([c383491](https://github.com/angular/angular/commit/c383491))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** use rbe_autoconfig() and new container. ([#29336](https://github.com/angular/angular/issues/29336)) ([e562acc](https://github.com/angular/angular/commit/e562acc))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-rc.3"></a>
|
||||||
|
# [8.0.0-rc.3](https://github.com/angular/angular/compare/8.0.0-rc.2...8.0.0-rc.3) (2019-05-07)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Bump ibazel to 0.10.1 for windows fixes ([#30196](https://github.com/angular/angular/issues/30196)) ([9f68c35](https://github.com/angular/angular/commit/9f68c35))
|
||||||
|
* **compiler-cli:** log ngcc skipping messages as debug instead of info ([#30232](https://github.com/angular/angular/issues/30232)) ([548b003](https://github.com/angular/angular/commit/548b003))
|
||||||
|
* **core:** fix interpolate identifier in AOT ([#30243](https://github.com/angular/angular/issues/30243)) ([3fe3a84](https://github.com/angular/angular/commit/3fe3a84))
|
||||||
|
* **router:** ensure `history.state` is set in `eager` update mode ([#30154](https://github.com/angular/angular/issues/30154)) ([9720227](https://github.com/angular/angular/commit/9720227))
|
||||||
|
* **router:** fix a problem with router not responding to back button ([#30160](https://github.com/angular/angular/issues/30160)) ([132f01c](https://github.com/angular/angular/commit/132f01c))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-rc.2"></a>
|
||||||
|
# [8.0.0-rc.2](https://github.com/angular/angular/compare/8.0.0-rc.1...8.0.0-rc.2) (2019-04-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **language-service:** Remove tsserverlibrary from rollup globals ([#30123](https://github.com/angular/angular/issues/30123)) ([b706800](https://github.com/angular/angular/commit/b706800))
|
||||||
|
* disable injectable-pipe migration ([#30180](https://github.com/angular/angular/issues/30180)) ([4b2fcfd](https://github.com/angular/angular/commit/4b2fcfd))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-rc.1"></a>
|
||||||
|
# [8.0.0-rc.1](https://github.com/angular/angular/compare/8.0.0-rc.0...8.0.0-rc.1) (2019-04-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Exclude common/upgrade* in metadata.tsconfig.json ([#30133](https://github.com/angular/angular/issues/30133)) ([6711f22](https://github.com/angular/angular/commit/6711f22))
|
||||||
|
* **bazel:** update peerDep ranges ([#30155](https://github.com/angular/angular/issues/30155)) ([6067583](https://github.com/angular/angular/commit/6067583))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-rc.0"></a>
|
||||||
|
# [8.0.0-rc.0](https://github.com/angular/angular/compare/8.0.0-beta.14...8.0.0-rc.0) (2019-04-25)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** make name param in ng add optional ([#30074](https://github.com/angular/angular/issues/30074)) ([0b5f480](https://github.com/angular/angular/commit/0b5f480))
|
||||||
|
* **bazel:** Make sure only single copy of `[@angular](https://github.com/angular)/bazel` is installed ([#30072](https://github.com/angular/angular/issues/30072)) ([2905bf5](https://github.com/angular/angular/commit/2905bf5))
|
||||||
|
* **bazel:** transitive npm deps in ng_module ([#30065](https://github.com/angular/angular/issues/30065)) ([61365a9](https://github.com/angular/angular/commit/61365a9))
|
||||||
|
* **common:** add upgrade sub-package to ng_package rule for [@angular](https://github.com/angular)/common ([#30117](https://github.com/angular/angular/issues/30117)) ([6de4cbd](https://github.com/angular/angular/commit/6de4cbd)), closes [#30055](https://github.com/angular/angular/issues/30055) [#30116](https://github.com/angular/angular/issues/30116)
|
||||||
|
* **common:** adjust MockPlatformLocation to set state to new object ([#30055](https://github.com/angular/angular/issues/30055)) ([825efa8](https://github.com/angular/angular/commit/825efa8))
|
||||||
|
* **compiler:** Fix compiler crash due to isSkipSelf of null ([#30075](https://github.com/angular/angular/issues/30075)) ([28fd5ab](https://github.com/angular/angular/commit/28fd5ab))
|
||||||
|
* **upgrade:** do not break if `onMicrotaskEmpty` emits while a `$digest` is in progress ([#29794](https://github.com/angular/angular/issues/29794)) ([0ddf2e7](https://github.com/angular/angular/commit/0ddf2e7)), closes [#24680](https://github.com/angular/angular/issues/24680) [/github.com/angular/angular/blob/78146c189/packages/core/src/util/ng_dev_mode.ts#L12](https://github.com//github.com/angular/angular/blob/78146c189/packages/core/src/util/ng_dev_mode.ts/issues/L12) [#24680](https://github.com/angular/angular/issues/24680)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **common:** add [@angular](https://github.com/angular)/common/upgrade package for $location-related APIs ([#30055](https://github.com/angular/angular/issues/30055)) ([152d99e](https://github.com/angular/angular/commit/152d99e))
|
||||||
|
* **common:** add ability to retrieve the state from Location service ([#30055](https://github.com/angular/angular/issues/30055)) ([b44b143](https://github.com/angular/angular/commit/b44b143))
|
||||||
|
* **common:** add ability to track all location changes ([#30055](https://github.com/angular/angular/issues/30055)) ([3a9cf3f](https://github.com/angular/angular/commit/3a9cf3f))
|
||||||
|
* **common:** add APIs to read component pieces of URL ([#30055](https://github.com/angular/angular/issues/30055)) ([b635fe8](https://github.com/angular/angular/commit/b635fe8))
|
||||||
|
* **common:** add MockPlatformLocation to enable more robust testing of Location services ([#30055](https://github.com/angular/angular/issues/30055)) ([d0672c2](https://github.com/angular/angular/commit/d0672c2))
|
||||||
|
* **common:** add UrlCodec type for use with upgrade applications ([#30055](https://github.com/angular/angular/issues/30055)) ([ec455e1](https://github.com/angular/angular/commit/ec455e1))
|
||||||
|
* **common:** provide replacement for AngularJS $location service ([#30055](https://github.com/angular/angular/issues/30055)) ([4277600](https://github.com/angular/angular/commit/4277600))
|
||||||
|
* remove deprecated DOCUMENT token from platform-browser ([#28117](https://github.com/angular/angular/issues/28117)) ([3a9d247](https://github.com/angular/angular/commit/3a9d247))
|
||||||
|
* **compiler:** support skipping leading trivia in template source-maps ([#30095](https://github.com/angular/angular/issues/30095)) ([304a12f](https://github.com/angular/angular/commit/304a12f))
|
||||||
|
* **core:** add missing ARIA attributes to html sanitizer ([#29685](https://github.com/angular/angular/issues/29685)) ([909557d](https://github.com/angular/angular/commit/909557d)), closes [#26815](https://github.com/angular/angular/issues/26815)
|
||||||
|
* **router:** deprecate loadChildren:string ([#30073](https://github.com/angular/angular/issues/30073)) ([c61df39](https://github.com/angular/angular/commit/c61df39))
|
||||||
|
* **service-worker:** allow configuring when the SW is registered ([#21842](https://github.com/angular/angular/issues/21842)) ([4cfba58](https://github.com/angular/angular/commit/4cfba58)), closes [#20970](https://github.com/angular/angular/issues/20970)
|
||||||
|
* **service-worker:** expose `SwRegistrationOptions` token to allow runtime config ([#21842](https://github.com/angular/angular/issues/21842)) ([39c0152](https://github.com/angular/angular/commit/39c0152))
|
||||||
|
* **service-worker:** support bypassing SW with specific header/query param ([#30010](https://github.com/angular/angular/issues/30010)) ([6200732](https://github.com/angular/angular/commit/6200732)), closes [#21191](https://github.com/angular/angular/issues/21191)
|
||||||
|
|
||||||
|
|
||||||
|
### BREAKING CHANGES
|
||||||
|
|
||||||
|
* **bazel:** ng_module now depends on a minimum of build_bazel_rules_nodejs 0.27.12
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.14"></a>
|
||||||
|
# [8.0.0-beta.14](https://github.com/angular/angular/compare/8.0.0-beta.13...8.0.0-beta.14) (2019-04-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** do not typecheck core schematic files ([#29876](https://github.com/angular/angular/issues/29876)) ([2ba799d](https://github.com/angular/angular/commit/2ba799d))
|
||||||
|
* **bazel:** restore ng build --prod ([#30005](https://github.com/angular/angular/issues/30005)) ([96a8289](https://github.com/angular/angular/commit/96a8289))
|
||||||
|
* **common:** prevent repeated application of HttpParams mutations ([#29045](https://github.com/angular/angular/issues/29045)) ([8e8e89a](https://github.com/angular/angular/commit/8e8e89a)), closes [#20430](https://github.com/angular/angular/issues/20430)
|
||||||
|
* **common:** async pipe will properly check when it recieves an NaN value from an observable ([#22305](https://github.com/angular/angular/issues/22305)) ([3f6bf6d](https://github.com/angular/angular/commit/3f6bf6d)), closes [#15721](https://github.com/angular/angular/issues/15721)
|
||||||
|
* **core:** don't include a local `EventListener` in typings ([#29809](https://github.com/angular/angular/issues/29809)) ([4bde40f](https://github.com/angular/angular/commit/4bde40f)), closes [/github.com/angular/angular/blob/303eae918d997070a36b523ddc97e018f622c258/packages/core/src/debug/debug_node.ts#L32](https://github.com//github.com/angular/angular/blob/303eae918d997070a36b523ddc97e018f622c258/packages/core/src/debug/debug_node.ts/issues/L32) [#29806](https://github.com/angular/angular/issues/29806)
|
||||||
|
* **core:** use shakeable global definitions ([#29929](https://github.com/angular/angular/issues/29929)) ([e5905bb](https://github.com/angular/angular/commit/e5905bb)), closes [/github.com/angular/angular-cli/blob/5fc1f2499cbe57f9a95e4b0dfced130eb3a8046d/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts#L279-L282](https://github.com//github.com/angular/angular-cli/blob/5fc1f2499cbe57f9a95e4b0dfced130eb3a8046d/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts/issues/L279-L282)
|
||||||
|
* **language-service:** Use proper types instead of any ([#29942](https://github.com/angular/angular/issues/29942)) ([1a56cd5](https://github.com/angular/angular/commit/1a56cd5))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **compiler-cli:** export tooling definitions ([#29929](https://github.com/angular/angular/issues/29929)) ([e1f51ea](https://github.com/angular/angular/commit/e1f51ea))
|
||||||
|
* **compiler-cli:** lower some exported expressions ([#30038](https://github.com/angular/angular/issues/30038)) ([8e73f9b](https://github.com/angular/angular/commit/8e73f9b))
|
||||||
|
* **core:** add schematics to move deprecated DOCUMENT import ([#29950](https://github.com/angular/angular/issues/29950)) ([645e305](https://github.com/angular/angular/commit/645e305))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.13"></a>
|
||||||
|
# [8.0.0-beta.13](https://github.com/angular/angular/compare/8.0.0-beta.12...8.0.0-beta.13) (2019-04-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Install packages after `ng add` when invoked independently ([#29852](https://github.com/angular/angular/issues/29852)) ([bd2ce9c](https://github.com/angular/angular/commit/bd2ce9c))
|
||||||
|
* **compiler-cli:** pass config path to ts.parseJsonConfigFileContent ([#29872](https://github.com/angular/angular/issues/29872)) ([86a3f90](https://github.com/angular/angular/commit/86a3f90)), closes [/github.com/Microsoft/TypeScript/blob/025d82633915b67003ea38ba40b9239a19721c13/src/compiler/emitter.ts#L56-L57](https://github.com//github.com/Microsoft/TypeScript/blob/025d82633915b67003ea38ba40b9239a19721c13/src/compiler/emitter.ts/issues/L56-L57)
|
||||||
|
* **router:** support non-NgFactory promise in loadChildren typings ([#29832](https://github.com/angular/angular/issues/29832)) ([2bfb6a0](https://github.com/angular/angular/commit/2bfb6a0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.12"></a>
|
||||||
|
# [8.0.0-beta.12](https://github.com/angular/angular/compare/8.0.0-beta.11...8.0.0-beta.12) (2019-04-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** add configuration_env_vars = ["compile"] to generated [@npm](https://github.com/npm)//[@angular](https://github.com/angular)/bazel/bin:ngc-wrapped nodejs_binary ([#29694](https://github.com/angular/angular/issues/29694)) ([2e66ddf](https://github.com/angular/angular/commit/2e66ddf))
|
||||||
|
* **bazel:** docs formatting ([#29817](https://github.com/angular/angular/issues/29817)) ([cc2e4b6](https://github.com/angular/angular/commit/cc2e4b6))
|
||||||
|
* **bazel:** remove karma-jasmine from ts_web_test_suite ([#29695](https://github.com/angular/angular/issues/29695)) ([2bd9214](https://github.com/angular/angular/commit/2bd9214))
|
||||||
|
* **bazel:** support running ng-add on minimal applications ([#29681](https://github.com/angular/angular/issues/29681)) ([9810c6c](https://github.com/angular/angular/commit/9810c6c)), closes [#29680](https://github.com/angular/angular/issues/29680)
|
||||||
|
* **common:** add `@Injectable()` to common pipes ([#29834](https://github.com/angular/angular/issues/29834)) ([387fbb8](https://github.com/angular/angular/commit/387fbb8))
|
||||||
|
* **compiler-cli:** ensure LogicalProjectPaths always start with a slash ([#29627](https://github.com/angular/angular/issues/29627)) ([e02684e](https://github.com/angular/angular/commit/e02684e))
|
||||||
|
* **core:** add missing migration to npm package ([#29705](https://github.com/angular/angular/issues/29705)) ([96b76dc](https://github.com/angular/angular/commit/96b76dc))
|
||||||
|
* **core:** call ngOnDestroy for tree-shakeable providers ([#28943](https://github.com/angular/angular/issues/28943)) ([30b0442](https://github.com/angular/angular/commit/30b0442)), closes [#28927](https://github.com/angular/angular/issues/28927)
|
||||||
|
* **core:** Deprecate TestBed.get(...):any ([#29290](https://github.com/angular/angular/issues/29290)) ([609024f](https://github.com/angular/angular/commit/609024f)), closes [#13785](https://github.com/angular/angular/issues/13785) [#26491](https://github.com/angular/angular/issues/26491)
|
||||||
|
* **core:** resolve ts compile issues due to lenient tsconfig ([#29843](https://github.com/angular/angular/issues/29843)) ([54058ba](https://github.com/angular/angular/commit/54058ba))
|
||||||
|
* **platform-browser:** insert APP_ID in styles, contentAttr and hostAttr ([#17745](https://github.com/angular/angular/issues/17745)) ([712d60e](https://github.com/angular/angular/commit/712d60e))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** update the build to use the new architect api ([#29720](https://github.com/angular/angular/issues/29720)) ([902a53a](https://github.com/angular/angular/commit/902a53a))
|
||||||
|
|
||||||
|
|
||||||
|
### DEPRECATIONS
|
||||||
|
|
||||||
|
* `TestBed.get()` has two signatures, one which is typed and another which accepts and returns `any`. The signature for `any` is deprecated; all usage of `TestBed.get()` should go through the typed API. This mainly affects string tokens
|
||||||
|
(which aren't supported) and abstract class tokens.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
providers: [{provide: "stringToken", useValue: new Service()}],
|
||||||
|
});
|
||||||
|
|
||||||
|
let service = TestBed.get("stringToken"); // type any
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
const SERVICE_TOKEN = new InjectionToken<Service>("SERVICE_TOKEN");
|
||||||
|
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
providers: [{provide: SERVICE_TOKEN, useValue: new Service()}],
|
||||||
|
});
|
||||||
|
|
||||||
|
let service = TestBed.get(SERVICE_TOKEN); // type Service
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="7.2.13"></a>
|
||||||
|
## [7.2.13](https://github.com/angular/angular/compare/7.2.12...7.2.13) (2019-04-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** use //:tsconfig.json as the default for ng_module ([#29670](https://github.com/angular/angular/issues/29670)) ([#29711](https://github.com/angular/angular/issues/29711)) ([9e33dc3](https://github.com/angular/angular/commit/9e33dc3))
|
||||||
|
* **platform-browser:** insert APP_ID in styles, contentAttr and hostAttr ([#17745](https://github.com/angular/angular/issues/17745)) ([ca14509](https://github.com/angular/angular/commit/ca14509))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.11"></a>
|
||||||
|
# [8.0.0-beta.11](https://github.com/angular/angular/compare/8.0.0-beta.10...8.0.0-beta.11) (2019-04-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Update schematics to support routing ([#29548](https://github.com/angular/angular/issues/29548)) ([401b8ee](https://github.com/angular/angular/commit/401b8ee))
|
||||||
|
* **bazel:** use //:tsconfig.json as the default for ng_module ([#29670](https://github.com/angular/angular/issues/29670)) ([b14537a](https://github.com/angular/angular/commit/b14537a))
|
||||||
|
* **compiler-cli:** ngcc - cope with processing entry-points multiple times ([#29657](https://github.com/angular/angular/issues/29657)) ([6b39c9c](https://github.com/angular/angular/commit/6b39c9c))
|
||||||
|
* **core:** static-query schematic should detect static queries in getters. ([#29609](https://github.com/angular/angular/issues/29609)) ([33016b8](https://github.com/angular/angular/commit/33016b8))
|
||||||
|
|
||||||
|
|
||||||
|
### build
|
||||||
|
|
||||||
|
* **bazel:** update to nodejs rules 0.27.8 ([#29508](https://github.com/angular/angular/issues/29508)) ([d9162a8](https://github.com/angular/angular/commit/d9162a8))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* remove [@angular](https://github.com/angular)/http dependency from [@angular](https://github.com/angular)/platform-server ([#29408](https://github.com/angular/angular/issues/29408)) ([9745f55](https://github.com/angular/angular/commit/9745f55))
|
||||||
|
* **compiler-cli:** ngcc - make logging more configurable ([#29591](https://github.com/angular/angular/issues/29591)) ([8d3d75e](https://github.com/angular/angular/commit/8d3d75e))
|
||||||
|
* **core:** Add "AbstractType<T>" interface ([#29295](https://github.com/angular/angular/issues/29295)) ([afd4a4e](https://github.com/angular/angular/commit/afd4a4e)), closes [#26491](https://github.com/angular/angular/issues/26491)
|
||||||
|
* **core:** template-var-assignment update schematic ([#29608](https://github.com/angular/angular/issues/29608)) ([7c8f4e3](https://github.com/angular/angular/commit/7c8f4e3))
|
||||||
|
|
||||||
|
|
||||||
|
### BREAKING CHANGES
|
||||||
|
|
||||||
|
* **bazel:** @bazel/typescript is now a peerDependency of @angular/bazel so user's of @angular/bazel must add @bazel/typescript to their package.json
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.12"></a>
|
||||||
|
## [7.2.12](https://github.com/angular/angular/compare/7.2.11...7.2.12) (2019-04-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **common:** escape query selector used when anchor scrolling ([#29577](https://github.com/angular/angular/issues/29577)) ([7671c73](https://github.com/angular/angular/commit/7671c73)), closes [#28193](https://github.com/angular/angular/issues/28193)
|
||||||
|
* **router:** adjust setting navigationTransition when a new navigation cancels an existing one ([#29636](https://github.com/angular/angular/issues/29636)) ([e884c0c](https://github.com/angular/angular/commit/e884c0c)), closes [#29389](https://github.com/angular/angular/issues/29389) [#29590](https://github.com/angular/angular/issues/29590)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.10"></a>
|
||||||
|
# [8.0.0-beta.10](https://github.com/angular/angular/compare/8.0.0-beta.9...8.0.0-beta.10) (2019-03-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** allow ng_module users to set createExternalSymbolFactoryReexports ([#29459](https://github.com/angular/angular/issues/29459)) ([21be0fb](https://github.com/angular/angular/commit/21be0fb))
|
||||||
|
* **bazel:** workaround problem reading summary files from node_modules ([#29459](https://github.com/angular/angular/issues/29459)) ([769d960](https://github.com/angular/angular/commit/769d960))
|
||||||
|
* **compiler:** inherit param types when class has a constructor which takes no declared parameters and delegates up ([#29232](https://github.com/angular/angular/issues/29232)) ([0007564](https://github.com/angular/angular/commit/0007564))
|
||||||
|
* **core:** parse incorrect ML open tag as text ([#29328](https://github.com/angular/angular/issues/29328)) ([dafbbf8](https://github.com/angular/angular/commit/dafbbf8)), closes [#29231](https://github.com/angular/angular/issues/29231)
|
||||||
|
* **core:** static-query schematic should detect queries in "ngDoCheck" and "ngOnChanges" ([#29492](https://github.com/angular/angular/issues/29492)) ([09fab58](https://github.com/angular/angular/commit/09fab58))
|
||||||
|
* **router:** support NgFactory promise in loadChildren typings ([#29392](https://github.com/angular/angular/issues/29392)) ([26a8c59](https://github.com/angular/angular/commit/26a8c59))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** Upgrade rules_nodejs and rules_sass ([#29388](https://github.com/angular/angular/issues/29388)) ([d6d081e](https://github.com/angular/angular/commit/d6d081e))
|
||||||
|
* **service-worker:** support multiple apps on different subpaths of a domain ([#27080](https://github.com/angular/angular/issues/27080)) ([e721c08](https://github.com/angular/angular/commit/e721c08)), closes [#21388](https://github.com/angular/angular/issues/21388)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.11"></a>
|
||||||
|
## [7.2.11](https://github.com/angular/angular/compare/7.2.10...7.2.11) (2019-03-26)
|
||||||
|
|
||||||
|
This release contains various API docs improvements.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.9"></a>
|
||||||
|
# [8.0.0-beta.9](https://github.com/angular/angular/compare/8.0.0-beta.8...8.0.0-beta.9) (2019-03-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** correct regexp test for self-references in metadata ([#29346](https://github.com/angular/angular/issues/29346)) ([9d090cb](https://github.com/angular/angular/commit/9d090cb))
|
||||||
|
* **bazel:** don't produce self-references in metadata ([#29317](https://github.com/angular/angular/issues/29317)) ([3facdeb](https://github.com/angular/angular/commit/3facdeb)), closes [#29315](https://github.com/angular/angular/issues/29315)
|
||||||
|
* **bazel:** fix strict null checks compile error in packages/bazel/src/schematics/ng-add/index.ts ([#29282](https://github.com/angular/angular/issues/29282)) ([9a7f560](https://github.com/angular/angular/commit/9a7f560))
|
||||||
|
* **bazel:** Remove [@angular](https://github.com/angular)/upgrade from dev dependencies ([#29319](https://github.com/angular/angular/issues/29319)) ([1db8bf3](https://github.com/angular/angular/commit/1db8bf3))
|
||||||
|
* **bazel:** Support new e2e project layout ([#29318](https://github.com/angular/angular/issues/29318)) ([8ef690c](https://github.com/angular/angular/commit/8ef690c))
|
||||||
|
* **bazel:** turn off pure call tree shaking for ng_package ([#29210](https://github.com/angular/angular/issues/29210)) ([4990b93](https://github.com/angular/angular/commit/4990b93))
|
||||||
|
* **compiler-cli:** incorrect metadata bundle for multiple unnamed re-exports ([#29360](https://github.com/angular/angular/issues/29360)) ([105cfaf](https://github.com/angular/angular/commit/105cfaf)), closes [/github.com/angular/material2/blob/master/tools/package-tools/build-release.ts#L78-L85](https://github.com//github.com/angular/material2/blob/master/tools/package-tools/build-release.ts/issues/L78-L85)
|
||||||
|
* **core:** don't wrap `<tr>` and `<col>` elements into a required parent ([#29219](https://github.com/angular/angular/issues/29219)) ([f2dc32e](https://github.com/angular/angular/commit/f2dc32e))
|
||||||
|
* **core:** parse incorrect ML open tag as text ([#29328](https://github.com/angular/angular/issues/29328)) ([4605df8](https://github.com/angular/angular/commit/4605df8)), closes [#29231](https://github.com/angular/angular/issues/29231)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add support for TypeScript 3.3 (and drop older versions) ([#29004](https://github.com/angular/angular/issues/29004)) ([75748d6](https://github.com/angular/angular/commit/75748d6))
|
||||||
|
|
||||||
|
|
||||||
|
### BREAKING CHANGES
|
||||||
|
|
||||||
|
* **core:** Certain elements (like `<tr>` or `<col>`) require parent elements to be of a certain type by the HTML specification
|
||||||
|
(ex. `<tr>` can only be inside `<tbody>` / `<thead>`). Before this change Angular template parser was auto-correcting
|
||||||
|
"invalid" HTML using the following rules:
|
||||||
|
- `<tr>` would be wrapped in `<tbody>` if not inside `<tbody>`, `<tfoot>` or `<thead>`;
|
||||||
|
- `<col>` would be wrapped in `<colgroup>` if not inside `<colgroup>`.
|
||||||
|
|
||||||
|
This meachanism of automatic wrapping / auto-correcting was problematic for several reasons:
|
||||||
|
- it is non-obvious and arbitrary (ex. there are more HTML elements that has rules for parent type);
|
||||||
|
- it is incorrect for cases where `<tr>` / `<col>` are at the root of a component's content, ex.:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<projecting-tr-inside-tbody>
|
||||||
|
<tr>...</tr>
|
||||||
|
</projecting-tr-inside-tbody>
|
||||||
|
```
|
||||||
|
|
||||||
|
In the above example the `<projecting-tr-inside-tbody>` component could be "surprised" to see additional
|
||||||
|
`<tbody>` elements inserted by Angular HTML parser.
|
||||||
|
|
||||||
|
|
||||||
|
* TypeScript 3.1 and 3.2 are no longer supported.
|
||||||
|
|
||||||
|
Please update your TypeScript version to 3.3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.10"></a>
|
||||||
|
## [7.2.10](https://github.com/angular/angular/compare/7.2.9...7.2.10) (2019-03-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **compiler-cli:** incorrect metadata bundle for multiple unnamed re-exports ([#29360](https://github.com/angular/angular/issues/29360)) ([cf8d934](https://github.com/angular/angular/commit/cf8d934)), closes [github.com/angular/material2/blob/master/tools/package-tools/build-release.ts#L78-L85](https://github.com/angular/material2/blob/master/tools/package-tools/build-release.ts#L78-L85)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.8"></a>
|
||||||
|
# [8.0.0-beta.8](https://github.com/angular/angular/compare/8.0.0-beta.7...8.0.0-beta.8) (2019-03-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** add missing binary path for api-extractor ([#29202](https://github.com/angular/angular/issues/29202)) ([df354d1](https://github.com/angular/angular/commit/df354d1))
|
||||||
|
* **bazel:** ng build should produce prod bundle ([#29136](https://github.com/angular/angular/issues/29136)) ([14ce8a9](https://github.com/angular/angular/commit/14ce8a9))
|
||||||
|
* **compiler:** ensure template is updated if an output is transformed ([#29041](https://github.com/angular/angular/issues/29041)) ([c7e4931](https://github.com/angular/angular/commit/c7e4931))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** Eject Bazel ([#29167](https://github.com/angular/angular/issues/29167)) ([36a1550](https://github.com/angular/angular/commit/36a1550))
|
||||||
|
* **bazel:** Hide Bazel files in Bazel builder ([#29110](https://github.com/angular/angular/issues/29110)) ([7060d90](https://github.com/angular/angular/commit/7060d90))
|
||||||
|
* **forms:** clear (remove all) components from a FormArray ([#28918](https://github.com/angular/angular/issues/28918)) ([a68b1a1](https://github.com/angular/angular/commit/a68b1a1)), closes [#18531](https://github.com/angular/angular/issues/18531)
|
||||||
|
* **platform-server:** wait on returned BEFORE_APP_SERIALIZED promises ([#29120](https://github.com/angular/angular/issues/29120)) ([7102ea8](https://github.com/angular/angular/commit/7102ea8))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.9"></a>
|
||||||
|
## [7.2.9](https://github.com/angular/angular/compare/7.2.8...7.2.9) (2019-03-12)
|
||||||
|
|
||||||
|
This release contains various API docs improvements.
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.7"></a>
|
||||||
|
# [8.0.0-beta.7](https://github.com/angular/angular/compare/8.0.0-beta.6...8.0.0-beta.7) (2019-03-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **animations:** ensure `position` and `display` styles are handled outside of keyframes/web-animations ([#28911](https://github.com/angular/angular/issues/28911)) ([a6ae759](https://github.com/angular/angular/commit/a6ae759)), closes [#24923](https://github.com/angular/angular/issues/24923) [#25635](https://github.com/angular/angular/issues/25635)
|
||||||
|
* **bazel:** add favicon to web package ([#29017](https://github.com/angular/angular/issues/29017)) ([5fdf24e](https://github.com/angular/angular/commit/5fdf24e))
|
||||||
|
* **bazel:** Add SHA256 for rules_sass ([#28994](https://github.com/angular/angular/issues/28994)) ([dc33519](https://github.com/angular/angular/commit/dc33519))
|
||||||
|
* **bazel:** api extractor don't generate tsdoc metadata ([#29023](https://github.com/angular/angular/issues/29023)) ([b5629d9](https://github.com/angular/angular/commit/b5629d9))
|
||||||
|
* **bazel:** ng serve should always watch ([#29032](https://github.com/angular/angular/issues/29032)) ([c532646](https://github.com/angular/angular/commit/c532646))
|
||||||
|
* **platform-server:** update minimum domino version to latest released ([#28893](https://github.com/angular/angular/issues/28893)) ([79e2ca0](https://github.com/angular/angular/commit/79e2ca0))
|
||||||
|
* **router:** removed obsolete TODO comment ([#29085](https://github.com/angular/angular/issues/29085)) ([72ecc45](https://github.com/angular/angular/commit/72ecc45))
|
||||||
|
* **service-worker:** detect new version even if files are identical to an old one ([#26006](https://github.com/angular/angular/issues/26006)) ([586234b](https://github.com/angular/angular/commit/586234b)), closes [#24338](https://github.com/angular/angular/issues/24338)
|
||||||
|
* **service-worker:** ignore passive mixed content requests ([#25994](https://github.com/angular/angular/issues/25994)) ([48214e2](https://github.com/angular/angular/commit/48214e2)), closes [/github.com/angular/angular/issues/23012#issuecomment-376430187](https://github.com//github.com/angular/angular/issues/23012/issues/issuecomment-376430187) [#23012](https://github.com/angular/angular/issues/23012)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **core:** update schematic to migrate to explicit query timing ([#28983](https://github.com/angular/angular/issues/28983)) ([6215799](https://github.com/angular/angular/commit/6215799))
|
||||||
|
* **service-worker:** add JSON schema for service worker config ([#27859](https://github.com/angular/angular/issues/27859)) ([3bee0f6](https://github.com/angular/angular/commit/3bee0f6)), closes [#19847](https://github.com/angular/angular/issues/19847)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.8"></a>
|
||||||
|
## [7.2.8](https://github.com/angular/angular/compare/7.2.7...7.2.8) (2019-03-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **animations:** ensure `position` and `display` styles are handled outside of keyframes/web-animations ([#28911](https://github.com/angular/angular/issues/28911)) ([86981b3](https://github.com/angular/angular/commit/86981b3)), closes [#24923](https://github.com/angular/angular/issues/24923) [#25635](https://github.com/angular/angular/issues/25635)
|
||||||
|
* **router:** removed obsolete TODO comment ([#29085](https://github.com/angular/angular/issues/29085)) ([2a25ac2](https://github.com/angular/angular/commit/2a25ac2))
|
||||||
|
* **service-worker:** detect new version even if files are identical to an old one ([#26006](https://github.com/angular/angular/issues/26006)) ([5669333](https://github.com/angular/angular/commit/5669333)), closes [#24338](https://github.com/angular/angular/issues/24338)
|
||||||
|
* **service-worker:** ignore passive mixed content requests ([#25994](https://github.com/angular/angular/issues/25994)) ([b598e88](https://github.com/angular/angular/commit/b598e88)), closes [/github.com/angular/angular/issues/23012#issuecomment-376430187](https://github.com//github.com/angular/angular/issues/23012/issues/issuecomment-376430187) [#23012](https://github.com/angular/angular/issues/23012)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.6"></a>
|
||||||
|
# [8.0.0-beta.6](https://github.com/angular/angular/compare/8.0.0-beta.5...8.0.0-beta.6) (2019-02-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Pin browsers for schematics ([#28913](https://github.com/angular/angular/issues/28913)) ([1145bdb](https://github.com/angular/angular/commit/1145bdb))
|
||||||
|
* **bazel:** rxjs_umd_modules should always be present ([#28881](https://github.com/angular/angular/issues/28881)) ([9ae14db](https://github.com/angular/angular/commit/9ae14db))
|
||||||
|
* **compiler:** use correct variable in invalid function ([#28656](https://github.com/angular/angular/issues/28656)) ([f75acbd](https://github.com/angular/angular/commit/f75acbd))
|
||||||
|
* **core:** traverse and sanitize content of unsafe elements ([#28804](https://github.com/angular/angular/issues/28804)) ([262ba67](https://github.com/angular/angular/commit/262ba67)), closes [#25879](https://github.com/angular/angular/issues/25879) [#25879](https://github.com/angular/angular/issues/25879) [#26007](https://github.com/angular/angular/issues/26007) [#28427](https://github.com/angular/angular/issues/28427)
|
||||||
|
* **language-service:** Fix completions for input/output with alias ([#28904](https://github.com/angular/angular/issues/28904)) ([ad4a9bf](https://github.com/angular/angular/commit/ad4a9bf)), closes [#27959](https://github.com/angular/angular/issues/27959)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** add ts_config extending support for ng_module ([#21883](https://github.com/angular/angular/issues/21883)) ([edb6c2d](https://github.com/angular/angular/commit/edb6c2d))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.7"></a>
|
||||||
|
## [7.2.7](https://github.com/angular/angular/compare/7.2.6...7.2.7) (2019-02-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** pin browser repositories using [@npm](https://github.com/npm)_bazel_karma//:browser_repositories.bzl in bazel schematics ([#28896](https://github.com/angular/angular/issues/28896)) ([b686449](https://github.com/angular/angular/commit/b686449))
|
||||||
|
* **core:** traverse and sanitize content of unsafe elements ([#28804](https://github.com/angular/angular/issues/28804)) ([fdcf877](https://github.com/angular/angular/commit/fdcf877)), closes [#25879](https://github.com/angular/angular/issues/25879) [#25879](https://github.com/angular/angular/issues/25879) [#26007](https://github.com/angular/angular/issues/26007) [#28427](https://github.com/angular/angular/issues/28427)
|
||||||
|
* **language-service:** Fix completions for input/output with alias ([#28904](https://github.com/angular/angular/issues/28904)) ([d0018e6](https://github.com/angular/angular/commit/d0018e6)), closes [#27959](https://github.com/angular/angular/issues/27959)
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.5"></a>
|
||||||
|
# [8.0.0-beta.5](https://github.com/angular/angular/compare/8.0.0-beta.4...8.0.0-beta.5) (2019-02-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Add postinstall step to generate summaries ([#28850](https://github.com/angular/angular/issues/28850)) ([96b597c](https://github.com/angular/angular/commit/96b597c))
|
||||||
|
* **bazel:** Schematics should upgrade rxjs to 6.4.0 ([#28841](https://github.com/angular/angular/issues/28841)) ([2d80419](https://github.com/angular/angular/commit/2d80419))
|
||||||
|
* **compiler-cli:** incorrect bundled metadata for static class member call expressions ([#28762](https://github.com/angular/angular/issues/28762)) ([4131715](https://github.com/angular/angular/commit/4131715)), closes [/github.com/angular/angular/blob/master/packages/core/src/change_detection/differs/keyvalue_differs.ts#L121](https://github.com//github.com/angular/angular/blob/master/packages/core/src/change_detection/differs/keyvalue_differs.ts/issues/L121) [#28741](https://github.com/angular/angular/issues/28741)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* upgrade domino to v2.1.2 ([#28767](https://github.com/angular/angular/issues/28767)) ([fdca001](https://github.com/angular/angular/commit/fdca001))
|
||||||
|
* **compiler-cli:** make enableIvy ngtsc/true equivalent ([#28616](https://github.com/angular/angular/issues/28616)) ([1923c2f](https://github.com/angular/angular/commit/1923c2f))
|
||||||
|
* **core:** allow users to define timing of ViewChild/ContentChild queries ([#28810](https://github.com/angular/angular/issues/28810)) ([19afb79](https://github.com/angular/angular/commit/19afb79))
|
||||||
|
* **router:** add hash-based navigation option to setUpLocationSync ([#28609](https://github.com/angular/angular/issues/28609)) ([71d0eeb](https://github.com/angular/angular/commit/71d0eeb)), closes [#24429](https://github.com/angular/angular/issues/24429) [#21995](https://github.com/angular/angular/issues/21995)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.6"></a>
|
||||||
|
## [7.2.6](https://github.com/angular/angular/compare/7.2.5...7.2.6) (2019-02-20)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **compiler-cli:** incorrect bundled metadata for static class member call expressions ([#28762](https://github.com/angular/angular/issues/28762)) ([ab69c31](https://github.com/angular/angular/commit/ab69c31)), closes [/github.com/angular/angular/blob/master/packages/core/src/change_detection/differs/keyvalue_differs.ts#L121](https://github.com//github.com/angular/angular/blob/master/packages/core/src/change_detection/differs/keyvalue_differs.ts/issues/L121) [#28741](https://github.com/angular/angular/issues/28741)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.4"></a>
|
||||||
|
# [8.0.0-beta.4](https://github.com/angular/angular/compare/8.0.0-beta.3...8.0.0-beta.4) (2019-02-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Install angular repo before yarn_install ([#28670](https://github.com/angular/angular/issues/28670)) ([49fb8c3](https://github.com/angular/angular/commit/49fb8c3))
|
||||||
|
* **bazel:** Turn on strict action env ([#28675](https://github.com/angular/angular/issues/28675)) ([2ea030c](https://github.com/angular/angular/commit/2ea030c))
|
||||||
|
* **compiler:** ensure that event handlers have the correct source spans ([#28055](https://github.com/angular/angular/issues/28055)) ([cffd862](https://github.com/angular/angular/commit/cffd862))
|
||||||
|
* **compiler:** fix two existing expression transformer issues ([#28523](https://github.com/angular/angular/issues/28523)) ([09af7ea](https://github.com/angular/angular/commit/09af7ea))
|
||||||
|
* **compiler:** markup lexer should not capture quotes in attribute value ([#28055](https://github.com/angular/angular/issues/28055)) ([c0dac18](https://github.com/angular/angular/commit/c0dac18))
|
||||||
|
* **compiler:** support `sourceMappingURL` comments that have trailing lines ([#28055](https://github.com/angular/angular/issues/28055)) ([0d6fdec](https://github.com/angular/angular/commit/0d6fdec))
|
||||||
|
* **compiler-cli:** don't throw when listing lazy routes for an entry route ([#28372](https://github.com/angular/angular/issues/28372)) ([2caa419](https://github.com/angular/angular/commit/2caa419))
|
||||||
|
* **core:** improve global variable detection ([#28679](https://github.com/angular/angular/issues/28679)) ([77eee42](https://github.com/angular/angular/commit/77eee42)), closes [#16545](https://github.com/angular/angular/issues/16545)
|
||||||
|
* **core:** use the correct generated URL for JIT compiled components ([#28055](https://github.com/angular/angular/issues/28055)) ([4f46bfb](https://github.com/angular/angular/commit/4f46bfb))
|
||||||
|
* **core:** use the correct template URL in render3 JIT compilation ([#28055](https://github.com/angular/angular/issues/28055)) ([a5ea55a](https://github.com/angular/angular/commit/a5ea55a))
|
||||||
|
* **forms:** mark form as pristine before emitting value and status change events ([#28395](https://github.com/angular/angular/issues/28395)) ([1df3aef](https://github.com/angular/angular/commit/1df3aef)), closes [#28130](https://github.com/angular/angular/issues/28130)
|
||||||
|
* **router:** redirect to root url when returned as UrlTree from guard ([#28271](https://github.com/angular/angular/issues/28271)) ([50732e1](https://github.com/angular/angular/commit/50732e1)), closes [#27845](https://github.com/angular/angular/issues/27845)
|
||||||
|
* **router:** set href when routerLink is used on an 'area' element ([#28441](https://github.com/angular/angular/issues/28441)) ([ed0cf7e](https://github.com/angular/angular/commit/ed0cf7e)), closes [#28401](https://github.com/angular/angular/issues/28401)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* optionally save complete performance log in chrome benchpress tests ([#27551](https://github.com/angular/angular/issues/27551)) ([d42f32c](https://github.com/angular/angular/commit/d42f32c))
|
||||||
|
* **bazel:** add dts bundler as action to ng_module ([#28588](https://github.com/angular/angular/issues/28588)) ([3d39100](https://github.com/angular/angular/commit/3d39100))
|
||||||
|
* **compiler:** support tokenizing a sub-section of an input string ([#28055](https://github.com/angular/angular/issues/28055)) ([eeb560a](https://github.com/angular/angular/commit/eeb560a))
|
||||||
|
* **compiler:** support tokenizing escaped strings ([#28055](https://github.com/angular/angular/issues/28055)) ([2424184](https://github.com/angular/angular/commit/2424184))
|
||||||
|
* **compiler-cli:** no longer re-export external symbols by default ([#28633](https://github.com/angular/angular/issues/28633)) ([91b7152](https://github.com/angular/angular/commit/91b7152)), closes [#28594](https://github.com/angular/angular/issues/28594) [#25644](https://github.com/angular/angular/issues/25644) [#25644](https://github.com/angular/angular/issues/25644)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.5"></a>
|
||||||
|
## [7.2.5](https://github.com/angular/angular/compare/7.2.4...7.2.5)
|
||||||
|
(2019-02-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **compiler-cli:** diagnostics should respect "newLine" compiler option
|
||||||
|
([#28550](https://github.com/angular/angular/issues/28550))
|
||||||
|
([ce750e6](https://github.com/angular/angular/commit/ce750e6))
|
||||||
|
* **router:** redirect to root url when returned as UrlTree from guard
|
||||||
|
([#28271](https://github.com/angular/angular/issues/28271))
|
||||||
|
([1e58a21](https://github.com/angular/angular/commit/1e58a21)), closes
|
||||||
|
[#27845](https://github.com/angular/angular/issues/27845)
|
||||||
|
* **router:** set href when routerLink is used on an 'area' element
|
||||||
|
([#28441](https://github.com/angular/angular/issues/28441))
|
||||||
|
([d491a20](https://github.com/angular/angular/commit/d491a20)), closes
|
||||||
|
[#28401](https://github.com/angular/angular/issues/28401)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.3"></a>
|
||||||
|
# [8.0.0-beta.3](https://github.com/angular/angular/compare/8.0.0-beta.2...8.0.0-beta.3) (2019-02-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Bazel builder resolves with require.resolve() ([#28478](https://github.com/angular/angular/issues/28478)) ([36902e2](https://github.com/angular/angular/commit/36902e2))
|
||||||
|
* **bazel:** fix integration test for bazel-schematics ([#28460](https://github.com/angular/angular/issues/28460)) ([b1e099b](https://github.com/angular/angular/commit/b1e099b))
|
||||||
|
* **compiler-cli:** base synthetic filepaths on input filepath ([#28453](https://github.com/angular/angular/issues/28453)) ([7219639](https://github.com/angular/angular/commit/7219639))
|
||||||
|
* **compiler-cli:** diagnostics should respect "newLine" compiler option ([#28352](https://github.com/angular/angular/issues/28352)) ([4aa189d](https://github.com/angular/angular/commit/4aa189d))
|
||||||
|
* **core:** remove createInjector() from public API ([#28509](https://github.com/angular/angular/issues/28509)) ([f2621db](https://github.com/angular/angular/commit/f2621db))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* pngcrush all pngs ([#28479](https://github.com/angular/angular/issues/28479)) ([ec6e730](https://github.com/angular/angular/commit/ec6e730)), closes [#18243](https://github.com/angular/angular/issues/18243)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.4"></a>
|
||||||
|
## [7.2.4](https://github.com/angular/angular/compare/7.2.3...7.2.4) (2019-02-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Bazel builder resolves with require.resolve() ([#28478](https://github.com/angular/angular/issues/28478)) ([d85d396](https://github.com/angular/angular/commit/d85d396))
|
||||||
|
* **bazel:** fix integration test for bazel-schematics ([#28460](https://github.com/angular/angular/issues/28460)) ([449da8c](https://github.com/angular/angular/commit/449da8c))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* pngcrush all pngs ([#28479](https://github.com/angular/angular/issues/28479)) ([1a25144](https://github.com/angular/angular/commit/1a25144)), closes [#18243](https://github.com/angular/angular/issues/18243)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.2"></a>
|
||||||
|
# [8.0.0-beta.2](https://github.com/angular/angular/compare/8.0.0-beta.1...8.0.0-beta.2) (2019-01-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** also pass afterDeclarations transformers to emitWithTsickle ([#28342](https://github.com/angular/angular/issues/28342)) ([70e426b](https://github.com/angular/angular/commit/70e426b))
|
||||||
|
* **forms:** don't override form group's dirty state when disabling controls ([#24591](https://github.com/angular/angular/issues/24591)) ([ef67282](https://github.com/angular/angular/commit/ef67282))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **compiler-cli:** expose ngtsc as a TscPlugin ([#28435](https://github.com/angular/angular/issues/28435)) ([a227c52](https://github.com/angular/angular/commit/a227c52))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* **core:** be more consistent about typeof checks ([#28400](https://github.com/angular/angular/issues/28400)) ([9af18c2](https://github.com/angular/angular/commit/9af18c2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.3"></a>
|
||||||
|
## [7.2.3](https://github.com/angular/angular/compare/7.2.2...7.2.3) (2019-01-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** add [@npm](https://github.com/npm)//tslib dep to e2e ts_library target in bazel-workspace schematic ([#28358](https://github.com/angular/angular/issues/28358)) ([8cee56e](https://github.com/angular/angular/commit/8cee56e))
|
||||||
|
* **bazel:** Bazel-workspace schematics should run in ScopedTree ([#28349](https://github.com/angular/angular/issues/28349)) ([260ac20](https://github.com/angular/angular/commit/260ac20))
|
||||||
|
* **bazel:** Builder should invoke local bazel/iblaze ([#28303](https://github.com/angular/angular/issues/28303)) ([12b8a6e](https://github.com/angular/angular/commit/12b8a6e))
|
||||||
|
* **bazel:** ng-new should run yarn install ([#28381](https://github.com/angular/angular/issues/28381)) ([a9d46e4](https://github.com/angular/angular/commit/a9d46e4))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* yarn version upgrade ([#28360](https://github.com/angular/angular/issues/28360)) ([cc1b2a5](https://github.com/angular/angular/commit/cc1b2a5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.1"></a>
|
||||||
|
# [8.0.0-beta.1](https://github.com/angular/angular/compare/8.0.0-beta.0...8.0.0-beta.1) (2019-01-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** increase node memory limit for ng_module rule to prevent OOM for big modules ([#28237](https://github.com/angular/angular/issues/28237)) ([73616ab](https://github.com/angular/angular/commit/73616ab))
|
||||||
|
* **router:** `skipLocationChange` with named outlets ([#28300](https://github.com/angular/angular/issues/28300)) ([50df897](https://github.com/angular/angular/commit/50df897)), closes [#27680](https://github.com/angular/angular/issues/27680) [#28200](https://github.com/angular/angular/issues/28200)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** Add support for SASS ([#28167](https://github.com/angular/angular/issues/28167)) ([f59f18c](https://github.com/angular/angular/commit/f59f18c))
|
||||||
|
* **compiler-cli:** resolve generated Sass/Less files to .css inputs ([#28166](https://github.com/angular/angular/issues/28166)) ([a58fd21](https://github.com/angular/angular/commit/a58fd21))
|
||||||
|
* **forms:** add `markAllAsTouched()` to `AbstractControl` ([#26812](https://github.com/angular/angular/issues/26812)) ([45bf911](https://github.com/angular/angular/commit/45bf911)), closes [#19400](https://github.com/angular/angular/issues/19400)
|
||||||
|
|
||||||
|
|
||||||
|
### Reverts
|
||||||
|
|
||||||
|
* "ci: use image based cache for windows BuildKite ([#27990](https://github.com/angular/angular/issues/27990))" ([#28160](https://github.com/angular/angular/issues/28160)) ([7bdf3fe](https://github.com/angular/angular/commit/7bdf3fe))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.2"></a>
|
||||||
|
## [7.2.2](https://github.com/angular/angular/compare/7.2.1...7.2.2) (2019-01-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Fix integration test after v8 bump ([#28194](https://github.com/angular/angular/issues/28194)) ([7b772e9](https://github.com/angular/angular/commit/7b772e9)), closes [#28142](https://github.com/angular/angular/issues/28142)
|
||||||
|
* **router:** `skipLocationChange` with named outlets ([#28301](https://github.com/angular/angular/issues/28301)) ([32737a6](https://github.com/angular/angular/commit/32737a6)), closes [#27680](https://github.com/angular/angular/issues/27680) [#28200](https://github.com/angular/angular/issues/28200)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **bazel:** Add support for SASS ([#28167](https://github.com/angular/angular/issues/28167)) ([a4d9192](https://github.com/angular/angular/commit/a4d9192))
|
||||||
|
* **compiler-cli:** resolve generated Sass/Less files to .css inputs ([#28166](https://github.com/angular/angular/issues/28166)) ([4c00059](https://github.com/angular/angular/commit/4c00059))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="8.0.0-beta.0"></a>
|
||||||
|
# [8.0.0-beta.0](https://github.com/angular/angular/compare/7.2.0...8.0.0-beta.0) (2019-01-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Add [@bazel](https://github.com/bazel)/bazel to dev deps ([#28032](https://github.com/angular/angular/issues/28032)) ([5a0deb8](https://github.com/angular/angular/commit/5a0deb8))
|
||||||
|
* **bazel:** Add /bazel-out to .gitignore ([#27874](https://github.com/angular/angular/issues/27874)) ([b05baa5](https://github.com/angular/angular/commit/b05baa5))
|
||||||
|
* **bazel:** Add ibazel to deps of Bazel project ([#28090](https://github.com/angular/angular/issues/28090)) ([605f450](https://github.com/angular/angular/commit/605f450))
|
||||||
|
* **bazel:** Bazel schematics should add router package ([#28141](https://github.com/angular/angular/issues/28141)) ([06e5bf1](https://github.com/angular/angular/commit/06e5bf1))
|
||||||
|
* **bazel:** flat module misses AMD module name on windows ([#27839](https://github.com/angular/angular/issues/27839)) ([935ce63](https://github.com/angular/angular/commit/935ce63))
|
||||||
|
* **bazel:** incorrectly always uses ngc-wrapped from "npm" workspace ([#28137](https://github.com/angular/angular/issues/28137)) ([d12db4e](https://github.com/angular/angular/commit/d12db4e))
|
||||||
|
* **bazel:** ng_package creates invalid typings reexport on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([4caf654](https://github.com/angular/angular/commit/4caf654))
|
||||||
|
* **bazel:** packager not properly removing amd directives on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([8473d68](https://github.com/angular/angular/commit/8473d68))
|
||||||
|
* **bazel:** protractor rule does not run spec files with underscore ([#28022](https://github.com/angular/angular/issues/28022)) ([65e72e9](https://github.com/angular/angular/commit/65e72e9))
|
||||||
|
* **bazel:** protractor utils cannot start server on windows ([#27915](https://github.com/angular/angular/issues/27915)) ([9de9c8a](https://github.com/angular/angular/commit/9de9c8a))
|
||||||
|
* **bazel:** replay compilation uses wrong compiler for building esm5 ([#28053](https://github.com/angular/angular/issues/28053)) ([cd04513](https://github.com/angular/angular/commit/cd04513))
|
||||||
|
* **bazel:** ts_web_test_suite now properly includes init_browser_spec.js ([#27965](https://github.com/angular/angular/issues/27965)) ([ce51dfb](https://github.com/angular/angular/commit/ce51dfb))
|
||||||
|
* **service-worker:** navigation urls backwards compatibility ([#27244](https://github.com/angular/angular/issues/27244)) ([d49d1e7](https://github.com/angular/angular/commit/d49d1e7))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **forms:** export NumberValueAccessor & RangeValueAccessor directives ([#27743](https://github.com/angular/angular/issues/27743)) ([ac15717](https://github.com/angular/angular/commit/ac15717))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* **platform-server:** use shared `DomElementSchemaRegistry` instance ([#28150](https://github.com/angular/angular/issues/28150)) ([#28151](https://github.com/angular/angular/issues/28151)) ([ce3a746](https://github.com/angular/angular/commit/ce3a746))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="7.2.1"></a>
|
||||||
|
## [7.2.1](https://github.com/angular/angular/compare/7.2.0...7.2.1) (2019-01-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **bazel:** Add [@bazel](https://github.com/bazel)/bazel to dev deps ([#28032](https://github.com/angular/angular/issues/28032)) ([21093b9](https://github.com/angular/angular/commit/21093b9))
|
||||||
|
* **bazel:** Add /bazel-out to .gitignore ([#27874](https://github.com/angular/angular/issues/27874)) ([e4fc8ba](https://github.com/angular/angular/commit/e4fc8ba))
|
||||||
|
* **bazel:** Add ibazel to deps of Bazel project ([#28090](https://github.com/angular/angular/issues/28090)) ([28d34b6](https://github.com/angular/angular/commit/28d34b6))
|
||||||
|
* **bazel:** Bazel schematics should add router package ([#28141](https://github.com/angular/angular/issues/28141)) ([02a852a](https://github.com/angular/angular/commit/02a852a))
|
||||||
|
* **bazel:** flat module misses AMD module name on windows ([#27839](https://github.com/angular/angular/issues/27839)) ([c3d8e28](https://github.com/angular/angular/commit/c3d8e28))
|
||||||
|
* **bazel:** incorrectly always uses ngc-wrapped from "npm" workspace ([#28137](https://github.com/angular/angular/issues/28137)) ([ca3965a](https://github.com/angular/angular/commit/ca3965a))
|
||||||
|
* **bazel:** ng_package creates invalid typings reexport on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([6b394f6](https://github.com/angular/angular/commit/6b394f6))
|
||||||
|
* **bazel:** packager not properly removing amd directives on windows ([#27829](https://github.com/angular/angular/issues/27829)) ([fad4145](https://github.com/angular/angular/commit/fad4145))
|
||||||
|
* **bazel:** protractor rule does not run spec files with underscore ([#28022](https://github.com/angular/angular/issues/28022)) ([f05c5f8](https://github.com/angular/angular/commit/f05c5f8))
|
||||||
|
* **bazel:** protractor utils cannot start server on windows ([#27915](https://github.com/angular/angular/issues/27915)) ([0be8487](https://github.com/angular/angular/commit/0be8487))
|
||||||
|
* **bazel:** replay compilation uses wrong compiler for building esm5 ([#28053](https://github.com/angular/angular/issues/28053)) ([fbbdaaa](https://github.com/angular/angular/commit/fbbdaaa))
|
||||||
|
* **router:** ensure URL is updated after second redirect with UrlUpdateStrategy="eager" ([#27680](https://github.com/angular/angular/issues/27680)) ([6ae7aee](https://github.com/angular/angular/commit/6ae7aee)), closes [#27116](https://github.com/angular/angular/issues/27116)
|
||||||
|
* **service-worker:** navigation urls backwards compatibility ([#27244](https://github.com/angular/angular/issues/27244)) ([585e871](https://github.com/angular/angular/commit/585e871))
|
||||||
|
|
||||||
|
|
||||||
|
### Performance Improvements
|
||||||
|
|
||||||
|
* **platform-server:** use shared `DomElementSchemaRegistry` instance ([#28150](https://github.com/angular/angular/issues/28150)) ([#28151](https://github.com/angular/angular/issues/28151)) ([6851581](https://github.com/angular/angular/commit/6851581))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="7.2.0"></a>
|
<a name="7.2.0"></a>
|
||||||
# [7.2.0](https://github.com/angular/angular/compare/7.1.4...7.2.0) (2019-01-07)
|
# [7.2.0](https://github.com/angular/angular/compare/7.1.4...7.2.0) (2019-01-07)
|
||||||
|
|
||||||
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2014-2018 Google, Inc. http://angular.io
|
Copyright (c) 2010-2019 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
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[](https://circleci.com/gh/angular/angular/tree/master)
|
[](https://circleci.com/gh/angular/workflows/angular/tree/master)
|
||||||
[](https://www.browserstack.com/automate/public-build/LzF3RzBVVGt6VWE2S0hHaC9uYllOZz09LS1BVjNTclBKV0x4eVRlcjA4QVY1M0N3PT0=--eb4ce8c8dc2c1c5b2b5352d473ee12a73ac20e06)
|
[](https://www.browserstack.com/automate/public-build/LzF3RzBVVGt6VWE2S0hHaC9uYllOZz09LS1BVjNTclBKV0x4eVRlcjA4QVY1M0N3PT0=--eb4ce8c8dc2c1c5b2b5352d473ee12a73ac20e06)
|
||||||
[](https://gitter.im/angular/angular?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[](https://gitter.im/angular/angular?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
[](https://www.npmjs.com/@angular/core)
|
[](https://www.npmjs.com/@angular/core)
|
||||||
|
153
WORKSPACE
153
WORKSPACE
@ -1,17 +1,6 @@
|
|||||||
workspace(name = "angular")
|
workspace(name = "angular")
|
||||||
|
|
||||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
load(
|
|
||||||
"//packages/bazel:package.bzl",
|
|
||||||
"rules_angular_dependencies",
|
|
||||||
"rules_angular_dev_dependencies",
|
|
||||||
)
|
|
||||||
|
|
||||||
http_archive(
|
|
||||||
name = "io_bazel_rules_go",
|
|
||||||
sha256 = "b7a62250a3a73277ade0ce306d22f122365b513f5402222403e507f2f997d421",
|
|
||||||
url = "https://github.com/bazelbuild/rules_go/releases/download/0.16.3/rules_go-0.16.3.tar.gz",
|
|
||||||
)
|
|
||||||
|
|
||||||
# Uncomment for local bazel rules development
|
# Uncomment for local bazel rules development
|
||||||
#local_repository(
|
#local_repository(
|
||||||
@ -19,101 +8,129 @@ http_archive(
|
|||||||
# path = "../rules_nodejs",
|
# path = "../rules_nodejs",
|
||||||
#)
|
#)
|
||||||
#local_repository(
|
#local_repository(
|
||||||
# name = "build_bazel_rules_typescript",
|
# name = "npm_bazel_typescript",
|
||||||
# path = "../rules_typescript",
|
# path = "../rules_typescript",
|
||||||
#)
|
#)
|
||||||
|
|
||||||
# Angular Bazel users will call this function
|
# Fetch rules_nodejs so we can install our npm dependencies
|
||||||
rules_angular_dependencies()
|
|
||||||
|
|
||||||
# Install transitive deps of rules_nodejs
|
|
||||||
load("@build_bazel_rules_nodejs//:package.bzl", "rules_nodejs_dependencies")
|
|
||||||
|
|
||||||
rules_nodejs_dependencies()
|
|
||||||
|
|
||||||
# These are the dependencies only for us
|
|
||||||
rules_angular_dev_dependencies()
|
|
||||||
|
|
||||||
# Install transitive deps of rules_typescript
|
|
||||||
load("@build_bazel_rules_typescript//:package.bzl", "rules_typescript_dependencies")
|
|
||||||
|
|
||||||
rules_typescript_dependencies()
|
|
||||||
|
|
||||||
#
|
|
||||||
# Point Bazel to WORKSPACEs that live in subdirectories
|
|
||||||
#
|
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "rxjs",
|
name = "build_bazel_rules_nodejs",
|
||||||
sha256 = "72b0b4e517f43358f554c125e40e39f67688cd2738a8998b4a266981ed32f403",
|
sha256 = "3a3efbf223f6de733475602844ad3a8faa02abda25ab8cfe1d1ed0db134887cf",
|
||||||
strip_prefix = "package/src",
|
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.27.12/rules_nodejs-0.27.12.tar.gz"],
|
||||||
url = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Point to the integration test workspace just so that Bazel doesn't descend into it
|
# Check the bazel version and download npm dependencies
|
||||||
# when expanding the //... pattern
|
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "check_rules_nodejs_version", "node_repositories", "yarn_install")
|
||||||
local_repository(
|
|
||||||
name = "bazel_integration_test",
|
|
||||||
path = "integration/bazel",
|
|
||||||
)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Load and install our dependencies downloaded above.
|
|
||||||
#
|
|
||||||
load("@build_bazel_rules_nodejs//:defs.bzl", "check_bazel_version", "node_repositories", "yarn_install")
|
|
||||||
|
|
||||||
# Bazel version must be at least v0.21.0 because:
|
# Bazel version must be at least v0.21.0 because:
|
||||||
# - 0.21.0 --experimental_strict_action_env flag turned on by default which fixes cache when
|
# - 0.21.0 Using --incompatible_strict_action_env flag fixes cache when running `yarn bazel`
|
||||||
# running `yarn bazel` (see https://github.com/angular/angular/issues/27514#issuecomment-451438271)
|
# (see https://github.com/angular/angular/issues/27514#issuecomment-451438271)
|
||||||
check_bazel_version("0.21.0", """
|
check_bazel_version(
|
||||||
|
message = """
|
||||||
You no longer need to install Bazel on your machine.
|
You no longer need to install Bazel on your machine.
|
||||||
Angular has a dependency on the @bazel/bazel package which supplies it.
|
Angular has a dependency on the @bazel/bazel package which supplies it.
|
||||||
Try running `yarn bazel` instead.
|
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.21.0",
|
||||||
|
)
|
||||||
|
|
||||||
|
# The NodeJS rules version must be at least v0.15.3 because:
|
||||||
|
# - 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
|
||||||
|
check_rules_nodejs_version("0.27.12")
|
||||||
|
|
||||||
|
# Setup the Node.js toolchain
|
||||||
node_repositories(
|
node_repositories(
|
||||||
node_version = "10.9.0",
|
node_version = "10.9.0",
|
||||||
package_json = ["//:package.json"],
|
package_json = ["//:package.json"],
|
||||||
preserve_symlinks = True,
|
preserve_symlinks = True,
|
||||||
|
# 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_version = "1.12.1",
|
||||||
)
|
)
|
||||||
|
|
||||||
local_repository(
|
yarn_install(
|
||||||
name = "npm",
|
name = "npm",
|
||||||
path = "tools/npm_workspace",
|
data = [
|
||||||
|
"//:tools/npm/@angular_bazel/index.js",
|
||||||
|
"//:tools/npm/@angular_bazel/package.json",
|
||||||
|
"//:tools/postinstall-patches.js",
|
||||||
|
"//:tools/yarn/check-yarn.js",
|
||||||
|
],
|
||||||
|
package_json = "//:package.json",
|
||||||
|
# Don't install devDependencies, they are large and not used under Bazel
|
||||||
|
prod_only = True,
|
||||||
|
yarn_lock = "//:yarn.lock",
|
||||||
)
|
)
|
||||||
|
|
||||||
load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies")
|
# Install all bazel dependencies of the @npm npm packages
|
||||||
|
load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
|
||||||
|
|
||||||
go_rules_dependencies()
|
install_bazel_dependencies()
|
||||||
|
|
||||||
go_register_toolchains()
|
# Load angular dependencies
|
||||||
|
load("//packages/bazel:package.bzl", "rules_angular_dev_dependencies")
|
||||||
|
|
||||||
load("@io_bazel_rules_webtesting//web:repositories.bzl", "browser_repositories", "web_test_repositories")
|
rules_angular_dev_dependencies()
|
||||||
|
|
||||||
|
# Load karma dependencies
|
||||||
|
load("@npm_bazel_karma//:package.bzl", "rules_karma_dependencies")
|
||||||
|
|
||||||
|
rules_karma_dependencies()
|
||||||
|
|
||||||
|
# Setup the rules_webtesting toolchain
|
||||||
|
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
|
||||||
|
|
||||||
web_test_repositories()
|
web_test_repositories()
|
||||||
|
|
||||||
browser_repositories(
|
# Temporary work-around for https://github.com/angular/angular/issues/28681
|
||||||
chromium = True,
|
# TODO(gregmagolan): go back to @io_bazel_rules_webtesting browser_repositories
|
||||||
firefox = True,
|
load("@npm_bazel_karma//:browser_repositories.bzl", "browser_repositories")
|
||||||
)
|
|
||||||
|
|
||||||
load("@build_bazel_rules_typescript//:defs.bzl", "ts_setup_workspace")
|
browser_repositories()
|
||||||
|
|
||||||
|
# Setup the rules_typescript tooolchain
|
||||||
|
load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace")
|
||||||
|
|
||||||
ts_setup_workspace()
|
ts_setup_workspace()
|
||||||
|
|
||||||
load("@angular//:index.bzl", "ng_setup_workspace")
|
# Setup the rules_sass toolchain
|
||||||
|
|
||||||
ng_setup_workspace()
|
|
||||||
|
|
||||||
##################################
|
|
||||||
# Skylark documentation generation
|
|
||||||
|
|
||||||
load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")
|
load("@io_bazel_rules_sass//sass:sass_repositories.bzl", "sass_repositories")
|
||||||
|
|
||||||
sass_repositories()
|
sass_repositories()
|
||||||
|
|
||||||
|
# Setup the skydoc toolchain
|
||||||
load("@io_bazel_skydoc//skylark:skylark.bzl", "skydoc_repositories")
|
load("@io_bazel_skydoc//skylark:skylark.bzl", "skydoc_repositories")
|
||||||
|
|
||||||
skydoc_repositories()
|
skydoc_repositories()
|
||||||
|
|
||||||
|
load("@bazel_toolchains//rules:environments.bzl", "clang_env")
|
||||||
|
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
|
||||||
|
|
||||||
|
rbe_autoconfig(
|
||||||
|
name = "rbe_ubuntu1604_angular",
|
||||||
|
# The sha256 of marketplace.gcr.io/google/rbe-ubuntu16-04 container that is
|
||||||
|
# used by rbe_autoconfig() to pair toolchain configs in the @bazel_toolchains repo.
|
||||||
|
base_container_digest = "sha256:677c1317f14c6fd5eba2fd8ec645bfdc5119f64b3e5e944e13c89e0525cc8ad1",
|
||||||
|
# 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>
|
||||||
|
# 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 @com_google_protobuf.
|
||||||
|
# Java is needed for the Bazel's test executor Java tool.
|
||||||
|
digest = "sha256:74a8e9dca4781d5f277a7bd8e7ea7ed0f5906c79c9cd996205b6d32f090c62f3",
|
||||||
|
env = clang_env(),
|
||||||
|
registry = "marketplace.gcr.io",
|
||||||
|
repository = "google/rbe-ubuntu16-04-webtest",
|
||||||
|
)
|
||||||
|
2
aio/.gitignore
vendored
2
aio/.gitignore
vendored
@ -26,11 +26,13 @@
|
|||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
|
/.firebase/
|
||||||
/.sass-cache
|
/.sass-cache
|
||||||
/connect.lock
|
/connect.lock
|
||||||
/coverage
|
/coverage
|
||||||
/libpeerconnection.log
|
/libpeerconnection.log
|
||||||
debug.log
|
debug.log
|
||||||
|
firebase-debug.log
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
testem.log
|
testem.log
|
||||||
/typings
|
/typings
|
||||||
|
@ -41,16 +41,6 @@ Here are the most important tasks you might need to use:
|
|||||||
- `yarn example-e2e --filter=foo` - limit e2e tests to those containing the word "foo"
|
- `yarn example-e2e --filter=foo` - limit e2e tests to those containing the word "foo"
|
||||||
- `yarn example-e2e --setup --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
|
||||||
|
|
||||||
## Developing on Windows
|
|
||||||
The `packages/` directory may contain Linux-specific symlinks, which are not recognized by Windows.
|
|
||||||
These unresolved links cause the docs generation process to fail because it cannot locate certain files.
|
|
||||||
|
|
||||||
> Hint: The following steps require administration rights or [Windows Developer Mode](https://docs.microsoft.com/en-us/windows/uwp/get-started/enable-your-device-for-development) enabled!
|
|
||||||
|
|
||||||
To fix this problem, run `scripts/windows/create-symlinks.sh`. This command creates temporary files where the symlinks used to be. Make sure not to commit those files with your documentation changes.
|
|
||||||
When you are done making and testing your documentation changes, you can restore the original symlinks and delete the temporary files by running `scripts/windows/remove-symlinks.sh`.
|
|
||||||
|
|
||||||
It's necessary to remove the temporary files, because otherwise they're displayed as local changes in your git working copy and certain operations are blocked.
|
|
||||||
|
|
||||||
## Using ServiceWorker locally
|
## Using ServiceWorker locally
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Image metadata and config
|
# Image metadata and config
|
||||||
FROM debian:jessie
|
FROM debian:stretch
|
||||||
|
|
||||||
LABEL name="angular.io PR preview" \
|
LABEL name="angular.io PR preview" \
|
||||||
description="This image implements the PR preview functionality for angular.io." \
|
description="This image implements the PR preview functionality for angular.io." \
|
||||||
@ -26,8 +26,8 @@ ARG AIO_GITHUB_ORGANIZATION=angular
|
|||||||
ARG TEST_AIO_GITHUB_ORGANIZATION=test-org
|
ARG TEST_AIO_GITHUB_ORGANIZATION=test-org
|
||||||
ARG AIO_GITHUB_REPO=angular
|
ARG AIO_GITHUB_REPO=angular
|
||||||
ARG TEST_AIO_GITHUB_REPO=test-repo
|
ARG TEST_AIO_GITHUB_REPO=test-repo
|
||||||
ARG AIO_GITHUB_TEAM_SLUGS=team,aio-contributors
|
ARG AIO_GITHUB_TEAM_SLUGS=aio-auto-previews,aio-contributors
|
||||||
ARG TEST_AIO_GITHUB_TEAM_SLUGS=team,aio-contributors
|
ARG TEST_AIO_GITHUB_TEAM_SLUGS=test-team-1,test-team-2
|
||||||
ARG AIO_NGINX_HOSTNAME=$AIO_DOMAIN_NAME
|
ARG AIO_NGINX_HOSTNAME=$AIO_DOMAIN_NAME
|
||||||
ARG TEST_AIO_NGINX_HOSTNAME=$TEST_AIO_DOMAIN_NAME
|
ARG TEST_AIO_NGINX_HOSTNAME=$TEST_AIO_DOMAIN_NAME
|
||||||
ARG AIO_NGINX_PORT_HTTP=80
|
ARG AIO_NGINX_PORT_HTTP=80
|
||||||
@ -40,7 +40,7 @@ ARG AIO_TRUSTED_PR_LABEL="aio: preview"
|
|||||||
ARG TEST_AIO_TRUSTED_PR_LABEL="aio: preview"
|
ARG TEST_AIO_TRUSTED_PR_LABEL="aio: preview"
|
||||||
ARG AIO_PREVIEW_SERVER_HOSTNAME=preview.localhost
|
ARG AIO_PREVIEW_SERVER_HOSTNAME=preview.localhost
|
||||||
ARG TEST_AIO_PREVIEW_SERVER_HOSTNAME=preview.localhost
|
ARG TEST_AIO_PREVIEW_SERVER_HOSTNAME=preview.localhost
|
||||||
ARG AIO_ARTIFACT_MAX_SIZE=20971520
|
ARG AIO_ARTIFACT_MAX_SIZE=26214400
|
||||||
ARG TEST_AIO_ARTIFACT_MAX_SIZE=200
|
ARG TEST_AIO_ARTIFACT_MAX_SIZE=200
|
||||||
ARG AIO_PREVIEW_SERVER_PORT=3000
|
ARG AIO_PREVIEW_SERVER_PORT=3000
|
||||||
ARG TEST_AIO_PREVIEW_SERVER_PORT=3001
|
ARG TEST_AIO_PREVIEW_SERVER_PORT=3001
|
||||||
@ -76,21 +76,20 @@ RUN apt-get update -y && apt-get install -y curl
|
|||||||
RUN curl --silent --show-error --location https://deb.nodesource.com/setup_10.x | bash -
|
RUN curl --silent --show-error --location https://deb.nodesource.com/setup_10.x | bash -
|
||||||
RUN curl --silent --show-error https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
RUN curl --silent --show-error https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
||||||
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
||||||
RUN echo "deb http://ftp.debian.org/debian jessie-backports main" | tee /etc/apt/sources.list.d/backports.list
|
RUN echo "deb http://ftp.debian.org/debian stretch-backports main" | tee /etc/apt/sources.list.d/backports.list
|
||||||
|
|
||||||
|
|
||||||
# Install packages
|
# Install packages
|
||||||
RUN apt-get update -y && apt-get install -y \
|
RUN apt-get update -y && apt-get install -y \
|
||||||
chkconfig \
|
cron=3.0pl1-128+deb9u1 \
|
||||||
cron \
|
dnsmasq=2.76-5+deb9u2 \
|
||||||
dnsmasq \
|
nano=2.7.4-1 \
|
||||||
nano \
|
nginx=1.10.3-1+deb9u2 \
|
||||||
nodejs \
|
nodejs=10.15.3-1nodesource1 \
|
||||||
openssl \
|
openssl=1.1.0j-1~deb9u1 \
|
||||||
rsyslog \
|
rsyslog=8.24.0-1 \
|
||||||
yarn
|
yarn=1.15.2-1
|
||||||
RUN apt-get install -t jessie-backports -y nginx
|
RUN yarn global add pm2@3.5.0
|
||||||
RUN yarn global add pm2@2
|
|
||||||
|
|
||||||
|
|
||||||
# Set up log rotation
|
# Set up log rotation
|
||||||
@ -151,8 +150,7 @@ RUN sed -i "s|{{\$AIO_PREVIEW_SERVER_PORT}}|$TEST_AIO_PREVIEW_SERVER_PORT|g" /et
|
|||||||
|
|
||||||
|
|
||||||
# Set up pm2
|
# Set up pm2
|
||||||
RUN pm2 startup systemv -u root > /dev/null
|
RUN pm2 startup --user root > /dev/null
|
||||||
RUN chkconfig pm2-root on
|
|
||||||
|
|
||||||
|
|
||||||
# Set up the shell scripts
|
# Set up the shell scripts
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// Imports
|
// Imports
|
||||||
import * as cp from 'child_process';
|
import * as cp from 'child_process';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as http from 'http';
|
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as shell from 'shelljs';
|
import * as shell from 'shelljs';
|
||||||
import {AIO_DOWNLOADS_DIR, HIDDEN_DIR_PREFIX} from '../common/constants';
|
import {AIO_DOWNLOADS_DIR, HIDDEN_DIR_PREFIX} from '../common/constants';
|
||||||
@ -105,18 +104,7 @@ class Helper {
|
|||||||
Object.keys(this.portPerScheme).forEach(scheme => suiteFactory(scheme, this.portPerScheme[scheme]));
|
Object.keys(this.portPerScheme).forEach(scheme => suiteFactory(scheme, this.portPerScheme[scheme]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public verifyResponse(status: number | [number, string], regex: string | RegExp = /^/): VerifyCmdResultFn {
|
public verifyResponse(status: number, regex: string | RegExp = /^/): VerifyCmdResultFn {
|
||||||
let statusCode: number;
|
|
||||||
let statusText: string;
|
|
||||||
|
|
||||||
if (Array.isArray(status)) {
|
|
||||||
statusCode = status[0];
|
|
||||||
statusText = status[1];
|
|
||||||
} else {
|
|
||||||
statusCode = status;
|
|
||||||
statusText = http.STATUS_CODES[statusCode] || 'UNKNOWN_STATUS_CODE';
|
|
||||||
}
|
|
||||||
|
|
||||||
return (result: CmdResult) => {
|
return (result: CmdResult) => {
|
||||||
const [headers, body] = result.stdout.
|
const [headers, body] = result.stdout.
|
||||||
split(/(?:\r?\n){2,}/).
|
split(/(?:\r?\n){2,}/).
|
||||||
@ -131,7 +119,7 @@ class Helper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
expect(result.success).toBe(true);
|
expect(result.success).toBe(true);
|
||||||
expect(headers).toContain(`${statusCode} ${statusText}`);
|
expect(headers).toMatch(new RegExp(`HTTP/(?:1\\.1|2) ${status} `));
|
||||||
expect(body).toMatch(regex);
|
expect(body).toMatch(regex);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -259,10 +259,10 @@ describe(`nginx`, () => {
|
|||||||
|
|
||||||
it('should disallow non-GET requests', async () => {
|
it('should disallow non-GET requests', async () => {
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
h.runCmd(`curl -iLX POST ${baseUrl}/42`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX POST ${baseUrl}/42`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX PUT ${baseUrl}/42`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX PUT ${baseUrl}/42`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX PATCH ${baseUrl}/42`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX PATCH ${baseUrl}/42`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX DELETE ${baseUrl}/42`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX DELETE ${baseUrl}/42`).then(h.verifyResponse(405)),
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -295,10 +295,10 @@ describe(`nginx`, () => {
|
|||||||
const url = `${scheme}://${host}/circle-build`;
|
const url = `${scheme}://${host}/circle-build`;
|
||||||
|
|
||||||
Promise.all([
|
Promise.all([
|
||||||
h.runCmd(`curl -iLX GET ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX GET ${url}`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX PUT ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX PUT ${url}`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX PATCH ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX PATCH ${url}`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX DELETE ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX DELETE ${url}`).then(h.verifyResponse(405)),
|
||||||
]).then(done);
|
]).then(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -334,10 +334,10 @@ describe(`nginx`, () => {
|
|||||||
|
|
||||||
it('should disallow non-POST requests', done => {
|
it('should disallow non-POST requests', done => {
|
||||||
Promise.all([
|
Promise.all([
|
||||||
h.runCmd(`curl -iLX GET ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX GET ${url}`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX PUT ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX PUT ${url}`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX PATCH ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX PATCH ${url}`).then(h.verifyResponse(405)),
|
||||||
h.runCmd(`curl -iLX DELETE ${url}`).then(h.verifyResponse([405, 'Not Allowed'])),
|
h.runCmd(`curl -iLX DELETE ${url}`).then(h.verifyResponse(405)),
|
||||||
]).then(done);
|
]).then(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json",
|
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"cli": {
|
"cli": {
|
||||||
"packageManager": "yarn",
|
"packageManager": "yarn",
|
||||||
@ -13,6 +13,13 @@
|
|||||||
"root": "",
|
"root": "",
|
||||||
"sourceRoot": "src",
|
"sourceRoot": "src",
|
||||||
"projectType": "application",
|
"projectType": "application",
|
||||||
|
"prefix": "aio",
|
||||||
|
"schematics": {
|
||||||
|
"@schematics/angular:component": {
|
||||||
|
"inlineStyle": true,
|
||||||
|
"style": "scss"
|
||||||
|
}
|
||||||
|
},
|
||||||
"architect": {
|
"architect": {
|
||||||
"build": {
|
"build": {
|
||||||
"builder": "@angular-devkit/build-angular:browser",
|
"builder": "@angular-devkit/build-angular:browser",
|
||||||
@ -20,7 +27,9 @@
|
|||||||
"outputPath": "dist",
|
"outputPath": "dist",
|
||||||
"index": "src/index.html",
|
"index": "src/index.html",
|
||||||
"main": "src/main.ts",
|
"main": "src/main.ts",
|
||||||
"tsConfig": "src/tsconfig.app.json",
|
"polyfills": "src/polyfills.ts",
|
||||||
|
"tsConfig": "tsconfig.app.json",
|
||||||
|
"webWorkerTsConfig": "tsconfig.worker.json",
|
||||||
"aot": true,
|
"aot": true,
|
||||||
"optimization": true,
|
"optimization": true,
|
||||||
"buildOptimizer": true,
|
"buildOptimizer": true,
|
||||||
@ -31,11 +40,9 @@
|
|||||||
"extractLicenses": true,
|
"extractLicenses": true,
|
||||||
"namedChunks": true,
|
"namedChunks": true,
|
||||||
"vendorChunk": false,
|
"vendorChunk": false,
|
||||||
"polyfills": "src/polyfills.ts",
|
|
||||||
"assets": [
|
"assets": [
|
||||||
"src/assets",
|
"src/assets",
|
||||||
"src/generated",
|
"src/generated",
|
||||||
"src/app/search/search-worker.js",
|
|
||||||
"src/pwa-manifest.json",
|
"src/pwa-manifest.json",
|
||||||
"src/google385281288605d160.html",
|
"src/google385281288605d160.html",
|
||||||
{
|
{
|
||||||
@ -61,8 +68,8 @@
|
|||||||
"next": {
|
"next": {
|
||||||
"fileReplacements": [
|
"fileReplacements": [
|
||||||
{
|
{
|
||||||
"src": "src/environments/environment.ts",
|
"replace": "src/environments/environment.ts",
|
||||||
"replaceWith": "src/environments/environment.next.ts"
|
"with": "src/environments/environment.next.ts"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"serviceWorker": true
|
"serviceWorker": true
|
||||||
@ -70,8 +77,8 @@
|
|||||||
"stable": {
|
"stable": {
|
||||||
"fileReplacements": [
|
"fileReplacements": [
|
||||||
{
|
{
|
||||||
"src": "src/environments/environment.ts",
|
"replace": "src/environments/environment.ts",
|
||||||
"replaceWith": "src/environments/environment.stable.ts"
|
"with": "src/environments/environment.stable.ts"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"serviceWorker": true
|
"serviceWorker": true
|
||||||
@ -79,8 +86,8 @@
|
|||||||
"archive": {
|
"archive": {
|
||||||
"fileReplacements": [
|
"fileReplacements": [
|
||||||
{
|
{
|
||||||
"src": "src/environments/environment.ts",
|
"replace": "src/environments/environment.ts",
|
||||||
"replaceWith": "src/environments/environment.archive.ts"
|
"with": "src/environments/environment.archive.ts"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"serviceWorker": true
|
"serviceWorker": true
|
||||||
@ -104,6 +111,9 @@
|
|||||||
},
|
},
|
||||||
"archive": {
|
"archive": {
|
||||||
"browserTarget": "site:build:archive"
|
"browserTarget": "site:build:archive"
|
||||||
|
},
|
||||||
|
"ci": {
|
||||||
|
"progress": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -117,17 +127,13 @@
|
|||||||
"builder": "@angular-devkit/build-angular:karma",
|
"builder": "@angular-devkit/build-angular:karma",
|
||||||
"options": {
|
"options": {
|
||||||
"main": "src/test.ts",
|
"main": "src/test.ts",
|
||||||
"karmaConfig": "src/karma.conf.js",
|
|
||||||
"polyfills": "src/polyfills.ts",
|
"polyfills": "src/polyfills.ts",
|
||||||
"tsConfig": "src/tsconfig.spec.json",
|
"tsConfig": "tsconfig.spec.json",
|
||||||
"scripts": [],
|
"webWorkerTsConfig": "tsconfig.worker.json",
|
||||||
"styles": [
|
"karmaConfig": "karma.conf.js",
|
||||||
"src/styles.scss"
|
|
||||||
],
|
|
||||||
"assets": [
|
"assets": [
|
||||||
"src/assets",
|
"src/assets",
|
||||||
"src/generated",
|
"src/generated",
|
||||||
"src/app/search/search-worker.js",
|
|
||||||
"src/pwa-manifest.json",
|
"src/pwa-manifest.json",
|
||||||
"src/google385281288605d160.html",
|
"src/google385281288605d160.html",
|
||||||
{
|
{
|
||||||
@ -140,54 +146,41 @@
|
|||||||
"input": "node_modules/@webcomponents/custom-elements/src",
|
"input": "node_modules/@webcomponents/custom-elements/src",
|
||||||
"output": "/assets/js"
|
"output": "/assets/js"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"styles": [
|
||||||
|
"src/styles.scss"
|
||||||
|
],
|
||||||
|
"scripts": []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lint": {
|
"lint": {
|
||||||
"builder": "@angular-devkit/build-angular:tslint",
|
"builder": "@angular-devkit/build-angular:tslint",
|
||||||
"options": {
|
"options": {
|
||||||
"tsConfig": [
|
"tsConfig": [
|
||||||
"src/tsconfig.app.json",
|
"tsconfig.app.json",
|
||||||
"src/tsconfig.spec.json"
|
"tsconfig.spec.json",
|
||||||
|
"tsconfig.worker.json",
|
||||||
|
"tests/e2e/tsconfig.json"
|
||||||
],
|
],
|
||||||
"exclude": []
|
"exclude": [
|
||||||
|
"**/node_modules/**"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
|
||||||
},
|
|
||||||
"site-e2e": {
|
|
||||||
"root": "",
|
|
||||||
"projectType": "application",
|
|
||||||
"cli": {},
|
|
||||||
"schematics": {},
|
|
||||||
"architect": {
|
|
||||||
"e2e": {
|
"e2e": {
|
||||||
"builder": "@angular-devkit/build-angular:protractor",
|
"builder": "@angular-devkit/build-angular:protractor",
|
||||||
"options": {
|
"options": {
|
||||||
"protractorConfig": "tests/e2e/protractor.conf.js",
|
"protractorConfig": "tests/e2e/protractor.conf.js",
|
||||||
"devServerTarget": "site:serve"
|
"devServerTarget": "site:serve"
|
||||||
}
|
},
|
||||||
},
|
"configurations": {
|
||||||
"lint": {
|
"ci": {
|
||||||
"builder": "@angular-devkit/build-angular:tslint",
|
"devServerTarget": "site:serve:ci"
|
||||||
"options": {
|
}
|
||||||
"tsConfig": [
|
|
||||||
"tests/e2e/tsconfig.e2e.json"
|
|
||||||
],
|
|
||||||
"exclude": []
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"schematics": {
|
"defaultProject": "site"
|
||||||
"@schematics/angular:component": {
|
|
||||||
"inlineStyle": true,
|
|
||||||
"prefix": "aio",
|
|
||||||
"styleext": "scss"
|
|
||||||
},
|
|
||||||
"@schematics/angular:directive": {
|
|
||||||
"prefix": "aio"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
13
aio/browserslist
Normal file
13
aio/browserslist
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
|
||||||
|
# For additional information regarding the format and rule options, please see:
|
||||||
|
# https://github.com/browserslist/browserslist#queries
|
||||||
|
|
||||||
|
# Googlebot uses an older version of Chrome
|
||||||
|
# For additional information see: https://developers.google.com/search/docs/guides/rendering
|
||||||
|
|
||||||
|
> 0.5%
|
||||||
|
last 2 versions
|
||||||
|
Firefox ESR
|
||||||
|
not dead
|
||||||
|
IE 9-11 # For IE 9-11 support.
|
||||||
|
Chrome 41 # For Googlebot support.
|
@ -1,4 +1,4 @@
|
|||||||
<h1 class="no-toc">CLI Command Reference</h1>
|
# CLI Overview and Command Reference
|
||||||
|
|
||||||
The Angular CLI is a command-line interface tool that you use to initialize, develop, scaffold, and maintain Angular applications. You can use the tool directly in a command shell, or indirectly through an interactive UI such as [Angular Console](https://angularconsole.com).
|
The Angular CLI is a command-line interface tool that you use to initialize, develop, scaffold, and maintain Angular applications. You can use the tool directly in a command shell, or indirectly through an interactive UI such as [Angular Console](https://angularconsole.com).
|
||||||
|
|
||||||
@ -101,3 +101,9 @@ Options that specify files can be given as absolute paths, or as paths relative
|
|||||||
The [ng generate](cli/generate) and [ng add](cli/add) commands take as an argument the artifact or library to be generated or added to the current project.
|
The [ng generate](cli/generate) and [ng add](cli/add) commands take as an argument the artifact or library to be generated or added to the current project.
|
||||||
In addition to any general options, each artifact or library defines its own options in a *schematic*.
|
In addition to any general options, each artifact or library defines its own options in a *schematic*.
|
||||||
Schematic options are supplied to the command in the same format as immediate command options.
|
Schematic options are supplied to the command in the same format as immediate command options.
|
||||||
|
|
||||||
|
|
||||||
|
### Building with Bazel
|
||||||
|
|
||||||
|
Optionally, you can configure the Angular CLI to use [Bazel](https://docs.bazel.build) as the build tool. For more information, see [Building with Bazel](guide/bazel).
|
||||||
|
|
||||||
|
48
aio/content/cli/usage-analytics-gathering.md
Normal file
48
aio/content/cli/usage-analytics-gathering.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# Gathering and Viewing Usage Analytics
|
||||||
|
|
||||||
|
Users can opt in to share their Angular CLI usage data with [Google Analytics](https://support.google.com/analytics/answer/1008015?hl=en), using the [`ng analytics` CLI command](analytics).
|
||||||
|
The data is also shared with the Angular team, and used to improve the CLI.
|
||||||
|
|
||||||
|
The gathering of CLI analytics data is disabled by default, and must be enabled at the project level by individual users.
|
||||||
|
It cannot be enabled at the project level for all users.
|
||||||
|
|
||||||
|
Data gathered in this way can be viewed on the Google Analytics site, but is not automatically visible on your own organization's Analytics site.
|
||||||
|
As an administrator for an Angular development group, you can configure your instance of Angular CLI to be able to see analytics data for your own team's usage of the Angular CLI.
|
||||||
|
This configuration option is separate from and in addition to other usage analytics that your users may be sharing with Google.
|
||||||
|
|
||||||
|
## Enable access to CLI usage data
|
||||||
|
|
||||||
|
To configure access to your own users' CLI usage data, use the `ng config` command to add a key to your global [`angular.json` workspace configuration file](guide/workspace-config).
|
||||||
|
The key goes under `cli.analyticsSharing` at the top level of the file, outside the `projects` sections.
|
||||||
|
The value of the key is your organization's tracking ID, as assigned by Google Analytics.
|
||||||
|
This ID is a string that looks like `UA-123456-12`.
|
||||||
|
|
||||||
|
You can choose to use a descriptive string as the key value, or be assigned a random key when you run the CLI command.
|
||||||
|
For example, the following command adds a configuration key named "tracking".
|
||||||
|
|
||||||
|
<code-example language="sh" class="code-shell">
|
||||||
|
ng config --global cli.analyticsSharing.tracking UA-123456-12
|
||||||
|
</code-example>
|
||||||
|
|
||||||
|
To turn off this feature, run the following command:
|
||||||
|
|
||||||
|
<code-example language="sh" class="code-shell">
|
||||||
|
ng config --global --remove cli.analyticsSharing
|
||||||
|
</code-example>
|
||||||
|
|
||||||
|
|
||||||
|
## Per user tracking
|
||||||
|
|
||||||
|
You can add a custom user ID to the global configuration, in order to identify unique usage of commands and flags.
|
||||||
|
If that user enables CLI analytics for their own project, your analytics display tracks and labels their individual usage.
|
||||||
|
|
||||||
|
|
||||||
|
<code-example language="sh" class="code-shell">
|
||||||
|
ng config --global cli.analyticsSharing.user SOME_USER_NAME
|
||||||
|
</code-example>
|
||||||
|
|
||||||
|
To generate a new random user ID, run the following command:
|
||||||
|
|
||||||
|
<code-example language="sh" class="code-shell">
|
||||||
|
ng config --global cli.analyticsSharing.user ""
|
||||||
|
</code-example>
|
9
aio/content/examples/.gitignore
vendored
9
aio/content/examples/.gitignore
vendored
@ -57,7 +57,9 @@ dist/
|
|||||||
|
|
||||||
# aot
|
# aot
|
||||||
**/*.ngsummary.json
|
**/*.ngsummary.json
|
||||||
|
upgrade-module/tsconfig-aot.json
|
||||||
!rollup-config.js
|
!rollup-config.js
|
||||||
|
upgrade-module/rollup-config.js
|
||||||
aot-compiler/**/*.d.ts
|
aot-compiler/**/*.d.ts
|
||||||
aot-compiler/**/*.factory.d.ts
|
aot-compiler/**/*.factory.d.ts
|
||||||
upgrade-phonecat-2-hybrid/aot/**/*
|
upgrade-phonecat-2-hybrid/aot/**/*
|
||||||
@ -84,5 +86,12 @@ upgrade-phonecat-2-hybrid/aot/**/*
|
|||||||
*stackblitz.no-link.html
|
*stackblitz.no-link.html
|
||||||
|
|
||||||
# ngUpgrade testing
|
# ngUpgrade testing
|
||||||
|
upgrade-phonecat-1-typescript/tsconfig-aot.json
|
||||||
|
upgrade-phonecat-1-typescript/rollup-config.js
|
||||||
|
upgrade-phonecat-3-final/tsconfig-aot.json
|
||||||
|
upgrade-phonecat-3-final/rollup-config.js
|
||||||
!upgrade-phonecat-*/**/karma.conf.js
|
!upgrade-phonecat-*/**/karma.conf.js
|
||||||
!upgrade-phonecat-*/**/karma-test-shim.js
|
!upgrade-phonecat-*/**/karma-test-shim.js
|
||||||
|
|
||||||
|
# schematics
|
||||||
|
!schematics-for-libraries/projects/my-lib/package.json
|
@ -20,7 +20,7 @@ export class AppComponent {
|
|||||||
movies: IMovie[] = [];
|
movies: IMovie[] = [];
|
||||||
showImage = true;
|
showImage = true;
|
||||||
title = 'AngularJS to Angular Quick Ref Cookbook';
|
title = 'AngularJS to Angular Quick Ref Cookbook';
|
||||||
toggleImage(event: UIEvent) {
|
toggleImage(event?: UIEvent) {
|
||||||
this.showImage = !this.showImage;
|
this.showImage = !this.showImage;
|
||||||
this.eventType = (event && event.type) || 'not provided';
|
this.eventType = (event && event.type) || 'not provided';
|
||||||
}
|
}
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
import { Injectable, Pipe, PipeTransform } from '@angular/core';
|
|
||||||
import { DatePipe } from '@angular/common';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
// #docregion date-pipe
|
|
||||||
@Pipe({name: 'date', pure: true})
|
|
||||||
export class StringSafeDatePipe extends DatePipe implements PipeTransform {
|
|
||||||
transform(value: any, format: string): string {
|
|
||||||
value = typeof value === 'string' ?
|
|
||||||
Date.parse(value) : value;
|
|
||||||
return super.transform(value, format);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// #enddocregion date-pipe
|
|
@ -19,6 +19,7 @@ import { HeroListAutoCalcPageComponent } from './hero-list-auto-page.component';
|
|||||||
import { HeroListAutoComponent } from './hero-list-auto.component';
|
import { HeroListAutoComponent } from './hero-list-auto.component';
|
||||||
import { HomeComponent } from './home.component';
|
import { HomeComponent } from './home.component';
|
||||||
import { AboutComponent } from './about.component';
|
import { AboutComponent } from './about.component';
|
||||||
|
import { InsertRemoveComponent } from './insert-remove.component';
|
||||||
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
@ -56,6 +57,7 @@ import { AboutComponent } from './about.component';
|
|||||||
HeroListAutoCalcPageComponent,
|
HeroListAutoCalcPageComponent,
|
||||||
HeroListAutoComponent,
|
HeroListAutoComponent,
|
||||||
HomeComponent,
|
HomeComponent,
|
||||||
|
InsertRemoveComponent,
|
||||||
AboutComponent
|
AboutComponent
|
||||||
],
|
],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent]
|
||||||
|
@ -2,30 +2,31 @@
|
|||||||
|
|
||||||
import { browser, element, by } from 'protractor';
|
import { browser, element, by } from 'protractor';
|
||||||
|
|
||||||
describe('Attribute directives', function () {
|
describe('Attribute directives', () => {
|
||||||
|
|
||||||
let _title = 'My First Attribute Directive';
|
let _title = 'My First Attribute Directive';
|
||||||
|
|
||||||
beforeAll(function () {
|
beforeAll(() => {
|
||||||
browser.get('');
|
browser.get('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should display correct title: ${_title}`, function () {
|
it(`should display correct title: ${_title}`, () => {
|
||||||
expect(element(by.css('h1')).getText()).toEqual(_title);
|
expect(element(by.css('h1')).getText()).toEqual(_title);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to select green highlight', function () {
|
it('should be able to select green highlight', () => {
|
||||||
let highlightedEle = element(by.cssContainingText('p', 'Highlight me!'));
|
const highlightedEle = element(by.cssContainingText('p', 'Highlight me!'));
|
||||||
let lightGreen = 'rgba(144, 238, 144, 1)';
|
const lightGreen = 'rgba(144, 238, 144, 1)';
|
||||||
|
const getBgColor = () => highlightedEle.getCssValue('background-color');
|
||||||
|
|
||||||
expect(highlightedEle.getCssValue('background-color')).not.toEqual(lightGreen);
|
expect(highlightedEle.getCssValue('background-color')).not.toEqual(lightGreen);
|
||||||
// let greenRb = element(by.cssContainingText('input', 'Green'));
|
|
||||||
let greenRb = element.all(by.css('input')).get(0);
|
|
||||||
greenRb.click().then(function() {
|
|
||||||
// TypeScript Todo: find the right type for highlightedEle
|
|
||||||
browser.actions().mouseMove(highlightedEle as any).perform();
|
|
||||||
expect(highlightedEle.getCssValue('background-color')).toEqual(lightGreen);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
const greenRb = element.all(by.css('input')).get(0);
|
||||||
|
greenRb.click();
|
||||||
|
browser.actions().mouseMove(highlightedEle).perform();
|
||||||
|
|
||||||
|
// Wait for up to 2s for the background color to be updated,
|
||||||
|
// to account for slow environments (e.g. CI).
|
||||||
|
browser.wait(() => highlightedEle.getCssValue('background-color').then(c => c === lightGreen), 2000);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<h1>My First Attribute Directive</h1>
|
<h1>My First Attribute Directive</h1>
|
||||||
<!-- #docregion applied -->
|
<!-- #docregion applied -->
|
||||||
<p appHighlight>Highlight me!</p>
|
<p appHighlight>Highlight me!</p>
|
||||||
<!-- #enddocregion applied, -->
|
<!-- #enddocregion applied -->
|
||||||
|
|
||||||
<!-- #docregion color-1 -->
|
<!-- #docregion color-1 -->
|
||||||
<p appHighlight highlightColor="yellow">Highlighted in yellow</p>
|
<p appHighlight highlightColor="yellow">Highlighted in yellow</p>
|
||||||
@ -11,4 +11,4 @@
|
|||||||
|
|
||||||
<!-- #docregion color-2 -->
|
<!-- #docregion color-2 -->
|
||||||
<p appHighlight [highlightColor]="color">Highlighted with parent component's color</p>
|
<p appHighlight [highlightColor]="color">Highlighted with parent component's color</p>
|
||||||
<!-- #enddocregion color-2 -->
|
<!-- #enddocregion color-2 -->
|
@ -0,0 +1,3 @@
|
|||||||
|
<!-- #docregion unsupported -->
|
||||||
|
<p app:Highlight>This is invalid</p>
|
||||||
|
<!-- #enddocregion unsupported -->
|
@ -0,0 +1,20 @@
|
|||||||
|
'use strict'; // necessary for es6 output in node
|
||||||
|
|
||||||
|
import { browser, element, by } from 'protractor';
|
||||||
|
|
||||||
|
describe('Built Template Functions Example', function () {
|
||||||
|
beforeAll(function () {
|
||||||
|
browser.get('');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should have title Built-in Template Functions', function () {
|
||||||
|
let title = element.all(by.css('h1')).get(0);
|
||||||
|
expect(title.getText()).toEqual('Built-in Template Functions');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display $any( ) in h2', function () {
|
||||||
|
let header = element(by.css('h2'));
|
||||||
|
expect(header.getText()).toContain('$any( )');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,15 @@
|
|||||||
|
<h1>{{title}}</h1>
|
||||||
|
|
||||||
|
<h2><code>$any( )</code> type cast function and an undeclared member</h2>
|
||||||
|
|
||||||
|
<p>There is no such member as <code>bestByDate</code> in the following two examples, so nothing renders:</p>
|
||||||
|
<!-- #docregion any-type-cast-function-1 -->
|
||||||
|
<p>The item's undeclared best by date is: {{$any(item).bestByDate}}</p>
|
||||||
|
<!-- #enddocregion any-type-cast-function-1 -->
|
||||||
|
|
||||||
|
<h2>using <code>this</code></h2>
|
||||||
|
<!-- #docregion any-type-cast-function-2 -->
|
||||||
|
<p>The item's undeclared best by date is: {{$any(this).bestByDate}}</p>
|
||||||
|
<!-- #enddocregion any-type-cast-function-2 -->
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
import { TestBed, async } from '@angular/core/testing';
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
describe('AppComponent', () => {
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [
|
||||||
|
AppComponent
|
||||||
|
],
|
||||||
|
}).compileComponents();
|
||||||
|
}));
|
||||||
|
it('should create the app', async(() => {
|
||||||
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
|
const app = fixture.debugElement.componentInstance;
|
||||||
|
expect(app).toBeTruthy();
|
||||||
|
}));
|
||||||
|
});
|
@ -0,0 +1,16 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-root',
|
||||||
|
templateUrl: './app.component.html',
|
||||||
|
styleUrls: ['./app.component.css']
|
||||||
|
})
|
||||||
|
export class AppComponent {
|
||||||
|
title = 'Built-in Template Functions';
|
||||||
|
|
||||||
|
item = {
|
||||||
|
name : 'Telephone',
|
||||||
|
origin : 'Sweden',
|
||||||
|
price: 98
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
|
||||||
|
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
AppComponent
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
BrowserModule
|
||||||
|
],
|
||||||
|
providers: [],
|
||||||
|
bootstrap: [AppComponent]
|
||||||
|
})
|
||||||
|
export class AppModule { }
|
@ -0,0 +1,14 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Built-in Template Functions 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>
|
@ -1,4 +1,3 @@
|
|||||||
// #docregion
|
|
||||||
import { enableProdMode } from '@angular/core';
|
import { enableProdMode } from '@angular/core';
|
||||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||||
|
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"description": "Built-in Template Functions",
|
||||||
|
"files": [
|
||||||
|
"!**/*.d.ts",
|
||||||
|
"!**/*.js",
|
||||||
|
"!**/*.[1,2].*"
|
||||||
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
|
"tags": ["Built-in Template Functions"]
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"e2e": [
|
||||||
|
{
|
||||||
|
"cmd": "yarn",
|
||||||
|
"args": [
|
||||||
|
"e2e",
|
||||||
|
"--no-webdriver-update",
|
||||||
|
"--port={PORT}"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -73,8 +73,12 @@ describe('Dependency Injection Cookbook', function () {
|
|||||||
let yellow = 'rgba(255, 255, 0, 1)';
|
let yellow = 'rgba(255, 255, 0, 1)';
|
||||||
|
|
||||||
expect(target.getCssValue('background-color')).not.toEqual(yellow);
|
expect(target.getCssValue('background-color')).not.toEqual(yellow);
|
||||||
browser.actions().mouseMove(target.getWebElement()).perform();
|
|
||||||
expect(target.getCssValue('background-color')).toEqual(yellow);
|
browser.actions().mouseMove(target).perform();
|
||||||
|
|
||||||
|
// Wait for up to 2s for the background color to be updated,
|
||||||
|
// to account for slow environments (e.g. CI).
|
||||||
|
browser.wait(() => target.getCssValue('background-color').then(c => c === yellow), 2000);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('in Parent Finder', function () {
|
describe('in Parent Finder', function () {
|
||||||
|
@ -19,20 +19,20 @@ const DifferentParent = Parent;
|
|||||||
// #enddocregion provide-the-parent
|
// #enddocregion provide-the-parent
|
||||||
// The `parentType` defaults to `Parent` when omitting the second parameter.
|
// The `parentType` defaults to `Parent` when omitting the second parameter.
|
||||||
// #docregion provide-the-parent
|
// #docregion provide-the-parent
|
||||||
const provideParent =
|
export function provideParent
|
||||||
// #enddocregion provide-parent, provide-the-parent
|
// #enddocregion provide-parent, provide-the-parent
|
||||||
// #docregion provide-parent
|
// #docregion provide-parent
|
||||||
(component: any, parentType?: any) => {
|
(component: any, parentType?: any) {
|
||||||
return { provide: parentType || Parent, useExisting: forwardRef(() => component) };
|
return { provide: parentType || Parent, useExisting: forwardRef(() => component) };
|
||||||
};
|
}
|
||||||
// #enddocregion provide-parent
|
// #enddocregion provide-parent
|
||||||
|
|
||||||
// Simpler syntax version that always provides the component in the name of `Parent`.
|
// Simpler syntax version that always provides the component in the name of `Parent`.
|
||||||
const provideTheParent =
|
export function provideTheParent
|
||||||
// #docregion provide-the-parent
|
// #docregion provide-the-parent
|
||||||
(component: any) => {
|
(component: any) {
|
||||||
return { provide: Parent, useExisting: forwardRef(() => component) };
|
return { provide: Parent, useExisting: forwardRef(() => component) };
|
||||||
};
|
}
|
||||||
// #enddocregion provide-the-parent
|
// #enddocregion provide-the-parent
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"e2e": [
|
||||||
|
{
|
||||||
|
"cmd": "yarn",
|
||||||
|
"args": [
|
||||||
|
"e2e",
|
||||||
|
"--no-webdriver-update",
|
||||||
|
"--port={PORT}"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
71
aio/content/examples/event-binding/e2e/src/app.e2e-spec.ts
Normal file
71
aio/content/examples/event-binding/e2e/src/app.e2e-spec.ts
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
'use strict'; // necessary for es6 output in node
|
||||||
|
|
||||||
|
import { browser, element, by, protractor } from 'protractor';
|
||||||
|
|
||||||
|
describe('Event binding example', function () {
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
browser.get('');
|
||||||
|
});
|
||||||
|
|
||||||
|
let saveButton = element.all(by.css('button')).get(0);
|
||||||
|
let onSaveButton = element.all(by.css('button')).get(1);
|
||||||
|
let myClick = element.all(by.css('button')).get(2);
|
||||||
|
let deleteButton = element.all(by.css('button')).get(3);
|
||||||
|
let saveNoProp = element.all(by.css('button')).get(4);
|
||||||
|
let saveProp = element.all(by.css('button')).get(5);
|
||||||
|
|
||||||
|
|
||||||
|
it('should display Event Binding with Angular', function () {
|
||||||
|
expect(element(by.css('h1')).getText()).toEqual('Event Binding');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display 6 buttons', function() {
|
||||||
|
expect(saveButton.getText()).toBe('Save');
|
||||||
|
expect(onSaveButton.getText()).toBe('on-click Save');
|
||||||
|
expect(myClick.getText()).toBe('click with myClick');
|
||||||
|
expect(deleteButton.getText()).toBe('Delete');
|
||||||
|
expect(saveNoProp.getText()).toBe('Save, no propagation');
|
||||||
|
expect(saveProp.getText()).toBe('Save with propagation');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should support user input', function () {
|
||||||
|
let input = element(by.css('input'));
|
||||||
|
let bindingResult = element.all(by.css('h4')).get(1);
|
||||||
|
expect(bindingResult.getText()).toEqual('Result: teapot');
|
||||||
|
input.sendKeys('abc');
|
||||||
|
expect(bindingResult.getText()).toEqual('Result: teapotabc');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hide the item img', async () => {
|
||||||
|
let deleteButton = element.all(by.css('button')).get(3);
|
||||||
|
await deleteButton.click();
|
||||||
|
browser.switchTo().alert().accept();
|
||||||
|
expect(element.all(by.css('img')).get(0).getCssValue('display')).toEqual('none');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should show two alerts', async () => {
|
||||||
|
let parentDiv = element.all(by.css('.parent-div'));
|
||||||
|
let childDiv = element.all(by.css('div > div')).get(1);
|
||||||
|
await parentDiv.click();
|
||||||
|
browser.switchTo().alert().accept();
|
||||||
|
expect(childDiv.getText()).toEqual('Click me too! (child)');
|
||||||
|
await childDiv.click();
|
||||||
|
expect(browser.switchTo().alert().getText()).toEqual('Click me. Event target class is child-div');
|
||||||
|
browser.switchTo().alert().accept();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should show 1 alert from Save, no prop, button', async () => {
|
||||||
|
await saveNoProp.click();
|
||||||
|
expect(browser.switchTo().alert().getText()).toEqual('Saved. Event target is Save, no propagation');
|
||||||
|
browser.switchTo().alert().accept();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should show 2 alerts from Save w/prop button', async () => {
|
||||||
|
await saveProp.click();
|
||||||
|
expect(browser.switchTo().alert().getText()).toEqual('Saved.');
|
||||||
|
browser.switchTo().alert().accept();
|
||||||
|
expect(browser.switchTo().alert().getText()).toEqual('Saved.');
|
||||||
|
browser.switchTo().alert().accept();
|
||||||
|
});
|
||||||
|
});
|
25
aio/content/examples/event-binding/src/app/app.component.css
Normal file
25
aio/content/examples/event-binding/src/app/app.component.css
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
.group {
|
||||||
|
background-color: #dae8f9;
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.parent-div {
|
||||||
|
background-color: #bdd1f7;
|
||||||
|
border: solid 1px rgb(25, 118, 210);
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.parent-div:hover {
|
||||||
|
background-color: #8fb4f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.child-div {
|
||||||
|
margin-top: 1rem;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.child-div:hover {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
<h1 id="event-binding">Event Binding</h1>
|
||||||
|
|
||||||
|
<div class="group">
|
||||||
|
<h3>Target event</h3>
|
||||||
|
<!-- #docregion event-binding-1 -->
|
||||||
|
<button (click)="onSave($event)">Save</button>
|
||||||
|
<!-- #enddocregion event-binding-1 -->
|
||||||
|
|
||||||
|
<!-- #docregion event-binding-2 -->
|
||||||
|
<button on-click="onSave($event)">on-click Save</button>
|
||||||
|
<!-- #enddocregion event-binding-2 -->
|
||||||
|
|
||||||
|
<!-- #docregion custom-directive -->
|
||||||
|
<h4>myClick is an event on the custom ClickDirective:</h4>
|
||||||
|
<button (myClick)="clickMessage=$event" clickable>click with myClick</button>
|
||||||
|
{{clickMessage}}
|
||||||
|
<!-- #enddocregion custom-directive -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="group">
|
||||||
|
<h3>$event and event handling statements</h3>
|
||||||
|
<h4>Result: {{currentItem.name}}</h4>
|
||||||
|
|
||||||
|
<!-- #docregion event-binding-3-->
|
||||||
|
<input [value]="currentItem.name"
|
||||||
|
(input)="currentItem.name=$event.target.value" >
|
||||||
|
without NgModel
|
||||||
|
<!-- #enddocregion event-binding-3-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="group">
|
||||||
|
<h3>Binding to a nested component</h3>
|
||||||
|
<h4>Custom events with EventEmitter</h4>
|
||||||
|
<!-- #docregion event-binding-to-component -->
|
||||||
|
<app-item-detail (deleteRequest)="deleteItem($event)" [item]="currentItem"></app-item-detail>
|
||||||
|
<!-- #enddocregion event-binding-to-component -->
|
||||||
|
|
||||||
|
|
||||||
|
<h4>Click to see event target class:</h4>
|
||||||
|
<div class="parent-div" (click)="onClickMe($event)" clickable>Click me (parent)
|
||||||
|
<div class="child-div">Click me too! (child) </div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Saves only once:</h3>
|
||||||
|
<div (click)="onSave()" clickable>
|
||||||
|
<button (click)="onSave($event)">Save, no propagation</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Saves twice:</h3>
|
||||||
|
<div (click)="onSave()" clickable>
|
||||||
|
<button (click)="onSave()">Save with propagation</button>
|
||||||
|
</div>
|
@ -13,15 +13,15 @@ describe('AppComponent', () => {
|
|||||||
const app = fixture.debugElement.componentInstance;
|
const app = fixture.debugElement.componentInstance;
|
||||||
expect(app).toBeTruthy();
|
expect(app).toBeTruthy();
|
||||||
}));
|
}));
|
||||||
it(`should have as title 'app'`, async(() => {
|
it(`should have as title 'Featured product:'`, async(() => {
|
||||||
const fixture = TestBed.createComponent(AppComponent);
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
const app = fixture.debugElement.componentInstance;
|
const app = fixture.debugElement.componentInstance;
|
||||||
expect(app.title).toEqual('app');
|
expect(app.title).toEqual('Featured product:');
|
||||||
}));
|
}));
|
||||||
it('should render title in a h1 tag', async(() => {
|
it('should render title in a p tag', async(() => {
|
||||||
const fixture = TestBed.createComponent(AppComponent);
|
const fixture = TestBed.createComponent(AppComponent);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
const compiled = fixture.debugElement.nativeElement;
|
const compiled = fixture.debugElement.nativeElement;
|
||||||
expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
|
expect(compiled.querySelector('p').textContent).toContain('Featured product:');
|
||||||
}));
|
}));
|
||||||
});
|
});
|
29
aio/content/examples/event-binding/src/app/app.component.ts
Normal file
29
aio/content/examples/event-binding/src/app/app.component.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
import { Item } from './item';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-root',
|
||||||
|
templateUrl: './app.component.html',
|
||||||
|
styleUrls: ['./app.component.css']
|
||||||
|
})
|
||||||
|
export class AppComponent {
|
||||||
|
|
||||||
|
currentItem = { name: 'teapot'} ;
|
||||||
|
clickMessage = '';
|
||||||
|
|
||||||
|
onSave(event?: KeyboardEvent) {
|
||||||
|
const evtMsg = event ? ' Event target is ' + (<HTMLElement>event.target).textContent : '';
|
||||||
|
alert('Saved.' + evtMsg);
|
||||||
|
if (event) { event.stopPropagation(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteItem(item: Item) {
|
||||||
|
alert(`Delete the ${item}.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
onClickMe(event?: KeyboardEvent) {
|
||||||
|
const evtMsg = event ? ' Event target class is ' + (<HTMLElement>event.target).className : '';
|
||||||
|
alert('Click me.' + evtMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
22
aio/content/examples/event-binding/src/app/app.module.ts
Normal file
22
aio/content/examples/event-binding/src/app/app.module.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
|
||||||
|
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
import { ItemDetailComponent } from './item-detail/item-detail.component';
|
||||||
|
import { ClickDirective } from './click.directive';
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
AppComponent,
|
||||||
|
ItemDetailComponent,
|
||||||
|
ClickDirective
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
BrowserModule
|
||||||
|
],
|
||||||
|
providers: [],
|
||||||
|
bootstrap: [AppComponent]
|
||||||
|
})
|
||||||
|
export class AppModule { }
|
@ -0,0 +1,18 @@
|
|||||||
|
/* tslint:disable use-output-property-decorator directive-class-suffix */
|
||||||
|
import { Directive, ElementRef, EventEmitter, Output } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({selector: '[myClick]'})
|
||||||
|
export class ClickDirective {
|
||||||
|
@Output('myClick') clicks = new EventEmitter<string>(); // @Output(alias) propertyName = ...
|
||||||
|
|
||||||
|
toggle = false;
|
||||||
|
|
||||||
|
constructor(el: ElementRef) {
|
||||||
|
el.nativeElement
|
||||||
|
.addEventListener('click', (event: Event) => {
|
||||||
|
this.toggle = !this.toggle;
|
||||||
|
this.clicks.emit(this.toggle ? 'Click!' : '');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
.detail {
|
||||||
|
border: 1px solid rgb(25, 118, 210);
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100px;
|
||||||
|
display: block;
|
||||||
|
padding: 1rem 0;
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<div class="detail">
|
||||||
|
<p>This is the ItemDetailComponent</p>
|
||||||
|
<!-- #docregion line-through -->
|
||||||
|
<img src="{{itemImageUrl}}" [style.display]="displayNone">
|
||||||
|
<span [style.text-decoration]="lineThrough">{{ item.name }}
|
||||||
|
</span>
|
||||||
|
<button (click)="delete()">Delete</button>
|
||||||
|
<!-- #enddocregion line-through -->
|
||||||
|
</div>
|
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ItemDetailComponent } from './item-detail.component';
|
||||||
|
|
||||||
|
describe('ItemDetailComponent', () => {
|
||||||
|
let component: ItemDetailComponent;
|
||||||
|
let fixture: ComponentFixture<ItemDetailComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ItemDetailComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ItemDetailComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,30 @@
|
|||||||
|
/* tslint:disable use-input-property-decorator use-output-property-decorator */
|
||||||
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||||
|
|
||||||
|
import { Item } from '../item';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-item-detail',
|
||||||
|
styleUrls: ['./item-detail.component.css'],
|
||||||
|
templateUrl: './item-detail.component.html'
|
||||||
|
})
|
||||||
|
export class ItemDetailComponent {
|
||||||
|
|
||||||
|
@Input() item;
|
||||||
|
itemImageUrl = 'assets/teapot.svg';
|
||||||
|
lineThrough = '';
|
||||||
|
displayNone = '';
|
||||||
|
@Input() prefix = '';
|
||||||
|
|
||||||
|
// #docregion deleteRequest
|
||||||
|
// This component makes a request but it can't actually delete a hero.
|
||||||
|
@Output() deleteRequest = new EventEmitter<Item>();
|
||||||
|
|
||||||
|
delete() {
|
||||||
|
this.deleteRequest.emit(this.item.name);
|
||||||
|
this.displayNone = this.displayNone ? '' : 'none';
|
||||||
|
this.lineThrough = this.lineThrough ? '' : 'line-through';
|
||||||
|
}
|
||||||
|
// #enddocregion deleteRequest
|
||||||
|
|
||||||
|
}
|
4
aio/content/examples/event-binding/src/app/item.ts
Normal file
4
aio/content/examples/event-binding/src/app/item.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export class Item {
|
||||||
|
name: '';
|
||||||
|
}
|
||||||
|
|
1
aio/content/examples/event-binding/src/assets/teapot.svg
Normal file
1
aio/content/examples/event-binding/src/assets/teapot.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 23 KiB |
@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Demo</title>
|
<title>EventBinding</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
10
aio/content/examples/event-binding/stackblitz.json
Normal file
10
aio/content/examples/event-binding/stackblitz.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"description": "Event Binding",
|
||||||
|
"files": [
|
||||||
|
"!**/*.d.ts",
|
||||||
|
"!**/*.js",
|
||||||
|
"!**/*.[1,2].*"
|
||||||
|
],
|
||||||
|
"file": "src/app/app.component.ts",
|
||||||
|
"tags": ["Event Binding"]
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
'use strict'; // necessary for es6 output in node
|
||||||
|
|
||||||
|
import { browser, element, by } from 'protractor';
|
||||||
|
|
||||||
|
describe('Getting Started V0', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
return browser.get('/');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display "My Store" in the top bar', async() => {
|
||||||
|
const title = await element(by.css('app-root app-top-bar h1')).getText();
|
||||||
|
|
||||||
|
expect(title).toEqual('My Store');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display "Products" on the homepage', async() => {
|
||||||
|
const title = await element(by.css('app-root app-product-list h2')).getText();
|
||||||
|
|
||||||
|
expect(title).toEqual('Products');
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"useCommonBoilerplate": false,
|
||||||
|
"projectType": "getting-started"
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
p {
|
||||||
|
font-family: Lato;
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
<app-top-bar></app-top-bar>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<router-outlet></router-outlet>
|
||||||
|
</div>
|
@ -0,0 +1,8 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-root',
|
||||||
|
templateUrl: './app.component.html',
|
||||||
|
styleUrls: [ './app.component.css' ]
|
||||||
|
})
|
||||||
|
export class AppComponent {}
|
@ -0,0 +1,25 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
|
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
import { TopBarComponent } from './top-bar/top-bar.component';
|
||||||
|
import { ProductListComponent } from './product-list/product-list.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
BrowserModule,
|
||||||
|
ReactiveFormsModule,
|
||||||
|
RouterModule.forRoot([
|
||||||
|
{ path: '', component: ProductListComponent },
|
||||||
|
])
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
|
AppComponent,
|
||||||
|
TopBarComponent,
|
||||||
|
ProductListComponent
|
||||||
|
],
|
||||||
|
bootstrap: [ AppComponent ]
|
||||||
|
})
|
||||||
|
export class AppModule { }
|
@ -0,0 +1 @@
|
|||||||
|
<h2>Products</h2>
|
@ -0,0 +1,16 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
import { products } from '../products';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-product-list',
|
||||||
|
templateUrl: './product-list.component.html',
|
||||||
|
styleUrls: ['./product-list.component.css']
|
||||||
|
})
|
||||||
|
export class ProductListComponent {
|
||||||
|
products = products;
|
||||||
|
|
||||||
|
share() {
|
||||||
|
window.alert('The product has been shared!');
|
||||||
|
}
|
||||||
|
}
|
17
aio/content/examples/getting-started-v0/src/app/products.ts
Normal file
17
aio/content/examples/getting-started-v0/src/app/products.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
export const products = [
|
||||||
|
{
|
||||||
|
name: 'Phone XL',
|
||||||
|
price: 799,
|
||||||
|
description: 'A large phone with one of the best screens'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Phone Mini',
|
||||||
|
price: 699,
|
||||||
|
description: 'A great phone with one of the best cameras'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Phone Standard',
|
||||||
|
price: 299,
|
||||||
|
description: ''
|
||||||
|
}
|
||||||
|
];
|
@ -0,0 +1,5 @@
|
|||||||
|
<a [routerLink]="['/']">
|
||||||
|
<h1>My Store</h1>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a [routerLink]="['/cart']" class="button fancy-button"><i class="material-icons">shopping_cart</i>Checkout</a>
|
@ -0,0 +1,15 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-top-bar',
|
||||||
|
templateUrl: './top-bar.component.html',
|
||||||
|
styleUrls: ['./top-bar.component.css']
|
||||||
|
})
|
||||||
|
export class TopBarComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "Overnight",
|
||||||
|
"price": 25.99
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "2-Day",
|
||||||
|
"price": 9.99
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Postal",
|
||||||
|
"price": 2.99
|
||||||
|
}
|
||||||
|
]
|
18
aio/content/examples/getting-started-v0/src/index.html
Normal file
18
aio/content/examples/getting-started-v0/src/index.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Angular Getting Started</title>
|
||||||
|
<base href="/" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/icon?family=Material+Icons"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<app-root></app-root>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,9 +1,9 @@
|
|||||||
import { enableProdMode } from '@angular/core';
|
import { enableProdMode } from '@angular/core';
|
||||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
||||||
|
|
||||||
import { AppModule } from './app/app.module.2';
|
|
||||||
import { environment } from './environments/environment';
|
import { environment } from './environments/environment';
|
||||||
|
|
||||||
|
import { AppModule } from './app/app.module';
|
||||||
|
|
||||||
if (environment.production) {
|
if (environment.production) {
|
||||||
enableProdMode();
|
enableProdMode();
|
||||||
}
|
}
|
9
aio/content/examples/getting-started-v0/stackblitz.json
Normal file
9
aio/content/examples/getting-started-v0/stackblitz.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"description": "Getting Started",
|
||||||
|
"files":[
|
||||||
|
"!**/*.d.ts",
|
||||||
|
"!**/*.js",
|
||||||
|
"!**/*.[0-9].*"
|
||||||
|
],
|
||||||
|
"tags": ["Angular", "getting started", "tutorial"]
|
||||||
|
}
|
118
aio/content/examples/getting-started/e2e/src/app.e2e-spec.ts
Normal file
118
aio/content/examples/getting-started/e2e/src/app.e2e-spec.ts
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
'use strict'; // necessary for es6 output in node
|
||||||
|
|
||||||
|
import { browser, element, by, ExpectedConditions as EC, logging, ElementFinder, ElementArrayFinder } from 'protractor';
|
||||||
|
|
||||||
|
describe('Getting Started', () => {
|
||||||
|
const pageElements = {
|
||||||
|
topBarHeader: element(by.css('app-root app-top-bar h1')),
|
||||||
|
topBarLinks: element(by.css('app-root app-top-bar a')),
|
||||||
|
topBarCheckoutLink: element(by.cssContainingText('app-root app-top-bar a', 'Checkout')),
|
||||||
|
productListHeader: element(by.css('app-root app-product-list h2')),
|
||||||
|
productListItems: element.all(by.css('app-root app-product-list h3')),
|
||||||
|
productListLinks: element.all(by.css('app-root app-product-list a')),
|
||||||
|
productDetailsPage: element(by.css('app-root app-product-details div')),
|
||||||
|
cartPage: element(by.css('app-root app-cart'))
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('General', () => {
|
||||||
|
beforeAll(async() => {
|
||||||
|
await browser.get('/');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display "My Store"', async() => {
|
||||||
|
const title = await pageElements.topBarHeader.getText();
|
||||||
|
|
||||||
|
expect(title).toEqual('My Store');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display "Products" on the homepage', async() => {
|
||||||
|
const title = await pageElements.productListHeader.getText();
|
||||||
|
|
||||||
|
expect(title).toEqual('Products');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Product List', () => {
|
||||||
|
beforeAll(async() => {
|
||||||
|
await browser.get('/');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display 3 items', async() => {
|
||||||
|
const products = await pageElements.productListItems;
|
||||||
|
|
||||||
|
expect(products.length).toEqual(3);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Product Details', () => {
|
||||||
|
beforeEach(async() => {
|
||||||
|
await browser.get('/');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display information for a product', async() => {
|
||||||
|
await pageElements.productListLinks.get(0).click();
|
||||||
|
|
||||||
|
const product = pageElements.productDetailsPage;
|
||||||
|
const productHeader = await product.element(by.css('h3')).getText();
|
||||||
|
const productPrice = await product.element(by.css('h4')).getText();
|
||||||
|
const productDescription = await product.element(by.css('p')).getText();
|
||||||
|
|
||||||
|
expect(await product.isDisplayed()).toBeTruthy();
|
||||||
|
expect(productHeader).toBe('Phone XL');
|
||||||
|
expect(productPrice).toBe('$799.00');
|
||||||
|
expect(productDescription).toBe('A large phone with one of the best screens');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should add the product to the cart', async() => {
|
||||||
|
await pageElements.productListLinks.get(0).click();
|
||||||
|
|
||||||
|
const product = pageElements.productDetailsPage;
|
||||||
|
const buyButton = await product.element(by.css('button'));
|
||||||
|
const checkoutLink = pageElements.topBarCheckoutLink;
|
||||||
|
|
||||||
|
await buyButton.click();
|
||||||
|
await browser.wait(EC.alertIsPresent(), 1000);
|
||||||
|
await browser.switchTo().alert().accept();
|
||||||
|
await checkoutLink.click();
|
||||||
|
|
||||||
|
const cartItems = await element.all(by.css('app-root app-cart div.cart-item'));
|
||||||
|
expect(cartItems.length).toBe(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Cart', () => {
|
||||||
|
|
||||||
|
beforeEach(async() => {
|
||||||
|
await browser.get('/');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should go through the checkout process', async() => {
|
||||||
|
await pageElements.productListLinks.get(0).click();
|
||||||
|
|
||||||
|
const checkoutLink = pageElements.topBarCheckoutLink;
|
||||||
|
const productDetailsPage = pageElements.productDetailsPage;
|
||||||
|
const buyButton = await productDetailsPage.element(by.css('button'));
|
||||||
|
|
||||||
|
const cartPage = pageElements.cartPage;
|
||||||
|
const inputFields = cartPage.all(by.css('form input'));
|
||||||
|
|
||||||
|
const purchaseButton = await cartPage.element(by.css('button'));
|
||||||
|
const nameField = inputFields.get(0);
|
||||||
|
const addressField = inputFields.get(1);
|
||||||
|
|
||||||
|
await buyButton.click();
|
||||||
|
await browser.wait(EC.alertIsPresent(), 1000);
|
||||||
|
await browser.switchTo().alert().accept();
|
||||||
|
await checkoutLink.click();
|
||||||
|
|
||||||
|
await nameField.sendKeys('Customer');
|
||||||
|
await addressField.sendKeys('Address');
|
||||||
|
await purchaseButton.click();
|
||||||
|
|
||||||
|
const logs = await browser.manage().logs().get(logging.Type.BROWSER);
|
||||||
|
const cartMessages = logs.filter(({ message }) => message.includes('Your order has been submitted'));
|
||||||
|
|
||||||
|
expect(cartMessages.length).toBe(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
4
aio/content/examples/getting-started/example-config.json
Normal file
4
aio/content/examples/getting-started/example-config.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"useCommonBoilerplate": false,
|
||||||
|
"projectType": "getting-started"
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
<app-top-bar></app-top-bar>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<router-outlet></router-outlet>
|
||||||
|
</div>
|
@ -6,5 +6,4 @@ import { Component } from '@angular/core';
|
|||||||
styleUrls: ['./app.component.css']
|
styleUrls: ['./app.component.css']
|
||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
title = 'app';
|
|
||||||
}
|
}
|
55
aio/content/examples/getting-started/src/app/app.module.ts
Normal file
55
aio/content/examples/getting-started/src/app/app.module.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// #docplaster
|
||||||
|
// #docregion http-client-module-import, http-client-module
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { BrowserModule } from '@angular/platform-browser';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { HttpClientModule } from '@angular/common/http';
|
||||||
|
// #enddocregion http-client-module-import
|
||||||
|
import { ReactiveFormsModule } from '@angular/forms';
|
||||||
|
|
||||||
|
import { AppComponent } from './app.component';
|
||||||
|
import { TopBarComponent } from './top-bar/top-bar.component';
|
||||||
|
import { ProductListComponent } from './product-list/product-list.component';
|
||||||
|
import { ProductAlertsComponent } from './product-alerts/product-alerts.component';
|
||||||
|
import { ProductDetailsComponent } from './product-details/product-details.component';
|
||||||
|
// #enddocregion http-client-module
|
||||||
|
import { CartComponent } from './cart/cart.component';
|
||||||
|
import { ShippingComponent } from './shipping/shipping.component';
|
||||||
|
|
||||||
|
// #docregion product-details-route, http-client-module, shipping-route, cart-route
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
BrowserModule,
|
||||||
|
// #enddocregion product-details-route, cart-route
|
||||||
|
HttpClientModule,
|
||||||
|
// #docregion product-details-route, cart-route
|
||||||
|
ReactiveFormsModule,
|
||||||
|
RouterModule.forRoot([
|
||||||
|
{ path: '', component: ProductListComponent },
|
||||||
|
{ path: 'products/:productId', component: ProductDetailsComponent },
|
||||||
|
// #enddocregion product-details-route
|
||||||
|
{ path: 'cart', component: CartComponent },
|
||||||
|
// #enddocregion cart-route, http-client-module
|
||||||
|
{ path: 'shipping', component: ShippingComponent },
|
||||||
|
// #enddocregion shipping-route
|
||||||
|
// #docregion product-details-route, http-client-module, shipping-route, cart-route
|
||||||
|
])
|
||||||
|
],
|
||||||
|
// #enddocregion product-details-route, cart-route
|
||||||
|
declarations: [
|
||||||
|
AppComponent,
|
||||||
|
TopBarComponent,
|
||||||
|
ProductListComponent,
|
||||||
|
ProductAlertsComponent,
|
||||||
|
ProductDetailsComponent,
|
||||||
|
CartComponent,
|
||||||
|
// #enddocregion http-client-module
|
||||||
|
ShippingComponent
|
||||||
|
// #docregion http-client-module
|
||||||
|
],
|
||||||
|
bootstrap: [
|
||||||
|
AppComponent
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class AppModule { }
|
@ -0,0 +1,13 @@
|
|||||||
|
// #docplaster
|
||||||
|
// #docregion
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
// #docregion v1
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class CartService {
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
}
|
39
aio/content/examples/getting-started/src/app/cart.service.ts
Normal file
39
aio/content/examples/getting-started/src/app/cart.service.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// #docplaster
|
||||||
|
// #docregion import-http
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
// #enddocregion import-http
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
// #docregion props, methods, inject-http, get-shipping
|
||||||
|
export class CartService {
|
||||||
|
items = [];
|
||||||
|
// #enddocregion props, methods
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private http: HttpClient
|
||||||
|
) {}
|
||||||
|
// #enddocregion inject-http
|
||||||
|
// #docregion methods
|
||||||
|
|
||||||
|
addToCart(product) {
|
||||||
|
this.items.push(product);
|
||||||
|
}
|
||||||
|
|
||||||
|
getItems() {
|
||||||
|
return this.items;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearCart() {
|
||||||
|
this.items = [];
|
||||||
|
return this.items;
|
||||||
|
}
|
||||||
|
// #enddocregion methods
|
||||||
|
|
||||||
|
getShippingPrices() {
|
||||||
|
return this.http.get('/assets/shipping.json');
|
||||||
|
}
|
||||||
|
// #docregion props, methods, inject-http
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-cart',
|
||||||
|
templateUrl: './cart.component.html',
|
||||||
|
styleUrls: ['./cart.component.css']
|
||||||
|
})
|
||||||
|
export class CartComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user