@useinsider/eslint-config 1.9.2 → 1.10.0-beta.10

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 (143) hide show
  1. package/README.md +7 -6
  2. package/dist/base.d.ts +2 -2
  3. package/dist/configs/config/index.d.ts +1 -1
  4. package/dist/configs/javascript/index.d.ts +2 -1
  5. package/dist/configs/javascript-dom/index.d.ts +1 -1
  6. package/dist/configs/javascript-node/index.d.ts +1 -1
  7. package/dist/configs/jest/index.d.ts +1 -1
  8. package/dist/configs/jsdoc-based-ts/index.d.ts +1 -1
  9. package/dist/configs/typescript/index.d.ts +1 -1
  10. package/dist/configs/typescript-dom/index.d.ts +1 -1
  11. package/dist/configs/typescript-node/index.d.ts +2 -2
  12. package/dist/configs/vue2/index.d.ts +1 -1
  13. package/dist/configs/vue2-typescript/index.d.ts +3 -0
  14. package/dist/configs/vue3/index.d.ts +1 -1
  15. package/dist/configs/vue3-typescript/index.d.ts +1 -1
  16. package/dist/index-BTX-Xx3E.js +14 -0
  17. package/dist/index-BTX-Xx3E.js.map +1 -0
  18. package/dist/index-BYgw1jEi.js +14 -0
  19. package/dist/index-BYgw1jEi.js.map +1 -0
  20. package/dist/index-BfeyRYMe.js +17 -0
  21. package/dist/index-BfeyRYMe.js.map +1 -0
  22. package/dist/index-BhIppjjk.cjs +54 -0
  23. package/dist/index-BhIppjjk.cjs.map +1 -0
  24. package/dist/index-Bkn0-edz.js +54 -0
  25. package/dist/index-Bkn0-edz.js.map +1 -0
  26. package/dist/index-ByJGX90X.cjs +28 -0
  27. package/dist/index-ByJGX90X.cjs.map +1 -0
  28. package/dist/index-CDyyy483.js +28 -0
  29. package/dist/index-CDyyy483.js.map +1 -0
  30. package/dist/index-CR8V-t6x.js +14 -0
  31. package/dist/index-CR8V-t6x.js.map +1 -0
  32. package/dist/index-CjgvrUgK.cjs +14 -0
  33. package/dist/index-CjgvrUgK.cjs.map +1 -0
  34. package/dist/index-Cw0lWOha.cjs +14 -0
  35. package/dist/index-Cw0lWOha.cjs.map +1 -0
  36. package/dist/index-D-rYWfeI.cjs +28 -0
  37. package/dist/index-D-rYWfeI.cjs.map +1 -0
  38. package/dist/index-D4MPQx8Q.cjs +9 -0
  39. package/dist/index-D4MPQx8Q.cjs.map +1 -0
  40. package/dist/index-D84g26dl.js +44 -0
  41. package/dist/index-D84g26dl.js.map +1 -0
  42. package/dist/index-DCq2un1b.cjs +17 -0
  43. package/dist/index-DCq2un1b.cjs.map +1 -0
  44. package/dist/index-DGiWIDAp.cjs +28 -0
  45. package/dist/index-DGiWIDAp.cjs.map +1 -0
  46. package/dist/index-DIqcxV_k.js +28 -0
  47. package/dist/index-DIqcxV_k.js.map +1 -0
  48. package/dist/index-DJL4a_Kw.js +15 -0
  49. package/dist/index-DJL4a_Kw.js.map +1 -0
  50. package/dist/index-DPseTvz6.cjs +10 -0
  51. package/dist/index-DPseTvz6.cjs.map +1 -0
  52. package/dist/index-DbPDbm1S.js +10 -0
  53. package/dist/index-DbPDbm1S.js.map +1 -0
  54. package/dist/index-DePBHdMb.cjs +15 -0
  55. package/dist/index-DePBHdMb.cjs.map +1 -0
  56. package/dist/index-FNO0uAiM.js +9 -0
  57. package/dist/index-FNO0uAiM.js.map +1 -0
  58. package/dist/index-PJMgYgcV.cjs +14 -0
  59. package/dist/index-PJMgYgcV.cjs.map +1 -0
  60. package/dist/index-g7AwuujJ.js +28 -0
  61. package/dist/index-g7AwuujJ.js.map +1 -0
  62. package/dist/index-hIqcylZ1.js +11 -0
  63. package/dist/index-hIqcylZ1.js.map +1 -0
  64. package/dist/index-lL8X11Fl.cjs +44 -0
  65. package/dist/index-lL8X11Fl.cjs.map +1 -0
  66. package/dist/index-xJXN5s4U.cjs +11 -0
  67. package/dist/index-xJXN5s4U.cjs.map +1 -0
  68. package/dist/main.cjs +192 -3
  69. package/dist/main.cjs.map +1 -0
  70. package/dist/main.d.ts +3 -2
  71. package/dist/main.js +142 -164
  72. package/dist/main.js.map +1 -0
  73. package/dist/rules/core.d.ts +1 -1
  74. package/dist/rules/cspell.d.ts +1 -1
  75. package/dist/rules/importRules.d.ts +1 -1
  76. package/dist/rules/jsdoc.d.ts +1 -1
  77. package/dist/rules/stylistic.d.ts +1 -1
  78. package/dist/rules/typescript.d.ts +1 -1
  79. package/dist/rules/vue.d.ts +1 -1
  80. package/dist/rules/vue2-typescript.d.ts +2 -0
  81. package/dist/rules/vue2.d.ts +2 -2
  82. package/dist/stylistic-BzZCZ0ri.js +418 -0
  83. package/dist/stylistic-BzZCZ0ri.js.map +1 -0
  84. package/dist/stylistic-CFIZ-V78.cjs +417 -0
  85. package/dist/stylistic-CFIZ-V78.cjs.map +1 -0
  86. package/dist/{rules/typescript.js → typescript-Bh2dj5yT.js} +10 -8
  87. package/dist/typescript-Bh2dj5yT.js.map +1 -0
  88. package/dist/typescript-JqNY1gXc.cjs +51 -0
  89. package/dist/typescript-JqNY1gXc.cjs.map +1 -0
  90. package/dist/utils/merge.d.ts +1 -1
  91. package/dist/utils/mergeAllConfig.d.ts +1 -1
  92. package/dist/vue-B6Bqb251.cjs +209 -0
  93. package/dist/vue-B6Bqb251.cjs.map +1 -0
  94. package/dist/{rules/vue.js → vue-DtDckVDl.js} +22 -19
  95. package/dist/vue-DtDckVDl.js.map +1 -0
  96. package/dist/vue2-PRuaQ_vg.js +19 -0
  97. package/dist/vue2-PRuaQ_vg.js.map +1 -0
  98. package/dist/vue2-R3Acomcd.cjs +18 -0
  99. package/dist/vue2-R3Acomcd.cjs.map +1 -0
  100. package/package.json +36 -42
  101. package/dist/base-C2fq_o3u.cjs +0 -1
  102. package/dist/base-DhxoXy40.js +0 -29
  103. package/dist/compat-DfBTP0AK.js +0 -15
  104. package/dist/compat-S2mgbwTA.cjs +0 -1
  105. package/dist/index-B7Hdni5X.cjs +0 -1
  106. package/dist/index-BSFKHRiy.js +0 -33
  107. package/dist/index-BUOro8yS.js +0 -54
  108. package/dist/index-BX0PuY7X.cjs +0 -1
  109. package/dist/index-BYXlsowx.cjs +0 -1
  110. package/dist/index-BcjSGMc4.cjs +0 -1
  111. package/dist/index-BpqckWqb.js +0 -8
  112. package/dist/index-BsEDEtyS.js +0 -13
  113. package/dist/index-C743UfJX.cjs +0 -1
  114. package/dist/index-CAuGyIr4.cjs +0 -1
  115. package/dist/index-CCc7nS-L.cjs +0 -1
  116. package/dist/index-CG7O0RJO.js +0 -14
  117. package/dist/index-CcvN-eiV.cjs +0 -1
  118. package/dist/index-CixUmpPQ.js +0 -9
  119. package/dist/index-Cjyj5Al1.cjs +0 -1
  120. package/dist/index-CydLRA6p.js +0 -34
  121. package/dist/index-DIhDmtxO.js +0 -17
  122. package/dist/index-DWdvFLYP.js +0 -13
  123. package/dist/index-D_iZLt4b.js +0 -34
  124. package/dist/index-Dgx6nuN5.cjs +0 -1
  125. package/dist/index-Dz51pbFA.js +0 -13
  126. package/dist/index-E3Dvq2rq.js +0 -13
  127. package/dist/index-UyB1dQmr.cjs +0 -1
  128. package/dist/index-jfME37P0.cjs +0 -1
  129. package/dist/rules/core.cjs +0 -1
  130. package/dist/rules/core.js +0 -101
  131. package/dist/rules/cspell.cjs +0 -1
  132. package/dist/rules/cspell.js +0 -10
  133. package/dist/rules/importRules.cjs +0 -1
  134. package/dist/rules/importRules.js +0 -33
  135. package/dist/rules/jsdoc.cjs +0 -1
  136. package/dist/rules/jsdoc.js +0 -74
  137. package/dist/rules/stylistic.cjs +0 -1
  138. package/dist/rules/stylistic.js +0 -182
  139. package/dist/rules/typescript.cjs +0 -1
  140. package/dist/rules/vue.cjs +0 -1
  141. package/dist/rules/vue2.cjs +0 -1
  142. package/dist/rules/vue2.js +0 -12
  143. package/dist/utils/compat.d.ts +0 -7
