@cuiqg/eslint-config 2.8.15 → 2.8.16

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 (2) hide show
  1. package/dist/index.mjs +76 -355
  2. package/package.json +3 -4
package/dist/index.mjs CHANGED
@@ -93,213 +93,30 @@ async function ignores() {
93
93
 
94
94
  //#endregion
95
95
  //#region src/configs/javascript.js
96
- async function javascript(options = {}) {
97
- const { isInEditor: isInEditor$1 = false } = options;
98
- const pluginUnusedImports = await interopDefault(import("eslint-plugin-unused-imports"));
96
+ async function javascript() {
97
+ const files = [GLOB_JS];
98
+ const [pluginJS] = await Promise.all([interopDefault(import("@eslint/js"))]);
99
99
  return [{
100
100
  name: "cuiqg/javascript",
101
- plugins: { "unused-imports": pluginUnusedImports },
101
+ files,
102
+ plugins: { js: pluginJS },
102
103
  languageOptions: {
103
104
  globals: {
104
105
  ...globals.browser,
105
- ...globals.es2025,
106
+ ...globals.es2026,
106
107
  ...globals.node
107
108
  },
108
109
  parserOptions: {
110
+ ecmaFeatures: { jsx: true },
109
111
  ecmaVersion: "latest",
110
112
  sourceType: "module"
111
- }
113
+ },
114
+ sourceType: "module"
112
115
  },
113
116
  linterOptions: { reportUnusedDisableDirectives: true },
114
117
  rules: {
115
- "accessor-pairs": ["error", {
116
- enforceForClassMembers: true,
117
- setWithoutGet: true
118
- }],
119
- "array-callback-return": "error",
120
- "block-scoped-var": "error",
121
- "constructor-super": "error",
122
- "default-case-last": "error",
123
- "dot-notation": ["error", { allowKeywords: true }],
124
- "eqeqeq": ["error", "smart"],
125
- "new-cap": ["error", {
126
- capIsNew: false,
127
- newIsCap: true,
128
- properties: true
129
- }],
130
- "no-alert": "error",
131
- "no-array-constructor": "error",
132
- "no-async-promise-executor": "error",
133
- "no-caller": "error",
134
- "no-case-declarations": "error",
135
- "no-class-assign": "error",
136
- "no-compare-neg-zero": "error",
137
- "no-cond-assign": ["error", "always"],
138
- "no-console": ["error", { allow: ["warn", "error"] }],
139
- "no-const-assign": "error",
140
- "no-control-regex": "error",
141
- "no-debugger": "error",
142
- "no-delete-var": "error",
143
- "no-dupe-args": "error",
144
- "no-dupe-class-members": "error",
145
- "no-dupe-keys": "error",
146
- "no-duplicate-case": "error",
147
- "no-empty": ["error", { allowEmptyCatch: true }],
148
- "no-empty-character-class": "error",
149
- "no-empty-pattern": "error",
150
- "no-eval": "error",
151
- "no-ex-assign": "error",
152
- "no-extend-native": "error",
153
- "no-extra-bind": "error",
154
- "no-extra-boolean-cast": "error",
155
- "no-fallthrough": "error",
156
- "no-func-assign": "error",
157
- "no-global-assign": "error",
158
- "no-implied-eval": "error",
159
- "no-import-assign": "error",
160
- "no-invalid-regexp": "error",
161
- "no-irregular-whitespace": "error",
162
- "no-iterator": "error",
163
- "no-labels": ["error", {
164
- allowLoop: false,
165
- allowSwitch: false
166
- }],
167
- "no-lone-blocks": "error",
168
- "no-loss-of-precision": "error",
169
- "no-misleading-character-class": "error",
170
- "no-multi-str": "error",
171
- "no-new": "error",
172
- "no-new-func": "error",
173
- "no-new-native-nonconstructor": "error",
174
- "no-new-wrappers": "error",
175
- "no-obj-calls": "error",
176
- "no-octal": "error",
177
- "no-octal-escape": "error",
178
- "no-proto": "error",
179
- "no-prototype-builtins": "error",
180
- "no-redeclare": ["error", { builtinGlobals: false }],
181
- "no-regex-spaces": "error",
182
- "no-restricted-globals": [
183
- "error",
184
- {
185
- message: "Use `globalThis` instead.",
186
- name: "global"
187
- },
188
- {
189
- message: "Use `globalThis` instead.",
190
- name: "self"
191
- }
192
- ],
193
- "no-restricted-properties": [
194
- "error",
195
- {
196
- message: "Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.",
197
- property: "__proto__"
198
- },
199
- {
200
- message: "Use `Object.defineProperty` instead.",
201
- property: "__defineGetter__"
202
- },
203
- {
204
- message: "Use `Object.defineProperty` instead.",
205
- property: "__defineSetter__"
206
- },
207
- {
208
- message: "Use `Object.getOwnPropertyDescriptor` instead.",
209
- property: "__lookupGetter__"
210
- },
211
- {
212
- message: "Use `Object.getOwnPropertyDescriptor` instead.",
213
- property: "__lookupSetter__"
214
- }
215
- ],
216
- "no-restricted-syntax": [
217
- "error",
218
- "TSEnumDeclaration[const=true]",
219
- "TSExportAssignment"
220
- ],
221
- "no-self-assign": ["error", { props: true }],
222
- "no-self-compare": "error",
223
- "no-sequences": "error",
224
- "no-shadow-restricted-names": "error",
225
- "no-sparse-arrays": "error",
226
- "no-template-curly-in-string": "error",
227
- "no-this-before-super": "error",
228
- "no-throw-literal": "error",
229
- "no-undef": "error",
230
- "no-undef-init": "error",
231
- "no-unexpected-multiline": "error",
232
- "no-unmodified-loop-condition": "error",
233
- "no-unneeded-ternary": ["error", { defaultAssignment: false }],
234
- "no-unreachable": "error",
235
- "no-unreachable-loop": "error",
236
- "no-unsafe-finally": "error",
237
- "no-unsafe-negation": "error",
238
- "no-unused-expressions": ["error", {
239
- allowShortCircuit: true,
240
- allowTaggedTemplates: true,
241
- allowTernary: true
242
- }],
243
- "no-unused-vars": ["error", {
244
- args: "none",
245
- caughtErrors: "none",
246
- ignoreRestSiblings: true,
247
- vars: "all"
248
- }],
249
- "no-use-before-define": ["error", {
250
- classes: false,
251
- functions: false,
252
- variables: true
253
- }],
254
- "no-useless-backreference": "error",
255
- "no-useless-call": "error",
256
- "no-useless-catch": "error",
257
- "no-useless-computed-key": "error",
258
- "no-useless-constructor": "error",
259
- "no-useless-rename": "error",
260
- "no-useless-return": "error",
261
- "no-var": "error",
262
- "no-with": "error",
263
- "object-shorthand": [
264
- "error",
265
- "always",
266
- {
267
- avoidQuotes: true,
268
- ignoreConstructors: false
269
- }
270
- ],
271
- "one-var": ["error", { initialized: "never" }],
272
- "prefer-arrow-callback": ["error", {
273
- allowNamedFunctions: false,
274
- allowUnboundThis: true
275
- }],
276
- "prefer-const": [isInEditor$1 ? "warn" : "error", {
277
- destructuring: "all",
278
- ignoreReadBeforeAssign: true
279
- }],
280
- "prefer-exponentiation-operator": "error",
281
- "prefer-promise-reject-errors": "error",
282
- "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }],
283
- "prefer-rest-params": "error",
284
- "prefer-spread": "error",
285
- "prefer-template": "error",
286
- "symbol-description": "error",
287
- "unicode-bom": ["error", "never"],
288
- "unused-imports/no-unused-imports": isInEditor$1 ? "warn" : "error",
289
- "unused-imports/no-unused-vars": ["error", {
290
- args: "after-used",
291
- argsIgnorePattern: "^_",
292
- ignoreRestSiblings: true,
293
- vars: "all",
294
- varsIgnorePattern: "^_"
295
- }],
296
- "use-isnan": ["error", {
297
- enforceForIndexOf: true,
298
- enforceForSwitchCase: true
299
- }],
300
- "valid-typeof": ["error", { requireStringLiterals: true }],
301
- "vars-on-top": "error",
302
- "yoda": ["error", "never"]
118
+ ...pluginJS.configs.recommended.rules,
119
+ "no-unused-vars": "off"
303
120
  }
304
121
  }];
305
122
  }
@@ -307,9 +124,10 @@ async function javascript(options = {}) {
307
124
  //#endregion
308
125
  //#region src/configs/jsdoc.js
309
126
  async function jsdoc() {
127
+ const [pluginJsdoc] = await Promise.all([interopDefault(import("eslint-plugin-jsdoc"))]);
310
128
  return [{
311
129
  name: "cuiqg/jsdoc",
312
- plugins: { jsdoc: await interopDefault(import("eslint-plugin-jsdoc")) },
130
+ plugins: { jsdoc: pluginJsdoc },
313
131
  rules: {
314
132
  "jsdoc/check-access": "warn",
315
133
  "jsdoc/check-param-names": "warn",
@@ -474,154 +292,49 @@ async function vue(options = {}) {
474
292
  },
475
293
  processor: pluginVue.processors[".vue"],
476
294
  rules: {
477
- "vue/attribute-hyphenation": ["error", "always"],
295
+ ...pluginVue.configs["flat/recommended"].map((c) => c.rules).reduce((acc, c) => ({
296
+ ...acc,
297
+ ...c
298
+ }), {}),
478
299
  "vue/block-order": ["error", { order: [
479
300
  "script",
480
301
  "template",
481
302
  "style"
482
303
  ] }],
483
- "vue/comment-directive": "error",
484
- "vue/component-api-style": "error",
485
- "vue/component-definition-name-casing": ["error", "kebab-case"],
486
- "vue/component-name-in-template-casing": ["error", "kebab-case"],
487
- "vue/component-options-name-casing": ["error", "kebab-case"],
488
- "vue/custom-event-name-casing": ["error", "kebab-case"],
489
- "vue/define-emits-declaration": "error",
490
- "vue/define-props-declaration": "error",
491
- "vue/define-props-destructuring": ["error", { destructure: "always" }],
492
- "vue/enforce-style-attribute": ["error", { allow: ["scoped", "plain"] }],
493
- "vue/max-attributes-per-line": ["error", {
494
- singleline: { max: 1 },
495
- multiline: { max: 1 }
304
+ "vue/custom-event-name-casing": ["error", "camelCase"],
305
+ "vue/eqeqeq": ["error", "smart"],
306
+ "vue/html-self-closing": ["error", {
307
+ html: {
308
+ component: "always",
309
+ normal: "always",
310
+ void: "any"
311
+ },
312
+ math: "always",
313
+ svg: "always"
496
314
  }],
497
- "vue/html-button-has-type": "error",
498
- "vue/html-end-tags": "error",
499
- "vue/jsx-uses-vars": "error",
500
- "vue/no-async-in-computed-properties": "error",
501
- "vue/no-child-content": "error",
502
- "vue/no-computed-properties-in-data": "error",
503
- "vue/no-deprecated-data-object-declaration": "error",
504
- "vue/no-deprecated-delete-set": "error",
505
- "vue/no-deprecated-destroyed-lifecycle": "error",
506
- "vue/no-deprecated-dollar-listeners-api": "error",
507
- "vue/no-deprecated-dollar-scopedslots-api": "error",
508
- "vue/no-deprecated-events-api": "error",
509
- "vue/no-deprecated-filter": "error",
510
- "vue/no-deprecated-functional-template": "error",
511
- "vue/no-deprecated-html-element-is": "error",
512
- "vue/no-deprecated-inline-template": "error",
513
- "vue/no-deprecated-model-definition": "error",
514
- "vue/no-deprecated-props-default-this": "error",
515
- "vue/no-deprecated-router-link-tag-prop": "error",
516
- "vue/no-deprecated-scope-attribute": "error",
517
- "vue/no-deprecated-slot-attribute": "error",
518
- "vue/no-deprecated-slot-scope-attribute": "error",
519
- "vue/no-deprecated-v-bind-sync": "error",
520
- "vue/no-deprecated-v-is": "error",
521
- "vue/no-deprecated-v-on-native-modifier": "error",
522
- "vue/no-deprecated-v-on-number-modifiers": "error",
523
- "vue/no-deprecated-vue-config-keycodes": "error",
524
- "vue/no-dupe-keys": "error",
525
- "vue/no-dupe-v-else-if": "error",
526
- "vue/no-duplicate-attr-inheritance": "error",
527
- "vue/no-duplicate-attributes": "error",
528
- "vue/no-duplicate-class-names": "error",
529
- "vue/no-empty-component-block": "error",
530
- "vue/no-export-in-script-setup": "error",
531
- "vue/no-expose-after-await": "error",
532
- "vue/no-lifecycle-after-await": "error",
533
- "vue/no-lone-template": "error",
534
- "vue/no-multiple-objects-in-class": "error",
535
- "vue/no-multiple-slot-args": "error",
536
- "vue/no-mutating-props": "error",
537
- "vue/no-negated-condition": "error",
538
- "vue/no-negated-v-if-condition": "error",
539
- "vue/no-parsing-error": "error",
540
- "vue/no-potential-component-option-typo": "error",
541
- "vue/no-ref-as-operand": "error",
542
- "vue/no-ref-object-reactivity-loss": "error",
543
- "vue/no-required-prop-with-default": "error",
544
- "vue/no-reserved-component-names": "error",
545
- "vue/no-reserved-keys": "error",
546
- "vue/no-reserved-props": "error",
547
- "vue/no-setup-props-reactivity-loss": "error",
548
- "vue/no-shared-component-data": "error",
549
- "vue/no-side-effects-in-computed-properties": "error",
550
- "vue/no-template-key": "error",
551
- "vue/no-template-shadow": "error",
552
- "vue/no-template-target-blank": "error",
553
- "vue/no-textarea-mustache": "error",
554
- "vue/no-this-in-before-route-enter": "error",
555
- "vue/no-undef-components": "error",
556
- "vue/no-undef-properties": "error",
557
- "vue/no-unused-components": "error",
558
- "vue/no-unused-emit-declarations": "error",
559
- "vue/no-unused-vars": ["error", { ignorePattern: "^_" }],
560
- "vue/no-use-computed-property-like-method": "error",
561
- "vue/no-use-v-else-with-v-for": "error",
562
- "vue/no-use-v-if-with-v-for": "error",
563
- "vue/no-useless-mustaches": "error",
564
- "vue/no-useless-template-attributes": "error",
315
+ "vue/max-attributes-per-line": "off",
316
+ "vue/multi-word-component-names": "off",
317
+ "vue/no-constant-condition": "warn",
318
+ "vue/no-empty-pattern": "error",
319
+ "vue/no-loss-of-precision": "error",
320
+ "vue/no-ref-as-operand": "off",
321
+ "vue/no-unused-refs": "error",
565
322
  "vue/no-useless-v-bind": "error",
566
- "vue/no-v-for-template-key-on-child": "error",
567
- "vue/no-v-html": "error",
568
- "vue/no-v-text-v-html-on-component": "error",
569
- "vue/no-watch-after-await": "error",
570
- "vue/prefer-define-options": "error",
571
- "vue/prefer-import-from-vue": "error",
572
- "vue/prefer-separate-static-class": "error",
573
- "vue/prefer-true-attribute-shorthand": "error",
574
- "vue/prop-name-casing": ["error", "camelCase"],
575
- "vue/require-component-is": "error",
576
- "vue/require-default-prop": "error",
577
- "vue/require-emit-validator": "error",
578
- "vue/require-explicit-emits": "error",
579
- "vue/require-explicit-slots": "error",
580
- "vue/require-macro-variable-name": ["error", {
581
- defineEmits: "emit",
582
- defineProps: "props",
583
- defineSlots: "slots",
584
- useAttrs: "attrs",
585
- useSlots: "slots"
586
- }],
587
- "vue/require-name-property": "error",
588
- "vue/require-prop-type-constructor": "error",
589
- "vue/require-render-return": "error",
590
- "vue/require-slots-as-functions": "error",
591
- "vue/require-toggle-inside-transition": "error",
592
- "vue/require-typed-ref": "error",
593
- "vue/require-v-for-key": "error",
594
- "vue/require-valid-default-prop": "error",
595
- "vue/return-in-computed-property": "error",
596
- "vue/return-in-emits-validator": "error",
597
- "vue/this-in-template": "error",
598
- "vue/use-v-on-exact": "error",
599
- "vue/v-bind-style": "error",
600
- "vue/v-on-event-hyphenation": "error",
601
- "vue/v-on-style": "error",
602
- "vue/v-slot-style": "error",
603
- "vue/valid-attribute-name": "error",
604
- "vue/valid-define-emits": "error",
605
- "vue/valid-define-options": "error",
606
- "vue/valid-define-props": "error",
607
- "vue/valid-next-tick": "error",
608
- "vue/valid-template-root": "error",
609
- "vue/valid-v-bind": "error",
610
- "vue/valid-v-cloak": "error",
611
- "vue/valid-v-else": "error",
612
- "vue/valid-v-else-if": "error",
613
- "vue/valid-v-for": "error",
614
- "vue/valid-v-html": "error",
615
- "vue/valid-v-if": "error",
616
- "vue/valid-v-is": "error",
617
- "vue/valid-v-memo": "error",
618
- "vue/valid-v-model": "error",
619
- "vue/valid-v-on": "error",
620
- "vue/valid-v-once": "error",
621
- "vue/valid-v-pre": "error",
622
- "vue/valid-v-show": "error",
623
- "vue/valid-v-slot": "error",
624
- "vue/valid-v-text": "error"
323
+ "vue/no-v-html": "off",
324
+ "vue/object-shorthand": [
325
+ "error",
326
+ "always",
327
+ {
328
+ avoidQuotes: true,
329
+ ignoreConstructors: false
330
+ }
331
+ ],
332
+ "vue/one-component-per-file": "off",
333
+ "vue/padding-line-between-blocks": ["error", "always"],
334
+ "vue/prefer-template": "error",
335
+ "vue/require-default-prop": "off",
336
+ "vue/require-prop-types": "off",
337
+ "vue/return-in-computed-property": ["error", { treatUndefinedAsUnspecified: false }]
625
338
  }
626
339
  }];
627
340
  }
@@ -639,22 +352,6 @@ async function tailwindcss() {
639
352
  }];
640
353
  }
641
354
 
642
- //#endregion
643
- //#region src/configs/comments.js
644
- async function comments() {
645
- const [pluginComments] = await Promise.all([interopDefault(import("@eslint-community/eslint-plugin-eslint-comments"))]);
646
- return [{
647
- name: "cuiqg/eslint-comments",
648
- plugins: { "@eslint-community/eslint-comments": pluginComments },
649
- rules: {
650
- "@eslint-community/eslint-comments/no-aggregating-enable": "error",
651
- "@eslint-community/eslint-comments/no-duplicate-disable": "error",
652
- "@eslint-community/eslint-comments/no-unlimited-disable": "error",
653
- "@eslint-community/eslint-comments/no-unused-enable": "error"
654
- }
655
- }];
656
- }
657
-
658
355
  //#endregion
659
356
  //#region src/configs/typescript.js
660
357
  async function typescript() {
@@ -862,6 +559,17 @@ async function autoImports(options = {}) {
862
559
  return config;
863
560
  }
864
561
 
562
+ //#endregion
563
+ //#region src/configs/next.js
564
+ async function nextjs() {
565
+ const [pluginNextjs] = await Promise.all([interopDefault(import("@next/eslint-plugin-next"))]);
566
+ return [{
567
+ name: "cuiqg/nextjs",
568
+ plugins: { "@next/next": pluginNextjs },
569
+ rules: { ...pluginNextjs.configs.recommended.rules }
570
+ }];
571
+ }
572
+
865
573
  //#endregion
866
574
  //#region src/env.js
867
575
  const isInGitHookOrLintStaged = () => {
@@ -877,13 +585,26 @@ const hasUnocss = () => isPackageExists("unocss");
877
585
 
878
586
  //#endregion
879
587
  //#region src/presets.js
588
+ /**
589
+ *
590
+ * @param {object} [options]
591
+ * @param {boolean} [options.jsdoc]
592
+ * @param {boolean} [options.unocss]
593
+ * @param {boolean} [options.tailwindcss]
594
+ * @param {boolean} [options.typescript]
595
+ * @param {boolean} [options.vue]
596
+ * @param {boolean} [options.nextjs]
597
+ * @param {...object} userConfigs
598
+ * @returns {FlatConfigComposer} FlatConfigComposer
599
+ */
880
600
  function cuiqg(options = {}, ...userConfigs) {
881
- const { jsdoc: enableJsdoc = true, unocss: enableUnocss = hasUnocss(), tailwindcss: enableTailwindcss = false, typescript: enableTypescript = false, vue: enableVue = hasVue() } = options;
601
+ const { jsdoc: enableJsdoc = true, unocss: enableUnocss = hasUnocss(), tailwindcss: enableTailwindcss = false, typescript: enableTypescript = false, vue: enableVue = hasVue(), nextjs: enableNextjs = false } = options;
882
602
  const configs = [];
883
- configs.push(autoImports(), baseline(), ignores(), comments(), javascript({ isInEditor }), stylistic(), packageJson());
603
+ configs.push(autoImports(), baseline(), ignores(), javascript({ isInEditor }), stylistic(), packageJson());
884
604
  if (enableTypescript) configs.push(typescript());
885
605
  if (enableJsdoc) configs.push(jsdoc());
886
606
  if (enableVue) configs.push(vue({ typescript: enableTypescript }), macros());
607
+ if (enableNextjs) configs.push(nextjs());
887
608
  if (enableUnocss) configs.push(unocss());
888
609
  if (enableTailwindcss) configs.push(tailwindcss());
889
610
  return new FlatConfigComposer(...configs, ...userConfigs);
@@ -894,4 +615,4 @@ function cuiqg(options = {}, ...userConfigs) {
894
615
  var src_default = cuiqg;
895
616
 
896
617
  //#endregion
897
- export { GLOB_CSS, GLOB_EXCLUDE, GLOB_JS, GLOB_JSX, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TS, GLOB_TSX, GLOB_VUE, autoImports, baseline, comments, cuiqg, src_default as default, hasUnocss, hasVue, ignores, isInEditor, isInGitHookOrLintStaged, javascript, jsdoc, macros, packageJson, stylistic, stylisticConfigDefaults, tailwindcss, typescript, unocss, vue };
618
+ export { GLOB_CSS, GLOB_EXCLUDE, GLOB_JS, GLOB_JSX, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_TS, GLOB_TSX, GLOB_VUE, autoImports, baseline, cuiqg, src_default as default, hasUnocss, hasVue, ignores, isInEditor, isInGitHookOrLintStaged, javascript, jsdoc, macros, nextjs, packageJson, stylistic, stylisticConfigDefaults, tailwindcss, typescript, unocss, vue };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cuiqg/eslint-config",
3
- "version": "2.8.15",
3
+ "version": "2.8.16",
4
4
  "description": "Eslint config for @cuiqg",
5
5
  "keywords": [
6
6
  "eslint-config"
@@ -39,7 +39,8 @@
39
39
  "eslint": ">=9.28.0"
40
40
  },
41
41
  "dependencies": {
42
- "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
42
+ "@eslint/js": "^9.39.2",
43
+ "@next/eslint-plugin-next": "^16.1.1",
43
44
  "@stylistic/eslint-plugin": "^5.6.1",
44
45
  "@typescript-eslint/eslint-plugin": "^8.50.1",
45
46
  "@typescript-eslint/parser": "^8.50.1",
@@ -49,11 +50,9 @@
49
50
  "eslint-flat-config-utils": "^2.1.4",
50
51
  "eslint-plugin-baseline-js": "^0.4.2",
51
52
  "eslint-plugin-depend": "^1.4.0",
52
- "eslint-plugin-import-x": "^4.16.1",
53
53
  "eslint-plugin-jsdoc": "^61.5.0",
54
54
  "eslint-plugin-package-json": "^0.85.0",
55
55
  "eslint-plugin-tailwindcss": "4.0.0-beta.0",
56
- "eslint-plugin-unused-imports": "^4.3.0",
57
56
  "eslint-plugin-vue": "^10.6.2",
58
57
  "globals": "^16.5.0",
59
58
  "jsonc-eslint-parser": "^2.4.2",