@codeperfect/eslint-plugin 2.5.0 → 2.7.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.
Files changed (82) hide show
  1. package/README.md +3 -0
  2. package/dist/application/custom-rules.d.ts +3 -0
  3. package/dist/application/custom-rules.d.ts.map +1 -1
  4. package/dist/application/custom-rules.js +6 -2
  5. package/dist/application/index.d.ts +1 -1
  6. package/dist/application/index.d.ts.map +1 -1
  7. package/dist/application/index.js +2 -2
  8. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  9. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +1 -11
  10. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -1
  11. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +3 -13
  12. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +0 -1
  13. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -1
  14. package/dist/domain/architecture/consistent-barrel-files/index.js +1 -2
  15. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -1
  16. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +2 -12
  17. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  18. package/dist/domain/architecture/consistent-barrel-files/rule.js +4 -3
  19. package/dist/domain/architecture/index.d.ts +2 -1
  20. package/dist/domain/architecture/index.d.ts.map +1 -1
  21. package/dist/domain/architecture/index.js +3 -2
  22. package/dist/domain/architecture/no-import-export-extensions/index.d.ts +2 -0
  23. package/dist/domain/architecture/no-import-export-extensions/index.d.ts.map +1 -0
  24. package/dist/domain/architecture/no-import-export-extensions/index.js +2 -0
  25. package/dist/domain/architecture/no-import-export-extensions/no-import-export-extensions-rule.d.ts.map +1 -0
  26. package/dist/domain/architecture/no-import-export-extensions/no-import-export-extensions-rule.js +178 -0
  27. package/dist/domain/architecture/no-unused-exports/rule.js +4 -2
  28. package/dist/domain/core/index.d.ts +1 -0
  29. package/dist/domain/core/index.d.ts.map +1 -1
  30. package/dist/domain/core/index.js +2 -1
  31. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  32. package/dist/domain/core/no-multiple-declarators/rule.js +6 -1
  33. package/dist/domain/core/no-useless-delegation/index.d.ts +2 -0
  34. package/dist/domain/core/no-useless-delegation/index.d.ts.map +1 -0
  35. package/dist/domain/core/no-useless-delegation/index.js +2 -0
  36. package/dist/domain/core/no-useless-delegation/rule.d.ts +5 -0
  37. package/dist/domain/core/no-useless-delegation/rule.d.ts.map +1 -0
  38. package/dist/domain/core/no-useless-delegation/rule.js +204 -0
  39. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  40. package/dist/domain/docs/no-interface-member-docs/rule.js +6 -2
  41. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -1
  42. package/dist/domain/docs/require-example-language/reporting.js +38 -3
  43. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  44. package/dist/domain/docs/require-example-language/rule.js +6 -1
  45. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
  46. package/dist/domain/docs/single-line-jsdoc/rule.js +5 -3
  47. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -1
  48. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +4 -2
  49. package/dist/domain/index.d.ts +1 -1
  50. package/dist/domain/index.d.ts.map +1 -1
  51. package/dist/domain/index.js +2 -2
  52. package/dist/domain/testing/aaa/index.d.ts +1 -1
  53. package/dist/domain/testing/aaa/index.d.ts.map +1 -1
  54. package/dist/domain/testing/aaa/index.js +1 -1
  55. package/dist/domain/testing/aaa/types.d.ts +7 -9
  56. package/dist/domain/testing/aaa/types.d.ts.map +1 -1
  57. package/dist/domain/testing/aaa/types.js +1 -1
  58. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -1
  59. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +2 -18
  60. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.d.ts.map +1 -1
  61. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.js +49 -58
  62. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  63. package/dist/domain/testing/enforce-aaa-structure/rule.js +4 -1
  64. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts.map +1 -1
  65. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.js +10 -4
  66. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  67. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +10 -4
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +2 -2
  71. package/dist/infrastructure/codeperfect-plugin.d.ts +2 -0
  72. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -1
  73. package/dist/infrastructure/codeperfect-plugin.js +3 -2
  74. package/dist/infrastructure/presets.d.ts.map +1 -1
  75. package/dist/infrastructure/presets.js +3 -1
  76. package/package.json +43 -49
  77. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts.map +0 -1
  78. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.js +0 -134
  79. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts +0 -49
  80. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts.map +0 -1
  81. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.js +0 -49
  82. /package/dist/domain/architecture/{consistent-barrel-files → no-import-export-extensions}/no-import-export-extensions-rule.d.ts +0 -0
package/package.json CHANGED
@@ -1,24 +1,11 @@
1
1
  {
2
2
  "name": "@codeperfect/eslint-plugin",
3
- "version": "2.5.0",
3
+ "version": "2.7.0",
4
4
  "description": "Custom ESLint rules for TypeScript repositories",
5
- "keywords": [
6
- "eslint",
7
- "eslintplugin",
8
- "eslint-plugin",
9
- "custom-rules",
10
- "typescript",
11
- "linting"
12
- ],
13
- "homepage": "https://github.com/parloti/eslint-plugin#readme",
14
- "bugs": {
15
- "url": "https://github.com/parloti/eslint-plugin/issues"
16
- },
17
- "repository": {
18
- "type": "git",
19
- "url": "git+https://github.com/parloti/eslint-plugin.git"
20
- },
21
5
  "license": "MIT",
6
+ "repository": "github:parloti/eslint-plugin",
7
+ "homepage": "https://github.com/parloti/eslint-plugin#readme",
8
+ "bugs": "https://github.com/parloti/eslint-plugin/issues",
22
9
  "author": "CodePerfect",
23
10
  "type": "module",
24
11
  "exports": {
@@ -28,17 +15,18 @@
28
15
  "default": "./dist/index.js"
29
16
  }
30
17
  },
