@geoql/doctor-core 1.1.1 → 1.2.0

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.
@@ -1,782 +0,0 @@
1
- import { extname, resolve } from "node:path";
2
- import { existsSync } from "node:fs";
3
- import { loadConfig } from "c12";
4
- //#region \0rolldown/runtime.js
5
- var __defProp = Object.defineProperty;
6
- var __exportAll = (all, no_symbols) => {
7
- let target = {};
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: true
11
- });
12
- if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
13
- return target;
14
- };
15
- //#endregion
16
- //#region src/config/built-in.ts
17
- const BUILT_IN_RECOMMENDED = {
18
- include: [
19
- "**/*.vue",
20
- "**/*.ts",
21
- "**/*.tsx",
22
- "**/*.js",
23
- "**/*.jsx"
24
- ],
25
- exclude: [
26
- "node_modules",
27
- "dist",
28
- ".nuxt",
29
- ".output",
30
- "coverage"
31
- ],
32
- failOn: "error",
33
- threshold: 0,
34
- rules: {}
35
- };
36
- //#endregion
37
- //#region src/config/errors.ts
38
- var ConfigFileNotFoundError = class extends Error {
39
- name = "ConfigFileNotFoundError";
40
- constructor(path) {
41
- super(`Config file not found: ${path}`);
42
- }
43
- };
44
- var ConfigCycleError = class extends Error {
45
- name = "ConfigCycleError";
46
- constructor(chain) {
47
- super(`Config extends cycle detected: ${chain.join(" -> ")}`);
48
- }
49
- };
50
- var InvalidConfigError = class extends Error {
51
- name = "InvalidConfigError";
52
- };
53
- //#endregion
54
- //#region src/rule-registry.ts
55
- const RULE_REGISTRY = [
56
- {
57
- id: "vue/no-export-in-script-setup",
58
- severity: "error",
59
- category: "vue-builtin",
60
- source: "oxlint-builtin",
61
- recommended: true
62
- },
63
- {
64
- id: "vue/require-typed-ref",
65
- severity: "warn",
66
- category: "vue-builtin",
67
- source: "oxlint-builtin",
68
- recommended: true
69
- },
70
- {
71
- id: "vue/no-arrow-functions-in-watch",
72
- severity: "error",
73
- category: "vue-builtin",
74
- source: "oxlint-builtin",
75
- recommended: true
76
- },
77
- {
78
- id: "vue/no-deprecated-data-object-declaration",
79
- severity: "error",
80
- category: "vue-builtin",
81
- source: "oxlint-builtin",
82
- recommended: true
83
- },
84
- {
85
- id: "vue/no-deprecated-events-api",
86
- severity: "error",
87
- category: "vue-builtin",
88
- source: "oxlint-builtin",
89
- recommended: true
90
- },
91
- {
92
- id: "vue/no-deprecated-destroyed-lifecycle",
93
- severity: "error",
94
- category: "vue-builtin",
95
- source: "oxlint-builtin",
96
- recommended: true
97
- },
98
- {
99
- id: "vue/no-deprecated-model-definition",
100
- severity: "error",
101
- category: "vue-builtin",
102
- source: "oxlint-builtin",
103
- recommended: true
104
- },
105
- {
106
- id: "vue/no-deprecated-delete-set",
107
- severity: "error",
108
- category: "vue-builtin",
109
- source: "oxlint-builtin",
110
- recommended: true
111
- },
112
- {
113
- id: "vue/no-deprecated-vue-config-keycodes",
114
- severity: "error",
115
- category: "vue-builtin",
116
- source: "oxlint-builtin",
117
- recommended: true
118
- },
119
- {
120
- id: "vue/no-lifecycle-after-await",
121
- severity: "error",
122
- category: "vue-builtin",
123
- source: "oxlint-builtin",
124
- recommended: true
125
- },
126
- {
127
- id: "vue/no-this-in-before-route-enter",
128
- severity: "error",
129
- category: "vue-builtin",
130
- source: "oxlint-builtin",
131
- recommended: true
132
- },
133
- {
134
- id: "vue/return-in-computed-property",
135
- severity: "error",
136
- category: "vue-builtin",
137
- source: "oxlint-builtin",
138
- recommended: true
139
- },
140
- {
141
- id: "vue/valid-define-emits",
142
- severity: "error",
143
- category: "vue-builtin",
144
- source: "oxlint-builtin",
145
- recommended: true
146
- },
147
- {
148
- id: "vue/valid-define-props",
149
- severity: "error",
150
- category: "vue-builtin",
151
- source: "oxlint-builtin",
152
- recommended: true
153
- },
154
- {
155
- id: "vue/no-required-prop-with-default",
156
- severity: "warn",
157
- category: "vue-builtin",
158
- source: "oxlint-builtin",
159
- recommended: true
160
- },
161
- {
162
- id: "vue/prefer-import-from-vue",
163
- severity: "warn",
164
- category: "vue-builtin",
165
- source: "oxlint-builtin",
166
- recommended: true
167
- },
168
- {
169
- id: "vue/no-import-compiler-macros",
170
- severity: "warn",
171
- category: "vue-builtin",
172
- source: "oxlint-builtin",
173
- recommended: true
174
- },
175
- {
176
- id: "vue/no-multiple-slot-args",
177
- severity: "warn",
178
- category: "vue-builtin",
179
- source: "oxlint-builtin",
180
- recommended: true
181
- },
182
- {
183
- id: "vue/require-default-export",
184
- severity: "warn",
185
- category: "vue-builtin",
186
- source: "oxlint-builtin",
187
- recommended: true
188
- },
189
- {
190
- id: "vue/define-emits-declaration",
191
- severity: "info",
192
- category: "vue-builtin",
193
- source: "oxlint-builtin",
194
- recommended: false
195
- },
196
- {
197
- id: "vue/define-props-declaration",
198
- severity: "info",
199
- category: "vue-builtin",
200
- source: "oxlint-builtin",
201
- recommended: false
202
- },
203
- {
204
- id: "vue/define-props-destructuring",
205
- severity: "info",
206
- category: "vue-builtin",
207
- source: "oxlint-builtin",
208
- recommended: false
209
- },
210
- {
211
- id: "vue/max-props",
212
- severity: "info",
213
- category: "vue-builtin",
214
- source: "oxlint-builtin",
215
- recommended: false
216
- },
217
- {
218
- id: "vue-doctor/no-em-dash-in-string",
219
- severity: "warn",
220
- category: "ai-slop",
221
- source: "doctor",
222
- recommended: true
223
- },
224
- {
225
- id: "vue-doctor/no-destructure-props-without-to-refs",
226
- severity: "error",
227
- category: "ai-slop",
228
- source: "doctor",
229
- recommended: true
230
- },
231
- {
232
- id: "vue-doctor/no-destructure-reactive-without-to-refs",
233
- severity: "error",
234
- category: "ai-slop",
235
- source: "doctor",
236
- recommended: true
237
- },
238
- {
239
- id: "vue-doctor/no-non-null-assertion-on-ref-value",
240
- severity: "warn",
241
- category: "ai-slop",
242
- source: "doctor",
243
- recommended: true
244
- },
245
- {
246
- id: "vue-doctor/no-imports-from-vue-when-auto-imported",
247
- severity: "warn",
248
- category: "ai-slop",
249
- source: "doctor",
250
- recommended: true
251
- },
252
- {
253
- id: "vue-doctor/reactivity/watch-without-cleanup",
254
- severity: "warn",
255
- category: "reactivity",
256
- source: "doctor",
257
- recommended: true
258
- },
259
- {
260
- id: "vue-doctor/reactivity/prefer-shallowRef-for-large-data",
261
- severity: "info",
262
- category: "reactivity",
263
- source: "doctor",
264
- recommended: false
265
- },
266
- {
267
- id: "vue-doctor/reactivity/prefer-readonly-for-injected",
268
- severity: "info",
269
- category: "reactivity",
270
- source: "doctor",
271
- recommended: false
272
- },
273
- {
274
- id: "vue-doctor/composition/prefer-script-setup-for-new-files",
275
- severity: "warn",
276
- category: "composition",
277
- source: "doctor",
278
- recommended: true
279
- },
280
- {
281
- id: "vue-doctor/composition/defineProps-typed",
282
- severity: "warn",
283
- category: "composition",
284
- source: "doctor",
285
- recommended: true
286
- },
287
- {
288
- id: "vue-doctor/performance/prefer-defineAsyncComponent-on-route",
289
- severity: "info",
290
- category: "performance",
291
- source: "doctor",
292
- recommended: false
293
- },
294
- {
295
- id: "vue-doctor/template/v-for-has-key",
296
- severity: "error",
297
- category: "template",
298
- source: "doctor",
299
- recommended: true
300
- },
301
- {
302
- id: "vue-doctor/template/v-if-v-for-precedence",
303
- severity: "error",
304
- category: "template",
305
- source: "doctor",
306
- recommended: true
307
- },
308
- {
309
- id: "vue-doctor/template/v-memo-on-large-list",
310
- severity: "warn",
311
- category: "performance",
312
- source: "doctor",
313
- recommended: true
314
- },
315
- {
316
- id: "vue-doctor/template/no-inline-object-prop-in-list",
317
- severity: "warn",
318
- category: "performance",
319
- source: "doctor",
320
- recommended: true
321
- },
322
- {
323
- id: "vue-doctor/template/no-computed-getter-in-template-loop",
324
- severity: "warn",
325
- category: "template-perf",
326
- source: "doctor",
327
- recommended: true
328
- },
329
- {
330
- id: "vue-doctor/template/avoid-deep-v-bind-spread-in-list",
331
- severity: "info",
332
- category: "template-perf",
333
- source: "doctor",
334
- recommended: true
335
- },
336
- {
337
- id: "vue-doctor/sfc/no-mixed-options-and-composition-api",
338
- severity: "warn",
339
- category: "sfc",
340
- source: "doctor",
341
- recommended: true
342
- },
343
- {
344
- id: "vue-doctor/build-quality/tsconfig-strict-required",
345
- severity: "warn",
346
- category: "build-quality",
347
- source: "doctor",
348
- recommended: true
349
- },
350
- {
351
- id: "vue-doctor/build-quality/vue-tsc-in-devDeps",
352
- severity: "warn",
353
- category: "build-quality",
354
- source: "doctor",
355
- recommended: true
356
- },
357
- {
358
- id: "vue-doctor/build-quality/no-vue-cli",
359
- severity: "warn",
360
- category: "build-quality",
361
- source: "doctor",
362
- recommended: true
363
- },
364
- {
365
- id: "vue-doctor/build-quality/eslint-plugin-vue-installed",
366
- severity: "info",
367
- category: "build-quality",
368
- source: "doctor",
369
- recommended: true
370
- },
371
- {
372
- id: "vue-doctor/deps/duplicate-vue-versions",
373
- severity: "error",
374
- category: "deps",
375
- source: "doctor",
376
- recommended: true
377
- },
378
- {
379
- id: "vue-doctor/deps/vue-major-current",
380
- severity: "info",
381
- category: "deps",
382
- source: "doctor",
383
- recommended: false
384
- },
385
- {
386
- id: "dead-code/unused-file",
387
- severity: "warn",
388
- category: "dead-code",
389
- source: "doctor",
390
- recommended: true
391
- },
392
- {
393
- id: "dead-code/unused-export",
394
- severity: "warn",
395
- category: "dead-code",
396
- source: "doctor",
397
- recommended: true
398
- },
399
- {
400
- id: "dead-code/unused-type-export",
401
- severity: "info",
402
- category: "dead-code",
403
- source: "doctor",
404
- recommended: true
405
- },
406
- {
407
- id: "dead-code/unused-member",
408
- severity: "info",
409
- category: "dead-code",
410
- source: "doctor",
411
- recommended: true
412
- },
413
- {
414
- id: "dead-code/unused-dependency",
415
- severity: "warn",
416
- category: "dead-code",
417
- source: "doctor",
418
- recommended: true
419
- },
420
- {
421
- id: "dead-code/unlisted-dependency",
422
- severity: "error",
423
- category: "dead-code",
424
- source: "doctor",
425
- recommended: true
426
- },
427
- {
428
- id: "dead-code/duplicate-export",
429
- severity: "warn",
430
- category: "dead-code",
431
- source: "doctor",
432
- recommended: true
433
- },
434
- {
435
- id: "nuxt-doctor/structure/uses-app-directory",
436
- severity: "warn",
437
- category: "structure",
438
- source: "doctor",
439
- recommended: true
440
- },
441
- {
442
- id: "nuxt-doctor/structure/nuxt-major-current",
443
- severity: "info",
444
- category: "structure",
445
- source: "doctor",
446
- recommended: false
447
- },
448
- {
449
- id: "nuxt-doctor/modules-deps/no-modules-incompatible-with-nuxt-4",
450
- severity: "warn",
451
- category: "modules-deps",
452
- source: "doctor",
453
- recommended: true
454
- },
455
- {
456
- id: "nuxt-doctor/modules-deps/recommended-modules-installed",
457
- severity: "info",
458
- category: "modules-deps",
459
- source: "doctor",
460
- recommended: false
461
- },
462
- {
463
- id: "nuxt-doctor/nitro/compatibilityDate-set",
464
- severity: "error",
465
- category: "nitro",
466
- source: "doctor",
467
- recommended: true
468
- },
469
- {
470
- id: "nuxt-doctor/nitro/preset-defined-for-deploy-target",
471
- severity: "warn",
472
- category: "nitro",
473
- source: "doctor",
474
- recommended: true
475
- },
476
- {
477
- id: "nuxt-doctor/nitro/runtime-config-typed",
478
- severity: "info",
479
- category: "nitro",
480
- source: "doctor",
481
- recommended: false
482
- },
483
- {
484
- id: "nuxt-doctor/seo/lang-on-html",
485
- severity: "warn",
486
- category: "seo",
487
- source: "doctor",
488
- recommended: true
489
- },
490
- {
491
- id: "nuxt-doctor/seo/useSeoMeta-on-public-page",
492
- severity: "warn",
493
- category: "seo",
494
- source: "doctor",
495
- recommended: true
496
- },
497
- {
498
- id: "nuxt-doctor/seo/og-image-defined",
499
- severity: "warn",
500
- category: "seo",
501
- source: "doctor",
502
- recommended: true
503
- },
504
- {
505
- id: "nuxt-doctor/cloudflare/nitro-cloudflare-preset",
506
- severity: "warn",
507
- category: "cloudflare",
508
- source: "doctor",
509
- recommended: true
510
- },
511
- {
512
- id: "nuxt-doctor/cloudflare/og-image-via-satori",
513
- severity: "info",
514
- category: "cloudflare",
515
- source: "doctor",
516
- recommended: false
517
- },
518
- {
519
- id: "nuxt-doctor/cloudflare/no-node-only-modules",
520
- severity: "warn",
521
- category: "cloudflare",
522
- source: "doctor",
523
- recommended: true
524
- },
525
- {
526
- id: "nuxt-doctor/data-fetching/no-shared-key-across-pages",
527
- severity: "warn",
528
- category: "data-fetching",
529
- source: "doctor",
530
- recommended: true
531
- },
532
- {
533
- id: "nuxt-doctor/data-fetching/ssr-safe-onMounted-only-for-client",
534
- severity: "warn",
535
- category: "data-fetching",
536
- source: "doctor",
537
- recommended: true
538
- },
539
- {
540
- id: "nuxt-doctor/ai-slop/no-mixed-app-and-root-layout",
541
- severity: "warn",
542
- category: "ai-slop",
543
- source: "doctor",
544
- recommended: true
545
- },
546
- {
547
- id: "nuxt-doctor/ai-slop/no-process-client-server",
548
- severity: "error",
549
- category: "ai-slop",
550
- source: "doctor",
551
- recommended: true
552
- },
553
- {
554
- id: "nuxt-doctor/ai-slop/no-explicit-imports-of-auto-imported",
555
- severity: "warn",
556
- category: "ai-slop",
557
- source: "doctor",
558
- recommended: true
559
- },
560
- {
561
- id: "nuxt-doctor/ai-slop/no-useState-for-server-data",
562
- severity: "warn",
563
- category: "ai-slop",
564
- source: "doctor",
565
- recommended: true
566
- },
567
- {
568
- id: "nuxt-doctor/ai-slop/no-fetch-in-setup",
569
- severity: "warn",
570
- category: "ai-slop",
571
- source: "doctor",
572
- recommended: true
573
- },
574
- {
575
- id: "nuxt-doctor/data-fetching/useAsyncData-key-required-in-loop",
576
- severity: "error",
577
- category: "data-fetching",
578
- source: "doctor",
579
- recommended: true
580
- },
581
- {
582
- id: "nuxt-doctor/server-routes/defineEventHandler-typed",
583
- severity: "warn",
584
- category: "server-routes",
585
- source: "doctor",
586
- recommended: true
587
- },
588
- {
589
- id: "nuxt-doctor/server-routes/validate-body-with-h3-v2",
590
- severity: "warn",
591
- category: "server-routes",
592
- source: "doctor",
593
- recommended: true
594
- },
595
- {
596
- id: "nuxt-doctor/server-routes/createError-on-failure",
597
- severity: "warn",
598
- category: "server-routes",
599
- source: "doctor",
600
- recommended: true
601
- },
602
- {
603
- id: "nuxt-doctor/hydration/no-document-in-setup",
604
- severity: "error",
605
- category: "hydration",
606
- source: "doctor",
607
- recommended: true
608
- },
609
- {
610
- id: "nuxt-doctor/hydration/clientOnly-for-browser-apis",
611
- severity: "error",
612
- category: "hydration",
613
- source: "doctor",
614
- recommended: true
615
- }
616
- ];
617
- function listRules(filter = {}) {
618
- let rules = [...RULE_REGISTRY];
619
- if (filter.preset === "recommended") rules = rules.filter((r) => r.recommended);
620
- if (filter.category) rules = rules.filter((r) => r.category === filter.category);
621
- if (filter.source) rules = rules.filter((r) => r.source === filter.source);
622
- if (filter.severity) rules = rules.filter((r) => r.severity === filter.severity);
623
- return rules.sort((a, b) => a.id.localeCompare(b.id));
624
- }
625
- //#endregion
626
- //#region src/config/presets.ts
627
- const PRESET_NAMES = [
628
- "minimal",
629
- "recommended",
630
- "strict",
631
- "all"
632
- ];
633
- function isPresetName(value) {
634
- return PRESET_NAMES.includes(value);
635
- }
636
- /**
637
- * Resolve a preset name to its base ruleId -> Severity map.
638
- *
639
- * - `minimal` : errors only (warn/info turned off)
640
- * - `recommended` : errors + warns (info off) — same as today's default
641
- * - `strict` : errors + warns + infos all on at registered severity
642
- * - `all` : alias of `strict` for now; reserved to surface every
643
- * known ruleId regardless of preset opt-in policy
644
- *
645
- * The returned map is the BASE; downstream code merges user config
646
- * `rules:` on top, then CLI `--rule` overrides on top of that.
647
- */
648
- function resolvePreset(name) {
649
- const rules = {};
650
- for (const rule of RULE_REGISTRY) if (name === "minimal") {
651
- if (rule.severity === "error") rules[rule.id] = "error";
652
- } else if (name === "recommended") {
653
- if (rule.severity === "error" || rule.severity === "warn") rules[rule.id] = rule.severity;
654
- } else rules[rule.id] = rule.severity;
655
- return rules;
656
- }
657
- //#endregion
658
- //#region src/config/validate.ts
659
- const VALID_SEVERITIES = new Set([
660
- "error",
661
- "warn",
662
- "info",
663
- "off"
664
- ]);
665
- const VALID_FAIL_ON = new Set([
666
- "error",
667
- "warn",
668
- "none"
669
- ]);
670
- function validateConfig(raw) {
671
- if (raw === null || typeof raw !== "object" || Array.isArray(raw)) throw new InvalidConfigError("config: must be an object");
672
- const config = raw;
673
- if ("threshold" in config) {
674
- const threshold = config.threshold;
675
- if (typeof threshold !== "number" || !Number.isInteger(threshold)) throw new InvalidConfigError(`threshold: must be an integer 0..100, got ${JSON.stringify(threshold)}`);
676
- if (threshold < 0 || threshold > 100) throw new InvalidConfigError(`threshold: must be 0..100, got ${threshold}`);
677
- }
678
- if ("preset" in config) {
679
- const preset = config.preset;
680
- if (typeof preset !== "string" || !isPresetName(preset)) throw new InvalidConfigError(`preset: must be one of 'minimal', 'recommended', 'strict', 'all', got ${JSON.stringify(preset)}`);
681
- }
682
- if ("failOn" in config) {
683
- const failOn = config.failOn;
684
- if (typeof failOn !== "string" || !VALID_FAIL_ON.has(failOn)) throw new InvalidConfigError(`failOn: must be 'error', 'warn', or 'none', got ${JSON.stringify(failOn)}`);
685
- }
686
- if ("include" in config) {
687
- const include = config.include;
688
- if (!Array.isArray(include)) throw new InvalidConfigError("include: must be an array of strings");
689
- if (!include.every((v) => typeof v === "string")) throw new InvalidConfigError("include: must be an array of strings");
690
- }
691
- if ("exclude" in config) {
692
- const exclude = config.exclude;
693
- if (!Array.isArray(exclude)) throw new InvalidConfigError("exclude: must be an array of strings");
694
- if (!exclude.every((v) => typeof v === "string")) throw new InvalidConfigError("exclude: must be an array of strings");
695
- }
696
- if ("fixExcludes" in config) {
697
- const fixExcludes = config.fixExcludes;
698
- if (!Array.isArray(fixExcludes)) throw new InvalidConfigError("fixExcludes: must be an array of strings");
699
- if (!fixExcludes.every((v) => typeof v === "string")) throw new InvalidConfigError("fixExcludes: must be an array of strings");
700
- }
701
- if ("rules" in config) {
702
- const rules = config.rules;
703
- if (rules === null || typeof rules !== "object" || Array.isArray(rules)) throw new InvalidConfigError("rules: must be an object");
704
- for (const [key, value] of Object.entries(rules)) if (typeof value !== "string" || !VALID_SEVERITIES.has(value)) throw new InvalidConfigError(`rules.${key}: must be a severity ('error', 'warn', 'info', or 'off'), got ${JSON.stringify(value)}`);
705
- }
706
- }
707
- //#endregion
708
- //#region src/config/load.ts
709
- var load_exports = /* @__PURE__ */ __exportAll({ loadDoctorConfig: () => loadDoctorConfig });
710
- const SOURCE_MAP = {
711
- ts: "ts",
712
- mjs: "mjs",
713
- js: "js",
714
- json: "json"
715
- };
716
- async function loadDoctorConfig(rootDir, explicitPathOrOptions) {
717
- const opts = typeof explicitPathOrOptions === "string" ? { explicitPath: explicitPathOrOptions } : explicitPathOrOptions ?? {};
718
- const explicitPath = opts.explicitPath;
719
- if (opts.presetOverride !== void 0 && !isPresetName(opts.presetOverride)) throw new InvalidConfigError(`preset: must be one of 'minimal', 'recommended', 'strict', 'all', got ${JSON.stringify(opts.presetOverride)}`);
720
- if (explicitPath) {
721
- if (!existsSync(resolve(rootDir, explicitPath))) throw new ConfigFileNotFoundError(explicitPath);
722
- }
723
- const chain = [];
724
- const result = await loadConfig({
725
- cwd: rootDir,
726
- name: "doctor",
727
- packageJson: "doctor",
728
- rcFile: false,
729
- globalRc: false,
730
- ...explicitPath ? { configFile: resolve(rootDir, explicitPath) } : {},
731
- resolve(source, options) {
732
- const base = options.cwd;
733
- const key = resolve(base, source);
734
- if (chain.includes(key)) throw new ConfigCycleError([...chain, key]);
735
- chain.push(key);
736
- }
737
- });
738
- const raw = result.config;
739
- validateConfig(raw);
740
- let source;
741
- let configFile;
742
- if (explicitPath) {
743
- source = "flag";
744
- configFile = resolve(rootDir, explicitPath);
745
- } else if (result._configFile) {
746
- source = SOURCE_MAP[extname(result._configFile).slice(1)];
747
- configFile = result._configFile;
748
- } else if (Object.keys(raw).length > 0) {
749
- source = "package.json";
750
- configFile = resolve(rootDir, "package.json");
751
- } else {
752
- source = "built-in";
753
- configFile = void 0;
754
- }
755
- const presetName = opts.presetOverride ?? raw.preset ?? "recommended";
756
- const presetRules = resolvePreset(presetName);
757
- const userRules = {};
758
- const userOff = /* @__PURE__ */ new Set();
759
- if (raw.rules && typeof raw.rules === "object") for (const [key, value] of Object.entries(raw.rules)) if (value === "off") userOff.add(key);
760
- else userRules[key] = value;
761
- const mergedRules = {
762
- ...presetRules,
763
- ...userRules
764
- };
765
- for (const key of userOff) delete mergedRules[key];
766
- return {
767
- rootDir,
768
- include: raw.include ?? BUILT_IN_RECOMMENDED.include,
769
- exclude: raw.exclude ?? BUILT_IN_RECOMMENDED.exclude,
770
- failOn: raw.failOn ?? BUILT_IN_RECOMMENDED.failOn,
771
- threshold: raw.threshold ?? BUILT_IN_RECOMMENDED.threshold,
772
- rules: mergedRules,
773
- preset: presetName,
774
- source,
775
- configFile,
776
- ...raw.fixExcludes ? { fixExcludes: raw.fixExcludes } : {}
777
- };
778
- }
779
- //#endregion
780
- export { listRules as a, InvalidConfigError as c, RULE_REGISTRY as i, BUILT_IN_RECOMMENDED as l, load_exports as n, ConfigCycleError as o, validateConfig as r, ConfigFileNotFoundError as s, loadDoctorConfig as t };
781
-
782
- //# sourceMappingURL=load-yXDi-5ti.js.map