@fenge/eslint-plugin 0.1.1 → 0.1.2-beta.1
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/CHANGELOG.md +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/rules/call-arguments-length.d.ts.map +1 -1
- package/dist/rules/call-arguments-length.js +47 -31
- package/dist/rules/no-jsx-in-non-jsx-file.d.ts +6 -0
- package/dist/rules/no-jsx-in-non-jsx-file.d.ts.map +1 -0
- package/dist/rules/no-jsx-in-non-jsx-file.js +25 -0
- package/package.json +7 -7
- package/src/index.ts +2 -0
- package/src/rules/call-arguments-length.spec.ts +4 -0
- package/src/rules/call-arguments-length.ts +60 -36
- package/src/rules/no-jsx-in-non-jsx-file.spec.ts +22 -0
- package/src/rules/no-jsx-in-non-jsx-file.ts +30 -0
- package/src/rules/no-unnecessary-template-string.spec.ts +1 -1
- package/tsconfig.json +3 -1
- package/tsconfig.build.json +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @fenge/eslint-plugin
|
|
2
2
|
|
|
3
|
+
## 0.1.2-beta.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0d0f18c: chore: refresh pkg, no changes
|
|
8
|
+
|
|
9
|
+
## 0.1.2-beta.0
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 51502cc: feat: add rule `@fenge/no-jsx-in-non-jsx-file`
|
|
14
|
+
- 713d9a2: feat(eslint-plugin): support glob for `call-arguments-length` option
|
|
15
|
+
|
|
3
16
|
## 0.1.1
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,KAAK;;CAMjB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { callArgumentsLength } from "./rules/call-arguments-length.js";
|
|
2
2
|
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.js";
|
|
3
|
+
import { noJsxInNonJsxFile } from "./rules/no-jsx-in-non-jsx-file.js";
|
|
3
4
|
import { noRestrictedLoops } from "./rules/no-restricted-loops.js";
|
|
4
5
|
import { noUnnecessaryTemplateString } from "./rules/no-unnecessary-template-string.js";
|
|
5
6
|
export const rules = {
|
|
6
7
|
[callArgumentsLength.name]: callArgumentsLength.rule,
|
|
7
8
|
[noInstanceofBuiltin.name]: noInstanceofBuiltin.rule,
|
|
9
|
+
[noJsxInNonJsxFile.name]: noJsxInNonJsxFile.rule,
|
|
8
10
|
[noRestrictedLoops.name]: noRestrictedLoops.rule,
|
|
9
11
|
[noUnnecessaryTemplateString.name]: noUnnecessaryTemplateString.rule,
|
|
10
12
|
};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFeEYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtJQUNwRCxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO0lBQ2hELENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtJQUNoRCxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLDJCQUEyQixDQUFDLElBQUk7Q0FDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhbGxBcmd1bWVudHNMZW5ndGggfSBmcm9tIFwiLi9ydWxlcy9jYWxsLWFyZ3VtZW50cy1sZW5ndGguanNcIjtcbmltcG9ydCB7IG5vSW5zdGFuY2VvZkJ1aWx0aW4gfSBmcm9tIFwiLi9ydWxlcy9uby1pbnN0YW5jZW9mLWJ1aWx0aW4uanNcIjtcbmltcG9ydCB7IG5vSnN4SW5Ob25Kc3hGaWxlIH0gZnJvbSBcIi4vcnVsZXMvbm8tanN4LWluLW5vbi1qc3gtZmlsZS5qc1wiO1xuaW1wb3J0IHsgbm9SZXN0cmljdGVkTG9vcHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZXN0cmljdGVkLWxvb3BzLmpzXCI7XG5pbXBvcnQgeyBub1VubmVjZXNzYXJ5VGVtcGxhdGVTdHJpbmcgfSBmcm9tIFwiLi9ydWxlcy9uby11bm5lY2Vzc2FyeS10ZW1wbGF0ZS1zdHJpbmcuanNcIjtcblxuZXhwb3J0IGNvbnN0IHJ1bGVzID0ge1xuICBbY2FsbEFyZ3VtZW50c0xlbmd0aC5uYW1lXTogY2FsbEFyZ3VtZW50c0xlbmd0aC5ydWxlLFxuICBbbm9JbnN0YW5jZW9mQnVpbHRpbi5uYW1lXTogbm9JbnN0YW5jZW9mQnVpbHRpbi5ydWxlLFxuICBbbm9Kc3hJbk5vbkpzeEZpbGUubmFtZV06IG5vSnN4SW5Ob25Kc3hGaWxlLnJ1bGUsXG4gIFtub1Jlc3RyaWN0ZWRMb29wcy5uYW1lXTogbm9SZXN0cmljdGVkTG9vcHMucnVsZSxcbiAgW25vVW5uZWNlc3NhcnlUZW1wbGF0ZVN0cmluZy5uYW1lXTogbm9Vbm5lY2Vzc2FyeVRlbXBsYXRlU3RyaW5nLnJ1bGUsXG59O1xuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-arguments-length.d.ts","sourceRoot":"","sources":["../../src/rules/call-arguments-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"call-arguments-length.d.ts","sourceRoot":"","sources":["../../src/rules/call-arguments-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkKnC,eAAO,MAAM,mBAAmB;;;CAAiB,CAAC"}
|
|
@@ -23,12 +23,12 @@ const rule = {
|
|
|
23
23
|
if (typeof expectedLength === "object" &&
|
|
24
24
|
expectedLength &&
|
|
25
25
|
"min" in expectedLength) {
|
|
26
|
-
result.push(`>= ${expectedLength.min}`);
|
|
26
|
+
result.push(`>= ${String(expectedLength.min)}`);
|
|
27
27
|
}
|
|
28
28
|
if (typeof expectedLength === "object" &&
|
|
29
29
|
expectedLength &&
|
|
30
30
|
"max" in expectedLength) {
|
|
31
|
-
result.push(`<= ${expectedLength.max}`);
|
|
31
|
+
result.push(`<= ${String(expectedLength.max)}`);
|
|
32
32
|
}
|
|
33
33
|
return result.join(" and ");
|
|
34
34
|
};
|
|
@@ -69,44 +69,60 @@ const rule = {
|
|
|
69
69
|
});
|
|
70
70
|
};
|
|
71
71
|
const options = Object.entries(context.options[0] ?? {
|
|
72
|
+
// 1
|
|
72
73
|
"*.reduce": 2,
|
|
73
74
|
"*.reduceRight": 2,
|
|
74
75
|
"*.push": { min: 1 },
|
|
76
|
+
"Math.max": { min: 2 },
|
|
77
|
+
"Math.min": { min: 2 },
|
|
78
|
+
// 2
|
|
75
79
|
"new Set": { max: 1 },
|
|
76
80
|
"new Map": { max: 1 },
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
}).map(([pattern, expectedLength]) => ({
|
|
82
|
+
regex: new RegExp(`^${pattern.replaceAll(".", "\\.").replaceAll("*", ".*")}$`),
|
|
83
|
+
pattern,
|
|
84
|
+
expectedLength,
|
|
85
|
+
}));
|
|
86
|
+
const handle = (node) => {
|
|
87
|
+
const prefix = node.type === "NewExpression" ? "new " : "";
|
|
88
|
+
const { callee } = node;
|
|
89
|
+
// function call
|
|
90
|
+
if (callee.type === "Identifier") {
|
|
91
|
+
// code like `foo()` or `new Foo()`
|
|
92
|
+
options
|
|
93
|
+
.filter((option) => option.regex.test(`${prefix}${callee.name}`))
|
|
94
|
+
.forEach(({ pattern, expectedLength }) => {
|
|
95
|
+
report(node, pattern, expectedLength);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// method call
|
|
99
|
+
else if (callee.type === "MemberExpression" &&
|
|
100
|
+
callee.property.type === "Identifier") {
|
|
101
|
+
const { object: calleeObject, property: calleeProperty } = callee;
|
|
102
|
+
options
|
|
103
|
+
.filter((option) => {
|
|
104
|
+
// code like `Math.max()` or `new Foo.Bar()`, the calleeObject is `Math` or `Foo`
|
|
105
|
+
if ("name" in calleeObject &&
|
|
106
|
+
option.regex.test(`${prefix}${calleeObject.name}.${calleeProperty.name}`)) {
|
|
107
|
+
return true;
|
|
86
108
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
for (const [pattern, expectedLength] of options.filter(([pattern]) => pattern.startsWith("*."))) {
|
|
92
|
-
if (node.callee.property.name !== pattern.split(".")[1])
|
|
93
|
-
continue;
|
|
94
|
-
report(node, pattern, expectedLength);
|
|
109
|
+
// code like `[].reduce()` or `new ({Foo: class{}}).Foo()`, the calleeObject is `[]` or `{Foo: class{}}`
|
|
110
|
+
if (!("name" in calleeObject) &&
|
|
111
|
+
option.regex.test(`${prefix}.${calleeProperty.name}`)) {
|
|
112
|
+
return true;
|
|
95
113
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
NewExpression: (node) => {
|
|
100
|
-
if (node.callee.type !== "Identifier")
|
|
101
|
-
return;
|
|
102
|
-
for (const [pattern, expectedLength] of options.filter(([pattern]) => pattern.startsWith("new "))) {
|
|
103
|
-
if (node.callee.name !== pattern.split(" ")[1])
|
|
104
|
-
continue;
|
|
114
|
+
return false;
|
|
115
|
+
})
|
|
116
|
+
.forEach(({ pattern, expectedLength }) => {
|
|
105
117
|
report(node, pattern, expectedLength);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
return {
|
|
122
|
+
CallExpression: handle,
|
|
123
|
+
NewExpression: handle,
|
|
108
124
|
};
|
|
109
125
|
},
|
|
110
126
|
};
|
|
111
127
|
export const callArgumentsLength = { name, rule };
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1hcmd1bWVudHMtbGVuZ3RoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL2NhbGwtYXJndW1lbnRzLWxlbmd0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLDBJQUEwSTtBQUMxSSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksR0FBb0I7SUFDNUIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULDhEQUE4RDtTQUNqRTtRQUNELFFBQVEsRUFBRTtZQUNSLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUNmLG1GQUFtRjtTQUN0RjtRQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsNENBQTRDO0tBQzNFO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxjQUF1QixFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztZQUM1QixJQUNFLE9BQU8sY0FBYyxLQUFLLFFBQVE7Z0JBQ2xDLGNBQWM7Z0JBQ2QsS0FBSyxJQUFJLGNBQWMsRUFDdkIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sY0FBYyxDQUFDLEdBQUcsRUFB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QU8sRUFBRSxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQ25FLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQzNCLEVBQUUsQ0FBQztvQkFDRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUFFLFNBQVM7b0JBQ3pELE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgeyBDYWxsRXhwcmVzc2lvbiwgTmV3RXhwcmVzc2lvbiB9IGZyb20gXCJlc3RyZWVcIjtcbmltcG9ydCB7IGdldFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbi8vIFRPRE86IElmIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXNsaW50LXBsdWdpbi11bmljb3JuL2lzc3Vlcy8xMzU2IGlzIGltcGxlbWVudGVkLCBtaWdyYXRlIHRoaXMgcnVsZSB0byBgZXNsaW50LXBsdWdpbi11bmljb3JuYFxuY29uc3QgbmFtZSA9IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEaXNhbGxvdyBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBpbmNvcnJlY3QgYXJndW1lbnRzIGxlbmd0aC5cIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbYCR7bmFtZX0vZXJyb3JgXTpcbiAgICAgICAgXCJUaGUgYXJndW1lbnRzIGxlbmd0aCBvZiBjYWxsaW5nIGB7eyBmdW5jdGlvblBhdHRlcm4gfX1gIHNob3VsZCBiZSB7eyBsZW5ndGhNc2cgfX1cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW3sgdHlwZTogXCJvYmplY3RcIiB9XSwgLy8gVE9ETzogZW5oYW5jZSBzY2hlbWEgZm9yIGNoZWNraW5nIG9wdGlvbnNcbiAgfSxcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGdldExlbmd0aE1zZyA9IChleHBlY3RlZExlbmd0aDogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gU3RyaW5nKGV4cGVjdGVkTGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdGVkTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWRMZW5ndGguam9pbihcIiBvciBcIik7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICBcIm1pblwiIGluIGV4cGVjdGVkTGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYD49ICR7ZXhwZWN0ZWRMZW5ndGgubWlufWApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgZXhwZWN0ZWRMZW5ndGggJiZcbiAgICAgICAgXCJtYXhcIiBpbiBleHBlY3RlZExlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGA8PSAke2V4cGVjdGVkTGVuZ3RoLm1heH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuam9pbihcIiBhbmQgXCIpO1xuICAgIH07XG4gICAgY29uc3QgaXNMZW5ndGhWYWxpZCA9IChsZW5ndGg6IG51bWJlciwgZXhwZWN0ZWRMZW5ndGg6IHVua25vd24pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA9PT0gZXhwZWN0ZWRMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZExlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkTGVuZ3RoLmluY2x1ZGVzKGxlbmd0aCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQ6IGJvb2xlYW5bXSA9IFtdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgZXhwZWN0ZWRMZW5ndGggJiZcbiAgICAgICAgXCJtaW5cIiBpbiBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGgubWluID09PSBcIm51bWJlclwiXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGVuZ3RoID49IGV4cGVjdGVkTGVuZ3RoLm1pbik7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICBcIm1heFwiIGluIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aC5tYXggPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChsZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgubWF4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuZXZlcnkoKGl0ZW0pID0+IGl0ZW0pO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3J0ID0gKFxuICAgICAgbm9kZTogQ2FsbEV4cHJlc3Npb24gfCBOZXdFeHByZXNzaW9uLFxuICAgICAgZnVuY3Rpb25QYXR0ZXJuOiBzdHJpbmcsXG4gICAgICBleHBlY3RlZExlbmd0aDogdW5rbm93bixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGFyZ3NMZW5ndGggPSBub2RlLmFyZ3VtZW50cy5zb21lKFxuICAgICAgICAoYXJnKSA9PiBhcmcudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIsXG4gICAgICApXG4gICAgICAgID8gSW5maW5pdHlcbiAgICAgICAgOiBub2RlLmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoIWlzTGVuZ3RoVmFsaWQoYXJnc0xlbmd0aCwgZXhwZWN0ZWRMZW5ndGgpKVxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmdW5jdGlvblBhdHRlcm4sXG4gICAgICAgICAgICBsZW5ndGhNc2c6IGdldExlbmd0aE1zZyhleHBlY3RlZExlbmd0aCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgIGNvbnRleHQub3B0aW9uc1swXSA/PyB7XG4gICAgICAgIFwiKi5yZWR1Y2VcIjogMixcbiAgICAgICAgXCIqLnJlZHVjZVJpZ2h0XCI6IDIsXG4gICAgICAgIFwiKi5wdXNoXCI6IHsgbWluOiAxIH0sXG4gICAgICAgIFwibmV3IFNldFwiOiB7IG1heDogMSB9LFxuICAgICAgICBcIm5ldyBNYXBcIjogeyBtYXg6IDEgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb246IChub2RlKSA9PiB7XG4gICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbcGF0dGVybiwgZXhwZWN0ZWRMZW5ndGhdIG9mIG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKFtwYXR0ZXJuXSkgPT5cbiAgICAgICAgICAgICAgIXBhdHRlcm4uc3RhcnRzV2l0aChcIiouXCIpICYmICFwYXR0ZXJuLnN0YXJ0c1dpdGgoXCJuZXcgXCIpLFxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS5uYW1lICE9PSBwYXR0ZXJuKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJlcG9ydChub2RlLCBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG1ldGhvZCBjYWxsXG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXG4gICAgICAgICAgbm9kZS5jYWxsZWUucHJvcGVydHkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbcGF0dGVybiwgZXhwZWN0ZWRMZW5ndGhdIG9mIG9wdGlvbnMuZmlsdGVyKChbcGF0dGVybl0pID0+XG4gICAgICAgICAgICBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIqLlwiKSxcbiAgICAgICAgICApKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSAhPT0gcGF0dGVybi5zcGxpdChcIi5cIilbMV0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmVwb3J0KG5vZGUsIHBhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBuZXcgY2FsbFxuICAgICAgTmV3RXhwcmVzc2lvbjogKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgIT09IFwiSWRlbnRpZmllclwiKSByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgW3BhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoXSBvZiBvcHRpb25zLmZpbHRlcigoW3BhdHRlcm5dKSA9PlxuICAgICAgICAgIHBhdHRlcm4uc3RhcnRzV2l0aChcIm5ldyBcIiksXG4gICAgICAgICkpIHtcbiAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSAhPT0gcGF0dGVybi5zcGxpdChcIiBcIilbMV0pIGNvbnRpbnVlO1xuICAgICAgICAgIHJlcG9ydChub2RlLCBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBjYWxsQXJndW1lbnRzTGVuZ3RoID0geyBuYW1lLCBydWxlIH07XG4iXX0=
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1hcmd1bWVudHMtbGVuZ3RoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL2NhbGwtYXJndW1lbnRzLWxlbmd0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLDBJQUEwSTtBQUMxSSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksR0FBb0I7SUFDNUIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULDhEQUE4RDtTQUNqRTtRQUNELFFBQVEsRUFBRTtZQUNSLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUNmLG1GQUFtRjtTQUN0RjtRQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsNENBQTRDO0tBQzNFO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxjQUF1QixFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztZQUM1QixJQUNFLE9BQU8sY0FBYyxLQUFLLFFBQVE7Z0JBQ2xDLGNBQWM7Z0JBQ2QsS0FBSyxJQUFJLGNBQWMsRUFDdkIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FB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TUFBTSxDQUFDO2dCQUNsRSxPQUFPO3FCQUNKLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNqQixpRkFBaUY7b0JBQ2pGLElBQ0UsTUFBTSxJQUFJLFlBQVk7d0JBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNmLEdBQUcsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxDQUN2RCxFQUNELENBQUM7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCx3R0FBd0c7b0JBQ3hHLElBQ0UsQ0FBQyxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUM7d0JBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUNyRCxDQUFDO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDO3FCQUNELE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7b0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixPQUFPO1lBQ0wsY0FBYyxFQUFFLE1BQU07WUFDdEIsYUFBYSxFQUFFLE1BQU07U0FDdEIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IENhbGxFeHByZXNzaW9uLCBOZXdFeHByZXNzaW9uIH0gZnJvbSBcImVzdHJlZVwiO1xuaW1wb3J0IHsgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuLy8gVE9ETzogSWYgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2xpbnQtcGx1Z2luLXVuaWNvcm4vaXNzdWVzLzEzNTYgaXMgaW1wbGVtZW50ZWQsIG1pZ3JhdGUgdGhpcyBydWxlIHRvIGBlc2xpbnQtcGx1Z2luLXVuaWNvcm5gXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpc2FsbG93IGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGluY29ycmVjdCBhcmd1bWVudHMgbGVuZ3RoLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOlxuICAgICAgICBcIlRoZSBhcmd1bWVudHMgbGVuZ3RoIG9mIGNhbGxpbmcgYHt7IGZ1bmN0aW9uUGF0dGVybiB9fWAgc2hvdWxkIGJlIHt7IGxlbmd0aE1zZyB9fVwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbeyB0eXBlOiBcIm9iamVjdFwiIH1dLCAvLyBUT0RPOiBlbmhhbmNlIHNjaGVtYSBmb3IgY2hlY2tpbmcgb3B0aW9uc1xuICB9LFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZ2V0TGVuZ3RoTXNnID0gKGV4cGVjdGVkTGVuZ3RoOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWRMZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZExlbmd0aC5qb2luKFwiIG9yIFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIFwibWluXCIgaW4gZXhwZWN0ZWRMZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChgPj0gJHtTdHJpbmcoZXhwZWN0ZWRMZW5ndGgubWluKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIFwibWF4XCIgaW4gZXhwZWN0ZWRMZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChgPD0gJHtTdHJpbmcoZXhwZWN0ZWRMZW5ndGgubWF4KX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuam9pbihcIiBhbmQgXCIpO1xuICAgIH07XG4gICAgY29uc3QgaXNMZW5ndGhWYWxpZCA9IChsZW5ndGg6IG51bWJlciwgZXhwZWN0ZWRMZW5ndGg6IHVua25vd24pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA9PT0gZXhwZWN0ZWRMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZExlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkTGVuZ3RoLmluY2x1ZGVzKGxlbmd0aCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQ6IGJvb2xlYW5bXSA9IFtdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgZXhwZWN0ZWRMZW5ndGggJiZcbiAgICAgICAgXCJtaW5cIiBpbiBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGgubWluID09PSBcIm51bWJlclwiXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGVuZ3RoID49IGV4cGVjdGVkTGVuZ3RoLm1pbik7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICBcIm1heFwiIGluIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aC5tYXggPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChsZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgubWF4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuZXZlcnkoKGl0ZW0pID0+IGl0ZW0pO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3J0ID0gKFxuICAgICAgbm9kZTogQ2FsbEV4cHJlc3Npb24gfCBOZXdFeHByZXNzaW9uLFxuICAgICAgZnVuY3Rpb25QYXR0ZXJuOiBzdHJpbmcsXG4gICAgICBleHBlY3RlZExlbmd0aDogdW5rbm93bixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGFyZ3NMZW5ndGggPSBub2RlLmFyZ3VtZW50cy5zb21lKFxuICAgICAgICAoYXJnKSA9PiBhcmcudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIsXG4gICAgICApXG4gICAgICAgID8gSW5maW5pdHlcbiAgICAgICAgOiBub2RlLmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoIWlzTGVuZ3RoVmFsaWQoYXJnc0xlbmd0aCwgZXhwZWN0ZWRMZW5ndGgpKVxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmdW5jdGlvblBhdHRlcm4sXG4gICAgICAgICAgICBsZW5ndGhNc2c6IGdldExlbmd0aE1zZyhleHBlY3RlZExlbmd0aCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgIGNvbnRleHQub3B0aW9uc1swXSA/PyB7XG4gICAgICAgIC8vIDFcbiAgICAgICAgXCIqLnJlZHVjZVwiOiAyLFxuICAgICAgICBcIioucmVkdWNlUmlnaHRcIjogMixcbiAgICAgICAgXCIqLnB1c2hcIjogeyBtaW46IDEgfSxcbiAgICAgICAgXCJNYXRoLm1heFwiOiB7IG1pbjogMiB9LFxuICAgICAgICBcIk1hdGgubWluXCI6IHsgbWluOiAyIH0sXG4gICAgICAgIC8vIDJcbiAgICAgICAgXCJuZXcgU2V0XCI6IHsgbWF4OiAxIH0sXG4gICAgICAgIFwibmV3IE1hcFwiOiB7IG1heDogMSB9LFxuICAgICAgfSxcbiAgICApLm1hcCgoW3BhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoXSkgPT4gKHtcbiAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7cGF0dGVybi5yZXBsYWNlQWxsKFwiLlwiLCBcIlxcXFwuXCIpLnJlcGxhY2VBbGwoXCIqXCIsIFwiLipcIil9JGAsXG4gICAgICApLFxuICAgICAgcGF0dGVybixcbiAgICAgIGV4cGVjdGVkTGVuZ3RoLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGhhbmRsZSA9IChub2RlOiBDYWxsRXhwcmVzc2lvbiB8IE5ld0V4cHJlc3Npb24pID0+IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IG5vZGUudHlwZSA9PT0gXCJOZXdFeHByZXNzaW9uXCIgPyBcIm5ldyBcIiA6IFwiXCI7XG5cbiAgICAgIGNvbnN0IHsgY2FsbGVlIH0gPSBub2RlO1xuICAgICAgLy8gZnVuY3Rpb24gY2FsbFxuICAgICAgaWYgKGNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICAvLyBjb2RlIGxpa2UgYGZvbygpYCBvciBgbmV3IEZvbygpYFxuICAgICAgICBvcHRpb25zXG4gICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ucmVnZXgudGVzdChgJHtwcmVmaXh9JHtjYWxsZWUubmFtZX1gKSlcbiAgICAgICAgICAuZm9yRWFjaCgoeyBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCB9KSA9PiB7XG4gICAgICAgICAgICByZXBvcnQobm9kZSwgcGF0dGVybiwgZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbWV0aG9kIGNhbGxcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICBjYWxsZWUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICAgICAgY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgeyBvYmplY3Q6IGNhbGxlZU9iamVjdCwgcHJvcGVydHk6IGNhbGxlZVByb3BlcnR5IH0gPSBjYWxsZWU7XG4gICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIGNvZGUgbGlrZSBgTWF0aC5tYXgoKWAgb3IgYG5ldyBGb28uQmFyKClgLCB0aGUgY2FsbGVlT2JqZWN0IGlzIGBNYXRoYCBvciBgRm9vYFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcIm5hbWVcIiBpbiBjYWxsZWVPYmplY3QgJiZcbiAgICAgICAgICAgICAgb3B0aW9uLnJlZ2V4LnRlc3QoXG4gICAgICAgICAgICAgICAgYCR7cHJlZml4fSR7Y2FsbGVlT2JqZWN0Lm5hbWV9LiR7Y2FsbGVlUHJvcGVydHkubmFtZX1gLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb2RlIGxpa2UgYFtdLnJlZHVjZSgpYCBvciBgbmV3ICh7Rm9vOiBjbGFzc3t9fSkuRm9vKClgLCB0aGUgY2FsbGVlT2JqZWN0IGlzIGBbXWAgb3IgYHtGb286IGNsYXNze319YFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhKFwibmFtZVwiIGluIGNhbGxlZU9iamVjdCkgJiZcbiAgICAgICAgICAgICAgb3B0aW9uLnJlZ2V4LnRlc3QoYCR7cHJlZml4fS4ke2NhbGxlZVByb3BlcnR5Lm5hbWV9YClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mb3JFYWNoKCh7IHBhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoIH0pID0+IHtcbiAgICAgICAgICAgIHJlcG9ydChub2RlLCBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbjogaGFuZGxlLFxuICAgICAgTmV3RXhwcmVzc2lvbjogaGFuZGxlLFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY2FsbEFyZ3VtZW50c0xlbmd0aCA9IHsgbmFtZSwgcnVsZSB9O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-jsx-in-non-jsx-file.d.ts","sourceRoot":"","sources":["../../src/rules/no-jsx-in-non-jsx-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA6BnC,eAAO,MAAM,iBAAiB;;;CAAiB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getRuleName } from "../utils.js";
|
|
2
|
+
const name = getRuleName(import.meta.url);
|
|
3
|
+
const rule = {
|
|
4
|
+
meta: {
|
|
5
|
+
docs: {
|
|
6
|
+
description: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
7
|
+
},
|
|
8
|
+
messages: {
|
|
9
|
+
[`${name}/error`]: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
create: (context) => {
|
|
13
|
+
if (context.filename.endsWith(".jsx") ||
|
|
14
|
+
context.filename.endsWith(".tsx")) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
":matches(JSXElement, JSXFragment)": (node) => {
|
|
19
|
+
context.report({ node, messageId: `${name}/error` });
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export const noJsxInNonJsxFile = { name, rule };
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tanN4LWluLW5vbi1qc3gtZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1qc3gtaW4tbm9uLWpzeC1maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsTUFBTSxJQUFJLEdBQW9CO0lBQzVCLElBQUksRUFBRTtRQUNKLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxrREFBa0Q7U0FDaEU7UUFDRCxRQUFRLEVBQUU7WUFDUixDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxrREFBa0Q7U0FDdEU7S0FDRjtJQUNELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2xCLElBQ0UsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUNqQyxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTztZQUNMLG1DQUFtQyxFQUFFLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlIHsgTm9kZSB9IGZyb20gXCJlc3RyZWVcIjtcbmltcG9ydCB7IGdldFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmNvbnN0IG5hbWUgPSBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgcnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246IFwiT25seSBhbGxvdyBKU1ggc3ludGF4IGluIGAuanN4YCBhbmQgYC50c3hgIGZpbGUuXCIsXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW2Ake25hbWV9L2Vycm9yYF06IFwiT25seSBhbGxvdyBKU1ggc3ludGF4IGluIGAuanN4YCBhbmQgYC50c3hgIGZpbGUuXCIsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4ge1xuICAgIGlmIChcbiAgICAgIGNvbnRleHQuZmlsZW5hbWUuZW5kc1dpdGgoXCIuanN4XCIpIHx8XG4gICAgICBjb250ZXh0LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnRzeFwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgXCI6bWF0Y2hlcyhKU1hFbGVtZW50LCBKU1hGcmFnbWVudClcIjogKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBub0pzeEluTm9uSnN4RmlsZSA9IHsgbmFtZSwgcnVsZSB9O1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fenge/eslint-plugin",
|
|
3
|
-
"version": "0.1.1",
|
|
3
|
+
"version": "0.1.2-beta.1",
|
|
4
4
|
"description": "ESLint plugin for JavaScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"opinionated",
|
|
@@ -21,16 +21,16 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": "./dist/index.js",
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@swc-node/register": "1.10.0",
|
|
25
24
|
"@types/eslint": "8.56.11",
|
|
26
25
|
"@types/estree": "1.0.6",
|
|
27
26
|
"@types/json-schema": "7.0.15",
|
|
28
|
-
"@types/node": "22.
|
|
29
|
-
"@typescript-eslint/parser": "
|
|
30
|
-
"eslint": "8.57.
|
|
27
|
+
"@types/node": "22.9.1",
|
|
28
|
+
"@typescript-eslint/parser": "8.16.0",
|
|
29
|
+
"eslint": "8.57.1",
|
|
30
|
+
"tsx": "4.19.2"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
|
-
"build": "tsc
|
|
34
|
-
"test": "
|
|
33
|
+
"build": "tsc",
|
|
34
|
+
"test": "node --test --import tsx/esm \"**/*.spec.ts\""
|
|
35
35
|
}
|
|
36
36
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { callArgumentsLength } from "./rules/call-arguments-length.js";
|
|
2
2
|
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.js";
|
|
3
|
+
import { noJsxInNonJsxFile } from "./rules/no-jsx-in-non-jsx-file.js";
|
|
3
4
|
import { noRestrictedLoops } from "./rules/no-restricted-loops.js";
|
|
4
5
|
import { noUnnecessaryTemplateString } from "./rules/no-unnecessary-template-string.js";
|
|
5
6
|
|
|
6
7
|
export const rules = {
|
|
7
8
|
[callArgumentsLength.name]: callArgumentsLength.rule,
|
|
8
9
|
[noInstanceofBuiltin.name]: noInstanceofBuiltin.rule,
|
|
10
|
+
[noJsxInNonJsxFile.name]: noJsxInNonJsxFile.rule,
|
|
9
11
|
[noRestrictedLoops.name]: noRestrictedLoops.rule,
|
|
10
12
|
[noUnnecessaryTemplateString.name]: noUnnecessaryTemplateString.rule,
|
|
11
13
|
};
|
|
@@ -18,6 +18,7 @@ const valid = [
|
|
|
18
18
|
"foo.reduceRight(bar, baz)",
|
|
19
19
|
"reduce(()=>123)",
|
|
20
20
|
"foo.reduceLeft(()=>123)",
|
|
21
|
+
"Math.max(...foo)",
|
|
21
22
|
|
|
22
23
|
"new foo.Set(...bar)",
|
|
23
24
|
"new Set(bar)",
|
|
@@ -36,6 +37,9 @@ const invalid = [
|
|
|
36
37
|
"foo.reduceRight(bar)",
|
|
37
38
|
"[].reduce(...foo)",
|
|
38
39
|
"[].reduce(...foo, ...bar)",
|
|
40
|
+
"Math.max()",
|
|
41
|
+
"Math.max(1)",
|
|
42
|
+
"Math.min(foo)",
|
|
39
43
|
|
|
40
44
|
"new Set(...foo)",
|
|
41
45
|
"new Set(foo,bar)",
|
|
@@ -30,14 +30,14 @@ const rule: Rule.RuleModule = {
|
|
|
30
30
|
expectedLength &&
|
|
31
31
|
"min" in expectedLength
|
|
32
32
|
) {
|
|
33
|
-
result.push(`>= ${expectedLength.min}`);
|
|
33
|
+
result.push(`>= ${String(expectedLength.min)}`);
|
|
34
34
|
}
|
|
35
35
|
if (
|
|
36
36
|
typeof expectedLength === "object" &&
|
|
37
37
|
expectedLength &&
|
|
38
38
|
"max" in expectedLength
|
|
39
39
|
) {
|
|
40
|
-
result.push(`<= ${expectedLength.max}`);
|
|
40
|
+
result.push(`<= ${String(expectedLength.max)}`);
|
|
41
41
|
}
|
|
42
42
|
return result.join(" and ");
|
|
43
43
|
};
|
|
@@ -90,48 +90,72 @@ const rule: Rule.RuleModule = {
|
|
|
90
90
|
|
|
91
91
|
const options = Object.entries(
|
|
92
92
|
context.options[0] ?? {
|
|
93
|
+
// 1
|
|
93
94
|
"*.reduce": 2,
|
|
94
95
|
"*.reduceRight": 2,
|
|
95
96
|
"*.push": { min: 1 },
|
|
97
|
+
"Math.max": { min: 2 },
|
|
98
|
+
"Math.min": { min: 2 },
|
|
99
|
+
// 2
|
|
96
100
|
"new Set": { max: 1 },
|
|
97
101
|
"new Map": { max: 1 },
|
|
98
102
|
},
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
).map(([pattern, expectedLength]) => ({
|
|
104
|
+
regex: new RegExp(
|
|
105
|
+
`^${pattern.replaceAll(".", "\\.").replaceAll("*", ".*")}$`,
|
|
106
|
+
),
|
|
107
|
+
pattern,
|
|
108
|
+
expectedLength,
|
|
109
|
+
}));
|
|
110
|
+
|
|
111
|
+
const handle = (node: CallExpression | NewExpression) => {
|
|
112
|
+
const prefix = node.type === "NewExpression" ? "new " : "";
|
|
113
|
+
|
|
114
|
+
const { callee } = node;
|
|
115
|
+
// function call
|
|
116
|
+
if (callee.type === "Identifier") {
|
|
117
|
+
// code like `foo()` or `new Foo()`
|
|
118
|
+
options
|
|
119
|
+
.filter((option) => option.regex.test(`${prefix}${callee.name}`))
|
|
120
|
+
.forEach(({ pattern, expectedLength }) => {
|
|
109
121
|
report(node, pattern, expectedLength);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
)
|
|
120
|
-
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// method call
|
|
125
|
+
else if (
|
|
126
|
+
callee.type === "MemberExpression" &&
|
|
127
|
+
callee.property.type === "Identifier"
|
|
128
|
+
) {
|
|
129
|
+
const { object: calleeObject, property: calleeProperty } = callee;
|
|
130
|
+
options
|
|
131
|
+
.filter((option) => {
|
|
132
|
+
// code like `Math.max()` or `new Foo.Bar()`, the calleeObject is `Math` or `Foo`
|
|
133
|
+
if (
|
|
134
|
+
"name" in calleeObject &&
|
|
135
|
+
option.regex.test(
|
|
136
|
+
`${prefix}${calleeObject.name}.${calleeProperty.name}`,
|
|
137
|
+
)
|
|
138
|
+
) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
// code like `[].reduce()` or `new ({Foo: class{}}).Foo()`, the calleeObject is `[]` or `{Foo: class{}}`
|
|
142
|
+
if (
|
|
143
|
+
!("name" in calleeObject) &&
|
|
144
|
+
option.regex.test(`${prefix}.${calleeProperty.name}`)
|
|
145
|
+
) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
})
|
|
150
|
+
.forEach(({ pattern, expectedLength }) => {
|
|
121
151
|
report(node, pattern, expectedLength);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
pattern.startsWith("new "),
|
|
130
|
-
)) {
|
|
131
|
-
if (node.callee.name !== pattern.split(" ")[1]) continue;
|
|
132
|
-
report(node, pattern, expectedLength);
|
|
133
|
-
}
|
|
134
|
-
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
CallExpression: handle,
|
|
158
|
+
NewExpression: handle,
|
|
135
159
|
};
|
|
136
160
|
},
|
|
137
161
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { test } from "../test.spec.js";
|
|
2
|
+
import { noJsxInNonJsxFile } from "./no-jsx-in-non-jsx-file.js";
|
|
3
|
+
|
|
4
|
+
const codes = [
|
|
5
|
+
"const Foo = () => <div></div>",
|
|
6
|
+
"const Foo = () => <></>",
|
|
7
|
+
"function Foo(){const x = <div>foo</div>}",
|
|
8
|
+
"function Foo(){const x = <>foo</>}",
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
const valid = [
|
|
12
|
+
...codes.map((code) => ({ code, filename: "foo.jsx" })),
|
|
13
|
+
...codes.map((code) => ({ code, filename: "foo.tsx" })),
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const invalid = [
|
|
17
|
+
...codes.map((code) => ({ code, filename: "foo.js" })),
|
|
18
|
+
...codes.map((code) => ({ code, filename: "foo.cjs" })),
|
|
19
|
+
...codes.map((code) => ({ code, filename: "foo.mjs" })),
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
test({ valid, invalid, ...noJsxInNonJsxFile });
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
import type { Node } from "estree";
|
|
3
|
+
import { getRuleName } from "../utils.js";
|
|
4
|
+
|
|
5
|
+
const name = getRuleName(import.meta.url);
|
|
6
|
+
const rule: Rule.RuleModule = {
|
|
7
|
+
meta: {
|
|
8
|
+
docs: {
|
|
9
|
+
description: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
10
|
+
},
|
|
11
|
+
messages: {
|
|
12
|
+
[`${name}/error`]: "Only allow JSX syntax in `.jsx` and `.tsx` file.",
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
create: (context) => {
|
|
16
|
+
if (
|
|
17
|
+
context.filename.endsWith(".jsx") ||
|
|
18
|
+
context.filename.endsWith(".tsx")
|
|
19
|
+
) {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
":matches(JSXElement, JSXFragment)": (node: Node) => {
|
|
24
|
+
context.report({ node, messageId: `${name}/error` });
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const noJsxInNonJsxFile = { name, rule };
|
package/tsconfig.json
CHANGED