31
- "main": "./dist/index.js",
32
- "types": "./dist/index.d.ts",
33
- "files": [
34
- "dist"
35
- ],
18
+ "sideEffects": false,
19
+ "engines": {
20
+ "node": ">=24"
21
+ },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
36
25
  "scripts": {
37
26
  "\n# ---------------- GENERAL ---------------- #": "",
38
- "postinstall": "patch-package",
27
+ "prepare": "patch-package && husky",
39
28
  "\n# ------------------ SCM ------------------ #": "",
40
29
  "commit": "npx --yes git-cz",
41
- "prepare": "husky",
42
30
  "\n# ---------------- BUILDING ---------------- #": "",
43
31
  "build": "npm run clean && npm run compile && npm run resolve-paths",
44
32
  "clean": "npx --yes rimraf dist",
@@ -54,9 +42,9 @@
54
42
  "prettier": "npx --yes prettier --ignore-unknown --check .",
55
43
  "\n • ------------- fixing ------------- •": "",
56
44
  "eslint:fix": "npm run check:rules && npm run eslint -- --fix",
57
- "lint:fix": "npm run prettier:write && npm run eslint:fix",
45
+ "lint:fix": "npm run fmt && npm run eslint:fix",
58
46
  "lint:staged": "npx --yes tsx scripts/lint-staged.ts",
59
- "prettier:write": "npm run prettier -- --write",
47
+ "fmt": "npm run prettier -- --write",
60
48
  "\n • ------------ helpers ------------ •": "",
61
49
  "check:rules": "npx --yes eslint-config-prettier eslint.config.ts",
62
50
  "eslint:inspect": "npx --yes @eslint/config-inspector",
@@ -65,8 +53,7 @@
65
53
  "mutation": "npx --yes stryker run",
66
54
  "test:all": "npm run test && npm run e2e && npm run mutation",
67
55
  "typecheck": "tsc --noEmit",
68
- "typecheck:spec": "tsc -p tsconfig.spec.json --noEmit",
69
- "validate": "npm run lint && npm run typecheck && npm run typecheck:spec && npm run test:all && npm run build --if-present && npm run pack --if-present",
56
+ "validate": "npm run lint && npm run typecheck && npm run test:all && npm run build --if-present && npm run pack --if-present",
70
57
  "\n • -------------- unit -------------- •": "",
71
58
  "test": "npx --yes vitest run",
72
59
  "tdd": "npm run test -- --watch --silent=true --coverage.enabled=false",
@@ -75,16 +62,24 @@
75
62
  "docs:api": "npx --yes typedoc --options typedoc.json",
76
63
  "docs:clean": "npx --yes rimraf docs/api"
77
64
  },
65
+ "files": [
66
+ "dist"
67
+ ],
68
+ "keywords": [
69
+ "eslint",
70
+ "eslintplugin",
71
+ "eslint-plugin",
72
+ "custom-rules",
73
+ "typescript",
74
+ "linting"
75
+ ],
78
76
  "dependencies": {
79
- "@typescript-eslint/utils": "^8.67.0",
77
+ "@typescript-eslint/utils": "^8.68.0",
80
78
  "minimatch": "^10.2.6"
81
79
  },
82
- "peerDependencies": {
83
- "eslint": ">=10.9.0"
84
- },
85
80
  "devDependencies": {
86
81
  "@codeperfect/commitlint-config-emoji": "^1.0.0",
87
- "@codeperfect/eslint-config": "^1.13.0",
82
+ "@codeperfect/eslint-config": "^1.15.0",
88
83
  "@commitlint/cz-commitlint": "^21.2.2",
89
84
  "@eslint-community/eslint-plugin-eslint-comments": "^4.7.2",
90
85
  "@eslint/js": "^10.0.1",
@@ -93,42 +88,41 @@
93
88
  "@stryker-mutator/vitest-runner": "^10.0.0",
94
89
  "@stylistic/eslint-plugin": "^5.10.0",
95
90
  "@types/lodash-es": "^4.17.12",
96
- "@types/node": "^26.2.0",
97
- "@types/signale": "^1.4.7",
98
- "@typescript-eslint/rule-tester": "^8.67.0",
91
+ "@types/node": "^26.4.0",
92
+ "@typescript-eslint/rule-tester": "^8.69.0",
99
93
  "@vitest/coverage-v8": "^4.1.11",
100
94
  "@vitest/eslint-plugin": "^1.6.27",
101
95
  "chalk": "^6.0.0",
102
- "eslint": "^10.9.0",
96
+ "eslint": "^10.10.0",
103
97
  "eslint-config-prettier": "^10.1.8",
104
98
  "eslint-import-resolver-typescript": "^4.4.5",
105
99
  "eslint-plugin-boundaries": "^7.2.0",
106
100
  "eslint-plugin-eslint-plugin": "^7.6.2",
107
101
  "eslint-plugin-import-x": "^4.17.1",
108
102
  "eslint-plugin-jasmine": "^4.2.2",
109
- "eslint-plugin-jest": "^29.16.1",
110
- "eslint-plugin-jsdoc": "^64.2.1",
111
- "eslint-plugin-perfectionist": "^5.10.1",
103
+ "eslint-plugin-jest": "^29.16.6",
104
+ "eslint-plugin-jsdoc": "^64.3.5",
105
+ "eslint-plugin-perfectionist": "^5.11.0",
112
106
  "eslint-plugin-prettier": "^5.5.6",
113
- "eslint-plugin-rxjs-x": "^1.0.5",
114
- "eslint-plugin-unicorn": "^73.0.0",
115
- "globals": "^17.11.0",
107
+ "eslint-plugin-rxjs-x": "^1.0.6",
108
+ "eslint-plugin-unicorn": "^74.0.0",
109
+ "globals": "^17.12.0",
116
110
  "husky": "^9.1.7",
117
111
  "jiti": "^2.7.0",
118
- "lint-staged": "^17.3.0",
112
+ "lint-staged": "^17.5.0",
119
113
  "lodash-es": "^4.18.1",
120
114
  "patch-package": "^8.0.1",
121
115
  "prettier": "^3.9.6",
122
116
  "rimraf": "^6.1.3",
123
117
  "semantic-release": "^25.0.9",
124
- "tsc-alias": "^1.9.2",
118
+ "tsc-alias": "^1.9.4",
125
119
  "typedoc": "^0.28.20",
126
- "typedoc-plugin-markdown": "^4.12.0",
120
+ "typedoc-plugin-markdown": "^4.13.0",
127
121
  "typescript": "^6.0.3",
128
- "typescript-eslint": "^8.67.0",
122
+ "typescript-eslint": "^8.69.0",
129
123
  "vitest": "^4.1.11"
130
124
  },