package/dist/main.js CHANGED
@@ -1,213 +1,191 @@
1
- import w from "node:fs";
2
- import y from "node:path";
3
- import { fileURLToPath as b } from "node:url";
4
- import { installPackage as h } from "@antfu/install-pkg";
5
- import { merge as v } from "ts-deepmerge";
6
- import { warn as j } from "node:console";
7
- let d = !1;
8
- const f = /* @__PURE__ */ new Set(), S = [
9
- "@cspell/eslint-plugin",
10
- "@eslint/eslintrc",
11
- "@eslint/js",
12
- "@stylistic/eslint-plugin",
13
- "@stylistic/eslint-plugin-migrate",
14
- "@types/eslint",
15
- "@types/eslint__eslintrc",
16
- "@types/eslint__js",
17
- "@typescript-eslint/eslint-plugin",
18
- "@typescript-eslint/parser",
1
+ import { readFileSync, existsSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { installPackage } from "@antfu/install-pkg";
6
+ import semver from "semver";
7
+ import { merge as merge$1 } from "ts-deepmerge";
8
+ import { warn } from "node:console";
9
+ let turnOff = false;
10
+ let scanned = false;
11
+ const silencedDependencies = /* @__PURE__ */ new Set();
12
+ const fixedDependencies = [
19
13
  "eslint",
20
- "eslint-config-airbnb-base",
21
- "eslint-config-airbnb-typescript",
22
- "eslint-import-resolver-typescript",
23
- "eslint-plugin-import",
24
- "eslint-plugin-jsdoc",
25
- "globals",
26
- "typescript",
27
- "typescript-eslint"
14
+ "globals"
28
15
  ];
29
- function m(e) {
30
- const t = y.resolve(e, "package.json"), r = w.readFileSync(t, "utf8");
31
- if (!r)
32
- throw new Error(`Unable to locate package.json: ${t}`);
33
- return JSON.parse(r);
16
+ const require2 = createRequire(import.meta.url);
17
+ function getPackageJSONPath(currentDir) {
18
+ const fileLocation = resolve(currentDir, "package.json");
19
+ if (existsSync(fileLocation)) {
20
+ return fileLocation;
21
+ }
22
+ if (currentDir === process.cwd()) {
23
+ throw new Error(`Unable to locate package.json in ${currentDir}`);
24
+ }
25
+ const parentDir = resolve(currentDir, "..");
26
+ return getPackageJSONPath(parentDir);
34
27
  }
35
- function k() {
36
- const e = m(process.cwd());
37
- return {
38
- ...e.dependencies,
39
- ...e.devDependencies
40
- };
28
+ function getPackageJSON(fileLocation) {
29
+ const packageJsonContent = readFileSync(fileLocation, "utf8");
30
+ return JSON.parse(packageJsonContent);
41
31
  }
42
- function E() {
43
- return m(b(new URL(
32
+ function getExpectedDependencies() {
33
+ const path = getPackageJSONPath(fileURLToPath(new URL(
44
34
  /* @vite-ignore */
45
- "../",
46
35
  import.meta.url
47
- ))).dependencies;
36
+ )));
37
+ const packageJson = getPackageJSON(path);
38
+ return packageJson.dependencies;
48
39
  }
49
- async function D() {
50
- if (d)
40
+ function getDependencyVersionFromConsumer(depName, baseDir = process.cwd()) {
41
+ try {
42
+ const pkgJsonPath = require2.resolve(`${depName}/package.json`, { paths: [baseDir] });
43
+ const pkgContent = readFileSync(pkgJsonPath, "utf8");
44
+ const pkg = JSON.parse(pkgContent);
45
+ return pkg.version;
46
+ } catch {
47
+ return void 0;
48
+ }
49
+ }
50
+ async function ensureDependencies() {
51
+ if (turnOff || scanned) {
51
52
  return;
52
- const e = k(), r = Object.entries(E()).filter(([s, o]) => S.includes(s) && !f.has(s) && (!e[s] || e[s] !== o));
53
- if (!r.length)
53
+ }
54
+ scanned = true;
55
+ const expectedDependencies = Object.entries(getExpectedDependencies());
56
+ const missingDependencyEntries = expectedDependencies.filter(([expectedDependency, expectedVersion]) => {
57
+ if (!fixedDependencies.includes(expectedDependency) || silencedDependencies.has(expectedDependency)) {
58
+ return false;
59
+ }
60
+ const installedVersion = getDependencyVersionFromConsumer(expectedDependency);
61
+ if (!installedVersion) {
62
+ return true;
63
+ }
64
+ return semver.lt(installedVersion, expectedVersion);
65
+ });
66
+ if (!missingDependencyEntries.length) {
54
67
  return;
55
- const n = r.map(([s, o]) => `${s}@${o.replace(/^\W+/, "")}`);
56
- console.info("Missing dependencies detected:"), console.info(n.map((s) => ` - ${s}`).join(`
57
- `)), console.info(`
58
- Installing dependencies:`), await h(n, { dev: !0, additionalArgs: ["-E"] }), process.exit(1);
68
+ }
69
+ const missingDependencies = missingDependencyEntries.map(([dependency, version]) => `${dependency}@${version.replace(/^\W+/, "")}`);
70
+ console.info("Missing dependencies detected:");
71
+ console.info(missingDependencies.map((dependency) => ` - ${dependency}`).join("\n"));
72
+ console.info("\nInstalling dependencies:");
73
+ await installPackage(missingDependencies, { dev: true, additionalArgs: ["-E"] });
74
+ process.exit(1);
59
75
  }
60
- function $(e) {
61
- if (typeof e == "boolean") {
62
- d = !0;
76
+ function silenceDependencyWarning(input) {
77
+ if (typeof input === "boolean") {
78
+ turnOff = input;
63
79
  return;
64
80
  }
65
- e.forEach((t) => f.add(String(t)));
81
+ silencedDependencies.clear();
82
+ input.forEach((dependency) => silencedDependencies.add(String(dependency)));
66
83
  }
67
- function u(...e) {
68
- return v.withOptions({ mergeArrays: !1 }, ...e);
84
+ function merge(...args) {
85
+ return merge$1.withOptions({ mergeArrays: false }, ...args);
69
86
  }
70
- const a = /* @__PURE__ */ new Set();
71
- function c(e) {
72
- e.forEach((t) => {
73
- a.add(t);
87
+ const globallySilencedRules = /* @__PURE__ */ new Set();
88
+ function silenceRules(rules) {
89
+ rules.forEach((rule) => {
90
+ globallySilencedRules.add(rule);
74
91
  });
75
92
  }
76
- function x(e) {
77
- if (!Array.isArray(e))
93
+ function silenceRule(config) {
94
+ if (!Array.isArray(config)) {
78
95
  return "warn";
79
- const [, ...t] = e;
80
- return ["warn", ...t];
81
- }
82
- function l(e, t) {
83
- let r = t || a;
84
- return Array.isArray(r) && (r = new Set(r)), !e || !r.size ? e : (t && r.forEach((n) => {
85
- e[n] || j(`Unknown rule "${n}". Please remove it from the silenced rules list.`);
86
- }), Object.entries(e).reduce((n, [s, o]) => (o && (n[s] = r.has(s) ? x(o) : o), n), {}));
96
+ }
97
+ const [, ...restConfig] = config;
98
+ return ["warn", ...restConfig];
87
99
  }
88
- if (import.meta.vitest) {
89
- const { vi: e, describe: t, test: r, expect: n, afterEach: s } = import.meta.vitest, o = e.hoisted(() => ({
90
- warn: e.fn()
91
- }));
92
- e.mock("node:console", () => o), s(() => {
93
- a.clear();
94
- }), t("silenceRules", () => {
95
- r("should register given rule keys as silenced", () => {
96
- const i = "@stylistic/type-generic-spacing";
97
- n(a.has(i)).toBe(!1), c([i]), n(a.has(i)).toBe(!0);
98
- });
99
- }), t("filterSilencedRules", () => {
100
- r("should return the same rules object if no rules are silenced", () => {
101
- const i = {
102
- "no-console": "warn",
103
- "no-debugger": "warn"
104
- };
105
- n(l(i)).toBe(i);
106
- }), r("should return a new rules object with silenced rules silenced and other rules unchanged", () => {
107
- c(["no-console"]), n(l({
108
- "no-console": "error",
109
- "no-debugger": "warn",
110
- "no-alert": "error"
111
- })).toStrictEqual({
112
- "no-console": "warn",
113
- "no-debugger": "warn",
114
- "no-alert": "error"
115
- });
116
- }), r("should return a new rules object with silenced rules silenced and other rules unchanged", () => {
117
- c(["no-bitwise", "new-cap"]), n(l({
118
- "max-len": "off",
119
- "new-cap": ["error"],
120
- "no-alert": ["error"],
121
- "no-bitwise": ["error", {
122
- allow: ["~"]
123
- }]
124
- })).toStrictEqual({
125
- "max-len": "off",
126
- "new-cap": ["warn"],
127
- "no-alert": ["error"],
128
- "no-bitwise": ["warn", {
129
- allow: ["~"]
130
- }]
131
- });
132
- }), r("should not warn about unknown rules", () => {
133
- c(["no-console", "no-bitwise"]), l({
134
- "no-console": "error",
135
- "no-debugger": "warn",
136
- "no-alert": "error"
137
- }), n(o.warn).not.toHaveBeenCalled(), n(o.warn).not.toHaveBeenCalled();
138
- }), r("should warn about unknown rules", () => {
139
- l({
140
- "no-console": "error",
141
- "no-debugger": "warn",
142
- "no-alert": "error"
143
- }, ["no-console", "no-bitwise"]), n(o.warn).toHaveBeenCalledTimes(1), n(o.warn).toHaveBeenCalledWith('Unknown rule "no-bitwise". Please remove it from the silenced rules list.');
144
- }), r.each([
145
- [["@typescript-eslint/no-unsafe-call"], "warn"],
146
- [/* @__PURE__ */ new Set(["@typescript-eslint/no-unsafe-call"]), "warn"],
147
- [[], "error"]
148
- ])("#%# should filter scope-related rules and ignore globally silenced rules", (i, g) => {
149
- c(["@typescript-eslint/no-unsafe-assignment"]), n(l({
150
- "@typescript-eslint/no-unsafe-assignment": "error",
151
- "@typescript-eslint/no-unsafe-member-access": "error",
152
- "@typescript-eslint/no-unsafe-call": "error"
153
- }, i)).toStrictEqual({
154
- "@typescript-eslint/no-unsafe-assignment": "error",
155
- "@typescript-eslint/no-unsafe-member-access": "error",
156
- "@typescript-eslint/no-unsafe-call": g
157
- });
100
+ function filterSilencedRules(rules, silencedRules) {
101
+ let targetSilencedRules = silencedRules || globallySilencedRules;
102
+ if (Array.isArray(targetSilencedRules)) {
103
+ targetSilencedRules = new Set(targetSilencedRules);
104
+ }
105
+ if (!rules || !targetSilencedRules.size) {
106
+ return rules;
107
+ }
108
+ if (silencedRules) {
109
+ targetSilencedRules.forEach((rule) => {
110
+ if (rules[rule]) {
111
+ return;
112
+ }
113
+ warn(`Unknown rule "${rule}". Please remove it from the silenced rules list.`);
158
114
  });
159
- });
115
+ }
116
+ return Object.entries(rules).reduce((newRules, [key, value]) => {
117
+ if (value) {
118
+ newRules[key] = targetSilencedRules.has(key) ? silenceRule(value) : value;
119
+ }
120
+ return newRules;
121
+ }, {});
160
122
  }
161
- function U(...e) {
162
- return e.flat().reduce((t, r) => u(t, r), {});
123
+ function mergeAll(...configs) {
124
+ return configs.flat().reduce((acc, scope) => merge(acc, scope), {});
163
125
  }
164
- const p = {
126
+ const configMap = {
165
127
  async config() {
166
- return import("./index-CixUmpPQ.js");
128
+ return import("./index-DbPDbm1S.js");
167
129
  },
168
130
  async javascript() {
169
- return import("./index-DIhDmtxO.js");
131
+ return import("./index-hIqcylZ1.js");
170
132
  },
171
133
  async "javascript-node"() {
172
- return import("./index-BsEDEtyS.js");
134
+ return import("./index-BTX-Xx3E.js");
173
135
  },
174
136
  async "javascript-dom"() {
175
- return import("./index-Dz51pbFA.js");
137
+ return import("./index-CR8V-t6x.js");
176
138
  },
177
139
  async typescript() {
178
- return import("./index-BSFKHRiy.js");
140
+ return import("./index-DIqcxV_k.js");
179
141
  },
180
142
  async "typescript-node"() {
181
- return import("./index-DWdvFLYP.js");
143
+ return import("./index-BYgw1jEi.js");
182
144
  },
183
145
  async "typescript-dom"() {
184
- return import("./index-E3Dvq2rq.js");
146
+ return import("./index-BfeyRYMe.js");
185
147
  },
186
148
  async vue3() {
187
- return import("./index-D_iZLt4b.js");
149
+ return import("./index-CDyyy483.js");
188
150
  },
189
151
  async "vue3-typescript"() {
190
- return import("./index-BUOro8yS.js");
152
+ return import("./index-D84g26dl.js");
191
153
  },
192
154
  async vue2() {
193
- return import("./index-CydLRA6p.js");
155
+ return import("./index-g7AwuujJ.js");
156
+ },
157
+ async "vue2-typescript"() {
158
+ return import("./index-Bkn0-edz.js");
194
159
  },
195
160
  async jest() {
196
- return import("./index-CG7O0RJO.js");
161
+ return import("./index-DJL4a_Kw.js");
197
162
  },
198
163
  async "jsdoc-based-ts"() {
199
- return import("./index-BpqckWqb.js");
164
+ return import("./index-FNO0uAiM.js");
200
165
  }
201
166
  };
202
- async function H(e) {
203
- await D();
204
- const t = e.preset.map(async (s) => typeof p[s] == "function" && (await p[s]()).default).filter(Boolean), r = await Promise.all(t), n = u(r.reduce((s, o) => u(s, o), {}), e.config);
205
- return n ? (e.silenceRules ? n.rules = l(n.rules, e.silenceRules) : n.rules = l(n.rules), n) : Promise.reject(new Error("No config found"));
167
+ async function useInsider(config) {
168
+ await ensureDependencies();
169
+ const configs = config.preset.map(async (scope) => typeof configMap[scope] === "function" && (await configMap[scope]()).default).filter(Boolean);
170
+ const resolvedConfigs = await Promise.all(configs);
171
+ const resolvedConfigAll = resolvedConfigs.reduce((acc, scope) => merge(acc, scope), {});
172
+ delete resolvedConfigAll.files;
173
+ const mergedConfig = merge(resolvedConfigAll, config.config);
174
+ if (!mergedConfig) {
175
+ return Promise.reject(new Error("No config found"));
176
+ }
177
+ if (config.silenceRules) {
178
+ mergedConfig.rules = filterSilencedRules(mergedConfig.rules, config.silenceRules);
179
+ } else {
180
+ mergedConfig.rules = filterSilencedRules(mergedConfig.rules);
181
+ }
182
+ return mergedConfig;
206
183
  }
207
184
  export {
208
- u as merge,
209
- U as mergeAll,
210
- $ as silenceDependencyWarning,
211
- c as silenceRules,
212
- H as useInsider
185
+ merge,
186
+ mergeAll,
187
+ silenceDependencyWarning,
188
+ silenceRules,
189
+ useInsider
213
190
  };
191
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sources":["../src/utils/ensureDependencies.ts","../src/utils/merge.ts","../src/utils/silenceRules.ts","../src/utils/mergeAllConfig.ts","../src/main.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { installPackage } from '@antfu/install-pkg';\nimport semver from 'semver';\n\nlet turnOff = false;\nlet scanned = false;\nconst silencedDependencies = new Set<string>();\nconst fixedDependencies = [\n 'eslint',\n 'globals',\n];\nconst require = createRequire(import.meta.url);\n\nfunction getPackageJSONPath (currentDir: string) {\n const fileLocation = resolve(currentDir, 'package.json');\n\n if (existsSync(fileLocation)) {\n return fileLocation;\n }\n\n if (currentDir === process.cwd()) {\n throw new Error(`Unable to locate package.json in ${currentDir}`);\n }\n\n const parentDir = resolve(currentDir, '..');\n\n return getPackageJSONPath(parentDir);\n}\n\nfunction getPackageJSON (fileLocation: string) {\n const packageJsonContent = readFileSync(fileLocation, 'utf8');\n\n return JSON.parse(packageJsonContent) as Record<string, Record<string, string>>;\n}\n\nfunction getExpectedDependencies (): Record<string, string> {\n const path = getPackageJSONPath(fileURLToPath(new URL(/* @vite-ignore */ import.meta.url)));\n const packageJson = getPackageJSON(path);\n\n return packageJson.dependencies;\n}\n\nfunction getDependencyVersionFromConsumer (depName: string, baseDir: string = process.cwd()): string | undefined {\n try {\n const pkgJsonPath = require.resolve(`${depName}/package.json`, { paths: [baseDir] });\n const pkgContent = readFileSync(pkgJsonPath, 'utf8');\n const pkg: { version?: string } = JSON.parse(pkgContent) as Record<string, Record<string, string>>;\n\n return pkg.version;\n } catch {\n return undefined;\n }\n}\n\nexport async function ensureDependencies () {\n if (turnOff || scanned) {\n return;\n }\n\n scanned = true;\n\n const expectedDependencies = Object.entries(getExpectedDependencies());\n const missingDependencyEntries = expectedDependencies.filter(\n ([expectedDependency, expectedVersion]) => {\n if (!fixedDependencies.includes(expectedDependency) || silencedDependencies.has(expectedDependency)) {\n return false;\n }\n\n const installedVersion = getDependencyVersionFromConsumer(expectedDependency);\n\n if (!installedVersion) {\n return true;\n }\n\n return semver.lt(installedVersion, expectedVersion);\n }\n );\n\n if (!missingDependencyEntries.length) {\n return;\n }\n\n const missingDependencies = missingDependencyEntries.map(([dependency, version]) => `${dependency}@${version.replace(/^\\W+/, '')}`);\n\n // eslint-disable-next-line no-console\n console.info('Missing dependencies detected:');\n // eslint-disable-next-line no-console\n console.info(missingDependencies.map(dependency => ` - ${dependency}`).join('\\n'));\n // eslint-disable-next-line no-console\n console.info('\\nInstalling dependencies:');\n\n await installPackage(missingDependencies, { dev: true, additionalArgs: ['-E'] });\n\n // eslint-disable-next-line no-process-exit\n process.exit(1);\n}\n\nexport function silenceDependencyWarning (\n /**\n * Pass `true` to silence all dependency warnings.\n */\n all: boolean\n): void;\n\nexport function silenceDependencyWarning (dependencies: string[]): void;\n\nexport function silenceDependencyWarning (input: boolean | string[]) {\n if (typeof input === 'boolean') {\n turnOff = input;\n\n return;\n }\n\n silencedDependencies.clear();\n input.forEach(dependency => silencedDependencies.add(String(dependency)));\n}\n","import { merge as tsMerge } from 'ts-deepmerge';\n\nexport function merge<Arguments extends NonNullable<unknown>[]> (...args: Arguments): Arguments[number] {\n return tsMerge.withOptions({ mergeArrays: false }, ...args) as unknown as Arguments;\n}\n","import { warn } from 'node:console';\nimport type { Linter } from 'eslint';\n\nconst globallySilencedRules = new Set<string>();\n\n/**\n * Silence rules globally.\n * This will affect all configs scopes.\n */\nexport function silenceRules (rules: string[]) {\n rules.forEach(rule => {\n globallySilencedRules.add(rule);\n });\n}\n\nfunction silenceRule (config: Linter.RuleEntry) {\n if (!Array.isArray(config)) {\n return 'warn';\n }\n\n const [, ...restConfig] = config;\n\n return ['warn', ...restConfig as Record<string, unknown>[]] as Linter.RuleEntry;\n}\n\nexport function filterSilencedRules (\n rules: Partial<Linter.RulesRecord> | Readonly<Linter.RulesRecord> | undefined,\n silencedRules?: string[] | Set<string>\n) {\n let targetSilencedRules = silencedRules || globallySilencedRules;\n\n if (Array.isArray(targetSilencedRules)) {\n targetSilencedRules = new Set(targetSilencedRules);\n }\n\n if (!rules || !targetSilencedRules.size) {\n return rules;\n }\n\n if (silencedRules) {\n targetSilencedRules.forEach(rule => {\n if (rules[rule]) {\n return;\n }\n\n warn(`Unknown rule \"${rule}\". Please remove it from the silenced rules list.`);\n });\n }\n\n return Object.entries(rules).reduce((newRules, [key, value]) => {\n if (value) {\n newRules[key] = targetSilencedRules.has(key) ? silenceRule(value) : value;\n }\n\n return newRules;\n }, {} as Linter.RulesRecord);\n}\n\n/* v8 ignore start */\nif (import.meta.vitest) {\n const { vi, describe, test, expect, afterEach } = import.meta.vitest;\n\n const mocks = vi.hoisted(() => ({\n warn: vi.fn(),\n }));\n\n vi.mock('node:console', () => mocks);\n\n afterEach(() => {\n globallySilencedRules.clear();\n });\n\n describe('silenceRules', () => {\n test('should register given rule keys as silenced', () => {\n const rule = '@stylistic/type-generic-spacing';\n\n expect(globallySilencedRules.has(rule)).toBe(false);\n silenceRules([rule]);\n expect(globallySilencedRules.has(rule)).toBe(true);\n });\n });\n\n describe('filterSilencedRules', () => {\n test('should return the same rules object if no rules are silenced', () => {\n const rules = {\n 'no-console': 'warn',\n 'no-debugger': 'warn',\n } as Linter.RulesRecord;\n\n expect(filterSilencedRules(rules)).toBe(rules);\n });\n\n test('should return a new rules object with silenced rules silenced and other rules unchanged', () => {\n silenceRules(['no-console']);\n\n const rules = {\n 'no-console': 'error',\n 'no-debugger': 'warn',\n 'no-alert': 'error',\n } as Linter.RulesRecord;\n\n expect(filterSilencedRules(rules)).toStrictEqual({\n 'no-console': 'warn',\n 'no-debugger': 'warn',\n 'no-alert': 'error',\n });\n });\n\n test('should return a new rules object with silenced rules silenced and other rules unchanged', () => {\n silenceRules(['no-bitwise', 'new-cap']);\n\n const rules = {\n 'max-len': 'off',\n 'new-cap': ['error'],\n 'no-alert': ['error'],\n 'no-bitwise': ['error', {\n allow: ['~'],\n }],\n } as Linter.RulesRecord;\n\n expect(filterSilencedRules(rules)).toStrictEqual({\n 'max-len': 'off',\n 'new-cap': ['warn'],\n 'no-alert': ['error'],\n 'no-bitwise': ['warn', {\n allow: ['~'],\n }],\n });\n });\n\n test('should not warn about unknown rules', () => {\n silenceRules(['no-console', 'no-bitwise']);\n\n const rules = {\n 'no-console': 'error',\n 'no-debugger': 'warn',\n 'no-alert': 'error',\n } as Linter.RulesRecord;\n\n filterSilencedRules(rules);\n\n expect(mocks.warn).not.toHaveBeenCalled();\n expect(mocks.warn).not.toHaveBeenCalled();\n });\n\n test('should warn about unknown rules', () => {\n const rules = {\n 'no-console': 'error',\n 'no-debugger': 'warn',\n 'no-alert': 'error',\n } as Linter.RulesRecord;\n\n filterSilencedRules(rules, ['no-console', 'no-bitwise']);\n\n expect(mocks.warn).toHaveBeenCalledTimes(1);\n expect(mocks.warn).toHaveBeenCalledWith(\n 'Unknown rule \"no-bitwise\". Please remove it from the silenced rules list.'\n );\n });\n\n test.each([\n [['@typescript-eslint/no-unsafe-call'], 'warn'],\n [new Set(['@typescript-eslint/no-unsafe-call']), 'warn'],\n [[], 'error'],\n ])(\n '#%# should filter scope-related rules and ignore globally silenced rules',\n (silencedRules, expectation) => {\n silenceRules(['@typescript-eslint/no-unsafe-assignment']);\n\n const rules = {\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n } as Linter.RulesRecord;\n\n expect(filterSilencedRules(rules, silencedRules)).toStrictEqual({\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-call': expectation,\n });\n }\n );\n });\n}\n","import type { Linter } from 'eslint';\nimport { merge } from './merge';\n\nexport function mergeAll (...configs: Linter.Config[][]) {\n return configs.flat().reduce((acc, scope) => merge(acc, scope), {} as Linter.Config);\n}\n","import type { Linter } from 'eslint';\nimport { ensureDependencies } from './utils/ensureDependencies';\nimport { merge } from './utils/merge';\nimport { filterSilencedRules } from './utils/silenceRules';\n\nconst configMap = {\n async config () {\n return import('./configs/config');\n },\n async javascript () {\n return import('./configs/javascript');\n },\n async 'javascript-node' () {\n return import('./configs/javascript-node');\n },\n async 'javascript-dom' () {\n return import('./configs/javascript-dom');\n },\n async typescript () {\n return import('./configs/typescript');\n },\n async 'typescript-node' () {\n return import('./configs/typescript-node');\n },\n async 'typescript-dom' () {\n return import('./configs/typescript-dom');\n },\n async vue3 () {\n return import('./configs/vue3');\n },\n async 'vue3-typescript' () {\n return import('./configs/vue3-typescript');\n },\n async vue2 () {\n return import('./configs/vue2');\n },\n async 'vue2-typescript' () {\n return import('./configs/vue2-typescript');\n },\n async jest () {\n return import('./configs/jest');\n },\n async 'jsdoc-based-ts' () {\n return import('./configs/jsdoc-based-ts');\n },\n} satisfies Record<string, () => Promise<{ default: Linter.Config }>>;\n\ninterface Config {\n /** Precedence order will affect how rules applied */\n preset: (keyof typeof configMap)[];\n config: Linter.Config;\n silenceRules?: string[];\n}\n\nexport async function useInsider (config: Config): Promise<Linter.Config> {\n await ensureDependencies();\n\n const configs = config.preset\n .map(async scope => typeof configMap[scope] === 'function' && (await configMap[scope]()).default)\n .filter(Boolean);\n\n const resolvedConfigs = await Promise.all(configs);\n const resolvedConfigAll = resolvedConfigs.reduce((acc, scope) => merge(acc, scope), {}) as Linter.Config;\n\n delete resolvedConfigAll.files;\n\n const mergedConfig = merge(resolvedConfigAll, config.config);\n\n if (!mergedConfig) {\n return Promise.reject(new Error('No config found'));\n }\n\n if (config.silenceRules) {\n mergedConfig.rules = filterSilencedRules(mergedConfig.rules, config.silenceRules);\n } else {\n mergedConfig.rules = filterSilencedRules(mergedConfig.rules);\n }\n\n return mergedConfig;\n}\n\nexport { merge } from './utils/merge';\n\nexport { mergeAll } from './utils/mergeAllConfig';\n\nexport { silenceDependencyWarning } from './utils/ensureDependencies';\n\nexport { silenceRules } from './utils/silenceRules';\n"],"names":["require","tsMerge"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
2
+ declare const _default: Linter.Config;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
2
+ declare const _default: Linter.Config;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
2
+ declare const _default: Linter.Config;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
2
+ declare const _default: Linter.Config;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
2
+ declare const _default: Linter.Config;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
2
+ declare const _default: Linter.Config;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
2
+ declare const _default: Linter.Config;
3
3
  export default _default;
@@ -0,0 +1,2 @@
1
+ import type { Linter } from 'eslint';
2
+ export declare const vue2Typescript: Linter.Config;
@@ -1,3 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
- declare const _default: Linter.FlatConfig;
3
- export default _default;
2
+ export declare const vue2Options: Linter.Config;
3
+ export declare const vue2Composition: Linter.Config;