@ethang/eslint-config 21.4.0 → 21.4.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.
Files changed (62) hide show
  1. package/eslint.config.js +2 -26
  2. package/{dist/eslint.config.js.map → eslint.config.js.map} +1 -1
  3. package/package.json +1 -1
  4. package/build.ts +0 -34
  5. package/dist/eslint.config.js +0 -2
  6. package/dist/package.json +0 -68
  7. package/src/README.md +0 -100
  8. package/src/build/create-config-file.ts +0 -57
  9. package/src/build/create-config.ts +0 -96
  10. package/src/build/get-react-version.ts +0 -19
  11. package/src/build/list-utilities.ts +0 -124
  12. package/src/build/rule-list.ts +0 -284
  13. package/src/build/update-readme.ts +0 -195
  14. package/src/build/update-rules.ts +0 -124
  15. package/src/config.angular.js +0 -107
  16. package/src/config.astro.js +0 -68
  17. package/src/config.react.js +0 -117
  18. package/src/config.solid.js +0 -34
  19. package/src/constants.js +0 -16
  20. package/src/eslint.config.js +0 -1051
  21. package/src/setup/a11y.ts +0 -19
  22. package/src/setup/angular.ts +0 -40
  23. package/src/setup/astro.ts +0 -14
  24. package/src/setup/barrel.ts +0 -17
  25. package/src/setup/compat.ts +0 -13
  26. package/src/setup/cspell.ts +0 -83
  27. package/src/setup/css.ts +0 -12
  28. package/src/setup/depend.ts +0 -14
  29. package/src/setup/eslint.ts +0 -246
  30. package/src/setup/gen-rules.ts +0 -75
  31. package/src/setup/json.ts +0 -17
  32. package/src/setup/lodash.ts +0 -58
  33. package/src/setup/markdown.ts +0 -16
  34. package/src/setup/n.ts +0 -86
  35. package/src/setup/perfectionist.ts +0 -68
  36. package/src/setup/react.ts +0 -82
  37. package/src/setup/solid.ts +0 -21
  38. package/src/setup/sonar.ts +0 -39
  39. package/src/setup/tailwind.ts +0 -10
  40. package/src/setup/tanstack-query.ts +0 -9
  41. package/src/setup/tanstack-router.ts +0 -9
  42. package/src/setup/typescript-eslint.ts +0 -118
  43. package/src/setup/unicorn.ts +0 -38
  44. package/tsconfig.json +0 -5
  45. /package/{dist/README.md → README.md} +0 -0
  46. /package/{dist/chunk-WK3YS7OG.js → chunk-WK3YS7OG.js} +0 -0
  47. /package/{dist/chunk-WK3YS7OG.js.map → chunk-WK3YS7OG.js.map} +0 -0
  48. /package/{dist/config.angular.d.ts → config.angular.d.ts} +0 -0
  49. /package/{dist/config.angular.js → config.angular.js} +0 -0
  50. /package/{dist/config.angular.js.map → config.angular.js.map} +0 -0
  51. /package/{dist/config.astro.d.ts → config.astro.d.ts} +0 -0
  52. /package/{dist/config.astro.js → config.astro.js} +0 -0
  53. /package/{dist/config.astro.js.map → config.astro.js.map} +0 -0
  54. /package/{dist/config.react.d.ts → config.react.d.ts} +0 -0
  55. /package/{dist/config.react.js → config.react.js} +0 -0
  56. /package/{dist/config.react.js.map → config.react.js.map} +0 -0
  57. /package/{dist/config.solid.d.ts → config.solid.d.ts} +0 -0
  58. /package/{dist/config.solid.js → config.solid.js} +0 -0
  59. /package/{dist/config.solid.js.map → config.solid.js.map} +0 -0
  60. /package/{dist/constants.js → constants.js} +0 -0
  61. /package/{dist/constants.js.map → constants.js.map} +0 -0
  62. /package/{dist/eslint.config.d.ts → eslint.config.d.ts} +0 -0
