@angular-eslint/eslint-plugin 14.0.0-alpha.0 → 14.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,255 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ # [13.5.0](https://github.com/angular-eslint/angular-eslint/compare/v13.4.0...v13.5.0) (2022-06-12)
7
+
8
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
9
+
10
+ # [13.4.0](https://github.com/angular-eslint/angular-eslint/compare/v13.3.0...v13.4.0) (2022-06-11)
11
+
12
+ ### Features
13
+
14
+ - update typescript-eslint packages to v5.27.1 ([#1022](https://github.com/angular-eslint/angular-eslint/issues/1022)) ([99e8d4a](https://github.com/angular-eslint/angular-eslint/commit/99e8d4a256b8d2d71ee9b809649cb0846fdadeb9))
15
+
16
+ # [13.3.0](https://github.com/angular-eslint/angular-eslint/compare/v13.2.1...v13.3.0) (2022-06-10)
17
+
18
+ ### Bug Fixes
19
+
20
+ - **eslint-plugin:** [sort-ngmodule-metadata-arrays] do not sort deps property ([#1001](https://github.com/angular-eslint/angular-eslint/issues/1001)) ([e6d12f2](https://github.com/angular-eslint/angular-eslint/commit/e6d12f21f94aeda5667a32d580b002fc1597cff2))
21
+
22
+ ## [13.2.1](https://github.com/angular-eslint/angular-eslint/compare/v13.2.0...v13.2.1) (2022-04-14)
23
+
24
+ ### Bug Fixes
25
+
26
+ - **eslint-plugin-template:** false positive conditional complexity in BoundAttribute > Interpolation ([#986](https://github.com/angular-eslint/angular-eslint/issues/986)) ([c3f3120](https://github.com/angular-eslint/angular-eslint/commit/c3f3120b57f7dfe7ff1ff3f3a8791b2cf988e905))
27
+
28
+ # [13.2.0](https://github.com/angular-eslint/angular-eslint/compare/v13.1.0...v13.2.0) (2022-04-03)
29
+
30
+ ### Features
31
+
32
+ - **eslint-plugin-template:** add require-localize-metadata rule ([#844](https://github.com/angular-eslint/angular-eslint/issues/844)) ([ca1edf0](https://github.com/angular-eslint/angular-eslint/commit/ca1edf0434b497a7bb756789136499243cee8fe9))
33
+
34
+ # [13.1.0](https://github.com/angular-eslint/angular-eslint/compare/v13.0.1...v13.1.0) (2022-02-13)
35
+
36
+ ### Bug Fixes
37
+
38
+ - rule docs links in create-eslint-rule utils ([#907](https://github.com/angular-eslint/angular-eslint/issues/907)) ([94f6e21](https://github.com/angular-eslint/angular-eslint/commit/94f6e2126088ac300e7a010a45e575cadd4d8e78))
39
+
40
+ ## [13.0.1](https://github.com/angular-eslint/angular-eslint/compare/v13.0.0...v13.0.1) (2021-11-19)
41
+
42
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
43
+
44
+ # [13.0.0](https://github.com/angular-eslint/angular-eslint/compare/v12.7.0...v13.0.0) (2021-11-18)
45
+
46
+ ### Features
47
+
48
+ - angular-eslint v13 ([#780](https://github.com/angular-eslint/angular-eslint/issues/780)) ([f7ce631](https://github.com/angular-eslint/angular-eslint/commit/f7ce631524dd7834a422a5ac93a4c0534f9f23fa))
49
+
50
+ # [12.7.0](https://github.com/angular-eslint/angular-eslint/compare/v12.6.1...v12.7.0) (2021-11-18)
51
+
52
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
53
+
54
+ ## [12.6.1](https://github.com/angular-eslint/angular-eslint/compare/v12.6.0...v12.6.1) (2021-10-26)
55
+
56
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
57
+
58
+ # [12.6.0](https://github.com/angular-eslint/angular-eslint/compare/v12.5.0...v12.6.0) (2021-10-25)
59
+
60
+ ### Bug Fixes
61
+
62
+ - **eslint-plugin:** [sort-ngmodule-metadata-arrays] remove the property restriction ([#694](https://github.com/angular-eslint/angular-eslint/issues/694)) ([440f6dc](https://github.com/angular-eslint/angular-eslint/commit/440f6dcd0d6b330d0af879df1acd306f931e2de1))
63
+ - **eslint-plugin:** [sort-ngmodule-metadata-arrays] report the correct node ([#693](https://github.com/angular-eslint/angular-eslint/issues/693)) ([886db08](https://github.com/angular-eslint/angular-eslint/commit/886db08eb0791330c999fdbf022f042613ac127c))
64
+ - **eslint-plugin:** more appropriate language for no-attribute-decorator ([#696](https://github.com/angular-eslint/angular-eslint/issues/696)) ([4dde82c](https://github.com/angular-eslint/angular-eslint/commit/4dde82cfeded9727341abea079399a7ef1b9dd9f))
65
+
66
+ ### Features
67
+
68
+ - **bundled-angular-compiler:** create own bundle for `@angular/compiler` ([#720](https://github.com/angular-eslint/angular-eslint/issues/720)) ([0c42299](https://github.com/angular-eslint/angular-eslint/commit/0c422993496bb2670fbd31f55a5fe829704f5112))
69
+
70
+ # [12.5.0](https://github.com/angular-eslint/angular-eslint/compare/v12.4.1...v12.5.0) (2021-09-20)
71
+
72
+ ### Features
73
+
74
+ - **utils:** publicly expose utils related to eslint-plugin ([#676](https://github.com/angular-eslint/angular-eslint/issues/676)) ([07711f1](https://github.com/angular-eslint/angular-eslint/commit/07711f14f497d01ab767089742d0b77fa25958c7))
75
+
76
+ ## [12.4.1](https://github.com/angular-eslint/angular-eslint/compare/v12.4.0...v12.4.1) (2021-09-09)
77
+
78
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
79
+
80
+ # [12.4.0](https://github.com/angular-eslint/angular-eslint/compare/v12.3.1...v12.4.0) (2021-09-09)
81
+
82
+ ### Bug Fixes
83
+
84
+ - **eslint-plugin:** [no-empty-lifecycle-method] incorrect suggestions and correct reports ([#606](https://github.com/angular-eslint/angular-eslint/issues/606)) ([a446e8f](https://github.com/angular-eslint/angular-eslint/commit/a446e8ff521725d354dc23242c4ad23bc52c9681))
85
+ - **eslint-plugin:** [sort-ngmodule-metadata-arrays] handle literal metadata and computed properties ([#667](https://github.com/angular-eslint/angular-eslint/issues/667)) ([f993069](https://github.com/angular-eslint/angular-eslint/commit/f99306977254e2894ad769448f0cbebd7665cbcd))
86
+ - **eslint-plugin:** properly handle computed literals for some rules ([#600](https://github.com/angular-eslint/angular-eslint/issues/600)) ([fbd6ff7](https://github.com/angular-eslint/angular-eslint/commit/fbd6ff7e5c5e4e249cbb5159c36cac3416e9ae3b))
87
+
88
+ ### Features
89
+
90
+ - **eslint-plugin:** [prefer-on-push-component-change-detection] add suggestion ([#666](https://github.com/angular-eslint/angular-eslint/issues/666)) ([3723c4c](https://github.com/angular-eslint/angular-eslint/commit/3723c4ca591ba8b62b78717e683ee82e7a5a4b07))
91
+ - **eslint-plugin:** [use-injectable-provided-in] add suggestion ([#594](https://github.com/angular-eslint/angular-eslint/issues/594)) ([bdef8c7](https://github.com/angular-eslint/angular-eslint/commit/bdef8c77bcc72aa20c58c2c5c8fd0489675adcfd))
92
+
93
+ ## [12.3.1](https://github.com/angular-eslint/angular-eslint/compare/v12.3.0...v12.3.1) (2021-07-15)
94
+
95
+ ### Bug Fixes
96
+
97
+ - **eslint-plugin:** handle literal `outputs` properly for [*-output-*] rules ([#595](https://github.com/angular-eslint/angular-eslint/issues/595)) ([8621a62](https://github.com/angular-eslint/angular-eslint/commit/8621a62a5360caac33fd87001e2928d7995a5a01))
98
+
99
+ # [12.3.0](https://github.com/angular-eslint/angular-eslint/compare/v12.2.2...v12.3.0) (2021-07-13)
100
+
101
+ ### Bug Fixes
102
+
103
+ - **eslint-plugin:** [no-input-prefix] handle alias and `inputs` metadata property ([#582](https://github.com/angular-eslint/angular-eslint/issues/582)) ([675ee11](https://github.com/angular-eslint/angular-eslint/commit/675ee11f541e9e08c87df75a9004a12d0f0403bf))
104
+ - **eslint-plugin:** [no-input-rename] handle alias and `inputs` metadata property ([#583](https://github.com/angular-eslint/angular-eslint/issues/583)) ([2883e18](https://github.com/angular-eslint/angular-eslint/commit/2883e185abca4cfd2a7191f5c10742d521f48a89))
105
+ - **eslint-plugin:** [use-component-view-encapsulation] handle literal `encapsulation` properly ([#586](https://github.com/angular-eslint/angular-eslint/issues/586)) ([3a9b7f4](https://github.com/angular-eslint/angular-eslint/commit/3a9b7f4056b33918ead342efa331d21b9b1f4309))
106
+ - **eslint-plugin:** [use-pipe-transform-interface] handle type imports properly in fix ([#592](https://github.com/angular-eslint/angular-eslint/issues/592)) ([ac3fb12](https://github.com/angular-eslint/angular-eslint/commit/ac3fb126f1171284db6a52775c044aaedef2b90e))
107
+
108
+ ### Features
109
+
110
+ - **eslint-plugin:** [component-selector] handle shadow dom components properly ([#559](https://github.com/angular-eslint/angular-eslint/issues/559)) ([ecbe684](https://github.com/angular-eslint/angular-eslint/commit/ecbe68431fb73177d905676fef3df9be9c646636))
111
+ - **eslint-plugin:** [no-pipe-impure] add suggestion ([#585](https://github.com/angular-eslint/angular-eslint/issues/585)) ([149bf2f](https://github.com/angular-eslint/angular-eslint/commit/149bf2ffe0af7af1b0fc6b249321b50cf5d9f0a6))
112
+ - **schematics:** better support @angular/cli 12.1 ([#591](https://github.com/angular-eslint/angular-eslint/issues/591)) ([c5da07b](https://github.com/angular-eslint/angular-eslint/commit/c5da07b2d0c506dde24f0abc3e212db9deeaca82))
113
+
114
+ ## [12.2.2](https://github.com/angular-eslint/angular-eslint/compare/v12.2.1...v12.2.2) (2021-07-10)
115
+
116
+ ### Bug Fixes
117
+
118
+ - **eslint-plugin:** [no-output-on-prefix] handle `getters` and `outputs` metadata property ([#566](https://github.com/angular-eslint/angular-eslint/issues/566)) ([5884482](https://github.com/angular-eslint/angular-eslint/commit/588448214c31f01ec78ea892095ff0d05048a8c8))
119
+ - **eslint-plugin:** [no-output-rename] handle `getters` and `outputs` metadata property ([#568](https://github.com/angular-eslint/angular-eslint/issues/568)) ([c803ffd](https://github.com/angular-eslint/angular-eslint/commit/c803ffdf020a29939cfd7d763e0206198b4eac72))
120
+
121
+ ## [12.2.1](https://github.com/angular-eslint/angular-eslint/compare/v12.2.0...v12.2.1) (2021-07-10)
122
+
123
+ ### Bug Fixes
124
+
125
+ - **eslint-plugin:** [no-output-native] handle `getters` and `outputs` metadata property ([#567](https://github.com/angular-eslint/angular-eslint/issues/567)) ([22b378d](https://github.com/angular-eslint/angular-eslint/commit/22b378dd0fa9fe8f50bc0858c98f7f453bc5d389))
126
+ - **eslint-plugin:** [no-output-on-prefix] correct false positives ([#525](https://github.com/angular-eslint/angular-eslint/issues/525)) ([3a66274](https://github.com/angular-eslint/angular-eslint/commit/3a662740cd0a15e5d96b9f358505795eeb65a1f7))
127
+
128
+ # [12.2.0](https://github.com/angular-eslint/angular-eslint/compare/v12.1.0...v12.2.0) (2021-06-20)
129
+
130
+ ### Bug Fixes
131
+
132
+ - **eslint-plugin:** [no-output-native] correct false positives ([#524](https://github.com/angular-eslint/angular-eslint/issues/524)) ([215abec](https://github.com/angular-eslint/angular-eslint/commit/215abec71cfb8bf276701cc4d7368931d7e3a61c))
133
+
134
+ ### Features
135
+
136
+ - **eslint-plugin:** [use-component-view-encapsulation] add suggestion ([#501](https://github.com/angular-eslint/angular-eslint/issues/501)) ([ea9e98d](https://github.com/angular-eslint/angular-eslint/commit/ea9e98d140e6ee237bf5cb46a756ec568b14bd11))
137
+
138
+ # [12.1.0](https://github.com/angular-eslint/angular-eslint/compare/v12.0.0...v12.1.0) (2021-05-30)
139
+
140
+ ### Bug Fixes
141
+
142
+ - **eslint-plugin:** [no-host-metadata-property] correct false positive with `allowStatic` option ([#482](https://github.com/angular-eslint/angular-eslint/issues/482)) ([89926d8](https://github.com/angular-eslint/angular-eslint/commit/89926d80b20b391515d4c400232cbf073c1bea4c))
143
+ - **eslint-plugin:** [no-output-on-prefix] not reporting failures on alias ([#471](https://github.com/angular-eslint/angular-eslint/issues/471)) ([f9ba372](https://github.com/angular-eslint/angular-eslint/commit/f9ba37253878183a4bd8363d63442b876486ca61))
144
+ - **eslint-plugin:** [relative-url-prefix] valid relative urls being reported ([#456](https://github.com/angular-eslint/angular-eslint/issues/456)) ([2247394](https://github.com/angular-eslint/angular-eslint/commit/2247394cf79aad9db892af5ed6378b93f8e327e6))
145
+ - **utils:** support passing `data` and `suggestions` individually for each error ([#491](https://github.com/angular-eslint/angular-eslint/issues/491)) ([70b01bd](https://github.com/angular-eslint/angular-eslint/commit/70b01bd83ddcaf3c57cab0701edb424dabf3a25f))
146
+
147
+ ### Features
148
+
149
+ - **eslint-plugin:** [no-empty-lifecycle-method] add suggestion ([#463](https://github.com/angular-eslint/angular-eslint/issues/463)) ([1d1a329](https://github.com/angular-eslint/angular-eslint/commit/1d1a32971376f3b0b9cc2fee37896ebad8d25b37))
150
+ - **eslint-plugin:** [no-host-metadata-property] add option to allow static values ([#478](https://github.com/angular-eslint/angular-eslint/issues/478)) ([d64c832](https://github.com/angular-eslint/angular-eslint/commit/d64c832d6236fd53c56c67cf7c16b1c56b336aeb))
151
+ - **eslint-plugin:** [no-input-rename] add option to allow some inputs ([#475](https://github.com/angular-eslint/angular-eslint/issues/475)) ([9c861dc](https://github.com/angular-eslint/angular-eslint/commit/9c861dc8d016d89675c3bfa1f11bac5865d48b8c))
152
+ - **eslint-plugin:** [prefer-output-readonly] add suggestion ([#459](https://github.com/angular-eslint/angular-eslint/issues/459)) ([f3ff789](https://github.com/angular-eslint/angular-eslint/commit/f3ff789bfbfa298af74a8755bbacc81935a4682c))
153
+ - **eslint-plugin:** [sort-ngmodule-metadata-arrays] add fixer ([#493](https://github.com/angular-eslint/angular-eslint/issues/493)) ([32fae47](https://github.com/angular-eslint/angular-eslint/commit/32fae47cd3c69540e4a5304b5abe1adb7f3c160e))
154
+
155
+ # [12.0.0](https://github.com/angular-eslint/angular-eslint/compare/v4.3.0...v12.0.0) (2021-05-13)
156
+
157
+ ### Features
158
+
159
+ - update eslint to ^7.26.0, [@typescript-eslint](https://github.com/typescript-eslint) to 4.23.0 ([9e31c38](https://github.com/angular-eslint/angular-eslint/commit/9e31c3881a13d6ce3b642b9c23c67e2e0f2d1aa1))
160
+ - update to angular v12 ([c80008d](https://github.com/angular-eslint/angular-eslint/commit/c80008df8f6b9d08daf3043dffc1be45f8cfbe81))
161
+
162
+ # [4.3.0](https://github.com/angular-eslint/angular-eslint/compare/v4.2.1...v4.3.0) (2021-05-12)
163
+
164
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
165
+
166
+ ## [4.2.1](https://github.com/angular-eslint/angular-eslint/compare/v4.2.0...v4.2.1) (2021-05-12)
167
+
168
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
169
+
170
+ # [4.2.0](https://github.com/angular-eslint/angular-eslint/compare/v4.1.0...v4.2.0) (2021-04-28)
171
+
172
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
173
+
174
+ # [4.1.0](https://github.com/angular-eslint/angular-eslint/compare/v4.0.0...v4.1.0) (2021-04-28)
175
+
176
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
177
+
178
+ # [4.0.0](https://github.com/angular-eslint/angular-eslint/compare/v3.0.1...v4.0.0) (2021-04-18)
179
+
180
+ ### Features
181
+
182
+ - **schematics:** options for convert-tslint-to-eslint ([#419](https://github.com/angular-eslint/angular-eslint/issues/419)) ([18fd863](https://github.com/angular-eslint/angular-eslint/commit/18fd863d6948578db96252da57702338a8ea5ea0))
183
+
184
+ ## [3.0.1](https://github.com/angular-eslint/angular-eslint/compare/v3.0.0...v3.0.1) (2021-04-18)
185
+
186
+ ### Bug Fixes
187
+
188
+ - **eslint-plugin:** correctly expose recommended-extra config ([#418](https://github.com/angular-eslint/angular-eslint/issues/418)) ([f727d8c](https://github.com/angular-eslint/angular-eslint/commit/f727d8c05337908b4e8b9e5f34178bb54a390fb0))
189
+
190
+ # [3.0.0](https://github.com/angular-eslint/angular-eslint/compare/v2.1.1...v3.0.0) (2021-04-17)
191
+
192
+ ### Features
193
+
194
+ - v3.0.0 ([#388](https://github.com/angular-eslint/angular-eslint/issues/388)) ([f92b184](https://github.com/angular-eslint/angular-eslint/commit/f92b184c5b0b57328d0a323ac8c89f1b3017b8d4))
195
+
196
+ ## [2.1.1](https://github.com/angular-eslint/angular-eslint/compare/v2.1.0...v2.1.1) (2021-04-17)
197
+
198
+ ### Bug Fixes
199
+
200
+ - **eslint-plugin:** `sort-ngmodule-metadata-arrays` reporting false positives ([#408](https://github.com/angular-eslint/angular-eslint/issues/408)) ([149152a](https://github.com/angular-eslint/angular-eslint/commit/149152a43dfad6ef841fd2784ef3168c0de8d91f))
201
+ - **eslint-plugin:** directive-class-suffix reporting selectorless directives ([#394](https://github.com/angular-eslint/angular-eslint/issues/394)) ([42d4e5d](https://github.com/angular-eslint/angular-eslint/commit/42d4e5db9a76703ff8556a4050e785a530a90611))
202
+
203
+ # [2.1.0](https://github.com/angular-eslint/angular-eslint/compare/v2.0.2...v2.1.0) (2021-04-11)
204
+
205
+ ### Features
206
+
207
+ - **eslint-plugin:** add rule sort-ngmodule-metadata-arrays ([#386](https://github.com/angular-eslint/angular-eslint/issues/386)) ([935afdd](https://github.com/angular-eslint/angular-eslint/commit/935afdda16970f879c3dc45d45b6f5ef7d898d97))
208
+
209
+ ## [2.0.2](https://github.com/angular-eslint/angular-eslint/compare/v2.0.1...v2.0.2) (2021-03-16)
210
+
211
+ **Note:** Version bump only for package @angular-eslint/eslint-plugin
212
+
213
+ ## [2.0.1](https://github.com/angular-eslint/angular-eslint/compare/v2.0.0...v2.0.1) (2021-03-14)
214
+
215
+ ### Bug Fixes
216
+
217
+ - **eslint-plugin-template:** conditional-complexity error from bundling ([#373](https://github.com/angular-eslint/angular-eslint/issues/373)) ([f466c01](https://github.com/angular-eslint/angular-eslint/commit/f466c0157f5ecefe6eae9aa726aaf08853c1894d))
218
+
219
+ # [2.0.0](https://github.com/angular-eslint/angular-eslint/compare/v1.2.0...v2.0.0) (2021-03-13)
220
+
221
+ ### Bug Fixes
222
+
223
+ - add docs url for both plugins ([#360](https://github.com/angular-eslint/angular-eslint/issues/360)) ([4c9b068](https://github.com/angular-eslint/angular-eslint/commit/4c9b068a13b2ff8e7d5ebc3730564658d7cdc5c6))
224
+
225
+ ### Features
226
+
227
+ - v2.0.0 ([#358](https://github.com/angular-eslint/angular-eslint/issues/358)) ([737fd04](https://github.com/angular-eslint/angular-eslint/commit/737fd04946a9533698c04665c771d944ffbe430c)), closes [#328](https://github.com/angular-eslint/angular-eslint/issues/328) [#245](https://github.com/angular-eslint/angular-eslint/issues/245)
228
+
229
+ ### BREAKING CHANGES
230
+
231
+ - The format of results output has changed
232
+ - The rule no longer exists for use
233
+
234
+ - feat(template-parser): updated use of parseTemplate to improve loc data
235
+ - Requires @angular/compiler 11.2.0 and above
236
+
237
+ - feat(schematics): change way indent and quotes are handled by conversion schematics
238
+ - The conversion schematic handle these rules differently
239
+
240
+ # [1.2.0](https://github.com/angular-eslint/angular-eslint/compare/v1.1.0...v1.2.0) (2021-02-06)
241
+
242
+ ### Bug Fixes
243
+
244
+ - **eslint-plugin:** component-max-inline-declarations animations not being checked properly ([#313](https://github.com/angular-eslint/angular-eslint/issues/313)) ([61a2a0f](https://github.com/angular-eslint/angular-eslint/commit/61a2a0fc1caf19ced3781560052debf274d708a3))
245
+ - **eslint-plugin:** no-lifecycle-call invalid super calls not being reported ([#314](https://github.com/angular-eslint/angular-eslint/issues/314)) ([c44cd5d](https://github.com/angular-eslint/angular-eslint/commit/c44cd5d043a3d203efd1faaed4cbfee2c9ac2e9d))
246
+
247
+ ### Features
248
+
249
+ - **eslint-plugin:** add fixer for use-pipe-transform-interface ([#260](https://github.com/angular-eslint/angular-eslint/issues/260)) ([e3f4db6](https://github.com/angular-eslint/angular-eslint/commit/e3f4db6e5d4c062aabfc19d872dc9ee6861fcd44))
250
+
251
+ # [1.1.0](https://github.com/angular-eslint/angular-eslint/compare/v1.0.0...v1.1.0) (2021-01-14)
252
+
253
+ ### Bug Fixes
254
+
255
+ - **eslint-plugin:** handle DoBootstrap correctly in lifecycle rules ([#243](https://github.com/angular-eslint/angular-eslint/issues/243)) ([5010b3f](https://github.com/angular-eslint/angular-eslint/commit/5010b3f827b6089c089e5a5d55905aa3ac8839cc))
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var e=require("@angular-eslint/utils"),t=require("@typescript-eslint/experimental-utils");const r=e=>function({name:r,meta:s,defaultOptions:o,create:a}){return{meta:Object.assign(Object.assign({},s),{docs:Object.assign(Object.assign({},s.docs),{url:e(r)})}),defaultOptions:o,create(e){const r=t.ESLintUtils.applyDefault(o,e.options);return a(e,r)}}};r.withoutDocs=t.ESLintUtils.RuleCreator.withoutDocs;const s=r(e=>`https://github.com/angular-eslint/angular-eslint/blob/master/packages/eslint-plugin/docs/rules/${e}.md`);var o=s({name:"contextual-decorator",meta:{type:"suggestion",docs:{description:"Ensures that classes use contextual decorators in its body",recommended:!1},schema:[],messages:{contextualDecorator:'Decorator out of context for "@{{classDecoratorName}}()"'}},defaultOptions:[],create:t=>({"MethodDefinition[kind=/^(get|set|method)$/], PropertyDefinition, TSParameterProperty"(r){!function(t,r){var s;if(null==(s=r.decorators)||!s.length)return;const o=e.ASTUtils.getNearestNodeFrom(r,e.ASTUtils.isClassDeclaration);if(!o)return;const n=e.ASTUtils.getAngularClassDecorator(o);if(n)for(const e of r.decorators)a(t,e,n)}(t,r)}})});function a(t,r,s){const o=e.ASTUtils.getDecoratorName(r);if(!o||!e.ASTUtils.isAngularInnerClassDecorator(o))return;const a=e.ASTUtils.ANGULAR_CLASS_DECORATOR_MAPPER.get(s);null!=a&&a.has(o)||t.report({node:r,messageId:"contextualDecorator",data:{classDecoratorName:s}})}var n=s({name:"component-class-suffix",meta:{type:"suggestion",docs:{description:'Classes decorated with @Component must have suffix "Component" (or custom) in their name. See more at https://angular.io/styleguide#style-02-03',recommended:"error"},schema:[{type:"object",properties:{suffixes:{type:"array",items:{type:"string"}}},additionalProperties:!1}],messages:{componentClassSuffix:"Component class names should end with one of these suffixes: {{suffixes}} (https://angular.io/styleguide#style-02-03)"}},defaultOptions:[{suffixes:["Component"]}],create:(t,[{suffixes:r}])=>({[e.Selectors.COMPONENT_CLASS_DECORATOR](s){const o=s.parent,a=e.ASTUtils.getClassName(o);a&&r.some(e=>a.endsWith(e))||t.report({node:o.id?o.id:o,messageId:"componentClassSuffix",data:{suffixes:e.toHumanReadableText(r)}})}})});const i=/\r\n|\r|\n/;function l(t){return e.ASTUtils.isTemplateLiteral(t)?t.quasis[0].value.raw.trim().split(i).length:e.ASTUtils.isLiteral(t)?t.raw.trim().split(i).length:0}var c=s({name:"component-max-inline-declarations",meta:{type:"suggestion",docs:{description:"Enforces a maximum number of lines in inline template, styles and animations. See more at https://angular.io/guide/styleguide#style-05-04",recommended:!1},schema:[{type:"object",properties:{template:{minimum:0,type:"number"},styles:{minimum:0,type:"number"},animations:{minimum:0,type:"number"}},additionalProperties:!1}],messages:{componentMaxInlineDeclarations:"`{{propertyType}}` has too many lines ({{lineCount}}). Maximum allowed is {{max}} (https://angular.io/guide/styleguide#style-05-04)"}},defaultOptions:[{template:3,styles:3,animations:15}],create:(t,[{template:r=3,styles:s=3,animations:o=15}])=>({[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='template']`]({value:e}){const s=l(e);s<=r||t.report({node:e,messageId:"componentMaxInlineDeclarations",data:{lineCount:s,max:r,propertyType:"template"}})},[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='styles']`]({value:r}){if(!e.ASTUtils.isArrayExpression(r))return;const o=r.elements.reduce((e,t)=>e+l(t),0);o<=s||t.report({node:r,messageId:"componentMaxInlineDeclarations",data:{lineCount:o,max:s,propertyType:"styles"}})},[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='animations']`]({value:r}){if(!e.ASTUtils.isArrayExpression(r)||0===r.elements.length)return;const s=Math.max(r.loc.end.line-r.loc.start.line-2,1);s<=o||t.report({node:r,messageId:"componentMaxInlineDeclarations",data:{lineCount:s,max:o,propertyType:"animations"}})}})}),p=s({name:"component-selector",meta:{type:"suggestion",docs:{description:"Component selectors should follow given naming rules. See more at https://angular.io/guide/styleguide#style-02-07, https://angular.io/guide/styleguide#style-05-02\n and https://angular.io/guide/styleguide#style-05-03.",recommended:!1},schema:[{type:"object",properties:{type:{oneOf:[{type:"string"},{type:"array",items:{enum:[e.SelectorUtils.OPTION_TYPE_ELEMENT,e.SelectorUtils.OPTION_TYPE_ATTRIBUTE]}}]},prefix:{oneOf:[{type:"string"},{type:"array"}]},style:{type:"string",enum:[e.ASTUtils.OPTION_STYLE_CAMEL_CASE,e.ASTUtils.OPTION_STYLE_KEBAB_CASE]}},additionalProperties:!1}],messages:{prefixFailure:"The selector should start with one of these prefixes: {{prefix}} (https://angular.io/guide/styleguide#style-02-07)",styleFailure:"The selector should be {{style}} (https://angular.io/guide/styleguide#style-05-02)",typeFailure:"The selector should be used as an {{type}} (https://angular.io/guide/styleguide#style-05-03)",shadowDomEncapsulatedStyleFailure:`The selector of a ShadowDom-encapsulated component should be \`${e.ASTUtils.OPTION_STYLE_KEBAB_CASE}\` (https://github.com/angular-eslint/angular-eslint/issues/534)`}},defaultOptions:[{type:"",prefix:"",style:""}],create:(r,[{type:s,prefix:o,style:a}])=>({[e.Selectors.COMPONENT_CLASS_DECORATOR](n){const i=e.ASTUtils.getDecoratorPropertyValue(n,"selector");if(!i)return;if(!e.SelectorUtils.checkValidOptions(s,o,a))return;const l=a!==e.ASTUtils.OPTION_STYLE_KEBAB_CASE&&function(r){const s=e.ASTUtils.getDecoratorPropertyValue(r,"encapsulation");return s&&e.ASTUtils.isMemberExpression(s)&&t.ASTUtils.isIdentifier(s.object)&&"ViewEncapsulation"===s.object.name&&t.ASTUtils.isIdentifier(s.property)&&"ShadowDom"===s.property.name}(n)?e.ASTUtils.OPTION_STYLE_KEBAB_CASE:a,c=e.SelectorUtils.checkSelector(i,s,e.arrayify(o),l);null!==c&&(c.hasExpectedType?c.hasExpectedStyle?c.hasExpectedPrefix||e.SelectorUtils.reportPrefixError(i,o,r):a===l?e.SelectorUtils.reportStyleError(i,a,r):r.report({node:i,messageId:"shadowDomEncapsulatedStyleFailure"}):e.SelectorUtils.reportTypeError(i,s,r))}})}),u=s({name:"contextual-lifecycle",meta:{type:"problem",docs:{description:"Ensures that lifecycle methods are used in a correct context",recommended:"error"},schema:[],messages:{contextualLifecycle:"Angular will not invoke the `{{methodName}}` lifecycle method within `@{{classDecoratorName}}()` classes"}},defaultOptions:[],create(t){function r({parent:r},s){const o=r,a=e.ASTUtils.ANGULAR_CLASS_DECORATOR_LIFECYCLE_METHOD_MAPPER.get(s),n=e.ASTUtils.getDeclaredMethods(o);for(const r of n){const o=e.ASTUtils.getMethodName(r);!o||!e.ASTUtils.isAngularLifecycleMethod(o)||null!=a&&a.has(o)||t.report({node:r.key,messageId:"contextualLifecycle",data:{classDecoratorName:s,methodName:o}})}}return{[e.Selectors.COMPONENT_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Component)},[e.Selectors.DIRECTIVE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Directive)},[e.Selectors.INJECTABLE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Injectable)},[e.Selectors.MODULE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.NgModule)},[e.Selectors.PIPE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Pipe)}}}}),d=s({name:"directive-class-suffix",meta:{type:"suggestion",docs:{description:'Classes decorated with @Directive must have suffix "Directive" (or custom) in their name. See more at https://angular.io/styleguide#style-02-03',recommended:"error"},schema:[{type:"object",properties:{suffixes:{type:"array",items:{type:"string"}}},additionalProperties:!1}],messages:{directiveClassSuffix:"Directive class names should end with one of these suffixes: {{suffixes}} (https://angular.io/styleguide#style-02-03)"}},defaultOptions:[{suffixes:["Directive"]}],create:(t,[{suffixes:r}])=>({[e.Selectors.DIRECTIVE_CLASS_DECORATOR](s){if(!e.ASTUtils.getDecoratorPropertyValue(s,"selector"))return;const o=s.parent,a=e.ASTUtils.getClassName(o),n=e.ASTUtils.getDeclaredInterfaceNames(o).some(e=>e.endsWith("Validator")),i=r.concat(n?"Validator":[]);var l;a&&i.some(e=>a.endsWith(e))||t.report({node:null!=(l=o.id)?l:o,messageId:"directiveClassSuffix",data:{suffixes:e.toHumanReadableText(i)}})}})}),m=s({name:"directive-selector",meta:{type:"suggestion",docs:{description:"Directive selectors should follow given naming rules. See more at https://angular.io/guide/styleguide#style-02-06 and https://angular.io/guide/styleguide#style-02-08.",recommended:!1},schema:[{type:"object",properties:{type:{oneOf:[{type:"string"},{type:"array",items:{enum:[e.SelectorUtils.OPTION_TYPE_ELEMENT,e.SelectorUtils.OPTION_TYPE_ATTRIBUTE]}}]},prefix:{oneOf:[{type:"string"},{type:"array"}]},style:{type:"string",enum:[e.ASTUtils.OPTION_STYLE_CAMEL_CASE,e.ASTUtils.OPTION_STYLE_KEBAB_CASE]}},additionalProperties:!1}],messages:{prefixFailure:"The selector should start with one of these prefixes: {{prefix}} (https://angular.io/guide/styleguide#style-02-08)",styleFailure:"The selector should be {{style}} (https://angular.io/guide/styleguide#style-02-06)",typeFailure:"The selector should be used as an {{type}} (https://angular.io/guide/styleguide#style-02-06)"}},defaultOptions:[{type:"",prefix:"",style:""}],create:(t,[{type:r,prefix:s,style:o}])=>({[e.Selectors.DIRECTIVE_CLASS_DECORATOR](a){const n=e.ASTUtils.getDecoratorPropertyValue(a,"selector");if(!n)return;if(!e.SelectorUtils.checkValidOptions(r,s,o))return;const i=e.SelectorUtils.checkSelector(n,r,e.arrayify(s),o);null!==i&&(i.hasExpectedType?i.hasExpectedStyle?i.hasExpectedPrefix||e.SelectorUtils.reportPrefixError(n,s,t):e.SelectorUtils.reportStyleError(n,o,t):e.SelectorUtils.reportTypeError(n,r,t))}})}),g=s({name:"no-attribute-decorator",meta:{type:"problem",docs:{description:"The @Attribute decorator is used to obtain a single value for an attribute. This is a much less common use-case than getting a stream of values (using @Input), so often the @Attribute decorator is mistakenly used when @Input was what was intended. This rule disallows usage of @Attribute decorator altogether in order to prevent these mistakes.",recommended:!1},schema:[],messages:{noAttributeDecorator:"@Attribute can only obtain a single value and is rarely what is required. Use @Input instead to retrieve a stream of values."}},defaultOptions:[],create:e=>({'ClassDeclaration MethodDefinition[key.name="constructor"] Decorator[expression.callee.name="Attribute"]'(t){e.report({node:t,messageId:"noAttributeDecorator"})}})});const f=[e.ASTUtils.AngularLifecycleInterfaces.DoCheck,e.ASTUtils.AngularLifecycleInterfaces.OnChanges],y=[e.ASTUtils.AngularLifecycleMethods.ngDoCheck,e.ASTUtils.AngularLifecycleMethods.ngOnChanges];var h=s({name:"no-conflicting-lifecycle",meta:{type:"suggestion",docs:{description:"Ensures that directives not implement conflicting lifecycle interfaces.",recommended:"error"},schema:[],messages:{noConflictingLifecycleInterface:`Implementing ${e.ASTUtils.AngularLifecycleInterfaces.DoCheck} and ${e.ASTUtils.AngularLifecycleInterfaces.OnChanges} in a class is not recommended`,noConflictingLifecycleMethod:`Declaring ${e.ASTUtils.AngularLifecycleMethods.ngDoCheck} and ${e.ASTUtils.AngularLifecycleMethods.ngOnChanges} method in a class is not recommended`}},defaultOptions:[],create:r=>({ClassDeclaration(s){(t=>{const s=e.ASTUtils.getDeclaredAngularLifecycleInterfaces(t);if(!f.every(e=>s.includes(e)))return;const o=e.ASTUtils.getInterfaces(t).filter(t=>{const r=e.ASTUtils.getInterfaceName(t);return r&&e.ASTUtils.isAngularLifecycleInterface(r)});for(const e of o)r.report({node:e,messageId:"noConflictingLifecycleInterface"})})(s),(s=>{const o=e.ASTUtils.getDeclaredAngularLifecycleMethods(s);if(!y.every(e=>o.includes(e)))return;const a=e.ASTUtils.getDeclaredMethods(s).filter(r=>t.ASTUtils.isIdentifier(r.key)&&e.ASTUtils.isAngularLifecycleMethod(r.key.name));for(const e of a)r.report({node:e,messageId:"noConflictingLifecycleMethod"})})(s)}})}),T=s({name:"no-forward-ref",meta:{type:"suggestion",docs:{description:"Disallows usage of `forwardRef` references for DI",recommended:!1},schema:[],messages:{noForwardRef:"Avoid using `forwardRef`"}},defaultOptions:[],create:e=>({'CallExpression[callee.type="Identifier"][callee.name="forwardRef"]'(t){e.report({node:t,messageId:"noForwardRef"})}})});const S={allowStatic:!1};var A=s({name:"no-host-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `host` metadata property. See more at https://angular.io/styleguide#style-06-03",recommended:"error"},schema:[{type:"object",properties:{allowStatic:{type:"boolean",default:S.allowStatic}},additionalProperties:!1}],messages:{noHostMetadataProperty:`Use @${e.ASTUtils.AngularInnerClassDecorators.HostBinding} or @${e.ASTUtils.AngularInnerClassDecorators.HostListener} rather than the \`host\` metadata property (https://angular.io/styleguide#style-06-03)`}},defaultOptions:[S],create:(t,[{allowStatic:r}])=>({[`${e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR} Property[key.name="host"]`](s){(r&&e.ASTUtils.isObjectExpression(s.value)?s.value.properties.filter(x):[s]).forEach(e=>{t.report({node:e,messageId:"noHostMetadataProperty"})})}})});function x(r){return e.ASTUtils.isProperty(r)&&!function(r){return!r.computed&&(t.ASTUtils.isIdentifier(r.key)||e.ASTUtils.isStringLiteral(r.key)&&function({0:e}){return e.toLowerCase()!==e.toUpperCase()}(r.key.value))}(r)&&!function(t){return e.ASTUtils.isStringLiteral(t.value)&&""===t.value.value}(r)}var O=s({name:"no-input-prefix",meta:{type:"suggestion",docs:{description:"Ensures that input bindings, including aliases, are not named or prefixed by the configured disallowed prefixes",recommended:!1},schema:[{type:"object",properties:{prefixes:{type:"array",items:{type:"string"}}},additionalProperties:!1}],messages:{noInputPrefix:"Input bindings, including aliases, should not be named, nor prefixed by {{prefixes}}"}},defaultOptions:[{prefixes:[]}],create:(t,[{prefixes:r}])=>({[[e.Selectors.INPUTS_METADATA_PROPERTY_LITERAL,e.Selectors.INPUT_ALIAS,e.Selectors.INPUT_PROPERTY_OR_SETTER].join(",")](s){const[o,a]=e.ASTUtils.getRawText(s).replace(/\s/g,"").split(":");r.some(e=>function(e,t,r){const s=RegExp(`^${e}(([^a-z])|(?=$))`);return s.test(t)||s.test(r)}(e,o,a))&&t.report({node:s,messageId:"noInputPrefix",data:{prefixes:e.toHumanReadableText(r)}})}})}),E=s({name:"no-input-rename",meta:{type:"suggestion",docs:{description:"Ensures that input bindings are not aliased",recommended:"error"},fixable:"code",hasSuggestions:!0,schema:[{type:"object",properties:{allowedNames:{type:"array",items:{type:"string"},description:"A list with allowed input names",uniqueItems:!0}},additionalProperties:!1}],messages:{noInputRename:"Input bindings should not be aliased (https://angular.io/guide/styleguide#style-05-13)",suggestRemoveAliasName:"Remove alias name",suggestReplaceOriginalNameWithAliasName:"Remove alias name and use it as the original name"}},defaultOptions:[{allowedNames:[]}],create(r,[{allowedNames:s=[]}]){let o=new Set;const a=e.getAriaAttributeKeys();return{[e.Selectors.COMPONENT_OR_DIRECTIVE_SELECTOR_LITERAL](t){o=new Set(e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(","))},[e.Selectors.INPUT_ALIAS](n){const i=e.ASTUtils.getNearestNodeFrom(n,e.ASTUtils.isPropertyOrMethodDefinition);if(!i||!t.ASTUtils.isIdentifier(i.key))return;const l=e.ASTUtils.getRawText(n),c=e.ASTUtils.getRawText(i.key);s.includes(l)||a.has(l)&&c===e.kebabToCamelCase(l)||(l===c?r.report({node:n,messageId:"noInputRename",fix:e=>e.remove(n)}):I(o,c,l)||r.report({node:n,messageId:"noInputRename",suggest:[{messageId:"suggestRemoveAliasName",fix:e=>e.remove(n)},{messageId:"suggestReplaceOriginalNameWithAliasName",fix:e=>[e.remove(n),e.replaceText(i.key,l.includes("-")?`'${l}'`:l)]}]}))},[e.Selectors.INPUTS_METADATA_PROPERTY_LITERAL](t){const[n,i]=e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(":");!i||s.includes(i)||a.has(i)&&n===e.kebabToCamelCase(i)||(i===n?r.report({node:t,messageId:"noInputRename",fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,n))}):I(o,n,i)||r.report({node:t,messageId:"noInputRename",suggest:[["suggestRemoveAliasName",n],["suggestReplaceOriginalNameWithAliasName",i]].map(([r,s])=>({messageId:r,fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,s))}))}))},"ClassDeclaration:exit"(){o=new Set}}}});function I(t,r,s){return[...t].some(t=>t===s||function(t,r){return`${t}${e.capitalize(r)}`}(t,r)===s)}var C=s({name:"no-inputs-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `inputs` metadata property. See more at https://angular.io/styleguide#style-05-12",recommended:"error"},schema:[],messages:{noInputsMetadataProperty:"Use `@Input` rather than the `inputs` metadata property (https://angular.io/styleguide#style-05-12)"}},defaultOptions:[],create:t=>({[`${e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR} ${e.Selectors.metadataProperty("inputs")}`](e){t.report({node:e,messageId:"noInputsMetadataProperty"})}})}),R=s({name:"no-lifecycle-call",meta:{type:"suggestion",docs:{description:"Disallows explicit calls to lifecycle methods",recommended:!1},schema:[],messages:{noLifecycleCall:"Avoid explicit calls to lifecycle methods"}},defaultOptions:[],create:r=>({[`ClassDeclaration CallExpression > MemberExpression[property.name=${e.toPattern([...e.ASTUtils.ANGULAR_LIFECYCLE_METHODS])}]`]:s=>{const o=e.ASTUtils.getNearestNodeFrom(s,e.ASTUtils.isClassDeclaration);!o||!e.ASTUtils.getAngularClassDecorator(o)||e.ASTUtils.isSuper(s.object)&&function(r){const s=e.ASTUtils.getNearestNodeFrom(r,e.ASTUtils.isMethodDefinition);return Boolean(s&&function({property:e},{key:r}){return t.ASTUtils.isIdentifier(e)&&t.ASTUtils.isIdentifier(r)&&e.name===r.name}(r,s))}(s)||r.report({node:s.parent,messageId:"noLifecycleCall"})}})}),U=s({name:"no-output-native",meta:{type:"suggestion",docs:{description:"Ensures that output bindings, including aliases, are not named as standard DOM events",recommended:"error"},schema:[],messages:{noOutputNative:"Output bindings, including aliases, should not be named as standard DOM events"}},defaultOptions:[],create(t){const r=e.getNativeEventNames();return{[[e.Selectors.OUTPUTS_METADATA_PROPERTY_LITERAL,e.Selectors.OUTPUT_ALIAS,e.Selectors.OUTPUT_PROPERTY_OR_GETTER].join(",")](s){const[o,a]=e.ASTUtils.getRawText(s).replace(/\s/g,"").split(":");(r.has(o)||r.has(a))&&t.report({node:s,messageId:"noOutputNative"})}}}}),v=s({name:"no-output-on-prefix",meta:{type:"suggestion",docs:{description:'Ensures that output bindings, including aliases, are not named "on", nor prefixed with it. See more at https://angular.io/guide/styleguide#style-05-16',recommended:"error"},schema:[],messages:{noOutputOnPrefix:'Output bindings, including aliases, should not be named "on", nor prefixed with it (https://angular.io/guide/styleguide#style-05-16)'}},defaultOptions:[],create(t){const r=/^on(([^a-z])|(?=$))/;return{[[e.Selectors.OUTPUTS_METADATA_PROPERTY_LITERAL,e.Selectors.OUTPUT_ALIAS,e.Selectors.OUTPUT_PROPERTY_OR_GETTER].join(",")](s){const[o,a]=e.ASTUtils.getRawText(s).replace(/\s/g,"").split(":");(r.test(o)||r.test(a))&&t.report({node:s,messageId:"noOutputOnPrefix"})}}}}),P=s({name:"no-output-rename",meta:{type:"suggestion",docs:{description:"Ensures that output bindings are not aliased",recommended:"error"},fixable:"code",hasSuggestions:!0,schema:[],messages:{noOutputRename:"Output bindings should not be aliased (https://angular.io/guide/styleguide#style-05-13)",suggestRemoveAliasName:"Remove alias name",suggestReplaceOriginalNameWithAliasName:"Remove alias name and use it as the original name"}},defaultOptions:[],create(r){let s=new Set;return{[e.Selectors.COMPONENT_OR_DIRECTIVE_SELECTOR_LITERAL](t){s=new Set(e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(","))},[e.Selectors.OUTPUT_ALIAS](o){const a=e.ASTUtils.getNearestNodeFrom(o,e.ASTUtils.isPropertyOrMethodDefinition);if(!a||!t.ASTUtils.isIdentifier(a.key))return;const n=e.ASTUtils.getRawText(o),i=e.ASTUtils.getRawText(a.key);n===i?r.report({node:o,messageId:"noOutputRename",fix:e=>e.remove(o)}):D(s,i,n)||r.report({node:o,messageId:"noOutputRename",suggest:[{messageId:"suggestRemoveAliasName",fix:e=>e.remove(o)},{messageId:"suggestReplaceOriginalNameWithAliasName",fix:e=>[e.remove(o),e.replaceText(a.key,n.includes("-")?`'${n}'`:n)]}]})},[e.Selectors.OUTPUTS_METADATA_PROPERTY_LITERAL](t){const[o,a]=e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(":");a&&(a===o?r.report({node:t,messageId:"noOutputRename",fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,o))}):D(s,o,a)||r.report({node:t,messageId:"noOutputRename",suggest:[["suggestRemoveAliasName",o],["suggestReplaceOriginalNameWithAliasName",a]].map(([r,s])=>({messageId:r,fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,s))}))}))},"ClassDeclaration:exit"(){s=new Set}}}});function D(t,r,s){return[...t].some(t=>t===s||function(t,r){return`${t}${e.capitalize(r)}`}(t,r)===s)}var b=s({name:"no-outputs-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `outputs` metadata property. See more at https://angular.io/styleguide#style-05-12",recommended:"error"},schema:[],messages:{noOutputsMetadataProperty:"Use `@Output` rather than the `outputs` metadata property (https://angular.io/styleguide#style-05-12)"}},defaultOptions:[],create:t=>({[`${e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR} ${e.Selectors.metadataProperty("outputs")}`](e){t.report({node:e,messageId:"noOutputsMetadataProperty"})}})}),N=s({name:"no-pipe-impure",meta:{type:"suggestion",docs:{description:"Disallows the declaration of impure pipes",recommended:!1},hasSuggestions:!0,schema:[],messages:{noPipeImpure:"Impure pipes should be avoided because they are invoked on each change-detection cycle",suggestRemovePipeImpure:"Remove `pure` property"}},defaultOptions:[],create(t){const r=t.getSourceCode();return{[`${e.Selectors.PIPE_CLASS_DECORATOR} ${e.Selectors.metadataProperty("pure")}:matches([value.value=false], [value.operator='!'][value.argument.value=true])`](s){t.report({node:s,messageId:"noPipeImpure",suggest:[{messageId:"suggestRemovePipeImpure",fix:t=>e.RuleFixes.getNodeToCommaRemoveFix(r,s,t)}]})}}}}),_=s({name:"no-queries-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `queries` metadata property. See more at https://angular.io/styleguide#style-05-12.",recommended:!1},schema:[],messages:{noQueriesMetadataProperty:`Use @${e.ASTUtils.AngularInnerClassDecorators.Output} rather than the \`queries\` metadata property (https://angular.io/styleguide#style-05-12)`}},defaultOptions:[],create:t=>({[e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR](r){const s=e.ASTUtils.getDecoratorPropertyValue(r,"queries");s&&t.report({node:s.parent,messageId:"noQueriesMetadataProperty"})}})}),L=s({name:"no-empty-lifecycle-method",meta:{type:"suggestion",docs:{description:"Disallows declaring empty lifecycle methods",recommended:"error"},hasSuggestions:!0,schema:[],messages:{noEmptyLifecycleMethod:"Lifecycle methods should not be empty",suggestRemoveLifecycleMethod:"Remove lifecycle method"}},defaultOptions:[],create(t){const r=t.getSourceCode(),s=e.toPattern([...e.ASTUtils.ANGULAR_LIFECYCLE_METHODS]);return{[`ClassDeclaration:has(Decorator[expression.callee.name=/^(Component|Directive|Injectable|NgModule|Pipe)$/]) > ClassBody > ${e.Selectors.methodDefinition(s)}[value.body.body.length=0]`](s){t.report({node:s,messageId:"noEmptyLifecycleMethod",suggest:[{messageId:"suggestRemoveLifecycleMethod",fix:t=>{var o;const a=null!=(o=e.ASTUtils.getImportDeclarations(s,"@angular/core"))?o:[],n=e.ASTUtils.getRawText(s).replace(/^ng+/,""),i=function(e,t){return e.split(" ").filter(e=>function(e){return e.replace(/[\W]/g,"")}(e)===t).length}(r.getText(),n);return[t.remove(s),e.RuleFixes.getImplementsRemoveFix(r,s.parent.parent,n,t),i<=2?e.RuleFixes.getImportRemoveFix(r,a,n,t):null].filter(e.isNotNullOrUndefined)}}]})}}}});const w="prefer-on-push-component-change-detection",M="ChangeDetectionStrategy.OnPush";var j=s({name:w,meta:{type:"suggestion",docs:{description:`Ensures component's \`changeDetection\` is set to \`${M}\``,recommended:!1},hasSuggestions:!0,schema:[],messages:{preferOnPushComponentChangeDetection:`The component's \`changeDetection\` value should be set to \`${M}\``,suggestAddChangeDetectionOnPush:`Add \`${M}\``}},defaultOptions:[],create(t){const r=e.Selectors.metadataProperty("changeDetection");return{[[`${e.Selectors.COMPONENT_CLASS_DECORATOR}:matches([expression.arguments.length=0], [expression.arguments.0.type='ObjectExpression']:not(:has(${r})))`,`${e.Selectors.COMPONENT_CLASS_DECORATOR} > CallExpression > ObjectExpression > ${r}:matches([value.type='Identifier'][value.name='undefined'], [value.object.name='ChangeDetectionStrategy'][value.property.name!='OnPush'])`].join(",")](r){t.report({node:$(r),messageId:"preferOnPushComponentChangeDetection",suggest:[{messageId:"suggestAddChangeDetectionOnPush",fix:t=>e.ASTUtils.isProperty(r)?[e.RuleFixes.getImportAddFix({fixer:t,importName:"ChangeDetectionStrategy",moduleName:"@angular/core",node:r.parent.parent.parent.parent}),e.ASTUtils.isMemberExpression(r.value)?t.replaceText(r.value.property,"OnPush"):t.replaceText(r.value,M)].filter(e.isNotNullOrUndefined):[e.RuleFixes.getImportAddFix({fixer:t,importName:"ChangeDetectionStrategy",moduleName:"@angular/core",node:r.parent}),e.RuleFixes.getDecoratorPropertyAddFix(r,t,`changeDetection: ${M}`)].filter(e.isNotNullOrUndefined)}]})}}}});function $(t){return e.ASTUtils.isProperty(t)?e.ASTUtils.isMemberExpression(t.value)?t.value.property:t.value:t}var k=s({name:"prefer-output-readonly",meta:{type:"suggestion",docs:{description:"Prefer to declare `@Output` as `readonly` since they are not supposed to be reassigned",recommended:!1},hasSuggestions:!0,schema:[],messages:{preferOutputReadonly:"Prefer to declare `@Output` as `readonly` since they are not supposed to be reassigned",suggestAddReadonlyModifier:"Add `readonly` modifier"}},defaultOptions:[],create:t=>({[`PropertyDefinition:not([readonly]) > ${e.Selectors.OUTPUT_DECORATOR}`]({parent:{key:e}}){t.report({node:e,messageId:"preferOutputReadonly",suggest:[{messageId:"suggestAddReadonlyModifier",fix:t=>t.insertTextBefore(e,"readonly ")}]})}})});const F=/^\.\.?\/.+/;var V=s({name:"relative-url-prefix",meta:{type:"suggestion",docs:{description:"The ./ and ../ prefix is standard syntax for relative URLs; don't depend on Angular's current ability to do without that prefix. See more at https://angular.io/styleguide#style-05-04",recommended:!1},schema:[],messages:{relativeUrlPrefix:"The ./ and ../ prefix is standard syntax for relative URLs. (https://angular.io/styleguide#style-05-04)"}},defaultOptions:[],create:t=>({[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='templateUrl']`]({value:e}){B(e)&&t.report({node:e,messageId:"relativeUrlPrefix"})},[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='styleUrls']`]({value:r}){e.ASTUtils.isArrayExpression(r)&&r.elements.filter(B).forEach(e=>{t.report({node:e,messageId:"relativeUrlPrefix"})})}})});function B(t){return!e.ASTUtils.isStringLiteral(t)||!F.test(t.value)}var q=s({name:"sort-ngmodule-metadata-arrays",meta:{type:"suggestion",docs:{description:"Ensures ASC alphabetical order for `NgModule` metadata arrays for easy visual scanning",recommended:!1},fixable:"code",schema:[],messages:{sortNgmoduleMetadataArrays:"`NgModule` metadata arrays should be sorted in ASC alphabetical order"}},defaultOptions:[],create:r=>({[`${e.Selectors.MODULE_CLASS_DECORATOR} Property ArrayExpression`]({elements:e}){const s=e.filter(t.ASTUtils.isIdentifier).map((e,t,r)=>[e,r[t+1]]).find(([e,t])=>t&&1===e.name.localeCompare(t.name));if(!s)return;const[o,a]=s;r.report({node:a,messageId:"sortNgmoduleMetadataArrays",fix:e=>[e.replaceText(o,a.name),e.replaceText(a,o.name)]})}})}),Y=s({name:"use-component-selector",meta:{type:"suggestion",docs:{description:"Component selector must be declared",recommended:!1},schema:[],messages:{useComponentSelector:"The selector of the component is mandatory"}},defaultOptions:[],create:t=>({[e.Selectors.COMPONENT_CLASS_DECORATOR](r){const s=e.ASTUtils.getDecoratorPropertyValue(r,"selector");s&&e.ASTUtils.isStringLiteral(s)&&s.value.length||t.report({node:r,messageId:"useComponentSelector"})}})}),W=s({name:"use-component-view-encapsulation",meta:{type:"suggestion",docs:{description:"Disallows using `ViewEncapsulation.None`",recommended:!1},hasSuggestions:!0,schema:[],messages:{useComponentViewEncapsulation:"Using `ViewEncapsulation.None` makes your styles global, which may have an unintended effect",suggestRemoveViewEncapsulationNone:"Remove `ViewEncapsulation.None`"}},defaultOptions:[],create(t){const r=t.getSourceCode();return{[`${e.Selectors.COMPONENT_CLASS_DECORATOR} ${e.Selectors.metadataProperty("encapsulation")} > MemberExpression[object.name='ViewEncapsulation'] > Identifier[name='None']`](s){t.report({node:s,messageId:"useComponentViewEncapsulation",suggest:[{messageId:"suggestRemoveViewEncapsulationNone",fix:t=>{var o;const a=null!=(o=e.ASTUtils.getImportDeclarations(s,"@angular/core"))?o:[];return[e.RuleFixes.getNodeToCommaRemoveFix(r,s.parent.parent,t),e.RuleFixes.getImportRemoveFix(r,a,"ViewEncapsulation",t)].filter(e.isNotNullOrUndefined)}}]})}}}}),H=s({name:"use-injectable-provided-in",meta:{type:"suggestion",docs:{description:"Using the `providedIn` property makes `Injectables` tree-shakable",recommended:!1},hasSuggestions:!0,schema:[{type:"object",properties:{ignoreClassNamePattern:{type:"string"}},additionalProperties:!1}],messages:{useInjectableProvidedIn:"The `providedIn` property is mandatory for `Injectables`",suggestInjector:"Use `providedIn: '{{injector}}'`"}},defaultOptions:[{}],create(t,[{ignoreClassNamePattern:r}]){const s=`ClassDeclaration:not([id.name=${r}]):not(:has(TSClassImplements:matches([expression.property.name='HttpInterceptor'], [expression.name='HttpInterceptor']))) > Decorator[expression.callee.name="Injectable"]`,o=e.Selectors.metadataProperty("providedIn");return{[[`${s}:matches([expression.arguments.length=0], [expression.arguments.0.type='ObjectExpression']:not(:has(${o})))`,`${s} ${o}:matches([value.type='Identifier'][value.name='undefined'], [value.type='Literal'][value.raw='null'])`].join(",")](r){t.report({node:e.ASTUtils.isProperty(r)?r.value:r,messageId:"useInjectableProvidedIn",suggest:["any","platform","root"].map(t=>({messageId:"suggestInjector",fix:s=>{var o;return e.ASTUtils.isProperty(r)?s.replaceText(r.value,`'${t}'`):null!=(o=e.RuleFixes.getDecoratorPropertyAddFix(r,s,`providedIn: '${t}'`))?o:[]},data:{injector:t}}))})}}}}),G=s({name:"use-lifecycle-interface",meta:{type:"suggestion",docs:{description:"Ensures that classes implement lifecycle interfaces corresponding to the declared lifecycle methods. See more at https://angular.io/styleguide#style-09-01",recommended:"warn"},schema:[],messages:{useLifecycleInterface:"Lifecycle interface '{{interfaceName}}' should be implemented for method '{{methodName}}'. (https://angular.io/styleguide#style-09-01)"}},defaultOptions:[],create:t=>({[`MethodDefinition[key.name=${e.toPattern([...e.ASTUtils.ANGULAR_LIFECYCLE_METHODS])}]`]({key:r,parent:{parent:s}}){if(!e.ASTUtils.getAngularClassDecorator(s))return;const o=e.ASTUtils.getDeclaredAngularLifecycleInterfaces(s),a=r.name,n=e.ASTUtils.getLifecycleInterfaceByMethodName(a);o.includes(e.ASTUtils.AngularLifecycleInterfaces[n])||t.report({node:r,messageId:"useLifecycleInterface",data:{interfaceName:n,methodName:a}})}})}),K=s({name:"use-pipe-transform-interface",meta:{type:"suggestion",docs:{description:"Ensures that `Pipes` implement `PipeTransform` interface",recommended:"error"},fixable:"code",schema:[],messages:{usePipeTransformInterface:"Pipes should implement `PipeTransform` interface"}},defaultOptions:[],create:t=>({"ClassDeclaration:not(:has(TSClassImplements:matches([expression.name='PipeTransform'], [expression.property.name='PipeTransform']))) > Decorator[expression.callee.name='Pipe']"({parent:r}){var s;t.report({node:null!=(s=r.id)?s:r,messageId:"usePipeTransformInterface",fix:t=>{const{implementsNodeReplace:s,implementsTextReplace:o}=e.RuleFixes.getImplementsSchemaFixer(r,"PipeTransform");return[e.RuleFixes.getImportAddFix({compatibleWithTypeOnlyImport:!0,fixer:t,importName:"PipeTransform",moduleName:"@angular/core",node:r}),t.insertTextAfter(s,o)].filter(e.isNotNullOrUndefined)}})}})}),z=s({name:"pipe-prefix",meta:{type:"suggestion",docs:{description:"Enforce consistent prefix for pipes.",recommended:!1},schema:[{type:"object",properties:{prefixes:{type:"array",items:{type:"string"},minimum:1,uniqueItems:!0}},additionalProperties:!1}],messages:{pipePrefix:"@Pipes should be prefixed by {{prefixes}}"}},defaultOptions:[{prefixes:[]}],create:(t,[{prefixes:r}])=>({[e.Selectors.PIPE_CLASS_DECORATOR](s){const o=e.ASTUtils.getDecoratorPropertyValue(s,"name");if(!o)return;if(!function(e){return Array.isArray(e)&&e.length>0}(r))return;const a=r.join("|"),n=e.SelectorUtils.SelectorValidator.prefix(a,"camelCase");let i;e.ASTUtils.isStringLiteral(o)?i=o.value:e.ASTUtils.isTemplateLiteral(o)&&o.quasis[0]&&(i=o.quasis[0].value.raw),i&&(n.apply(this,[i])||t.report({node:o,messageId:"pipePrefix",data:{prefixes:e.toHumanReadableText(r)}}))}})});module.exports={configs:{all:{extends:"./configs/base.json",rules:{"@angular-eslint/component-class-suffix":"error","@angular-eslint/component-max-inline-declarations":"error","@angular-eslint/component-selector":"error","@angular-eslint/contextual-decorator":"error","@angular-eslint/contextual-lifecycle":"error","@angular-eslint/directive-class-suffix":"error","@angular-eslint/directive-selector":"error","@angular-eslint/no-attribute-decorator":"error","@angular-eslint/no-conflicting-lifecycle":"error","@angular-eslint/no-empty-lifecycle-method":"error","@angular-eslint/no-forward-ref":"error","@angular-eslint/no-host-metadata-property":"error","@angular-eslint/no-input-prefix":"error","@angular-eslint/no-input-rename":"error","@angular-eslint/no-inputs-metadata-property":"error","@angular-eslint/no-lifecycle-call":"error","@angular-eslint/no-output-native":"error","@angular-eslint/no-output-on-prefix":"error","@angular-eslint/no-output-rename":"error","@angular-eslint/no-outputs-metadata-property":"error","@angular-eslint/no-pipe-impure":"error","@angular-eslint/no-queries-metadata-property":"error","@angular-eslint/pipe-prefix":"error","@angular-eslint/prefer-on-push-component-change-detection":"error","@angular-eslint/prefer-output-readonly":"error","@angular-eslint/relative-url-prefix":"error","@angular-eslint/sort-ngmodule-metadata-arrays":"error","@angular-eslint/use-component-selector":"error","@angular-eslint/use-component-view-encapsulation":"error","@angular-eslint/use-injectable-provided-in":"error","@angular-eslint/use-lifecycle-interface":"error","@angular-eslint/use-pipe-transform-interface":"error"}},base:{parser:"@typescript-eslint/parser",parserOptions:{ecmaVersion:2020,sourceType:"module",project:"./tsconfig.json"},plugins:["@typescript-eslint","@angular-eslint"]},recommended:{extends:"./configs/base.json",rules:{"@angular-eslint/component-class-suffix":"error","@angular-eslint/contextual-lifecycle":"error","@angular-eslint/directive-class-suffix":"error","@angular-eslint/no-conflicting-lifecycle":"error","@angular-eslint/no-empty-lifecycle-method":"error","@angular-eslint/no-host-metadata-property":"error","@angular-eslint/no-input-rename":"error","@angular-eslint/no-inputs-metadata-property":"error","@angular-eslint/no-output-native":"error","@angular-eslint/no-output-on-prefix":"error","@angular-eslint/no-output-rename":"error","@angular-eslint/no-outputs-metadata-property":"error","@angular-eslint/use-lifecycle-interface":"warn","@angular-eslint/use-pipe-transform-interface":"error"}},"recommended--extra":{extends:"./configs/base.json",rules:{"no-restricted-imports":["error",{paths:[{name:"rxjs/Rx",message:"Please import directly from 'rxjs' instead"}]}],"@typescript-eslint/member-ordering":["error",{default:["static-field","instance-field","static-method","instance-method"]}],"no-restricted-syntax":["error",{selector:'CallExpression[callee.object.name="console"][callee.property.name=/^(debug|info|time|timeEnd|trace)$/]',message:"Unexpected property on console object was called"}],"@typescript-eslint/no-inferrable-types":["error",{ignoreParameters:!0}],"@typescript-eslint/no-non-null-assertion":"error","no-fallthrough":"error"}},"ng-cli-compat":{extends:["./configs/base.json"],env:{browser:!0,es6:!0,node:!0},plugins:["eslint-plugin-import","eslint-plugin-jsdoc","eslint-plugin-prefer-arrow"],rules:{"@typescript-eslint/interface-name-prefix":"off","@typescript-eslint/explicit-member-accessibility":"off","sort-keys":"off","@angular-eslint/component-class-suffix":"error","@angular-eslint/component-selector":["error",{type:"element",prefix:"app",style:"kebab-case"}],"@angular-eslint/contextual-lifecycle":"error","@angular-eslint/directive-class-suffix":"error","@angular-eslint/directive-selector":["error",{type:"attribute",prefix:"app",style:"camelCase"}],"@angular-eslint/no-conflicting-lifecycle":"error","@angular-eslint/no-host-metadata-property":"error","@angular-eslint/no-input-rename":"error","@angular-eslint/no-inputs-metadata-property":"error","@angular-eslint/no-output-native":"error","@angular-eslint/no-output-on-prefix":"error","@angular-eslint/no-output-rename":"error","@angular-eslint/no-outputs-metadata-property":"error","@angular-eslint/use-lifecycle-interface":"error","@angular-eslint/use-pipe-transform-interface":"error","@typescript-eslint/adjacent-overload-signatures":"error","@typescript-eslint/array-type":"off","@typescript-eslint/ban-types":["error",{types:{Object:{message:"Avoid using the `Object` type. Did you mean `object`?"},Function:{message:"Avoid using the `Function` type. Prefer a specific function type, like `() => void`."},Boolean:{message:"Avoid using the `Boolean` type. Did you mean `boolean`?"},Number:{message:"Avoid using the `Number` type. Did you mean `number`?"},String:{message:"Avoid using the `String` type. Did you mean `string`?"},Symbol:{message:"Avoid using the `Symbol` type. Did you mean `symbol`?"}}}],"@typescript-eslint/consistent-type-assertions":"error","@typescript-eslint/dot-notation":"error","@typescript-eslint/member-ordering":"error","@typescript-eslint/naming-convention":"error","@typescript-eslint/no-empty-function":"off","@typescript-eslint/no-empty-interface":"error","@typescript-eslint/no-explicit-any":"off","@typescript-eslint/no-inferrable-types":["error",{ignoreParameters:!0}],"@typescript-eslint/no-misused-new":"error","@typescript-eslint/no-namespace":"error","@typescript-eslint/no-non-null-assertion":"error","@typescript-eslint/no-parameter-properties":"off","@typescript-eslint/no-unused-expressions":"error","@typescript-eslint/no-use-before-define":"off","@typescript-eslint/no-var-requires":"off","@typescript-eslint/prefer-for-of":"error","@typescript-eslint/prefer-function-type":"error","@typescript-eslint/prefer-namespace-keyword":"error","@typescript-eslint/triple-slash-reference":["error",{path:"always",types:"prefer-import",lib:"always"}],"@typescript-eslint/unified-signatures":"error",complexity:"off","constructor-super":"error",eqeqeq:["error","smart"],"guard-for-in":"error","id-blacklist":["error","any","Number","number","String","string","Boolean","boolean","Undefined","undefined"],"id-match":"error","import/no-deprecated":"warn","jsdoc/newline-after-description":"error","jsdoc/no-types":"error","max-classes-per-file":"off","no-bitwise":"error","no-caller":"error","no-cond-assign":"error","no-console":["error",{allow:["log","warn","dir","timeLog","assert","clear","count","countReset","group","groupEnd","table","dirxml","error","groupCollapsed","Console","profile","profileEnd","timeStamp","context"]}],"no-debugger":"error","no-empty":"off","no-eval":"error","no-fallthrough":"error","no-invalid-this":"off","no-new-wrappers":"error","no-restricted-imports":["error",{name:"rxjs/Rx",message:"Please import directly from 'rxjs' instead"}],"@typescript-eslint/no-shadow":["error",{hoist:"all"}],"no-throw-literal":"error","no-undef-init":"error","no-underscore-dangle":"error","no-unsafe-finally":"error","no-unused-labels":"error","no-var":"error","object-shorthand":"error","one-var":["error","never"],"prefer-arrow/prefer-arrow-functions":"error","prefer-const":"error",radix:"error","use-isnan":"error","valid-typeof":"off"}},"ng-cli-compat--formatting-add-on":{plugins:["eslint-plugin-jsdoc"],rules:{"arrow-body-style":"error","arrow-parens":"off","comma-dangle":"off",curly:"error","eol-last":"error","jsdoc/check-alignment":"error","max-len":["error",{code:140}],"new-parens":"error","no-multiple-empty-lines":"off","no-trailing-spaces":"error","quote-props":["error","as-needed"],"space-before-function-paren":["error",{anonymous:"never",asyncArrow:"always",named:"never"}],"@typescript-eslint/member-delimiter-style":["error",{multiline:{delimiter:"semi",requireLast:!0},singleline:{delimiter:"semi",requireLast:!1}}],quotes:"off","@typescript-eslint/quotes":["error","single",{allowTemplateLiterals:!0}],"@typescript-eslint/semi":["error","always"],"@typescript-eslint/type-annotation-spacing":"error"}}},rules:{"contextual-decorator":o,"component-class-suffix":n,"component-max-inline-declarations":c,"component-selector":p,"contextual-lifecycle":u,"directive-class-suffix":d,"directive-selector":m,"no-attribute-decorator":g,"no-conflicting-lifecycle":h,"no-forward-ref":T,"no-host-metadata-property":A,"no-input-prefix":O,"no-input-rename":E,"no-inputs-metadata-property":C,"no-lifecycle-call":R,"no-output-native":U,"no-output-on-prefix":v,"no-output-rename":P,"no-outputs-metadata-property":b,"no-pipe-impure":N,"no-queries-metadata-property":_,"no-empty-lifecycle-method":L,[w]:j,"prefer-output-readonly":k,"relative-url-prefix":V,"sort-ngmodule-metadata-arrays":q,"use-component-selector":Y,"use-component-view-encapsulation":W,"use-injectable-provided-in":H,"use-lifecycle-interface":G,"use-pipe-transform-interface":K,"pipe-prefix":z}};
1
+ var e=require("@angular-eslint/utils"),t=require("@typescript-eslint/experimental-utils");const r=e=>function({name:r,meta:s,defaultOptions:o,create:a}){return{meta:Object.assign(Object.assign({},s),{docs:Object.assign(Object.assign({},s.docs),{url:e(r)})}),defaultOptions:o,create(e){const r=t.ESLintUtils.applyDefault(o,e.options);return a(e,r)}}};r.withoutDocs=t.ESLintUtils.RuleCreator.withoutDocs;const s=r(e=>`https://github.com/angular-eslint/angular-eslint/blob/master/packages/eslint-plugin/docs/rules/${e}.md`);var o=s({name:"contextual-decorator",meta:{type:"suggestion",docs:{description:"Ensures that classes use contextual decorators in its body",recommended:!1},schema:[],messages:{contextualDecorator:'Decorator out of context for "@{{classDecoratorName}}()"'}},defaultOptions:[],create:t=>({"MethodDefinition[kind=/^(get|set|method)$/], PropertyDefinition, TSParameterProperty"(r){!function(t,r){var s;if(null==(s=r.decorators)||!s.length)return;const o=e.ASTUtils.getNearestNodeFrom(r,e.ASTUtils.isClassDeclaration);if(!o)return;const n=e.ASTUtils.getAngularClassDecorator(o);if(n)for(const e of r.decorators)a(t,e,n)}(t,r)}})});function a(t,r,s){const o=e.ASTUtils.getDecoratorName(r);if(!o||!e.ASTUtils.isAngularInnerClassDecorator(o))return;const a=e.ASTUtils.ANGULAR_CLASS_DECORATOR_MAPPER.get(s);null!=a&&a.has(o)||t.report({node:r,messageId:"contextualDecorator",data:{classDecoratorName:s}})}var n=s({name:"component-class-suffix",meta:{type:"suggestion",docs:{description:'Classes decorated with @Component must have suffix "Component" (or custom) in their name. See more at https://angular.io/styleguide#style-02-03',recommended:"error"},schema:[{type:"object",properties:{suffixes:{type:"array",items:{type:"string"}}},additionalProperties:!1}],messages:{componentClassSuffix:"Component class names should end with one of these suffixes: {{suffixes}} (https://angular.io/styleguide#style-02-03)"}},defaultOptions:[{suffixes:["Component"]}],create:(t,[{suffixes:r}])=>({[e.Selectors.COMPONENT_CLASS_DECORATOR](s){const o=s.parent,a=e.ASTUtils.getClassName(o);a&&r.some(e=>a.endsWith(e))||t.report({node:o.id?o.id:o,messageId:"componentClassSuffix",data:{suffixes:e.toHumanReadableText(r)}})}})});const i=/\r\n|\r|\n/;function l(t){return e.ASTUtils.isTemplateLiteral(t)?t.quasis[0].value.raw.trim().split(i).length:e.ASTUtils.isLiteral(t)?t.raw.trim().split(i).length:0}var c=s({name:"component-max-inline-declarations",meta:{type:"suggestion",docs:{description:"Enforces a maximum number of lines in inline template, styles and animations. See more at https://angular.io/guide/styleguide#style-05-04",recommended:!1},schema:[{type:"object",properties:{template:{minimum:0,type:"number"},styles:{minimum:0,type:"number"},animations:{minimum:0,type:"number"}},additionalProperties:!1}],messages:{componentMaxInlineDeclarations:"`{{propertyType}}` has too many lines ({{lineCount}}). Maximum allowed is {{max}} (https://angular.io/guide/styleguide#style-05-04)"}},defaultOptions:[{template:3,styles:3,animations:15}],create:(t,[{template:r=3,styles:s=3,animations:o=15}])=>({[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='template']`]({value:e}){const s=l(e);s<=r||t.report({node:e,messageId:"componentMaxInlineDeclarations",data:{lineCount:s,max:r,propertyType:"template"}})},[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='styles']`]({value:r}){if(!e.ASTUtils.isArrayExpression(r))return;const o=r.elements.reduce((e,t)=>e+l(t),0);o<=s||t.report({node:r,messageId:"componentMaxInlineDeclarations",data:{lineCount:o,max:s,propertyType:"styles"}})},[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='animations']`]({value:r}){if(!e.ASTUtils.isArrayExpression(r)||0===r.elements.length)return;const s=Math.max(r.loc.end.line-r.loc.start.line-2,1);s<=o||t.report({node:r,messageId:"componentMaxInlineDeclarations",data:{lineCount:s,max:o,propertyType:"animations"}})}})}),p=s({name:"component-selector",meta:{type:"suggestion",docs:{description:"Component selectors should follow given naming rules. See more at https://angular.io/guide/styleguide#style-02-07, https://angular.io/guide/styleguide#style-05-02\n and https://angular.io/guide/styleguide#style-05-03.",recommended:!1},schema:[{type:"object",properties:{type:{oneOf:[{type:"string"},{type:"array",items:{enum:[e.SelectorUtils.OPTION_TYPE_ELEMENT,e.SelectorUtils.OPTION_TYPE_ATTRIBUTE]}}]},prefix:{oneOf:[{type:"string"},{type:"array"}]},style:{type:"string",enum:[e.ASTUtils.OPTION_STYLE_CAMEL_CASE,e.ASTUtils.OPTION_STYLE_KEBAB_CASE]}},additionalProperties:!1}],messages:{prefixFailure:"The selector should start with one of these prefixes: {{prefix}} (https://angular.io/guide/styleguide#style-02-07)",styleFailure:"The selector should be {{style}} (https://angular.io/guide/styleguide#style-05-02)",typeFailure:"The selector should be used as an {{type}} (https://angular.io/guide/styleguide#style-05-03)",shadowDomEncapsulatedStyleFailure:`The selector of a ShadowDom-encapsulated component should be \`${e.ASTUtils.OPTION_STYLE_KEBAB_CASE}\` (https://github.com/angular-eslint/angular-eslint/issues/534)`}},defaultOptions:[{type:"",prefix:"",style:""}],create:(r,[{type:s,prefix:o,style:a}])=>({[e.Selectors.COMPONENT_CLASS_DECORATOR](n){const i=e.ASTUtils.getDecoratorPropertyValue(n,"selector");if(!i)return;if(!e.SelectorUtils.checkValidOptions(s,o,a))return;const l=a!==e.ASTUtils.OPTION_STYLE_KEBAB_CASE&&function(r){const s=e.ASTUtils.getDecoratorPropertyValue(r,"encapsulation");return s&&e.ASTUtils.isMemberExpression(s)&&t.ASTUtils.isIdentifier(s.object)&&"ViewEncapsulation"===s.object.name&&t.ASTUtils.isIdentifier(s.property)&&"ShadowDom"===s.property.name}(n)?e.ASTUtils.OPTION_STYLE_KEBAB_CASE:a,c=e.SelectorUtils.checkSelector(i,s,e.arrayify(o),l);null!==c&&(c.hasExpectedType?c.hasExpectedStyle?c.hasExpectedPrefix||e.SelectorUtils.reportPrefixError(i,o,r):a===l?e.SelectorUtils.reportStyleError(i,a,r):r.report({node:i,messageId:"shadowDomEncapsulatedStyleFailure"}):e.SelectorUtils.reportTypeError(i,s,r))}})}),u=s({name:"contextual-lifecycle",meta:{type:"problem",docs:{description:"Ensures that lifecycle methods are used in a correct context",recommended:"error"},schema:[],messages:{contextualLifecycle:"Angular will not invoke the `{{methodName}}` lifecycle method within `@{{classDecoratorName}}()` classes"}},defaultOptions:[],create(t){function r({parent:r},s){const o=r,a=e.ASTUtils.ANGULAR_CLASS_DECORATOR_LIFECYCLE_METHOD_MAPPER.get(s),n=e.ASTUtils.getDeclaredMethods(o);for(const r of n){const o=e.ASTUtils.getMethodName(r);!o||!e.ASTUtils.isAngularLifecycleMethod(o)||null!=a&&a.has(o)||t.report({node:r.key,messageId:"contextualLifecycle",data:{classDecoratorName:s,methodName:o}})}}return{[e.Selectors.COMPONENT_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Component)},[e.Selectors.DIRECTIVE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Directive)},[e.Selectors.INJECTABLE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Injectable)},[e.Selectors.MODULE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.NgModule)},[e.Selectors.PIPE_CLASS_DECORATOR](t){r(t,e.ASTUtils.AngularClassDecorators.Pipe)}}}}),d=s({name:"directive-class-suffix",meta:{type:"suggestion",docs:{description:'Classes decorated with @Directive must have suffix "Directive" (or custom) in their name. See more at https://angular.io/styleguide#style-02-03',recommended:"error"},schema:[{type:"object",properties:{suffixes:{type:"array",items:{type:"string"}}},additionalProperties:!1}],messages:{directiveClassSuffix:"Directive class names should end with one of these suffixes: {{suffixes}} (https://angular.io/styleguide#style-02-03)"}},defaultOptions:[{suffixes:["Directive"]}],create:(t,[{suffixes:r}])=>({[e.Selectors.DIRECTIVE_CLASS_DECORATOR](s){if(!e.ASTUtils.getDecoratorPropertyValue(s,"selector"))return;const o=s.parent,a=e.ASTUtils.getClassName(o),n=e.ASTUtils.getDeclaredInterfaceNames(o).some(e=>e.endsWith("Validator")),i=r.concat(n?"Validator":[]);var l;a&&i.some(e=>a.endsWith(e))||t.report({node:null!=(l=o.id)?l:o,messageId:"directiveClassSuffix",data:{suffixes:e.toHumanReadableText(i)}})}})}),m=s({name:"directive-selector",meta:{type:"suggestion",docs:{description:"Directive selectors should follow given naming rules. See more at https://angular.io/guide/styleguide#style-02-06 and https://angular.io/guide/styleguide#style-02-08.",recommended:!1},schema:[{type:"object",properties:{type:{oneOf:[{type:"string"},{type:"array",items:{enum:[e.SelectorUtils.OPTION_TYPE_ELEMENT,e.SelectorUtils.OPTION_TYPE_ATTRIBUTE]}}]},prefix:{oneOf:[{type:"string"},{type:"array"}]},style:{type:"string",enum:[e.ASTUtils.OPTION_STYLE_CAMEL_CASE,e.ASTUtils.OPTION_STYLE_KEBAB_CASE]}},additionalProperties:!1}],messages:{prefixFailure:"The selector should start with one of these prefixes: {{prefix}} (https://angular.io/guide/styleguide#style-02-08)",styleFailure:"The selector should be {{style}} (https://angular.io/guide/styleguide#style-02-06)",typeFailure:"The selector should be used as an {{type}} (https://angular.io/guide/styleguide#style-02-06)"}},defaultOptions:[{type:"",prefix:"",style:""}],create:(t,[{type:r,prefix:s,style:o}])=>({[e.Selectors.DIRECTIVE_CLASS_DECORATOR](a){const n=e.ASTUtils.getDecoratorPropertyValue(a,"selector");if(!n)return;if(!e.SelectorUtils.checkValidOptions(r,s,o))return;const i=e.SelectorUtils.checkSelector(n,r,e.arrayify(s),o);null!==i&&(i.hasExpectedType?i.hasExpectedStyle?i.hasExpectedPrefix||e.SelectorUtils.reportPrefixError(n,s,t):e.SelectorUtils.reportStyleError(n,o,t):e.SelectorUtils.reportTypeError(n,r,t))}})}),g=s({name:"no-attribute-decorator",meta:{type:"problem",docs:{description:"The @Attribute decorator is used to obtain a single value for an attribute. This is a much less common use-case than getting a stream of values (using @Input), so often the @Attribute decorator is mistakenly used when @Input was what was intended. This rule disallows usage of @Attribute decorator altogether in order to prevent these mistakes.",recommended:!1},schema:[],messages:{noAttributeDecorator:"@Attribute can only obtain a single value and is rarely what is required. Use @Input instead to retrieve a stream of values."}},defaultOptions:[],create:e=>({'ClassDeclaration MethodDefinition[key.name="constructor"] Decorator[expression.callee.name="Attribute"]'(t){e.report({node:t,messageId:"noAttributeDecorator"})}})});const f=[e.ASTUtils.AngularLifecycleInterfaces.DoCheck,e.ASTUtils.AngularLifecycleInterfaces.OnChanges],y=[e.ASTUtils.AngularLifecycleMethods.ngDoCheck,e.ASTUtils.AngularLifecycleMethods.ngOnChanges];var h=s({name:"no-conflicting-lifecycle",meta:{type:"suggestion",docs:{description:"Ensures that directives not implement conflicting lifecycle interfaces.",recommended:"error"},schema:[],messages:{noConflictingLifecycleInterface:`Implementing ${e.ASTUtils.AngularLifecycleInterfaces.DoCheck} and ${e.ASTUtils.AngularLifecycleInterfaces.OnChanges} in a class is not recommended`,noConflictingLifecycleMethod:`Declaring ${e.ASTUtils.AngularLifecycleMethods.ngDoCheck} and ${e.ASTUtils.AngularLifecycleMethods.ngOnChanges} method in a class is not recommended`}},defaultOptions:[],create:r=>({ClassDeclaration(s){(t=>{const s=e.ASTUtils.getDeclaredAngularLifecycleInterfaces(t);if(!f.every(e=>s.includes(e)))return;const o=e.ASTUtils.getInterfaces(t).filter(t=>{const r=e.ASTUtils.getInterfaceName(t);return r&&e.ASTUtils.isAngularLifecycleInterface(r)});for(const e of o)r.report({node:e,messageId:"noConflictingLifecycleInterface"})})(s),(s=>{const o=e.ASTUtils.getDeclaredAngularLifecycleMethods(s);if(!y.every(e=>o.includes(e)))return;const a=e.ASTUtils.getDeclaredMethods(s).filter(r=>t.ASTUtils.isIdentifier(r.key)&&e.ASTUtils.isAngularLifecycleMethod(r.key.name));for(const e of a)r.report({node:e,messageId:"noConflictingLifecycleMethod"})})(s)}})}),T=s({name:"no-forward-ref",meta:{type:"suggestion",docs:{description:"Disallows usage of `forwardRef` references for DI",recommended:!1},schema:[],messages:{noForwardRef:"Avoid using `forwardRef`"}},defaultOptions:[],create:e=>({'CallExpression[callee.type="Identifier"][callee.name="forwardRef"]'(t){e.report({node:t,messageId:"noForwardRef"})}})});const S={allowStatic:!1};var A=s({name:"no-host-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `host` metadata property. See more at https://angular.io/styleguide#style-06-03",recommended:"error"},schema:[{type:"object",properties:{allowStatic:{type:"boolean",default:S.allowStatic}},additionalProperties:!1}],messages:{noHostMetadataProperty:`Use @${e.ASTUtils.AngularInnerClassDecorators.HostBinding} or @${e.ASTUtils.AngularInnerClassDecorators.HostListener} rather than the \`host\` metadata property (https://angular.io/styleguide#style-06-03)`}},defaultOptions:[S],create:(t,[{allowStatic:r}])=>({[`${e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR} Property[key.name="host"]`](s){(r&&e.ASTUtils.isObjectExpression(s.value)?s.value.properties.filter(x):[s]).forEach(e=>{t.report({node:e,messageId:"noHostMetadataProperty"})})}})});function x(r){return e.ASTUtils.isProperty(r)&&!function(r){return!r.computed&&(t.ASTUtils.isIdentifier(r.key)||e.ASTUtils.isStringLiteral(r.key)&&function({0:e}){return e.toLowerCase()!==e.toUpperCase()}(r.key.value))}(r)&&!function(t){return e.ASTUtils.isStringLiteral(t.value)&&""===t.value.value}(r)}var O=s({name:"no-input-prefix",meta:{type:"suggestion",docs:{description:"Ensures that input bindings, including aliases, are not named or prefixed by the configured disallowed prefixes",recommended:!1},schema:[{type:"object",properties:{prefixes:{type:"array",items:{type:"string"}}},additionalProperties:!1}],messages:{noInputPrefix:"Input bindings, including aliases, should not be named, nor prefixed by {{prefixes}}"}},defaultOptions:[{prefixes:[]}],create:(t,[{prefixes:r}])=>({[[e.Selectors.INPUTS_METADATA_PROPERTY_LITERAL,e.Selectors.INPUT_ALIAS,e.Selectors.INPUT_PROPERTY_OR_SETTER].join(",")](s){const[o,a]=e.ASTUtils.getRawText(s).replace(/\s/g,"").split(":");r.some(e=>function(e,t,r){const s=RegExp(`^${e}(([^a-z])|(?=$))`);return s.test(t)||s.test(r)}(e,o,a))&&t.report({node:s,messageId:"noInputPrefix",data:{prefixes:e.toHumanReadableText(r)}})}})}),E=s({name:"no-input-rename",meta:{type:"suggestion",docs:{description:"Ensures that input bindings are not aliased",recommended:"error"},fixable:"code",hasSuggestions:!0,schema:[{type:"object",properties:{allowedNames:{type:"array",items:{type:"string"},description:"A list with allowed input names",uniqueItems:!0}},additionalProperties:!1}],messages:{noInputRename:"Input bindings should not be aliased (https://angular.io/guide/styleguide#style-05-13)",suggestRemoveAliasName:"Remove alias name",suggestReplaceOriginalNameWithAliasName:"Remove alias name and use it as the original name"}},defaultOptions:[{allowedNames:[]}],create(r,[{allowedNames:s=[]}]){let o=new Set;const a=e.getAriaAttributeKeys();return{[e.Selectors.COMPONENT_OR_DIRECTIVE_SELECTOR_LITERAL](t){o=new Set(e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(","))},[e.Selectors.INPUT_ALIAS](n){const i=e.ASTUtils.getNearestNodeFrom(n,e.ASTUtils.isPropertyOrMethodDefinition);if(!i||!t.ASTUtils.isIdentifier(i.key))return;const l=e.ASTUtils.getRawText(n),c=e.ASTUtils.getRawText(i.key);s.includes(l)||a.has(l)&&c===e.kebabToCamelCase(l)||(l===c?r.report({node:n,messageId:"noInputRename",fix:e=>e.remove(n)}):I(o,c,l)||r.report({node:n,messageId:"noInputRename",suggest:[{messageId:"suggestRemoveAliasName",fix:e=>e.remove(n)},{messageId:"suggestReplaceOriginalNameWithAliasName",fix:e=>[e.remove(n),e.replaceText(i.key,l.includes("-")?`'${l}'`:l)]}]}))},[e.Selectors.INPUTS_METADATA_PROPERTY_LITERAL](t){const[n,i]=e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(":");!i||s.includes(i)||a.has(i)&&n===e.kebabToCamelCase(i)||(i===n?r.report({node:t,messageId:"noInputRename",fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,n))}):I(o,n,i)||r.report({node:t,messageId:"noInputRename",suggest:[["suggestRemoveAliasName",n],["suggestReplaceOriginalNameWithAliasName",i]].map(([r,s])=>({messageId:r,fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,s))}))}))},"ClassDeclaration:exit"(){o=new Set}}}});function I(t,r,s){return[...t].some(t=>t===s||function(t,r){return`${t}${e.capitalize(r)}`}(t,r)===s)}var C=s({name:"no-inputs-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `inputs` metadata property. See more at https://angular.io/styleguide#style-05-12",recommended:"error"},schema:[],messages:{noInputsMetadataProperty:"Use `@Input` rather than the `inputs` metadata property (https://angular.io/styleguide#style-05-12)"}},defaultOptions:[],create:t=>({[`${e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR} ${e.Selectors.metadataProperty("inputs")}`](e){t.report({node:e,messageId:"noInputsMetadataProperty"})}})}),R=s({name:"no-lifecycle-call",meta:{type:"suggestion",docs:{description:"Disallows explicit calls to lifecycle methods",recommended:!1},schema:[],messages:{noLifecycleCall:"Avoid explicit calls to lifecycle methods"}},defaultOptions:[],create:r=>({[`ClassDeclaration CallExpression > MemberExpression[property.name=${e.toPattern([...e.ASTUtils.ANGULAR_LIFECYCLE_METHODS])}]`]:s=>{const o=e.ASTUtils.getNearestNodeFrom(s,e.ASTUtils.isClassDeclaration);!o||!e.ASTUtils.getAngularClassDecorator(o)||e.ASTUtils.isSuper(s.object)&&function(r){const s=e.ASTUtils.getNearestNodeFrom(r,e.ASTUtils.isMethodDefinition);return Boolean(s&&function({property:e},{key:r}){return t.ASTUtils.isIdentifier(e)&&t.ASTUtils.isIdentifier(r)&&e.name===r.name}(r,s))}(s)||r.report({node:s.parent,messageId:"noLifecycleCall"})}})}),U=s({name:"no-output-native",meta:{type:"suggestion",docs:{description:"Ensures that output bindings, including aliases, are not named as standard DOM events",recommended:"error"},schema:[],messages:{noOutputNative:"Output bindings, including aliases, should not be named as standard DOM events"}},defaultOptions:[],create(t){const r=e.getNativeEventNames();return{[[e.Selectors.OUTPUTS_METADATA_PROPERTY_LITERAL,e.Selectors.OUTPUT_ALIAS,e.Selectors.OUTPUT_PROPERTY_OR_GETTER].join(",")](s){const[o,a]=e.ASTUtils.getRawText(s).replace(/\s/g,"").split(":");(r.has(o)||r.has(a))&&t.report({node:s,messageId:"noOutputNative"})}}}}),v=s({name:"no-output-on-prefix",meta:{type:"suggestion",docs:{description:'Ensures that output bindings, including aliases, are not named "on", nor prefixed with it. See more at https://angular.io/guide/styleguide#style-05-16',recommended:"error"},schema:[],messages:{noOutputOnPrefix:'Output bindings, including aliases, should not be named "on", nor prefixed with it (https://angular.io/guide/styleguide#style-05-16)'}},defaultOptions:[],create(t){const r=/^on(([^a-z])|(?=$))/;return{[[e.Selectors.OUTPUTS_METADATA_PROPERTY_LITERAL,e.Selectors.OUTPUT_ALIAS,e.Selectors.OUTPUT_PROPERTY_OR_GETTER].join(",")](s){const[o,a]=e.ASTUtils.getRawText(s).replace(/\s/g,"").split(":");(r.test(o)||r.test(a))&&t.report({node:s,messageId:"noOutputOnPrefix"})}}}}),P=s({name:"no-output-rename",meta:{type:"suggestion",docs:{description:"Ensures that output bindings are not aliased",recommended:"error"},fixable:"code",hasSuggestions:!0,schema:[],messages:{noOutputRename:"Output bindings should not be aliased (https://angular.io/guide/styleguide#style-05-13)",suggestRemoveAliasName:"Remove alias name",suggestReplaceOriginalNameWithAliasName:"Remove alias name and use it as the original name"}},defaultOptions:[],create(r){let s=new Set;return{[e.Selectors.COMPONENT_OR_DIRECTIVE_SELECTOR_LITERAL](t){s=new Set(e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(","))},[e.Selectors.OUTPUT_ALIAS](o){const a=e.ASTUtils.getNearestNodeFrom(o,e.ASTUtils.isPropertyOrMethodDefinition);if(!a||!t.ASTUtils.isIdentifier(a.key))return;const n=e.ASTUtils.getRawText(o),i=e.ASTUtils.getRawText(a.key);n===i?r.report({node:o,messageId:"noOutputRename",fix:e=>e.remove(o)}):D(s,i,n)||r.report({node:o,messageId:"noOutputRename",suggest:[{messageId:"suggestRemoveAliasName",fix:e=>e.remove(o)},{messageId:"suggestReplaceOriginalNameWithAliasName",fix:e=>[e.remove(o),e.replaceText(a.key,n.includes("-")?`'${n}'`:n)]}]})},[e.Selectors.OUTPUTS_METADATA_PROPERTY_LITERAL](t){const[o,a]=e.withoutBracketsAndWhitespaces(e.ASTUtils.getRawText(t)).split(":");a&&(a===o?r.report({node:t,messageId:"noOutputRename",fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,o))}):D(s,o,a)||r.report({node:t,messageId:"noOutputRename",suggest:[["suggestRemoveAliasName",o],["suggestReplaceOriginalNameWithAliasName",a]].map(([r,s])=>({messageId:r,fix:r=>r.replaceText(t,e.ASTUtils.getReplacementText(t,s))}))}))},"ClassDeclaration:exit"(){s=new Set}}}});function D(t,r,s){return[...t].some(t=>t===s||function(t,r){return`${t}${e.capitalize(r)}`}(t,r)===s)}var b=s({name:"no-outputs-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `outputs` metadata property. See more at https://angular.io/styleguide#style-05-12",recommended:"error"},schema:[],messages:{noOutputsMetadataProperty:"Use `@Output` rather than the `outputs` metadata property (https://angular.io/styleguide#style-05-12)"}},defaultOptions:[],create:t=>({[`${e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR} ${e.Selectors.metadataProperty("outputs")}`](e){t.report({node:e,messageId:"noOutputsMetadataProperty"})}})}),N=s({name:"no-pipe-impure",meta:{type:"suggestion",docs:{description:"Disallows the declaration of impure pipes",recommended:!1},hasSuggestions:!0,schema:[],messages:{noPipeImpure:"Impure pipes should be avoided because they are invoked on each change-detection cycle",suggestRemovePipeImpure:"Remove `pure` property"}},defaultOptions:[],create(t){const r=t.getSourceCode();return{[`${e.Selectors.PIPE_CLASS_DECORATOR} ${e.Selectors.metadataProperty("pure")}:matches([value.value=false], [value.operator='!'][value.argument.value=true])`](s){t.report({node:s,messageId:"noPipeImpure",suggest:[{messageId:"suggestRemovePipeImpure",fix:t=>e.RuleFixes.getNodeToCommaRemoveFix(r,s,t)}]})}}}}),_=s({name:"no-queries-metadata-property",meta:{type:"suggestion",docs:{description:"Disallows usage of the `queries` metadata property. See more at https://angular.io/styleguide#style-05-12.",recommended:!1},schema:[],messages:{noQueriesMetadataProperty:`Use @${e.ASTUtils.AngularInnerClassDecorators.Output} rather than the \`queries\` metadata property (https://angular.io/styleguide#style-05-12)`}},defaultOptions:[],create:t=>({[e.Selectors.COMPONENT_OR_DIRECTIVE_CLASS_DECORATOR](r){const s=e.ASTUtils.getDecoratorPropertyValue(r,"queries");s&&t.report({node:s.parent,messageId:"noQueriesMetadataProperty"})}})}),L=s({name:"no-empty-lifecycle-method",meta:{type:"suggestion",docs:{description:"Disallows declaring empty lifecycle methods",recommended:"error"},hasSuggestions:!0,schema:[],messages:{noEmptyLifecycleMethod:"Lifecycle methods should not be empty",suggestRemoveLifecycleMethod:"Remove lifecycle method"}},defaultOptions:[],create(t){const r=t.getSourceCode(),s=e.toPattern([...e.ASTUtils.ANGULAR_LIFECYCLE_METHODS]);return{[`ClassDeclaration:has(Decorator[expression.callee.name=/^(Component|Directive|Injectable|NgModule|Pipe)$/]) > ClassBody > ${e.Selectors.methodDefinition(s)}[value.body.body.length=0]`](s){t.report({node:s,messageId:"noEmptyLifecycleMethod",suggest:[{messageId:"suggestRemoveLifecycleMethod",fix:t=>{var o;const a=null!=(o=e.ASTUtils.getImportDeclarations(s,"@angular/core"))?o:[],n=e.ASTUtils.getRawText(s).replace(/^ng+/,""),i=function(e,t){return e.split(" ").filter(e=>function(e){return e.replace(/[\W]/g,"")}(e)===t).length}(r.getText(),n);return[t.remove(s),e.RuleFixes.getImplementsRemoveFix(r,s.parent.parent,n,t),i<=2?e.RuleFixes.getImportRemoveFix(r,a,n,t):null].filter(e.isNotNullOrUndefined)}}]})}}}});const w="prefer-on-push-component-change-detection",M="ChangeDetectionStrategy.OnPush";var j=s({name:w,meta:{type:"suggestion",docs:{description:`Ensures component's \`changeDetection\` is set to \`${M}\``,recommended:!1},hasSuggestions:!0,schema:[],messages:{preferOnPushComponentChangeDetection:`The component's \`changeDetection\` value should be set to \`${M}\``,suggestAddChangeDetectionOnPush:`Add \`${M}\``}},defaultOptions:[],create(t){const r=e.Selectors.metadataProperty("changeDetection");return{[[`${e.Selectors.COMPONENT_CLASS_DECORATOR}:matches([expression.arguments.length=0], [expression.arguments.0.type='ObjectExpression']:not(:has(${r})))`,`${e.Selectors.COMPONENT_CLASS_DECORATOR} > CallExpression > ObjectExpression > ${r}:matches([value.type='Identifier'][value.name='undefined'], [value.object.name='ChangeDetectionStrategy'][value.property.name!='OnPush'])`].join(",")](r){t.report({node:$(r),messageId:"preferOnPushComponentChangeDetection",suggest:[{messageId:"suggestAddChangeDetectionOnPush",fix:t=>e.ASTUtils.isProperty(r)?[e.RuleFixes.getImportAddFix({fixer:t,importName:"ChangeDetectionStrategy",moduleName:"@angular/core",node:r.parent.parent.parent.parent}),e.ASTUtils.isMemberExpression(r.value)?t.replaceText(r.value.property,"OnPush"):t.replaceText(r.value,M)].filter(e.isNotNullOrUndefined):[e.RuleFixes.getImportAddFix({fixer:t,importName:"ChangeDetectionStrategy",moduleName:"@angular/core",node:r.parent}),e.RuleFixes.getDecoratorPropertyAddFix(r,t,`changeDetection: ${M}`)].filter(e.isNotNullOrUndefined)}]})}}}});function $(t){return e.ASTUtils.isProperty(t)?e.ASTUtils.isMemberExpression(t.value)?t.value.property:t.value:t}var k=s({name:"prefer-output-readonly",meta:{type:"suggestion",docs:{description:"Prefer to declare `@Output` as `readonly` since they are not supposed to be reassigned",recommended:!1},hasSuggestions:!0,schema:[],messages:{preferOutputReadonly:"Prefer to declare `@Output` as `readonly` since they are not supposed to be reassigned",suggestAddReadonlyModifier:"Add `readonly` modifier"}},defaultOptions:[],create:t=>({[`PropertyDefinition:not([readonly]) > ${e.Selectors.OUTPUT_DECORATOR}`]({parent:{key:e}}){t.report({node:e,messageId:"preferOutputReadonly",suggest:[{messageId:"suggestAddReadonlyModifier",fix:t=>t.insertTextBefore(e,"readonly ")}]})}})});const F=/^\.\.?\/.+/;var V=s({name:"relative-url-prefix",meta:{type:"suggestion",docs:{description:"The ./ and ../ prefix is standard syntax for relative URLs; don't depend on Angular's current ability to do without that prefix. See more at https://angular.io/styleguide#style-05-04",recommended:!1},schema:[],messages:{relativeUrlPrefix:"The ./ and ../ prefix is standard syntax for relative URLs. (https://angular.io/styleguide#style-05-04)"}},defaultOptions:[],create:t=>({[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='templateUrl']`]({value:e}){B(e)&&t.report({node:e,messageId:"relativeUrlPrefix"})},[`${e.Selectors.COMPONENT_CLASS_DECORATOR} Property[key.name='styleUrls']`]({value:r}){e.ASTUtils.isArrayExpression(r)&&r.elements.filter(B).forEach(e=>{t.report({node:e,messageId:"relativeUrlPrefix"})})}})});function B(t){return!e.ASTUtils.isStringLiteral(t)||!F.test(t.value)}var q=s({name:"sort-ngmodule-metadata-arrays",meta:{type:"suggestion",docs:{description:"Ensures ASC alphabetical order for `NgModule` metadata arrays for easy visual scanning",recommended:!1},fixable:"code",schema:[],messages:{sortNgmoduleMetadataArrays:"`NgModule` metadata arrays should be sorted in ASC alphabetical order"}},defaultOptions:[],create:r=>({[`${e.Selectors.MODULE_CLASS_DECORATOR} Property[key.name!="deps"] > ArrayExpression`]({elements:e}){const s=e.filter(t.ASTUtils.isIdentifier).map((e,t,r)=>[e,r[t+1]]).find(([e,t])=>t&&1===e.name.localeCompare(t.name));if(!s)return;const[o,a]=s;r.report({node:a,messageId:"sortNgmoduleMetadataArrays",fix:e=>[e.replaceText(o,a.name),e.replaceText(a,o.name)]})}})}),Y=s({name:"use-component-selector",meta:{type:"suggestion",docs:{description:"Component selector must be declared",recommended:!1},schema:[],messages:{useComponentSelector:"The selector of the component is mandatory"}},defaultOptions:[],create:t=>({[e.Selectors.COMPONENT_CLASS_DECORATOR](r){const s=e.ASTUtils.getDecoratorPropertyValue(r,"selector");s&&e.ASTUtils.isStringLiteral(s)&&s.value.length||t.report({node:r,messageId:"useComponentSelector"})}})}),W=s({name:"use-component-view-encapsulation",meta:{type:"suggestion",docs:{description:"Disallows using `ViewEncapsulation.None`",recommended:!1},hasSuggestions:!0,schema:[],messages:{useComponentViewEncapsulation:"Using `ViewEncapsulation.None` makes your styles global, which may have an unintended effect",suggestRemoveViewEncapsulationNone:"Remove `ViewEncapsulation.None`"}},defaultOptions:[],create(t){const r=t.getSourceCode();return{[`${e.Selectors.COMPONENT_CLASS_DECORATOR} ${e.Selectors.metadataProperty("encapsulation")} > MemberExpression[object.name='ViewEncapsulation'] > Identifier[name='None']`](s){t.report({node:s,messageId:"useComponentViewEncapsulation",suggest:[{messageId:"suggestRemoveViewEncapsulationNone",fix:t=>{var o;const a=null!=(o=e.ASTUtils.getImportDeclarations(s,"@angular/core"))?o:[];return[e.RuleFixes.getNodeToCommaRemoveFix(r,s.parent.parent,t),e.RuleFixes.getImportRemoveFix(r,a,"ViewEncapsulation",t)].filter(e.isNotNullOrUndefined)}}]})}}}}),H=s({name:"use-injectable-provided-in",meta:{type:"suggestion",docs:{description:"Using the `providedIn` property makes `Injectables` tree-shakable",recommended:!1},hasSuggestions:!0,schema:[{type:"object",properties:{ignoreClassNamePattern:{type:"string"}},additionalProperties:!1}],messages:{useInjectableProvidedIn:"The `providedIn` property is mandatory for `Injectables`",suggestInjector:"Use `providedIn: '{{injector}}'`"}},defaultOptions:[{}],create(t,[{ignoreClassNamePattern:r}]){const s=`ClassDeclaration:not([id.name=${r}]):not(:has(TSClassImplements:matches([expression.property.name='HttpInterceptor'], [expression.name='HttpInterceptor']))) > Decorator[expression.callee.name="Injectable"]`,o=e.Selectors.metadataProperty("providedIn");return{[[`${s}:matches([expression.arguments.length=0], [expression.arguments.0.type='ObjectExpression']:not(:has(${o})))`,`${s} ${o}:matches([value.type='Identifier'][value.name='undefined'], [value.type='Literal'][value.raw='null'])`].join(",")](r){t.report({node:e.ASTUtils.isProperty(r)?r.value:r,messageId:"useInjectableProvidedIn",suggest:["any","platform","root"].map(t=>({messageId:"suggestInjector",fix:s=>{var o;return e.ASTUtils.isProperty(r)?s.replaceText(r.value,`'${t}'`):null!=(o=e.RuleFixes.getDecoratorPropertyAddFix(r,s,`providedIn: '${t}'`))?o:[]},data:{injector:t}}))})}}}}),G=s({name:"use-lifecycle-interface",meta:{type:"suggestion",docs:{description:"Ensures that classes implement lifecycle interfaces corresponding to the declared lifecycle methods. See more at https://angular.io/styleguide#style-09-01",recommended:"warn"},schema:[],messages:{useLifecycleInterface:"Lifecycle interface '{{interfaceName}}' should be implemented for method '{{methodName}}'. (https://angular.io/styleguide#style-09-01)"}},defaultOptions:[],create:t=>({[`MethodDefinition[key.name=${e.toPattern([...e.ASTUtils.ANGULAR_LIFECYCLE_METHODS])}]`]({key:r,parent:{parent:s}}){if(!e.ASTUtils.getAngularClassDecorator(s))return;const o=e.ASTUtils.getDeclaredAngularLifecycleInterfaces(s),a=r.name,n=e.ASTUtils.getLifecycleInterfaceByMethodName(a);o.includes(e.ASTUtils.AngularLifecycleInterfaces[n])||t.report({node:r,messageId:"useLifecycleInterface",data:{interfaceName:n,methodName:a}})}})}),K=s({name:"use-pipe-transform-interface",meta:{type:"suggestion",docs:{description:"Ensures that `Pipes` implement `PipeTransform` interface",recommended:"error"},fixable:"code",schema:[],messages:{usePipeTransformInterface:"Pipes should implement `PipeTransform` interface"}},defaultOptions:[],create:t=>({"ClassDeclaration:not(:has(TSClassImplements:matches([expression.name='PipeTransform'], [expression.property.name='PipeTransform']))) > Decorator[expression.callee.name='Pipe']"({parent:r}){var s;t.report({node:null!=(s=r.id)?s:r,messageId:"usePipeTransformInterface",fix:t=>{const{implementsNodeReplace:s,implementsTextReplace:o}=e.RuleFixes.getImplementsSchemaFixer(r,"PipeTransform");return[e.RuleFixes.getImportAddFix({compatibleWithTypeOnlyImport:!0,fixer:t,importName:"PipeTransform",moduleName:"@angular/core",node:r}),t.insertTextAfter(s,o)].filter(e.isNotNullOrUndefined)}})}})}),z=s({name:"pipe-prefix",meta:{type:"suggestion",docs:{description:"Enforce consistent prefix for pipes.",recommended:!1},schema:[{type:"object",properties:{prefixes:{type:"array",items:{type:"string"},minimum:1,uniqueItems:!0}},additionalProperties:!1}],messages:{pipePrefix:"@Pipes should be prefixed by {{prefixes}}"}},defaultOptions:[{prefixes:[]}],create:(t,[{prefixes:r}])=>({[e.Selectors.PIPE_CLASS_DECORATOR](s){const o=e.ASTUtils.getDecoratorPropertyValue(s,"name");if(!o)return;if(!function(e){return Array.isArray(e)&&e.length>0}(r))return;const a=r.join("|"),n=e.SelectorUtils.SelectorValidator.prefix(a,"camelCase");let i;e.ASTUtils.isStringLiteral(o)?i=o.value:e.ASTUtils.isTemplateLiteral(o)&&o.quasis[0]&&(i=o.quasis[0].value.raw),i&&(n.apply(this,[i])||t.report({node:o,messageId:"pipePrefix",data:{prefixes:e.toHumanReadableText(r)}}))}})});module.exports={configs:{all:{extends:"./configs/base.json",rules:{"@angular-eslint/component-class-suffix":"error","@angular-eslint/component-max-inline-declarations":"error","@angular-eslint/component-selector":"error","@angular-eslint/contextual-decorator":"error","@angular-eslint/contextual-lifecycle":"error","@angular-eslint/directive-class-suffix":"error","@angular-eslint/directive-selector":"error","@angular-eslint/no-attribute-decorator":"error","@angular-eslint/no-conflicting-lifecycle":"error","@angular-eslint/no-empty-lifecycle-method":"error","@angular-eslint/no-forward-ref":"error","@angular-eslint/no-host-metadata-property":"error","@angular-eslint/no-input-prefix":"error","@angular-eslint/no-input-rename":"error","@angular-eslint/no-inputs-metadata-property":"error","@angular-eslint/no-lifecycle-call":"error","@angular-eslint/no-output-native":"error","@angular-eslint/no-output-on-prefix":"error","@angular-eslint/no-output-rename":"error","@angular-eslint/no-outputs-metadata-property":"error","@angular-eslint/no-pipe-impure":"error","@angular-eslint/no-queries-metadata-property":"error","@angular-eslint/pipe-prefix":"error","@angular-eslint/prefer-on-push-component-change-detection":"error","@angular-eslint/prefer-output-readonly":"error","@angular-eslint/relative-url-prefix":"error","@angular-eslint/sort-ngmodule-metadata-arrays":"error","@angular-eslint/use-component-selector":"error","@angular-eslint/use-component-view-encapsulation":"error","@angular-eslint/use-injectable-provided-in":"error","@angular-eslint/use-lifecycle-interface":"error","@angular-eslint/use-pipe-transform-interface":"error"}},base:{parser:"@typescript-eslint/parser",parserOptions:{ecmaVersion:2020,sourceType:"module",project:"./tsconfig.json"},plugins:["@typescript-eslint","@angular-eslint"]},recommended:{extends:"./configs/base.json",rules:{"@angular-eslint/component-class-suffix":"error","@angular-eslint/contextual-lifecycle":"error","@angular-eslint/directive-class-suffix":"error","@angular-eslint/no-conflicting-lifecycle":"error","@angular-eslint/no-empty-lifecycle-method":"error","@angular-eslint/no-host-metadata-property":"error","@angular-eslint/no-input-rename":"error","@angular-eslint/no-inputs-metadata-property":"error","@angular-eslint/no-output-native":"error","@angular-eslint/no-output-on-prefix":"error","@angular-eslint/no-output-rename":"error","@angular-eslint/no-outputs-metadata-property":"error","@angular-eslint/use-lifecycle-interface":"warn","@angular-eslint/use-pipe-transform-interface":"error"}},"recommended--extra":{extends:"./configs/base.json",rules:{"no-restricted-imports":["error",{paths:[{name:"rxjs/Rx",message:"Please import directly from 'rxjs' instead"}]}],"@typescript-eslint/member-ordering":["error",{default:["static-field","instance-field","static-method","instance-method"]}],"no-restricted-syntax":["error",{selector:'CallExpression[callee.object.name="console"][callee.property.name=/^(debug|info|time|timeEnd|trace)$/]',message:"Unexpected property on console object was called"}],"@typescript-eslint/no-inferrable-types":["error",{ignoreParameters:!0}],"@typescript-eslint/no-non-null-assertion":"error","no-fallthrough":"error"}},"ng-cli-compat":{extends:["./configs/base.json"],env:{browser:!0,es6:!0,node:!0},plugins:["eslint-plugin-import","eslint-plugin-jsdoc","eslint-plugin-prefer-arrow"],rules:{"@typescript-eslint/interface-name-prefix":"off","@typescript-eslint/explicit-member-accessibility":"off","sort-keys":"off","@angular-eslint/component-class-suffix":"error","@angular-eslint/component-selector":["error",{type:"element",prefix:"app",style:"kebab-case"}],"@angular-eslint/contextual-lifecycle":"error","@angular-eslint/directive-class-suffix":"error","@angular-eslint/directive-selector":["error",{type:"attribute",prefix:"app",style:"camelCase"}],"@angular-eslint/no-conflicting-lifecycle":"error","@angular-eslint/no-host-metadata-property":"error","@angular-eslint/no-input-rename":"error","@angular-eslint/no-inputs-metadata-property":"error","@angular-eslint/no-output-native":"error","@angular-eslint/no-output-on-prefix":"error","@angular-eslint/no-output-rename":"error","@angular-eslint/no-outputs-metadata-property":"error","@angular-eslint/use-lifecycle-interface":"error","@angular-eslint/use-pipe-transform-interface":"error","@typescript-eslint/adjacent-overload-signatures":"error","@typescript-eslint/array-type":"off","@typescript-eslint/ban-types":["error",{types:{Object:{message:"Avoid using the `Object` type. Did you mean `object`?"},Function:{message:"Avoid using the `Function` type. Prefer a specific function type, like `() => void`."},Boolean:{message:"Avoid using the `Boolean` type. Did you mean `boolean`?"},Number:{message:"Avoid using the `Number` type. Did you mean `number`?"},String:{message:"Avoid using the `String` type. Did you mean `string`?"},Symbol:{message:"Avoid using the `Symbol` type. Did you mean `symbol`?"}}}],"@typescript-eslint/consistent-type-assertions":"error","@typescript-eslint/dot-notation":"error","@typescript-eslint/member-ordering":"error","@typescript-eslint/naming-convention":"error","@typescript-eslint/no-empty-function":"off","@typescript-eslint/no-empty-interface":"error","@typescript-eslint/no-explicit-any":"off","@typescript-eslint/no-inferrable-types":["error",{ignoreParameters:!0}],"@typescript-eslint/no-misused-new":"error","@typescript-eslint/no-namespace":"error","@typescript-eslint/no-non-null-assertion":"error","@typescript-eslint/no-parameter-properties":"off","@typescript-eslint/no-unused-expressions":"error","@typescript-eslint/no-use-before-define":"off","@typescript-eslint/no-var-requires":"off","@typescript-eslint/prefer-for-of":"error","@typescript-eslint/prefer-function-type":"error","@typescript-eslint/prefer-namespace-keyword":"error","@typescript-eslint/triple-slash-reference":["error",{path:"always",types:"prefer-import",lib:"always"}],"@typescript-eslint/unified-signatures":"error",complexity:"off","constructor-super":"error",eqeqeq:["error","smart"],"guard-for-in":"error","id-blacklist":["error","any","Number","number","String","string","Boolean","boolean","Undefined","undefined"],"id-match":"error","import/no-deprecated":"warn","jsdoc/newline-after-description":"error","jsdoc/no-types":"error","max-classes-per-file":"off","no-bitwise":"error","no-caller":"error","no-cond-assign":"error","no-console":["error",{allow:["log","warn","dir","timeLog","assert","clear","count","countReset","group","groupEnd","table","dirxml","error","groupCollapsed","Console","profile","profileEnd","timeStamp","context"]}],"no-debugger":"error","no-empty":"off","no-eval":"error","no-fallthrough":"error","no-invalid-this":"off","no-new-wrappers":"error","no-restricted-imports":["error",{name:"rxjs/Rx",message:"Please import directly from 'rxjs' instead"}],"@typescript-eslint/no-shadow":["error",{hoist:"all"}],"no-throw-literal":"error","no-undef-init":"error","no-underscore-dangle":"error","no-unsafe-finally":"error","no-unused-labels":"error","no-var":"error","object-shorthand":"error","one-var":["error","never"],"prefer-arrow/prefer-arrow-functions":"error","prefer-const":"error",radix:"error","use-isnan":"error","valid-typeof":"off"}},"ng-cli-compat--formatting-add-on":{plugins:["eslint-plugin-jsdoc"],rules:{"arrow-body-style":"error","arrow-parens":"off","comma-dangle":"off",curly:"error","eol-last":"error","jsdoc/check-alignment":"error","max-len":["error",{code:140}],"new-parens":"error","no-multiple-empty-lines":"off","no-trailing-spaces":"error","quote-props":["error","as-needed"],"space-before-function-paren":["error",{anonymous:"never",asyncArrow:"always",named:"never"}],"@typescript-eslint/member-delimiter-style":["error",{multiline:{delimiter:"semi",requireLast:!0},singleline:{delimiter:"semi",requireLast:!1}}],quotes:"off","@typescript-eslint/quotes":["error","single",{allowTemplateLiterals:!0}],"@typescript-eslint/semi":["error","always"],"@typescript-eslint/type-annotation-spacing":"error"}}},rules:{"contextual-decorator":o,"component-class-suffix":n,"component-max-inline-declarations":c,"component-selector":p,"contextual-lifecycle":u,"directive-class-suffix":d,"directive-selector":m,"no-attribute-decorator":g,"no-conflicting-lifecycle":h,"no-forward-ref":T,"no-host-metadata-property":A,"no-input-prefix":O,"no-input-rename":E,"no-inputs-metadata-property":C,"no-lifecycle-call":R,"no-output-native":U,"no-output-on-prefix":v,"no-output-rename":P,"no-outputs-metadata-property":b,"no-pipe-impure":N,"no-queries-metadata-property":_,"no-empty-lifecycle-method":L,[w]:j,"prefer-output-readonly":k,"relative-url-prefix":V,"sort-ngmodule-metadata-arrays":q,"use-component-selector":Y,"use-component-view-encapsulation":W,"use-injectable-provided-in":H,"use-lifecycle-interface":G,"use-pipe-transform-interface":K,"pipe-prefix":z}};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular-eslint/eslint-plugin",
3
- "version": "14.0.0-alpha.0",
3
+ "version": "14.0.0-alpha.2",
4
4
  "description": "ESLint plugin for Angular applications, following angular.io/styleguide",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -17,12 +17,12 @@
17
17
  "LICENSE"
18
18
  ],
19
19
  "dependencies": {
20
- "@angular-eslint/utils": "14.0.0-alpha.0",
21
- "@typescript-eslint/experimental-utils": "5.17.0"
20
+ "@angular-eslint/utils": "14.0.0-alpha.2",
21
+ "@typescript-eslint/experimental-utils": "5.27.1"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "eslint": "^7.0.0 || ^8.0.0",
25
25
  "typescript": "*"
26
26
  },
27
- "gitHead": "bb37c65bd1d8689848d98ae30c0a95ea3ce50675"
27
+ "gitHead": "67044dd79280a779a0d5614350f5fa0308399148"
28
28
  }