131
- "publishConfig": {
132
- "access": "public"
125
+ "peerDependencies": {
126
+ "eslint": ">=10.10.0"
133
127
  }
134
128
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-import-export-extensions-rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAgJnC,8FAA8F;AAC9F,QAAA,MAAM,4BAA4B,EAAE,IAAI,CAAC,UA0BxC,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -1,134 +0,0 @@
1
- /** Set of disallowed module-specifier file extensions. */
2
- const disallowedExtensions = new Set([
3
- ".cjs",
4
- ".cts",
5
- ".js",
6
- ".jsx",
7
- ".mjs",
8
- ".mts",
9
- ".ts",
10
- ".tsx",
11
- ]);
12
- /**
13
- * Gets the trailing extension from a module specifier string.
14
- * @param source Module specifier text.
15
- * @returns File extension including the leading dot when present.
16
- * @example
17
- * ```typescript
18
- * const extension = getTrailingExtension("./feature.ts");
19
- * ```
20
- */
21
- const getSpecifierEndIndex = (source) => {
22
- const queryIndex = source.indexOf("?");
23
- const hashIndex = source.indexOf("#");
24
- const endIndexCandidates = [queryIndex, hashIndex].filter((index) => index >= 0);
25
- return endIndexCandidates.length === 0
26
- ? source.length
27
- : Math.min(...endIndexCandidates);
28
- };
29
- /**
30
- * Gets the trailing extension from a module specifier string.
31
- * @param source Module specifier text.
32
- * @returns File extension including the leading dot when present.
33
- * @example
34
- * ```typescript
35
- * const extension = getTrailingExtension("./feature.ts");
36
- * ```
37
- */
38
- const getTrailingExtension = (source) => {
39
- const endIndex = getSpecifierEndIndex(source);
40
- const cleanedSource = source.slice(0, endIndex);
41
- const lastSlashIndex = Math.max(cleanedSource.lastIndexOf("/"), cleanedSource.lastIndexOf("\\"));
42
- const basename = cleanedSource.slice(lastSlashIndex + 1);
43
- const dotIndex = basename.lastIndexOf(".");
44
- if (dotIndex <= 0) {
45
- return void 0;
46
- }
47
- return basename.slice(dotIndex).toLowerCase();
48
- };
49
- /**
50
- * Checks whether a source literal should be reported.
51
- * @param sourceLiteral Source literal node.
52
- * @returns True when the source includes a disallowed file extension.
53
- * @example
54
- * ```typescript
55
- * const forbidden = hasDisallowedExtension(sourceLiteral);
56
- * ```
57
- */
58
- const hasDisallowedExtension = (sourceLiteral) => {
59
- if (typeof sourceLiteral.value !== "string") {
60
- return false;
61
- }
62
- const extension = getTrailingExtension(sourceLiteral.value);
63
- return extension !== void 0 && disallowedExtensions.has(extension);
64
- };
65
- /**
66
- * Reports a statement when it references a source with disallowed extension.
67
- * @param context Rule execution context.
68
- * @param statement Statement that may include a source literal.
69
- * @example
70
- * ```typescript
71
- * reportWhenSourceHasExtension(context, statement);
72
- * ```
73
- */
74
- const reportWhenSourceHasExtension = (context, statement) => {
75
- const sourceLiteral = statement.source;
76
- if (sourceLiteral === null || sourceLiteral === void 0) {
77
- return;
78
- }
79
- if (!hasDisallowedExtension(sourceLiteral)) {
80
- return;
81
- }
82
- context.report({
83
- messageId: "unexpectedExtension",
84
- node: sourceLiteral,
85
- });
86
- };
87
- /**
88
- * Narrows one program statement to the source-bearing declarations this rule inspects.
89
- * @param statement Program statement node.
90
- * @returns Source-bearing declaration when supported.
91
- * @example
92
- * ```typescript
93
- * const declaration = asSourceDeclaration(statement);
94
- * ```
95
- */
96
- const asSourceDeclaration = (statement) => {
97
- if (statement.type === "ExportAllDeclaration") {
98
- return statement;
99
- }
100
- if (statement.type === "ExportNamedDeclaration") {
101
- return statement;
102
- }
103
- if (statement.type === "ImportDeclaration") {
104
- return statement;
105
- }
106
- return void 0;
107
- };
108
- /** ESLint rule that forbids import/export module specifiers with explicit file extensions. */
109
- const noImportExportExtensionsRule = {
110
- create: (context) => ({
111
- Program(node) {
112
- for (const statement of node.body) {
113
- const declaration = asSourceDeclaration(statement);
114
- if (declaration !== void 0) {
115
- reportWhenSourceHasExtension(context, declaration);
116
- }
117
- }
118
- },
119
- }),
120
- meta: {
121
- docs: {
122
- description: "Forbid explicit file extensions in import/export module specifiers.",
123
- recommended: false,
124
- url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/no-import-export-extensions.md",
125
- },
126
- messages: {
127
- unexpectedExtension: "Avoid file extensions in import/export module specifiers.",
128
- },
129
- schema: [],
130
- type: "problem",
131
- },
132
- };
133
- export { noImportExportExtensionsRule };
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8taW1wb3J0LWV4cG9ydC1leHRlbnNpb25zLXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9jb25zaXN0ZW50LWJhcnJlbC1maWxlcy9uby1pbXBvcnQtZXhwb3J0LWV4dGVuc2lvbnMtcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSwwREFBMEQ7QUFDMUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuQyxNQUFNO0lBQ04sTUFBTTtJQUNOLEtBQUs7SUFDTCxNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixLQUFLO0lBQ0wsTUFBTTtDQUNQLENBQUMsQ0FBQztBQUVIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQWMsRUFBVSxFQUFFO0lBQ3RELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQ3RCLENBQUM7SUFFRixPQUFPLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQXNCLEVBQUU7SUFDbEUsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsTUFBTSxh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Q0osV0FBVyxFQUNULHFFQUFxRTtZQUN2RSxXQUFXLEVBQUUsS0FBSztZQUNsQixHQUFHLEVBQUUsOEZBQThGO1NBQ3BHO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsbUJBQW1CLEVBQ2pCLDJEQUEyRDtTQUM5RDtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFNBQVM7S0FDaEI7Q0FDRixDQUFDO0FBRUYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcclxuXHJcbi8qKiBTZXQgb2YgZGlzYWxsb3dlZCBtb2R1bGUtc3BlY2lmaWVyIGZpbGUgZXh0ZW5zaW9ucy4gKi9cclxuY29uc3QgZGlzYWxsb3dlZEV4dGVuc2lvbnMgPSBuZXcgU2V0KFtcclxuICBcIi5janNcIixcclxuICBcIi5jdHNcIixcclxuICBcIi5qc1wiLFxyXG4gIFwiLmpzeFwiLFxyXG4gIFwiLm1qc1wiLFxyXG4gIFwiLm10c1wiLFxyXG4gIFwiLnRzXCIsXHJcbiAgXCIudHN4XCIsXHJcbl0pO1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHRyYWlsaW5nIGV4dGVuc2lvbiBmcm9tIGEgbW9kdWxlIHNwZWNpZmllciBzdHJpbmcuXHJcbiAqIEBwYXJhbSBzb3VyY2UgTW9kdWxlIHNwZWNpZmllciB0ZXh0LlxyXG4gKiBAcmV0dXJucyBGaWxlIGV4dGVuc2lvbiBpbmNsdWRpbmcgdGhlIGxlYWRpbmcgZG90IHdoZW4gcHJlc2VudC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBleHRlbnNpb24gPSBnZXRUcmFpbGluZ0V4dGVuc2lvbihcIi4vZmVhdHVyZS50c1wiKTtcclxuICogYGBgXHJcbiAqL1xyXG5jb25zdCBnZXRTcGVjaWZpZXJFbmRJbmRleCA9IChzb3VyY2U6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgY29uc3QgcXVlcnlJbmRleCA9IHNvdXJjZS5pbmRleE9mKFwiP1wiKTtcclxuICBjb25zdCBoYXNoSW5kZXggPSBzb3VyY2UuaW5kZXhPZihcIiNcIik7XHJcbiAgY29uc3QgZW5kSW5kZXhDYW5kaWRhdGVzID0gW3F1ZXJ5SW5kZXgsIGhhc2hJbmRleF0uZmlsdGVyKFxyXG4gICAgKGluZGV4KSA9PiBpbmRleCA+PSAwLFxyXG4gICk7XHJcblxyXG4gIHJldHVybiBlbmRJbmRleENhbmRpZGF0ZXMubGVuZ3RoID09PSAwXHJcbiAgICA/IHNvdXJjZS5sZW5ndGhcclxuICAgIDogTWF0aC5taW4oLi4uZW5kSW5kZXhDYW5kaWRhdGVzKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSB0cmFpbGluZyBleHRlbnNpb24gZnJvbSBhIG1vZHVsZSBzcGVjaWZpZXIgc3RyaW5nLlxyXG4gKiBAcGFyYW0gc291cmNlIE1vZHVsZSBzcGVjaWZpZXIgdGV4dC5cclxuICogQHJldHVybnMgRmlsZSBleHRlbnNpb24gaW5jbHVkaW5nIHRoZSBsZWFkaW5nIGRvdCB3aGVuIHByZXNlbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgZXh0ZW5zaW9uID0gZ2V0VHJhaWxpbmdFeHRlbnNpb24oXCIuL2ZlYXR1cmUudHNcIik7XHJcbiAqIGBgYFxyXG4gKi9cclxuY29uc3QgZ2V0VHJhaWxpbmdFeHRlbnNpb24gPSAoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGNvbnN0IGVuZEluZGV4ID0gZ2V0U3BlY2lmaWVyRW5kSW5kZXgoc291cmNlKTtcclxuICBjb25zdCBjbGVhbmVkU291cmNlID0gc291cmNlLnNsaWNlKDAsIGVuZEluZGV4KTtcclxuICBjb25zdCBsYXN0U2xhc2hJbmRleCA9IE1hdGgubWF4KFxyXG4gICAgY2xlYW5lZFNvdXJjZS5sYXN0SW5kZXhPZihcIi9cIiksXHJcbiAgICBjbGVhbmVkU291cmNlLmxhc3RJbmRleE9mKFwiXFxcXFwiKSxcclxuICApO1xyXG4gIGNvbnN0IGJhc2VuYW1lID0gY2xlYW5lZFNvdXJjZS5zbGljZShsYXN0U2xhc2hJbmRleCArIDEpO1xyXG4gIGNvbnN0IGRvdEluZGV4ID0gYmFzZW5hbWUubGFzdEluZGV4T2YoXCIuXCIpO1xyXG5cclxuICBpZiAoZG90SW5kZXggPD0gMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIHJldHVybiBiYXNlbmFtZS5zbGljZShkb3RJbmRleCkudG9Mb3dlckNhc2UoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBhIHNvdXJjZSBsaXRlcmFsIHNob3VsZCBiZSByZXBvcnRlZC5cclxuICogQHBhcmFtIHNvdXJjZUxpdGVyYWwgU291cmNlIGxpdGVyYWwgbm9kZS5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBzb3VyY2UgaW5jbHVkZXMgYSBkaXNhbGxvd2VkIGZpbGUgZXh0ZW5zaW9uLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGZvcmJpZGRlbiA9IGhhc0Rpc2FsbG93ZWRFeHRlbnNpb24oc291cmNlTGl0ZXJhbCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuY29uc3QgaGFzRGlzYWxsb3dlZEV4dGVuc2lvbiA9IChzb3VyY2VMaXRlcmFsOiBFU1RyZWUuTGl0ZXJhbCk6IGJvb2xlYW4gPT4ge1xyXG4gIGlmICh0eXBlb2Ygc291cmNlTGl0ZXJhbC52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0VHJhaWxpbmdFeHRlbnNpb24oc291cmNlTGl0ZXJhbC52YWx1ZSk7XHJcblxyXG4gIHJldHVybiBleHRlbnNpb24gIT09IHZvaWQgMCAmJiBkaXNhbGxvd2VkRXh0ZW5zaW9ucy5oYXMoZXh0ZW5zaW9uKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIGEgc3RhdGVtZW50IHdoZW4gaXQgcmVmZXJlbmNlcyBhIHNvdXJjZSB3aXRoIGRpc2FsbG93ZWQgZXh0ZW5zaW9uLlxyXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0LlxyXG4gKiBAcGFyYW0gc3RhdGVtZW50IFN0YXRlbWVudCB0aGF0IG1heSBpbmNsdWRlIGEgc291cmNlIGxpdGVyYWwuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0V2hlblNvdXJjZUhhc0V4dGVuc2lvbihjb250ZXh0LCBzdGF0ZW1lbnQpO1xyXG4gKiBgYGBcclxuICovXHJcbmNvbnN0IHJlcG9ydFdoZW5Tb3VyY2VIYXNFeHRlbnNpb24gPSAoXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBzdGF0ZW1lbnQ6XHJcbiAgICB8IEVTVHJlZS5FeHBvcnRBbGxEZWNsYXJhdGlvblxyXG4gICAgfCBFU1RyZWUuRXhwb3J0TmFtZWREZWNsYXJhdGlvblxyXG4gICAgfCBFU1RyZWUuSW1wb3J0RGVjbGFyYXRpb24sXHJcbik6IHZvaWQgPT4ge1xyXG4gIGNvbnN0IHNvdXJjZUxpdGVyYWwgPSBzdGF0ZW1lbnQuc291cmNlO1xyXG5cclxuICBpZiAoc291cmNlTGl0ZXJhbCA9PT0gbnVsbCB8fCBzb3VyY2VMaXRlcmFsID09PSB2b2lkIDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmICghaGFzRGlzYWxsb3dlZEV4dGVuc2lvbihzb3VyY2VMaXRlcmFsKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29udGV4dC5yZXBvcnQoe1xyXG4gICAgbWVzc2FnZUlkOiBcInVuZXhwZWN0ZWRFeHRlbnNpb25cIixcclxuICAgIG5vZGU6IHNvdXJjZUxpdGVyYWwsXHJcbiAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTmFycm93cyBvbmUgcHJvZ3JhbSBzdGF0ZW1lbnQgdG8gdGhlIHNvdXJjZS1iZWFyaW5nIGRlY2xhcmF0aW9ucyB0aGlzIHJ1bGUgaW5zcGVjdHMuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgUHJvZ3JhbSBzdGF0ZW1lbnQgbm9kZS5cclxuICogQHJldHVybnMgU291cmNlLWJlYXJpbmcgZGVjbGFyYXRpb24gd2hlbiBzdXBwb3J0ZWQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgZGVjbGFyYXRpb24gPSBhc1NvdXJjZURlY2xhcmF0aW9uKHN0YXRlbWVudCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuY29uc3QgYXNTb3VyY2VEZWNsYXJhdGlvbiA9IChcclxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXVtudW1iZXJdLFxyXG4pOlxyXG4gIHwgRVNUcmVlLkV4cG9ydEFsbERlY2xhcmF0aW9uXHJcbiAgfCBFU1RyZWUuRXhwb3J0TmFtZWREZWNsYXJhdGlvblxyXG4gIHwgRVNUcmVlLkltcG9ydERlY2xhcmF0aW9uXHJcbiAgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGlmIChzdGF0ZW1lbnQudHlwZSA9PT0gXCJFeHBvcnRBbGxEZWNsYXJhdGlvblwiKSB7XHJcbiAgICByZXR1cm4gc3RhdGVtZW50O1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlbWVudC50eXBlID09PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIikge1xyXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcclxuICB9XHJcblxyXG4gIGlmIChzdGF0ZW1lbnQudHlwZSA9PT0gXCJJbXBvcnREZWNsYXJhdGlvblwiKSB7XHJcbiAgICByZXR1cm4gc3RhdGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHZvaWQgMDtcclxufTtcclxuXHJcbi8qKiBFU0xpbnQgcnVsZSB0aGF0IGZvcmJpZHMgaW1wb3J0L2V4cG9ydCBtb2R1bGUgc3BlY2lmaWVycyB3aXRoIGV4cGxpY2l0IGZpbGUgZXh0ZW5zaW9ucy4gKi9cclxuY29uc3Qgbm9JbXBvcnRFeHBvcnRFeHRlbnNpb25zUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xyXG4gIGNyZWF0ZTogKGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBSdWxlLlJ1bGVMaXN0ZW5lciA9PiAoe1xyXG4gICAgUHJvZ3JhbShub2RlOiBFU1RyZWUuUHJvZ3JhbSk6IHZvaWQge1xyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBub2RlLmJvZHkpIHtcclxuICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGFzU291cmNlRGVjbGFyYXRpb24oc3RhdGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKGRlY2xhcmF0aW9uICE9PSB2b2lkIDApIHtcclxuICAgICAgICAgIHJlcG9ydFdoZW5Tb3VyY2VIYXNFeHRlbnNpb24oY29udGV4dCwgZGVjbGFyYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9KSxcclxuICBtZXRhOiB7XHJcbiAgICBkb2NzOiB7XHJcbiAgICAgIGRlc2NyaXB0aW9uOlxyXG4gICAgICAgIFwiRm9yYmlkIGV4cGxpY2l0IGZpbGUgZXh0ZW5zaW9ucyBpbiBpbXBvcnQvZXhwb3J0IG1vZHVsZSBzcGVjaWZpZXJzLlwiLFxyXG4gICAgICByZWNvbW1lbmRlZDogZmFsc2UsXHJcbiAgICAgIHVybDogXCJodHRwczovL2dpdGh1Yi5jb20vcGFybG90aS9lc2xpbnQtcGx1Z2luL2Jsb2IvbWFpbi9kb2NzL3J1bGVzL25vLWltcG9ydC1leHBvcnQtZXh0ZW5zaW9ucy5tZFwiLFxyXG4gICAgfSxcclxuICAgIG1lc3NhZ2VzOiB7XHJcbiAgICAgIHVuZXhwZWN0ZWRFeHRlbnNpb246XHJcbiAgICAgICAgXCJBdm9pZCBmaWxlIGV4dGVuc2lvbnMgaW4gaW1wb3J0L2V4cG9ydCBtb2R1bGUgc3BlY2lmaWVycy5cIixcclxuICAgIH0sXHJcbiAgICBzY2hlbWE6IFtdLFxyXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXHJcbiAgfSxcclxufTtcclxuXHJcbmV4cG9ydCB7IG5vSW1wb3J0RXhwb3J0RXh0ZW5zaW9uc1J1bGUgfTtcclxuIl19
@@ -1,49 +0,0 @@
1
- import type { AST, Rule } from "eslint";
2
- import type * as ts from "typescript";
3
- import type { ExportedElement, ExportUsage, NoUnusedExportsState } from "./types.js";
4
- /**
5
- * Classifies one exported name based on cross-file usages.
6
- * @param usages Collected usages.
7
- * @returns Classification label.
8
- * @example
9
- * ```typescript
10
- * const classification = classifyExportUsage(usages);
11
- * ```
12
- */
13
- declare const classifyExportUsage: (usages: ExportUsage[]) => "production" | "test-only" | "unused";
14
- /**
15
- * Collects concrete usages of one exported element across the program.
16
- * @param program TypeScript program.
17
- * @param sourceFilename Source filename where export is defined.
18
- * @param state Normalized rule options.
19
- * @param repoRoot Absolute repository root used for test-file classification.
20
- * @param exportedElement Exported element to classify.
21
- * @returns Concrete usages for the exported element.
22
- * @example
23
- * ```typescript
24
- * const usages = collectCrossFileUsages(program, "/repo/src/feature.ts", state, "/repo", exportedElement);
25
- * ```
26
- */
27
- declare const collectCrossFileUsages: (program: ts.Program, sourceFilename: string, state: NoUnusedExportsState, repoRoot: string, exportedElement: ExportedElement) => ExportUsage[];
28
- /**
29
- * Collects exported elements from one program body.
30
- * @param body Program body statements.
31
- * @returns Exported elements in declaration order.
32
- * @example
33
- * ```typescript
34
- * const exported = collectExportedElements(program.body);
35
- * ```
36
- */
37
- declare const collectExportedElements: (body: AST.Program["body"]) => ExportedElement[];
38
- /**
39
- * Resolves TypeScript parser services program when available.
40
- * @param context Rule context.
41
- * @returns TypeScript program when available.
42
- * @example
43
- * ```typescript
44
- * const program = getTypeScriptProgram(context);
45
- * ```
46
- */
47
- declare const getTypeScriptProgram: (context: Rule.RuleContext) => ts.Program | undefined;
48
- export { classifyExportUsage, collectCrossFileUsages, collectExportedElements, getTypeScriptProgram, };
49
- //# sourceMappingURL=no-unused-exports-utilities.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-unused-exports-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-exports/no-unused-exports-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,oBAAoB,EACrB,MAAM,SAAS,CAAC;AASjB;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GACvB,QAAQ,WAAW,EAAE,KACpB,YAAY,GAAG,WAAW,GAAG,QACO,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,sBAAsB,GAC1B,SAAS,EAAE,CAAC,OAAO,EACnB,gBAAgB,MAAM,EACtB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,iBAAiB,eAAe,KAC/B,WAAW,EAOX,CAAC;AAEJ;;;;;;;;GAQG;AACH,QAAA,MAAM,uBAAuB,GAC3B,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KACxB,eAAe,EAAmD,CAAC;AAEtE;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,GACxB,SAAS,IAAI,CAAC,WAAW,KACxB,EAAE,CAAC,OAAO,GAAG,SAAsD,CAAC;AAEvE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,GACrB,CAAC"}
@@ -1,49 +0,0 @@
1
- import { collectExportedElements as collectExportedElementsFromDeclarations } from "./no-unused-exports-declaration-utilities.js";
2
- import { getTypeScriptProgram as getTypeScriptProgramFromServices } from "./no-unused-exports-identifier-utilities.js";
3
- import { classifyExportUsage as classifyExportUsageFromUsages, collectCrossFileUsages as collectCrossFileUsagesFromUsages, } from "./no-unused-exports-usage-utilities.js";
4
- /**
5
- * Classifies one exported name based on cross-file usages.
6
- * @param usages Collected usages.
7
- * @returns Classification label.
8
- * @example
9
- * ```typescript
10
- * const classification = classifyExportUsage(usages);
11
- * ```
12
- */
13
- const classifyExportUsage = (usages) => classifyExportUsageFromUsages(usages);
14
- /**
15
- * Collects concrete usages of one exported element across the program.
16
- * @param program TypeScript program.
17
- * @param sourceFilename Source filename where export is defined.
18
- * @param state Normalized rule options.
19
- * @param repoRoot Absolute repository root used for test-file classification.
20
- * @param exportedElement Exported element to classify.
21
- * @returns Concrete usages for the exported element.
22
- * @example
23
- * ```typescript
24
- * const usages = collectCrossFileUsages(program, "/repo/src/feature.ts", state, "/repo", exportedElement);
25
- * ```
26
- */
27
- const collectCrossFileUsages = (program, sourceFilename, state, repoRoot, exportedElement) => collectCrossFileUsagesFromUsages(program, sourceFilename, state, repoRoot, exportedElement);
28
- /**
29
- * Collects exported elements from one program body.
30
- * @param body Program body statements.
31
- * @returns Exported elements in declaration order.
32
- * @example
33
- * ```typescript
34
- * const exported = collectExportedElements(program.body);
35
- * ```
36
- */
37
- const collectExportedElements = (body) => collectExportedElementsFromDeclarations(body);
38
- /**
39
- * Resolves TypeScript parser services program when available.
40
- * @param context Rule context.
41
- * @returns TypeScript program when available.
42
- * @example
43
- * ```typescript
44
- * const program = getTypeScriptProgram(context);
45
- * ```
46
- */
47
- const getTypeScriptProgram = (context) => getTypeScriptProgramFromServices(context);
48
- export { classifyExportUsage, collectCrossFileUsages, collectExportedElements, getTypeScriptProgram, };
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFBRSx1QkFBdUIsSUFBSSx1Q0FBdUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQy9ILE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxnQ0FBZ0MsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3BILE9BQU8sRUFDTCxtQkFBbUIsSUFBSSw2QkFBNkIsRUFDcEQsc0JBQXNCLElBQUksZ0NBQWdDLEdBQzNELE1BQU0scUNBQXFDLENBQUM7QUFFN0M7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQzFCLE1BQXFCLEVBQ2tCLEVBQUUsQ0FDekMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixPQUFtQixFQUNuQixjQUFzQixFQUN0QixLQUEyQixFQUMzQixRQUFnQixFQUNoQixlQUFnQyxFQUNqQixFQUFFLENBQ2pCLGdDQUFnQyxDQUM5QixPQUFPLEVBQ1AsY0FBYyxFQUNkLEtBQUssRUFDTCxRQUFRLEVBQ1IsZUFBZSxDQUNoQixDQUFDO0FBRUo7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQzlCLElBQXlCLEVBQ04sRUFBRSxDQUFDLHVDQUF1QyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXRFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixPQUF5QixFQUNELEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV2RSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsb0JBQW9CLEdBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFTVCwgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuaW1wb3J0IHR5cGUge1xuICBFeHBvcnRlZEVsZW1lbnQsXG4gIEV4cG9ydFVzYWdlLFxuICBOb1VudXNlZEV4cG9ydHNTdGF0ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgY29sbGVjdEV4cG9ydGVkRWxlbWVudHMgYXMgY29sbGVjdEV4cG9ydGVkRWxlbWVudHNGcm9tRGVjbGFyYXRpb25zIH0gZnJvbSBcIi4vbm8tdW51c2VkLWV4cG9ydHMtZGVjbGFyYXRpb24tdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBnZXRUeXBlU2NyaXB0UHJvZ3JhbSBhcyBnZXRUeXBlU2NyaXB0UHJvZ3JhbUZyb21TZXJ2aWNlcyB9IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLWlkZW50aWZpZXItdXRpbGl0aWVzXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeUV4cG9ydFVzYWdlIGFzIGNsYXNzaWZ5RXhwb3J0VXNhZ2VGcm9tVXNhZ2VzLFxuICBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzIGFzIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXNGcm9tVXNhZ2VzLFxufSBmcm9tIFwiLi9uby11bnVzZWQtZXhwb3J0cy11c2FnZS11dGlsaXRpZXNcIjtcblxuLyoqXG4gKiBDbGFzc2lmaWVzIG9uZSBleHBvcnRlZCBuYW1lIGJhc2VkIG9uIGNyb3NzLWZpbGUgdXNhZ2VzLlxuICogQHBhcmFtIHVzYWdlcyBDb2xsZWN0ZWQgdXNhZ2VzLlxuICogQHJldHVybnMgQ2xhc3NpZmljYXRpb24gbGFiZWwuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2xhc3NpZmljYXRpb24gPSBjbGFzc2lmeUV4cG9ydFVzYWdlKHVzYWdlcyk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY2xhc3NpZnlFeHBvcnRVc2FnZSA9IChcbiAgdXNhZ2VzOiBFeHBvcnRVc2FnZVtdLFxuKTogXCJwcm9kdWN0aW9uXCIgfCBcInRlc3Qtb25seVwiIHwgXCJ1bnVzZWRcIiA9PlxuICBjbGFzc2lmeUV4cG9ydFVzYWdlRnJvbVVzYWdlcyh1c2FnZXMpO1xuXG4vKipcbiAqIENvbGxlY3RzIGNvbmNyZXRlIHVzYWdlcyBvZiBvbmUgZXhwb3J0ZWQgZWxlbWVudCBhY3Jvc3MgdGhlIHByb2dyYW0uXG4gKiBAcGFyYW0gcHJvZ3JhbSBUeXBlU2NyaXB0IHByb2dyYW0uXG4gKiBAcGFyYW0gc291cmNlRmlsZW5hbWUgU291cmNlIGZpbGVuYW1lIHdoZXJlIGV4cG9ydCBpcyBkZWZpbmVkLlxuICogQHBhcmFtIHN0YXRlIE5vcm1hbGl6ZWQgcnVsZSBvcHRpb25zLlxuICogQHBhcmFtIHJlcG9Sb290IEFic29sdXRlIHJlcG9zaXRvcnkgcm9vdCB1c2VkIGZvciB0ZXN0LWZpbGUgY2xhc3NpZmljYXRpb24uXG4gKiBAcGFyYW0gZXhwb3J0ZWRFbGVtZW50IEV4cG9ydGVkIGVsZW1lbnQgdG8gY2xhc3NpZnkuXG4gKiBAcmV0dXJucyBDb25jcmV0ZSB1c2FnZXMgZm9yIHRoZSBleHBvcnRlZCBlbGVtZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzYWdlcyA9IGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMocHJvZ3JhbSwgXCIvcmVwby9zcmMvZmVhdHVyZS50c1wiLCBzdGF0ZSwgXCIvcmVwb1wiLCBleHBvcnRlZEVsZW1lbnQpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMgPSAoXG4gIHByb2dyYW06IHRzLlByb2dyYW0sXG4gIHNvdXJjZUZpbGVuYW1lOiBzdHJpbmcsXG4gIHN0YXRlOiBOb1VudXNlZEV4cG9ydHNTdGF0ZSxcbiAgcmVwb1Jvb3Q6IHN0cmluZyxcbiAgZXhwb3J0ZWRFbGVtZW50OiBFeHBvcnRlZEVsZW1lbnQsXG4pOiBFeHBvcnRVc2FnZVtdID0+XG4gIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXNGcm9tVXNhZ2VzKFxuICAgIHByb2dyYW0sXG4gICAgc291cmNlRmlsZW5hbWUsXG4gICAgc3RhdGUsXG4gICAgcmVwb1Jvb3QsXG4gICAgZXhwb3J0ZWRFbGVtZW50LFxuICApO1xuXG4vKipcbiAqIENvbGxlY3RzIGV4cG9ydGVkIGVsZW1lbnRzIGZyb20gb25lIHByb2dyYW0gYm9keS5cbiAqIEBwYXJhbSBib2R5IFByb2dyYW0gYm9keSBzdGF0ZW1lbnRzLlxuICogQHJldHVybnMgRXhwb3J0ZWQgZWxlbWVudHMgaW4gZGVjbGFyYXRpb24gb3JkZXIuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZXhwb3J0ZWQgPSBjb2xsZWN0RXhwb3J0ZWRFbGVtZW50cyhwcm9ncmFtLmJvZHkpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RFeHBvcnRlZEVsZW1lbnRzID0gKFxuICBib2R5OiBBU1QuUHJvZ3JhbVtcImJvZHlcIl0sXG4pOiBFeHBvcnRlZEVsZW1lbnRbXSA9PiBjb2xsZWN0RXhwb3J0ZWRFbGVtZW50c0Zyb21EZWNsYXJhdGlvbnMoYm9keSk7XG5cbi8qKlxuICogUmVzb2x2ZXMgVHlwZVNjcmlwdCBwYXJzZXIgc2VydmljZXMgcHJvZ3JhbSB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgY29udGV4dC5cbiAqIEByZXR1cm5zIFR5cGVTY3JpcHQgcHJvZ3JhbSB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBwcm9ncmFtID0gZ2V0VHlwZVNjcmlwdFByb2dyYW0oY29udGV4dCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0VHlwZVNjcmlwdFByb2dyYW0gPSAoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4pOiB0cy5Qcm9ncmFtIHwgdW5kZWZpbmVkID0+IGdldFR5cGVTY3JpcHRQcm9ncmFtRnJvbVNlcnZpY2VzKGNvbnRleHQpO1xuXG5leHBvcnQge1xuICBjbGFzc2lmeUV4cG9ydFVzYWdlLFxuICBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzLFxuICBjb2xsZWN0RXhwb3J0ZWRFbGVtZW50cyxcbiAgZ2V0VHlwZVNjcmlwdFByb2dyYW0sXG59O1xuIl19