@codeperfect/eslint-config 1.2.0 → 1.3.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/README.md +21 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/codeperfect-eslint-config-1.0.0.tgz +0 -0
- package/dist/domain/config-composition.d.ts +8 -0
- package/dist/domain/config-composition.d.ts.map +1 -0
- package/dist/domain/config-composition.js +55 -0
- package/dist/domain/index.d.ts +3 -1
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +3 -2
- package/dist/{module-taxonomy.d.ts → domain/module-taxonomy.d.ts} +3 -3
- package/dist/domain/module-taxonomy.d.ts.map +1 -0
- package/dist/domain/module-taxonomy.js +22 -0
- package/dist/{types.d.ts → domain/types.d.ts} +31 -6
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +2 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/infrastructure/architecture/boundaries.d.ts +22 -0
- package/dist/infrastructure/architecture/boundaries.d.ts.map +1 -0
- package/dist/infrastructure/architecture/boundaries.js +175 -0
- package/dist/infrastructure/architecture/import-x.d.ts.map +1 -0
- package/dist/infrastructure/architecture/import-x.js +80 -0
- package/dist/infrastructure/architecture/index.d.ts +3 -0
- package/dist/infrastructure/architecture/index.d.ts.map +1 -0
- package/dist/infrastructure/architecture/index.js +3 -0
- package/dist/{config-factory.d.ts → infrastructure/config-factory.d.ts} +1 -1
- package/dist/infrastructure/config-factory.d.ts.map +1 -0
- package/dist/infrastructure/config-factory.js +44 -0
- package/dist/infrastructure/configs/index.d.ts +7 -0
- package/dist/infrastructure/configs/index.d.ts.map +1 -0
- package/dist/infrastructure/configs/index.js +7 -0
- package/dist/infrastructure/core/codeperfect.d.ts.map +1 -0
- package/dist/infrastructure/core/codeperfect.js +14 -0
- package/dist/infrastructure/core/eslint.d.ts.map +1 -0
- package/dist/infrastructure/core/eslint.js +58 -0
- package/dist/infrastructure/core/index.d.ts +5 -0
- package/dist/infrastructure/core/index.d.ts.map +1 -0
- package/dist/infrastructure/core/index.js +5 -0
- package/dist/infrastructure/core/resolver.d.ts.map +1 -0
- package/dist/infrastructure/core/resolver.js +27 -0
- package/dist/infrastructure/core/typescript.d.ts.map +1 -0
- package/dist/infrastructure/core/typescript.js +63 -0
- package/dist/{diagnostics.d.ts → infrastructure/diagnostics.d.ts} +13 -3
- package/dist/infrastructure/diagnostics.d.ts.map +1 -0
- package/dist/infrastructure/diagnostics.js +90 -0
- package/dist/infrastructure/docs/comments.d.ts.map +1 -0
- package/dist/infrastructure/docs/comments.js +30 -0
- package/dist/infrastructure/docs/index.d.ts +3 -0
- package/dist/infrastructure/docs/index.d.ts.map +1 -0
- package/dist/infrastructure/docs/index.js +3 -0
- package/dist/infrastructure/docs/jsdoc.d.ts.map +1 -0
- package/dist/infrastructure/docs/jsdoc.js +126 -0
- package/dist/infrastructure/index.d.ts +5 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +4 -0
- package/dist/{plugin-loaders.d.ts → infrastructure/plugin-loaders.d.ts} +2 -2
- package/dist/infrastructure/plugin-loaders.d.ts.map +1 -0
- package/dist/infrastructure/plugin-loaders.js +115 -0
- package/dist/infrastructure/plugin-state.d.ts +26 -0
- package/dist/infrastructure/plugin-state.d.ts.map +1 -0
- package/dist/infrastructure/plugin-state.js +54 -0
- package/dist/infrastructure/rxjs-x.d.ts.map +1 -0
- package/dist/infrastructure/rxjs-x.js +27 -0
- package/dist/infrastructure/style/index.d.ts +5 -0
- package/dist/infrastructure/style/index.d.ts.map +1 -0
- package/dist/infrastructure/style/index.js +5 -0
- package/dist/infrastructure/style/perfectionist.d.ts.map +1 -0
- package/dist/infrastructure/style/perfectionist.js +31 -0
- package/dist/infrastructure/style/prettier.d.ts.map +1 -0
- package/dist/infrastructure/style/prettier.js +15 -0
- package/dist/infrastructure/style/stylistic.d.ts.map +1 -0
- package/dist/infrastructure/style/stylistic.js +17 -0
- package/dist/infrastructure/style/unicorn.d.ts.map +1 -0
- package/dist/infrastructure/style/unicorn.js +15 -0
- package/dist/infrastructure/testing/index.d.ts +5 -0
- package/dist/infrastructure/testing/index.d.ts.map +1 -0
- package/dist/infrastructure/testing/index.js +5 -0
- package/dist/infrastructure/testing/jasmine.d.ts.map +1 -0
- package/dist/infrastructure/testing/jasmine.js +26 -0
- package/dist/infrastructure/testing/jest.d.ts.map +1 -0
- package/dist/infrastructure/testing/jest.js +27 -0
- package/dist/infrastructure/testing/playwright.d.ts.map +1 -0
- package/dist/infrastructure/testing/playwright.js +29 -0
- package/dist/infrastructure/testing/vitest.d.ts.map +1 -0
- package/dist/infrastructure/testing/vitest.js +33 -0
- package/dist/{utilities.d.ts → infrastructure/utilities.d.ts} +2 -13
- package/dist/infrastructure/utilities.d.ts.map +1 -0
- package/dist/infrastructure/utilities.js +112 -0
- package/package.json +6 -4
- package/dist/architecture/boundaries.d.ts +0 -17
- package/dist/architecture/boundaries.d.ts.map +0 -1
- package/dist/architecture/boundaries.js +0 -69
- package/dist/architecture/import-x.d.ts.map +0 -1
- package/dist/architecture/import-x.js +0 -80
- package/dist/architecture/index.d.ts +0 -3
- package/dist/architecture/index.d.ts.map +0 -1
- package/dist/architecture/index.js +0 -3
- package/dist/config-composition.d.ts +0 -6
- package/dist/config-composition.d.ts.map +0 -1
- package/dist/config-composition.js +0 -39
- package/dist/config-factory.d.ts.map +0 -1
- package/dist/config-factory.js +0 -42
- package/dist/configs/index.d.ts +0 -7
- package/dist/configs/index.d.ts.map +0 -1
- package/dist/configs/index.js +0 -7
- package/dist/core/codeperfect.d.ts.map +0 -1
- package/dist/core/codeperfect.js +0 -14
- package/dist/core/eslint.d.ts.map +0 -1
- package/dist/core/eslint.js +0 -58
- package/dist/core/index.d.ts +0 -5
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -5
- package/dist/core/resolver.d.ts.map +0 -1
- package/dist/core/resolver.js +0 -27
- package/dist/core/typescript.d.ts.map +0 -1
- package/dist/core/typescript.js +0 -63
- package/dist/diagnostics.d.ts.map +0 -1
- package/dist/diagnostics.js +0 -74
- package/dist/docs/comments.d.ts.map +0 -1
- package/dist/docs/comments.js +0 -30
- package/dist/docs/index.d.ts +0 -3
- package/dist/docs/index.d.ts.map +0 -1
- package/dist/docs/index.js +0 -3
- package/dist/docs/jsdoc.d.ts.map +0 -1
- package/dist/docs/jsdoc.js +0 -126
- package/dist/domain/rxjs-x.d.ts.map +0 -1
- package/dist/domain/rxjs-x.js +0 -27
- package/dist/module-taxonomy.d.ts.map +0 -1
- package/dist/module-taxonomy.js +0 -22
- package/dist/plugin-loaders.d.ts.map +0 -1
- package/dist/plugin-loaders.js +0 -115
- package/dist/style/index.d.ts +0 -5
- package/dist/style/index.d.ts.map +0 -1
- package/dist/style/index.js +0 -5
- package/dist/style/perfectionist.d.ts.map +0 -1
- package/dist/style/perfectionist.js +0 -31
- package/dist/style/prettier.d.ts.map +0 -1
- package/dist/style/prettier.js +0 -15
- package/dist/style/stylistic.d.ts.map +0 -1
- package/dist/style/stylistic.js +0 -17
- package/dist/style/unicorn.d.ts.map +0 -1
- package/dist/style/unicorn.js +0 -15
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -5
- package/dist/testing/jasmine.d.ts.map +0 -1
- package/dist/testing/jasmine.js +0 -25
- package/dist/testing/jest.d.ts.map +0 -1
- package/dist/testing/jest.js +0 -27
- package/dist/testing/playwright.d.ts.map +0 -1
- package/dist/testing/playwright.js +0 -29
- package/dist/testing/vitest.d.ts.map +0 -1
- package/dist/testing/vitest.js +0 -33
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/utilities.d.ts.map +0 -1
- package/dist/utilities.js +0 -125
- /package/dist/{architecture → infrastructure/architecture}/import-x.d.ts +0 -0
- /package/dist/{core → infrastructure/core}/codeperfect.d.ts +0 -0
- /package/dist/{core → infrastructure/core}/eslint.d.ts +0 -0
- /package/dist/{core → infrastructure/core}/resolver.d.ts +0 -0
- /package/dist/{core → infrastructure/core}/typescript.d.ts +0 -0
- /package/dist/{docs → infrastructure/docs}/comments.d.ts +0 -0
- /package/dist/{docs → infrastructure/docs}/jsdoc.d.ts +0 -0
- /package/dist/{domain → infrastructure}/rxjs-x.d.ts +0 -0
- /package/dist/{style → infrastructure/style}/perfectionist.d.ts +0 -0
- /package/dist/{style → infrastructure/style}/prettier.d.ts +0 -0
- /package/dist/{style → infrastructure/style}/stylistic.d.ts +0 -0
- /package/dist/{style → infrastructure/style}/unicorn.d.ts +0 -0
- /package/dist/{testing → infrastructure/testing}/jasmine.d.ts +0 -0
- /package/dist/{testing → infrastructure/testing}/jest.d.ts +0 -0
- /package/dist/{testing → infrastructure/testing}/playwright.d.ts +0 -0
- /package/dist/{testing → infrastructure/testing}/vitest.d.ts +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineConfig } from "eslint/config";
|
|
2
|
+
/**
|
|
3
|
+
* Load Jest plugin configuration when available.
|
|
4
|
+
* @returns Return value output.
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* await jest();
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export async function jest() {
|
|
11
|
+
const { configs } = await import("eslint-plugin-jest");
|
|
12
|
+
return defineConfig({
|
|
13
|
+
extends: [configs["flat/all"]],
|
|
14
|
+
files: ["**/integration/jest/**/*.spec.ts"],
|
|
15
|
+
name: "jest/custom",
|
|
16
|
+
rules: {
|
|
17
|
+
"jest/prefer-expect-assertions": "off",
|
|
18
|
+
},
|
|
19
|
+
}, {
|
|
20
|
+
files: ["**/integration/jest-global/**/*.spec.ts"],
|
|
21
|
+
name: "jest/custom-global-overrides",
|
|
22
|
+
rules: {
|
|
23
|
+
"jest/prefer-importing-jest-globals": "off",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmZyYXN0cnVjdHVyZS90ZXN0aW5nL2plc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxJQUFJO0lBQ3hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRXZELE9BQU8sWUFBWSxDQUNqQjtRQUNFLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixLQUFLLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztRQUMzQyxJQUFJLEVBQUUsYUFBYTtRQUNuQixLQUFLLEVBQUU7WUFDTCwrQkFBK0IsRUFBRSxLQUFLO1NBQ3ZDO0tBQ0YsRUFDRDtRQUNFLEtBQUssRUFBRSxDQUFDLHlDQUF5QyxDQUFDO1FBQ2xELElBQUksRUFBRSw4QkFBOEI7UUFDcEMsS0FBSyxFQUFFO1lBQ0wsb0NBQW9DLEVBQUUsS0FBSztTQUM1QztLQUNGLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcImVzbGludC9jb25maWdcIjtcblxuLyoqXG4gKiBMb2FkIEplc3QgcGx1Z2luIGNvbmZpZ3VyYXRpb24gd2hlbiBhdmFpbGFibGUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGF3YWl0IGplc3QoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gamVzdCgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4ge1xuICBjb25zdCB7IGNvbmZpZ3MgfSA9IGF3YWl0IGltcG9ydChcImVzbGludC1wbHVnaW4tamVzdFwiKTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtjb25maWdzW1wiZmxhdC9hbGxcIl1dLFxuICAgICAgZmlsZXM6IFtcIioqL2ludGVncmF0aW9uL2plc3QvKiovKi5zcGVjLnRzXCJdLFxuICAgICAgbmFtZTogXCJqZXN0L2N1c3RvbVwiLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgXCJqZXN0L3ByZWZlci1leHBlY3QtYXNzZXJ0aW9uc1wiOiBcIm9mZlwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBbXCIqKi9pbnRlZ3JhdGlvbi9qZXN0LWdsb2JhbC8qKi8qLnNwZWMudHNcIl0sXG4gICAgICBuYW1lOiBcImplc3QvY3VzdG9tLWdsb2JhbC1vdmVycmlkZXNcIixcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIFwiamVzdC9wcmVmZXItaW1wb3J0aW5nLWplc3QtZ2xvYmFsc1wiOiBcIm9mZlwiLFxuICAgICAgfSxcbiAgICB9LFxuICApO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/testing/playwright.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC;;;;;;;GAOG;AACH,iBAAe,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAuBpD;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineConfig } from "eslint/config";
|
|
2
|
+
/**
|
|
3
|
+
* Build and return Playwright-specific ESLint configs and rule adjustments.
|
|
4
|
+
* @returns Return value output.
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* await playwright();
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
async function playwright() {
|
|
11
|
+
const playwrightModule = await import("eslint-plugin-playwright");
|
|
12
|
+
const { configs, rules } = playwrightModule.default;
|
|
13
|
+
const customIgnore = new Set([""]);
|
|
14
|
+
const { rules: recommendedRules = {} } = configs["flat/recommended"];
|
|
15
|
+
const allConfigs = new Set(Object.keys({ ...recommendedRules }));
|
|
16
|
+
const customError = Object.fromEntries(Object.keys(rules)
|
|
17
|
+
.filter((rule) => !customIgnore.has(rule))
|
|
18
|
+
.map((rule) => `playwright/${rule}`)
|
|
19
|
+
.filter((rule) => !allConfigs.has(rule))
|
|
20
|
+
.map((rule) => [rule, "error"]));
|
|
21
|
+
return defineConfig({
|
|
22
|
+
extends: [configs["flat/recommended"]],
|
|
23
|
+
files: ["e2e/**/*.{spec,test}.{ts,js}"],
|
|
24
|
+
name: "playwright/custom-error",
|
|
25
|
+
rules: customError,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export { playwright };
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheXdyaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbmZyYXN0cnVjdHVyZS90ZXN0aW5nL3BsYXl3cmlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsS0FBSyxVQUFVLFVBQVU7SUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0lBRXBELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1NBQ25DLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFVLENBQUMsQ0FDM0MsQ0FBQztJQUVGLE9BQU8sWUFBWSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssRUFBRSxDQUFDLDhCQUE4QixDQUFDO1FBQ3ZDLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsS0FBSyxFQUFFLFdBQVc7S0FDbkIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwiZXNsaW50L2NvbmZpZ1wiO1xuXG4vKipcbiAqIEJ1aWxkIGFuZCByZXR1cm4gUGxheXdyaWdodC1zcGVjaWZpYyBFU0xpbnQgY29uZmlncyBhbmQgcnVsZSBhZGp1c3RtZW50cy5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXdhaXQgcGxheXdyaWdodCgpO1xuICogYGBgXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBsYXl3cmlnaHQoKTogUHJvbWlzZTxMaW50ZXIuQ29uZmlnW10+IHtcbiAgY29uc3QgcGxheXdyaWdodE1vZHVsZSA9IGF3YWl0IGltcG9ydChcImVzbGludC1wbHVnaW4tcGxheXdyaWdodFwiKTtcbiAgY29uc3QgeyBjb25maWdzLCBydWxlcyB9ID0gcGxheXdyaWdodE1vZHVsZS5kZWZhdWx0O1xuXG4gIGNvbnN0IGN1c3RvbUlnbm9yZSA9IG5ldyBTZXQoW1wiXCJdKTtcblxuICBjb25zdCB7IHJ1bGVzOiByZWNvbW1lbmRlZFJ1bGVzID0ge30gfSA9IGNvbmZpZ3NbXCJmbGF0L3JlY29tbWVuZGVkXCJdO1xuICBjb25zdCBhbGxDb25maWdzID0gbmV3IFNldChPYmplY3Qua2V5cyh7IC4uLnJlY29tbWVuZGVkUnVsZXMgfSkpO1xuXG4gIGNvbnN0IGN1c3RvbUVycm9yID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5rZXlzKHJ1bGVzKVxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gIWN1c3RvbUlnbm9yZS5oYXMocnVsZSkpXG4gICAgICAubWFwKChydWxlKSA9PiBgcGxheXdyaWdodC8ke3J1bGV9YClcbiAgICAgIC5maWx0ZXIoKHJ1bGUpID0+ICFhbGxDb25maWdzLmhhcyhydWxlKSlcbiAgICAgIC5tYXAoKHJ1bGUpID0+IFtydWxlLCBcImVycm9yXCJdIGFzIGNvbnN0KSxcbiAgKTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKHtcbiAgICBleHRlbmRzOiBbY29uZmlnc1tcImZsYXQvcmVjb21tZW5kZWRcIl1dLFxuICAgIGZpbGVzOiBbXCJlMmUvKiovKi57c3BlYyx0ZXN0fS57dHMsanN9XCJdLFxuICAgIG5hbWU6IFwicGxheXdyaWdodC9jdXN0b20tZXJyb3JcIixcbiAgICBydWxlczogY3VzdG9tRXJyb3IsXG4gIH0pO1xufVxuXG5leHBvcnQgeyBwbGF5d3JpZ2h0IH07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/testing/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC;;;;;;;GAOG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAsCvD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { defineConfig } from "eslint/config";
|
|
2
|
+
/**
|
|
3
|
+
* Load Vitest plugin configuration when available.
|
|
4
|
+
* @returns Return value output.
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* await vitest();
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export async function vitest() {
|
|
11
|
+
const vitestModule = await import("@vitest/eslint-plugin");
|
|
12
|
+
const plugin = vitestModule.default;
|
|
13
|
+
const allConfig = plugin?.configs?.all;
|
|
14
|
+
if (allConfig === void 0) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
return defineConfig({ settings: { vitest: { typecheck: true } } }, {
|
|
18
|
+
extends: [allConfig],
|
|
19
|
+
files: ["**/*.{spec,test}.ts"],
|
|
20
|
+
name: "vitest/custom",
|
|
21
|
+
rules: {
|
|
22
|
+
"vitest/consistent-test-filename": [
|
|
23
|
+
"error",
|
|
24
|
+
{ pattern: String.raw `.*\.spec\.[tj]sx?$` },
|
|
25
|
+
],
|
|
26
|
+
"vitest/no-hooks": "off",
|
|
27
|
+
"vitest/prefer-expect-assertions": "off",
|
|
28
|
+
"vitest/require-mock-type-parameters": "off",
|
|
29
|
+
"vitest/unbound-method": "off",
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luZnJhc3RydWN0dXJlL3Rlc3Rpbmcvdml0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0M7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTTtJQUMxQixNQUFNLFlBQVksR0FBRyxNQUFNLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzNELE1BQU0sTUFBTSxHQUNWLFlBVUQsQ0FBQyxPQUFPLENBQUM7SUFDVixNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQztJQUV2QyxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sWUFBWSxDQUNqQixFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQzdDO1FBQ0UsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3BCLEtBQUssRUFBRSxDQUFDLHFCQUFxQixDQUFDO1FBQzlCLElBQUksRUFBRSxlQUFlO1FBQ3JCLEtBQUssRUFBRTtZQUNMLGlDQUFpQyxFQUFFO2dCQUNqQyxPQUFPO2dCQUNQLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUEsb0JBQW9CLEVBQUU7YUFDNUM7WUFDRCxpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGlDQUFpQyxFQUFFLEtBQUs7WUFDeEMscUNBQXFDLEVBQUUsS0FBSztZQUM1Qyx1QkFBdUIsRUFBRSxLQUFLO1NBQy9CO0tBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwiZXNsaW50L2NvbmZpZ1wiO1xuXG4vKipcbiAqIExvYWQgVml0ZXN0IHBsdWdpbiBjb25maWd1cmF0aW9uIHdoZW4gYXZhaWxhYmxlLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBhd2FpdCB2aXRlc3QoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdml0ZXN0KCk6IFByb21pc2U8TGludGVyLkNvbmZpZ1tdPiB7XG4gIGNvbnN0IHZpdGVzdE1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkB2aXRlc3QvZXNsaW50LXBsdWdpblwiKTtcbiAgY29uc3QgcGx1Z2luID0gKFxuICAgIHZpdGVzdE1vZHVsZSBhcyB7XG4gICAgICAvKiogRGVmYXVsdCBoZWxwZXIgdmFsdWUuICovXG4gICAgICBkZWZhdWx0Pzoge1xuICAgICAgICAvKiogQ29uZmlncyBoZWxwZXIgdmFsdWUuICovXG4gICAgICAgIGNvbmZpZ3M/OiB7XG4gICAgICAgICAgLyoqIEFsbCBoZWxwZXIgdmFsdWUuICovXG4gICAgICAgICAgYWxsPzogTGludGVyLkNvbmZpZztcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfVxuICApLmRlZmF1bHQ7XG4gIGNvbnN0IGFsbENvbmZpZyA9IHBsdWdpbj8uY29uZmlncz8uYWxsO1xuXG4gIGlmIChhbGxDb25maWcgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgeyBzZXR0aW5nczogeyB2aXRlc3Q6IHsgdHlwZWNoZWNrOiB0cnVlIH0gfSB9LFxuICAgIHtcbiAgICAgIGV4dGVuZHM6IFthbGxDb25maWddLFxuICAgICAgZmlsZXM6IFtcIioqLyoue3NwZWMsdGVzdH0udHNcIl0sXG4gICAgICBuYW1lOiBcInZpdGVzdC9jdXN0b21cIixcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIFwidml0ZXN0L2NvbnNpc3RlbnQtdGVzdC1maWxlbmFtZVwiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIHsgcGF0dGVybjogU3RyaW5nLnJhd2AuKlxcLnNwZWNcXC5bdGpdc3g/JGAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgXCJ2aXRlc3Qvbm8taG9va3NcIjogXCJvZmZcIixcbiAgICAgICAgXCJ2aXRlc3QvcHJlZmVyLWV4cGVjdC1hc3NlcnRpb25zXCI6IFwib2ZmXCIsXG4gICAgICAgIFwidml0ZXN0L3JlcXVpcmUtbW9jay10eXBlLXBhcmFtZXRlcnNcIjogXCJvZmZcIixcbiAgICAgICAgXCJ2aXRlc3QvdW5ib3VuZC1tZXRob2RcIjogXCJvZmZcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Linter } from "eslint";
|
|
2
|
-
import type { PluginName } from "
|
|
2
|
+
import type { PluginName } from "../domain/index.js";
|
|
3
3
|
/** Runtime loading modes for plugin config loaders. */
|
|
4
4
|
type LoadMode = "optional" | "required";
|
|
5
5
|
/**
|
|
@@ -24,17 +24,6 @@ declare function applyRuleOverrides(config: Linter.Config[], ruleOverrides?: Lin
|
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
declare function collectAvailablePlugins(configs: Linter.Config[]): ReadonlySet<string>;
|
|
27
|
-
/**
|
|
28
|
-
* Checks if a plugin is disabled in the options.
|
|
29
|
-
* @param pluginName Input pluginName value.
|
|
30
|
-
* @param disabledPlugins Input disabledPlugins value.
|
|
31
|
-
* @returns Return value output.
|
|
32
|
-
* @example
|
|
33
|
-
* ```typescript
|
|
34
|
-
* isPluginDisabled();
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
declare function isPluginDisabled(pluginName: PluginName, disabledPlugins?: readonly PluginName[]): boolean;
|
|
38
27
|
/**
|
|
39
28
|
* Loads a plugin config with a helpful, colorful error message on failure.
|
|
40
29
|
* @param pluginName Input pluginName value.
|
|
@@ -47,6 +36,6 @@ declare function isPluginDisabled(pluginName: PluginName, disabledPlugins?: read
|
|
|
47
36
|
* ```
|
|
48
37
|
*/
|
|
49
38
|
declare function loadPluginConfig(pluginName: PluginName, loader: () => Linter.Config[] | Promise<Linter.Config[]>, mode?: LoadMode): Promise<Linter.Config[]>;
|
|
50
|
-
export { applyRuleOverrides, collectAvailablePlugins,
|
|
39
|
+
export { applyRuleOverrides, collectAvailablePlugins, loadPluginConfig };
|
|
51
40
|
export type { LoadMode };
|
|
52
41
|
//# sourceMappingURL=utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/infrastructure/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI5C,uDAAuD;AACvD,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAExC;;;;;;;;;;GAUG;AACH,iBAAS,kBAAkB,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EACvB,aAAa,CAAC,EAAE,MAAM,CAAC,WAAW,EAClC,gBAAgB,GAAE,WAAW,CAAC,MAAM,CAAa,GAChD,MAAM,CAAC,MAAM,EAAE,CAcjB;AAED;;;;;;;;GAQG;AACH,iBAAS,uBAAuB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GACvB,WAAW,CAAC,MAAM,CAAC,CAYrB;AA+BD;;;;;;;;;;GAUG;AACH,iBAAe,gBAAgB,CAC7B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EACxD,IAAI,GAAE,QAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAY1B;AA4BD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,CAAC;AAEzE,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { reportPluginLoadIssue, reportRuleOverrideSkip } from "./diagnostics.js";
|
|
2
|
+
/**
|
|
3
|
+
* Applies rule overrides to a configuration array.
|
|
4
|
+
* @param config Input config value.
|
|
5
|
+
* @param ruleOverrides Input ruleOverrides value.
|
|
6
|
+
* @param availablePlugins Input availablePlugins value.
|
|
7
|
+
* @returns Return value output.
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* applyRuleOverrides([], { "no-console": "off" });
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
function applyRuleOverrides(config, ruleOverrides, availablePlugins = new Set()) {
|
|
14
|
+
const filteredRules = filterRuleOverrides(ruleOverrides, availablePlugins);
|
|
15
|
+
if (filteredRules === void 0) {
|
|
16
|
+
return config;
|
|
17
|
+
}
|
|
18
|
+
return [
|
|
19
|
+
...config,
|
|
20
|
+
{
|
|
21
|
+
name: "custom/rule-overrides",
|
|
22
|
+
rules: filteredRules,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Collects plugin names from config entries.
|
|
28
|
+
* @param configs Input configs value.
|
|
29
|
+
* @returns Return value output.
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* collectAvailablePlugins();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
function collectAvailablePlugins(configs) {
|
|
36
|
+
const plugins = new Set();
|
|
37
|
+
for (const config of configs) {
|
|
38
|
+
if (config.plugins !== void 0) {
|
|
39
|
+
for (const pluginName of Object.keys(config.plugins)) {
|
|
40
|
+
plugins.add(pluginName);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return plugins;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Filters rule overrides to those that can be applied.
|
|
48
|
+
* @param ruleOverrides Input ruleOverrides value.
|
|
49
|
+
* @param availablePlugins Input availablePlugins value.
|
|
50
|
+
* @returns Return value output.
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* filterRuleOverrides();
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
function filterRuleOverrides(ruleOverrides, availablePlugins) {
|
|
57
|
+
if (ruleOverrides === void 0 || Object.keys(ruleOverrides).length === 0) {
|
|
58
|
+
return void 0;
|
|
59
|
+
}
|
|
60
|
+
const filteredRules = {};
|
|
61
|
+
for (const [ruleName, ruleValue] of Object.entries(ruleOverrides)) {
|
|
62
|
+
if (!shouldSkipRuleOverride(ruleName, availablePlugins)) {
|
|
63
|
+
filteredRules[ruleName] = ruleValue;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return Object.keys(filteredRules).length === 0 ? void 0 : filteredRules;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Loads a plugin config with a helpful, colorful error message on failure.
|
|
70
|
+
* @param pluginName Input pluginName value.
|
|
71
|
+
* @param loader Input loader value.
|
|
72
|
+
* @param mode Specifies whether loader failures are fatal or skippable.
|
|
73
|
+
* @returns Return value output.
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* loadPluginConfig();
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
async function loadPluginConfig(pluginName, loader, mode = "optional") {
|
|
80
|
+
try {
|
|
81
|
+
return await loader();
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
reportPluginLoadIssue(pluginName, error, mode);
|
|
85
|
+
if (mode === "required") {
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Determines whether a rule override should be skipped.
|
|
93
|
+
* @param ruleName Input ruleName value.
|
|
94
|
+
* @param availablePlugins Input availablePlugins value.
|
|
95
|
+
* @returns Return value output.
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* shouldSkipRuleOverride();
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
function shouldSkipRuleOverride(ruleName, availablePlugins) {
|
|
102
|
+
const [pluginName = ""] = ruleName.split("/");
|
|
103
|
+
const isPluginRule = ruleName.includes("/");
|
|
104
|
+
const hasPlugin = availablePlugins.has(pluginName);
|
|
105
|
+
if (isPluginRule && !hasPlugin) {
|
|
106
|
+
reportRuleOverrideSkip(ruleName, pluginName);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
export { applyRuleOverrides, collectAvailablePlugins, loadPluginConfig };
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZnJhc3RydWN0dXJlL3V0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLOUU7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsa0JBQWtCLENBQ3pCLE1BQXVCLEVBQ3ZCLGFBQWtDLEVBQ2xDLG1CQUF3QyxJQUFJLEdBQUcsRUFBRTtJQUVqRCxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUUzRSxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1Q7WUFDRSxJQUFJLEVBQUUsdUJBQXVCO1lBQzdCLEtBQUssRUFBRSxhQUFhO1NBQ0o7S0FDbkIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsdUJBQXVCLENBQzlCLE9BQXdCO0lBRXhCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFbEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLGFBQTZDLEVBQzdDLGdCQUFxQztJQUVyQyxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBdUIsRUFBRSxDQUFDO0lBRTdDLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDeEQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0FBQzFFLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixVQUFzQixFQUN0QixNQUF3RCxFQUN4RCxPQUFpQixVQUFVO0lBRTNCLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxNQUFNLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0MsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsc0JBQXNCLENBQzdCLFFBQWdCLEVBQ2hCLGdCQUFxQztJQUVyQyxNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbkQsSUFBSSxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5OYW1lIH0gZnJvbSBcIi4uL2RvbWFpblwiO1xuXG5pbXBvcnQgeyByZXBvcnRQbHVnaW5Mb2FkSXNzdWUsIHJlcG9ydFJ1bGVPdmVycmlkZVNraXAgfSBmcm9tIFwiLi9kaWFnbm9zdGljc1wiO1xuXG4vKiogUnVudGltZSBsb2FkaW5nIG1vZGVzIGZvciBwbHVnaW4gY29uZmlnIGxvYWRlcnMuICovXG50eXBlIExvYWRNb2RlID0gXCJvcHRpb25hbFwiIHwgXCJyZXF1aXJlZFwiO1xuXG4vKipcbiAqIEFwcGxpZXMgcnVsZSBvdmVycmlkZXMgdG8gYSBjb25maWd1cmF0aW9uIGFycmF5LlxuICogQHBhcmFtIGNvbmZpZyBJbnB1dCBjb25maWcgdmFsdWUuXG4gKiBAcGFyYW0gcnVsZU92ZXJyaWRlcyBJbnB1dCBydWxlT3ZlcnJpZGVzIHZhbHVlLlxuICogQHBhcmFtIGF2YWlsYWJsZVBsdWdpbnMgSW5wdXQgYXZhaWxhYmxlUGx1Z2lucyB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXBwbHlSdWxlT3ZlcnJpZGVzKFtdLCB7IFwibm8tY29uc29sZVwiOiBcIm9mZlwiIH0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGFwcGx5UnVsZU92ZXJyaWRlcyhcbiAgY29uZmlnOiBMaW50ZXIuQ29uZmlnW10sXG4gIHJ1bGVPdmVycmlkZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQsXG4gIGF2YWlsYWJsZVBsdWdpbnM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KCksXG4pOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBmaWx0ZXJlZFJ1bGVzID0gZmlsdGVyUnVsZU92ZXJyaWRlcyhydWxlT3ZlcnJpZGVzLCBhdmFpbGFibGVQbHVnaW5zKTtcblxuICBpZiAoZmlsdGVyZWRSdWxlcyA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLi4uY29uZmlnLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY3VzdG9tL3J1bGUtb3ZlcnJpZGVzXCIsXG4gICAgICBydWxlczogZmlsdGVyZWRSdWxlcyxcbiAgICB9IGFzIExpbnRlci5Db25maWcsXG4gIF07XG59XG5cbi8qKlxuICogQ29sbGVjdHMgcGx1Z2luIG5hbWVzIGZyb20gY29uZmlnIGVudHJpZXMuXG4gKiBAcGFyYW0gY29uZmlncyBJbnB1dCBjb25maWdzIHZhbHVlLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb2xsZWN0QXZhaWxhYmxlUGx1Z2lucygpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBdmFpbGFibGVQbHVnaW5zKFxuICBjb25maWdzOiBMaW50ZXIuQ29uZmlnW10sXG4pOiBSZWFkb25seVNldDxzdHJpbmc+IHtcbiAgY29uc3QgcGx1Z2lucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICBpZiAoY29uZmlnLnBsdWdpbnMgIT09IHZvaWQgMCkge1xuICAgICAgZm9yIChjb25zdCBwbHVnaW5OYW1lIG9mIE9iamVjdC5rZXlzKGNvbmZpZy5wbHVnaW5zKSkge1xuICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5OYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGx1Z2lucztcbn1cblxuLyoqXG4gKiBGaWx0ZXJzIHJ1bGUgb3ZlcnJpZGVzIHRvIHRob3NlIHRoYXQgY2FuIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gcnVsZU92ZXJyaWRlcyBJbnB1dCBydWxlT3ZlcnJpZGVzIHZhbHVlLlxuICogQHBhcmFtIGF2YWlsYWJsZVBsdWdpbnMgSW5wdXQgYXZhaWxhYmxlUGx1Z2lucyB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZmlsdGVyUnVsZU92ZXJyaWRlcygpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclJ1bGVPdmVycmlkZXMoXG4gIHJ1bGVPdmVycmlkZXM6IExpbnRlci5SdWxlc1JlY29yZCB8IHVuZGVmaW5lZCxcbiAgYXZhaWxhYmxlUGx1Z2luczogUmVhZG9ubHlTZXQ8c3RyaW5nPixcbik6IExpbnRlci5SdWxlc1JlY29yZCB8IHVuZGVmaW5lZCB7XG4gIGlmIChydWxlT3ZlcnJpZGVzID09PSB2b2lkIDAgfHwgT2JqZWN0LmtleXMocnVsZU92ZXJyaWRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkUnVsZXM6IExpbnRlci5SdWxlc1JlY29yZCA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3J1bGVOYW1lLCBydWxlVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJ1bGVPdmVycmlkZXMpKSB7XG4gICAgaWYgKCFzaG91bGRTa2lwUnVsZU92ZXJyaWRlKHJ1bGVOYW1lLCBhdmFpbGFibGVQbHVnaW5zKSkge1xuICAgICAgZmlsdGVyZWRSdWxlc1tydWxlTmFtZV0gPSBydWxlVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcmVkUnVsZXMpLmxlbmd0aCA9PT0gMCA/IHZvaWQgMCA6IGZpbHRlcmVkUnVsZXM7XG59XG5cbi8qKlxuICogTG9hZHMgYSBwbHVnaW4gY29uZmlnIHdpdGggYSBoZWxwZnVsLCBjb2xvcmZ1bCBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuXG4gKiBAcGFyYW0gcGx1Z2luTmFtZSBJbnB1dCBwbHVnaW5OYW1lIHZhbHVlLlxuICogQHBhcmFtIGxvYWRlciBJbnB1dCBsb2FkZXIgdmFsdWUuXG4gKiBAcGFyYW0gbW9kZSBTcGVjaWZpZXMgd2hldGhlciBsb2FkZXIgZmFpbHVyZXMgYXJlIGZhdGFsIG9yIHNraXBwYWJsZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbG9hZFBsdWdpbkNvbmZpZygpO1xuICogYGBgXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRQbHVnaW5Db25maWcoXG4gIHBsdWdpbk5hbWU6IFBsdWdpbk5hbWUsXG4gIGxvYWRlcjogKCkgPT4gTGludGVyLkNvbmZpZ1tdIHwgUHJvbWlzZTxMaW50ZXIuQ29uZmlnW10+LFxuICBtb2RlOiBMb2FkTW9kZSA9IFwib3B0aW9uYWxcIixcbik6IFByb21pc2U8TGludGVyLkNvbmZpZ1tdPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGxvYWRlcigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcG9ydFBsdWdpbkxvYWRJc3N1ZShwbHVnaW5OYW1lLCBlcnJvciwgbW9kZSk7XG5cbiAgICBpZiAobW9kZSA9PT0gXCJyZXF1aXJlZFwiKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBydWxlIG92ZXJyaWRlIHNob3VsZCBiZSBza2lwcGVkLlxuICogQHBhcmFtIHJ1bGVOYW1lIElucHV0IHJ1bGVOYW1lIHZhbHVlLlxuICogQHBhcmFtIGF2YWlsYWJsZVBsdWdpbnMgSW5wdXQgYXZhaWxhYmxlUGx1Z2lucyB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc2hvdWxkU2tpcFJ1bGVPdmVycmlkZSgpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBSdWxlT3ZlcnJpZGUoXG4gIHJ1bGVOYW1lOiBzdHJpbmcsXG4gIGF2YWlsYWJsZVBsdWdpbnM6IFJlYWRvbmx5U2V0PHN0cmluZz4sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgW3BsdWdpbk5hbWUgPSBcIlwiXSA9IHJ1bGVOYW1lLnNwbGl0KFwiL1wiKTtcbiAgY29uc3QgaXNQbHVnaW5SdWxlID0gcnVsZU5hbWUuaW5jbHVkZXMoXCIvXCIpO1xuICBjb25zdCBoYXNQbHVnaW4gPSBhdmFpbGFibGVQbHVnaW5zLmhhcyhwbHVnaW5OYW1lKTtcblxuICBpZiAoaXNQbHVnaW5SdWxlICYmICFoYXNQbHVnaW4pIHtcbiAgICByZXBvcnRSdWxlT3ZlcnJpZGVTa2lwKHJ1bGVOYW1lLCBwbHVnaW5OYW1lKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IHsgYXBwbHlSdWxlT3ZlcnJpZGVzLCBjb2xsZWN0QXZhaWxhYmxlUGx1Z2lucywgbG9hZFBsdWdpbkNvbmZpZyB9O1xuXG5leHBvcnQgdHlwZSB7IExvYWRNb2RlIH07XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codeperfect/eslint-config",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "A shareable flat ESLint config for TypeScript repositories",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -38,9 +38,10 @@
|
|
|
38
38
|
"commit": "npx --yes git-cz",
|
|
39
39
|
"prepare": "husky",
|
|
40
40
|
"\n# --------------- BUILDING --------------- #": "",
|
|
41
|
-
"build": "npm run clean && npm run compile",
|
|
41
|
+
"build": "npm run clean && npm run compile && npm run resolve-paths",
|
|
42
42
|
"clean": "npx --yes rimraf dist",
|
|
43
|
-
"compile": "tsc
|
|
43
|
+
"compile": "tsc --build --force ./tsconfig.build.json",
|
|
44
|
+
"resolve-paths": "tsc-alias --project ./tsconfig.build.json --resolve-full-paths",
|
|
44
45
|
"pack": "npm pack --pack-destination dist",
|
|
45
46
|
"\n# --------------- DOCS --------------- #": "",
|
|
46
47
|
"docs": "npm run docs:clean && npm run docs:api",
|
|
@@ -62,7 +63,7 @@
|
|
|
62
63
|
"eslint:inspect": "npx --yes @eslint/config-inspector",
|
|
63
64
|
"\n# --------------- TESTING --------------- #": "",
|
|
64
65
|
"typecheck": "tsc --noEmit",
|
|
65
|
-
"typecheck:spec": "tsc
|
|
66
|
+
"typecheck:spec": "tsc --project tsconfig.spec.json --noEmit",
|
|
66
67
|
"validate": "npm run lint && npm run typecheck && npm run typecheck:spec && npm run test && npm run build && npm run pack",
|
|
67
68
|
"\n\t• --------------- unit --------------- •": "",
|
|
68
69
|
"tdd": "npx --yes vitest run --watch --silent=true --coverage.enabled=false",
|
|
@@ -130,6 +131,7 @@
|
|
|
130
131
|
"lodash-es": "^4.17.23",
|
|
131
132
|
"rimraf": "^6.1.3",
|
|
132
133
|
"semantic-release": "^25.0.3",
|
|
134
|
+
"tsc-alias": "^1.8.16",
|
|
133
135
|
"typedoc": "^0.28.18",
|
|
134
136
|
"typedoc-plugin-markdown": "^4.11.0",
|
|
135
137
|
"typescript": "^5.9.3",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Linter } from "eslint";
|
|
2
|
-
import type { BoundariesConfig } from "../types";
|
|
3
|
-
/**
|
|
4
|
-
* Load boundaries plugin configuration when explicitly configured.
|
|
5
|
-
* @param config Input config value.
|
|
6
|
-
* @returns Return value output.
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const configs = boundaries({
|
|
10
|
-
* elements: [{ type: "shared", pattern: "src/shared" }],
|
|
11
|
-
* elementTypes: ["error", { default: "disallow", rules: [] }],
|
|
12
|
-
* });
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
declare function boundaries(config?: BoundariesConfig): Linter.Config[];
|
|
16
|
-
export { boundaries };
|
|
17
|
-
//# sourceMappingURL=boundaries.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boundaries.d.ts","sourceRoot":"","sources":["../../src/architecture/boundaries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAMrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIjD;;;;;;;;;;;GAWG;AACH,iBAAS,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,CA0B9D;AA+CD,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { createConfig, strict } from "eslint-plugin-boundaries/config";
|
|
2
|
-
import { defineConfig } from "eslint/config";
|
|
3
|
-
import { reportMissingBoundariesConfig } from "../diagnostics";
|
|
4
|
-
/**
|
|
5
|
-
* Load boundaries plugin configuration when explicitly configured.
|
|
6
|
-
* @param config Input config value.
|
|
7
|
-
* @returns Return value output.
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* const configs = boundaries({
|
|
11
|
-
* elements: [{ type: "shared", pattern: "src/shared" }],
|
|
12
|
-
* elementTypes: ["error", { default: "disallow", rules: [] }],
|
|
13
|
-
* });
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
function boundaries(config) {
|
|
17
|
-
if (!hasBoundariesConfig(config)) {
|
|
18
|
-
warnMissingConfig();
|
|
19
|
-
return [];
|
|
20
|
-
}
|
|
21
|
-
const { elements, elementTypes, files, ignores } = config;
|
|
22
|
-
const settings = {
|
|
23
|
-
...strict.settings,
|
|
24
|
-
"boundaries/elements": elements,
|
|
25
|
-
};
|
|
26
|
-
const rules = {
|
|
27
|
-
...strict.rules,
|
|
28
|
-
"boundaries/element-types": elementTypes,
|
|
29
|
-
};
|
|
30
|
-
const configObject = createConfig({
|
|
31
|
-
files: [...files],
|
|
32
|
-
...(ignores === void 0 ? {} : { ignores: [...ignores] }),
|
|
33
|
-
rules,
|
|
34
|
-
settings,
|
|
35
|
-
});
|
|
36
|
-
return defineConfig(configObject);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Checks if the boundaries configuration is present.
|
|
40
|
-
* @param config Input config value.
|
|
41
|
-
* @returns Return value output.
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* const ok = hasBoundariesConfig({
|
|
45
|
-
* files: ["src"],
|
|
46
|
-
* elements: [],
|
|
47
|
-
* elementTypes: ["error", { default: "disallow", rules: [] }],
|
|
48
|
-
* });
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
function hasBoundariesConfig(config) {
|
|
52
|
-
if (config === void 0) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
const { elements, elementTypes, files } = config;
|
|
56
|
-
return files !== void 0 && elements !== void 0 && elementTypes !== void 0;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Warns when boundaries configuration is missing.
|
|
60
|
-
* @example
|
|
61
|
-
* ```typescript
|
|
62
|
-
* warnMissingConfig();
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
function warnMissingConfig() {
|
|
66
|
-
reportMissingBoundariesConfig();
|
|
67
|
-
}
|
|
68
|
-
export { boundaries };
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRhcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXRlY3R1cmUvYm91bmRhcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLFVBQVUsQ0FBQyxNQUF5QjtJQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFMUQsTUFBTSxRQUFRLEdBQWE7UUFDekIsR0FBRyxNQUFNLENBQUMsUUFBUTtRQUNsQixxQkFBcUIsRUFBRSxRQUFRO0tBQ2hDLENBQUM7SUFFRixNQUFNLEtBQUssR0FBVTtRQUNuQixHQUFHLE1BQU0sQ0FBQyxLQUFLO1FBQ2YsMEJBQTBCLEVBQUUsWUFBWTtLQUN6QyxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2hDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDeEQsS0FBSztRQUNMLFFBQVE7S0FDVCxDQUFpQixDQUFDO0lBRW5CLE9BQU8sWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixNQUFvQztJQUVwQyxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BU3pDLENBQUM7SUFFRixPQUFPLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLElBQUksWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGlCQUFpQjtJQUN4Qiw2QkFBNkIsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbmZpZ09iamVjdCB9IGZyb20gXCJAZXNsaW50L2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgeyBSdWxlcywgU2V0dGluZ3MgfSBmcm9tIFwiZXNsaW50LXBsdWdpbi1ib3VuZGFyaWVzXCI7XG5cbmltcG9ydCB7IGNyZWF0ZUNvbmZpZywgc3RyaWN0IH0gZnJvbSBcImVzbGludC1wbHVnaW4tYm91bmRhcmllcy9jb25maWdcIjtcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJlc2xpbnQvY29uZmlnXCI7XG5cbmltcG9ydCB0eXBlIHsgQm91bmRhcmllc0NvbmZpZyB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5pbXBvcnQgeyByZXBvcnRNaXNzaW5nQm91bmRhcmllc0NvbmZpZyB9IGZyb20gXCIuLi9kaWFnbm9zdGljc1wiO1xuXG4vKipcbiAqIExvYWQgYm91bmRhcmllcyBwbHVnaW4gY29uZmlndXJhdGlvbiB3aGVuIGV4cGxpY2l0bHkgY29uZmlndXJlZC5cbiAqIEBwYXJhbSBjb25maWcgSW5wdXQgY29uZmlnIHZhbHVlLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjb25maWdzID0gYm91bmRhcmllcyh7XG4gKiBlbGVtZW50czogW3sgdHlwZTogXCJzaGFyZWRcIiwgcGF0dGVybjogXCJzcmMvc2hhcmVkXCIgfV0sXG4gKiBlbGVtZW50VHlwZXM6IFtcImVycm9yXCIsIHsgZGVmYXVsdDogXCJkaXNhbGxvd1wiLCBydWxlczogW10gfV0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBib3VuZGFyaWVzKGNvbmZpZz86IEJvdW5kYXJpZXNDb25maWcpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBpZiAoIWhhc0JvdW5kYXJpZXNDb25maWcoY29uZmlnKSkge1xuICAgIHdhcm5NaXNzaW5nQ29uZmlnKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgeyBlbGVtZW50cywgZWxlbWVudFR5cGVzLCBmaWxlcywgaWdub3JlcyB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IHNldHRpbmdzOiBTZXR0aW5ncyA9IHtcbiAgICAuLi5zdHJpY3Quc2V0dGluZ3MsXG4gICAgXCJib3VuZGFyaWVzL2VsZW1lbnRzXCI6IGVsZW1lbnRzLFxuICB9O1xuXG4gIGNvbnN0IHJ1bGVzOiBSdWxlcyA9IHtcbiAgICAuLi5zdHJpY3QucnVsZXMsXG4gICAgXCJib3VuZGFyaWVzL2VsZW1lbnQtdHlwZXNcIjogZWxlbWVudFR5cGVzLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpZ09iamVjdCA9IGNyZWF0ZUNvbmZpZyh7XG4gICAgZmlsZXM6IFsuLi5maWxlc10sXG4gICAgLi4uKGlnbm9yZXMgPT09IHZvaWQgMCA/IHt9IDogeyBpZ25vcmVzOiBbLi4uaWdub3Jlc10gfSksXG4gICAgcnVsZXMsXG4gICAgc2V0dGluZ3MsXG4gIH0pIGFzIENvbmZpZ09iamVjdDtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKGNvbmZpZ09iamVjdCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBib3VuZGFyaWVzIGNvbmZpZ3VyYXRpb24gaXMgcHJlc2VudC5cbiAqIEBwYXJhbSBjb25maWcgSW5wdXQgY29uZmlnIHZhbHVlLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvayA9IGhhc0JvdW5kYXJpZXNDb25maWcoe1xuICogICBmaWxlczogW1wic3JjXCJdLFxuICogICBlbGVtZW50czogW10sXG4gKiAgIGVsZW1lbnRUeXBlczogW1wiZXJyb3JcIiwgeyBkZWZhdWx0OiBcImRpc2FsbG93XCIsIHJ1bGVzOiBbXSB9XSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kYXJpZXNDb25maWcoXG4gIGNvbmZpZzogQm91bmRhcmllc0NvbmZpZyB8IHVuZGVmaW5lZCxcbik6IGNvbmZpZyBpcyBCb3VuZGFyaWVzQ29uZmlnIHtcbiAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBlbGVtZW50cywgZWxlbWVudFR5cGVzLCBmaWxlcyB9ID0gY29uZmlnIGFzIHtcbiAgICAvKiogRWxlbWVudHMgaGVscGVyIHZhbHVlLiAqL1xuICAgIGVsZW1lbnRzPzogdW5rbm93bjtcblxuICAgIC8qKiBFbGVtZW50VHlwZXMgaGVscGVyIHZhbHVlLiAqL1xuICAgIGVsZW1lbnRUeXBlcz86IHVua25vd247XG5cbiAgICAvKiogRmlsZXMgaGVscGVyIHZhbHVlLiAqL1xuICAgIGZpbGVzPzogdW5rbm93bjtcbiAgfTtcblxuICByZXR1cm4gZmlsZXMgIT09IHZvaWQgMCAmJiBlbGVtZW50cyAhPT0gdm9pZCAwICYmIGVsZW1lbnRUeXBlcyAhPT0gdm9pZCAwO1xufVxuXG4vKipcbiAqIFdhcm5zIHdoZW4gYm91bmRhcmllcyBjb25maWd1cmF0aW9uIGlzIG1pc3NpbmcuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogd2Fybk1pc3NpbmdDb25maWcoKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB3YXJuTWlzc2luZ0NvbmZpZygpOiB2b2lkIHtcbiAgcmVwb3J0TWlzc2luZ0JvdW5kYXJpZXNDb25maWcoKTtcbn1cblxuZXhwb3J0IHsgYm91bmRhcmllcyB9O1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import-x.d.ts","sourceRoot":"","sources":["../../src/architecture/import-x.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAqDrC;;;;;;;GAOG;AACH,iBAAe,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAmCjD;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "eslint/config";
|
|
2
|
-
/**
|
|
3
|
-
* Build custom error rules for import-x plugin by excluding certain rules
|
|
4
|
-
* and ensuring no overlap with existing configurations.
|
|
5
|
-
* @returns Return value output.
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* await buildCustomErrorRules();
|
|
9
|
-
* ```
|
|
10
|
-
*/
|
|
11
|
-
async function buildCustomErrorRules() {
|
|
12
|
-
const { flatConfigs, rules } = await import("eslint-plugin-import-x");
|
|
13
|
-
const { recommended, typescript, warnings } = flatConfigs;
|
|
14
|
-
const customIgnore = new Set([
|
|
15
|
-
"dynamic-import-chunkname",
|
|
16
|
-
"no-default-export",
|
|
17
|
-
"no-deprecated",
|
|
18
|
-
"no-named-export",
|
|
19
|
-
"no-namespace",
|
|
20
|
-
"no-unused-modules",
|
|
21
|
-
"order",
|
|
22
|
-
"prefer-default-export",
|
|
23
|
-
]);
|
|
24
|
-
const allConfigs = new Set([warnings, recommended, typescript].flatMap((config) => Object.keys(config.rules ?? {})));
|
|
25
|
-
const customError = Object.fromEntries(Object.keys(rules)
|
|
26
|
-
.filter((rule) => !customIgnore.has(rule))
|
|
27
|
-
.map((rule) => `import-x/${rule}`)
|
|
28
|
-
.filter((rule) => !allConfigs.has(rule))
|
|
29
|
-
.map((rule) => [rule, "error"]));
|
|
30
|
-
return [
|
|
31
|
-
warnings,
|
|
32
|
-
recommended,
|
|
33
|
-
typescript,
|
|
34
|
-
{
|
|
35
|
-
name: "import-x/custom-error",
|
|
36
|
-
rules: customError,
|
|
37
|
-
},
|
|
38
|
-
];
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Loads the import-x plugin configuration.
|
|
42
|
-
* @returns Return value output.
|
|
43
|
-
* @example
|
|
44
|
-
* ```typescript
|
|
45
|
-
* await importX();
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
|
-
async function importX() {
|
|
49
|
-
return defineConfig(...(await buildCustomErrorRules()), {
|
|
50
|
-
name: "import-x/custom-typescript",
|
|
51
|
-
rules: {
|
|
52
|
-
"import-x/no-relative-parent-imports": "off",
|
|
53
|
-
"import-x/unambiguous": "off",
|
|
54
|
-
},
|
|
55
|
-
}, {
|
|
56
|
-
name: "import-x/custom-node_modules",
|
|
57
|
-
rules: {
|
|
58
|
-
"import-x/no-internal-modules": [
|
|
59
|
-
"error",
|
|
60
|
-
{
|
|
61
|
-
allow: [
|
|
62
|
-
"eslint/config",
|
|
63
|
-
"eslint-plugin-boundaries/config",
|
|
64
|
-
"eslint-plugin-prettier/recommended",
|
|
65
|
-
"vitest/config",
|
|
66
|
-
"@eslint-community/eslint-plugin-eslint-comments/configs",
|
|
67
|
-
],
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
}, {
|
|
72
|
-
ignores: ["*", "packages/*/*", "packages/*/*/*"],
|
|
73
|
-
name: "import-x/custom-root-config-files",
|
|
74
|
-
rules: {
|
|
75
|
-
"import-x/no-default-export": "error",
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
export { importX };
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl0ZWN0dXJlL2ltcG9ydC14LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0M7Ozs7Ozs7O0dBUUc7QUFDSCxLQUFLLFVBQVUscUJBQXFCO0lBQ2xDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0RSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFFMUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDM0IsMEJBQTBCO1FBQzFCLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsT0FBTztRQUNQLHVCQUF1QjtLQUN4QixDQUFDLENBQUM7SUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FDeEIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FDaEMsQ0FDRixDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDZixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7U0FDakMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQVUsQ0FBQyxDQUMzQyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQXlCO1FBQ3pCLFdBQTRCO1FBQzVCLFVBQTJCO1FBQzNCO1lBQ0UsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixLQUFLLEVBQUUsV0FBVztTQUNuQjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILEtBQUssVUFBVSxPQUFPO0lBQ3BCLE9BQU8sWUFBWSxDQUNqQixHQUFHLENBQUMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLEVBQ2xDO1FBQ0UsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxLQUFLLEVBQUU7WUFDTCxxQ0FBcUMsRUFBRSxLQUFLO1lBQzVDLHNCQUFzQixFQUFFLEtBQUs7U0FDOUI7S0FDRixFQUNEO1FBQ0UsSUFBSSxFQUFFLDhCQUE4QjtRQUNwQyxLQUFLLEVBQUU7WUFDTCw4QkFBOEIsRUFBRTtnQkFDOUIsT0FBTztnQkFDUDtvQkFDRSxLQUFLLEVBQUU7d0JBQ0wsZUFBZTt3QkFDZixpQ0FBaUM7d0JBQ2pDLG9DQUFvQzt3QkFDcEMsZUFBZTt3QkFDZix5REFBeUQ7cUJBQzFEO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLEVBQ0Q7UUFDRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixDQUFDO1FBQ2hELElBQUksRUFBRSxtQ0FBbUM7UUFDekMsS0FBSyxFQUFFO1lBQ0wsNEJBQTRCLEVBQUUsT0FBTztTQUN0QztLQUNGLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcImVzbGludC9jb25maWdcIjtcblxuLyoqXG4gKiBCdWlsZCBjdXN0b20gZXJyb3IgcnVsZXMgZm9yIGltcG9ydC14IHBsdWdpbiBieSBleGNsdWRpbmcgY2VydGFpbiBydWxlc1xuICogYW5kIGVuc3VyaW5nIG5vIG92ZXJsYXAgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9ucy5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXdhaXQgYnVpbGRDdXN0b21FcnJvclJ1bGVzKCk7XG4gKiBgYGBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRDdXN0b21FcnJvclJ1bGVzKCk6IFByb21pc2U8TGludGVyLkNvbmZpZ1tdPiB7XG4gIGNvbnN0IHsgZmxhdENvbmZpZ3MsIHJ1bGVzIH0gPSBhd2FpdCBpbXBvcnQoXCJlc2xpbnQtcGx1Z2luLWltcG9ydC14XCIpO1xuICBjb25zdCB7IHJlY29tbWVuZGVkLCB0eXBlc2NyaXB0LCB3YXJuaW5ncyB9ID0gZmxhdENvbmZpZ3M7XG5cbiAgY29uc3QgY3VzdG9tSWdub3JlID0gbmV3IFNldChbXG4gICAgXCJkeW5hbWljLWltcG9ydC1jaHVua25hbWVcIixcbiAgICBcIm5vLWRlZmF1bHQtZXhwb3J0XCIsXG4gICAgXCJuby1kZXByZWNhdGVkXCIsXG4gICAgXCJuby1uYW1lZC1leHBvcnRcIixcbiAgICBcIm5vLW5hbWVzcGFjZVwiLFxuICAgIFwibm8tdW51c2VkLW1vZHVsZXNcIixcbiAgICBcIm9yZGVyXCIsXG4gICAgXCJwcmVmZXItZGVmYXVsdC1leHBvcnRcIixcbiAgXSk7XG5cbiAgY29uc3QgYWxsQ29uZmlncyA9IG5ldyBTZXQoXG4gICAgW3dhcm5pbmdzLCByZWNvbW1lbmRlZCwgdHlwZXNjcmlwdF0uZmxhdE1hcCgoY29uZmlnKSA9PlxuICAgICAgT2JqZWN0LmtleXMoY29uZmlnLnJ1bGVzID8/IHt9KSxcbiAgICApLFxuICApO1xuXG4gIGNvbnN0IGN1c3RvbUVycm9yID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5rZXlzKHJ1bGVzKVxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gIWN1c3RvbUlnbm9yZS5oYXMocnVsZSkpXG4gICAgICAubWFwKChydWxlKSA9PiBgaW1wb3J0LXgvJHtydWxlfWApXG4gICAgICAuZmlsdGVyKChydWxlKSA9PiAhYWxsQ29uZmlncy5oYXMocnVsZSkpXG4gICAgICAubWFwKChydWxlKSA9PiBbcnVsZSwgXCJlcnJvclwiXSBhcyBjb25zdCksXG4gICk7XG5cbiAgcmV0dXJuIFtcbiAgICB3YXJuaW5ncyBhcyBMaW50ZXIuQ29uZmlnLFxuICAgIHJlY29tbWVuZGVkIGFzIExpbnRlci5Db25maWcsXG4gICAgdHlwZXNjcmlwdCBhcyBMaW50ZXIuQ29uZmlnLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1wb3J0LXgvY3VzdG9tLWVycm9yXCIsXG4gICAgICBydWxlczogY3VzdG9tRXJyb3IsXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBMb2FkcyB0aGUgaW1wb3J0LXggcGx1Z2luIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGF3YWl0IGltcG9ydFgoKTtcbiAqIGBgYFxuICovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRYKCk6IFByb21pc2U8TGludGVyLkNvbmZpZ1tdPiB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uKGF3YWl0IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcygpKSxcbiAgICB7XG4gICAgICBuYW1lOiBcImltcG9ydC14L2N1c3RvbS10eXBlc2NyaXB0XCIsXG4gICAgICBydWxlczoge1xuICAgICAgICBcImltcG9ydC14L25vLXJlbGF0aXZlLXBhcmVudC1pbXBvcnRzXCI6IFwib2ZmXCIsXG4gICAgICAgIFwiaW1wb3J0LXgvdW5hbWJpZ3VvdXNcIjogXCJvZmZcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImltcG9ydC14L2N1c3RvbS1ub2RlX21vZHVsZXNcIixcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIFwiaW1wb3J0LXgvbm8taW50ZXJuYWwtbW9kdWxlc1wiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgIFwiZXNsaW50L2NvbmZpZ1wiLFxuICAgICAgICAgICAgICBcImVzbGludC1wbHVnaW4tYm91bmRhcmllcy9jb25maWdcIixcbiAgICAgICAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyL3JlY29tbWVuZGVkXCIsXG4gICAgICAgICAgICAgIFwidml0ZXN0L2NvbmZpZ1wiLFxuICAgICAgICAgICAgICBcIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC1wbHVnaW4tZXNsaW50LWNvbW1lbnRzL2NvbmZpZ3NcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZ25vcmVzOiBbXCIqXCIsIFwicGFja2FnZXMvKi8qXCIsIFwicGFja2FnZXMvKi8qLypcIl0sXG4gICAgICBuYW1lOiBcImltcG9ydC14L2N1c3RvbS1yb290LWNvbmZpZy1maWxlc1wiLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgXCJpbXBvcnQteC9uby1kZWZhdWx0LWV4cG9ydFwiOiBcImVycm9yXCIsXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCB7IGltcG9ydFggfTtcbiJdfQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/architecture/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { boundaries } from "./boundaries";
|
|
2
|
-
export { importX } from "./import-x";
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl0ZWN0dXJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGJvdW5kYXJpZXMgfSBmcm9tIFwiLi9ib3VuZGFyaWVzXCI7XG5leHBvcnQgeyBpbXBvcnRYIH0gZnJvbSBcIi4vaW1wb3J0LXhcIjtcbiJdfQ==
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/** Expected config names when all documented modules are enabled in order. */
|
|
2
|
-
declare const fullCompositionNames: readonly ["core-codeperfect", "core-eslint", "core-resolver", "core-typescript", "architecture-import-x", "docs-comments", "docs-jsdoc", "testing-jasmine", "testing-jest", "testing-playwright", "testing-vitest", "domain-rxjs", "style-stylistic", "style-perfectionist", "style-unicorn", "style-prettier", "architecture-boundaries"];
|
|
3
|
-
/** Expected config names when selected optional modules are disabled. */
|
|
4
|
-
declare const reducedCompositionNames: readonly ["core-codeperfect", "core-eslint", "core-resolver", "core-typescript", "architecture-import-x", "docs-comments", "docs-jsdoc", "testing-jasmine", "testing-jest", "testing-playwright", "domain-rxjs", "style-stylistic", "style-perfectionist", "style-unicorn"];
|
|
5
|
-
export { fullCompositionNames, reducedCompositionNames };
|
|
6
|
-
//# sourceMappingURL=config-composition.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-composition.d.ts","sourceRoot":"","sources":["../src/config-composition.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,QAAA,MAAM,oBAAoB,4UAkBhB,CAAC;AAEX,yEAAyE;AACzE,QAAA,MAAM,uBAAuB,6QAenB,CAAC;AAEX,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/** Expected config names when all documented modules are enabled in order. */
|
|
2
|
-
const fullCompositionNames = [
|
|
3
|
-
"core-codeperfect",
|
|
4
|
-
"core-eslint",
|
|
5
|
-
"core-resolver",
|
|
6
|
-
"core-typescript",
|
|
7
|
-
"architecture-import-x",
|
|
8
|
-
"docs-comments",
|
|
9
|
-
"docs-jsdoc",
|
|
10
|
-
"testing-jasmine",
|
|
11
|
-
"testing-jest",
|
|
12
|
-
"testing-playwright",
|
|
13
|
-
"testing-vitest",
|
|
14
|
-
"domain-rxjs",
|
|
15
|
-
"style-stylistic",
|
|
16
|
-
"style-perfectionist",
|
|
17
|
-
"style-unicorn",
|
|
18
|
-
"style-prettier",
|
|
19
|
-
"architecture-boundaries",
|
|
20
|
-
];
|
|
21
|
-
/** Expected config names when selected optional modules are disabled. */
|
|
22
|
-
const reducedCompositionNames = [
|
|
23
|
-
"core-codeperfect",
|
|
24
|
-
"core-eslint",
|
|
25
|
-
"core-resolver",
|
|
26
|
-
"core-typescript",
|
|
27
|
-
"architecture-import-x",
|
|
28
|
-
"docs-comments",
|
|
29
|
-
"docs-jsdoc",
|
|
30
|
-
"testing-jasmine",
|
|
31
|
-
"testing-jest",
|
|
32
|
-
"testing-playwright",
|
|
33
|
-
"domain-rxjs",
|
|
34
|
-
"style-stylistic",
|
|
35
|
-
"style-perfectionist",
|
|
36
|
-
"style-unicorn",
|
|
37
|
-
];
|
|
38
|
-
export { fullCompositionNames, reducedCompositionNames };
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWNvbXBvc2l0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy1jb21wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4RUFBOEU7QUFDOUUsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixrQkFBa0I7SUFDbEIsYUFBYTtJQUNiLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLGVBQWU7SUFDZixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIseUJBQXlCO0NBQ2pCLENBQUM7QUFFWCx5RUFBeUU7QUFDekUsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixrQkFBa0I7SUFDbEIsYUFBYTtJQUNiLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLGVBQWU7SUFDZixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxvQkFBb0I7SUFDcEIsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsZUFBZTtDQUNQLENBQUM7QUFFWCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFeHBlY3RlZCBjb25maWcgbmFtZXMgd2hlbiBhbGwgZG9jdW1lbnRlZCBtb2R1bGVzIGFyZSBlbmFibGVkIGluIG9yZGVyLiAqL1xuY29uc3QgZnVsbENvbXBvc2l0aW9uTmFtZXMgPSBbXG4gIFwiY29yZS1jb2RlcGVyZmVjdFwiLFxuICBcImNvcmUtZXNsaW50XCIsXG4gIFwiY29yZS1yZXNvbHZlclwiLFxuICBcImNvcmUtdHlwZXNjcmlwdFwiLFxuICBcImFyY2hpdGVjdHVyZS1pbXBvcnQteFwiLFxuICBcImRvY3MtY29tbWVudHNcIixcbiAgXCJkb2NzLWpzZG9jXCIsXG4gIFwidGVzdGluZy1qYXNtaW5lXCIsXG4gIFwidGVzdGluZy1qZXN0XCIsXG4gIFwidGVzdGluZy1wbGF5d3JpZ2h0XCIsXG4gIFwidGVzdGluZy12aXRlc3RcIixcbiAgXCJkb21haW4tcnhqc1wiLFxuICBcInN0eWxlLXN0eWxpc3RpY1wiLFxuICBcInN0eWxlLXBlcmZlY3Rpb25pc3RcIixcbiAgXCJzdHlsZS11bmljb3JuXCIsXG4gIFwic3R5bGUtcHJldHRpZXJcIixcbiAgXCJhcmNoaXRlY3R1cmUtYm91bmRhcmllc1wiLFxuXSBhcyBjb25zdDtcblxuLyoqIEV4cGVjdGVkIGNvbmZpZyBuYW1lcyB3aGVuIHNlbGVjdGVkIG9wdGlvbmFsIG1vZHVsZXMgYXJlIGRpc2FibGVkLiAqL1xuY29uc3QgcmVkdWNlZENvbXBvc2l0aW9uTmFtZXMgPSBbXG4gIFwiY29yZS1jb2RlcGVyZmVjdFwiLFxuICBcImNvcmUtZXNsaW50XCIsXG4gIFwiY29yZS1yZXNvbHZlclwiLFxuICBcImNvcmUtdHlwZXNjcmlwdFwiLFxuICBcImFyY2hpdGVjdHVyZS1pbXBvcnQteFwiLFxuICBcImRvY3MtY29tbWVudHNcIixcbiAgXCJkb2NzLWpzZG9jXCIsXG4gIFwidGVzdGluZy1qYXNtaW5lXCIsXG4gIFwidGVzdGluZy1qZXN0XCIsXG4gIFwidGVzdGluZy1wbGF5d3JpZ2h0XCIsXG4gIFwiZG9tYWluLXJ4anNcIixcbiAgXCJzdHlsZS1zdHlsaXN0aWNcIixcbiAgXCJzdHlsZS1wZXJmZWN0aW9uaXN0XCIsXG4gIFwic3R5bGUtdW5pY29yblwiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHsgZnVsbENvbXBvc2l0aW9uTmFtZXMsIHJlZHVjZWRDb21wb3NpdGlvbk5hbWVzIH07XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-factory.d.ts","sourceRoot":"","sources":["../src/config-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA2C7C;;;;;;;;GAQG;AACH,iBAAe,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAc3E;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/config-factory.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "eslint/config";
|
|
2
|
-
import { moduleTaxonomy } from "./module-taxonomy";
|
|
3
|
-
import { pluginLoaders } from "./plugin-loaders";
|
|
4
|
-
import { applyRuleOverrides, collectAvailablePlugins, isPluginDisabled, loadPluginConfig, } from "./utilities";
|
|
5
|
-
/**
|
|
6
|
-
* Builds the list of plugin config loaders.
|
|
7
|
-
* @param options Input options value.
|
|
8
|
-
* @returns Return value output.
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* buildPluginConfigLoaders({});
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
function buildPluginConfigLoaders(options) {
|
|
15
|
-
const disabledPlugins = [...(options.disabledPlugins ?? [])];
|
|
16
|
-
const loaders = [];
|
|
17
|
-
for (const { pluginName } of moduleTaxonomy) {
|
|
18
|
-
const loaderEntry = pluginLoaders[pluginName];
|
|
19
|
-
if (!isPluginDisabled(pluginName, disabledPlugins)) {
|
|
20
|
-
loaders.push(loadPluginConfig(pluginName, loaderEntry.loader(options), loaderEntry.mode));
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return loaders;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Creates the ESLint configuration with optional plugin and rule customization.
|
|
27
|
-
* @param options Input options value.
|
|
28
|
-
* @returns Return value output.
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* config();
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
async function config(options = {}) {
|
|
35
|
-
const { rules: ruleOverrides } = options;
|
|
36
|
-
const pluginConfigResults = await Promise.all(buildPluginConfigLoaders(options));
|
|
37
|
-
const pluginConfigs = pluginConfigResults.flat();
|
|
38
|
-
const finalConfig = applyRuleOverrides(pluginConfigs, ruleOverrides, collectAvailablePlugins(pluginConfigs));
|
|
39
|
-
return finalConfig.length === 0 ? [] : defineConfig(...finalConfig);
|
|
40
|
-
}
|
|
41
|
-
export { config };
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixnQkFBZ0IsR0FDakIsTUFBTSxhQUFhLENBQUM7QUFFckI7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHdCQUF3QixDQUMvQixPQUFzQjtJQUV0QixNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxPQUFPLEdBQStCLEVBQUUsQ0FBQztJQUUvQyxLQUFLLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sQ0FBQyxJQUFJLENBQ1YsZ0JBQWdCLENBQ2QsVUFBVSxFQUNWLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQ2pCLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsS0FBSyxVQUFVLE1BQU0sQ0FBQyxVQUF5QixFQUFFO0lBQy9DLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUMzQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FDbEMsQ0FBQztJQUNGLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUNwQyxhQUFhLEVBQ2IsYUFBYSxFQUNiLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUN2QyxDQUFDO0lBRUYsT0FBTyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tIFwiZXNsaW50XCI7XHJcblxyXG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwiZXNsaW50L2NvbmZpZ1wiO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBDb25maWdPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7IG1vZHVsZVRheG9ub215IH0gZnJvbSBcIi4vbW9kdWxlLXRheG9ub215XCI7XHJcbmltcG9ydCB7IHBsdWdpbkxvYWRlcnMgfSBmcm9tIFwiLi9wbHVnaW4tbG9hZGVyc1wiO1xyXG5pbXBvcnQge1xyXG4gIGFwcGx5UnVsZU92ZXJyaWRlcyxcclxuICBjb2xsZWN0QXZhaWxhYmxlUGx1Z2lucyxcclxuICBpc1BsdWdpbkRpc2FibGVkLFxyXG4gIGxvYWRQbHVnaW5Db25maWcsXHJcbn0gZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcblxyXG4vKipcclxuICogQnVpbGRzIHRoZSBsaXN0IG9mIHBsdWdpbiBjb25maWcgbG9hZGVycy5cclxuICogQHBhcmFtIG9wdGlvbnMgSW5wdXQgb3B0aW9ucyB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBidWlsZFBsdWdpbkNvbmZpZ0xvYWRlcnMoe30pO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGJ1aWxkUGx1Z2luQ29uZmlnTG9hZGVycyhcclxuICBvcHRpb25zOiBDb25maWdPcHRpb25zLFxyXG4pOiBQcm9taXNlPExpbnRlci5Db25maWdbXT5bXSB7XHJcbiAgY29uc3QgZGlzYWJsZWRQbHVnaW5zID0gWy4uLihvcHRpb25zLmRpc2FibGVkUGx1Z2lucyA/PyBbXSldO1xyXG4gIGNvbnN0IGxvYWRlcnM6IFByb21pc2U8TGludGVyLkNvbmZpZ1tdPltdID0gW107XHJcblxyXG4gIGZvciAoY29uc3QgeyBwbHVnaW5OYW1lIH0gb2YgbW9kdWxlVGF4b25vbXkpIHtcclxuICAgIGNvbnN0IGxvYWRlckVudHJ5ID0gcGx1Z2luTG9hZGVyc1twbHVnaW5OYW1lXTtcclxuXHJcbiAgICBpZiAoIWlzUGx1Z2luRGlzYWJsZWQocGx1Z2luTmFtZSwgZGlzYWJsZWRQbHVnaW5zKSkge1xyXG4gICAgICBsb2FkZXJzLnB1c2goXHJcbiAgICAgICAgbG9hZFBsdWdpbkNvbmZpZyhcclxuICAgICAgICAgIHBsdWdpbk5hbWUsXHJcbiAgICAgICAgICBsb2FkZXJFbnRyeS5sb2FkZXIob3B0aW9ucyksXHJcbiAgICAgICAgICBsb2FkZXJFbnRyeS5tb2RlLFxyXG4gICAgICAgICksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbG9hZGVycztcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgdGhlIEVTTGludCBjb25maWd1cmF0aW9uIHdpdGggb3B0aW9uYWwgcGx1Z2luIGFuZCBydWxlIGN1c3RvbWl6YXRpb24uXHJcbiAqIEBwYXJhbSBvcHRpb25zIElucHV0IG9wdGlvbnMgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uZmlnKCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gY29uZmlnKG9wdGlvbnM6IENvbmZpZ09wdGlvbnMgPSB7fSk6IFByb21pc2U8TGludGVyLkNvbmZpZ1tdPiB7XHJcbiAgY29uc3QgeyBydWxlczogcnVsZU92ZXJyaWRlcyB9ID0gb3B0aW9ucztcclxuXHJcbiAgY29uc3QgcGx1Z2luQ29uZmlnUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgYnVpbGRQbHVnaW5Db25maWdMb2FkZXJzKG9wdGlvbnMpLFxyXG4gICk7XHJcbiAgY29uc3QgcGx1Z2luQ29uZmlncyA9IHBsdWdpbkNvbmZpZ1Jlc3VsdHMuZmxhdCgpO1xyXG4gIGNvbnN0IGZpbmFsQ29uZmlnID0gYXBwbHlSdWxlT3ZlcnJpZGVzKFxyXG4gICAgcGx1Z2luQ29uZmlncyxcclxuICAgIHJ1bGVPdmVycmlkZXMsXHJcbiAgICBjb2xsZWN0QXZhaWxhYmxlUGx1Z2lucyhwbHVnaW5Db25maWdzKSxcclxuICApO1xyXG5cclxuICByZXR1cm4gZmluYWxDb25maWcubGVuZ3RoID09PSAwID8gW10gOiBkZWZpbmVDb25maWcoLi4uZmluYWxDb25maWcpO1xyXG59XHJcblxyXG5leHBvcnQgeyBjb25maWcgfTtcclxuIl19
|