diff --git a/fileComposition.mjs b/fileComposition.mjs index a9c3d12..ea99c15 100644 --- a/fileComposition.mjs +++ b/fileComposition.mjs @@ -11,7 +11,7 @@ export const fileCompositionConfig = createFileComposition({ allowOnlySpecifiedSelectors: true, rules: [ { - selector: "variable", + selector: ["variable", "variableExpression"], format: "{SNAKE_CASE}", }, ], @@ -41,7 +41,7 @@ export const fileCompositionConfig = createFileComposition({ allowOnlySpecifiedSelectors: true, rules: [ { - selector: "variable", + selector: { type: "variableExpression", limitTo: "ESLintUtils" }, format: "{fileName}", }, ], @@ -75,7 +75,7 @@ export const fileCompositionConfig = createFileComposition({ "arrowFunction", "function", "variable", - "variableCallExpression", + "variableExpression", ], format: "{camelCase}", }, diff --git a/package.json b/package.json index c522e8a..7e4cc62 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "author": "Igor Kowalski (Igorkowalski94)", "name": "eslint-plugin-project-structure", - "version": "2.7.0", + "version": "2.7.1", "license": "MIT", "description": "ESLint plugin with rules to help you achieve a scalable, consistent, and well-structured project. Define your folder structure, advanced naming conventions, file composition, and create independent modules. react folder structure react file structure react project structure react conventions architecture react next.js angular node solid vue svelte", "keywords": [ @@ -81,7 +81,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.30.0", "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-project-structure": "2.6.3", + "eslint-plugin-project-structure": "2.7.0", "husky": "^9.1.6", "jest": "^29.7.0", "prettier": "^3.3.3", diff --git a/src/consts.ts b/src/consts.ts index dbfe843..60bf66d 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -1,4 +1,3 @@ -/* eslint-disable project-structure/file-composition */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ const SNAKE_CASE_LOWER_RE = /((([a-z]|\d)+_)*([a-z]|\d)+)/; const SNAKE_CASE_UPPER_RE = /((([A-Z]|\d)+_)*([A-Z]|\d)+)/; @@ -18,6 +17,7 @@ export const STRICT_CAMEL_CASE = `${STRICT_CAMEL_CASE_RE}`.replace(/\//g, ""); export const STRICT_PASCAL_CASE = `${STRICT_PASCAL_CASE_RE}`.replace(/\//g, ""); export const RECURSION_LIMIT = 1000; +export const WILDCARD_REGEX = "(([^/]*)+)"; export const ESLINT_ERRORS = { error: `{{error}}`, diff --git a/src/rules/fileComposition/fileComposition.consts.ts b/src/rules/fileComposition/fileComposition.consts.ts index fae8a2c..b469b02 100644 --- a/src/rules/fileComposition/fileComposition.consts.ts +++ b/src/rules/fileComposition/fileComposition.consts.ts @@ -1,8 +1,8 @@ export const ESLINT_ERRORS = { - invalidName: `🔥 Invalid {{selectorKey}} name, allowed formats = {{formatWithoutReferences}} 🔥`, - prohibitedSelector: `🔥 The use of '{{selectorKey}}' is prohibited in this file. 🔥{{error}}`, - prohibitedSelectorRoot: `🔥 The use of '{{selectorKey}}' is prohibited in the root of the file. 🔥{{error}}`, - prohibitedSelectorExport: `🔥 Exporting '{{selectorKey}}' is prohibited in this file. 🔥{{error}}`, + invalidName: `🔥 Invalid {{selectorType}} name, allowed formats = {{formatWithoutReferences}} 🔥`, + prohibitedSelector: `🔥 The use of '{{selectorType}}' is prohibited in this file. 🔥{{error}}`, + prohibitedSelectorRoot: `🔥 The use of '{{selectorType}}' is prohibited in the root of the file. 🔥{{error}}`, + prohibitedSelectorExport: `🔥 Exporting '{{selectorType}}' is prohibited in this file. 🔥{{error}}`, rootSelectorsLimits: "🔥 The limit for the given selectors in the root of the file has been exceeded. 🔥\n{{error}}\n\n", }; diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.test.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.test.ts index 301bb5c..36ff207 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.test.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.test.ts @@ -1,3 +1,5 @@ +import { getInvalidRegexError } from "errors/getInvalidRegexError"; + import { SelectorType, FileRule, @@ -7,74 +9,96 @@ import { isCorrectSelector } from "rules/fileComposition/helpers/validateFile/he describe("isCorrectNameType", () => { test.each<{ selector: FileRule["selector"]; - selectorKey: SelectorType; + selectorType: SelectorType; expected: boolean; expressionName?: string; }>([ { selector: "arrowFunction", - selectorKey: "arrowFunction", + selectorType: "arrowFunction", expected: true, }, { selector: ["arrowFunction"], - selectorKey: "arrowFunction", + selectorType: "arrowFunction", expected: true, }, { selector: "class", - selectorKey: "arrowFunction", + selectorType: "arrowFunction", expected: false, }, { selector: ["class"], - selectorKey: "arrowFunction", + selectorType: "arrowFunction", expected: false, }, { selector: { type: "variableExpression", limitTo: "styled" }, - selectorKey: "variableExpression", + selectorType: "variableExpression", expressionName: "styled", expected: true, }, { selector: [{ type: "variableExpression", limitTo: "styled" }], - selectorKey: "variableExpression", + selectorType: "variableExpression", expressionName: "styled", expected: true, }, { selector: { type: "variableExpression", limitTo: "styled" }, - selectorKey: "variableExpression", + selectorType: "variableExpression", + expressionName: "css", + expected: false, + }, + { + selector: { type: "variableExpression", limitTo: "*" }, + selectorType: "variableExpression", + expressionName: "css", + expected: true, + }, + { + selector: { type: "variableExpression", limitTo: "(?!css)*" }, + selectorType: "variableExpression", expressionName: "css", expected: false, }, { selector: [{ type: "variableExpression", limitTo: "styled" }], - selectorKey: "variableExpression", + selectorType: "variableExpression", expressionName: "css", expected: false, }, { selector: { type: "variableExpression", limitTo: "styled" }, - selectorKey: "variable", + selectorType: "variable", expected: false, }, { selector: [{ type: "variableExpression", limitTo: "styled" }], - selectorKey: "variable", + selectorType: "variable", expected: false, }, ])( "Should return correct values for %o", - ({ selectorKey, selector, expressionName, expected }) => { + ({ selectorType, selector, expressionName, expected }) => { expect( isCorrectSelector({ - selectorKey, + selectorType, selector, expressionName, }), ).toEqual(expected); }, ); + + test("Should throw when regex is invalid", () => { + expect(() => + isCorrectSelector({ + selector: { type: "variableExpression", limitTo: "^?" }, + selectorType: "variableExpression", + expressionName: "expressionName", + }), + ).toThrow(getInvalidRegexError("^?")); + }); }); diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.ts index c15f4f8..4164c30 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector.ts @@ -1,3 +1,9 @@ +import { WILDCARD_REGEX } from "consts"; + +import { getInvalidRegexError } from "errors/getInvalidRegexError"; + +import { isRegexInvalid } from "helpers/isRegexInvalid"; + import { Selector, SelectorType, @@ -5,26 +11,43 @@ import { interface IsCorrectSelectorProps { selector: Selector | Selector[]; - selectorKey: SelectorType; + selectorType: SelectorType; expressionName?: string; } export const isCorrectSelector = ({ selector, - selectorKey, + selectorType, expressionName, }: IsCorrectSelectorProps): boolean => { - if (typeof selector === "string") return selector === selectorKey; + if (typeof selector === "string") return selector === selectorType; if (!Array.isArray(selector)) { if (!expressionName) return false; - return ( - selector.type === selectorKey && selector.limitTo.includes(expressionName) + if (typeof selector.limitTo === "string") { + const regexImproved = selector.limitTo + .replaceAll("*", WILDCARD_REGEX) + .replaceAll(`*${WILDCARD_REGEX}`, "*"); + + if (isRegexInvalid(regexImproved)) + throw getInvalidRegexError(regexImproved); + + const finalRegex = new RegExp(`^${regexImproved}$`, "g"); + + return selector.type === selectorType && finalRegex.test(expressionName); + } + + return selector.limitTo.some((limitTo) => + isCorrectSelector({ + selector: { type: "variableExpression", limitTo }, + selectorType, + expressionName, + }), ); } return selector.some((sel) => - isCorrectSelector({ selector: sel, selectorKey, expressionName }), + isCorrectSelector({ selector: sel, selectorType, expressionName }), ); }; diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.test.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.test.ts index e0cfa5c..05bf4ed 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.test.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.test.ts @@ -4,13 +4,13 @@ describe("getRules", () => { test("Should return error message when !!errors", () => { expect( getCustomError({ - selectorKey: "arrowFunction", + selectorType: "arrowFunction", errors: { arrowFunction: "arrowFunction error" }, }), ).toEqual("\n\narrowFunction error\n\n"); }); test("Should return undefined when !errors", () => { - expect(getCustomError({ selectorKey: "arrowFunction" })).toEqual(""); + expect(getCustomError({ selectorType: "arrowFunction" })).toEqual(""); }); }); diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.ts index faa12e2..278fc47 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError.ts @@ -4,15 +4,15 @@ import { } from "rules/fileComposition/fileComposition.types"; interface GetCustomErrorProps { - selectorKey: SelectorType; + selectorType: SelectorType; errors?: CustomErrors; } export const getCustomError = ({ - selectorKey, + selectorType, errors, }: GetCustomErrorProps): string => { - if (!errors?.[selectorKey]) return ""; + if (!errors?.[selectorType]) return ""; - return `\n\n${errors[selectorKey]}\n\n`; + return `\n\n${errors[selectorType]}\n\n`; }; diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/isSelectorAllowed.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/isSelectorAllowed.ts index b84ee48..12a4ab3 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/isSelectorAllowed.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/isSelectorAllowed.ts @@ -6,6 +6,7 @@ import { Node, SelectorType, } from "rules/fileComposition/fileComposition.types"; +import { isCorrectSelector } from "rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isCorrectSelector"; import { getCustomError } from "rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/isSelectorAllowed/helpers/getCustomError"; interface IsSelectorAllowedProps { @@ -13,7 +14,7 @@ interface IsSelectorAllowedProps { report: Context["report"]; node: Node; errorMessageId: keyof typeof ESLINT_ERRORS; - selectorKey: SelectorType; + selectorType: SelectorType; expressionName?: string; } @@ -22,7 +23,7 @@ export const isSelectorAllowed = ({ report, node, errorMessageId, - selectorKey, + selectorType, expressionName, }: IsSelectorAllowedProps): boolean => { if ( @@ -31,21 +32,16 @@ export const isSelectorAllowed = ({ !fileRule.rules .map(({ selector }) => selector) .flat() - .some( - (selector) => - selector === selectorKey || - (typeof selector !== "string" && - selector.type === selectorKey && - expressionName && - selector.limitTo.includes(expressionName)), + .some((selector) => + isCorrectSelector({ selector, selectorType, expressionName }), ) ) { report({ messageId: errorMessageId, data: { - selectorKey, + selectorType, error: getCustomError({ - selectorKey, + selectorType, errors: fileRule.errors, }), }, diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/prepareFormat/prepareFormat.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/prepareFormat/prepareFormat.ts index 1441211..d3d567f 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/prepareFormat/prepareFormat.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/helpers/prepareFormat/prepareFormat.ts @@ -1,3 +1,4 @@ +import { WILDCARD_REGEX } from "consts"; import { RegexParameters } from "types"; import { getRegexWithoutReferences } from "helpers/getRegexWithoutReferences/getRegexWithoutReferences"; @@ -35,7 +36,9 @@ export const prepareFormat = ({ const formatWithoutReferences = currentFormat.map((regex) => getRegexWithoutReferences({ - regex, + regex: regex + .replaceAll("*", WILDCARD_REGEX) + .replaceAll(`*${WILDCARD_REGEX}`, "*"), regexParameters: defaultRegexParameters, key: "format", }), diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.test.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.test.ts index 1f0ff63..e6b6531 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.test.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.test.ts @@ -103,7 +103,7 @@ describe("validateRules", () => { }, messageId: "invalidName", data: { - selectorKey: "variable", + selectorType: "variable", formatWithoutReferences: "{camelCase}", }, }); diff --git a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.ts b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.ts index fc8aef8..8306d2b 100644 --- a/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.ts +++ b/src/rules/fileComposition/helpers/validateFile/helpers/validateRules/validateRules.ts @@ -41,13 +41,13 @@ export const validateRules = ({ regexParameters, expressionName, }: ValidateRulesProps): void => { - const selectorKey = SELECTORS[nodeType]; + const selectorType = SELECTORS[nodeType]; if ( !isSelectorAllowed({ fileRule, node, - selectorKey, + selectorType, report, errorMessageId, expressionName, @@ -58,7 +58,7 @@ export const validateRules = ({ getRules(fileRule).forEach((rule) => { if ( !isCorrectSelector({ - selectorKey, + selectorType, selector: rule.selector, expressionName, }) @@ -93,7 +93,7 @@ export const validateRules = ({ node, messageId: "invalidName", data: { - selectorKey, + selectorType, formatWithoutReferences: formatWithFilenameReferences.join(", "), }, }); diff --git a/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts.ts b/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts.ts index 0fcd046..ed4d214 100644 --- a/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts.ts +++ b/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts.ts @@ -1,2 +1 @@ -export const WILDCARD_REGEX = "(([^/]*)+)"; export const DOT_CHARACTER_REGEX = "\\."; diff --git a/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.test.ts b/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.test.ts index d84d3ac..7b3b490 100644 --- a/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.test.ts +++ b/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.test.ts @@ -1,13 +1,12 @@ +import { WILDCARD_REGEX } from "consts"; + import { getInvalidRegexError } from "errors/getInvalidRegexError"; import { validateName, ValidateNameProps, } from "rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName"; -import { - WILDCARD_REGEX, - DOT_CHARACTER_REGEX, -} from "rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts"; +import { DOT_CHARACTER_REGEX } from "rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts"; describe("validateName", () => { it("should throw error when regex is invalid", () => { diff --git a/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.ts b/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.ts index 1e595fb..23e1bd3 100644 --- a/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.ts +++ b/src/rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.ts @@ -1,3 +1,4 @@ +import { WILDCARD_REGEX } from "consts"; import { RegexParameters } from "types"; import { getInvalidRegexError } from "errors/getInvalidRegexError"; @@ -5,10 +6,7 @@ import { getInvalidRegexError } from "errors/getInvalidRegexError"; import { isRegexInvalid } from "helpers/isRegexInvalid"; import { applyRegexParameters } from "rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/helpers/applyRegexParameters"; -import { - DOT_CHARACTER_REGEX, - WILDCARD_REGEX, -} from "rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts"; +import { DOT_CHARACTER_REGEX } from "rules/folderStructure/helpers/validateFolderStructure/helpers/validatePath/helpers/validateName/validateName.consts"; export interface ValidateNameProps { nodeName: string; diff --git a/yarn.lock b/yarn.lock index a63857e..19a5f39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1493,16 +1493,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/scope-manager@npm:8.6.0" - dependencies: - "@typescript-eslint/types": 8.6.0 - "@typescript-eslint/visitor-keys": 8.6.0 - checksum: d0a305c659eab02ad36265e77a1e30574a72a3e251b24c503537abd5b1dbe45a1db7d63dc73bdcc7fb4951f671cb5cbaedca1130490c764dd05f91e90c5cbbf9 - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:8.7.0": version: 8.7.0 resolution: "@typescript-eslint/scope-manager@npm:8.7.0" @@ -1528,13 +1518,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/types@npm:8.6.0" - checksum: 5bf0078735b5d2804e1019ff17e9f221af3735fe7b9f4a77a41cba0998e77eebb2c152575bd45a264cb35d7a9db899799c1a10faa29f536c28a804420fb9f870 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:8.7.0": version: 8.7.0 resolution: "@typescript-eslint/types@npm:8.7.0" @@ -1542,25 +1525,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.6.0" - dependencies: - "@typescript-eslint/types": 8.6.0 - "@typescript-eslint/visitor-keys": 8.6.0 - debug: ^4.3.4 - fast-glob: ^3.3.2 - is-glob: ^4.0.3 - minimatch: ^9.0.4 - semver: ^7.6.0 - ts-api-utils: ^1.3.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 7a0e817b5c381f8937a8e4bf17df5ce43e1269ee150ee635cc8bb8867cb899fcca630eb8f6f1dfdd74ddd296741ac7e1e26ef6c9dc4f99cdcf49311956fbb385 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:8.7.0": version: 8.7.0 resolution: "@typescript-eslint/typescript-estree@npm:8.7.0" @@ -1594,30 +1558,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/utils@npm:8.6.0" - dependencies: - "@eslint-community/eslint-utils": ^4.4.0 - "@typescript-eslint/scope-manager": 8.6.0 - "@typescript-eslint/types": 8.6.0 - "@typescript-eslint/typescript-estree": 8.6.0 - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - checksum: dbb2efe47c291d36d5ec147f8c8fe62d27e9db2a3368aefd9019fd1e118bd1a54c8b13b990bb0941c9510bc4e2049b336e9a26d6414a6239c020e36baa8797e2 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.6.0": - version: 8.6.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.6.0" - dependencies: - "@typescript-eslint/types": 8.6.0 - eslint-visitor-keys: ^3.4.3 - checksum: de60bb42674818af46b85a94f668e93dc0432e8d7d94f0508dadab41181192fad2c2701ec3533d404e9bd40c8e92384fd7bcdc82fc45584b7323195ceaf32caf - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:8.7.0": version: 8.7.0 resolution: "@typescript-eslint/visitor-keys@npm:8.7.0" @@ -2892,16 +2832,16 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-project-structure@npm:2.6.3": - version: 2.6.3 - resolution: "eslint-plugin-project-structure@npm:2.6.3" +"eslint-plugin-project-structure@npm:2.7.0": + version: 2.7.0 + resolution: "eslint-plugin-project-structure@npm:2.7.0" dependencies: - "@typescript-eslint/utils": ^8.6.0 + "@typescript-eslint/utils": ^8.7.0 comment-json: ^4.2.5 js-yaml: ^4.1.0 jsonschema: ^1.4.1 micromatch: ^4.0.8 - checksum: c3bc86e1e8852e384df2f04f40349deeeee34991f16963e1b676638bfa288bf12f5d8218797e30a818b8872ba8b275ed5cdcfa2ba4903d57899460dd3b764486 + checksum: 0621b2208e3df6510414222f704e8eefde7ea6a43b46422c26d9ee85637839961856d5f7559e423bb6040000c062892ec91b904e5e18b9b96ad14e8771037daf languageName: node linkType: hard @@ -2922,7 +2862,7 @@ __metadata: eslint-config-prettier: ^9.1.0 eslint-plugin-import: ^2.30.0 eslint-plugin-prettier: ^5.2.1 - eslint-plugin-project-structure: 2.6.3 + eslint-plugin-project-structure: 2.7.0 husky: ^9.1.6 jest: ^29.7.0 js-yaml: ^4.1.0