@santi020k/eslint-config-basic 3.5.3 → 3.6.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.
- package/CHANGELOG.md +49 -0
- package/README.md +297 -7
- package/dist/cli-consumer-guidance.d.ts +24 -0
- package/dist/cli-consumer-guidance.js +146 -0
- package/dist/cli-consumer-guidance.js.map +1 -0
- package/dist/cli-preset.js +4 -4
- package/dist/cli-preset.js.map +1 -1
- package/dist/cli.js +34 -4
- package/dist/cli.js.map +1 -1
- package/dist/define-config-metadata.d.ts +1 -0
- package/dist/define-config-metadata.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +57 -14
- package/dist/index.js.map +1 -1
- package/package.json +56 -53
|
@@ -3,6 +3,7 @@ import { ConfigInput, EslintConfigOptions, FlatConfigArray } from '@santi020k/es
|
|
|
3
3
|
interface DefineConfigMetadata {
|
|
4
4
|
extraConfigs: ConfigInput[];
|
|
5
5
|
options?: EslintConfigOptions;
|
|
6
|
+
root?: string;
|
|
6
7
|
}
|
|
7
8
|
declare const attachDefineConfigMetadata: (config: FlatConfigArray, metadata: DefineConfigMetadata) => FlatConfigArray;
|
|
8
9
|
declare const getDefineConfigMetadata: (config: unknown) => DefineConfigMetadata | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/define-config-metadata.ts"],"sourcesContent":["import type { ConfigInput, EslintConfigOptions, FlatConfigArray } from '@santi020k/eslint-config-core'\n\nconst DEFINE_CONFIG_METADATA = Symbol.for('@santi020k/eslint-config-basic/define-config-metadata')\n\nexport interface DefineConfigMetadata {\n extraConfigs: ConfigInput[]\n options?: EslintConfigOptions\n}\n\ntype ConfigWithMetadata = FlatConfigArray & {\n [DEFINE_CONFIG_METADATA]?: DefineConfigMetadata\n}\n\nexport const attachDefineConfigMetadata = (\n config: FlatConfigArray,\n metadata: DefineConfigMetadata\n): FlatConfigArray => {\n Object.defineProperty(config, DEFINE_CONFIG_METADATA, {\n configurable: false,\n enumerable: false,\n value: metadata,\n writable: false\n })\n\n return config\n}\n\nexport const getDefineConfigMetadata = (config: unknown): DefineConfigMetadata | undefined => (\n Array.isArray(config) ? (config as ConfigWithMetadata)[DEFINE_CONFIG_METADATA] : undefined\n)\n"],"mappings":"AAEA,MAAM,yBAAyB,uBAAO,IAAI,uDAAuD;
|
|
1
|
+
{"version":3,"sources":["../src/define-config-metadata.ts"],"sourcesContent":["import type { ConfigInput, EslintConfigOptions, FlatConfigArray } from '@santi020k/eslint-config-core'\n\nconst DEFINE_CONFIG_METADATA = Symbol.for('@santi020k/eslint-config-basic/define-config-metadata')\n\nexport interface DefineConfigMetadata {\n extraConfigs: ConfigInput[]\n options?: EslintConfigOptions\n root?: string\n}\n\ntype ConfigWithMetadata = FlatConfigArray & {\n [DEFINE_CONFIG_METADATA]?: DefineConfigMetadata\n}\n\nexport const attachDefineConfigMetadata = (\n config: FlatConfigArray,\n metadata: DefineConfigMetadata\n): FlatConfigArray => {\n Object.defineProperty(config, DEFINE_CONFIG_METADATA, {\n configurable: false,\n enumerable: false,\n value: metadata,\n writable: false\n })\n\n return config\n}\n\nexport const getDefineConfigMetadata = (config: unknown): DefineConfigMetadata | undefined => (\n Array.isArray(config) ? (config as ConfigWithMetadata)[DEFINE_CONFIG_METADATA] : undefined\n)\n"],"mappings":"AAEA,MAAM,yBAAyB,uBAAO,IAAI,uDAAuD;AAY1F,MAAM,6BAA6B,CACxC,QACA,aACoB;AACpB,SAAO,eAAe,QAAQ,wBAAwB;AAAA,IACpD,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAED,SAAO;AACT;AAEO,MAAM,0BAA0B,CAAC,WACtC,MAAM,QAAQ,MAAM,IAAK,OAA8B,sBAAsB,IAAI;","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FlatConfigArray, EslintConfigOptions, ConfigInput } from '@santi020k/eslint-config-core';
|
|
2
|
-
export { DetectedFrameworkName, DetectionOptions, EslintConfigOptions, Extension, ExtensionName, ExtensionOption, FlatConfigArray, Format, FormatName, FormatOption, ImportGroupOptions, ImportedFramework, Library, LibraryName, LibraryOption, NextMode, NextModeName, NextModeOption, OptionalConfigMap, OptionalConfigName, Preset, PresetName, PresetOption, ProjectConfigOptions, ReactConfigKeys, Runtime, RuntimeName, RuntimeOption, Setting, SettingName, SettingOption, StrictMode, Testing, TestingName, TestingOption, Tool, ToolName, ToolOption, TypeScriptMode, TypeScriptOptions, coreConfig, createCoreConfig, createGitignoreConfig, createImportGroups, detectProjectOptions, getGlobalsForRuntime, groups, hasReactConfig } from '@santi020k/eslint-config-core';
|
|
2
|
+
export { DetectedFrameworkName, DetectionOptions, EslintConfigOptions, Extension, ExtensionName, ExtensionOption, FlatConfigArray, Format, FormatName, FormatOption, FormattingOptions, ImportGroupOptions, ImportedFramework, Library, LibraryName, LibraryOption, NextMode, NextModeName, NextModeOption, OptionalConfigMap, OptionalConfigName, Preset, PresetName, PresetOption, ProjectConfigOptions, ReactConfigKeys, Runtime, RuntimeName, RuntimeOption, Setting, SettingName, SettingOption, StrictMode, Testing, TestingName, TestingOption, Tool, ToolName, ToolOption, TypeScriptMode, TypeScriptOptions, coreConfig, createCoreConfig, createGitignoreConfig, createImportGroups, detectProjectOptions, getGlobalsForRuntime, groups, hasReactConfig } from '@santi020k/eslint-config-core';
|
|
3
3
|
export { angular, astro, expo, hono, lit, nest, next, nuxt, preact, qwik, react, reactRouter, slidev, solid, svelte, tanstackStart, vite, vue } from './frameworks.js';
|
|
4
4
|
export { typescriptConfig } from '@santi020k/eslint-config-typescript';
|
|
5
5
|
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
mergeOptionalBucket,
|
|
21
21
|
mergeProjectOptions,
|
|
22
22
|
NextMode,
|
|
23
|
+
OPTIONAL_BUCKETS,
|
|
23
24
|
patchImportGroups,
|
|
24
25
|
Preset,
|
|
25
26
|
resolveTsconfigRootDir,
|
|
@@ -35,6 +36,11 @@ import { createDetectedFrameworkFlags } from "./frameworks.js";
|
|
|
35
36
|
import { getIntegrationConfigs, getPrettierConfig } from "./integrations.js";
|
|
36
37
|
import { resolveFramework, resolvePreset } from "./resolvers.js";
|
|
37
38
|
import { buildTailwindSettingsConfig } from "./tailwind.js";
|
|
39
|
+
const resolveEnumValue = (values, value) => {
|
|
40
|
+
const resolved = values.find((candidate) => candidate === value);
|
|
41
|
+
if (resolved === void 0) throw new TypeError(`Unknown configuration option: ${value}`);
|
|
42
|
+
return resolved;
|
|
43
|
+
};
|
|
38
44
|
const SCRIPT_FILE_GLOBS = ["**/scripts/**/*.{js,mjs,cjs,ts,mts,cts}"];
|
|
39
45
|
const getCliEntryFiles = (rootDir) => {
|
|
40
46
|
const manifestPath = join(rootDir, "package.json");
|
|
@@ -118,7 +124,7 @@ const applyTestingFileOverrides = (configs, testingFiles) => {
|
|
|
118
124
|
const entries = Object.entries(testingFiles).filter(([, files]) => files.length > 0);
|
|
119
125
|
if (entries.length === 0) return configs;
|
|
120
126
|
return configs.map((config) => {
|
|
121
|
-
const match = entries.find(([testingName]) => (TESTING_CONFIG_NAMES[
|
|
127
|
+
const match = entries.find(([testingName]) => Object.entries(TESTING_CONFIG_NAMES).some(([name, configNames]) => name === testingName && configNames.includes(config.name ?? "")));
|
|
122
128
|
if (!match) return config;
|
|
123
129
|
const [, files] = match;
|
|
124
130
|
return {
|
|
@@ -127,6 +133,32 @@ const applyTestingFileOverrides = (configs, testingFiles) => {
|
|
|
127
133
|
};
|
|
128
134
|
});
|
|
129
135
|
};
|
|
136
|
+
const withTestingCoexistence = (configs) => {
|
|
137
|
+
if (!configs.some((config) => config.name === "integrations/testing-library")) return configs;
|
|
138
|
+
const playwrightConfigs = configs.filter((config) => config.name === "integrations/playwright");
|
|
139
|
+
return [
|
|
140
|
+
...configs,
|
|
141
|
+
...playwrightConfigs.map((config) => ({
|
|
142
|
+
files: config.files,
|
|
143
|
+
...config.ignores ? { ignores: config.ignores } : {},
|
|
144
|
+
name: "eslint-config-basic/playwright-testing-library",
|
|
145
|
+
settings: { "testing-library/utils-module": "off" }
|
|
146
|
+
}))
|
|
147
|
+
];
|
|
148
|
+
};
|
|
149
|
+
const createFormattingConfig = (formatting) => {
|
|
150
|
+
if (!formatting) return [];
|
|
151
|
+
return [{
|
|
152
|
+
files: ["**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx,astro,vue,svelte}"],
|
|
153
|
+
name: "eslint-config-basic/formatting",
|
|
154
|
+
rules: {
|
|
155
|
+
...formatting.arrowParens ? { "@stylistic/arrow-parens": ["warn", formatting.arrowParens] } : {},
|
|
156
|
+
...formatting.commaDangle ? { "@stylistic/comma-dangle": ["warn", formatting.commaDangle] } : {},
|
|
157
|
+
...formatting.quotes ? { "@stylistic/quotes": ["warn", formatting.quotes, { avoidEscape: true }] } : {},
|
|
158
|
+
...formatting.semi === void 0 ? {} : { "@stylistic/semi": ["warn", formatting.semi ? "always" : "never"] }
|
|
159
|
+
}
|
|
160
|
+
}];
|
|
161
|
+
};
|
|
130
162
|
const ESLINT_CONFIG_FILENAMES = [
|
|
131
163
|
"eslint.config.js",
|
|
132
164
|
"eslint.config.cjs",
|
|
@@ -181,7 +213,7 @@ const resolveUniqueLibraries = (libraries, tailwind) => {
|
|
|
181
213
|
};
|
|
182
214
|
const resolvePresetMeta = (requestedPreset, detected, autoFrameworks) => {
|
|
183
215
|
const preset = requestedPreset ?? detected.preset;
|
|
184
|
-
const presetDefaults = preset ? resolvePreset(preset) : {};
|
|
216
|
+
const presetDefaults = preset ? resolvePreset(resolveEnumValue(Object.values(Preset), preset)) : {};
|
|
185
217
|
const frameworkDefaults = autoFrameworks ? createDetectedFrameworkFlags(detected.detectedFrameworks) : {};
|
|
186
218
|
return { frameworkDefaults, preset, presetDefaults };
|
|
187
219
|
};
|
|
@@ -210,9 +242,15 @@ const resolveDetectedOptions = (detectRootDir, detection, requestedPreset) => {
|
|
|
210
242
|
const hasDetectedProjects = Object.keys(detected.projects ?? {}).length > 0;
|
|
211
243
|
return scopeWorkspaceDetection(detected, hasDetectedProjects);
|
|
212
244
|
};
|
|
213
|
-
const resolveNextModeValue = (options, presetDefaults, detected) =>
|
|
214
|
-
|
|
215
|
-
|
|
245
|
+
const resolveNextModeValue = (options, presetDefaults, detected) => resolveEnumValue(
|
|
246
|
+
Object.values(NextMode),
|
|
247
|
+
options?.nextMode ?? presetDefaults.nextMode ?? detected.nextMode ?? NextMode.Pages
|
|
248
|
+
);
|
|
249
|
+
const resolveRuntimeValue = (options, presetDefaults, detected, usePresetRuntime) => resolveEnumValue(
|
|
250
|
+
Object.values(Runtime),
|
|
251
|
+
options?.runtime ?? (usePresetRuntime ? presetDefaults.runtime : void 0) ?? detected.runtime ?? Runtime.Universal
|
|
252
|
+
);
|
|
253
|
+
const resolveSettingsValue = (options, detected) => (options?.settings ?? detected.settings ?? []).map((value) => resolveEnumValue(Object.values(Setting), value));
|
|
216
254
|
const resolveTypescriptValue = (options, presetDefaults, detected) => options?.typescript ?? presetDefaults.typescript ?? detected.typescript ?? false;
|
|
217
255
|
const needsReactAutoAdd = (frameworks) => Boolean(
|
|
218
256
|
frameworks.next ?? frameworks.expo ?? frameworks["react-router"] ?? (frameworks["tanstack-start"] && !frameworks.solid)
|
|
@@ -266,6 +304,7 @@ const buildEslintConfigs = async (params) => {
|
|
|
266
304
|
runtime,
|
|
267
305
|
runtimeCoreConfig,
|
|
268
306
|
tailwindOptions,
|
|
307
|
+
formatting,
|
|
269
308
|
testingFiles,
|
|
270
309
|
tsconfigRootDir,
|
|
271
310
|
uniqueExtensions,
|
|
@@ -338,7 +377,7 @@ const buildEslintConfigs = async (params) => {
|
|
|
338
377
|
name: "eslint-config-next/app-router-overrides",
|
|
339
378
|
rules: { "@next/next/no-html-link-for-pages": "off" }
|
|
340
379
|
}] : [],
|
|
341
|
-
...applyTestingFileOverrides(
|
|
380
|
+
...withTestingCoexistence(applyTestingFileOverrides(
|
|
342
381
|
await getIntegrationConfigs(
|
|
343
382
|
uniqueLibraries,
|
|
344
383
|
uniqueTools,
|
|
@@ -347,7 +386,7 @@ const buildEslintConfigs = async (params) => {
|
|
|
347
386
|
uniqueExtensions
|
|
348
387
|
),
|
|
349
388
|
testingFiles
|
|
350
|
-
),
|
|
389
|
+
)),
|
|
351
390
|
...resolvedFrameworks.next ? [{
|
|
352
391
|
files: ["next-env.d.ts"],
|
|
353
392
|
name: "eslint-config-next/generated-declaration",
|
|
@@ -378,6 +417,7 @@ const buildEslintConfigs = async (params) => {
|
|
|
378
417
|
},
|
|
379
418
|
...tailwindOptions ? [buildTailwindSettingsConfig(tailwindOptions)] : [],
|
|
380
419
|
...untypedTypescriptConfigs,
|
|
420
|
+
...createFormattingConfig(formatting),
|
|
381
421
|
...await getPrettierConfig(uniqueTools)
|
|
382
422
|
];
|
|
383
423
|
};
|
|
@@ -436,11 +476,13 @@ const resolveProjectConfigs = async (configuredProjects, projectDefaults, detect
|
|
|
436
476
|
return scopedConfigs.map((config) => config.name === "eslint-config/gitignore" ? config : scopeConfigToProject(config, projectPath));
|
|
437
477
|
})
|
|
438
478
|
);
|
|
479
|
+
const resolveInheritedUntypedFiles = (typescript) => typeof typescript === "object" && typescript.untypedFiles !== void 0 ? { typescript: { untypedFiles: typescript.untypedFiles } } : {};
|
|
439
480
|
const resolveInheritedProjectDefaults = (options) => mergeProjectOptions(
|
|
440
481
|
{
|
|
441
482
|
...options?.detection === void 0 ? {} : { detection: options.detection },
|
|
442
483
|
...options?.tailwind === void 0 ? {} : { tailwind: options.tailwind },
|
|
443
|
-
...
|
|
484
|
+
...options?.formatting === void 0 ? {} : { formatting: options.formatting },
|
|
485
|
+
...resolveInheritedUntypedFiles(options?.typescript)
|
|
444
486
|
},
|
|
445
487
|
options?.projectDefaults ?? {}
|
|
446
488
|
);
|
|
@@ -540,7 +582,7 @@ const defineConfig = async function defineConfig2(options, ...extraConfigs) {
|
|
|
540
582
|
optExtensions,
|
|
541
583
|
options,
|
|
542
584
|
optionMergeStrategy
|
|
543
|
-
);
|
|
585
|
+
).map((value) => resolveEnumValue(OPTIONAL_BUCKETS.extensions, value));
|
|
544
586
|
const formats = mergeOptionalBucket(
|
|
545
587
|
"formats",
|
|
546
588
|
detectedFormats,
|
|
@@ -548,7 +590,7 @@ const defineConfig = async function defineConfig2(options, ...extraConfigs) {
|
|
|
548
590
|
optFormats,
|
|
549
591
|
options,
|
|
550
592
|
optionMergeStrategy
|
|
551
|
-
);
|
|
593
|
+
).map((value) => resolveEnumValue(OPTIONAL_BUCKETS.formats, value));
|
|
552
594
|
const frameworks = mergeFrameworkOption(
|
|
553
595
|
frameworkDefaults,
|
|
554
596
|
presetDefaults.frameworks,
|
|
@@ -562,7 +604,7 @@ const defineConfig = async function defineConfig2(options, ...extraConfigs) {
|
|
|
562
604
|
optLibraries,
|
|
563
605
|
options,
|
|
564
606
|
optionMergeStrategy
|
|
565
|
-
);
|
|
607
|
+
).map((value) => resolveEnumValue(OPTIONAL_BUCKETS.libraries, value));
|
|
566
608
|
const nextMode = resolveNextModeValue(options, presetDefaults, detected);
|
|
567
609
|
const runtime = resolveRuntimeValue(options, presetDefaults, detected, requestedPreset !== void 0);
|
|
568
610
|
const settings = resolveSettingsValue(options, detected);
|
|
@@ -574,7 +616,7 @@ const defineConfig = async function defineConfig2(options, ...extraConfigs) {
|
|
|
574
616
|
optTesting,
|
|
575
617
|
options,
|
|
576
618
|
optionMergeStrategy
|
|
577
|
-
);
|
|
619
|
+
).map((value) => resolveEnumValue(OPTIONAL_BUCKETS.testing, value));
|
|
578
620
|
const tools = mergeOptionalBucket(
|
|
579
621
|
"tools",
|
|
580
622
|
detectedTools,
|
|
@@ -582,7 +624,7 @@ const defineConfig = async function defineConfig2(options, ...extraConfigs) {
|
|
|
582
624
|
optTools,
|
|
583
625
|
options,
|
|
584
626
|
optionMergeStrategy
|
|
585
|
-
);
|
|
627
|
+
).map((value) => resolveEnumValue(OPTIONAL_BUCKETS.tools, value));
|
|
586
628
|
const typescript = resolveTypescriptValue(options, presetDefaults, detected);
|
|
587
629
|
const resolvedTypescript = resolveTypescriptOptions(typescript);
|
|
588
630
|
const rootDir = detectRootDir ?? process.cwd();
|
|
@@ -611,6 +653,7 @@ const defineConfig = async function defineConfig2(options, ...extraConfigs) {
|
|
|
611
653
|
runtime,
|
|
612
654
|
runtimeCoreConfig: params.runtimeCoreConfig,
|
|
613
655
|
tailwindOptions: params.tailwindOptions,
|
|
656
|
+
formatting: options?.formatting,
|
|
614
657
|
testingFiles: options?.testingFiles,
|
|
615
658
|
tsconfigRootDir,
|
|
616
659
|
uniqueExtensions,
|
|
@@ -650,7 +693,7 @@ const defineConfig = async function defineConfig2(options, ...extraConfigs) {
|
|
|
650
693
|
];
|
|
651
694
|
const patchedConfigs = workspacePrefixes?.length ? patchImportGroups(allConfigs, workspacePrefixes) : allConfigs;
|
|
652
695
|
const finalConfig = attachReferencedPlugins(applyStrictMode(patchedConfigs, strict));
|
|
653
|
-
return attachDefineConfigMetadata(finalConfig, { extraConfigs, options });
|
|
696
|
+
return attachDefineConfigMetadata(finalConfig, { extraConfigs, options, root: rootDir });
|
|
654
697
|
};
|
|
655
698
|
export {
|
|
656
699
|
Extension2 as Extension,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport {\n applyDetectionControls,\n applyStrictMode,\n applyStrictProfileDefaults,\n type ConfigInput,\n coreConfig,\n createCoreConfig,\n createGitignoreConfig,\n DEFAULT_IGNORES,\n type DetectedFrameworkName,\n detectProjectOptions,\n type EslintConfigOptions,\n Extension,\n findTailwindEntryPoint,\n type FlatConfigArray,\n flattenConfigInputs,\n type Format,\n GENERATED_CODE_IGNORES,\n getStrictMode,\n type ImportedFramework,\n Library,\n mergeFrameworkOption,\n mergeOptionalBucket,\n mergeProjectOptions,\n NextMode,\n patchImportGroups,\n Preset,\n resolveTsconfigRootDir,\n resolveTypescriptOptions,\n Runtime,\n scopeConfigToProject,\n Setting,\n type TailwindOptions,\n Testing,\n type Tool,\n type TypeScriptMode,\n type TypeScriptOptions\n} from '@santi020k/eslint-config-core'\nimport { createTypescriptConfig } from '@santi020k/eslint-config-typescript'\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nimport { attachDefineConfigMetadata } from './define-config-metadata.js'\nimport { createDetectedFrameworkFlags, type FrameworkOptions } from './frameworks.js'\nimport { getIntegrationConfigs, getPrettierConfig } from './integrations.js'\nimport { resolveFramework, resolvePreset } from './resolvers.js'\nimport { buildTailwindSettingsConfig } from './tailwind.js'\n\nconst SCRIPT_FILE_GLOBS = ['**/scripts/**/*.{js,mjs,cjs,ts,mts,cts}']\n\nconst getCliEntryFiles = (rootDir: string): string[] => {\n const manifestPath = join(rootDir, 'package.json')\n\n if (!existsSync(manifestPath)) return SCRIPT_FILE_GLOBS\n\n try {\n const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as {\n bin?: Record<string, string> | string\n }\n\n const binFiles = typeof manifest.bin === 'string' ?\n [manifest.bin] :\n Object.values(manifest.bin ?? {})\n\n return [...new Set([\n ...SCRIPT_FILE_GLOBS,\n ...binFiles.map(file => file.replace(/^\\.\\//, ''))\n ])]\n } catch {\n return SCRIPT_FILE_GLOBS\n }\n}\n\n// Lazy framework factories.\nexport {\n angular,\n astro,\n expo,\n hono,\n lit,\n nest,\n next,\n nuxt,\n preact,\n qwik,\n react,\n reactRouter,\n slidev,\n solid,\n svelte,\n tanstackStart,\n vite,\n vue\n} from './frameworks.js'\n\n// Re-export core types and utilities\nexport type {\n DetectedFrameworkName,\n DetectionOptions,\n EslintConfigOptions,\n ExtensionName,\n ExtensionOption,\n FlatConfigArray,\n FormatName,\n FormatOption,\n ImportedFramework,\n ImportGroupOptions,\n LibraryName,\n LibraryOption,\n NextModeName,\n NextModeOption,\n OptionalConfigMap,\n OptionalConfigName,\n PresetName,\n PresetOption,\n ProjectConfigOptions,\n RuntimeName,\n RuntimeOption,\n SettingName,\n SettingOption,\n StrictMode,\n TestingName,\n TestingOption,\n ToolName,\n ToolOption,\n TypeScriptMode,\n TypeScriptOptions\n} from '@santi020k/eslint-config-core'\nexport {\n coreConfig,\n createCoreConfig,\n createGitignoreConfig,\n createImportGroups,\n detectProjectOptions,\n Extension,\n Format,\n getGlobalsForRuntime,\n groups,\n hasReactConfig,\n Library,\n NextMode,\n Preset,\n ReactConfigKeys,\n Runtime,\n Setting,\n Testing,\n Tool\n} from '@santi020k/eslint-config-core'\n\n// Re-export framework configs\nexport { typescriptConfig } from '@santi020k/eslint-config-typescript'\n\nconst buildTailwindResult = (\n options: TailwindOptions,\n entryPoint: string | undefined,\n rootDir: string\n): TailwindOptions => ({\n cwd: options.cwd ?? rootDir,\n detectComponentClasses: options.detectComponentClasses ?? true,\n ...(entryPoint ? { entryPoint } : {}),\n ...(options.ignore?.length ? { ignore: options.ignore } : {}),\n ...(options.noUnknownClasses === undefined ? {} : { noUnknownClasses: options.noUnknownClasses })\n})\n\nconst resolveTailwindOptions = (\n rootDir: string,\n tailwind: EslintConfigOptions['tailwind']\n): TailwindOptions | undefined => {\n if (tailwind === false) return undefined\n\n const options = tailwind ?? {}\n const entryPoint = options.entryPoint ?? findTailwindEntryPoint(rootDir)\n\n const resolvedOptions: TailwindOptions = !entryPoint && options.noUnknownClasses === undefined ?\n { ...options, noUnknownClasses: false } :\n options\n\n return buildTailwindResult(resolvedOptions, entryPoint, rootDir)\n}\n\nconst TESTING_CONFIG_NAMES: Partial<Record<Testing, string[]>> = {\n [Testing.Cypress]: ['integrations/cypress'],\n [Testing.Jest]: ['integrations/jest'],\n [Testing.JestDom]: ['eslint-config-integrations/jest-dom'],\n [Testing.Playwright]: ['integrations/playwright'],\n [Testing.TestingLibrary]: ['integrations/testing-library'],\n [Testing.Vitest]: ['integrations/vitest']\n}\n\nconst applyTestingFileOverrides = (\n configs: FlatConfigArray,\n testingFiles: EslintConfigOptions['testingFiles']\n): FlatConfigArray => {\n if (!testingFiles) return configs\n\n const entries = Object.entries(testingFiles).filter(([, files]) => files.length > 0)\n\n if (entries.length === 0) return configs\n\n return configs.map(config => {\n const match = entries.find(([testingName]) => (TESTING_CONFIG_NAMES[testingName as Testing] ?? []).includes(config.name ?? ''))\n\n if (!match) return config\n\n const [, files] = match\n\n return {\n ...config,\n files\n }\n })\n}\n\nconst ESLINT_CONFIG_FILENAMES = [\n 'eslint.config.js',\n 'eslint.config.cjs',\n 'eslint.config.mjs',\n 'eslint.config.ts',\n 'eslint.config.cts',\n 'eslint.config.mts'\n]\n\n// A direct defineConfig() call retains the eslint.config.* frame in Node's\n// stack. Prefer that location over cwd because editor ESLint processes may be\n// launched from outside the project.\nconst findConfigRootFromStack = (stack: string | undefined = new Error().stack): string | undefined => {\n if (!stack) return undefined\n\n for (const line of stack.split('\\n')) {\n const configFilename = ESLINT_CONFIG_FILENAMES.find(filename => line.includes(filename))\n\n if (!configFilename) continue\n\n const filenameStart = line.indexOf(configFilename)\n const fileUrlStart = line.lastIndexOf('file://', filenameStart)\n const windowsPathStart = line.slice(0, filenameStart).search(/[A-Za-z]:[\\\\/]/)\n const absolutePathStart = line.indexOf('/')\n let configPathStart = absolutePathStart\n\n if (windowsPathStart >= 0) configPathStart = windowsPathStart\n\n if (fileUrlStart >= 0) configPathStart = fileUrlStart\n\n try {\n if (configPathStart < 0) continue\n\n const configPath = line.slice(configPathStart, filenameStart + configFilename.length)\n\n return dirname(configPath.startsWith('file:') ? fileURLToPath(configPath) : configPath)\n } catch {\n // Ignore malformed or non-local stack URLs and retain the cwd fallback.\n }\n }\n\n return undefined\n}\n\nconst resolveConfigSetup = (options: EslintConfigOptions | undefined) => {\n const {\n autoFrameworks = true,\n detectRootDir,\n optionMergeStrategy = 'merge',\n preset: requestedPreset,\n root,\n tsconfigRootDir\n } = options ?? {}\n\n const implicitRootDir = root ?? detectRootDir ?? tsconfigRootDir ?? findConfigRootFromStack()\n\n return {\n autoFrameworks,\n detectRootDir: implicitRootDir,\n optionMergeStrategy,\n requestedPreset\n }\n}\n\nconst resolveUniqueLibraries = (\n libraries: Library[],\n tailwind: EslintConfigOptions['tailwind']\n): Library[] => {\n const uniqueLibraries = [...new Set(libraries)]\n\n if (tailwind === false) return uniqueLibraries.filter(library => library !== Library.Tailwind)\n\n if (!tailwind) return uniqueLibraries\n\n return [...new Set([...uniqueLibraries, Library.Tailwind])]\n}\n\nconst resolvePresetMeta = (\n requestedPreset: EslintConfigOptions['preset'],\n detected: EslintConfigOptions,\n autoFrameworks: boolean\n) => {\n const preset = requestedPreset ?? detected.preset\n const presetDefaults = preset ? resolvePreset(preset as Preset) : {}\n const frameworkDefaults = autoFrameworks ? createDetectedFrameworkFlags(detected.detectedFrameworks) : {}\n\n return { frameworkDefaults, preset, presetDefaults }\n}\n\nconst resolveConfiguredProjects = (\n detected: EslintConfigOptions,\n options: EslintConfigOptions | undefined\n): Record<string, EslintConfigOptions> => ({\n ...(detected.projects ?? {}),\n ...(options?.projects ?? {})\n})\n\nconst resolveBucketDefaults = (detected: EslintConfigOptions) => ({\n detectedExtensions: detected.extensions ?? [],\n detectedFormats: detected.formats ?? [],\n detectedLibraries: detected.libraries ?? [],\n detectedTesting: detected.testing ?? [],\n detectedTools: detected.tools ?? []\n})\n\nconst scopeWorkspaceDetection = (\n detected: EslintConfigOptions,\n isWorkspace: boolean\n): EslintConfigOptions => isWorkspace ?\n {\n ...detected,\n detectedFrameworks: [],\n libraries: [],\n nextMode: undefined,\n runtime: Runtime.Universal\n } :\n detected\n\nconst resolveDetectedOptions = (\n detectRootDir: string | undefined,\n detection: EslintConfigOptions['detection'],\n requestedPreset: EslintConfigOptions['preset']\n): EslintConfigOptions => {\n const rawDetected = detectProjectOptions(detectRootDir)\n\n const shouldDetectProjects = requestedPreset === Preset.Monorepo ||\n rawDetected.preset === Preset.Monorepo\n\n const detected = applyDetectionControls(rawDetected, detection, { projects: shouldDetectProjects })\n const hasDetectedProjects = Object.keys(detected.projects ?? {}).length > 0\n\n // Root devDependencies in a workspace commonly contain frameworks and\n // libraries used by only one package. Keep those detections package-scoped;\n // explicit root options still apply normally.\n return scopeWorkspaceDetection(detected, hasDetectedProjects)\n}\n\nconst resolveNextModeValue = (\n options: EslintConfigOptions | undefined,\n presetDefaults: Partial<EslintConfigOptions>,\n detected: EslintConfigOptions\n): NextMode => (options?.nextMode ?? presetDefaults.nextMode ?? detected.nextMode ?? NextMode.Pages) as NextMode\n\nconst resolveRuntimeValue = (\n options: EslintConfigOptions | undefined,\n presetDefaults: Partial<EslintConfigOptions>,\n detected: EslintConfigOptions,\n usePresetRuntime: boolean\n): Runtime => (\n options?.runtime ??\n (usePresetRuntime ? presetDefaults.runtime : undefined) ??\n detected.runtime ??\n Runtime.Universal\n) as Runtime\n\nconst resolveSettingsValue = (\n options: EslintConfigOptions | undefined,\n detected: EslintConfigOptions\n): Setting[] => (options?.settings ?? detected.settings ?? []) as Setting[]\n\nconst resolveTypescriptValue = (\n options: EslintConfigOptions | undefined,\n presetDefaults: Partial<EslintConfigOptions>,\n detected: EslintConfigOptions\n): EslintConfigOptions['typescript'] => options?.typescript ?? presetDefaults.typescript ?? detected.typescript ?? false\n\nconst needsReactAutoAdd = (\n frameworks: NonNullable<EslintConfigOptions['frameworks']>\n): boolean => Boolean(\n frameworks.next ??\n frameworks.expo ??\n frameworks['react-router'] ??\n (frameworks['tanstack-start'] && !frameworks.solid)\n) && !frameworks.react\n\nconst applyFrameworkImpliedDeps = (\n frameworks: NonNullable<EslintConfigOptions['frameworks']>\n): NonNullable<EslintConfigOptions['frameworks']> => {\n const result = { ...frameworks }\n\n if (needsReactAutoAdd(result)) result.react = true\n\n if (result.slidev && !result.vue) result.vue = true\n\n if (result.nuxt && !result.vue) result.vue = true\n\n return result\n}\n\nconst buildIgnoresConfig = (\n useDefaultIgnores: boolean,\n useGeneratedCodeIgnores: boolean,\n useGitignore: boolean,\n options: EslintConfigOptions | undefined,\n rootDir: string\n) => ({\n defaultIgnores: useDefaultIgnores ?\n [{\n ignores: [...DEFAULT_IGNORES, ...(useGeneratedCodeIgnores ? GENERATED_CODE_IGNORES : [])],\n name: 'eslint-config-basic/default-ignores'\n } as TSESLint.FlatConfig.Config] :\n [],\n gitignoreConfig: useGitignore ? createGitignoreConfig(rootDir) : [] as FlatConfigArray,\n userIgnores: options?.ignores?.length ?\n [{\n ignores: options.ignores,\n name: 'eslint-config-basic/ignores'\n } as TSESLint.FlatConfig.Config] :\n []\n})\n\ninterface FrameworkResolutionContext {\n hasReact: boolean\n hasSolid: boolean\n hasSvelte: boolean\n hasVue: boolean\n runtime: Runtime\n tsconfigRootDir?: string\n typeChecked?: boolean\n}\n\nconst FRAMEWORK_EXTRA_OPTS: Partial<Record<string, (ctx: FrameworkResolutionContext) => FrameworkOptions>> = {\n astro: ctx => ({\n hasReact: ctx.hasReact,\n hasSolid: ctx.hasSolid,\n hasSvelte: ctx.hasSvelte,\n hasVue: ctx.hasVue,\n tsconfigRootDir: ctx.tsconfigRootDir,\n typeChecked: ctx.typeChecked\n }),\n hono: ctx => ({ runtime: ctx.runtime }),\n slidev: ctx => ({ runtime: ctx.runtime }),\n vite: ctx => ({ runtime: ctx.runtime })\n}\n\nconst resolveEnabledFrameworks = async (\n frameworks: NonNullable<EslintConfigOptions['frameworks']>,\n ctx: FrameworkResolutionContext\n): Promise<Record<string, FlatConfigArray>> => {\n const entries = await Promise.all(\n (Object.entries(frameworks) as [DetectedFrameworkName, ImportedFramework][])\n .filter((entry): entry is [DetectedFrameworkName, ImportedFramework] => Boolean(entry[1]))\n .map(([name, value]) => resolveFramework(name, value, FRAMEWORK_EXTRA_OPTS[name]?.(ctx))\n .then(config => [name, config] as const))\n )\n\n return Object.fromEntries(entries)\n}\n\ninterface BuildConfigsParams {\n astroOptions: { hasReact: boolean, hasSolid: boolean, hasSvelte: boolean, hasVue: boolean, typeChecked?: boolean }\n defaultIgnores: TSESLint.FlatConfig.Config[]\n gitignoreConfig: FlatConfigArray\n nextMode: NextMode\n resolvedFrameworks: NonNullable<EslintConfigOptions['frameworks']>\n resolvedTypescript: false | (TypeScriptOptions & { mode: Exclude<TypeScriptMode, 'off'> })\n rootDir: string\n runtime: Runtime\n runtimeCoreConfig: FlatConfigArray\n tailwindOptions: TailwindOptions | undefined\n testingFiles: EslintConfigOptions['testingFiles']\n tsconfigRootDir: string | undefined\n uniqueExtensions: Extension[]\n uniqueFormats: Format[]\n uniqueLibraries: Library[]\n uniqueTesting: Testing[]\n uniqueTools: Tool[]\n userIgnores: TSESLint.FlatConfig.Config[]\n}\n\nconst buildEslintConfigs = async (params: BuildConfigsParams): Promise<FlatConfigArray> => {\n const {\n astroOptions, defaultIgnores, gitignoreConfig, nextMode, resolvedFrameworks,\n resolvedTypescript, rootDir, runtime, runtimeCoreConfig, tailwindOptions,\n testingFiles, tsconfigRootDir, uniqueExtensions, uniqueFormats, uniqueLibraries,\n uniqueTesting, uniqueTools, userIgnores\n } = params\n\n const { hasReact, hasSolid, hasSvelte, hasVue, typeChecked } = astroOptions\n\n const fw = await resolveEnabledFrameworks(\n resolvedFrameworks, { hasReact, hasSolid, hasSvelte, hasVue, runtime, tsconfigRootDir, typeChecked }\n )\n\n const get = (name: string): FlatConfigArray => fw[name] ?? []\n\n const typescriptConfigs = resolvedTypescript ?\n createTypescriptConfig({\n ...resolvedTypescript,\n tsconfigRootDir: resolvedTypescript.tsconfigRootDir ?? tsconfigRootDir\n }) :\n []\n\n const untypedTypescriptConfigs = typescriptConfigs.filter(\n config => config.name === 'eslint-config-typescript/untyped-files'\n )\n\n const typedTypescriptConfigs = typescriptConfigs.filter(\n config => config.name !== 'eslint-config-typescript/untyped-files'\n )\n\n return [\n ...defaultIgnores,\n ...userIgnores,\n ...gitignoreConfig,\n ...(tsconfigRootDir ?\n [{\n languageOptions: { parserOptions: { tsconfigRootDir } },\n name: 'eslint-config-basic/tsconfig-root-dir'\n }] :\n []),\n {\n files: ['**/*.cjs', '**/*.cts'],\n languageOptions: {\n globals: {\n __dirname: 'readonly',\n __filename: 'readonly',\n exports: 'readonly',\n module: 'readonly',\n require: 'readonly'\n },\n sourceType: 'commonjs'\n },\n name: 'eslint-config-basic/commonjs'\n },\n ...runtimeCoreConfig,\n ...(hasReact ? get('react') : []),\n ...get('next'),\n ...get('expo'),\n ...get('nest'),\n ...get('hono'),\n ...get('vue'),\n ...get('svelte'),\n ...get('solid'),\n ...get('angular'),\n ...get('qwik'),\n ...get('react-router'),\n ...get('tanstack-start'),\n ...get('nuxt'),\n ...get('preact'),\n ...get('lit'),\n ...get('slidev'),\n ...get('vite'),\n ...typedTypescriptConfigs,\n ...get('astro'),\n ...(resolvedFrameworks.next && nextMode === NextMode.AppRouter ?\n [{\n files: ['app/**/*.{ts,tsx}', 'src/**/*.{ts,tsx}'],\n name: 'eslint-config-next/app-router-overrides',\n rules: { '@next/next/no-html-link-for-pages': 'off' }\n } as TSESLint.FlatConfig.Config] :\n []),\n ...applyTestingFileOverrides(\n await getIntegrationConfigs(\n uniqueLibraries, uniqueTools, uniqueTesting, uniqueFormats, uniqueExtensions\n ),\n testingFiles\n ),\n ...(resolvedFrameworks.next ?\n [{\n files: ['next-env.d.ts'],\n name: 'eslint-config-next/generated-declaration',\n rules: {\n '@stylistic/quotes': 'off',\n '@stylistic/semi': 'off'\n }\n } as TSESLint.FlatConfig.Config] :\n []),\n {\n files: [\n '**/*.{test,spec}.{js,mjs,cjs,jsx,ts,mts,cts,tsx}',\n '**/{test,tests,__tests__}/**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx}'\n ],\n name: 'eslint-config-basic/test-file-overrides',\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n 'no-use-before-define': 'off'\n }\n },\n {\n files: getCliEntryFiles(rootDir),\n name: 'eslint-config-basic/scripts-overrides',\n rules: {\n 'n/no-unpublished-import': 'off',\n 'n/no-process-exit': 'off',\n 'no-console': 'off'\n }\n },\n ...(tailwindOptions ? [buildTailwindSettingsConfig(tailwindOptions)] : []),\n ...untypedTypescriptConfigs,\n ...(await getPrettierConfig(uniqueTools))\n ]\n}\n\ninterface EslintDebugInfo {\n autoFrameworks: boolean\n detectRootDir: string | undefined\n nextMode: NextMode\n optionMergeStrategy: 'merge' | 'replace'\n preset: EslintConfigOptions['preset']\n resolvedFrameworks: NonNullable<EslintConfigOptions['frameworks']>\n resolvedTypescript: BuildConfigsParams['resolvedTypescript']\n runtime: Runtime\n tsconfigRootDir: string | undefined\n uniqueExtensions: Extension[]\n uniqueFormats: Format[]\n uniqueLibraries: Library[]\n uniqueTesting: Testing[]\n uniqueTools: Tool[]\n}\n\nconst logEslintDebug = ({\n autoFrameworks,\n detectRootDir,\n nextMode,\n optionMergeStrategy,\n preset,\n resolvedFrameworks,\n resolvedTypescript,\n runtime,\n tsconfigRootDir,\n uniqueExtensions,\n uniqueFormats,\n uniqueLibraries,\n uniqueTesting,\n uniqueTools\n}: EslintDebugInfo) => {\n if (!process.env.ESLINT_BASIC_DEBUG) return\n\n process.stdout.write(`[ESLint Basic] Resolved options: ${JSON.stringify({\n autoFrameworks,\n detectRootDir: detectRootDir ?? process.cwd(),\n extensions: uniqueExtensions,\n formats: uniqueFormats,\n frameworks: Object.entries(resolvedFrameworks)\n .filter(([, value]) => Boolean(value))\n .map(([key]) => key),\n libraries: uniqueLibraries,\n nextMode,\n optionMergeStrategy,\n preset,\n runtime,\n testing: uniqueTesting,\n tools: uniqueTools,\n tsconfigRootDir,\n typescript: resolvedTypescript ? resolvedTypescript.mode : false\n }, null, 2)}\\n`)\n}\n\nconst emitAstroDoctorWarning = (\n extensions: Extension[],\n frameworks: Record<string, unknown>\n): void => {\n if (!extensions.includes(Extension.AstroDoctor) || frameworks.astro) return\n\n process.emitWarning(\n '[eslint-config-basic] Warning: Astro Doctor is enabled without the Astro framework config. ' +\n 'Enable `frameworks: { astro: true }` or remove the `astro-doctor` feature.'\n )\n}\n\n/**\n * Portable public result type returned by the Basic config composer.\n *\n * Keeping this as a package-owned interface prevents TypeScript declaration\n * inference from exposing pnpm-internal `typescript-eslint` paths in consumer\n * `eslint.config.js` files.\n */\nexport interface EslintConfigArray extends FlatConfigArray {\n length: number\n}\n\ntype ConfigComposer = (\n options?: EslintConfigOptions,\n ...extraConfigs: ConfigInput[]\n) => Promise<EslintConfigArray>\n\nconst resolveProjectConfigs = async (\n configuredProjects: Record<string, EslintConfigOptions>,\n projectDefaults: EslintConfigOptions['projectDefaults'],\n detectRootDir: string | undefined,\n autoFrameworks: boolean | undefined,\n composeConfig: ConfigComposer\n) => Promise.all(\n Object.entries(configuredProjects).map(async ([projectPath, projectOptions]) => {\n const projectRoot = join(detectRootDir ?? process.cwd(), projectPath)\n const inheritedOptions = mergeProjectOptions(projectDefaults ?? {}, projectOptions)\n\n const scopedConfigs = await composeConfig({\n autoFrameworks,\n ...inheritedOptions,\n projectDefaults: undefined,\n projects: undefined,\n root: inheritedOptions.root ?? inheritedOptions.detectRootDir ?? projectRoot\n })\n\n return scopedConfigs.map(config => config.name === 'eslint-config/gitignore' ? config : scopeConfigToProject(config, projectPath))\n })\n)\n\nconst resolveInheritedProjectDefaults = (\n options: EslintConfigOptions | undefined\n): EslintConfigOptions['projectDefaults'] => mergeProjectOptions(\n {\n ...(options?.detection === undefined ? {} : { detection: options.detection }),\n ...(options?.tailwind === undefined ? {} : { tailwind: options.tailwind }),\n ...(typeof options?.typescript === 'object' && options.typescript.untypedFiles !== undefined ?\n { typescript: { untypedFiles: options.typescript.untypedFiles } } :\n {})\n },\n options?.projectDefaults ?? {}\n)\n\nconst getPluginNameFromRule = (\n ruleName: string,\n availablePluginNames: Iterable<string>\n): string | undefined => {\n const segments = ruleName.split('/')\n\n if (segments.length < 2) return undefined\n\n const registeredPrefix = [...availablePluginNames]\n .filter(pluginName => ruleName.startsWith(`${pluginName}/`))\n .sort((left, right) => right.length - left.length)[0]\n\n if (registeredPrefix) return registeredPrefix\n\n return ruleName.startsWith('@') && segments.length > 2 ?\n segments.slice(0, 2).join('/') :\n segments[0]\n}\n\n/**\n * Copies already-loaded plugin objects onto rule blocks that reference them.\n * ESLint 10 validates plugin availability per effective config object, while\n * feature packs often keep plugin setup and consumer overrides separate.\n */\nexport const attachReferencedPlugins = (configs: FlatConfigArray): FlatConfigArray => {\n const availablePlugins = new Map<string, NonNullable<TSESLint.FlatConfig.Config['plugins']>[string]>()\n const ambiguousPluginNames = new Set<string>()\n\n for (const config of configs) {\n for (const [pluginName, plugin] of Object.entries(config.plugins ?? {})) {\n const existingPlugin = availablePlugins.get(pluginName)\n\n if (existingPlugin && existingPlugin !== plugin) {\n availablePlugins.delete(pluginName)\n\n ambiguousPluginNames.add(pluginName)\n } else if (!ambiguousPluginNames.has(pluginName)) {\n availablePlugins.set(pluginName, plugin)\n }\n }\n }\n\n return configs.map(config => {\n const requiredPlugins = new Set(\n Object.keys(config.rules ?? {})\n .map(ruleName => getPluginNameFromRule(ruleName, availablePlugins.keys()))\n .filter((pluginName): pluginName is string => pluginName !== undefined)\n )\n\n const missingPluginEntries = [...requiredPlugins].flatMap(pluginName => {\n const plugin = availablePlugins.get(pluginName)\n\n return !Object.hasOwn(config.plugins ?? {}, pluginName) && plugin ?\n [[pluginName, plugin] as const] :\n []\n })\n\n if (missingPluginEntries.length === 0) return config\n\n return {\n ...config,\n plugins: {\n ...config.plugins,\n ...Object.fromEntries(missingPluginEntries)\n }\n }\n })\n}\n\nconst getConfigsParams = (\n options: EslintConfigOptions | undefined,\n rootDir: string,\n runtime: Runtime,\n uniqueLibraries: Library[],\n uniqueSettings: Setting[],\n resolvedFrameworks: NonNullable<EslintConfigOptions['frameworks']>\n) => {\n const hasReact = !!resolvedFrameworks.react\n const hasVue = !!resolvedFrameworks.vue\n const hasSvelte = !!resolvedFrameworks.svelte\n const hasSolid = !!resolvedFrameworks.solid\n const useGitignore = !uniqueSettings.includes(Setting.NoGitignore)\n const useDefaultIgnores = !uniqueSettings.includes(Setting.NoDefaultIgnores)\n const useGeneratedCodeIgnores = !uniqueSettings.includes(Setting.NoGeneratedCodeIgnores)\n\n const tailwindOptions = uniqueLibraries.includes(Library.Tailwind) ?\n resolveTailwindOptions(rootDir, options?.tailwind) :\n undefined\n\n const runtimeCoreConfig = runtime === Runtime.Universal ? coreConfig : createCoreConfig(runtime)\n\n const { defaultIgnores, gitignoreConfig, userIgnores } = buildIgnoresConfig(\n useDefaultIgnores, useGeneratedCodeIgnores, useGitignore, options, rootDir\n )\n\n return {\n astroOptions: { hasReact, hasSolid, hasSvelte, hasVue },\n defaultIgnores,\n gitignoreConfig,\n runtimeCoreConfig,\n tailwindOptions,\n userIgnores\n }\n}\n\n/**\n * Generates the ESLint configuration array, applying configurations\n * and integration settings based on the input configuration.\n *\n * @param {EslintConfigOptions} options - Configuration and integration settings\n * @param {ConfigInput[]} extraConfigs - Local flat-config overrides appended after generated config\n * @returns {FlatConfigArray} The final ESLint configuration array\n */\nexport const defineConfig: ConfigComposer = async function defineConfig(\n options?: EslintConfigOptions,\n ...extraConfigs: ConfigInput[]\n): Promise<EslintConfigArray> {\n const {\n detection,\n extensions: optExtensions,\n formats: optFormats,\n frameworks: optFrameworks,\n libraries: optLibraries,\n strict: optStrict,\n testing: optTesting,\n tools: optTools,\n tsconfigRootDir: optTsconfigRootDir,\n workspacePrefixes\n } = options ?? {}\n\n const { autoFrameworks, detectRootDir, optionMergeStrategy, requestedPreset } = resolveConfigSetup(options)\n const detected = resolveDetectedOptions(detectRootDir, detection, requestedPreset)\n const { frameworkDefaults, preset, presetDefaults } = resolvePresetMeta(requestedPreset, detected, autoFrameworks)\n const configuredProjects = resolveConfiguredProjects(detected, options)\n\n const {\n detectedExtensions,\n detectedFormats,\n detectedLibraries,\n detectedTesting,\n detectedTools\n } = resolveBucketDefaults(detected)\n\n // NOTE: these must be computed unconditionally (not via destructuring defaults)\n // so that `optionMergeStrategy: 'merge'` actually unions explicit values with\n // detected/preset values. Destructuring defaults are skipped whenever the\n // option is provided, which silently turned 'merge' into 'replace'.\n const configuredExtensions = mergeOptionalBucket(\n 'extensions', detectedExtensions, presetDefaults.extensions, optExtensions, options, optionMergeStrategy\n ) as Extension[]\n\n const formats = mergeOptionalBucket(\n 'formats', detectedFormats, presetDefaults.formats, optFormats, options, optionMergeStrategy\n ) as Format[]\n\n const frameworks = mergeFrameworkOption(\n frameworkDefaults, presetDefaults.frameworks, optFrameworks, optionMergeStrategy\n )\n\n const libraries = mergeOptionalBucket(\n 'libraries', detectedLibraries, presetDefaults.libraries, optLibraries, options, optionMergeStrategy\n ) as Library[]\n\n const nextMode = resolveNextModeValue(options, presetDefaults, detected)\n const runtime = resolveRuntimeValue(options, presetDefaults, detected, requestedPreset !== undefined)\n const settings = resolveSettingsValue(options, detected)\n const strict = getStrictMode(optStrict, presetDefaults.strict)\n\n const testing = mergeOptionalBucket(\n 'testing', detectedTesting, presetDefaults.testing, optTesting, options, optionMergeStrategy\n ) as Testing[]\n\n const tools = mergeOptionalBucket(\n 'tools', detectedTools, presetDefaults.tools, optTools, options, optionMergeStrategy\n ) as Tool[]\n\n const typescript = resolveTypescriptValue(options, presetDefaults, detected)\n const resolvedTypescript = resolveTypescriptOptions(typescript)\n const rootDir = detectRootDir ?? process.cwd()\n const tsconfigRootDir = resolveTsconfigRootDir(rootDir, typescript, optTsconfigRootDir)\n const extensions = applyStrictProfileDefaults(configuredExtensions, strict)\n const resolvedFrameworks = applyFrameworkImpliedDeps({ ...frameworks })\n const uniqueLibraries = resolveUniqueLibraries(libraries, options?.tailwind)\n const uniqueTesting = [...new Set(testing)]\n const uniqueFormats = [...new Set(formats)]\n const uniqueTools = [...new Set(tools)]\n const uniqueExtensions = [...new Set(extensions)]\n const uniqueSettings = [...new Set(settings)]\n\n emitAstroDoctorWarning(uniqueExtensions, resolvedFrameworks)\n\n const params = getConfigsParams(options, rootDir, runtime, uniqueLibraries, uniqueSettings, resolvedFrameworks)\n\n const configs = await buildEslintConfigs({\n astroOptions: {\n ...params.astroOptions,\n typeChecked: resolvedTypescript ? resolvedTypescript.mode !== 'syntax' : false\n },\n defaultIgnores: params.defaultIgnores,\n gitignoreConfig: params.gitignoreConfig,\n nextMode,\n resolvedFrameworks,\n resolvedTypescript,\n rootDir,\n runtime,\n runtimeCoreConfig: params.runtimeCoreConfig,\n tailwindOptions: params.tailwindOptions,\n testingFiles: options?.testingFiles,\n tsconfigRootDir,\n uniqueExtensions,\n uniqueFormats,\n uniqueLibraries,\n uniqueTesting,\n uniqueTools,\n userIgnores: params.userIgnores\n })\n\n logEslintDebug({\n autoFrameworks,\n detectRootDir,\n nextMode,\n optionMergeStrategy,\n preset,\n resolvedFrameworks,\n resolvedTypescript,\n runtime,\n tsconfigRootDir,\n uniqueExtensions,\n uniqueFormats,\n uniqueLibraries,\n uniqueTesting,\n uniqueTools\n })\n\n const projectConfigs = await resolveProjectConfigs(\n configuredProjects,\n resolveInheritedProjectDefaults(options),\n detectRootDir,\n options?.autoFrameworks,\n defineConfig\n )\n\n // Merge workspace import group into any existing simple-import-sort/imports rules\n // so framework-specific group ordering (e.g. React-first) is preserved.\n const allConfigs = [\n ...configs,\n ...projectConfigs.flat(),\n ...flattenConfigInputs(extraConfigs)\n ]\n\n const patchedConfigs = workspacePrefixes?.length ?\n patchImportGroups(allConfigs, workspacePrefixes) :\n allConfigs\n\n const finalConfig = attachReferencedPlugins(applyStrictMode(patchedConfigs, strict))\n\n return attachDefineConfigMetadata(finalConfig, { extraConfigs, options })\n}\n"],"mappings":"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","names":["coreConfig","createCoreConfig","createGitignoreConfig","detectProjectOptions","Extension","Library","NextMode","Preset","Runtime","Setting","Testing","defineConfig"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport {\n applyDetectionControls,\n applyStrictMode,\n applyStrictProfileDefaults,\n type ConfigInput,\n coreConfig,\n createCoreConfig,\n createGitignoreConfig,\n DEFAULT_IGNORES,\n type DetectedFrameworkName,\n detectProjectOptions,\n type EslintConfigOptions,\n Extension,\n findTailwindEntryPoint,\n type FlatConfigArray,\n flattenConfigInputs,\n type Format,\n GENERATED_CODE_IGNORES,\n getStrictMode,\n type ImportedFramework,\n Library,\n mergeFrameworkOption,\n mergeOptionalBucket,\n mergeProjectOptions,\n NextMode,\n OPTIONAL_BUCKETS,\n patchImportGroups,\n Preset,\n resolveTsconfigRootDir,\n resolveTypescriptOptions,\n Runtime,\n scopeConfigToProject,\n Setting,\n type TailwindOptions,\n Testing,\n type Tool,\n type TypeScriptMode,\n type TypeScriptOptions\n} from '@santi020k/eslint-config-core'\nimport { createTypescriptConfig } from '@santi020k/eslint-config-typescript'\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nimport { attachDefineConfigMetadata } from './define-config-metadata.js'\nimport { createDetectedFrameworkFlags, type FrameworkOptions } from './frameworks.js'\nimport { getIntegrationConfigs, getPrettierConfig } from './integrations.js'\nimport { resolveFramework, resolvePreset } from './resolvers.js'\nimport { buildTailwindSettingsConfig } from './tailwind.js'\n\nconst resolveEnumValue = <T extends string>(values: readonly T[], value: string): T => {\n const resolved = values.find(candidate => candidate === value)\n\n if (resolved === undefined) throw new TypeError(`Unknown configuration option: ${value}`)\n\n return resolved\n}\n\nconst SCRIPT_FILE_GLOBS = ['**/scripts/**/*.{js,mjs,cjs,ts,mts,cts}']\n\nconst getCliEntryFiles = (rootDir: string): string[] => {\n const manifestPath = join(rootDir, 'package.json')\n\n if (!existsSync(manifestPath)) return SCRIPT_FILE_GLOBS\n\n try {\n const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as {\n bin?: Record<string, string> | string\n }\n\n const binFiles = typeof manifest.bin === 'string' ?\n [manifest.bin] :\n Object.values(manifest.bin ?? {})\n\n return [...new Set([\n ...SCRIPT_FILE_GLOBS,\n ...binFiles.map(file => file.replace(/^\\.\\//, ''))\n ])]\n } catch {\n return SCRIPT_FILE_GLOBS\n }\n}\n\n// Lazy framework factories.\nexport {\n angular,\n astro,\n expo,\n hono,\n lit,\n nest,\n next,\n nuxt,\n preact,\n qwik,\n react,\n reactRouter,\n slidev,\n solid,\n svelte,\n tanstackStart,\n vite,\n vue\n} from './frameworks.js'\n\n// Re-export core types and utilities\nexport type {\n DetectedFrameworkName,\n DetectionOptions,\n EslintConfigOptions,\n ExtensionName,\n ExtensionOption,\n FlatConfigArray,\n FormatName,\n FormatOption,\n FormattingOptions,\n ImportedFramework,\n ImportGroupOptions,\n LibraryName,\n LibraryOption,\n NextModeName,\n NextModeOption,\n OptionalConfigMap,\n OptionalConfigName,\n PresetName,\n PresetOption,\n ProjectConfigOptions,\n RuntimeName,\n RuntimeOption,\n SettingName,\n SettingOption,\n StrictMode,\n TestingName,\n TestingOption,\n ToolName,\n ToolOption,\n TypeScriptMode,\n TypeScriptOptions\n} from '@santi020k/eslint-config-core'\nexport {\n coreConfig,\n createCoreConfig,\n createGitignoreConfig,\n createImportGroups,\n detectProjectOptions,\n Extension,\n Format,\n getGlobalsForRuntime,\n groups,\n hasReactConfig,\n Library,\n NextMode,\n Preset,\n ReactConfigKeys,\n Runtime,\n Setting,\n Testing,\n Tool\n} from '@santi020k/eslint-config-core'\n\n// Re-export framework configs\nexport { typescriptConfig } from '@santi020k/eslint-config-typescript'\n\nconst buildTailwindResult = (\n options: TailwindOptions,\n entryPoint: string | undefined,\n rootDir: string\n): TailwindOptions => ({\n cwd: options.cwd ?? rootDir,\n detectComponentClasses: options.detectComponentClasses ?? true,\n ...(entryPoint ? { entryPoint } : {}),\n ...(options.ignore?.length ? { ignore: options.ignore } : {}),\n ...(options.noUnknownClasses === undefined ? {} : { noUnknownClasses: options.noUnknownClasses })\n})\n\nconst resolveTailwindOptions = (\n rootDir: string,\n tailwind: EslintConfigOptions['tailwind']\n): TailwindOptions | undefined => {\n if (tailwind === false) return undefined\n\n const options = tailwind ?? {}\n const entryPoint = options.entryPoint ?? findTailwindEntryPoint(rootDir)\n\n const resolvedOptions: TailwindOptions = !entryPoint && options.noUnknownClasses === undefined ?\n { ...options, noUnknownClasses: false } :\n options\n\n return buildTailwindResult(resolvedOptions, entryPoint, rootDir)\n}\n\nconst TESTING_CONFIG_NAMES: Partial<Record<Testing, string[]>> = {\n [Testing.Cypress]: ['integrations/cypress'],\n [Testing.Jest]: ['integrations/jest'],\n [Testing.JestDom]: ['eslint-config-integrations/jest-dom'],\n [Testing.Playwright]: ['integrations/playwright'],\n [Testing.TestingLibrary]: ['integrations/testing-library'],\n [Testing.Vitest]: ['integrations/vitest']\n}\n\nconst applyTestingFileOverrides = (\n configs: FlatConfigArray,\n testingFiles: EslintConfigOptions['testingFiles']\n): FlatConfigArray => {\n if (!testingFiles) return configs\n\n const entries = Object.entries(testingFiles).filter(([, files]) => files.length > 0)\n\n if (entries.length === 0) return configs\n\n return configs.map(config => {\n const match = entries.find(([testingName]) => Object.entries(TESTING_CONFIG_NAMES)\n .some(([name, configNames]) => name === testingName && configNames.includes(config.name ?? '')))\n\n if (!match) return config\n\n const [, files] = match\n\n return {\n ...config,\n files\n }\n })\n}\n\nconst withTestingCoexistence = (configs: FlatConfigArray): FlatConfigArray => {\n if (!configs.some(config => config.name === 'integrations/testing-library')) return configs\n\n const playwrightConfigs = configs.filter(config => config.name === 'integrations/playwright')\n\n return [\n ...configs,\n ...playwrightConfigs.map(config => ({\n files: config.files,\n ...(config.ignores ? { ignores: config.ignores } : {}),\n name: 'eslint-config-basic/playwright-testing-library',\n settings: { 'testing-library/utils-module': 'off' }\n }))\n ]\n}\n\nconst createFormattingConfig = (formatting: EslintConfigOptions['formatting']): FlatConfigArray => {\n if (!formatting) return []\n\n return [{\n files: ['**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx,astro,vue,svelte}'],\n name: 'eslint-config-basic/formatting',\n rules: {\n ...(formatting.arrowParens ? { '@stylistic/arrow-parens': ['warn', formatting.arrowParens] } : {}),\n ...(formatting.commaDangle ? { '@stylistic/comma-dangle': ['warn', formatting.commaDangle] } : {}),\n ...(formatting.quotes ? { '@stylistic/quotes': ['warn', formatting.quotes, { avoidEscape: true }] } : {}),\n ...(formatting.semi === undefined ? {} : { '@stylistic/semi': ['warn', formatting.semi ? 'always' : 'never'] })\n }\n }]\n}\n\nconst ESLINT_CONFIG_FILENAMES = [\n 'eslint.config.js',\n 'eslint.config.cjs',\n 'eslint.config.mjs',\n 'eslint.config.ts',\n 'eslint.config.cts',\n 'eslint.config.mts'\n]\n\n// A direct defineConfig() call retains the eslint.config.* frame in Node's\n// stack. Prefer that location over cwd because editor ESLint processes may be\n// launched from outside the project.\nconst findConfigRootFromStack = (stack: string | undefined = new Error().stack): string | undefined => {\n if (!stack) return undefined\n\n for (const line of stack.split('\\n')) {\n const configFilename = ESLINT_CONFIG_FILENAMES.find(filename => line.includes(filename))\n\n if (!configFilename) continue\n\n const filenameStart = line.indexOf(configFilename)\n const fileUrlStart = line.lastIndexOf('file://', filenameStart)\n const windowsPathStart = line.slice(0, filenameStart).search(/[A-Za-z]:[\\\\/]/)\n const absolutePathStart = line.indexOf('/')\n let configPathStart = absolutePathStart\n\n if (windowsPathStart >= 0) configPathStart = windowsPathStart\n\n if (fileUrlStart >= 0) configPathStart = fileUrlStart\n\n try {\n if (configPathStart < 0) continue\n\n const configPath = line.slice(configPathStart, filenameStart + configFilename.length)\n\n return dirname(configPath.startsWith('file:') ? fileURLToPath(configPath) : configPath)\n } catch {\n // Ignore malformed or non-local stack URLs and retain the cwd fallback.\n }\n }\n\n return undefined\n}\n\nconst resolveConfigSetup = (options: EslintConfigOptions | undefined) => {\n const {\n autoFrameworks = true,\n detectRootDir,\n optionMergeStrategy = 'merge',\n preset: requestedPreset,\n root,\n tsconfigRootDir\n } = options ?? {}\n\n const implicitRootDir = root ?? detectRootDir ?? tsconfigRootDir ?? findConfigRootFromStack()\n\n return {\n autoFrameworks,\n detectRootDir: implicitRootDir,\n optionMergeStrategy,\n requestedPreset\n }\n}\n\nconst resolveUniqueLibraries = (\n libraries: Library[],\n tailwind: EslintConfigOptions['tailwind']\n): Library[] => {\n const uniqueLibraries = [...new Set(libraries)]\n\n if (tailwind === false) return uniqueLibraries.filter(library => library !== Library.Tailwind)\n\n if (!tailwind) return uniqueLibraries\n\n return [...new Set([...uniqueLibraries, Library.Tailwind])]\n}\n\nconst resolvePresetMeta = (\n requestedPreset: EslintConfigOptions['preset'],\n detected: EslintConfigOptions,\n autoFrameworks: boolean\n) => {\n const preset = requestedPreset ?? detected.preset\n const presetDefaults = preset ? resolvePreset(resolveEnumValue(Object.values(Preset), preset)) : {}\n const frameworkDefaults = autoFrameworks ? createDetectedFrameworkFlags(detected.detectedFrameworks) : {}\n\n return { frameworkDefaults, preset, presetDefaults }\n}\n\nconst resolveConfiguredProjects = (\n detected: EslintConfigOptions,\n options: EslintConfigOptions | undefined\n): Record<string, EslintConfigOptions> => ({\n ...(detected.projects ?? {}),\n ...(options?.projects ?? {})\n})\n\nconst resolveBucketDefaults = (detected: EslintConfigOptions) => ({\n detectedExtensions: detected.extensions ?? [],\n detectedFormats: detected.formats ?? [],\n detectedLibraries: detected.libraries ?? [],\n detectedTesting: detected.testing ?? [],\n detectedTools: detected.tools ?? []\n})\n\nconst scopeWorkspaceDetection = (\n detected: EslintConfigOptions,\n isWorkspace: boolean\n): EslintConfigOptions => isWorkspace ?\n {\n ...detected,\n detectedFrameworks: [],\n libraries: [],\n nextMode: undefined,\n runtime: Runtime.Universal\n } :\n detected\n\nconst resolveDetectedOptions = (\n detectRootDir: string | undefined,\n detection: EslintConfigOptions['detection'],\n requestedPreset: EslintConfigOptions['preset']\n): EslintConfigOptions => {\n const rawDetected = detectProjectOptions(detectRootDir)\n\n const shouldDetectProjects = requestedPreset === Preset.Monorepo ||\n rawDetected.preset === Preset.Monorepo\n\n const detected = applyDetectionControls(rawDetected, detection, { projects: shouldDetectProjects })\n const hasDetectedProjects = Object.keys(detected.projects ?? {}).length > 0\n\n // Root devDependencies in a workspace commonly contain frameworks and\n // libraries used by only one package. Keep those detections package-scoped;\n // explicit root options still apply normally.\n return scopeWorkspaceDetection(detected, hasDetectedProjects)\n}\n\nconst resolveNextModeValue = (\n options: EslintConfigOptions | undefined,\n presetDefaults: Partial<EslintConfigOptions>,\n detected: EslintConfigOptions\n): NextMode => resolveEnumValue(\n Object.values(NextMode), options?.nextMode ?? presetDefaults.nextMode ?? detected.nextMode ?? NextMode.Pages\n)\n\nconst resolveRuntimeValue = (\n options: EslintConfigOptions | undefined,\n presetDefaults: Partial<EslintConfigOptions>,\n detected: EslintConfigOptions,\n usePresetRuntime: boolean\n): Runtime => resolveEnumValue(Object.values(Runtime),\n options?.runtime ??\n (usePresetRuntime ? presetDefaults.runtime : undefined) ??\n detected.runtime ??\n Runtime.Universal)\n\nconst resolveSettingsValue = (\n options: EslintConfigOptions | undefined,\n detected: EslintConfigOptions\n): Setting[] => (options?.settings ?? detected.settings ?? [])\n .map(value => resolveEnumValue(Object.values(Setting), value))\n\nconst resolveTypescriptValue = (\n options: EslintConfigOptions | undefined,\n presetDefaults: Partial<EslintConfigOptions>,\n detected: EslintConfigOptions\n): EslintConfigOptions['typescript'] => options?.typescript ?? presetDefaults.typescript ?? detected.typescript ?? false\n\nconst needsReactAutoAdd = (\n frameworks: NonNullable<EslintConfigOptions['frameworks']>\n): boolean => Boolean(\n frameworks.next ??\n frameworks.expo ??\n frameworks['react-router'] ??\n (frameworks['tanstack-start'] && !frameworks.solid)\n) && !frameworks.react\n\nconst applyFrameworkImpliedDeps = (\n frameworks: NonNullable<EslintConfigOptions['frameworks']>\n): NonNullable<EslintConfigOptions['frameworks']> => {\n const result = { ...frameworks }\n\n if (needsReactAutoAdd(result)) result.react = true\n\n if (result.slidev && !result.vue) result.vue = true\n\n if (result.nuxt && !result.vue) result.vue = true\n\n return result\n}\n\nconst buildIgnoresConfig = (\n useDefaultIgnores: boolean,\n useGeneratedCodeIgnores: boolean,\n useGitignore: boolean,\n options: EslintConfigOptions | undefined,\n rootDir: string\n) => ({\n defaultIgnores: useDefaultIgnores ?\n [{\n ignores: [...DEFAULT_IGNORES, ...(useGeneratedCodeIgnores ? GENERATED_CODE_IGNORES : [])],\n name: 'eslint-config-basic/default-ignores'\n } as TSESLint.FlatConfig.Config] :\n [],\n gitignoreConfig: useGitignore ? createGitignoreConfig(rootDir) : [] as FlatConfigArray,\n userIgnores: options?.ignores?.length ?\n [{\n ignores: options.ignores,\n name: 'eslint-config-basic/ignores'\n } as TSESLint.FlatConfig.Config] :\n []\n})\n\ninterface FrameworkResolutionContext {\n hasReact: boolean\n hasSolid: boolean\n hasSvelte: boolean\n hasVue: boolean\n runtime: Runtime\n tsconfigRootDir?: string\n typeChecked?: boolean\n}\n\nconst FRAMEWORK_EXTRA_OPTS: Partial<Record<string, (ctx: FrameworkResolutionContext) => FrameworkOptions>> = {\n astro: ctx => ({\n hasReact: ctx.hasReact,\n hasSolid: ctx.hasSolid,\n hasSvelte: ctx.hasSvelte,\n hasVue: ctx.hasVue,\n tsconfigRootDir: ctx.tsconfigRootDir,\n typeChecked: ctx.typeChecked\n }),\n hono: ctx => ({ runtime: ctx.runtime }),\n slidev: ctx => ({ runtime: ctx.runtime }),\n vite: ctx => ({ runtime: ctx.runtime })\n}\n\nconst resolveEnabledFrameworks = async (\n frameworks: NonNullable<EslintConfigOptions['frameworks']>,\n ctx: FrameworkResolutionContext\n): Promise<Record<string, FlatConfigArray>> => {\n const entries = await Promise.all(\n (Object.entries(frameworks) as [DetectedFrameworkName, ImportedFramework][])\n .filter((entry): entry is [DetectedFrameworkName, ImportedFramework] => Boolean(entry[1]))\n .map(([name, value]) => resolveFramework(name, value, FRAMEWORK_EXTRA_OPTS[name]?.(ctx))\n .then(config => [name, config] as const))\n )\n\n return Object.fromEntries(entries)\n}\n\ninterface BuildConfigsParams {\n astroOptions: { hasReact: boolean, hasSolid: boolean, hasSvelte: boolean, hasVue: boolean, typeChecked?: boolean }\n defaultIgnores: TSESLint.FlatConfig.Config[]\n gitignoreConfig: FlatConfigArray\n nextMode: NextMode\n resolvedFrameworks: NonNullable<EslintConfigOptions['frameworks']>\n resolvedTypescript: false | (TypeScriptOptions & { mode: Exclude<TypeScriptMode, 'off'> })\n rootDir: string\n runtime: Runtime\n runtimeCoreConfig: FlatConfigArray\n tailwindOptions: TailwindOptions | undefined\n formatting: EslintConfigOptions['formatting']\n testingFiles: EslintConfigOptions['testingFiles']\n tsconfigRootDir: string | undefined\n uniqueExtensions: Extension[]\n uniqueFormats: Format[]\n uniqueLibraries: Library[]\n uniqueTesting: Testing[]\n uniqueTools: Tool[]\n userIgnores: TSESLint.FlatConfig.Config[]\n}\n\nconst buildEslintConfigs = async (params: BuildConfigsParams): Promise<FlatConfigArray> => {\n const {\n astroOptions, defaultIgnores, gitignoreConfig, nextMode, resolvedFrameworks,\n resolvedTypescript, rootDir, runtime, runtimeCoreConfig, tailwindOptions,\n formatting, testingFiles, tsconfigRootDir, uniqueExtensions, uniqueFormats, uniqueLibraries,\n uniqueTesting, uniqueTools, userIgnores\n } = params\n\n const { hasReact, hasSolid, hasSvelte, hasVue, typeChecked } = astroOptions\n\n const fw = await resolveEnabledFrameworks(\n resolvedFrameworks, { hasReact, hasSolid, hasSvelte, hasVue, runtime, tsconfigRootDir, typeChecked }\n )\n\n const get = (name: string): FlatConfigArray => fw[name] ?? []\n\n const typescriptConfigs = resolvedTypescript ?\n createTypescriptConfig({\n ...resolvedTypescript,\n tsconfigRootDir: resolvedTypescript.tsconfigRootDir ?? tsconfigRootDir\n }) :\n []\n\n const untypedTypescriptConfigs = typescriptConfigs.filter(\n config => config.name === 'eslint-config-typescript/untyped-files'\n )\n\n const typedTypescriptConfigs = typescriptConfigs.filter(\n config => config.name !== 'eslint-config-typescript/untyped-files'\n )\n\n return [\n ...defaultIgnores,\n ...userIgnores,\n ...gitignoreConfig,\n ...(tsconfigRootDir ?\n [{\n languageOptions: { parserOptions: { tsconfigRootDir } },\n name: 'eslint-config-basic/tsconfig-root-dir'\n }] :\n []),\n {\n files: ['**/*.cjs', '**/*.cts'],\n languageOptions: {\n globals: {\n __dirname: 'readonly',\n __filename: 'readonly',\n exports: 'readonly',\n module: 'readonly',\n require: 'readonly'\n },\n sourceType: 'commonjs'\n },\n name: 'eslint-config-basic/commonjs'\n },\n ...runtimeCoreConfig,\n ...(hasReact ? get('react') : []),\n ...get('next'),\n ...get('expo'),\n ...get('nest'),\n ...get('hono'),\n ...get('vue'),\n ...get('svelte'),\n ...get('solid'),\n ...get('angular'),\n ...get('qwik'),\n ...get('react-router'),\n ...get('tanstack-start'),\n ...get('nuxt'),\n ...get('preact'),\n ...get('lit'),\n ...get('slidev'),\n ...get('vite'),\n ...typedTypescriptConfigs,\n ...get('astro'),\n ...(resolvedFrameworks.next && nextMode === NextMode.AppRouter ?\n [{\n files: ['app/**/*.{ts,tsx}', 'src/**/*.{ts,tsx}'],\n name: 'eslint-config-next/app-router-overrides',\n rules: { '@next/next/no-html-link-for-pages': 'off' }\n } as TSESLint.FlatConfig.Config] :\n []),\n ...withTestingCoexistence(applyTestingFileOverrides(\n await getIntegrationConfigs(\n uniqueLibraries, uniqueTools, uniqueTesting, uniqueFormats, uniqueExtensions\n ),\n testingFiles\n )),\n ...(resolvedFrameworks.next ?\n [{\n files: ['next-env.d.ts'],\n name: 'eslint-config-next/generated-declaration',\n rules: {\n '@stylistic/quotes': 'off',\n '@stylistic/semi': 'off'\n }\n } as TSESLint.FlatConfig.Config] :\n []),\n {\n files: [\n '**/*.{test,spec}.{js,mjs,cjs,jsx,ts,mts,cts,tsx}',\n '**/{test,tests,__tests__}/**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx}'\n ],\n name: 'eslint-config-basic/test-file-overrides',\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n 'no-use-before-define': 'off'\n }\n },\n {\n files: getCliEntryFiles(rootDir),\n name: 'eslint-config-basic/scripts-overrides',\n rules: {\n 'n/no-unpublished-import': 'off',\n 'n/no-process-exit': 'off',\n 'no-console': 'off'\n }\n },\n ...(tailwindOptions ? [buildTailwindSettingsConfig(tailwindOptions)] : []),\n ...untypedTypescriptConfigs,\n ...createFormattingConfig(formatting),\n ...(await getPrettierConfig(uniqueTools))\n ]\n}\n\ninterface EslintDebugInfo {\n autoFrameworks: boolean\n detectRootDir: string | undefined\n nextMode: NextMode\n optionMergeStrategy: 'merge' | 'replace'\n preset: EslintConfigOptions['preset']\n resolvedFrameworks: NonNullable<EslintConfigOptions['frameworks']>\n resolvedTypescript: BuildConfigsParams['resolvedTypescript']\n runtime: Runtime\n tsconfigRootDir: string | undefined\n uniqueExtensions: Extension[]\n uniqueFormats: Format[]\n uniqueLibraries: Library[]\n uniqueTesting: Testing[]\n uniqueTools: Tool[]\n}\n\nconst logEslintDebug = ({\n autoFrameworks,\n detectRootDir,\n nextMode,\n optionMergeStrategy,\n preset,\n resolvedFrameworks,\n resolvedTypescript,\n runtime,\n tsconfigRootDir,\n uniqueExtensions,\n uniqueFormats,\n uniqueLibraries,\n uniqueTesting,\n uniqueTools\n}: EslintDebugInfo) => {\n if (!process.env.ESLINT_BASIC_DEBUG) return\n\n process.stdout.write(`[ESLint Basic] Resolved options: ${JSON.stringify({\n autoFrameworks,\n detectRootDir: detectRootDir ?? process.cwd(),\n extensions: uniqueExtensions,\n formats: uniqueFormats,\n frameworks: Object.entries(resolvedFrameworks)\n .filter(([, value]) => Boolean(value))\n .map(([key]) => key),\n libraries: uniqueLibraries,\n nextMode,\n optionMergeStrategy,\n preset,\n runtime,\n testing: uniqueTesting,\n tools: uniqueTools,\n tsconfigRootDir,\n typescript: resolvedTypescript ? resolvedTypescript.mode : false\n }, null, 2)}\\n`)\n}\n\nconst emitAstroDoctorWarning = (\n extensions: Extension[],\n frameworks: Record<string, unknown>\n): void => {\n if (!extensions.includes(Extension.AstroDoctor) || frameworks.astro) return\n\n process.emitWarning(\n '[eslint-config-basic] Warning: Astro Doctor is enabled without the Astro framework config. ' +\n 'Enable `frameworks: { astro: true }` or remove the `astro-doctor` feature.'\n )\n}\n\n/**\n * Portable public result type returned by the Basic config composer.\n *\n * Keeping this as a package-owned interface prevents TypeScript declaration\n * inference from exposing pnpm-internal `typescript-eslint` paths in consumer\n * `eslint.config.js` files.\n */\nexport interface EslintConfigArray extends FlatConfigArray {\n length: number\n}\n\ntype ConfigComposer = (\n options?: EslintConfigOptions,\n ...extraConfigs: ConfigInput[]\n) => Promise<EslintConfigArray>\n\nconst resolveProjectConfigs = async (\n configuredProjects: Record<string, EslintConfigOptions>,\n projectDefaults: EslintConfigOptions['projectDefaults'],\n detectRootDir: string | undefined,\n autoFrameworks: boolean | undefined,\n composeConfig: ConfigComposer\n) => Promise.all(\n Object.entries(configuredProjects).map(async ([projectPath, projectOptions]) => {\n const projectRoot = join(detectRootDir ?? process.cwd(), projectPath)\n const inheritedOptions = mergeProjectOptions(projectDefaults ?? {}, projectOptions)\n\n const scopedConfigs = await composeConfig({\n autoFrameworks,\n ...inheritedOptions,\n projectDefaults: undefined,\n projects: undefined,\n root: inheritedOptions.root ?? inheritedOptions.detectRootDir ?? projectRoot\n })\n\n return scopedConfigs.map(config => config.name === 'eslint-config/gitignore' ? config : scopeConfigToProject(config, projectPath))\n })\n)\n\nconst resolveInheritedUntypedFiles = (typescript: EslintConfigOptions['typescript']): EslintConfigOptions => (\n typeof typescript === 'object' && typescript.untypedFiles !== undefined ?\n { typescript: { untypedFiles: typescript.untypedFiles } } :\n {}\n)\n\nconst resolveInheritedProjectDefaults = (\n options: EslintConfigOptions | undefined\n): EslintConfigOptions['projectDefaults'] => mergeProjectOptions(\n {\n ...(options?.detection === undefined ? {} : { detection: options.detection }),\n ...(options?.tailwind === undefined ? {} : { tailwind: options.tailwind }),\n ...(options?.formatting === undefined ? {} : { formatting: options.formatting }),\n ...resolveInheritedUntypedFiles(options?.typescript)\n },\n options?.projectDefaults ?? {}\n)\n\nconst getPluginNameFromRule = (\n ruleName: string,\n availablePluginNames: Iterable<string>\n): string | undefined => {\n const segments = ruleName.split('/')\n\n if (segments.length < 2) return undefined\n\n const registeredPrefix = [...availablePluginNames]\n .filter(pluginName => ruleName.startsWith(`${pluginName}/`))\n .sort((left, right) => right.length - left.length)[0]\n\n if (registeredPrefix) return registeredPrefix\n\n return ruleName.startsWith('@') && segments.length > 2 ?\n segments.slice(0, 2).join('/') :\n segments[0]\n}\n\n/**\n * Copies already-loaded plugin objects onto rule blocks that reference them.\n * ESLint 10 validates plugin availability per effective config object, while\n * feature packs often keep plugin setup and consumer overrides separate.\n */\nexport const attachReferencedPlugins = (configs: FlatConfigArray): FlatConfigArray => {\n const availablePlugins = new Map<string, NonNullable<TSESLint.FlatConfig.Config['plugins']>[string]>()\n const ambiguousPluginNames = new Set<string>()\n\n for (const config of configs) {\n for (const [pluginName, plugin] of Object.entries(config.plugins ?? {})) {\n const existingPlugin = availablePlugins.get(pluginName)\n\n if (existingPlugin && existingPlugin !== plugin) {\n availablePlugins.delete(pluginName)\n\n ambiguousPluginNames.add(pluginName)\n } else if (!ambiguousPluginNames.has(pluginName)) {\n availablePlugins.set(pluginName, plugin)\n }\n }\n }\n\n return configs.map(config => {\n const requiredPlugins = new Set(\n Object.keys(config.rules ?? {})\n .map(ruleName => getPluginNameFromRule(ruleName, availablePlugins.keys()))\n .filter((pluginName): pluginName is string => pluginName !== undefined)\n )\n\n const missingPluginEntries = [...requiredPlugins].flatMap(pluginName => {\n const plugin = availablePlugins.get(pluginName)\n\n return !Object.hasOwn(config.plugins ?? {}, pluginName) && plugin ?\n [[pluginName, plugin] as const] :\n []\n })\n\n if (missingPluginEntries.length === 0) return config\n\n return {\n ...config,\n plugins: {\n ...config.plugins,\n ...Object.fromEntries(missingPluginEntries)\n }\n }\n })\n}\n\nconst getConfigsParams = (\n options: EslintConfigOptions | undefined,\n rootDir: string,\n runtime: Runtime,\n uniqueLibraries: Library[],\n uniqueSettings: Setting[],\n resolvedFrameworks: NonNullable<EslintConfigOptions['frameworks']>\n) => {\n const hasReact = !!resolvedFrameworks.react\n const hasVue = !!resolvedFrameworks.vue\n const hasSvelte = !!resolvedFrameworks.svelte\n const hasSolid = !!resolvedFrameworks.solid\n const useGitignore = !uniqueSettings.includes(Setting.NoGitignore)\n const useDefaultIgnores = !uniqueSettings.includes(Setting.NoDefaultIgnores)\n const useGeneratedCodeIgnores = !uniqueSettings.includes(Setting.NoGeneratedCodeIgnores)\n\n const tailwindOptions = uniqueLibraries.includes(Library.Tailwind) ?\n resolveTailwindOptions(rootDir, options?.tailwind) :\n undefined\n\n const runtimeCoreConfig = runtime === Runtime.Universal ? coreConfig : createCoreConfig(runtime)\n\n const { defaultIgnores, gitignoreConfig, userIgnores } = buildIgnoresConfig(\n useDefaultIgnores, useGeneratedCodeIgnores, useGitignore, options, rootDir\n )\n\n return {\n astroOptions: { hasReact, hasSolid, hasSvelte, hasVue },\n defaultIgnores,\n gitignoreConfig,\n runtimeCoreConfig,\n tailwindOptions,\n userIgnores\n }\n}\n\n/**\n * Generates the ESLint configuration array, applying configurations\n * and integration settings based on the input configuration.\n *\n * @param {EslintConfigOptions} options - Configuration and integration settings\n * @param {ConfigInput[]} extraConfigs - Local flat-config overrides appended after generated config\n * @returns {FlatConfigArray} The final ESLint configuration array\n */\nexport const defineConfig: ConfigComposer = async function defineConfig(\n options?: EslintConfigOptions,\n ...extraConfigs: ConfigInput[]\n): Promise<EslintConfigArray> {\n const {\n detection,\n extensions: optExtensions,\n formats: optFormats,\n frameworks: optFrameworks,\n libraries: optLibraries,\n strict: optStrict,\n testing: optTesting,\n tools: optTools,\n tsconfigRootDir: optTsconfigRootDir,\n workspacePrefixes\n } = options ?? {}\n\n const { autoFrameworks, detectRootDir, optionMergeStrategy, requestedPreset } = resolveConfigSetup(options)\n const detected = resolveDetectedOptions(detectRootDir, detection, requestedPreset)\n const { frameworkDefaults, preset, presetDefaults } = resolvePresetMeta(requestedPreset, detected, autoFrameworks)\n const configuredProjects = resolveConfiguredProjects(detected, options)\n\n const {\n detectedExtensions,\n detectedFormats,\n detectedLibraries,\n detectedTesting,\n detectedTools\n } = resolveBucketDefaults(detected)\n\n // NOTE: these must be computed unconditionally (not via destructuring defaults)\n // so that `optionMergeStrategy: 'merge'` actually unions explicit values with\n // detected/preset values. Destructuring defaults are skipped whenever the\n // option is provided, which silently turned 'merge' into 'replace'.\n const configuredExtensions = mergeOptionalBucket(\n 'extensions', detectedExtensions, presetDefaults.extensions, optExtensions, options, optionMergeStrategy\n ).map(value => resolveEnumValue(OPTIONAL_BUCKETS.extensions, value))\n\n const formats = mergeOptionalBucket(\n 'formats', detectedFormats, presetDefaults.formats, optFormats, options, optionMergeStrategy\n ).map(value => resolveEnumValue(OPTIONAL_BUCKETS.formats, value))\n\n const frameworks = mergeFrameworkOption(\n frameworkDefaults, presetDefaults.frameworks, optFrameworks, optionMergeStrategy\n )\n\n const libraries = mergeOptionalBucket(\n 'libraries', detectedLibraries, presetDefaults.libraries, optLibraries, options, optionMergeStrategy\n ).map(value => resolveEnumValue(OPTIONAL_BUCKETS.libraries, value))\n\n const nextMode = resolveNextModeValue(options, presetDefaults, detected)\n const runtime = resolveRuntimeValue(options, presetDefaults, detected, requestedPreset !== undefined)\n const settings = resolveSettingsValue(options, detected)\n const strict = getStrictMode(optStrict, presetDefaults.strict)\n\n const testing = mergeOptionalBucket(\n 'testing', detectedTesting, presetDefaults.testing, optTesting, options, optionMergeStrategy\n ).map(value => resolveEnumValue(OPTIONAL_BUCKETS.testing, value))\n\n const tools = mergeOptionalBucket(\n 'tools', detectedTools, presetDefaults.tools, optTools, options, optionMergeStrategy\n ).map(value => resolveEnumValue(OPTIONAL_BUCKETS.tools, value))\n\n const typescript = resolveTypescriptValue(options, presetDefaults, detected)\n const resolvedTypescript = resolveTypescriptOptions(typescript)\n const rootDir = detectRootDir ?? process.cwd()\n const tsconfigRootDir = resolveTsconfigRootDir(rootDir, typescript, optTsconfigRootDir)\n const extensions = applyStrictProfileDefaults(configuredExtensions, strict)\n const resolvedFrameworks = applyFrameworkImpliedDeps({ ...frameworks })\n const uniqueLibraries = resolveUniqueLibraries(libraries, options?.tailwind)\n const uniqueTesting = [...new Set(testing)]\n const uniqueFormats = [...new Set(formats)]\n const uniqueTools = [...new Set(tools)]\n const uniqueExtensions = [...new Set(extensions)]\n const uniqueSettings = [...new Set(settings)]\n\n emitAstroDoctorWarning(uniqueExtensions, resolvedFrameworks)\n\n const params = getConfigsParams(options, rootDir, runtime, uniqueLibraries, uniqueSettings, resolvedFrameworks)\n\n const configs = await buildEslintConfigs({\n astroOptions: {\n ...params.astroOptions,\n typeChecked: resolvedTypescript ? resolvedTypescript.mode !== 'syntax' : false\n },\n defaultIgnores: params.defaultIgnores,\n gitignoreConfig: params.gitignoreConfig,\n nextMode,\n resolvedFrameworks,\n resolvedTypescript,\n rootDir,\n runtime,\n runtimeCoreConfig: params.runtimeCoreConfig,\n tailwindOptions: params.tailwindOptions,\n formatting: options?.formatting,\n testingFiles: options?.testingFiles,\n tsconfigRootDir,\n uniqueExtensions,\n uniqueFormats,\n uniqueLibraries,\n uniqueTesting,\n uniqueTools,\n userIgnores: params.userIgnores\n })\n\n logEslintDebug({\n autoFrameworks,\n detectRootDir,\n nextMode,\n optionMergeStrategy,\n preset,\n resolvedFrameworks,\n resolvedTypescript,\n runtime,\n tsconfigRootDir,\n uniqueExtensions,\n uniqueFormats,\n uniqueLibraries,\n uniqueTesting,\n uniqueTools\n })\n\n const projectConfigs = await resolveProjectConfigs(\n configuredProjects,\n resolveInheritedProjectDefaults(options),\n detectRootDir,\n options?.autoFrameworks,\n defineConfig\n )\n\n // Merge workspace import group into any existing simple-import-sort/imports rules\n // so framework-specific group ordering (e.g. React-first) is preserved.\n const allConfigs = [\n ...configs,\n ...projectConfigs.flat(),\n ...flattenConfigInputs(extraConfigs)\n ]\n\n const patchedConfigs = workspacePrefixes?.length ?\n patchImportGroups(allConfigs, workspacePrefixes) :\n allConfigs\n\n const finalConfig = attachReferencedPlugins(applyStrictMode(patchedConfigs, strict))\n\n return attachDefineConfigMetadata(finalConfig, { extraConfigs, options, root: rootDir })\n}\n"],"mappings":"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","names":["coreConfig","createCoreConfig","createGitignoreConfig","detectProjectOptions","Extension","Library","NextMode","Preset","Runtime","Setting","Testing","defineConfig"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@santi020k/eslint-config-basic",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"provenance": true
|
|
@@ -37,66 +37,66 @@
|
|
|
37
37
|
"basic-eslint": "./dist/cli.js"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@typescript-eslint/utils": "^8.
|
|
40
|
+
"@typescript-eslint/utils": "^8.71.1",
|
|
41
41
|
"semver": "^7.8.5",
|
|
42
|
-
"@santi020k/eslint-config-core": "^3.
|
|
43
|
-
"@santi020k/eslint-config-typescript": "^3.1.
|
|
42
|
+
"@santi020k/eslint-config-core": "^3.2.0",
|
|
43
|
+
"@santi020k/eslint-config-typescript": "^3.1.6"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/node": "^26.6.
|
|
47
|
-
"publint": "^0.3.
|
|
46
|
+
"@types/node": "^26.6.4",
|
|
47
|
+
"publint": "^0.3.25",
|
|
48
48
|
"tsup": "^8.5.1",
|
|
49
49
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
50
|
-
"@santi020k/eslint-config-
|
|
51
|
-
"@santi020k/eslint-config-
|
|
52
|
-
"@santi020k/eslint-config-
|
|
53
|
-
"@santi020k/eslint-config-
|
|
54
|
-
"@santi020k/eslint-config-formats": "^3.1.
|
|
55
|
-
"@santi020k/eslint-config-
|
|
56
|
-
"@santi020k/eslint-config-
|
|
57
|
-
"@santi020k/eslint-config-
|
|
58
|
-
"@santi020k/eslint-config-
|
|
59
|
-
"@santi020k/eslint-config-
|
|
60
|
-
"@santi020k/eslint-config-
|
|
61
|
-
"@santi020k/eslint-config-
|
|
62
|
-
"@santi020k/eslint-config-
|
|
63
|
-
"@santi020k/eslint-config-react
|
|
64
|
-
"@santi020k/eslint-config-
|
|
65
|
-
"@santi020k/eslint-config-
|
|
66
|
-
"@santi020k/eslint-config-
|
|
67
|
-
"@santi020k/eslint-config-
|
|
68
|
-
"@santi020k/eslint-config-
|
|
69
|
-
"@santi020k/eslint-config-
|
|
70
|
-
"@santi020k/eslint-config-
|
|
71
|
-
"@santi020k/eslint-config-
|
|
72
|
-
"@santi020k/eslint-config-
|
|
50
|
+
"@santi020k/eslint-config-angular": "^3.1.3",
|
|
51
|
+
"@santi020k/eslint-config-astro": "^3.1.5",
|
|
52
|
+
"@santi020k/eslint-config-expo": "^3.1.3",
|
|
53
|
+
"@santi020k/eslint-config-extensions": "^3.1.4",
|
|
54
|
+
"@santi020k/eslint-config-formats": "^3.1.4",
|
|
55
|
+
"@santi020k/eslint-config-hono": "^3.1.3",
|
|
56
|
+
"@santi020k/eslint-config-lit": "^3.1.3",
|
|
57
|
+
"@santi020k/eslint-config-libraries": "^3.1.4",
|
|
58
|
+
"@santi020k/eslint-config-nest": "^3.1.3",
|
|
59
|
+
"@santi020k/eslint-config-next": "^3.1.3",
|
|
60
|
+
"@santi020k/eslint-config-nuxt": "^3.1.3",
|
|
61
|
+
"@santi020k/eslint-config-preact": "^3.1.3",
|
|
62
|
+
"@santi020k/eslint-config-qwik": "^3.1.3",
|
|
63
|
+
"@santi020k/eslint-config-react": "^3.1.3",
|
|
64
|
+
"@santi020k/eslint-config-react-router": "^3.1.3",
|
|
65
|
+
"@santi020k/eslint-config-slidev": "^3.1.3",
|
|
66
|
+
"@santi020k/eslint-config-solid": "^3.1.3",
|
|
67
|
+
"@santi020k/eslint-config-svelte": "^3.1.3",
|
|
68
|
+
"@santi020k/eslint-config-tanstack-start": "^3.1.3",
|
|
69
|
+
"@santi020k/eslint-config-testing": "^3.1.4",
|
|
70
|
+
"@santi020k/eslint-config-tools": "^3.1.4",
|
|
71
|
+
"@santi020k/eslint-config-vite": "^3.1.3",
|
|
72
|
+
"@santi020k/eslint-config-vue": "^3.1.3"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"eslint": "^10.0.0",
|
|
76
76
|
"typescript": ">=5.0.0 <7.0.0",
|
|
77
|
-
"@santi020k/eslint-config-angular": "^3.1.
|
|
78
|
-
"@santi020k/eslint-config-astro": "^3.1.
|
|
79
|
-
"@santi020k/eslint-config-expo": "^3.1.
|
|
80
|
-
"@santi020k/eslint-config-extensions": "^3.1.
|
|
81
|
-
"@santi020k/eslint-config-formats": "^3.1.
|
|
82
|
-
"@santi020k/eslint-config-hono": "^3.1.
|
|
83
|
-
"@santi020k/eslint-config-lit": "^3.1.
|
|
84
|
-
"@santi020k/eslint-config-
|
|
85
|
-
"@santi020k/eslint-config-
|
|
86
|
-
"@santi020k/eslint-config-
|
|
87
|
-
"@santi020k/eslint-config-
|
|
88
|
-
"@santi020k/eslint-config-
|
|
89
|
-
"@santi020k/eslint-config-
|
|
90
|
-
"@santi020k/eslint-config-react
|
|
91
|
-
"@santi020k/eslint-config-
|
|
92
|
-
"@santi020k/eslint-config-
|
|
93
|
-
"@santi020k/eslint-config-
|
|
94
|
-
"@santi020k/eslint-config-
|
|
95
|
-
"@santi020k/eslint-config-
|
|
96
|
-
"@santi020k/eslint-config-
|
|
97
|
-
"@santi020k/eslint-config-
|
|
98
|
-
"@santi020k/eslint-config-
|
|
99
|
-
"@santi020k/eslint-config-
|
|
77
|
+
"@santi020k/eslint-config-angular": "^3.1.3",
|
|
78
|
+
"@santi020k/eslint-config-astro": "^3.1.5",
|
|
79
|
+
"@santi020k/eslint-config-expo": "^3.1.3",
|
|
80
|
+
"@santi020k/eslint-config-extensions": "^3.1.4",
|
|
81
|
+
"@santi020k/eslint-config-formats": "^3.1.4",
|
|
82
|
+
"@santi020k/eslint-config-hono": "^3.1.3",
|
|
83
|
+
"@santi020k/eslint-config-lit": "^3.1.3",
|
|
84
|
+
"@santi020k/eslint-config-libraries": "^3.1.4",
|
|
85
|
+
"@santi020k/eslint-config-nest": "^3.1.3",
|
|
86
|
+
"@santi020k/eslint-config-next": "^3.1.3",
|
|
87
|
+
"@santi020k/eslint-config-nuxt": "^3.1.3",
|
|
88
|
+
"@santi020k/eslint-config-preact": "^3.1.3",
|
|
89
|
+
"@santi020k/eslint-config-qwik": "^3.1.3",
|
|
90
|
+
"@santi020k/eslint-config-react": "^3.1.3",
|
|
91
|
+
"@santi020k/eslint-config-react-router": "^3.1.3",
|
|
92
|
+
"@santi020k/eslint-config-slidev": "^3.1.3",
|
|
93
|
+
"@santi020k/eslint-config-solid": "^3.1.3",
|
|
94
|
+
"@santi020k/eslint-config-svelte": "^3.1.3",
|
|
95
|
+
"@santi020k/eslint-config-tanstack-start": "^3.1.3",
|
|
96
|
+
"@santi020k/eslint-config-testing": "^3.1.4",
|
|
97
|
+
"@santi020k/eslint-config-tools": "^3.1.4",
|
|
98
|
+
"@santi020k/eslint-config-vite": "^3.1.3",
|
|
99
|
+
"@santi020k/eslint-config-vue": "^3.1.3"
|
|
100
100
|
},
|
|
101
101
|
"peerDependenciesMeta": {
|
|
102
102
|
"@santi020k/eslint-config-angular": {
|
|
@@ -184,7 +184,10 @@
|
|
|
184
184
|
"bugs": {
|
|
185
185
|
"url": "https://github.com/santi020k/eslint-config-basic/issues"
|
|
186
186
|
},
|
|
187
|
-
"author":
|
|
187
|
+
"author": {
|
|
188
|
+
"name": "santi020k",
|
|
189
|
+
"url": "https://santi020k.com"
|
|
190
|
+
},
|
|
188
191
|
"license": "MIT",
|
|
189
192
|
"scripts": {
|
|
190
193
|
"build": "tsup",
|