@@ -1,284 +0,0 @@
1
- import { a11yRules } from "../setup/a11y.ts";
2
- import { angularTemplateRules, angularTsRules } from "../setup/angular.js";
3
- import { astroRules } from "../setup/astro.ts";
4
- import { barrelRules } from "../setup/barrel.ts";
5
- import { compatRules } from "../setup/compat.ts";
6
- import { cspellRules } from "../setup/cspell.js";
7
- import { cssRules } from "../setup/css.js";
8
- import { dependRules } from "../setup/depend.ts";
9
- import { eslintRules } from "../setup/eslint.ts";
10
- import { jsonRules } from "../setup/json.ts";
11
- import { lodashRules } from "../setup/lodash.ts";
12
- import { markdownRules } from "../setup/markdown.ts";
13
- import { perfectionistRules } from "../setup/perfectionist.ts";
14
- import {
15
- reactCompilerRules,
16
- reactHookRules,
17
- reactRules,
18
- } from "../setup/react.ts";
19
- import { solidRules } from "../setup/solid.ts";
20
- import { sonarRules } from "../setup/sonar.ts";
21
- import { tailwindRules } from "../setup/tailwind.js";
22
- import { tanstackQueryRules } from "../setup/tanstack-query.ts";
23
- import { tanstackRouterRules } from "../setup/tanstack-router.js";
24
- import { typescriptRules } from "../setup/typescript-eslint.ts";
25
- import { unicornRules } from "../setup/unicorn.ts";
26
-
27
- const eslintJson = "@eslint/json";
28
- const eslintJsonGithub = "https://github.com/eslint/json";
29
-
30
- export const ruleList = [
31
- {
32
- importString: 'import depend from "eslint-plugin-depend";',
33
- list: dependRules,
34
- name: "eslint-plugin-depend",
35
- order: 0,
36
- pluginName: "depend",
37
- pluginValue: "depend",
38
- type: "core",
39
- url: "https://github.com/es-tooling/eslint-plugin-depend/tree/main",
40
- },
41
- {
42
- importString: 'import barrel from "eslint-plugin-barrel-files";',
43
- list: barrelRules,
44
- name: "eslint-plugin-barrel-files",
45
- order: 1,
46
- pluginName: "barrel",
47
- pluginValue: "barrel",
48
- type: "core",
49
- url: "https://github.com/thepassle/eslint-plugin-barrel-files",
50
- },
51
- {
52
- importString: 'import compat from "eslint-plugin-compat";',
53
- list: compatRules,
54
- name: "eslint-plugin-compat",
55
- order: 2,
56
- pluginName: "compat",
57
- pluginValue: "compat",
58
- type: "core",
59
- url: "https://github.com/amilajack/eslint-plugin-compat",
60
- },
61
- {
62
- importString: undefined,
63
- list: eslintRules,
64
- name: "@eslint/js",
65
- order: 3,
66
- pluginName: undefined,
67
- pluginValue: undefined,
68
- type: "core",
69
- url: "https://github.com/eslint/eslint/tree/main/packages/js",
70
- },
71
- {
72
- importString: 'import tseslint from "typescript-eslint";',
73
- list: typescriptRules,
74
- name: "@typescript/eslint",
75
- order: 4,
76
- pluginName: "@typescript-eslint",
77
- pluginValue: "tseslint.plugin",
78
- type: "core",
79
- url: "https://github.com/typescript-eslint/typescript-eslint",
80
- },
81
- {
82
- importString: 'import unicorn from "eslint-plugin-unicorn";',
83
- list: unicornRules,
84
- name: "sindresorhus/eslint-plugin-unicorn",
85
- order: 5,
86
- pluginName: "unicorn",
87
- pluginValue: "unicorn",
88
- type: "core",
89
- url: "https://github.com/sindresorhus/eslint-plugin-unicorn",
90
- },
91
- {
92
- importString: 'import lodashConfig from "eslint-plugin-lodash";',
93
- list: lodashRules,
94
- name: "eslint-plugin-lodash",
95
- order: 6,
96
- pluginName: "lodash",
97
- pluginValue: "lodashConfig",
98
- type: "core",
99
- url: "https://github.com/wix-incubator/eslint-plugin-lodash",
100
- },
101
- {
102
- importString: 'import sonar from "eslint-plugin-sonarjs";',
103
- list: sonarRules,
104
- name: "eslint-plugin-sonarjs",
105
- order: 7,
106
- pluginName: "sonar",
107
- pluginValue: "fixupPluginRules(sonar)", // TODO remove with v9 compat
108
- type: "core",
109
- url: "https://github.com/SonarSource/SonarJS/blob/master/packages/jsts/src/rules/README.md",
110
- },
111
- {
112
- importString: 'import tailwind from "eslint-plugin-tailwindcss";',
113
- list: tailwindRules,
114
- name: "eslint-plugin-tailwindcss",
115
- order: 8,
116
- pluginName: "tailwind",
117
- pluginValue: "tailwind",
118
- type: "core",
119
- url: "https://github.com/francoismassart/eslint-plugin-tailwindcss",
120
- },
121
- {
122
- importString: 'import perfectionist from "eslint-plugin-perfectionist";',
123
- list: perfectionistRules,
124
- name: "eslint-plugin-perfectionist",
125
- order: 9,
126
- pluginName: "perfectionist",
127
- pluginValue: "perfectionist",
128
- type: "core",
129
- url: "https://github.com/azat-io/eslint-plugin-perfectionist",
130
- },
131
- {
132
- importString: 'import tanstackQuery from "@tanstack/eslint-plugin-query";',
133
- list: tanstackQueryRules,
134
- name: "@tanstack/eslint-plugin-query",
135
- order: 10,
136
- pluginName: "@tanstack/query",
137
- pluginValue: "tanstackQuery",
138
- type: "core",
139
- url: "https://tanstack.com/query/latest/docs/eslint/eslint-plugin-query",
140
- },
141
- {
142
- importString:
143
- 'import tanstackRouter from "@tanstack/eslint-plugin-router";',
144
- list: tanstackRouterRules,
145
- name: "@tanstack/eslint-plugin-router",
146
- order: 11,
147
- pluginName: "@tanstack/router",
148
- pluginValue: "tanstackRouter",
149
- type: "core",
150
- url: "https://tanstack.com/router/latest/docs/eslint/eslint-plugin-router",
151
- },
152
- {
153
- importString: 'import a11y from "eslint-plugin-jsx-a11y";',
154
- list: a11yRules,
155
- name: "jsx-a11y",
156
- order: 12,
157
- pluginName: "a11y",
158
- pluginValue: "a11y",
159
- type: "core",
160
- url: "https://github.com/jsx-eslint/eslint-plugin-jsx-a11y",
161
- },
162
- {
163
- importString: 'import cspell from "@cspell/eslint-plugin";',
164
- list: cspellRules,
165
- name: "@cspell/eslint-plugin",
166
- order: 13,
167
- pluginName: "cspell",
168
- pluginValue: "cspell",
169
- type: "core",
170
- url: "https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell-eslint-plugin",
171
- },
172
- {
173
- importString: "import css from '@eslint/css';",
174
- list: cssRules,
175
- name: "@eslint/css",
176
- order: 0,
177
- pluginName: "css",
178
- pluginValue: "css",
179
- type: "css",
180
- url: "https://github.com/eslint/css",
181
- },
182
- {
183
- importString: 'import markdown from "@eslint/markdown";',
184
- list: markdownRules,
185
- name: "@eslint/markdown",
186
- order: 0,
187
- pluginName: "markdown",
188
- pluginValue: "markdown",
189
- type: "markdown",
190
- url: "https://github.com/eslint/markdown",
191
- },
192
- {
193
- importString: `import json from "${eslintJson}";`,
194
- list: jsonRules,
195
- name: eslintJson,
196
- order: 0,
197
- pluginName: "json",
198
- pluginValue: "json",
199
- type: "json",
200
- url: eslintJsonGithub,
201
- },
202
- {
203
- list: jsonRules,
204
- name: eslintJson,
205
- order: 0,
206
- pluginName: "json",
207
- pluginValue: "json",
208
- type: "jsonc",
209
- url: eslintJsonGithub,
210
- },
211
- {
212
- list: jsonRules,
213
- name: eslintJson,
214
- order: 0,
215
- pluginName: "json",
216
- pluginValue: "json",
217
- type: "json5",
218
- url: eslintJsonGithub,
219
- },
220
- {
221
- importString: 'import astro from "eslint-plugin-astro";',
222
- list: astroRules,
223
- name: "eslint-plugin-astro",
224
- pluginName: "astro",
225
- pluginValue: "astro",
226
- type: "astro",
227
- url: "https://github.com/ota-meshi/eslint-plugin-astro",
228
- },
229
- {
230
- importString: 'import react from "@eslint-react/eslint-plugin";',
231
- list: reactRules,
232
- name: "@eslint-react/eslint-plugin",
233
- pluginName: "react",
234
- pluginValue: "react",
235
- type: "react",
236
- url: "https://eslint-react.xyz/",
237
- },
238
- {
239
- importString: 'import reactHooks from "eslint-plugin-react-hooks";',
240
- list: reactHookRules,
241
- name: "eslint-plugin-react-hooks",
242
- pluginName: "react-hooks",
243
- pluginValue: "reactHooks",
244
- type: "react",
245
- url: "https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks",
246
- },
247
- {
248
- importString: 'import reactCompiler from "eslint-plugin-react-compiler";',
249
- list: reactCompilerRules,
250
- name: "eslint-plugin-react-compiler",
251
- pluginName: "react-compiler",
252
- pluginValue: "reactCompiler",
253
- type: "react",
254
- url: "https://github.com/facebook/react/tree/main/compiler/packages/eslint-plugin-react-compiler",
255
- },
256
- {
257
- importString: 'import solid from "eslint-plugin-solid";',
258
- list: solidRules,
259
- name: "eslint-plugin-solid",
260
- pluginName: "solid",
261
- pluginValue: "solid",
262
- type: "solid",
263
- url: "https://github.com/solidjs-community/eslint-plugin-solid",
264
- },
265
- {
266
- importString: 'import angularTS from "@angular-eslint/eslint-plugin";',
267
- list: angularTsRules,
268
- name: "@angular-eslint/eslint-plugin",
269
- pluginName: "@angular-eslint",
270
- pluginValue: "angularTS",
271
- type: "angular",
272
- url: "https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/README.md",
273
- },
274
- {
275
- importString:
276
- 'import angularTemplate from "@angular-eslint/eslint-plugin-template";',
277
- list: angularTemplateRules,
278
- name: "@angular-eslint/eslint-plugin-template",
279
- pluginName: "@angular-eslint/template",
280
- pluginValue: "angularTemplate",
281
- type: "angular:template",
282
- url: "https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/README.md",
283
- },
284
- ];
@@ -1,195 +0,0 @@
1
- import { MarkdownGenerator } from "@ethang/markdown-generator/markdown-generator.js";
2
- import filter from "lodash/filter.js";
3
- import flow from "lodash/flow.js";
4
- import isArray from "lodash/isArray.js";
5
- import map from "lodash/map.js";
6
- import values from "lodash/values.js";
7
- import { writeFileSync } from "node:fs";
8
- import path from "node:path";
9
-
10
- import type { genRules } from "../setup/gen-rules.ts";
11
-
12
- import { getList } from "./list-utilities.ts";
13
-
14
- const getRuleCount = (rules: ReturnType<typeof genRules>) => {
15
- let count = 0;
16
- for (const value of values(rules)) {
17
- if ("error" === value || (isArray(value) && "error" === value[0])) {
18
- count += 1;
19
- }
20
- }
21
-
22
- return count;
23
- };
24
-
25
- const getImports = flow(
26
- (rules: ReturnType<typeof getList>) => {
27
- return filter(rules, (rule) => {
28
- return 0 < getRuleCount(rule.list);
29
- });
30
- },
31
- (filteredRules) => {
32
- return map(filteredRules, (rule) => {
33
- return `${getRuleCount(rule.list)} rules from [${rule.name}](${rule.url})`;
34
- });
35
- },
36
- );
37
-
38
- export const updateReadme = () => {
39
- const md = new MarkdownGenerator();
40
- md.header(1, "Relentless. Unapologetic.", 2);
41
- md.link("View Config", "https://eslint-config-ethang.pages.dev/rules", 2);
42
- md.alert("CAUTION", "Prettier is already included for styling!", 2);
43
-
44
- const coreRules = map(
45
- [
46
- ...getList("core"),
47
- ...getList("json"),
48
- ...getList("css"),
49
- ...getList("markdown"),
50
- ],
51
- (rules) => {
52
- return {
53
- ...rules,
54
- count: 0,
55
- };
56
- },
57
- );
58
-
59
- let total = 0;
60
- for (const list of coreRules) {
61
- const count = getRuleCount(list.list);
62
- total += count;
63
- list.count = count;
64
- }
65
- coreRules.sort((a, b) => {
66
- return b.count - a.count;
67
- });
68
-
69
- const ruleDocumentation = [`${total} errored rules.`];
70
- for (const list of coreRules) {
71
- if (0 < list.count) {
72
- ruleDocumentation.push(
73
- `${list.count} ${
74
- 1 >= list.count ? "rule" : "rules"
75
- } from [${list.name}](${list.url})`,
76
- );
77
- }
78
- }
79
-
80
- const astroRules = getList("astro");
81
- const reactRules = getList("react");
82
- const solidRules = getList("solid");
83
- const angularRules = getList("angular");
84
- const angularTemplateRules = getList("angular:template");
85
-
86
- let astroCount = 0;
87
- for (const astroRule of astroRules) {
88
- astroCount += getRuleCount(astroRule.list);
89
- }
90
-
91
- let reactCount = 0;
92
- for (const reactRule of reactRules) {
93
- reactCount += getRuleCount(reactRule.list);
94
- }
95
-
96
- let solidCount = 0;
97
- for (const solidRule of solidRules) {
98
- solidCount += getRuleCount(solidRule.list);
99
- }
100
-
101
- let angularCount = 0;
102
- for (const angularRule of [...angularRules, ...angularTemplateRules]) {
103
- angularCount += getRuleCount(angularRule.list);
104
- }
105
-
106
- md.unorderedList(ruleDocumentation);
107
- md.newLine();
108
- md.header(1, "Add Even More!", 2);
109
- md.unorderedList([
110
- `${angularCount} rules for **Angular**`,
111
- [
112
- '`import angularConfig from "@ethang/eslint-config/config.angular.js";`',
113
- getImports(angularRules),
114
- getImports(angularTemplateRules),
115
- ],
116
- `${astroCount} rules for **Astro**`,
117
- [
118
- '`import astroConfig from "@ethang/eslint-config/config.astro.js";`',
119
- getImports(astroRules),
120
- ],
121
- `${reactCount} rules for **React**`,
122
- [
123
- '`import reactConfig from "@ethang/eslint-config/config.react.js";`',
124
- getImports(reactRules),
125
- ],
126
- `${solidCount} rules for **Solid**`,
127
- [
128
- '`import solidConfig from "@ethang/eslint-config/config.solid.js";`',
129
- getImports(solidRules),
130
- ],
131
- ]);
132
- md.newLine();
133
- md.header(1, "Install", 2);
134
- md.inlineCode("pnpm i -D eslint typescript-eslint @ethang/eslint-config", 2);
135
- md.bold("Requires TypesScript and tsconfig.json at root directory.", 2);
136
- md.header(1, "Config", 2);
137
- md.text("In **eslint.config.js**", 2);
138
- md.codeBlock(
139
- `import config from "@ethang/eslint-config/eslint.config.js";
140
- import tseslint from "typescript-eslint";
141
- import astroConfig from "@ethang/eslint-config/config.astro.js"; // OPTIONAL
142
- import reactConfig from "@ethang/eslint-config/config.react.js"; // OPTIONAL
143
-
144
- export default tseslint.config(
145
- {
146
- ignores: [], // Ignored files apply to all following configs
147
- },
148
- ...config,
149
- ...astroConfig,
150
- ...reactConfig,
151
- {
152
- languageOptions: {
153
- parserOptions: {
154
- project: true,
155
- tsconfigRootDir: import.meta.dirname,
156
- },
157
- },
158
- rules: {
159
- // Override rules from above configs
160
- },
161
- }
162
- );`,
163
- "js",
164
- 2,
165
- );
166
- md.bold("Scripts", 2);
167
- md.codeBlock(
168
- `"scripts": {
169
- "lint": "eslint",
170
- "lint:fix": "eslint . --fix",
171
- }`,
172
- "json",
173
- 2,
174
- );
175
- md.bold("Browserslist", 2);
176
- md.text(
177
- "This config will also lint for browserslist features. Make sure to set this in package.json. [More info.](https://github.com/browserslist/browserslist)",
178
- 2,
179
- );
180
- md.codeBlock(
181
- `"browserslist": [
182
- "defaults and fully supports es6-module",
183
- "maintained node versions"
184
- ]`,
185
- "json",
186
- );
187
-
188
- writeFileSync(
189
- path.join(import.meta.dirname, "../README.md"),
190
- md.render(),
191
- "utf8",
192
- );
193
- };
194
-
195
- updateReadme();
@@ -1,124 +0,0 @@
1
- import type { ConfigOptions } from "./create-config.ts";
2
-
3
- import { createConfigFile } from "./create-config-file.ts";
4
-
5
- export type ConfigFile = {
6
- importString?: string;
7
- label?: string;
8
- name: string;
9
- options?: ConfigOptions;
10
- };
11
-
12
- const importTsEslint = 'import tseslint from "typescript-eslint";';
13
-
14
- export const coreFile = [
15
- {
16
- importString: 'import config from "@ethang/eslint-config/eslint.config.js',
17
- label: "Core",
18
- name: "core",
19
- options: {
20
- extraImports: [
21
- 'import { fixupPluginRules } from "@eslint/compat";', // TODO remove with v9 compat
22
- 'import eslintConfigPrettier from "eslint-config-prettier";',
23
- 'import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";',
24
- ],
25
- includeIgnores: true,
26
- includeLanguageOptions: true,
27
- includeReactVersion: true,
28
- },
29
- },
30
- {
31
- name: "markdown",
32
- },
33
- {
34
- name: "css",
35
- },
36
- {
37
- name: "json",
38
- },
39
- {
40
- name: "jsonc",
41
- },
42
- {
43
- name: "json5",
44
- },
45
- ];
46
-
47
- const astroFile = [
48
- {
49
- importString:
50
- 'import astroConfig from "@ethang/eslint-config/config.astro.ts',
51
- label: "Astro",
52
- name: "astro",
53
- options: {
54
- extraImports: [importTsEslint],
55
- includeIgnores: true,
56
- includeLanguageOptions: true,
57
- },
58
- },
59
- ];
60
-
61
- const reactFile = [
62
- {
63
- importString:
64
- 'import reactConfig from "@ethang/eslint-config/config.react.ts',
65
- label: "React",
66
- name: "react",
67
- options: {
68
- extraImports: [importTsEslint],
69
- includeIgnores: true,
70
- includeLanguageOptions: true,
71
- includeReactVersion: true,
72
- },
73
- },
74
- ];
75
-
76
- const solidFile = [
77
- {
78
- importString:
79
- 'import solidConfig from "@ethang/eslint-config/config.solid.ts',
80
- label: "Solid",
81
- name: "solid",
82
- options: {
83
- extraImports: [importTsEslint],
84
- includeIgnores: true,
85
- includeLanguageOptions: true,
86
- },
87
- },
88
- ];
89
-
90
- const angularFile = [
91
- {
92
- importString:
93
- 'import angularConfig from "@ethang/eslint-config/config.angular.ts',
94
- label: "Angular",
95
- name: "angular",
96
- options: {
97
- extraImports: [importTsEslint, 'import angular from "angular-eslint";'],
98
- globalIgnores: ["**/*.spec.ts", "src/main.server.ts"],
99
- includeIgnores: true,
100
- includeLanguageOptions: true,
101
- processor: "angular.processInlineTemplates",
102
- },
103
- },
104
- {
105
- name: "angular:template",
106
- options: {
107
- extraImports: ['import { angularLanguageOptions } from "./constants.js"'],
108
- includeAngularLanguageOptions: true,
109
- includeLanguageOptions: false,
110
- },
111
- },
112
- ];
113
-
114
- export const updateRules = async () => {
115
- await Promise.all([
116
- createConfigFile(coreFile, "eslint.config.js"),
117
- createConfigFile(astroFile, "config.astro.js"),
118
- createConfigFile(reactFile, "config.react.js"),
119
- createConfigFile(solidFile, "config.solid.js"),
120
- createConfigFile(angularFile, "config.angular.js"),
121
- ]);
122
- };
123
-
124
- await updateRules();