@codeperfect/eslint-config 1.0.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 (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +143 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/architecture/boundaries.d.ts +17 -0
  5. package/dist/architecture/boundaries.d.ts.map +1 -0
  6. package/dist/architecture/boundaries.js +69 -0
  7. package/dist/architecture/import-x.d.ts +12 -0
  8. package/dist/architecture/import-x.d.ts.map +1 -0
  9. package/dist/architecture/import-x.js +79 -0
  10. package/dist/architecture/index.d.ts +3 -0
  11. package/dist/architecture/index.d.ts.map +1 -0
  12. package/dist/architecture/index.js +3 -0
  13. package/dist/codeperfect-eslint-config-1.0.0.tgz +0 -0
  14. package/dist/config-composition.d.ts +6 -0
  15. package/dist/config-composition.d.ts.map +1 -0
  16. package/dist/config-composition.js +37 -0
  17. package/dist/configs/index.d.ts +7 -0
  18. package/dist/configs/index.d.ts.map +1 -0
  19. package/dist/configs/index.js +7 -0
  20. package/dist/core/eslint.d.ts +12 -0
  21. package/dist/core/eslint.d.ts.map +1 -0
  22. package/dist/core/eslint.js +58 -0
  23. package/dist/core/index.d.ts +4 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +4 -0
  26. package/dist/core/resolver.d.ts +11 -0
  27. package/dist/core/resolver.d.ts.map +1 -0
  28. package/dist/core/resolver.js +27 -0
  29. package/dist/core/typescript.d.ts +11 -0
  30. package/dist/core/typescript.d.ts.map +1 -0
  31. package/dist/core/typescript.js +63 -0
  32. package/dist/diagnostics.d.ts +43 -0
  33. package/dist/diagnostics.d.ts.map +1 -0
  34. package/dist/diagnostics.js +74 -0
  35. package/dist/docs/comments.d.ts +11 -0
  36. package/dist/docs/comments.d.ts.map +1 -0
  37. package/dist/docs/comments.js +30 -0
  38. package/dist/docs/index.d.ts +3 -0
  39. package/dist/docs/index.d.ts.map +1 -0
  40. package/dist/docs/index.js +3 -0
  41. package/dist/docs/jsdoc.d.ts +12 -0
  42. package/dist/docs/jsdoc.d.ts.map +1 -0
  43. package/dist/docs/jsdoc.js +77 -0
  44. package/dist/domain/index.d.ts +2 -0
  45. package/dist/domain/index.d.ts.map +1 -0
  46. package/dist/domain/index.js +2 -0
  47. package/dist/domain/rxjs-x.d.ts +11 -0
  48. package/dist/domain/rxjs-x.d.ts.map +1 -0
  49. package/dist/domain/rxjs-x.js +27 -0
  50. package/dist/index-spec-helpers.d.ts +44 -0
  51. package/dist/index-spec-helpers.d.ts.map +1 -0
  52. package/dist/index-spec-helpers.js +175 -0
  53. package/dist/index.d.ts +15 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +42 -0
  56. package/dist/module-taxonomy.d.ts +63 -0
  57. package/dist/module-taxonomy.d.ts.map +1 -0
  58. package/dist/module-taxonomy.js +21 -0
  59. package/dist/plugin-loaders.d.ts +110 -0
  60. package/dist/plugin-loaders.d.ts.map +1 -0
  61. package/dist/plugin-loaders.js +110 -0
  62. package/dist/style/index.d.ts +5 -0
  63. package/dist/style/index.d.ts.map +1 -0
  64. package/dist/style/index.js +5 -0
  65. package/dist/style/perfectionist.d.ts +11 -0
  66. package/dist/style/perfectionist.d.ts.map +1 -0
  67. package/dist/style/perfectionist.js +17 -0
  68. package/dist/style/prettier.d.ts +11 -0
  69. package/dist/style/prettier.d.ts.map +1 -0
  70. package/dist/style/prettier.js +15 -0
  71. package/dist/style/stylistic.d.ts +11 -0
  72. package/dist/style/stylistic.d.ts.map +1 -0
  73. package/dist/style/stylistic.js +15 -0
  74. package/dist/style/unicorn.d.ts +11 -0
  75. package/dist/style/unicorn.d.ts.map +1 -0
  76. package/dist/style/unicorn.js +15 -0
  77. package/dist/testing/index.d.ts +5 -0
  78. package/dist/testing/index.d.ts.map +1 -0
  79. package/dist/testing/index.js +5 -0
  80. package/dist/testing/jasmine.d.ts +11 -0
  81. package/dist/testing/jasmine.d.ts.map +1 -0
  82. package/dist/testing/jasmine.js +25 -0
  83. package/dist/testing/jest.d.ts +11 -0
  84. package/dist/testing/jest.d.ts.map +1 -0
  85. package/dist/testing/jest.js +27 -0
  86. package/dist/testing/playwright.d.ts +12 -0
  87. package/dist/testing/playwright.d.ts.map +1 -0
  88. package/dist/testing/playwright.js +29 -0
  89. package/dist/testing/vitest.d.ts +11 -0
  90. package/dist/testing/vitest.d.ts.map +1 -0
  91. package/dist/testing/vitest.js +32 -0
  92. package/dist/types.d.ts +41 -0
  93. package/dist/types.d.ts.map +1 -0
  94. package/dist/types.js +2 -0
  95. package/dist/utilities.d.ts +52 -0
  96. package/dist/utilities.d.ts.map +1 -0
  97. package/dist/utilities.js +125 -0
  98. package/package.json +143 -0
@@ -0,0 +1,63 @@
1
+ import { defineConfig } from "eslint/config";
2
+ /** TypeScript rule names to disable. */
3
+ const off = [
4
+ "no-magic-numbers",
5
+ "no-type-alias",
6
+ "sort-type-constituents",
7
+ "naming-convention",
8
+ "no-use-before-define",
9
+ "member-ordering",
10
+ "no-unsafe-type-assertion",
11
+ ];
12
+ /** TypeScript rules disabled as a map. */
13
+ const customOff = Object.fromEntries(off.map((rule) => [`@typescript-eslint/${rule}`, "off"]));
14
+ /**
15
+ * Build and return TypeScript-specific ESLint configs and rule adjustments.
16
+ * @returns The TypeScript ESLint config array.
17
+ * @example
18
+ * ```typescript
19
+ * const typescriptConfigs = await typescript();
20
+ * ```
21
+ */
22
+ export async function typescript() {
23
+ const { configs } = await import("typescript-eslint");
24
+ const { all } = configs;
25
+ return defineConfig(all, {
26
+ languageOptions: {
27
+ parserOptions: {
28
+ projectService: true,
29
+ },
30
+ },
31
+ }, {
32
+ name: "@typescript-eslint/custom",
33
+ rules: {
34
+ ...customOff,
35
+ "@typescript-eslint/strict-boolean-expressions": [
36
+ "error",
37
+ {
38
+ allowNullableEnum: false,
39
+ allowNullableObject: false,
40
+ allowNumber: false,
41
+ allowString: false,
42
+ },
43
+ ],
44
+ "@typescript-eslint/unified-signatures": [
45
+ "error",
46
+ { ignoreDifferentlyNamedParameters: true },
47
+ ],
48
+ },
49
+ }, {
50
+ name: "@typescript-eslint/custom-compat",
51
+ rules: {
52
+ "@typescript-eslint/prefer-readonly-parameter-types": "off",
53
+ },
54
+ }, {
55
+ files: ["**/*.spec.ts"],
56
+ name: "@typescript-eslint/custom-spec",
57
+ rules: {
58
+ "@typescript-eslint/init-declarations": "off",
59
+ "@typescript-eslint/unbound-method": "off",
60
+ },
61
+ });
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3R5cGVzY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3Qyx3Q0FBd0M7QUFDeEMsTUFBTSxHQUFHLEdBQUc7SUFDVixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQiwwQkFBMEI7Q0FDM0IsQ0FBQztBQUVGLDBDQUEwQztBQUMxQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNsQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBRSxLQUFLLENBQVUsQ0FBQyxDQUNsRSxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsVUFBVTtJQUM5QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN0RCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXhCLE9BQU8sWUFBWSxDQUNqQixHQUFHLEVBQ0g7UUFDRSxlQUFlLEVBQUU7WUFDZixhQUFhLEVBQUU7Z0JBQ2IsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGLEVBQ0Q7UUFDRSxJQUFJLEVBQUUsMkJBQTJCO1FBQ2pDLEtBQUssRUFBRTtZQUNMLEdBQUcsU0FBUztZQUNaLCtDQUErQyxFQUFFO2dCQUMvQyxPQUFPO2dCQUNQO29CQUNFLGlCQUFpQixFQUFFLEtBQUs7b0JBQ3hCLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLFdBQVcsRUFBRSxLQUFLO29CQUNsQixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtZQUNELHVDQUF1QyxFQUFFO2dCQUN2QyxPQUFPO2dCQUNQLEVBQUUsZ0NBQWdDLEVBQUUsSUFBSSxFQUFFO2FBQzNDO1NBQ0Y7S0FDRixFQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxLQUFLLEVBQUU7WUFDTCxvREFBb0QsRUFBRSxLQUFLO1NBQzVEO0tBQ0YsRUFDRDtRQUNFLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUN2QixJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLEtBQUssRUFBRTtZQUNMLHNDQUFzQyxFQUFFLEtBQUs7WUFDN0MsbUNBQW1DLEVBQUUsS0FBSztTQUMzQztLQUNGLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcclxuXHJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJlc2xpbnQvY29uZmlnXCI7XHJcblxyXG4vKiogVHlwZVNjcmlwdCBydWxlIG5hbWVzIHRvIGRpc2FibGUuICovXHJcbmNvbnN0IG9mZiA9IFtcclxuICBcIm5vLW1hZ2ljLW51bWJlcnNcIixcclxuICBcIm5vLXR5cGUtYWxpYXNcIixcclxuICBcInNvcnQtdHlwZS1jb25zdGl0dWVudHNcIixcclxuICBcIm5hbWluZy1jb252ZW50aW9uXCIsXHJcbiAgXCJuby11c2UtYmVmb3JlLWRlZmluZVwiLFxyXG4gIFwibWVtYmVyLW9yZGVyaW5nXCIsXHJcbiAgXCJuby11bnNhZmUtdHlwZS1hc3NlcnRpb25cIixcclxuXTtcclxuXHJcbi8qKiBUeXBlU2NyaXB0IHJ1bGVzIGRpc2FibGVkIGFzIGEgbWFwLiAqL1xyXG5jb25zdCBjdXN0b21PZmYgPSBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgb2ZmLm1hcCgocnVsZSkgPT4gW2BAdHlwZXNjcmlwdC1lc2xpbnQvJHtydWxlfWAsIFwib2ZmXCJdIGFzIGNvbnN0KSxcclxuKTtcclxuXHJcbi8qKlxyXG4gKiBCdWlsZCBhbmQgcmV0dXJuIFR5cGVTY3JpcHQtc3BlY2lmaWMgRVNMaW50IGNvbmZpZ3MgYW5kIHJ1bGUgYWRqdXN0bWVudHMuXHJcbiAqIEByZXR1cm5zIFRoZSBUeXBlU2NyaXB0IEVTTGludCBjb25maWcgYXJyYXkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgdHlwZXNjcmlwdENvbmZpZ3MgPSBhd2FpdCB0eXBlc2NyaXB0KCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHR5cGVzY3JpcHQoKTogUHJvbWlzZTxMaW50ZXIuQ29uZmlnW10+IHtcclxuICBjb25zdCB7IGNvbmZpZ3MgfSA9IGF3YWl0IGltcG9ydChcInR5cGVzY3JpcHQtZXNsaW50XCIpO1xyXG4gIGNvbnN0IHsgYWxsIH0gPSBjb25maWdzO1xyXG5cclxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxyXG4gICAgYWxsLFxyXG4gICAge1xyXG4gICAgICBsYW5ndWFnZU9wdGlvbnM6IHtcclxuICAgICAgICBwYXJzZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICBwcm9qZWN0U2VydmljZTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJAdHlwZXNjcmlwdC1lc2xpbnQvY3VzdG9tXCIsXHJcbiAgICAgIHJ1bGVzOiB7XHJcbiAgICAgICAgLi4uY3VzdG9tT2ZmLFxyXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3N0cmljdC1ib29sZWFuLWV4cHJlc3Npb25zXCI6IFtcclxuICAgICAgICAgIFwiZXJyb3JcIixcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWxsb3dOdWxsYWJsZUVudW06IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd051bGxhYmxlT2JqZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dOdW1iZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd1N0cmluZzogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvdW5pZmllZC1zaWduYXR1cmVzXCI6IFtcclxuICAgICAgICAgIFwiZXJyb3JcIixcclxuICAgICAgICAgIHsgaWdub3JlRGlmZmVyZW50bHlOYW1lZFBhcmFtZXRlcnM6IHRydWUgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCJAdHlwZXNjcmlwdC1lc2xpbnQvY3VzdG9tLWNvbXBhdFwiLFxyXG4gICAgICBydWxlczoge1xyXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1yZWFkb25seS1wYXJhbWV0ZXItdHlwZXNcIjogXCJvZmZcIixcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpbGVzOiBbXCIqKi8qLnNwZWMudHNcIl0sXHJcbiAgICAgIG5hbWU6IFwiQHR5cGVzY3JpcHQtZXNsaW50L2N1c3RvbS1zcGVjXCIsXHJcbiAgICAgIHJ1bGVzOiB7XHJcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvaW5pdC1kZWNsYXJhdGlvbnNcIjogXCJvZmZcIixcclxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFwiOiBcIm9mZlwiLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICApO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,43 @@
1
+ import type { PluginName } from "./types";
2
+ import type { LoadMode } from "./utilities";
3
+ /**
4
+ * Checks whether an error represents a missing runtime module.
5
+ * @param error Input error value.
6
+ * @returns Return value output.
7
+ * @example
8
+ * ```typescript
9
+ * const missing = isMissingModuleError(new Error("Cannot find module 'x'"));
10
+ * ```
11
+ */
12
+ declare function isMissingModuleError(error: unknown): boolean;
13
+ /**
14
+ * Reports that repository-owned boundaries input is missing.
15
+ * @example
16
+ * ```typescript
17
+ * reportMissingBoundariesConfig();
18
+ * ```
19
+ */
20
+ declare function reportMissingBoundariesConfig(): void;
21
+ /**
22
+ * Reports a plugin loading issue using runtime-aware messaging.
23
+ * @param pluginName Input pluginName value.
24
+ * @param error Input error value.
25
+ * @param mode Specifies whether loader failures are fatal or skippable.
26
+ * @example
27
+ * ```typescript
28
+ * reportPluginLoadIssue("vitest", new Error("Cannot find module"), "optional");
29
+ * ```
30
+ */
31
+ declare function reportPluginLoadIssue(pluginName: PluginName, error: unknown, mode: LoadMode): void;
32
+ /**
33
+ * Reports a skipped rule override when the target plugin is unavailable.
34
+ * @param ruleName Input ruleName value.
35
+ * @param pluginName Input pluginName value.
36
+ * @example
37
+ * ```typescript
38
+ * reportRuleOverrideSkip("vitest/no-focused-tests", "vitest");
39
+ * ```
40
+ */
41
+ declare function reportRuleOverrideSkip(ruleName: string, pluginName: string): void;
42
+ export { isMissingModuleError, reportMissingBoundariesConfig, reportPluginLoadIssue, reportRuleOverrideSkip, };
43
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAe5C;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;;;;;GAMG;AACH,iBAAS,6BAA6B,IAAI,IAAI,CAK7C;AAED;;;;;;;;;GASG;AACH,iBAAS,qBAAqB,CAC5B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,QAAQ,GACb,IAAI,CAaN;AAED;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAK1E;AAED,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,qBAAqB,EACrB,sBAAsB,GACvB,CAAC"}
@@ -0,0 +1,74 @@
1
+ /** ANSI escape sequences for colored console output. */
2
+ const ansi = {
3
+ bold: "\u001B[1m",
4
+ cyan: "\u001B[36m",
5
+ red: "\u001B[31m",
6
+ reset: "\u001B[0m",
7
+ yellow: "\u001B[33m",
8
+ };
9
+ /** Matches common missing-module error text across package managers and runtimes. */
10
+ const missingModulePattern = /Cannot find module|ERR_MODULE_NOT_FOUND|MODULE_NOT_FOUND/u;
11
+ /**
12
+ * Checks whether an error represents a missing runtime module.
13
+ * @param error Input error value.
14
+ * @returns Return value output.
15
+ * @example
16
+ * ```typescript
17
+ * const missing = isMissingModuleError(new Error("Cannot find module 'x'"));
18
+ * ```
19
+ */
20
+ function isMissingModuleError(error) {
21
+ return missingModulePattern.test(String(error));
22
+ }
23
+ /**
24
+ * Reports that repository-owned boundaries input is missing.
25
+ * @example
26
+ * ```typescript
27
+ * reportMissingBoundariesConfig();
28
+ * ```
29
+ */
30
+ function reportMissingBoundariesConfig() {
31
+ const header = `${ansi.bold}${ansi.red}Skipped boundaries config${ansi.reset}`;
32
+ const detail = `${ansi.yellow}Provide repository-owned boundaries files, elements, and element-types.${ansi.reset}`;
33
+ const hint = `${ansi.cyan}Hint:${ansi.reset} Provide boundaries config via config({ boundaries: { ... } }) or disable the plugin with disabledPlugins: ["boundaries"].`;
34
+ process.stderr.write(`${[header, detail, hint].join("\n")}\n`);
35
+ }
36
+ /**
37
+ * Reports a plugin loading issue using runtime-aware messaging.
38
+ * @param pluginName Input pluginName value.
39
+ * @param error Input error value.
40
+ * @param mode Specifies whether loader failures are fatal or skippable.
41
+ * @example
42
+ * ```typescript
43
+ * reportPluginLoadIssue("vitest", new Error("Cannot find module"), "optional");
44
+ * ```
45
+ */
46
+ function reportPluginLoadIssue(pluginName, error, mode) {
47
+ const message = String(error);
48
+ const isMissingOptionalDependency = mode === "optional" && isMissingModuleError(error);
49
+ const header = isMissingOptionalDependency
50
+ ? `${ansi.bold}${ansi.yellow}Skipped optional ESLint plugin config: ${pluginName}${ansi.reset}`
51
+ : `${ansi.bold}${ansi.red}Failed to load ESLint plugin config: ${pluginName}${ansi.reset}`;
52
+ const detail = `${ansi.yellow}${message}${ansi.reset}`;
53
+ const hint = mode === "required"
54
+ ? `${ansi.cyan}Hint:${ansi.reset} Install the required peer dependency backing "${pluginName}" before using config().`
55
+ : `${ansi.cyan}Hint:${ansi.reset} Install the plugin or disable it via config({ disabledPlugins: ["${pluginName}"] }).`;
56
+ process.stderr.write(`${[header, detail, hint].join("\n")}\n`);
57
+ }
58
+ /**
59
+ * Reports a skipped rule override when the target plugin is unavailable.
60
+ * @param ruleName Input ruleName value.
61
+ * @param pluginName Input pluginName value.
62
+ * @example
63
+ * ```typescript
64
+ * reportRuleOverrideSkip("vitest/no-focused-tests", "vitest");
65
+ * ```
66
+ */
67
+ function reportRuleOverrideSkip(ruleName, pluginName) {
68
+ const header = `${ansi.bold}${ansi.red}Skipped rule override: ${ruleName}${ansi.reset}`;
69
+ const detail = `${ansi.yellow}Plugin "${pluginName}" is not available in the final config.${ansi.reset}`;
70
+ const hint = `${ansi.cyan}Hint:${ansi.reset} Install the plugin or remove the rule override.`;
71
+ process.stderr.write(`${[header, detail, hint].join("\n")}\n`);
72
+ }
73
+ export { isMissingModuleError, reportMissingBoundariesConfig, reportPluginLoadIssue, reportRuleOverrideSkip, };
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGlhZ25vc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0Esd0RBQXdEO0FBQ3hELE1BQU0sSUFBSSxHQUFHO0lBQ1gsSUFBSSxFQUFFLFdBQVc7SUFDakIsSUFBSSxFQUFFLFlBQVk7SUFDbEIsR0FBRyxFQUFFLFlBQVk7SUFDakIsS0FBSyxFQUFFLFdBQVc7SUFDbEIsTUFBTSxFQUFFLFlBQVk7Q0FDWixDQUFDO0FBRVgscUZBQXFGO0FBQ3JGLE1BQU0sb0JBQW9CLEdBQ3hCLDJEQUEyRCxDQUFDO0FBRTlEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLDZCQUE2QjtJQUNwQyxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvRSxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLDBFQUEwRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEgsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLDRIQUE0SCxDQUFDO0lBQ3hLLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMscUJBQXFCLENBQzVCLFVBQXNCLEVBQ3RCLEtBQWMsRUFDZCxJQUFjO0lBRWQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sMkJBQTJCLEdBQy9CLElBQUksS0FBSyxVQUFVLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsMkJBQTJCO1FBQ3hDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sMENBQTBDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQy9GLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0NBQXdDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0YsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkQsTUFBTSxJQUFJLEdBQ1IsSUFBSSxLQUFLLFVBQVU7UUFDakIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxrREFBa0QsVUFBVSwwQkFBMEI7UUFDdEgsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxxRUFBcUUsVUFBVSxRQUFRLENBQUM7SUFDNUgsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsVUFBa0I7SUFDbEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLDBCQUEwQixRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hGLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sV0FBVyxVQUFVLDBDQUEwQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekcsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLGtEQUFrRCxDQUFDO0lBQzlGLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsNkJBQTZCLEVBQzdCLHFCQUFxQixFQUNyQixzQkFBc0IsR0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGx1Z2luTmFtZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IExvYWRNb2RlIH0gZnJvbSBcIi4vdXRpbGl0aWVzXCI7XG5cbi8qKiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgZm9yIGNvbG9yZWQgY29uc29sZSBvdXRwdXQuICovXG5jb25zdCBhbnNpID0ge1xuICBib2xkOiBcIlxcdTAwMUJbMW1cIixcbiAgY3lhbjogXCJcXHUwMDFCWzM2bVwiLFxuICByZWQ6IFwiXFx1MDAxQlszMW1cIixcbiAgcmVzZXQ6IFwiXFx1MDAxQlswbVwiLFxuICB5ZWxsb3c6IFwiXFx1MDAxQlszM21cIixcbn0gYXMgY29uc3Q7XG5cbi8qKiBNYXRjaGVzIGNvbW1vbiBtaXNzaW5nLW1vZHVsZSBlcnJvciB0ZXh0IGFjcm9zcyBwYWNrYWdlIG1hbmFnZXJzIGFuZCBydW50aW1lcy4gKi9cbmNvbnN0IG1pc3NpbmdNb2R1bGVQYXR0ZXJuID1cbiAgL0Nhbm5vdCBmaW5kIG1vZHVsZXxFUlJfTU9EVUxFX05PVF9GT1VORHxNT0RVTEVfTk9UX0ZPVU5EL3U7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZXJyb3IgcmVwcmVzZW50cyBhIG1pc3NpbmcgcnVudGltZSBtb2R1bGUuXG4gKiBAcGFyYW0gZXJyb3IgSW5wdXQgZXJyb3IgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1pc3NpbmcgPSBpc01pc3NpbmdNb2R1bGVFcnJvcihuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ3gnXCIpKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc01pc3NpbmdNb2R1bGVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gbWlzc2luZ01vZHVsZVBhdHRlcm4udGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHRoYXQgcmVwb3NpdG9yeS1vd25lZCBib3VuZGFyaWVzIGlucHV0IGlzIG1pc3NpbmcuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0TWlzc2luZ0JvdW5kYXJpZXNDb25maWcoKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nQm91bmRhcmllc0NvbmZpZygpOiB2b2lkIHtcbiAgY29uc3QgaGVhZGVyID0gYCR7YW5zaS5ib2xkfSR7YW5zaS5yZWR9U2tpcHBlZCBib3VuZGFyaWVzIGNvbmZpZyR7YW5zaS5yZXNldH1gO1xuICBjb25zdCBkZXRhaWwgPSBgJHthbnNpLnllbGxvd31Qcm92aWRlIHJlcG9zaXRvcnktb3duZWQgYm91bmRhcmllcyBmaWxlcywgZWxlbWVudHMsIGFuZCBlbGVtZW50LXR5cGVzLiR7YW5zaS5yZXNldH1gO1xuICBjb25zdCBoaW50ID0gYCR7YW5zaS5jeWFufUhpbnQ6JHthbnNpLnJlc2V0fSBQcm92aWRlIGJvdW5kYXJpZXMgY29uZmlnIHZpYSBjb25maWcoeyBib3VuZGFyaWVzOiB7IC4uLiB9IH0pIG9yIGRpc2FibGUgdGhlIHBsdWdpbiB3aXRoIGRpc2FibGVkUGx1Z2luczogW1wiYm91bmRhcmllc1wiXS5gO1xuICBwcm9jZXNzLnN0ZGVyci53cml0ZShgJHtbaGVhZGVyLCBkZXRhaWwsIGhpbnRdLmpvaW4oXCJcXG5cIil9XFxuYCk7XG59XG5cbi8qKlxuICogUmVwb3J0cyBhIHBsdWdpbiBsb2FkaW5nIGlzc3VlIHVzaW5nIHJ1bnRpbWUtYXdhcmUgbWVzc2FnaW5nLlxuICogQHBhcmFtIHBsdWdpbk5hbWUgSW5wdXQgcGx1Z2luTmFtZSB2YWx1ZS5cbiAqIEBwYXJhbSBlcnJvciBJbnB1dCBlcnJvciB2YWx1ZS5cbiAqIEBwYXJhbSBtb2RlIFNwZWNpZmllcyB3aGV0aGVyIGxvYWRlciBmYWlsdXJlcyBhcmUgZmF0YWwgb3Igc2tpcHBhYmxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydFBsdWdpbkxvYWRJc3N1ZShcInZpdGVzdFwiLCBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGVcIiksIFwib3B0aW9uYWxcIik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0UGx1Z2luTG9hZElzc3VlKFxuICBwbHVnaW5OYW1lOiBQbHVnaW5OYW1lLFxuICBlcnJvcjogdW5rbm93bixcbiAgbW9kZTogTG9hZE1vZGUsXG4pOiB2b2lkIHtcbiAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlcnJvcik7XG4gIGNvbnN0IGlzTWlzc2luZ09wdGlvbmFsRGVwZW5kZW5jeSA9XG4gICAgbW9kZSA9PT0gXCJvcHRpb25hbFwiICYmIGlzTWlzc2luZ01vZHVsZUVycm9yKGVycm9yKTtcbiAgY29uc3QgaGVhZGVyID0gaXNNaXNzaW5nT3B0aW9uYWxEZXBlbmRlbmN5XG4gICAgPyBgJHthbnNpLmJvbGR9JHthbnNpLnllbGxvd31Ta2lwcGVkIG9wdGlvbmFsIEVTTGludCBwbHVnaW4gY29uZmlnOiAke3BsdWdpbk5hbWV9JHthbnNpLnJlc2V0fWBcbiAgICA6IGAke2Fuc2kuYm9sZH0ke2Fuc2kucmVkfUZhaWxlZCB0byBsb2FkIEVTTGludCBwbHVnaW4gY29uZmlnOiAke3BsdWdpbk5hbWV9JHthbnNpLnJlc2V0fWA7XG4gIGNvbnN0IGRldGFpbCA9IGAke2Fuc2kueWVsbG93fSR7bWVzc2FnZX0ke2Fuc2kucmVzZXR9YDtcbiAgY29uc3QgaGludCA9XG4gICAgbW9kZSA9PT0gXCJyZXF1aXJlZFwiXG4gICAgICA/IGAke2Fuc2kuY3lhbn1IaW50OiR7YW5zaS5yZXNldH0gSW5zdGFsbCB0aGUgcmVxdWlyZWQgcGVlciBkZXBlbmRlbmN5IGJhY2tpbmcgXCIke3BsdWdpbk5hbWV9XCIgYmVmb3JlIHVzaW5nIGNvbmZpZygpLmBcbiAgICAgIDogYCR7YW5zaS5jeWFufUhpbnQ6JHthbnNpLnJlc2V0fSBJbnN0YWxsIHRoZSBwbHVnaW4gb3IgZGlzYWJsZSBpdCB2aWEgY29uZmlnKHsgZGlzYWJsZWRQbHVnaW5zOiBbXCIke3BsdWdpbk5hbWV9XCJdIH0pLmA7XG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke1toZWFkZXIsIGRldGFpbCwgaGludF0uam9pbihcIlxcblwiKX1cXG5gKTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIGEgc2tpcHBlZCBydWxlIG92ZXJyaWRlIHdoZW4gdGhlIHRhcmdldCBwbHVnaW4gaXMgdW5hdmFpbGFibGUuXG4gKiBAcGFyYW0gcnVsZU5hbWUgSW5wdXQgcnVsZU5hbWUgdmFsdWUuXG4gKiBAcGFyYW0gcGx1Z2luTmFtZSBJbnB1dCBwbHVnaW5OYW1lIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydFJ1bGVPdmVycmlkZVNraXAoXCJ2aXRlc3Qvbm8tZm9jdXNlZC10ZXN0c1wiLCBcInZpdGVzdFwiKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRSdWxlT3ZlcnJpZGVTa2lwKHJ1bGVOYW1lOiBzdHJpbmcsIHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBoZWFkZXIgPSBgJHthbnNpLmJvbGR9JHthbnNpLnJlZH1Ta2lwcGVkIHJ1bGUgb3ZlcnJpZGU6ICR7cnVsZU5hbWV9JHthbnNpLnJlc2V0fWA7XG4gIGNvbnN0IGRldGFpbCA9IGAke2Fuc2kueWVsbG93fVBsdWdpbiBcIiR7cGx1Z2luTmFtZX1cIiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBmaW5hbCBjb25maWcuJHthbnNpLnJlc2V0fWA7XG4gIGNvbnN0IGhpbnQgPSBgJHthbnNpLmN5YW59SGludDoke2Fuc2kucmVzZXR9IEluc3RhbGwgdGhlIHBsdWdpbiBvciByZW1vdmUgdGhlIHJ1bGUgb3ZlcnJpZGUuYDtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYCR7W2hlYWRlciwgZGV0YWlsLCBoaW50XS5qb2luKFwiXFxuXCIpfVxcbmApO1xufVxuXG5leHBvcnQge1xuICBpc01pc3NpbmdNb2R1bGVFcnJvcixcbiAgcmVwb3J0TWlzc2luZ0JvdW5kYXJpZXNDb25maWcsXG4gIHJlcG9ydFBsdWdpbkxvYWRJc3N1ZSxcbiAgcmVwb3J0UnVsZU92ZXJyaWRlU2tpcCxcbn07XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import type { Linter } from "eslint";
2
+ /**
3
+ * Resolve and return plugin configuration for eslint-comments when available.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * await comments();
8
+ * ```
9
+ */
10
+ export declare function comments(): Promise<Linter.Config[]>;
11
+ //# sourceMappingURL=comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/docs/comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC;;;;;;;GAOG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CA0BzD"}
@@ -0,0 +1,30 @@
1
+ import { defineConfig } from "eslint/config";
2
+ /**
3
+ * Resolve and return plugin configuration for eslint-comments when available.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * await comments();
8
+ * ```
9
+ */
10
+ export async function comments() {
11
+ const eslintCommentsModule = await import("@eslint-community/eslint-plugin-eslint-comments");
12
+ const eslintCommentsConfigs = await import("@eslint-community/eslint-plugin-eslint-comments/configs");
13
+ const { rules } = eslintCommentsModule;
14
+ const { recommended } = eslintCommentsConfigs;
15
+ const customIgnore = new Set(["no-use"]);
16
+ const recommendedRules = new Set(Object.keys(recommended.rules ?? {}));
17
+ const customError = Object.fromEntries(Object.keys(rules)
18
+ .filter((rule) => !customIgnore.has(rule))
19
+ .map((rule) => `@eslint-community/eslint-comments/${rule}`)
20
+ .filter((rule) => !recommendedRules.has(rule))
21
+ .map((rule) => [rule, "error"]));
22
+ return defineConfig(recommended, {
23
+ name: "@eslint-community/eslint-comments/custom",
24
+ rules: {
25
+ ...customError,
26
+ "@eslint-community/eslint-comments/disable-enable-pair": "off",
27
+ },
28
+ });
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9jb21tZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVE7SUFDNUIsTUFBTSxvQkFBb0IsR0FDeEIsTUFBTSxNQUFNLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUNsRSxNQUFNLHFCQUFxQixHQUN6QixNQUFNLE1BQU0sQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztJQUN2QyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcscUJBQXFCLENBQUM7SUFFOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDZixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHFDQUFxQyxJQUFJLEVBQUUsQ0FBQztTQUMxRCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFVLENBQUMsQ0FDM0MsQ0FBQztJQUVGLE9BQU8sWUFBWSxDQUFDLFdBQVcsRUFBRTtRQUMvQixJQUFJLEVBQUUsMENBQTBDO1FBQ2hELEtBQUssRUFBRTtZQUNMLEdBQUcsV0FBVztZQUNkLHVEQUF1RCxFQUFFLEtBQUs7U0FDL0Q7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJlc2xpbnQvY29uZmlnXCI7XG5cbi8qKlxuICogUmVzb2x2ZSBhbmQgcmV0dXJuIHBsdWdpbiBjb25maWd1cmF0aW9uIGZvciBlc2xpbnQtY29tbWVudHMgd2hlbiBhdmFpbGFibGUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGF3YWl0IGNvbW1lbnRzKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbW1lbnRzKCk6IFByb21pc2U8TGludGVyLkNvbmZpZ1tdPiB7XG4gIGNvbnN0IGVzbGludENvbW1lbnRzTW9kdWxlID1cbiAgICBhd2FpdCBpbXBvcnQoXCJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtcGx1Z2luLWVzbGludC1jb21tZW50c1wiKTtcbiAgY29uc3QgZXNsaW50Q29tbWVudHNDb25maWdzID1cbiAgICBhd2FpdCBpbXBvcnQoXCJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtcGx1Z2luLWVzbGludC1jb21tZW50cy9jb25maWdzXCIpO1xuICBjb25zdCB7IHJ1bGVzIH0gPSBlc2xpbnRDb21tZW50c01vZHVsZTtcbiAgY29uc3QgeyByZWNvbW1lbmRlZCB9ID0gZXNsaW50Q29tbWVudHNDb25maWdzO1xuXG4gIGNvbnN0IGN1c3RvbUlnbm9yZSA9IG5ldyBTZXQoW1wibm8tdXNlXCJdKTtcbiAgY29uc3QgcmVjb21tZW5kZWRSdWxlcyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocmVjb21tZW5kZWQucnVsZXMgPz8ge30pKTtcblxuICBjb25zdCBjdXN0b21FcnJvciA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3Qua2V5cyhydWxlcylcbiAgICAgIC5maWx0ZXIoKHJ1bGUpID0+ICFjdXN0b21JZ25vcmUuaGFzKHJ1bGUpKVxuICAgICAgLm1hcCgocnVsZSkgPT4gYEBlc2xpbnQtY29tbXVuaXR5L2VzbGludC1jb21tZW50cy8ke3J1bGV9YClcbiAgICAgIC5maWx0ZXIoKHJ1bGUpID0+ICFyZWNvbW1lbmRlZFJ1bGVzLmhhcyhydWxlKSlcbiAgICAgIC5tYXAoKHJ1bGUpID0+IFtydWxlLCBcImVycm9yXCJdIGFzIGNvbnN0KSxcbiAgKTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKHJlY29tbWVuZGVkLCB7XG4gICAgbmFtZTogXCJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtY29tbWVudHMvY3VzdG9tXCIsXG4gICAgcnVsZXM6IHtcbiAgICAgIC4uLmN1c3RvbUVycm9yLFxuICAgICAgXCJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtY29tbWVudHMvZGlzYWJsZS1lbmFibGUtcGFpclwiOiBcIm9mZlwiLFxuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ export { comments } from "./comments";
2
+ export { jsdoc } from "./jsdoc";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { comments } from "./comments";
2
+ export { jsdoc } from "./jsdoc";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBjb21tZW50cyB9IGZyb20gXCIuL2NvbW1lbnRzXCI7XG5leHBvcnQgeyBqc2RvYyB9IGZyb20gXCIuL2pzZG9jXCI7XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import type { Linter } from "eslint";
2
+ /**
3
+ * Build the jsdoc plugin configuration and any overrides needed by this project.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * await jsdoc();
8
+ * ```
9
+ */
10
+ declare const jsdoc: () => Promise<Linter.Config[]>;
11
+ export { jsdoc };
12
+ //# sourceMappingURL=jsdoc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsdoc.d.ts","sourceRoot":"","sources":["../../src/docs/jsdoc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiDrC;;;;;;;GAOG;AACH,QAAA,MAAM,KAAK,QAAa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAsC9C,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { defineConfig } from "eslint/config";
2
+ /**
3
+ * Build the custom jsdoc error rules based on available plugin rules.
4
+ * @param availableRules Set of available jsdoc rule names.
5
+ * @returns The rules record for ESLint.
6
+ * @example
7
+ * ```typescript
8
+ * const rules = buildCustomErrorRules(new Set(["require-throws"]));
9
+ * ```
10
+ */
11
+ const buildCustomErrorRules = (availableRules) => {
12
+ const ruleNames = [
13
+ "check-indentation",
14
+ "convert-to-jsdoc-comments",
15
+ "require-description",
16
+ "require-description-complete-sentence",
17
+ "require-template",
18
+ "require-throws",
19
+ "sort-tags",
20
+ ];
21
+ return Object.fromEntries(ruleNames
22
+ .filter((rule) => availableRules.has(rule))
23
+ .map((rule) => [`jsdoc/${rule}`, "error"]));
24
+ };
25
+ /** AST contexts that must include JSDoc. */
26
+ const requireJsdocContexts = [
27
+ "Program > FunctionDeclaration",
28
+ "Program > ExportDefaultDeclaration > FunctionDeclaration",
29
+ "Program > ExportNamedDeclaration > FunctionDeclaration",
30
+ "Program > VariableDeclaration",
31
+ "Program > ExportNamedDeclaration > VariableDeclaration",
32
+ "TSInterfaceDeclaration",
33
+ "TSTypeAliasDeclaration",
34
+ "TSPropertySignature",
35
+ "TSMethodSignature",
36
+ "TSCallSignatureDeclaration",
37
+ "TSConstructSignatureDeclaration",
38
+ "TSIndexSignature",
39
+ ];
40
+ /**
41
+ * Build the jsdoc plugin configuration and any overrides needed by this project.
42
+ * @returns Return value output.
43
+ * @example
44
+ * ```typescript
45
+ * await jsdoc();
46
+ * ```
47
+ */
48
+ const jsdoc = async () => {
49
+ const jsdocModule = await import("eslint-plugin-jsdoc");
50
+ const { configs, rules } = jsdocModule.default;
51
+ const availableRules = new Set(Object.keys(rules ?? {}));
52
+ const customError = buildCustomErrorRules(availableRules);
53
+ return defineConfig(configs["flat/recommended-typescript-error"], configs["flat/contents-typescript-error"], configs["flat/logical-typescript-error"], configs["flat/requirements-typescript-error"], configs["flat/stylistic-typescript-error"], {
54
+ name: "jsdoc/custom",
55
+ rules: {
56
+ ...customError,
57
+ "jsdoc/text-escaping": "off",
58
+ },
59
+ }, {
60
+ name: "jsdoc/require-jsdoc-alias",
61
+ rules: {
62
+ "jsdoc/require-description": ["error", { contexts: requireJsdocContexts }],
63
+ "jsdoc/require-jsdoc": ["error", { contexts: requireJsdocContexts }],
64
+ },
65
+ }, {
66
+ files: ["**/*.spec.ts"],
67
+ name: "jsdoc/custom-spec",
68
+ rules: {
69
+ "jsdoc/convert-to-jsdoc-comments": [
70
+ "error",
71
+ { allowedPrefixes: ["Arrange", "Act"] },
72
+ ],
73
+ },
74
+ });
75
+ };
76
+ export { jsdoc };
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9jcy9qc2RvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixjQUEyQixFQUNQLEVBQUU7SUFDdEIsTUFBTSxTQUFTLEdBQUc7UUFDaEIsbUJBQW1CO1FBQ25CLDJCQUEyQjtRQUMzQixxQkFBcUI7UUFDckIsdUNBQXVDO1FBQ3ZDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsV0FBVztLQUNaLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLFNBQVM7U0FDTixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFVLENBQUMsQ0FDdEQsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLDRDQUE0QztBQUM1QyxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLCtCQUErQjtJQUMvQiwwREFBMEQ7SUFDMUQsd0RBQXdEO0lBQ3hELCtCQUErQjtJQUMvQix3REFBd0Q7SUFDeEQsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLDRCQUE0QjtJQUM1QixpQ0FBaUM7SUFDakMsa0JBQWtCO0NBQ25CLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUE4QixFQUFFO0lBQ2pELE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBRS9DLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFMUQsT0FBTyxZQUFZLENBQ2pCLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxFQUM1QyxPQUFPLENBQUMsZ0NBQWdDLENBQUMsRUFDekMsT0FBTyxDQUFDLCtCQUErQixDQUFDLEVBQ3hDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxFQUM3QyxPQUFPLENBQUMsaUNBQWlDLENBQUMsRUFDMUM7UUFDRSxJQUFJLEVBQUUsY0FBYztRQUNwQixLQUFLLEVBQUU7WUFDTCxHQUFHLFdBQVc7WUFDZCxxQkFBcUIsRUFBRSxLQUFLO1NBQzdCO0tBQ0YsRUFDRDtRQUNFLElBQUksRUFBRSwyQkFBMkI7UUFDakMsS0FBSyxFQUFFO1lBQ0wsMkJBQTJCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztZQUMxRSxxQkFBcUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO1NBQ3JFO0tBQ0YsRUFDRDtRQUNFLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUN2QixJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLEtBQUssRUFBRTtZQUNMLGlDQUFpQyxFQUFFO2dCQUNqQyxPQUFPO2dCQUNQLEVBQUUsZUFBZSxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFO2FBQ3hDO1NBQ0Y7S0FDRixDQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcclxuXHJcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJlc2xpbnQvY29uZmlnXCI7XHJcblxyXG4vKipcclxuICogQnVpbGQgdGhlIGN1c3RvbSBqc2RvYyBlcnJvciBydWxlcyBiYXNlZCBvbiBhdmFpbGFibGUgcGx1Z2luIHJ1bGVzLlxyXG4gKiBAcGFyYW0gYXZhaWxhYmxlUnVsZXMgU2V0IG9mIGF2YWlsYWJsZSBqc2RvYyBydWxlIG5hbWVzLlxyXG4gKiBAcmV0dXJucyBUaGUgcnVsZXMgcmVjb3JkIGZvciBFU0xpbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgcnVsZXMgPSBidWlsZEN1c3RvbUVycm9yUnVsZXMobmV3IFNldChbXCJyZXF1aXJlLXRocm93c1wiXSkpO1xyXG4gKiBgYGBcclxuICovXHJcbmNvbnN0IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyA9IChcclxuICBhdmFpbGFibGVSdWxlczogU2V0PHN0cmluZz4sXHJcbik6IExpbnRlci5SdWxlc1JlY29yZCA9PiB7XHJcbiAgY29uc3QgcnVsZU5hbWVzID0gW1xyXG4gICAgXCJjaGVjay1pbmRlbnRhdGlvblwiLFxyXG4gICAgXCJjb252ZXJ0LXRvLWpzZG9jLWNvbW1lbnRzXCIsXHJcbiAgICBcInJlcXVpcmUtZGVzY3JpcHRpb25cIixcclxuICAgIFwicmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZVwiLFxyXG4gICAgXCJyZXF1aXJlLXRlbXBsYXRlXCIsXHJcbiAgICBcInJlcXVpcmUtdGhyb3dzXCIsXHJcbiAgICBcInNvcnQtdGFnc1wiLFxyXG4gIF07XHJcblxyXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICBydWxlTmFtZXNcclxuICAgICAgLmZpbHRlcigocnVsZSkgPT4gYXZhaWxhYmxlUnVsZXMuaGFzKHJ1bGUpKVxyXG4gICAgICAubWFwKChydWxlKSA9PiBbYGpzZG9jLyR7cnVsZX1gLCBcImVycm9yXCJdIGFzIGNvbnN0KSxcclxuICApO1xyXG59O1xyXG5cclxuLyoqIEFTVCBjb250ZXh0cyB0aGF0IG11c3QgaW5jbHVkZSBKU0RvYy4gKi9cclxuY29uc3QgcmVxdWlyZUpzZG9jQ29udGV4dHMgPSBbXHJcbiAgXCJQcm9ncmFtID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA+IEZ1bmN0aW9uRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gRnVuY3Rpb25EZWNsYXJhdGlvblwiLFxyXG4gIFwiUHJvZ3JhbSA+IFZhcmlhYmxlRGVjbGFyYXRpb25cIixcclxuICBcIlByb2dyYW0gPiBFeHBvcnROYW1lZERlY2xhcmF0aW9uID4gVmFyaWFibGVEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNJbnRlcmZhY2VEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNUeXBlQWxpYXNEZWNsYXJhdGlvblwiLFxyXG4gIFwiVFNQcm9wZXJ0eVNpZ25hdHVyZVwiLFxyXG4gIFwiVFNNZXRob2RTaWduYXR1cmVcIixcclxuICBcIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uXCIsXHJcbiAgXCJUU0luZGV4U2lnbmF0dXJlXCIsXHJcbl07XHJcblxyXG4vKipcclxuICogQnVpbGQgdGhlIGpzZG9jIHBsdWdpbiBjb25maWd1cmF0aW9uIGFuZCBhbnkgb3ZlcnJpZGVzIG5lZWRlZCBieSB0aGlzIHByb2plY3QuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogYXdhaXQganNkb2MoKTtcclxuICogYGBgXHJcbiAqL1xyXG5jb25zdCBqc2RvYyA9IGFzeW5jICgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4gPT4ge1xyXG4gIGNvbnN0IGpzZG9jTW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiZXNsaW50LXBsdWdpbi1qc2RvY1wiKTtcclxuICBjb25zdCB7IGNvbmZpZ3MsIHJ1bGVzIH0gPSBqc2RvY01vZHVsZS5kZWZhdWx0O1xyXG5cclxuICBjb25zdCBhdmFpbGFibGVSdWxlcyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocnVsZXMgPz8ge30pKTtcclxuICBjb25zdCBjdXN0b21FcnJvciA9IGJ1aWxkQ3VzdG9tRXJyb3JSdWxlcyhhdmFpbGFibGVSdWxlcyk7XHJcblxyXG4gIHJldHVybiBkZWZpbmVDb25maWcoXHJcbiAgICBjb25maWdzW1wiZmxhdC9yZWNvbW1lbmRlZC10eXBlc2NyaXB0LWVycm9yXCJdLFxyXG4gICAgY29uZmlnc1tcImZsYXQvY29udGVudHMtdHlwZXNjcmlwdC1lcnJvclwiXSxcclxuICAgIGNvbmZpZ3NbXCJmbGF0L2xvZ2ljYWwtdHlwZXNjcmlwdC1lcnJvclwiXSxcclxuICAgIGNvbmZpZ3NbXCJmbGF0L3JlcXVpcmVtZW50cy10eXBlc2NyaXB0LWVycm9yXCJdLFxyXG4gICAgY29uZmlnc1tcImZsYXQvc3R5bGlzdGljLXR5cGVzY3JpcHQtZXJyb3JcIl0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwianNkb2MvY3VzdG9tXCIsXHJcbiAgICAgIHJ1bGVzOiB7XHJcbiAgICAgICAgLi4uY3VzdG9tRXJyb3IsXHJcbiAgICAgICAgXCJqc2RvYy90ZXh0LWVzY2FwaW5nXCI6IFwib2ZmXCIsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcImpzZG9jL3JlcXVpcmUtanNkb2MtYWxpYXNcIixcclxuICAgICAgcnVsZXM6IHtcclxuICAgICAgICBcImpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb25cIjogW1wiZXJyb3JcIiwgeyBjb250ZXh0czogcmVxdWlyZUpzZG9jQ29udGV4dHMgfV0sXHJcbiAgICAgICAgXCJqc2RvYy9yZXF1aXJlLWpzZG9jXCI6IFtcImVycm9yXCIsIHsgY29udGV4dHM6IHJlcXVpcmVKc2RvY0NvbnRleHRzIH1dLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmlsZXM6IFtcIioqLyouc3BlYy50c1wiXSxcclxuICAgICAgbmFtZTogXCJqc2RvYy9jdXN0b20tc3BlY1wiLFxyXG4gICAgICBydWxlczoge1xyXG4gICAgICAgIFwianNkb2MvY29udmVydC10by1qc2RvYy1jb21tZW50c1wiOiBbXHJcbiAgICAgICAgICBcImVycm9yXCIsXHJcbiAgICAgICAgICB7IGFsbG93ZWRQcmVmaXhlczogW1wiQXJyYW5nZVwiLCBcIkFjdFwiXSB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgeyBqc2RvYyB9O1xyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export { rxjsX } from "./rxjs-x";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { rxjsX } from "./rxjs-x";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9tYWluL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyByeGpzWCB9IGZyb20gXCIuL3J4anMteFwiO1xuIl19
@@ -0,0 +1,11 @@
1
+ import type { Linter } from "eslint";
2
+ /**
3
+ * Build and return rxjs-x plugin configurations with package-level adjustments.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * await rxjsX();
8
+ * ```
9
+ */
10
+ export declare function rxjsX(): Promise<Linter.Config[]>;
11
+ //# sourceMappingURL=rxjs-x.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rxjs-x.d.ts","sourceRoot":"","sources":["../../src/domain/rxjs-x.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC;;;;;;;GAOG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAqBtD"}
@@ -0,0 +1,27 @@
1
+ import { defineConfig } from "eslint/config";
2
+ /**
3
+ * Build and return rxjs-x plugin configurations with package-level adjustments.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * await rxjsX();
8
+ * ```
9
+ */
10
+ export async function rxjsX() {
11
+ const pluginModule = await import("eslint-plugin-rxjs-x");
12
+ return defineConfig(pluginModule.default.configs.strict, {
13
+ name: "rxjs-x/custom",
14
+ rules: {
15
+ "rxjs-x/no-ignored-default-value": "off",
16
+ "rxjs-x/no-subclass": "off",
17
+ "rxjs-x/no-unbound-methods": "off",
18
+ },
19
+ }, {
20
+ files: ["**/*.spec.ts"],
21
+ name: "rxjs-x/custom-spec",
22
+ rules: {
23
+ "rxjs-x/no-ignored-error": "off",
24
+ },
25
+ });
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhqcy14LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RvbWFpbi9yeGpzLXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxLQUFLO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFMUQsT0FBTyxZQUFZLENBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQXVCLEVBQ3BEO1FBQ0UsSUFBSSxFQUFFLGVBQWU7UUFDckIsS0FBSyxFQUFFO1lBQ0wsaUNBQWlDLEVBQUUsS0FBSztZQUN4QyxvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLDJCQUEyQixFQUFFLEtBQUs7U0FDbkM7S0FDRixFQUNEO1FBQ0UsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsS0FBSyxFQUFFO1lBQ0wseUJBQXlCLEVBQUUsS0FBSztTQUNqQztLQUNGLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcImVzbGludC9jb25maWdcIjtcblxuLyoqXG4gKiBCdWlsZCBhbmQgcmV0dXJuIHJ4anMteCBwbHVnaW4gY29uZmlndXJhdGlvbnMgd2l0aCBwYWNrYWdlLWxldmVsIGFkanVzdG1lbnRzLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBhd2FpdCByeGpzWCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByeGpzWCgpOiBQcm9taXNlPExpbnRlci5Db25maWdbXT4ge1xuICBjb25zdCBwbHVnaW5Nb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJlc2xpbnQtcGx1Z2luLXJ4anMteFwiKTtcblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIHBsdWdpbk1vZHVsZS5kZWZhdWx0LmNvbmZpZ3Muc3RyaWN0IGFzIExpbnRlci5Db25maWcsXG4gICAge1xuICAgICAgbmFtZTogXCJyeGpzLXgvY3VzdG9tXCIsXG4gICAgICBydWxlczoge1xuICAgICAgICBcInJ4anMteC9uby1pZ25vcmVkLWRlZmF1bHQtdmFsdWVcIjogXCJvZmZcIixcbiAgICAgICAgXCJyeGpzLXgvbm8tc3ViY2xhc3NcIjogXCJvZmZcIixcbiAgICAgICAgXCJyeGpzLXgvbm8tdW5ib3VuZC1tZXRob2RzXCI6IFwib2ZmXCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IFtcIioqLyouc3BlYy50c1wiXSxcbiAgICAgIG5hbWU6IFwicnhqcy14L2N1c3RvbS1zcGVjXCIsXG4gICAgICBydWxlczoge1xuICAgICAgICBcInJ4anMteC9uby1pZ25vcmVkLWVycm9yXCI6IFwib2ZmXCIsXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,44 @@
1
+ /** List of supported plugin names used in config tests. */
2
+ declare const allPlugins: ["eslint", "resolver", "typescript", "boundaries", "import-x", "comments", "jsdoc", "jasmine", "jest", "playwright", "vitest", "rxjs-x", "perfectionist", "prettier", "stylistic", "unicorn"];
3
+ /**
4
+ * Mock all plugin loaders to return empty configurations.
5
+ * @example
6
+ * ```typescript
7
+ * mockAllEmpty();
8
+ * ```
9
+ */
10
+ declare function mockAllEmpty(): void;
11
+ /**
12
+ * Mock all plugin loaders to return small sample configurations.
13
+ * @example
14
+ * ```typescript
15
+ * mockAllEnabled();
16
+ * ```
17
+ */
18
+ declare function mockAllEnabled(): void;
19
+ /**
20
+ * Mock architecture loaders so `boundaries` only activates with repository input.
21
+ * @example
22
+ * ```typescript
23
+ * mockBoundariesAware();
24
+ * ```
25
+ */
26
+ declare function mockBoundariesAware(): void;
27
+ /**
28
+ * Mock non-core plugin loaders to return empty configs.
29
+ * @example
30
+ * ```typescript
31
+ * mockNonCoreEmpty();
32
+ * ```
33
+ */
34
+ declare function mockNonCoreEmpty(): void;
35
+ /**
36
+ * Mock a config composition where required loaders succeed and one optional loader fails.
37
+ * @example
38
+ * ```typescript
39
+ * mockOptionalResolverFailure();
40
+ * ```
41
+ */
42
+ declare function mockOptionalResolverFailure(): void;
43
+ export { allPlugins, mockAllEmpty, mockAllEnabled, mockBoundariesAware, mockNonCoreEmpty, mockOptionalResolverFailure, };
44
+ //# sourceMappingURL=index-spec-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-spec-helpers.d.ts","sourceRoot":"","sources":["../src/index-spec-helpers.ts"],"names":[],"mappings":"AAOA,2DAA2D;AAC3D,QAAA,MAAM,UAAU,+LAiBiB,CAAC;AAElC;;;;;;GAMG;AACH,iBAAS,YAAY,IAAI,IAAI,CAuB5B;AAED;;;;;;GAMG;AACH,iBAAS,cAAc,IAAI,IAAI,CAuB9B;AAED;;;;;;GAMG;AACH,iBAAS,mBAAmB,IAAI,IAAI,CAwBnC;AAED;;;;;;GAMG;AACH,iBAAS,gBAAgB,IAAI,IAAI,CAyBhC;AAED;;;;;;GAMG;AACH,iBAAS,2BAA2B,IAAI,IAAI,CA2B3C;AAED,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,GAC5B,CAAC"}