@ghettoddos/eslint-config 1.5.1 → 1.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/dist/index.d.ts +112 -5
- package/dist/index.js +125 -12
- package/package.json +6 -1
package/dist/index.d.ts
CHANGED
|
@@ -117,6 +117,41 @@ interface RuleOptions {
|
|
|
117
117
|
* @deprecated
|
|
118
118
|
*/
|
|
119
119
|
'block-spacing'?: Linter.RuleEntry<BlockSpacing>;
|
|
120
|
+
/**
|
|
121
|
+
* Check allowed dependencies between element types
|
|
122
|
+
* @see https://github.com/javierbrea/eslint-plugin-boundaries/blob/master/docs/rules/element-types.md
|
|
123
|
+
*/
|
|
124
|
+
'boundaries/element-types'?: Linter.RuleEntry<BoundariesElementTypes>;
|
|
125
|
+
/**
|
|
126
|
+
* Check entry point used for each element type
|
|
127
|
+
* @see https://github.com/javierbrea/eslint-plugin-boundaries/blob/master/docs/rules/entry-point.md
|
|
128
|
+
*/
|
|
129
|
+
'boundaries/entry-point'?: Linter.RuleEntry<BoundariesEntryPoint>;
|
|
130
|
+
/**
|
|
131
|
+
* Check allowed external dependencies by element type
|
|
132
|
+
* @see https://github.com/javierbrea/eslint-plugin-boundaries/blob/master/docs/rules/external.md
|
|
133
|
+
*/
|
|
134
|
+
'boundaries/external'?: Linter.RuleEntry<BoundariesExternal>;
|
|
135
|
+
/**
|
|
136
|
+
* Prevent importing ignored files from recognized elements
|
|
137
|
+
* @see https://github.com/javierbrea/eslint-plugin-boundaries/blob/master/docs/rules/no-ignored.md
|
|
138
|
+
*/
|
|
139
|
+
'boundaries/no-ignored'?: Linter.RuleEntry<[]>;
|
|
140
|
+
/**
|
|
141
|
+
* Prevent importing private elements of another element
|
|
142
|
+
* @see https://github.com/javierbrea/eslint-plugin-boundaries/blob/master/docs/rules/no-private.md
|
|
143
|
+
*/
|
|
144
|
+
'boundaries/no-private'?: Linter.RuleEntry<BoundariesNoPrivate>;
|
|
145
|
+
/**
|
|
146
|
+
* Prevent importing unknown elements from the known ones
|
|
147
|
+
* @see https://github.com/javierbrea/eslint-plugin-boundaries/blob/master/docs/rules/no-unknown.md
|
|
148
|
+
*/
|
|
149
|
+
'boundaries/no-unknown'?: Linter.RuleEntry<[]>;
|
|
150
|
+
/**
|
|
151
|
+
* Prevent creating files not recognized as any of the element types
|
|
152
|
+
* @see https://github.com/javierbrea/eslint-plugin-boundaries/blob/master/docs/rules/no-unknown-files.md
|
|
153
|
+
*/
|
|
154
|
+
'boundaries/no-unknown-files'?: Linter.RuleEntry<[]>;
|
|
120
155
|
/**
|
|
121
156
|
* Enforce consistent brace style for blocks
|
|
122
157
|
* @see https://eslint.org/docs/latest/rules/brace-style
|
|
@@ -5966,6 +6001,47 @@ type ArrowSpacing = [] | [{
|
|
|
5966
6001
|
}];
|
|
5967
6002
|
// ----- block-spacing -----
|
|
5968
6003
|
type BlockSpacing = [] | [("always" | "never")];
|
|
6004
|
+
// ----- boundaries/element-types -----
|
|
6005
|
+
type BoundariesElementTypes = [] | [{
|
|
6006
|
+
message?: string;
|
|
6007
|
+
default?: ("allow" | "disallow");
|
|
6008
|
+
rules?: ({
|
|
6009
|
+
[k: string]: unknown | undefined;
|
|
6010
|
+
} | {
|
|
6011
|
+
[k: string]: unknown | undefined;
|
|
6012
|
+
} | {
|
|
6013
|
+
[k: string]: unknown | undefined;
|
|
6014
|
+
})[];
|
|
6015
|
+
}];
|
|
6016
|
+
// ----- boundaries/entry-point -----
|
|
6017
|
+
type BoundariesEntryPoint = [] | [{
|
|
6018
|
+
message?: string;
|
|
6019
|
+
default?: ("allow" | "disallow");
|
|
6020
|
+
rules?: ({
|
|
6021
|
+
[k: string]: unknown | undefined;
|
|
6022
|
+
} | {
|
|
6023
|
+
[k: string]: unknown | undefined;
|
|
6024
|
+
} | {
|
|
6025
|
+
[k: string]: unknown | undefined;
|
|
6026
|
+
})[];
|
|
6027
|
+
}];
|
|
6028
|
+
// ----- boundaries/external -----
|
|
6029
|
+
type BoundariesExternal = [] | [{
|
|
6030
|
+
message?: string;
|
|
6031
|
+
default?: ("allow" | "disallow");
|
|
6032
|
+
rules?: ({
|
|
6033
|
+
[k: string]: unknown | undefined;
|
|
6034
|
+
} | {
|
|
6035
|
+
[k: string]: unknown | undefined;
|
|
6036
|
+
} | {
|
|
6037
|
+
[k: string]: unknown | undefined;
|
|
6038
|
+
})[];
|
|
6039
|
+
}];
|
|
6040
|
+
// ----- boundaries/no-private -----
|
|
6041
|
+
type BoundariesNoPrivate = [] | [{
|
|
6042
|
+
allowUncles?: boolean;
|
|
6043
|
+
message?: string;
|
|
6044
|
+
}];
|
|
5969
6045
|
// ----- brace-style -----
|
|
5970
6046
|
type BraceStyle = [] | [("1tbs" | "stroustrup" | "allman")] | [("1tbs" | "stroustrup" | "allman"), {
|
|
5971
6047
|
allowSingleLine?: boolean;
|
|
@@ -12893,7 +12969,7 @@ type Yoda = [] | [("always" | "never")] | [("always" | "never"), {
|
|
|
12893
12969
|
onlyEquality?: boolean;
|
|
12894
12970
|
}];
|
|
12895
12971
|
// Names of all the configs
|
|
12896
|
-
type ConfigNames = 'eslint-comments/rules' | 'formatter/setup' | 'imports/rules' | 'javascript/setup' | 'javascript/rules' | 'jsx/setup' | 'jsonc/setup' | 'jsonc/rules' | 'markdown/setup' | 'markdown/processor' | 'markdown/parser' | 'markdown/disables' | 'node/rules' | 'perfectionist/setup' | 'pnpm/package-json' | 'pnpm/pnpm-workspace-yaml' | 'react/setup' | 'react/rules' | 'sort/package-json' | 'stylistic/rules' | 'toml/setup' | 'toml/rules' | 'regexp/rules' | 'typescript/setup' | 'typescript/parser' | 'typescript/rules' | 'unicorn/rules' | 'unocss' | 'yaml/setup' | 'yaml/rules' | 'yaml/pnpm-workspace' | 'next/rules' | 'jsx-a11y/rules' | 'effector/setup' | 'effector/rules';
|
|
12972
|
+
type ConfigNames = 'eslint-comments/rules' | 'formatter/setup' | 'imports/rules' | 'javascript/setup' | 'javascript/rules' | 'jsx/setup' | 'jsonc/setup' | 'jsonc/rules' | 'markdown/setup' | 'markdown/processor' | 'markdown/parser' | 'markdown/disables' | 'node/rules' | 'perfectionist/setup' | 'pnpm/package-json' | 'pnpm/pnpm-workspace-yaml' | 'react/setup' | 'react/rules' | 'sort/package-json' | 'stylistic/rules' | 'toml/setup' | 'toml/rules' | 'regexp/rules' | 'typescript/setup' | 'typescript/parser' | 'typescript/rules' | 'unicorn/rules' | 'unocss' | 'yaml/setup' | 'yaml/rules' | 'yaml/pnpm-workspace' | 'next/rules' | 'jsx-a11y/rules' | 'effector/setup' | 'effector/rules' | 'fsd/setup' | 'fsd/public-api' | 'fsd/layers-slices';
|
|
12897
12973
|
//#endregion
|
|
12898
12974
|
//#region src/vendor/prettier-types.d.ts
|
|
12899
12975
|
/**
|
|
@@ -13180,6 +13256,27 @@ interface OptionsUnoCSS extends OptionsOverrides {
|
|
|
13180
13256
|
*/
|
|
13181
13257
|
strict?: boolean;
|
|
13182
13258
|
}
|
|
13259
|
+
interface OptionsFSDPublicApi extends OptionsOverrides {
|
|
13260
|
+
/**
|
|
13261
|
+
* Without SegmentsAPI / InnerAPI restrictions.
|
|
13262
|
+
* @default true
|
|
13263
|
+
*/
|
|
13264
|
+
lite?: boolean;
|
|
13265
|
+
}
|
|
13266
|
+
interface OptionsFSD {
|
|
13267
|
+
/**
|
|
13268
|
+
* FSD Public API rules.
|
|
13269
|
+
* @see https://github.com/feature-sliced/eslint-config/tree/master/rules/public-api
|
|
13270
|
+
* @default true
|
|
13271
|
+
*/
|
|
13272
|
+
publicApi?: boolean | OptionsFSDPublicApi;
|
|
13273
|
+
/**
|
|
13274
|
+
* FSD Layers slices rules.
|
|
13275
|
+
* @see https://github.com/feature-sliced/eslint-config/tree/master/rules/layers-slices
|
|
13276
|
+
* @default true
|
|
13277
|
+
*/
|
|
13278
|
+
layersSlices?: boolean | OptionsOverrides;
|
|
13279
|
+
}
|
|
13183
13280
|
interface OptionsConfig extends OptionsComponentExts, OptionsProjectType {
|
|
13184
13281
|
/**
|
|
13185
13282
|
* Enable gitignore support.
|
|
@@ -13303,6 +13400,13 @@ interface OptionsConfig extends OptionsComponentExts, OptionsProjectType {
|
|
|
13303
13400
|
* @default false
|
|
13304
13401
|
*/
|
|
13305
13402
|
pnpm?: boolean;
|
|
13403
|
+
/**
|
|
13404
|
+
* Enable FSD rules.
|
|
13405
|
+
*
|
|
13406
|
+
* @see https://feature-sliced.github.io/
|
|
13407
|
+
* @default false
|
|
13408
|
+
*/
|
|
13409
|
+
fsd?: boolean | OptionsFSD;
|
|
13306
13410
|
/**
|
|
13307
13411
|
* Use external formatters to format files.
|
|
13308
13412
|
*
|
|
@@ -13365,9 +13469,6 @@ declare const defaultPluginRenaming: {
|
|
|
13365
13469
|
* The merged ESLint configurations.
|
|
13366
13470
|
*/
|
|
13367
13471
|
declare function config(options?: OptionsConfig & Omit<TypedFlatConfigItem, 'files'>, ...userConfigs: Awaitable<TypedFlatConfigItem | TypedFlatConfigItem[] | FlatConfigComposer<any, any> | Linter.Config[]>[]): FlatConfigComposer<TypedFlatConfigItem, ConfigNames>;
|
|
13368
|
-
type ResolvedOptions<T> = T extends boolean ? never : NonNullable<T>;
|
|
13369
|
-
declare function resolveSubOptions<K extends keyof OptionsConfig>(options: OptionsConfig, key: K): ResolvedOptions<OptionsConfig[K]>;
|
|
13370
|
-
declare function getOverrides<K extends keyof OptionsConfig>(options: OptionsConfig, key: K): Partial<Linter.RulesRecord & RuleOptions>;
|
|
13371
13472
|
//#endregion
|
|
13372
13473
|
//#region src/configs/comments.d.ts
|
|
13373
13474
|
declare function comments(): Promise<TypedFlatConfigItem[]>;
|
|
@@ -13381,6 +13482,9 @@ declare function effector(options?: OptionsEffector): Promise<TypedFlatConfigIte
|
|
|
13381
13482
|
//#region src/configs/formatters.d.ts
|
|
13382
13483
|
declare function formatters(options?: OptionsFormatters | true, stylistic?: StylisticConfig): Promise<TypedFlatConfigItem[]>;
|
|
13383
13484
|
//#endregion
|
|
13485
|
+
//#region src/configs/fsd.d.ts
|
|
13486
|
+
declare function fsd(options?: OptionsFSD): Promise<TypedFlatConfigItem[]>;
|
|
13487
|
+
//#endregion
|
|
13384
13488
|
//#region src/configs/ignores.d.ts
|
|
13385
13489
|
declare function ignores(userIgnores?: string[]): Promise<TypedFlatConfigItem[]>;
|
|
13386
13490
|
//#endregion
|
|
@@ -13540,5 +13644,8 @@ declare function isPackageInScope(name: string): boolean;
|
|
|
13540
13644
|
declare function ensurePackages(packages: (string | undefined)[]): Promise<void>;
|
|
13541
13645
|
declare function isInEditorEnv(): boolean;
|
|
13542
13646
|
declare function isInGitHooksOrLintStaged(): boolean;
|
|
13647
|
+
type ResolvedOptions<T> = T extends boolean ? never : NonNullable<T>;
|
|
13648
|
+
declare function resolveSubOptions<C extends Record<string, any>, K extends keyof C>(options: C, key: K): ResolvedOptions<C[K]>;
|
|
13649
|
+
declare function getOverrides<C extends Record<string, any>, K extends keyof C>(options: C, key: K): Partial<Linter.RulesRecord & RuleOptions>;
|
|
13543
13650
|
//#endregion
|
|
13544
|
-
export { Awaitable, ConfigNames, GLOB_ALL_SRC, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVG, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, OptionsComponentExts, OptionsConfig, OptionsEffector, OptionsFiles, OptionsFormatters, OptionsHasTypeScript, OptionsIsInEditor, OptionsOverrides, OptionsProjectType, OptionsRegExp, OptionsStylistic, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, OptionsTypescript, OptionsUnicorn, OptionsUnoCSS, ResolvedOptions, Rules, StylisticConfig, StylisticConfigDefaults, StylisticOptions, TypedFlatConfigItem, combine, comments, config, config as default, defaultPluginRenaming, disables, effector, ensurePackages, formatters, getOverrides, ignores, imports, interopDefault, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsonc, jsx, jsxA11y, markdown, next, node, parserPlain, perfectionist, pnpm, react, regexp, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, toml, typescript, unicorn, unocss, yaml };
|
|
13651
|
+
export { Awaitable, ConfigNames, GLOB_ALL_SRC, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVG, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, OptionsComponentExts, OptionsConfig, OptionsEffector, OptionsFSD, OptionsFSDPublicApi, OptionsFiles, OptionsFormatters, OptionsHasTypeScript, OptionsIsInEditor, OptionsOverrides, OptionsProjectType, OptionsRegExp, OptionsStylistic, OptionsTypeScriptParserOptions, OptionsTypeScriptWithTypes, OptionsTypescript, OptionsUnicorn, OptionsUnoCSS, ResolvedOptions, Rules, StylisticConfig, StylisticConfigDefaults, StylisticOptions, TypedFlatConfigItem, combine, comments, config, config as default, defaultPluginRenaming, disables, effector, ensurePackages, formatters, fsd, getOverrides, ignores, imports, interopDefault, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsonc, jsx, jsxA11y, markdown, next, node, parserPlain, perfectionist, pnpm, react, regexp, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, toml, typescript, unicorn, unocss, yaml };
|
package/dist/index.js
CHANGED
|
@@ -215,6 +215,16 @@ function isInEditorEnv() {
|
|
|
215
215
|
function isInGitHooksOrLintStaged() {
|
|
216
216
|
return !!(process.env.GIT_PARAMS || process.env.VSCODE_GIT_COMMAND || process.env.npm_lifecycle_script?.startsWith("lint-staged"));
|
|
217
217
|
}
|
|
218
|
+
function resolveSubOptions(options, key) {
|
|
219
|
+
return typeof options[key] === "boolean" ? {} : options[key] || {};
|
|
220
|
+
}
|
|
221
|
+
function getOverrides(options, key) {
|
|
222
|
+
const sub = resolveSubOptions(options, key);
|
|
223
|
+
return {
|
|
224
|
+
...options.overrides?.[key],
|
|
225
|
+
..."overrides" in sub ? sub.overrides : {}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
218
228
|
|
|
219
229
|
//#endregion
|
|
220
230
|
//#region src/configs/effector.ts
|
|
@@ -404,6 +414,118 @@ async function formatters(options = {}, stylistic$1 = {}) {
|
|
|
404
414
|
return configs$1;
|
|
405
415
|
}
|
|
406
416
|
|
|
417
|
+
//#endregion
|
|
418
|
+
//#region src/configs/fsd.ts
|
|
419
|
+
const FS_LAYERS = [
|
|
420
|
+
"app",
|
|
421
|
+
"processes",
|
|
422
|
+
"pages",
|
|
423
|
+
"widgets",
|
|
424
|
+
"features",
|
|
425
|
+
"entities",
|
|
426
|
+
"shared"
|
|
427
|
+
];
|
|
428
|
+
const FS_SEGMENTS = [
|
|
429
|
+
"ui",
|
|
430
|
+
"model",
|
|
431
|
+
"lib",
|
|
432
|
+
"api",
|
|
433
|
+
"config",
|
|
434
|
+
"assets"
|
|
435
|
+
];
|
|
436
|
+
function getLowerLayers(layer) {
|
|
437
|
+
return FS_LAYERS.slice(FS_LAYERS.indexOf(layer) + 1);
|
|
438
|
+
}
|
|
439
|
+
function getUpperLayers(layer) {
|
|
440
|
+
return FS_LAYERS.slice(0, FS_LAYERS.indexOf(layer));
|
|
441
|
+
}
|
|
442
|
+
const FS_SLICED_LAYERS_REG = getUpperLayers("shared").join("|");
|
|
443
|
+
const FS_SEGMENTS_REG = [...FS_SEGMENTS, ...FS_SEGMENTS.map((seg) => `${seg}.*`)].join("|");
|
|
444
|
+
function getNotSharedLayersRules() {
|
|
445
|
+
return getUpperLayers("shared").map((layer) => ({
|
|
446
|
+
allow: getLowerLayers(layer),
|
|
447
|
+
from: layer
|
|
448
|
+
}));
|
|
449
|
+
}
|
|
450
|
+
const slicelessLayerRules = [{
|
|
451
|
+
allow: "shared",
|
|
452
|
+
from: "shared"
|
|
453
|
+
}, {
|
|
454
|
+
allow: "app",
|
|
455
|
+
from: "app"
|
|
456
|
+
}];
|
|
457
|
+
function getLayersBoundariesElements() {
|
|
458
|
+
return FS_LAYERS.map((layer) => ({
|
|
459
|
+
capture: ["slices"],
|
|
460
|
+
mode: "folder",
|
|
461
|
+
pattern: `${layer}/!(_*){,/*}`,
|
|
462
|
+
type: layer
|
|
463
|
+
}));
|
|
464
|
+
}
|
|
465
|
+
function getGodModeRules() {
|
|
466
|
+
return FS_LAYERS.map((layer) => ({
|
|
467
|
+
allow: [layer, ...getLowerLayers(layer)],
|
|
468
|
+
from: `gm_${layer}`
|
|
469
|
+
}));
|
|
470
|
+
}
|
|
471
|
+
function getGodModeElements() {
|
|
472
|
+
return FS_LAYERS.map((layer) => ({
|
|
473
|
+
capture: ["slices"],
|
|
474
|
+
mode: "folder",
|
|
475
|
+
pattern: `${layer}/_*`,
|
|
476
|
+
type: `gm_${layer}`
|
|
477
|
+
}));
|
|
478
|
+
}
|
|
479
|
+
async function fsd(options = {}) {
|
|
480
|
+
const { layersSlices: enableLayersSlices = true, publicApi: enablePublicApi = true } = options;
|
|
481
|
+
const configs$1 = [{
|
|
482
|
+
name: "fsd/setup",
|
|
483
|
+
plugins: { "eslint-comments": pluginComments }
|
|
484
|
+
}];
|
|
485
|
+
if (enablePublicApi) {
|
|
486
|
+
const { lite = true } = resolveSubOptions(options, "publicApi");
|
|
487
|
+
configs$1.push({
|
|
488
|
+
name: "fsd/public-api",
|
|
489
|
+
rules: {
|
|
490
|
+
"import/no-internal-modules": ["error", { allow: [
|
|
491
|
+
`**/*(${FS_SLICED_LAYERS_REG})/!(${FS_SEGMENTS_REG})`,
|
|
492
|
+
`**/*(${FS_SLICED_LAYERS_REG})/!(${FS_SEGMENTS_REG})/!(${FS_SEGMENTS_REG})`,
|
|
493
|
+
`**/*shared/*(${FS_SEGMENTS_REG})/!(${FS_SEGMENTS_REG})`,
|
|
494
|
+
`**/*shared/*(${FS_SEGMENTS_REG})`,
|
|
495
|
+
`**/node_modules/**`,
|
|
496
|
+
`**/*shared/_*`,
|
|
497
|
+
`**/*shared/_*/*`,
|
|
498
|
+
...lite ? [`./**`] : []
|
|
499
|
+
] }],
|
|
500
|
+
...getOverrides(options, "publicApi")
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
if (enableLayersSlices) {
|
|
505
|
+
ensurePackages(["eslint-plugin-boundaries"]);
|
|
506
|
+
const [pluginBoundaries] = await Promise.all([interopDefault(import("eslint-plugin-boundaries"))]);
|
|
507
|
+
configs$1.push({
|
|
508
|
+
name: "fsd/layers-slices",
|
|
509
|
+
plugins: { boundaries: pluginBoundaries },
|
|
510
|
+
rules: {
|
|
511
|
+
...pluginBoundaries.configs.recommended.rules,
|
|
512
|
+
"boundaries/element-types": [2, {
|
|
513
|
+
default: "disallow",
|
|
514
|
+
message: "\"${file.type}\" is not allowed to import \"${dependency.type}\" | See rules: https://feature-sliced.design/docs/reference/layers/overview ",
|
|
515
|
+
rules: [
|
|
516
|
+
...getNotSharedLayersRules(),
|
|
517
|
+
...slicelessLayerRules,
|
|
518
|
+
...getGodModeRules()
|
|
519
|
+
]
|
|
520
|
+
}],
|
|
521
|
+
...getOverrides(options, "layersSlices")
|
|
522
|
+
},
|
|
523
|
+
settings: { "boundaries/elements": [...getLayersBoundariesElements(), ...getGodModeElements()] }
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
return configs$1;
|
|
527
|
+
}
|
|
528
|
+
|
|
407
529
|
//#endregion
|
|
408
530
|
//#region src/configs/ignores.ts
|
|
409
531
|
async function ignores(userIgnores = []) {
|
|
@@ -1674,7 +1796,7 @@ const defaultPluginRenaming = {
|
|
|
1674
1796
|
*/
|
|
1675
1797
|
function config(options = {}, ...userConfigs) {
|
|
1676
1798
|
const isUsingReact = ReactPackages.some((i) => isPackageExists(i));
|
|
1677
|
-
const { autoRenamePlugins = true, componentExts = [], effector: enableEffector = isPackageExists("effector"), gitignore: enableGitignore = true, jsx: enableJsx = true, jsxA11y: enableJsxA11y = isUsingReact, next: enableNext = NextJsPackages.some((i) => isPackageExists(i)), pnpm: enableCatalogs = false, react: enableReact = isUsingReact, regexp: enableRegexp = true, typescript: enableTypeScript = isPackageExists("typescript"), unicorn: enableUnicorn = true, unocss: enableUnoCSS = false } = options;
|
|
1799
|
+
const { autoRenamePlugins = true, componentExts = [], effector: enableEffector = isPackageExists("effector"), fsd: enableFsd = false, gitignore: enableGitignore = true, jsx: enableJsx = true, jsxA11y: enableJsxA11y = isUsingReact, next: enableNext = NextJsPackages.some((i) => isPackageExists(i)), pnpm: enableCatalogs = false, react: enableReact = isUsingReact, regexp: enableRegexp = true, typescript: enableTypeScript = isPackageExists("typescript"), unicorn: enableUnicorn = true, unocss: enableUnoCSS = false } = options;
|
|
1678
1800
|
let isInEditor = options.isInEditor;
|
|
1679
1801
|
if (isInEditor == null) {
|
|
1680
1802
|
isInEditor = isInEditorEnv();
|
|
@@ -1717,6 +1839,7 @@ function config(options = {}, ...userConfigs) {
|
|
|
1717
1839
|
}));
|
|
1718
1840
|
if (enableJsxA11y) configs$1.push(jsxA11y({ overrides: getOverrides(options, "jsxA11y") }));
|
|
1719
1841
|
if (enableNext) configs$1.push(next({ overrides: getOverrides(options, "next") }));
|
|
1842
|
+
if (enableFsd) configs$1.push(fsd({ ...resolveSubOptions(options, "fsd") }));
|
|
1720
1843
|
if (enableEffector) configs$1.push(effector({
|
|
1721
1844
|
...resolveSubOptions(options, "effector"),
|
|
1722
1845
|
overrides: getOverrides(options, "effector")
|
|
@@ -1756,20 +1879,10 @@ function config(options = {}, ...userConfigs) {
|
|
|
1756
1879
|
if (isInEditor) composer = composer.disableRulesFix(["unused-imports/no-unused-imports", "prefer-const"], { builtinRules: () => import(["eslint", "use-at-your-own-risk"].join("/")).then((r) => r.builtinRules) });
|
|
1757
1880
|
return composer;
|
|
1758
1881
|
}
|
|
1759
|
-
function resolveSubOptions(options, key) {
|
|
1760
|
-
return typeof options[key] === "boolean" ? {} : options[key] || {};
|
|
1761
|
-
}
|
|
1762
|
-
function getOverrides(options, key) {
|
|
1763
|
-
const sub = resolveSubOptions(options, key);
|
|
1764
|
-
return {
|
|
1765
|
-
...options.overrides?.[key],
|
|
1766
|
-
..."overrides" in sub ? sub.overrides : {}
|
|
1767
|
-
};
|
|
1768
|
-
}
|
|
1769
1882
|
|
|
1770
1883
|
//#endregion
|
|
1771
1884
|
//#region src/index.ts
|
|
1772
1885
|
var src_default = config;
|
|
1773
1886
|
|
|
1774
1887
|
//#endregion
|
|
1775
|
-
export { GLOB_ALL_SRC, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVG, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, combine, comments, config, src_default as default, defaultPluginRenaming, disables, effector, ensurePackages, formatters, getOverrides, ignores, imports, interopDefault, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsonc, jsx, jsxA11y, markdown, next, node, parserPlain, perfectionist, pnpm, react, regexp, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, toml, typescript, unicorn, unocss, yaml };
|
|
1888
|
+
export { GLOB_ALL_SRC, GLOB_CSS, GLOB_EXCLUDE, GLOB_HTML, GLOB_JS, GLOB_JSON, GLOB_JSON5, GLOB_JSONC, GLOB_JSX, GLOB_MARKDOWN, GLOB_MARKDOWN_CODE, GLOB_MARKDOWN_IN_MARKDOWN, GLOB_POSTCSS, GLOB_SCSS, GLOB_SRC, GLOB_SRC_EXT, GLOB_STYLE, GLOB_SVG, GLOB_TOML, GLOB_TS, GLOB_TSX, GLOB_XML, GLOB_YAML, StylisticConfigDefaults, combine, comments, config, src_default as default, defaultPluginRenaming, disables, effector, ensurePackages, formatters, fsd, getOverrides, ignores, imports, interopDefault, isInEditorEnv, isInGitHooksOrLintStaged, isPackageInScope, javascript, jsonc, jsx, jsxA11y, markdown, next, node, parserPlain, perfectionist, pnpm, react, regexp, renameRules, resolveSubOptions, sortPackageJson, sortTsconfig, stylistic, toml, typescript, unicorn, unocss, yaml };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ghettoddos/eslint-config",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.6.0",
|
|
5
5
|
"description": "ghettoDdOS ESLint config",
|
|
6
6
|
"author": "ghettoDdOS <pen.egor2002@gamil.com> (https://github.com/ghettoDdOS/)",
|
|
7
7
|
"license": "MIT",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"@prettier/plugin-xml": "^3.4.1",
|
|
30
30
|
"@unocss/eslint-plugin": ">=0.50.0",
|
|
31
31
|
"eslint": "^9.10.0",
|
|
32
|
+
"eslint-plugin-boundaries": "^5.0.1",
|
|
32
33
|
"eslint-plugin-effector": "^0.15.0",
|
|
33
34
|
"eslint-plugin-format": ">=0.1.0",
|
|
34
35
|
"eslint-plugin-jsx-a11y": "^6.10.2"
|
|
@@ -43,6 +44,9 @@
|
|
|
43
44
|
"@unocss/eslint-plugin": {
|
|
44
45
|
"optional": true
|
|
45
46
|
},
|
|
47
|
+
"eslint-plugin-boundaries": {
|
|
48
|
+
"optional": true
|
|
49
|
+
},
|
|
46
50
|
"eslint-plugin-effector": {
|
|
47
51
|
"optional": true
|
|
48
52
|
},
|
|
@@ -94,6 +98,7 @@
|
|
|
94
98
|
"@unocss/eslint-plugin": "66.1.0-beta.3",
|
|
95
99
|
"bumpp": "^10.1.1",
|
|
96
100
|
"eslint": "^9.27.0",
|
|
101
|
+
"eslint-plugin-boundaries": "^5.0.1",
|
|
97
102
|
"eslint-plugin-effector": "^0.15.0",
|
|
98
103
|
"eslint-plugin-format": "^1.0.1",
|
|
99
104
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|