@useinsider/eslint-config 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.d.ts +1 -3
- package/dist/configs/javascript/index.d.ts +1 -2
- package/dist/configs/vue2/index.d.ts +1 -3
- package/dist/configs/vue3/index.d.ts +1 -3
- package/dist/main.cjs +3 -3
- package/dist/main.d.ts +2 -0
- package/dist/main.js +122 -35
- package/dist/utils/silenceRules.d.ts +7 -0
- package/package.json +1 -1
package/dist/base.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
import type { Linter } from 'eslint';
|
|
2
|
-
export declare function preConfig(plugins?: string[]): Linter.FlatConfig<Linter.RulesRecord
|
|
3
|
-
readonly rules: Readonly<Linter.RulesRecord>;
|
|
4
|
-
};
|
|
2
|
+
export declare function preConfig(plugins?: string[]): Linter.FlatConfig<Linter.RulesRecord>;
|
|
5
3
|
export declare function postConfig(): Linter.FlatConfig;
|
package/dist/main.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("node:fs"),y=require("node:path"),h=require("node:url"),w=require("ts-deepmerge"),b=require("node:console");var l=typeof document<"u"?document.currentScript:null;let d=!1;const p=new Set;function f(e){const r=y.resolve(e,"package.json"),n=g.readFileSync(r,"utf8");if(!n)throw new Error(`Unable to locate package.json: ${r}`);return JSON.parse(n)}function v(){const e=f(process.cwd());return{...e.dependencies,...e.devDependencies}}function R(){return f(h.fileURLToPath(new URL("../",typeof document>"u"?require("url").pathToFileURL(__filename).href:l&&l.src||new URL("main.cjs",document.baseURI).href))).dependencies}const c={yarn:"yarn add --exact --dev",pnpm:"pnpm add -E -D",npm:"npm i -E -D"};function S(){const e=(process.env.npm_config_user_agent||"").replace(/\W.*/,"");return c[e]||c.npm}function q(){if(d)return;const e=v(),n=Object.entries(R()).filter(([t,o])=>!p.has(t)&&(!e[t]||e[t]!==o));if(!n.length)return;const s=n.map(([t,o])=>`${t}@${o.replace(/^\W+/,"")}`);console.info("Missing dependencies detected:"),console.info(s.map(t=>` - ${t}`).join(`
|
|
2
2
|
`)),console.info(`
|
|
3
3
|
Copy the following command and install the dependencies manually:`),console.info(`
|
|
4
|
-
${
|
|
5
|
-
`),process.exit(1)}function
|
|
4
|
+
${S()} ${s.join(" ")}
|
|
5
|
+
`),process.exit(1)}function x(e){if(typeof e=="boolean"){d=!0;return}e.forEach(r=>p.add(String(r)))}function i(...e){return w.merge.withOptions({mergeArrays:!1},...e)}const m=new Set;function P(e){e.forEach(r=>{m.add(r)})}function j(e){if(!Array.isArray(e))return"warn";const[,...r]=e;return["warn",...r]}function a(e,r=m){let n=r;return Array.isArray(n)&&(n=new Set(n)),!e||!n.size?e:(n.forEach(s=>{e[s]||b.warn(`Unknown rule "${s}". Please remove it from the silenced rules list.`)}),Object.entries(e).reduce((s,[t,o])=>(o&&(s[t]=n.has(t)?j(o):o),s),{}))}function k(...e){return e.flat().reduce((r,n)=>i(r,n),{})}const u={async config(){return Promise.resolve().then(()=>require("./index-CAuGyIr4.cjs"))},async javascript(){return Promise.resolve().then(()=>require("./index-DI_UoSW4.cjs"))},async"javascript-node"(){return Promise.resolve().then(()=>require("./index-COJ71EEW.cjs"))},async"javascript-dom"(){return Promise.resolve().then(()=>require("./index-B45cvr6O.cjs"))},async typescript(){return Promise.resolve().then(()=>require("./index-CCngt07f.cjs"))},async"typescript-node"(){return Promise.resolve().then(()=>require("./index-CZG4LLz1.cjs"))},async"typescript-dom"(){return Promise.resolve().then(()=>require("./index-ZUN0xFSs.cjs"))},async vue3(){return Promise.resolve().then(()=>require("./index-BPS1S4-r.cjs"))},async"vue3-typescript"(){return Promise.resolve().then(()=>require("./index-Brj-OnR2.cjs"))},async vue2(){return Promise.resolve().then(()=>require("./index-DLjVlGbl.cjs"))}};async function D(e){q();const r=e.preset.map(async t=>typeof u[t]=="function"&&(await u[t]()).default).filter(Boolean),n=await Promise.all(r),s=i(n.reduce((t,o)=>i(t,o),{}),e.config);return s?(e.silenceRules?s.rules=a(s.rules,e.silenceRules):s.rules=a(s.rules),s):Promise.reject(new Error("No config found"))}exports.merge=i;exports.mergeAll=k;exports.silenceDependencyWarning=x;exports.silenceRules=P;exports.useInsider=D;
|
package/dist/main.d.ts
CHANGED
|
@@ -15,8 +15,10 @@ interface Config {
|
|
|
15
15
|
/** Precedence order will affect how rules applied */
|
|
16
16
|
preset: (keyof typeof configMap)[];
|
|
17
17
|
config: Linter.FlatConfig;
|
|
18
|
+
silenceRules?: string[];
|
|
18
19
|
}
|
|
19
20
|
export declare function useInsider(config: Config): Promise<Linter.FlatConfig>;
|
|
20
21
|
export { merge } from './utils/merge';
|
|
21
22
|
export { mergeAll } from './utils/mergeAllConfig';
|
|
22
23
|
export { silenceDependencyWarning } from './utils/ensureDependencies';
|
|
24
|
+
export { silenceRules } from './utils/silenceRules';
|
package/dist/main.js
CHANGED
|
@@ -1,65 +1,151 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { fileURLToPath as
|
|
4
|
-
import { merge as
|
|
5
|
-
|
|
1
|
+
import y from "node:fs";
|
|
2
|
+
import h from "node:path";
|
|
3
|
+
import { fileURLToPath as b } from "node:url";
|
|
4
|
+
import { merge as v } from "ts-deepmerge";
|
|
5
|
+
import { warn as S } from "node:console";
|
|
6
|
+
let f = !1;
|
|
6
7
|
const m = /* @__PURE__ */ new Set();
|
|
7
|
-
function
|
|
8
|
-
const t =
|
|
8
|
+
function g(e) {
|
|
9
|
+
const t = h.resolve(e, "package.json"), r = y.readFileSync(t, "utf8");
|
|
9
10
|
if (!r)
|
|
10
11
|
throw new Error(`Unable to locate package.json: ${t}`);
|
|
11
12
|
return JSON.parse(r);
|
|
12
13
|
}
|
|
13
|
-
function
|
|
14
|
-
const e =
|
|
14
|
+
function j() {
|
|
15
|
+
const e = g(process.cwd());
|
|
15
16
|
return {
|
|
16
17
|
...e.dependencies,
|
|
17
18
|
...e.devDependencies
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
|
-
function
|
|
21
|
-
return
|
|
21
|
+
function E() {
|
|
22
|
+
return g(b(new URL(
|
|
22
23
|
/* @vite-ignore */
|
|
23
24
|
"../",
|
|
24
25
|
import.meta.url
|
|
25
26
|
))).dependencies;
|
|
26
27
|
}
|
|
27
|
-
const
|
|
28
|
+
const p = {
|
|
28
29
|
yarn: "yarn add --exact --dev",
|
|
29
30
|
pnpm: "pnpm add -E -D",
|
|
30
31
|
npm: "npm i -E -D"
|
|
31
32
|
};
|
|
32
|
-
function
|
|
33
|
+
function k() {
|
|
33
34
|
const e = (process.env.npm_config_user_agent || "").replace(/\W.*/, "");
|
|
34
|
-
return
|
|
35
|
+
return p[e] || p.npm;
|
|
35
36
|
}
|
|
36
|
-
function
|
|
37
|
-
if (
|
|
37
|
+
function D() {
|
|
38
|
+
if (f)
|
|
38
39
|
return;
|
|
39
|
-
const e =
|
|
40
|
+
const e = j(), r = Object.entries(E()).filter(([s, o]) => !m.has(s) && (!e[s] || e[s] !== o));
|
|
40
41
|
if (!r.length)
|
|
41
42
|
return;
|
|
42
|
-
const
|
|
43
|
-
console.info("Missing dependencies detected:"), console.info(
|
|
43
|
+
const n = r.map(([s, o]) => `${s}@${o.replace(/^\W+/, "")}`);
|
|
44
|
+
console.info("Missing dependencies detected:"), console.info(n.map((s) => ` - ${s}`).join(`
|
|
44
45
|
`)), console.info(`
|
|
45
46
|
Copy the following command and install the dependencies manually:`), console.info(`
|
|
46
|
-
${
|
|
47
|
+
${k()} ${n.join(" ")}
|
|
47
48
|
`), process.exit(1);
|
|
48
49
|
}
|
|
49
|
-
function
|
|
50
|
+
function O(e) {
|
|
50
51
|
if (typeof e == "boolean") {
|
|
51
|
-
|
|
52
|
+
f = !0;
|
|
52
53
|
return;
|
|
53
54
|
}
|
|
54
55
|
e.forEach((t) => m.add(String(t)));
|
|
55
56
|
}
|
|
56
|
-
function
|
|
57
|
-
return
|
|
57
|
+
function u(...e) {
|
|
58
|
+
return v.withOptions({ mergeArrays: !1 }, ...e);
|
|
59
|
+
}
|
|
60
|
+
const l = /* @__PURE__ */ new Set();
|
|
61
|
+
function a(e) {
|
|
62
|
+
e.forEach((t) => {
|
|
63
|
+
l.add(t);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function R(e) {
|
|
67
|
+
if (!Array.isArray(e))
|
|
68
|
+
return "warn";
|
|
69
|
+
const [, ...t] = e;
|
|
70
|
+
return ["warn", ...t];
|
|
71
|
+
}
|
|
72
|
+
function c(e, t = l) {
|
|
73
|
+
let r = t;
|
|
74
|
+
return Array.isArray(r) && (r = new Set(r)), !e || !r.size ? e : (r.forEach((n) => {
|
|
75
|
+
e[n] || S(`Unknown rule "${n}". Please remove it from the silenced rules list.`);
|
|
76
|
+
}), Object.entries(e).reduce((n, [s, o]) => (o && (n[s] = r.has(s) ? R(o) : o), n), {}));
|
|
77
|
+
}
|
|
78
|
+
if (import.meta.vitest) {
|
|
79
|
+
const { vi: e, describe: t, test: r, expect: n, afterEach: s } = import.meta.vitest, o = e.hoisted(() => ({
|
|
80
|
+
warn: e.fn()
|
|
81
|
+
}));
|
|
82
|
+
e.mock("node:console", () => o), s(() => {
|
|
83
|
+
l.clear();
|
|
84
|
+
}), t("silenceRules", () => {
|
|
85
|
+
r("should register given rule keys as silenced", () => {
|
|
86
|
+
const i = "@stylistic/type-generic-spacing";
|
|
87
|
+
n(l.has(i)).toBe(!1), a([i]), n(l.has(i)).toBe(!0);
|
|
88
|
+
});
|
|
89
|
+
}), t("filterSilencedRules", () => {
|
|
90
|
+
r("should return the same rules object if no rules are silenced", () => {
|
|
91
|
+
const i = {
|
|
92
|
+
"no-console": "warn",
|
|
93
|
+
"no-debugger": "warn"
|
|
94
|
+
};
|
|
95
|
+
n(c(i)).toBe(i);
|
|
96
|
+
}), r("should return a new rules object with silenced rules silenced and other rules unchanged", () => {
|
|
97
|
+
a(["no-console"]), n(c({
|
|
98
|
+
"no-console": "error",
|
|
99
|
+
"no-debugger": "warn",
|
|
100
|
+
"no-alert": "error"
|
|
101
|
+
})).toStrictEqual({
|
|
102
|
+
"no-console": "warn",
|
|
103
|
+
"no-debugger": "warn",
|
|
104
|
+
"no-alert": "error"
|
|
105
|
+
});
|
|
106
|
+
}), r("should return a new rules object with silenced rules silenced and other rules unchanged", () => {
|
|
107
|
+
a(["no-bitwise", "new-cap"]), n(c({
|
|
108
|
+
"max-len": "off",
|
|
109
|
+
"new-cap": ["error"],
|
|
110
|
+
"no-alert": ["error"],
|
|
111
|
+
"no-bitwise": ["error", {
|
|
112
|
+
allow: ["~"]
|
|
113
|
+
}]
|
|
114
|
+
})).toStrictEqual({
|
|
115
|
+
"max-len": "off",
|
|
116
|
+
"new-cap": ["warn"],
|
|
117
|
+
"no-alert": ["error"],
|
|
118
|
+
"no-bitwise": ["warn", {
|
|
119
|
+
allow: ["~"]
|
|
120
|
+
}]
|
|
121
|
+
});
|
|
122
|
+
}), r("should warn about unknown rules", () => {
|
|
123
|
+
a(["no-console", "no-bitwise"]), c({
|
|
124
|
+
"no-console": "error",
|
|
125
|
+
"no-debugger": "warn",
|
|
126
|
+
"no-alert": "error"
|
|
127
|
+
}), n(o.warn).toHaveBeenCalledTimes(1), n(o.warn).toHaveBeenCalledWith('Unknown rule "no-bitwise". Please remove it from the silenced rules list.');
|
|
128
|
+
}), r.each([
|
|
129
|
+
[["@typescript-eslint/no-unsafe-call"], "warn"],
|
|
130
|
+
[/* @__PURE__ */ new Set(["@typescript-eslint/no-unsafe-call"]), "warn"],
|
|
131
|
+
[[], "error"]
|
|
132
|
+
])("#%# should filter scope-related rules and ignore globally silenced rules", (i, w) => {
|
|
133
|
+
a(["@typescript-eslint/no-unsafe-assignment"]), n(c({
|
|
134
|
+
"@typescript-eslint/no-unsafe-assignment": "error",
|
|
135
|
+
"@typescript-eslint/no-unsafe-member-access": "error",
|
|
136
|
+
"@typescript-eslint/no-unsafe-call": "error"
|
|
137
|
+
}, i)).toStrictEqual({
|
|
138
|
+
"@typescript-eslint/no-unsafe-assignment": "error",
|
|
139
|
+
"@typescript-eslint/no-unsafe-member-access": "error",
|
|
140
|
+
"@typescript-eslint/no-unsafe-call": w
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
});
|
|
58
144
|
}
|
|
59
|
-
function
|
|
60
|
-
return e.flat().reduce((t, r) =>
|
|
145
|
+
function P(...e) {
|
|
146
|
+
return e.flat().reduce((t, r) => u(t, r), {});
|
|
61
147
|
}
|
|
62
|
-
const
|
|
148
|
+
const d = {
|
|
63
149
|
async config() {
|
|
64
150
|
return import("./index-CixUmpPQ.js");
|
|
65
151
|
},
|
|
@@ -91,14 +177,15 @@ const a = {
|
|
|
91
177
|
return import("./index-BVRhCxZ-.js");
|
|
92
178
|
}
|
|
93
179
|
};
|
|
94
|
-
async function
|
|
95
|
-
|
|
96
|
-
const t = e.preset.map(async (
|
|
97
|
-
return
|
|
180
|
+
async function U(e) {
|
|
181
|
+
D();
|
|
182
|
+
const t = e.preset.map(async (s) => typeof d[s] == "function" && (await d[s]()).default).filter(Boolean), r = await Promise.all(t), n = u(r.reduce((s, o) => u(s, o), {}), e.config);
|
|
183
|
+
return n ? (e.silenceRules ? n.rules = c(n.rules, e.silenceRules) : n.rules = c(n.rules), n) : Promise.reject(new Error("No config found"));
|
|
98
184
|
}
|
|
99
185
|
export {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
186
|
+
u as merge,
|
|
187
|
+
P as mergeAll,
|
|
188
|
+
O as silenceDependencyWarning,
|
|
189
|
+
a as silenceRules,
|
|
190
|
+
U as useInsider
|
|
104
191
|
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Linter } from 'eslint';
|
|
2
|
+
/**
|
|
3
|
+
* Silence rules globally.
|
|
4
|
+
* This will affect all configs scopes.
|
|
5
|
+
*/
|
|
6
|
+
export declare function silenceRules(rules: string[]): void;
|
|
7
|
+
export declare function filterSilencedRules(rules: Partial<Linter.RulesRecord> | Readonly<Linter.RulesRecord> | undefined, silencedRules?: string[] | Set<string>): Partial<Linter.RulesRecord> | undefined;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useinsider/eslint-config",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"description": "A collection of ESLint configurations provided by @useinsider, offering support for various environments including Vanilla JS, TypeScript, and framework-specific setups such as Vue 3.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"useinsider",
|