@fenge/eslint-plugin 0.1.2 → 0.2.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/CHANGELOG.md +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/rules/call-arguments-length.js +1 -1
- package/dist/rules/no-instanceof-builtin.d.ts.map +1 -1
- package/dist/rules/no-instanceof-builtin.js +4 -1
- package/dist/rules/no-jsx-in-non-jsx-file.d.ts.map +1 -1
- package/dist/rules/no-jsx-in-non-jsx-file.js +3 -4
- package/dist/rules/no-nested-class.d.ts +6 -0
- package/dist/rules/no-nested-class.d.ts.map +1 -0
- package/dist/rules/no-nested-class.js +23 -0
- package/dist/rules/no-nested-function.d.ts +6 -0
- package/dist/rules/no-nested-function.d.ts.map +1 -0
- package/dist/rules/no-nested-function.js +25 -0
- package/dist/rules/no-restricted-loops.js +1 -1
- package/dist/rules/no-top-level-arrow-function.d.ts +6 -0
- package/dist/rules/no-top-level-arrow-function.d.ts.map +1 -0
- package/dist/rules/no-top-level-arrow-function.js +27 -0
- package/dist/rules/no-unnecessary-template-string.js +1 -1
- package/doc/rules/call-arguments-length.md +52 -0
- package/doc/rules/no-instanceof-builtin.md +50 -0
- package/doc/rules/no-jsx-in-non-jsx-file.md +37 -0
- package/doc/rules/no-nested-class.md +31 -0
- package/doc/rules/no-nested-function.md +42 -0
- package/doc/rules/no-restricted-loops.md +23 -0
- package/doc/rules/no-top-level-arrow-function.md +45 -0
- package/doc/rules/no-unnecessary-template-string.md +34 -0
- package/package.json +5 -7
- package/src/index.ts +11 -5
- package/src/rules/call-arguments-length.spec.ts +2 -2
- package/src/rules/call-arguments-length.ts +1 -1
- package/src/rules/no-instanceof-builtin.spec.ts +2 -2
- package/src/rules/no-instanceof-builtin.ts +4 -1
- package/src/rules/no-jsx-in-non-jsx-file.spec.ts +2 -2
- package/src/rules/no-jsx-in-non-jsx-file.ts +3 -7
- package/src/rules/no-nested-class.spec.ts +27 -0
- package/src/rules/no-nested-class.ts +31 -0
- package/src/rules/no-nested-function.spec.ts +49 -0
- package/src/rules/no-nested-function.ts +32 -0
- package/src/rules/no-restricted-loops.spec.ts +2 -2
- package/src/rules/no-restricted-loops.ts +1 -1
- package/src/rules/no-top-level-arrow-function.spec.ts +32 -0
- package/src/rules/no-top-level-arrow-function.ts +35 -0
- package/src/rules/no-unnecessary-template-string.spec.ts +2 -2
- package/src/rules/no-unnecessary-template-string.ts +1 -1
- package/src/test.spec.ts +0 -51
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @fenge/eslint-plugin
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- d2e61d3: feat: `no-top-level-arrow-function` only report when the function body is `BlockStatement`
|
|
8
|
+
|
|
9
|
+
## 0.1.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- d0e9357: feat: add rule `no-nested-function`
|
|
14
|
+
- d0e9357: feat: add rule `no-top-level-arrow-function`
|
|
15
|
+
- d0e9357: feat: add rule `no-nested-class`
|
|
16
|
+
|
|
3
17
|
## 0.1.2
|
|
4
18
|
|
|
5
19
|
### 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":"AASA,eAAO,MAAM,KAAK;;CASjB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { callArgumentsLength } from "./rules/call-arguments-length.js";
|
|
2
2
|
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.js";
|
|
3
3
|
import { noJsxInNonJsxFile } from "./rules/no-jsx-in-non-jsx-file.js";
|
|
4
|
+
import { noNestedClass } from "./rules/no-nested-class.js";
|
|
5
|
+
import { noNestedFunction } from "./rules/no-nested-function.js";
|
|
4
6
|
import { noRestrictedLoops } from "./rules/no-restricted-loops.js";
|
|
7
|
+
import { noTopLevelArrowFunction } from "./rules/no-top-level-arrow-function.js";
|
|
5
8
|
import { noUnnecessaryTemplateString } from "./rules/no-unnecessary-template-string.js";
|
|
6
9
|
export const rules = {
|
|
7
10
|
[callArgumentsLength.name]: callArgumentsLength.rule,
|
|
8
11
|
[noInstanceofBuiltin.name]: noInstanceofBuiltin.rule,
|
|
9
12
|
[noJsxInNonJsxFile.name]: noJsxInNonJsxFile.rule,
|
|
13
|
+
[noNestedClass.name]: noNestedClass.rule,
|
|
14
|
+
[noNestedFunction.name]: noNestedFunction.rule,
|
|
10
15
|
[noRestrictedLoops.name]: noRestrictedLoops.rule,
|
|
16
|
+
[noTopLevelArrowFunction.name]: noTopLevelArrowFunction.rule,
|
|
11
17
|
[noUnnecessaryTemplateString.name]: noUnnecessaryTemplateString.rule,
|
|
12
18
|
};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztJQUNuQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLG1CQUFtQixDQUFDLElBQUk7SUFDcEQsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO0lBQ3BELENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtJQUNoRCxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLENBQUMsSUFBSTtJQUN4QyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDOUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO0lBQ2hELENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsSUFBSTtJQUM1RCxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLDJCQUEyQixDQUFDLElBQUk7Q0FDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhbGxBcmd1bWVudHNMZW5ndGggfSBmcm9tIFwiLi9ydWxlcy9jYWxsLWFyZ3VtZW50cy1sZW5ndGgudHNcIjtcbmltcG9ydCB7IG5vSW5zdGFuY2VvZkJ1aWx0aW4gfSBmcm9tIFwiLi9ydWxlcy9uby1pbnN0YW5jZW9mLWJ1aWx0aW4udHNcIjtcbmltcG9ydCB7IG5vSnN4SW5Ob25Kc3hGaWxlIH0gZnJvbSBcIi4vcnVsZXMvbm8tanN4LWluLW5vbi1qc3gtZmlsZS50c1wiO1xuaW1wb3J0IHsgbm9OZXN0ZWRDbGFzcyB9IGZyb20gXCIuL3J1bGVzL25vLW5lc3RlZC1jbGFzcy50c1wiO1xuaW1wb3J0IHsgbm9OZXN0ZWRGdW5jdGlvbiB9IGZyb20gXCIuL3J1bGVzL25vLW5lc3RlZC1mdW5jdGlvbi50c1wiO1xuaW1wb3J0IHsgbm9SZXN0cmljdGVkTG9vcHMgfSBmcm9tIFwiLi9ydWxlcy9uby1yZXN0cmljdGVkLWxvb3BzLnRzXCI7XG5pbXBvcnQgeyBub1RvcExldmVsQXJyb3dGdW5jdGlvbiB9IGZyb20gXCIuL3J1bGVzL25vLXRvcC1sZXZlbC1hcnJvdy1mdW5jdGlvbi50c1wiO1xuaW1wb3J0IHsgbm9Vbm5lY2Vzc2FyeVRlbXBsYXRlU3RyaW5nIH0gZnJvbSBcIi4vcnVsZXMvbm8tdW5uZWNlc3NhcnktdGVtcGxhdGUtc3RyaW5nLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBydWxlcyA9IHtcbiAgW2NhbGxBcmd1bWVudHNMZW5ndGgubmFtZV06IGNhbGxBcmd1bWVudHNMZW5ndGgucnVsZSxcbiAgW25vSW5zdGFuY2VvZkJ1aWx0aW4ubmFtZV06IG5vSW5zdGFuY2VvZkJ1aWx0aW4ucnVsZSxcbiAgW25vSnN4SW5Ob25Kc3hGaWxlLm5hbWVdOiBub0pzeEluTm9uSnN4RmlsZS5ydWxlLFxuICBbbm9OZXN0ZWRDbGFzcy5uYW1lXTogbm9OZXN0ZWRDbGFzcy5ydWxlLFxuICBbbm9OZXN0ZWRGdW5jdGlvbi5uYW1lXTogbm9OZXN0ZWRGdW5jdGlvbi5ydWxlLFxuICBbbm9SZXN0cmljdGVkTG9vcHMubmFtZV06IG5vUmVzdHJpY3RlZExvb3BzLnJ1bGUsXG4gIFtub1RvcExldmVsQXJyb3dGdW5jdGlvbi5uYW1lXTogbm9Ub3BMZXZlbEFycm93RnVuY3Rpb24ucnVsZSxcbiAgW25vVW5uZWNlc3NhcnlUZW1wbGF0ZVN0cmluZy5uYW1lXTogbm9Vbm5lY2Vzc2FyeVRlbXBsYXRlU3RyaW5nLnJ1bGUsXG59O1xuIl19
|
|
@@ -125,4 +125,4 @@ const rule = {
|
|
|
125
125
|
},
|
|
126
126
|
};
|
|
127
127
|
export const callArgumentsLength = { name, rule };
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1hcmd1bWVudHMtbGVuZ3RoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL2NhbGwtYXJndW1lbnRzLWxlbmd0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLDBJQUEwSTtBQUMxSSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksR0FBb0I7SUFDNUIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULDhEQUE4RDtTQUNqRTtRQUNELFFBQVEsRUFBRTtZQUNSLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUNmLG1GQUFtRjtTQUN0RjtRQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsNENBQTRDO0tBQzNFO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxjQUF1QixFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztZQUM1QixJQUNFLE9BQU8sY0FBYyxLQUFLLFFBQVE7Z0JBQ2xDLGNBQWM7Z0JBQ2QsS0FBSyxJQUFJLGNBQWMsRUFDdkIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FB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TUFBTSxDQUFDO2dCQUNsRSxPQUFPO3FCQUNKLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNqQixpRkFBaUY7b0JBQ2pGLElBQ0UsTUFBTSxJQUFJLFlBQVk7d0JBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNmLEdBQUcsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxDQUN2RCxFQUNELENBQUM7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCx3R0FBd0c7b0JBQ3hHLElBQ0UsQ0FBQyxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUM7d0JBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUNyRCxDQUFDO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDO3FCQUNELE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7b0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixPQUFPO1lBQ0wsY0FBYyxFQUFFLE1BQU07WUFDdEIsYUFBYSxFQUFFLE1BQU07U0FDdEIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IENhbGxFeHByZXNzaW9uLCBOZXdFeHByZXNzaW9uIH0gZnJvbSBcImVzdHJlZVwiO1xuaW1wb3J0IHsgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuLy8gVE9ETzogSWYgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2xpbnQtcGx1Z2luLXVuaWNvcm4vaXNzdWVzLzEzNTYgaXMgaW1wbGVtZW50ZWQsIG1pZ3JhdGUgdGhpcyBydWxlIHRvIGBlc2xpbnQtcGx1Z2luLXVuaWNvcm5gXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpc2FsbG93IGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGluY29ycmVjdCBhcmd1bWVudHMgbGVuZ3RoLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOlxuICAgICAgICBcIlRoZSBhcmd1bWVudHMgbGVuZ3RoIG9mIGNhbGxpbmcgYHt7IGZ1bmN0aW9uUGF0dGVybiB9fWAgc2hvdWxkIGJlIHt7IGxlbmd0aE1zZyB9fVwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbeyB0eXBlOiBcIm9iamVjdFwiIH1dLCAvLyBUT0RPOiBlbmhhbmNlIHNjaGVtYSBmb3IgY2hlY2tpbmcgb3B0aW9uc1xuICB9LFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZ2V0TGVuZ3RoTXNnID0gKGV4cGVjdGVkTGVuZ3RoOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWRMZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZExlbmd0aC5qb2luKFwiIG9yIFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIFwibWluXCIgaW4gZXhwZWN0ZWRMZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChgPj0gJHtTdHJpbmcoZXhwZWN0ZWRMZW5ndGgubWluKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIFwibWF4XCIgaW4gZXhwZWN0ZWRMZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChgPD0gJHtTdHJpbmcoZXhwZWN0ZWRMZW5ndGgubWF4KX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuam9pbihcIiBhbmQgXCIpO1xuICAgIH07XG4gICAgY29uc3QgaXNMZW5ndGhWYWxpZCA9IChsZW5ndGg6IG51bWJlciwgZXhwZWN0ZWRMZW5ndGg6IHVua25vd24pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA9PT0gZXhwZWN0ZWRMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZExlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkTGVuZ3RoLmluY2x1ZGVzKGxlbmd0aCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQ6IGJvb2xlYW5bXSA9IFtdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgZXhwZWN0ZWRMZW5ndGggJiZcbiAgICAgICAgXCJtaW5cIiBpbiBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGgubWluID09PSBcIm51bWJlclwiXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGVuZ3RoID49IGV4cGVjdGVkTGVuZ3RoLm1pbik7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICBcIm1heFwiIGluIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aC5tYXggPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChsZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgubWF4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuZXZlcnkoKGl0ZW0pID0+IGl0ZW0pO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3J0ID0gKFxuICAgICAgbm9kZTogQ2FsbEV4cHJlc3Npb24gfCBOZXdFeHByZXNzaW9uLFxuICAgICAgZnVuY3Rpb25QYXR0ZXJuOiBzdHJpbmcsXG4gICAgICBleHBlY3RlZExlbmd0aDogdW5rbm93bixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGFyZ3NMZW5ndGggPSBub2RlLmFyZ3VtZW50cy5zb21lKFxuICAgICAgICAoYXJnKSA9PiBhcmcudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIsXG4gICAgICApXG4gICAgICAgID8gSW5maW5pdHlcbiAgICAgICAgOiBub2RlLmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoIWlzTGVuZ3RoVmFsaWQoYXJnc0xlbmd0aCwgZXhwZWN0ZWRMZW5ndGgpKVxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmdW5jdGlvblBhdHRlcm4sXG4gICAgICAgICAgICBsZW5ndGhNc2c6IGdldExlbmd0aE1zZyhleHBlY3RlZExlbmd0aCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgIGNvbnRleHQub3B0aW9uc1swXSA/PyB7XG4gICAgICAgIC8vIDFcbiAgICAgICAgXCIqLnJlZHVjZVwiOiAyLFxuICAgICAgICBcIioucmVkdWNlUmlnaHRcIjogMixcbiAgICAgICAgXCIqLnB1c2hcIjogeyBtaW46IDEgfSxcbiAgICAgICAgXCJNYXRoLm1heFwiOiB7IG1pbjogMiB9LFxuICAgICAgICBcIk1hdGgubWluXCI6IHsgbWluOiAyIH0sXG4gICAgICAgIC8vIDJcbiAgICAgICAgXCJuZXcgU2V0XCI6IHsgbWF4OiAxIH0sXG4gICAgICAgIFwibmV3IE1hcFwiOiB7IG1heDogMSB9LFxuICAgICAgfSxcbiAgICApLm1hcCgoW3BhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoXSkgPT4gKHtcbiAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7cGF0dGVybi5yZXBsYWNlQWxsKFwiLlwiLCBcIlxcXFwuXCIpLnJlcGxhY2VBbGwoXCIqXCIsIFwiLipcIil9JGAsXG4gICAgICApLFxuICAgICAgcGF0dGVybixcbiAgICAgIGV4cGVjdGVkTGVuZ3RoLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGhhbmRsZSA9IChub2RlOiBDYWxsRXhwcmVzc2lvbiB8IE5ld0V4cHJlc3Npb24pID0+IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IG5vZGUudHlwZSA9PT0gXCJOZXdFeHByZXNzaW9uXCIgPyBcIm5ldyBcIiA6IFwiXCI7XG5cbiAgICAgIGNvbnN0IHsgY2FsbGVlIH0gPSBub2RlO1xuICAgICAgLy8gZnVuY3Rpb24gY2FsbFxuICAgICAgaWYgKGNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICAvLyBjb2RlIGxpa2UgYGZvbygpYCBvciBgbmV3IEZvbygpYFxuICAgICAgICBvcHRpb25zXG4gICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ucmVnZXgudGVzdChgJHtwcmVmaXh9JHtjYWxsZWUubmFtZX1gKSlcbiAgICAgICAgICAuZm9yRWFjaCgoeyBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCB9KSA9PiB7XG4gICAgICAgICAgICByZXBvcnQobm9kZSwgcGF0dGVybiwgZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbWV0aG9kIGNhbGxcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICBjYWxsZWUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICAgICAgY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgeyBvYmplY3Q6IGNhbGxlZU9iamVjdCwgcHJvcGVydHk6IGNhbGxlZVByb3BlcnR5IH0gPSBjYWxsZWU7XG4gICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIGNvZGUgbGlrZSBgTWF0aC5tYXgoKWAgb3IgYG5ldyBGb28uQmFyKClgLCB0aGUgY2FsbGVlT2JqZWN0IGlzIGBNYXRoYCBvciBgRm9vYFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcIm5hbWVcIiBpbiBjYWxsZWVPYmplY3QgJiZcbiAgICAgICAgICAgICAgb3B0aW9uLnJlZ2V4LnRlc3QoXG4gICAgICAgICAgICAgICAgYCR7cHJlZml4fSR7Y2FsbGVlT2JqZWN0Lm5hbWV9LiR7Y2FsbGVlUHJvcGVydHkubmFtZX1gLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb2RlIGxpa2UgYFtdLnJlZHVjZSgpYCBvciBgbmV3ICh7Rm9vOiBjbGFzc3t9fSkuRm9vKClgLCB0aGUgY2FsbGVlT2JqZWN0IGlzIGBbXWAgb3IgYHtGb286IGNsYXNze319YFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhKFwibmFtZVwiIGluIGNhbGxlZU9iamVjdCkgJiZcbiAgICAgICAgICAgICAgb3B0aW9uLnJlZ2V4LnRlc3QoYCR7cHJlZml4fS4ke2NhbGxlZVByb3BlcnR5Lm5hbWV9YClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mb3JFYWNoKCh7IHBhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoIH0pID0+IHtcbiAgICAgICAgICAgIHJlcG9ydChub2RlLCBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbjogaGFuZGxlLFxuICAgICAgTmV3RXhwcmVzc2lvbjogaGFuZGxlLFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY2FsbEFyZ3VtZW50c0xlbmd0aCA9IHsgbmFtZSwgcnVsZSB9O1xuIl19
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1hcmd1bWVudHMtbGVuZ3RoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL2NhbGwtYXJndW1lbnRzLWxlbmd0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLDBJQUEwSTtBQUMxSSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksR0FBb0I7SUFDNUIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULDhEQUE4RDtTQUNqRTtRQUNELFFBQVEsRUFBRTtZQUNSLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUNmLG1GQUFtRjtTQUN0RjtRQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsNENBQTRDO0tBQzNFO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxjQUF1QixFQUFFLEVBQUU7WUFDL0MsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztZQUM1QixJQUNFLE9BQU8sY0FBYyxLQUFLLFFBQVE7Z0JBQ2xDLGNBQWM7Z0JBQ2QsS0FBSyxJQUFJLGNBQWMsRUFDdkIsQ0FBQztnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FB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TUFBTSxDQUFDO2dCQUNsRSxPQUFPO3FCQUNKLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNqQixpRkFBaUY7b0JBQ2pGLElBQ0UsTUFBTSxJQUFJLFlBQVk7d0JBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNmLEdBQUcsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxDQUN2RCxFQUNELENBQUM7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCx3R0FBd0c7b0JBQ3hHLElBQ0UsQ0FBQyxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUM7d0JBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUNyRCxDQUFDO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDO3FCQUNELE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7b0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixPQUFPO1lBQ0wsY0FBYyxFQUFFLE1BQU07WUFDdEIsYUFBYSxFQUFFLE1BQU07U0FDdEIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IENhbGxFeHByZXNzaW9uLCBOZXdFeHByZXNzaW9uIH0gZnJvbSBcImVzdHJlZVwiO1xuaW1wb3J0IHsgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuLy8gVE9ETzogSWYgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2xpbnQtcGx1Z2luLXVuaWNvcm4vaXNzdWVzLzEzNTYgaXMgaW1wbGVtZW50ZWQsIG1pZ3JhdGUgdGhpcyBydWxlIHRvIGBlc2xpbnQtcGx1Z2luLXVuaWNvcm5gXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpc2FsbG93IGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGluY29ycmVjdCBhcmd1bWVudHMgbGVuZ3RoLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOlxuICAgICAgICBcIlRoZSBhcmd1bWVudHMgbGVuZ3RoIG9mIGNhbGxpbmcgYHt7IGZ1bmN0aW9uUGF0dGVybiB9fWAgc2hvdWxkIGJlIHt7IGxlbmd0aE1zZyB9fVwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbeyB0eXBlOiBcIm9iamVjdFwiIH1dLCAvLyBUT0RPOiBlbmhhbmNlIHNjaGVtYSBmb3IgY2hlY2tpbmcgb3B0aW9uc1xuICB9LFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgZ2V0TGVuZ3RoTXNnID0gKGV4cGVjdGVkTGVuZ3RoOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWRMZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZExlbmd0aC5qb2luKFwiIG9yIFwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIFwibWluXCIgaW4gZXhwZWN0ZWRMZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChgPj0gJHtTdHJpbmcoZXhwZWN0ZWRMZW5ndGgubWluKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGV4cGVjdGVkTGVuZ3RoID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIFwibWF4XCIgaW4gZXhwZWN0ZWRMZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChgPD0gJHtTdHJpbmcoZXhwZWN0ZWRMZW5ndGgubWF4KX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuam9pbihcIiBhbmQgXCIpO1xuICAgIH07XG4gICAgY29uc3QgaXNMZW5ndGhWYWxpZCA9IChsZW5ndGg6IG51bWJlciwgZXhwZWN0ZWRMZW5ndGg6IHVua25vd24pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA9PT0gZXhwZWN0ZWRMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZExlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkTGVuZ3RoLmluY2x1ZGVzKGxlbmd0aCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQ6IGJvb2xlYW5bXSA9IFtdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGggPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgZXhwZWN0ZWRMZW5ndGggJiZcbiAgICAgICAgXCJtaW5cIiBpbiBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICB0eXBlb2YgZXhwZWN0ZWRMZW5ndGgubWluID09PSBcIm51bWJlclwiXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobGVuZ3RoID49IGV4cGVjdGVkTGVuZ3RoLm1pbik7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBleHBlY3RlZExlbmd0aCAmJlxuICAgICAgICBcIm1heFwiIGluIGV4cGVjdGVkTGVuZ3RoICYmXG4gICAgICAgIHR5cGVvZiBleHBlY3RlZExlbmd0aC5tYXggPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICByZXN1bHQucHVzaChsZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgubWF4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuZXZlcnkoKGl0ZW0pID0+IGl0ZW0pO1xuICAgIH07XG4gICAgY29uc3QgcmVwb3J0ID0gKFxuICAgICAgbm9kZTogQ2FsbEV4cHJlc3Npb24gfCBOZXdFeHByZXNzaW9uLFxuICAgICAgZnVuY3Rpb25QYXR0ZXJuOiBzdHJpbmcsXG4gICAgICBleHBlY3RlZExlbmd0aDogdW5rbm93bixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGFyZ3NMZW5ndGggPSBub2RlLmFyZ3VtZW50cy5zb21lKFxuICAgICAgICAoYXJnKSA9PiBhcmcudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIsXG4gICAgICApXG4gICAgICAgID8gSW5maW5pdHlcbiAgICAgICAgOiBub2RlLmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoIWlzTGVuZ3RoVmFsaWQoYXJnc0xlbmd0aCwgZXhwZWN0ZWRMZW5ndGgpKVxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmdW5jdGlvblBhdHRlcm4sXG4gICAgICAgICAgICBsZW5ndGhNc2c6IGdldExlbmd0aE1zZyhleHBlY3RlZExlbmd0aCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgIGNvbnRleHQub3B0aW9uc1swXSA/PyB7XG4gICAgICAgIC8vIDFcbiAgICAgICAgXCIqLnJlZHVjZVwiOiAyLFxuICAgICAgICBcIioucmVkdWNlUmlnaHRcIjogMixcbiAgICAgICAgXCIqLnB1c2hcIjogeyBtaW46IDEgfSxcbiAgICAgICAgXCJNYXRoLm1heFwiOiB7IG1pbjogMiB9LFxuICAgICAgICBcIk1hdGgubWluXCI6IHsgbWluOiAyIH0sXG4gICAgICAgIC8vIDJcbiAgICAgICAgXCJuZXcgU2V0XCI6IHsgbWF4OiAxIH0sXG4gICAgICAgIFwibmV3IE1hcFwiOiB7IG1heDogMSB9LFxuICAgICAgfSxcbiAgICApLm1hcCgoW3BhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoXSkgPT4gKHtcbiAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7cGF0dGVybi5yZXBsYWNlQWxsKFwiLlwiLCBcIlxcXFwuXCIpLnJlcGxhY2VBbGwoXCIqXCIsIFwiLipcIil9JGAsXG4gICAgICApLFxuICAgICAgcGF0dGVybixcbiAgICAgIGV4cGVjdGVkTGVuZ3RoLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGhhbmRsZSA9IChub2RlOiBDYWxsRXhwcmVzc2lvbiB8IE5ld0V4cHJlc3Npb24pID0+IHtcbiAgICAgIGNvbnN0IHByZWZpeCA9IG5vZGUudHlwZSA9PT0gXCJOZXdFeHByZXNzaW9uXCIgPyBcIm5ldyBcIiA6IFwiXCI7XG5cbiAgICAgIGNvbnN0IHsgY2FsbGVlIH0gPSBub2RlO1xuICAgICAgLy8gZnVuY3Rpb24gY2FsbFxuICAgICAgaWYgKGNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgICAgICAvLyBjb2RlIGxpa2UgYGZvbygpYCBvciBgbmV3IEZvbygpYFxuICAgICAgICBvcHRpb25zXG4gICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ucmVnZXgudGVzdChgJHtwcmVmaXh9JHtjYWxsZWUubmFtZX1gKSlcbiAgICAgICAgICAuZm9yRWFjaCgoeyBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCB9KSA9PiB7XG4gICAgICAgICAgICByZXBvcnQobm9kZSwgcGF0dGVybiwgZXhwZWN0ZWRMZW5ndGgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbWV0aG9kIGNhbGxcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICBjYWxsZWUudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIgJiZcbiAgICAgICAgY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgeyBvYmplY3Q6IGNhbGxlZU9iamVjdCwgcHJvcGVydHk6IGNhbGxlZVByb3BlcnR5IH0gPSBjYWxsZWU7XG4gICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIGNvZGUgbGlrZSBgTWF0aC5tYXgoKWAgb3IgYG5ldyBGb28uQmFyKClgLCB0aGUgY2FsbGVlT2JqZWN0IGlzIGBNYXRoYCBvciBgRm9vYFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcIm5hbWVcIiBpbiBjYWxsZWVPYmplY3QgJiZcbiAgICAgICAgICAgICAgb3B0aW9uLnJlZ2V4LnRlc3QoXG4gICAgICAgICAgICAgICAgYCR7cHJlZml4fSR7Y2FsbGVlT2JqZWN0Lm5hbWV9LiR7Y2FsbGVlUHJvcGVydHkubmFtZX1gLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb2RlIGxpa2UgYFtdLnJlZHVjZSgpYCBvciBgbmV3ICh7Rm9vOiBjbGFzc3t9fSkuRm9vKClgLCB0aGUgY2FsbGVlT2JqZWN0IGlzIGBbXWAgb3IgYHtGb286IGNsYXNze319YFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhKFwibmFtZVwiIGluIGNhbGxlZU9iamVjdCkgJiZcbiAgICAgICAgICAgICAgb3B0aW9uLnJlZ2V4LnRlc3QoYCR7cHJlZml4fS4ke2NhbGxlZVByb3BlcnR5Lm5hbWV9YClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mb3JFYWNoKCh7IHBhdHRlcm4sIGV4cGVjdGVkTGVuZ3RoIH0pID0+IHtcbiAgICAgICAgICAgIHJlcG9ydChub2RlLCBwYXR0ZXJuLCBleHBlY3RlZExlbmd0aCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbjogaGFuZGxlLFxuICAgICAgTmV3RXhwcmVzc2lvbjogaGFuZGxlLFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY2FsbEFyZ3VtZW50c0xlbmd0aCA9IHsgbmFtZSwgcnVsZSB9O1xuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-instanceof-builtin.d.ts","sourceRoot":"","sources":["../../src/rules/no-instanceof-builtin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"no-instanceof-builtin.d.ts","sourceRoot":"","sources":["../../src/rules/no-instanceof-builtin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA6CnC,eAAO,MAAM,mBAAmB;;;CAAiB,CAAC"}
|
|
@@ -13,6 +13,9 @@ const rule = {
|
|
|
13
13
|
create: (context) => {
|
|
14
14
|
let builtins = undefined;
|
|
15
15
|
return {
|
|
16
|
+
// ESLint visit the Node from root to leaf. The Program Node is the root.
|
|
17
|
+
// Therefore, Program will be called before BinaryExpression.
|
|
18
|
+
// https://eslint.org/docs/latest/extend/code-path-analysis
|
|
16
19
|
Program: (node) => {
|
|
17
20
|
const scope = context.sourceCode.getScope(node);
|
|
18
21
|
builtins = new Set([
|
|
@@ -35,4 +38,4 @@ const rule = {
|
|
|
35
38
|
},
|
|
36
39
|
};
|
|
37
40
|
export const noInstanceofBuiltin = { name, rule };
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8taW5zdGFuY2VvZi1idWlsdGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLWluc3RhbmNlb2YtYnVpbHRpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLHVJQUF1STtBQUN2SSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksR0FBb0I7SUFDNUIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUFFLHNEQUFzRDtTQUNwRTtRQUNELFFBQVEsRUFBRTtZQUNSLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLHNEQUFzRDtTQUMxRTtLQUNGO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEIsSUFBSSxRQUFRLEdBQTRCLFNBQVMsQ0FBQztRQUNsRCxPQUFPO1lBQ0wseUVBQXlFO1lBQ3pFLDZEQUE2RDtZQUM3RCwyREFBMkQ7WUFDM0QsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUM7b0JBQ2pCLGtDQUFrQztvQkFDbEMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDckMsZ0NBQWdDO29CQUNoQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztpQkFDbkQsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELGdCQUFnQixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3pCLElBQ0UsSUFBSSxDQUFDLFFBQVEsS0FBSyxZQUFZO29CQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQ2hDLENBQUM7b0JBQ0QsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHsgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuLy8gVE9ETzogSWYgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2xpbnQtcGx1Z2luLXVuaWNvcm4vaXNzdWVzLzI0NTIgaXMgYWNjZXB0ZWQsIG1pZ3JhdGUgdGhpcyBydWxlIHRvIGBlc2xpbnQtcGx1Z2luLXVuaWNvcm5gXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJpZ2h0IGhhbmQgb2YgYGluc3RhbmNlb2ZgIGNhbid0IGJlIGEgYnVpbHRpbiBjbGFzcy5cIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbYCR7bmFtZX0vZXJyb3JgXTogXCJSaWdodCBoYW5kIG9mIGBpbnN0YW5jZW9mYCBjYW4ndCBiZSBhIGJ1aWx0aW4gY2xhc3MuXCIsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4ge1xuICAgIGxldCBidWlsdGluczogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEVTTGludCB2aXNpdCB0aGUgTm9kZSBmcm9tIHJvb3QgdG8gbGVhZi4gVGhlIFByb2dyYW0gTm9kZSBpcyB0aGUgcm9vdC5cbiAgICAgIC8vIFRoZXJlZm9yZSwgUHJvZ3JhbSB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgQmluYXJ5RXhwcmVzc2lvbi5cbiAgICAgIC8vIGh0dHBzOi8vZXNsaW50Lm9yZy9kb2NzL2xhdGVzdC9leHRlbmQvY29kZS1wYXRoLWFuYWx5c2lzXG4gICAgICBQcm9ncmFtOiAobm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBzY29wZSA9IGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKTtcbiAgICAgICAgYnVpbHRpbnMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAvLyBWYXJpYWJsZXMgZGVjbGFyZWQgaW4gYGdsb2JhbHNgXG4gICAgICAgICAgLi4uc2NvcGUudmFyaWFibGVzLm1hcCgodikgPT4gdi5uYW1lKSxcbiAgICAgICAgICAvLyBWYXJpYWJsZXMgbm90IGRlY2xhcmVkIGF0IGFsbFxuICAgICAgICAgIC4uLnNjb3BlLnRocm91Z2gubWFwKChyZWYpID0+IHJlZi5pZGVudGlmaWVyLm5hbWUpLFxuICAgICAgICBdKTtcbiAgICAgIH0sXG4gICAgICBCaW5hcnlFeHByZXNzaW9uOiAobm9kZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9kZS5vcGVyYXRvciAhPT0gXCJpbnN0YW5jZW9mXCIgfHxcbiAgICAgICAgICBub2RlLnJpZ2h0LnR5cGUgIT09IFwiSWRlbnRpZmllclwiXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChidWlsdGlucz8uaGFzKG5vZGUucmlnaHQubmFtZSkgPz8gdHJ1ZSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogbm9kZS5yaWdodCwgbWVzc2FnZUlkOiBgJHtuYW1lfS9lcnJvcmAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBub0luc3RhbmNlb2ZCdWlsdGluID0geyBuYW1lLCBydWxlIH07XG4iXX0=
|
|
@@ -1 +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;
|
|
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;AAyBnC,eAAO,MAAM,iBAAiB;;;CAAiB,CAAC"}
|
|
@@ -10,10 +10,9 @@ const rule = {
|
|
|
10
10
|
},
|
|
11
11
|
},
|
|
12
12
|
create: (context) => {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
// ignore jsx files
|
|
14
|
+
if (/\.[tj]sx$/.test(context.filename))
|
|
15
15
|
return {};
|
|
16
|
-
}
|
|
17
16
|
return {
|
|
18
17
|
":matches(JSXElement, JSXFragment)": (node) => {
|
|
19
18
|
context.report({ node, messageId: `${name}/error` });
|
|
@@ -22,4 +21,4 @@ const rule = {
|
|
|
22
21
|
},
|
|
23
22
|
};
|
|
24
23
|
export const noJsxInNonJsxFile = { name, rule };
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tanN4LWluLW5vbi1qc3gtZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1qc3gtaW4tbm9uLWpzeC1maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsTUFBTSxJQUFJLEdBQW9CO0lBQzVCLElBQUksRUFBRTtRQUNKLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxrREFBa0Q7U0FDaEU7UUFDRCxRQUFRLEVBQUU7WUFDUixDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxrREFBa0Q7U0FDdEU7S0FDRjtJQUNELE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2xCLG1CQUFtQjtRQUNuQixJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xELE9BQU87WUFDTCxtQ0FBbUMsRUFBRSxDQUFDLElBQVUsRUFBRSxFQUFFO2dCQUNsRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tIFwiZXN0cmVlXCI7XG5pbXBvcnQgeyBnZXRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9ubHkgYWxsb3cgSlNYIHN5bnRheCBpbiBgLmpzeGAgYW5kIGAudHN4YCBmaWxlLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOiBcIk9ubHkgYWxsb3cgSlNYIHN5bnRheCBpbiBgLmpzeGAgYW5kIGAudHN4YCBmaWxlLlwiLFxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IHtcbiAgICAvLyBpZ25vcmUganN4IGZpbGVzXG4gICAgaWYgKC9cXC5bdGpdc3gkLy50ZXN0KGNvbnRleHQuZmlsZW5hbWUpKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHtcbiAgICAgIFwiOm1hdGNoZXMoSlNYRWxlbWVudCwgSlNYRnJhZ21lbnQpXCI6IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZUlkOiBgJHtuYW1lfS9lcnJvcmAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3Qgbm9Kc3hJbk5vbkpzeEZpbGUgPSB7IG5hbWUsIHJ1bGUgfTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-nested-class.d.ts","sourceRoot":"","sources":["../../src/rules/no-nested-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA8BnC,eAAO,MAAM,aAAa;;;CAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getRuleName } from "../utils.js";
|
|
2
|
+
const name = getRuleName(import.meta.url);
|
|
3
|
+
const rule = {
|
|
4
|
+
meta: {
|
|
5
|
+
docs: {
|
|
6
|
+
description: "Disallow nested class. Classes are expected to place at top level.",
|
|
7
|
+
},
|
|
8
|
+
messages: {
|
|
9
|
+
[`${name}/error`]: "Disallow nested class. Classes are expected to place at top level.",
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
create: (context) => {
|
|
13
|
+
const handle = (node) => context.report({ node, messageId: `${name}/error` });
|
|
14
|
+
return {
|
|
15
|
+
// ClassDeclaration is only allowed when parent is Program, or parent is ExportNamedDeclaration, or parent is ExportDefaultDeclaration
|
|
16
|
+
"ClassDeclaration[parent.type!='Program'][parent.type!='ExportNamedDeclaration'][parent.type!='ExportDefaultDeclaration']": handle,
|
|
17
|
+
// ClassExpression is only allowed when parent is ExportNamedDeclaration, or parent is ExportDefaultDeclaration
|
|
18
|
+
"ClassExpression[parent.type!='ExportNamedDeclaration'][parent.type!='ExportDefaultDeclaration']": handle,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export const noNestedClass = { name, rule };
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tbmVzdGVkLWNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLW5lc3RlZC1jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxHQUFvQjtJQUM1QixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1Qsb0VBQW9FO1NBQ3ZFO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQ2Ysb0VBQW9FO1NBQ3ZFO0tBQ0Y7SUFDRCxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQzVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU87WUFDTCxzSUFBc0k7WUFDdEksMEhBQTBILEVBQ3hILE1BQU07WUFDUiwrR0FBK0c7WUFDL0csaUdBQWlHLEVBQy9GLE1BQU07U0FDVCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7IE5vZGUgfSBmcm9tIFwiZXN0cmVlXCI7XG5pbXBvcnQgeyBnZXRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpc2FsbG93IG5lc3RlZCBjbGFzcy4gQ2xhc3NlcyBhcmUgZXhwZWN0ZWQgdG8gcGxhY2UgYXQgdG9wIGxldmVsLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOlxuICAgICAgICBcIkRpc2FsbG93IG5lc3RlZCBjbGFzcy4gQ2xhc3NlcyBhcmUgZXhwZWN0ZWQgdG8gcGxhY2UgYXQgdG9wIGxldmVsLlwiLFxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZTogKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBoYW5kbGUgPSAobm9kZTogTm9kZSkgPT5cbiAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZUlkOiBgJHtuYW1lfS9lcnJvcmAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENsYXNzRGVjbGFyYXRpb24gaXMgb25seSBhbGxvd2VkIHdoZW4gcGFyZW50IGlzIFByb2dyYW0sIG9yIHBhcmVudCBpcyBFeHBvcnROYW1lZERlY2xhcmF0aW9uLCBvciBwYXJlbnQgaXMgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXG4gICAgICBcIkNsYXNzRGVjbGFyYXRpb25bcGFyZW50LnR5cGUhPSdQcm9ncmFtJ11bcGFyZW50LnR5cGUhPSdFeHBvcnROYW1lZERlY2xhcmF0aW9uJ11bcGFyZW50LnR5cGUhPSdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nXVwiOlxuICAgICAgICBoYW5kbGUsXG4gICAgICAvLyBDbGFzc0V4cHJlc3Npb24gaXMgb25seSBhbGxvd2VkIHdoZW4gcGFyZW50IGlzIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24sIG9yIHBhcmVudCBpcyBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cbiAgICAgIFwiQ2xhc3NFeHByZXNzaW9uW3BhcmVudC50eXBlIT0nRXhwb3J0TmFtZWREZWNsYXJhdGlvbiddW3BhcmVudC50eXBlIT0nRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJ11cIjpcbiAgICAgICAgaGFuZGxlLFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3Qgbm9OZXN0ZWRDbGFzcyA9IHsgbmFtZSwgcnVsZSB9O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-nested-function.d.ts","sourceRoot":"","sources":["../../src/rules/no-nested-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA+BnC,eAAO,MAAM,gBAAgB;;;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: "Non top-level functions are expected to be arrow functions instead of function declarations.",
|
|
7
|
+
},
|
|
8
|
+
messages: {
|
|
9
|
+
[`${name}/error`]: "Non top-level functions are expected to be arrow functions instead of function declarations.",
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
create: (context) => {
|
|
13
|
+
const handle = (node) => context.report({ node, messageId: `${name}/error` });
|
|
14
|
+
return {
|
|
15
|
+
// FunctionDeclaration is only allowed when parent is Program, or parent is ExportNamedDeclaration, or parent is ExportDefaultDeclaration
|
|
16
|
+
// function foo(){}
|
|
17
|
+
"FunctionDeclaration[parent.type!='Program'][parent.type!='ExportNamedDeclaration'][parent.type!='ExportDefaultDeclaration']": handle,
|
|
18
|
+
// FunctionExpression is only allowed when parent is MethodDefinition
|
|
19
|
+
// function (){}
|
|
20
|
+
"FunctionExpression[parent.type!='MethodDefinition']": handle,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export const noNestedFunction = { name, rule };
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tbmVzdGVkLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLW5lc3RlZC1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxHQUFvQjtJQUM1QixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1QsOEZBQThGO1NBQ2pHO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQ2YsOEZBQThGO1NBQ2pHO0tBQ0Y7SUFDRCxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQzVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU87WUFDTCx5SUFBeUk7WUFDekksbUJBQW1CO1lBQ25CLDZIQUE2SCxFQUMzSCxNQUFNO1lBQ1IscUVBQXFFO1lBQ3JFLGdCQUFnQjtZQUNoQixxREFBcUQsRUFBRSxNQUFNO1NBQzlELENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlIH0gZnJvbSBcImVzdHJlZVwiO1xuaW1wb3J0IHsgZ2V0UnVsZU5hbWUgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuY29uc3QgbmFtZSA9IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJOb24gdG9wLWxldmVsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgYXJyb3cgZnVuY3Rpb25zIGluc3RlYWQgb2YgZnVuY3Rpb24gZGVjbGFyYXRpb25zLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOlxuICAgICAgICBcIk5vbiB0b3AtbGV2ZWwgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBhcnJvdyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuXCIsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZSA9IChub2RlOiBOb2RlKSA9PlxuICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRnVuY3Rpb25EZWNsYXJhdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2hlbiBwYXJlbnQgaXMgUHJvZ3JhbSwgb3IgcGFyZW50IGlzIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24sIG9yIHBhcmVudCBpcyBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cbiAgICAgIC8vIGZ1bmN0aW9uIGZvbygpe31cbiAgICAgIFwiRnVuY3Rpb25EZWNsYXJhdGlvbltwYXJlbnQudHlwZSE9J1Byb2dyYW0nXVtwYXJlbnQudHlwZSE9J0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nXVtwYXJlbnQudHlwZSE9J0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbiddXCI6XG4gICAgICAgIGhhbmRsZSxcbiAgICAgIC8vIEZ1bmN0aW9uRXhwcmVzc2lvbiBpcyBvbmx5IGFsbG93ZWQgd2hlbiBwYXJlbnQgaXMgTWV0aG9kRGVmaW5pdGlvblxuICAgICAgLy8gZnVuY3Rpb24gKCl7fVxuICAgICAgXCJGdW5jdGlvbkV4cHJlc3Npb25bcGFyZW50LnR5cGUhPSdNZXRob2REZWZpbml0aW9uJ11cIjogaGFuZGxlLFxuICAgIH07XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3Qgbm9OZXN0ZWRGdW5jdGlvbiA9IHsgbmFtZSwgcnVsZSB9O1xuIl19
|
|
@@ -21,4 +21,4 @@ const rule = {
|
|
|
21
21
|
}),
|
|
22
22
|
};
|
|
23
23
|
export const noRestrictedLoops = { name, rule };
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tcmVzdHJpY3RlZC1sb29wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLWxvb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsdUlBQXVJO0FBQ3ZJLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDOzs7R0FHRztBQUNILE1BQU0sSUFBSSxHQUFvQjtJQUM1QixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1QsNkdBQTZHO1NBQ2hIO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQ2YsNkdBQTZHO1NBQ2hIO0tBQ0Y7SUFDRCxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsc0ZBQXNGLEVBQ3BGLENBQUMsSUFBVSxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0tBQ0osQ0FBQztDQUNILENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlIHsgTm9kZSB9IGZyb20gXCJlc3RyZWVcIjtcbmltcG9ydCB7IGdldFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbi8vIFRPRE86IElmIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXNsaW50LXBsdWdpbi11bmljb3JuL2lzc3Vlcy8yNDUzIGlzIGFjY2VwdGVkLCBtaWdyYXRlIHRoaXMgcnVsZSB0byBgZXNsaW50LXBsdWdpbi11bmljb3JuYFxuY29uc3QgbmFtZSA9IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCk7XG4vKipcbiAqIE9ubHkgYWxsb3cgYHdoaWxlYCBhbmQgYGZvci1vZmAgbG9vcHMuIGBmb3JgLCBgZm9yLWluYCwgYGRvLXdoaWxlYCBhbmQgYGZvci1hd2FpdC1vZmAgbG9vcHMgYXJlIGRpc2FsbG93ZWQuXG4gKiBWaXNpdCBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VzbGludC1wbHVnaW4tdW5pY29ybi9pc3N1ZXMvMjQ1MyBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5jb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJPbmx5IGFsbG93IGB3aGlsZWAgYW5kIGBmb3Itb2ZgIGxvb3BzLiBgZm9yYCwgYGZvci1pbmAsIGBkby13aGlsZWAgYW5kIGBmb3ItYXdhaXQtb2ZgIGxvb3BzIGFyZSBkaXNhbGxvd2VkLlwiLFxuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtgJHtuYW1lfS9lcnJvcmBdOlxuICAgICAgICBcIk9ubHkgYWxsb3cgYHdoaWxlYCBhbmQgYGZvci1vZmAgbG9vcHMuIGBmb3JgLCBgZm9yLWluYCwgYGRvLXdoaWxlYCBhbmQgYGZvci1hd2FpdC1vZmAgbG9vcHMgYXJlIGRpc2FsbG93ZWQuXCIsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4gKHtcbiAgICBcIjptYXRjaGVzKEZvclN0YXRlbWVudCwgRm9ySW5TdGF0ZW1lbnQsIERvV2hpbGVTdGF0ZW1lbnQsIEZvck9mU3RhdGVtZW50W2F3YWl0PXRydWVdKVwiOlxuICAgICAgKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCB9KTtcbiAgICAgIH0sXG4gIH0pLFxufTtcblxuZXhwb3J0IGNvbnN0IG5vUmVzdHJpY3RlZExvb3BzID0geyBuYW1lLCBydWxlIH07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-top-level-arrow-function.d.ts","sourceRoot":"","sources":["../../src/rules/no-top-level-arrow-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkCnC,eAAO,MAAM,uBAAuB;;;CAAiB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getRuleName } from "../utils.js";
|
|
2
|
+
const name = getRuleName(import.meta.url);
|
|
3
|
+
const rule = {
|
|
4
|
+
meta: {
|
|
5
|
+
docs: {
|
|
6
|
+
description: "Top-level functions are expected to be function declarations instead of arrow functions.",
|
|
7
|
+
},
|
|
8
|
+
messages: {
|
|
9
|
+
[`${name}/error`]: "Top-level functions are expected to be function declarations instead of arrow functions.",
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
create: (context) => {
|
|
13
|
+
const handle = (node) => {
|
|
14
|
+
if (node.body.type === "BlockStatement") {
|
|
15
|
+
context.report({ node, messageId: `${name}/error` });
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
return {
|
|
19
|
+
"VariableDeclaration[parent.type='Program'] > VariableDeclarator > ArrowFunctionExpression": handle,
|
|
20
|
+
"ExpressionStatement[parent.type='Program'] > AssignmentExpression > ArrowFunctionExpression": handle,
|
|
21
|
+
"ExportNamedDeclaration > VariableDeclaration > VariableDeclarator > ArrowFunctionExpression": handle,
|
|
22
|
+
"ExportDefaultDeclaration > ArrowFunctionExpression": handle,
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
export const noTopLevelArrowFunction = { name, rule };
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdG9wLWxldmVsLWFycm93LWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLXRvcC1sZXZlbC1hcnJvdy1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxHQUFvQjtJQUM1QixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1QsMEZBQTBGO1NBQzdGO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQ2YsMEZBQTBGO1NBQzdGO0tBQ0Y7SUFDRCxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQTZCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixPQUFPO1lBQ0wsMkZBQTJGLEVBQ3pGLE1BQU07WUFDUiw2RkFBNkYsRUFDM0YsTUFBTTtZQUNSLDZGQUE2RixFQUMzRixNQUFNO1lBQ1Isb0RBQW9ELEVBQUUsTUFBTTtTQUM3RCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlIHsgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiZXN0cmVlXCI7XG5pbXBvcnQgeyBnZXRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5jb25zdCBuYW1lID0gZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlRvcC1sZXZlbCBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbnN0ZWFkIG9mIGFycm93IGZ1bmN0aW9ucy5cIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbYCR7bmFtZX0vZXJyb3JgXTpcbiAgICAgICAgXCJUb3AtbGV2ZWwgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW5zdGVhZCBvZiBhcnJvdyBmdW5jdGlvbnMuXCIsXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlOiAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZSA9IChub2RlOiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbikgPT4ge1xuICAgICAgaWYgKG5vZGUuYm9keS50eXBlID09PSBcIkJsb2NrU3RhdGVtZW50XCIpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlSWQ6IGAke25hbWV9L2Vycm9yYCB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBcIlZhcmlhYmxlRGVjbGFyYXRpb25bcGFyZW50LnR5cGU9J1Byb2dyYW0nXSA+IFZhcmlhYmxlRGVjbGFyYXRvciA+IEFycm93RnVuY3Rpb25FeHByZXNzaW9uXCI6XG4gICAgICAgIGhhbmRsZSxcbiAgICAgIFwiRXhwcmVzc2lvblN0YXRlbWVudFtwYXJlbnQudHlwZT0nUHJvZ3JhbSddID4gQXNzaWdubWVudEV4cHJlc3Npb24gPiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiOlxuICAgICAgICBoYW5kbGUsXG4gICAgICBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24gPiBWYXJpYWJsZURlY2xhcmF0aW9uID4gVmFyaWFibGVEZWNsYXJhdG9yID4gQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIjpcbiAgICAgICAgaGFuZGxlLFxuICAgICAgXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24gPiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiOiBoYW5kbGUsXG4gICAgfTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBub1RvcExldmVsQXJyb3dGdW5jdGlvbiA9IHsgbmFtZSwgcnVsZSB9O1xuIl19
|
|
@@ -21,4 +21,4 @@ const rule = {
|
|
|
21
21
|
}),
|
|
22
22
|
};
|
|
23
23
|
export const noUnnecessaryTemplateString = { name, rule };
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW5uZWNlc3NhcnktdGVtcGxhdGUtc3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bGVzL25vLXVubmVjZXNzYXJ5LXRlbXBsYXRlLXN0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLDhHQUE4RztBQUM5RyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksR0FBb0I7SUFDNUIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULHFHQUFxRztTQUN4RztRQUNELFFBQVEsRUFBRTtZQUNSLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUNmLHFHQUFxRztTQUN4RztLQUNGO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLElBQ0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFDM0MsQ0FBQztnQkFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7Q0FDSCxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgeyBnZXRSdWxlTmFtZSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG4vLyBUT0RPIGRlcHJlY2F0ZSB0aGlzIHJ1bGUgaWYgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2xpbnQtcGx1Z2luLXVuaWNvcm4vaXNzdWVzLzcxIGlzIGltcGxlbWVudGVkLlxuY29uc3QgbmFtZSA9IGdldFJ1bGVOYW1lKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEaXNhbGxvdyB1c2luZyB0ZW1wbGF0ZSBzdHJpbmcgd2hlbiBpdCdzIHVubmVjZXNzYXJ5LiBVc2Ugbm9ybWFsIGxpdGVyYWwgc3RyaW5nIGV4cHJlc3Npb24gaW5zdGVhZC5cIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbYCR7bmFtZX0vZXJyb3JgXTpcbiAgICAgICAgXCJEaXNhbGxvdyB1c2luZyB0ZW1wbGF0ZSBzdHJpbmcgd2hlbiBpdCdzIHVubmVjZXNzYXJ5LiBVc2Ugbm9ybWFsIGxpdGVyYWwgc3RyaW5nIGV4cHJlc3Npb24gaW5zdGVhZC5cIixcbiAgICB9LFxuICB9LFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiAoe1xuICAgIFRlbXBsYXRlTGl0ZXJhbDogKG5vZGUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5xdWFzaXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIG5vZGUubG9jPy5zdGFydC5saW5lID09PSBub2RlLmxvYz8uZW5kLmxpbmVcbiAgICAgICkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGUsIG1lc3NhZ2VJZDogYCR7bmFtZX0vZXJyb3JgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pLFxufTtcbmV4cG9ydCBjb25zdCBub1VubmVjZXNzYXJ5VGVtcGxhdGVTdHJpbmcgPSB7IG5hbWUsIHJ1bGUgfTtcbiJdfQ==
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# call-arguments-length
|
|
3
|
+
|
|
4
|
+
Disallow calling a function with incorrect arguments length.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
[].push()
|
|
12
|
+
foo.push()
|
|
13
|
+
foo.reduce()
|
|
14
|
+
[].reduce(()=>123)
|
|
15
|
+
foo.reduce(()=>123)
|
|
16
|
+
foo.reduce(bar)
|
|
17
|
+
[].reduceRight(()=>123)
|
|
18
|
+
foo.reduceRight(()=>123)
|
|
19
|
+
foo.reduceRight(bar)
|
|
20
|
+
[].reduce(...foo)
|
|
21
|
+
[].reduce(...foo, ...bar)
|
|
22
|
+
Math.max()
|
|
23
|
+
Math.max(1)
|
|
24
|
+
Math.min(foo)
|
|
25
|
+
new Set(...foo)
|
|
26
|
+
new Set(foo,bar)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Pass
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
push()
|
|
33
|
+
[].push('')
|
|
34
|
+
foo.push('')
|
|
35
|
+
foo.push(bar)
|
|
36
|
+
[].push('', '', '')
|
|
37
|
+
[].push(...foo)
|
|
38
|
+
foo.push(...([]))
|
|
39
|
+
[].reduce(()=>123, 0)
|
|
40
|
+
foo.reduce(()=>123, 0)
|
|
41
|
+
foo.reduce(bar, baz)
|
|
42
|
+
[].reduceRight(()=>123, 0)
|
|
43
|
+
foo.reduceRight(()=>123, 0)
|
|
44
|
+
foo.reduceRight(bar, baz)
|
|
45
|
+
reduce(()=>123)
|
|
46
|
+
foo.reduceLeft(()=>123)
|
|
47
|
+
Math.max(...foo)
|
|
48
|
+
new foo.Set(...bar)
|
|
49
|
+
new Set(bar)
|
|
50
|
+
new Set()
|
|
51
|
+
```
|
|
52
|
+
<!-- prettier-ignore-end -->
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# no-instanceof-builtin
|
|
3
|
+
|
|
4
|
+
Right hand of `instanceof` can't be a builtin class.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
const i = {} instanceof Number
|
|
12
|
+
const i = {} instanceof String
|
|
13
|
+
const i = {} instanceof Boolean
|
|
14
|
+
const i = {} instanceof Symbol
|
|
15
|
+
const i = {} instanceof BigInt
|
|
16
|
+
const i = {} instanceof Object
|
|
17
|
+
const i = {} instanceof Array
|
|
18
|
+
const i = {} instanceof Function
|
|
19
|
+
const i = {} instanceof ArrayBuffer
|
|
20
|
+
const i = {} instanceof BigInt64Array
|
|
21
|
+
const i = {} instanceof BigUint64Array
|
|
22
|
+
const i = {} instanceof DataView
|
|
23
|
+
const i = {} instanceof Date
|
|
24
|
+
const i = {} instanceof Float32Array
|
|
25
|
+
const i = {} instanceof Float64Array
|
|
26
|
+
const i = {} instanceof Int16Array
|
|
27
|
+
const i = {} instanceof Int32Array
|
|
28
|
+
const i = {} instanceof Int8Array
|
|
29
|
+
const i = {} instanceof Map
|
|
30
|
+
const i = {} instanceof Error
|
|
31
|
+
const i = {} instanceof Promise
|
|
32
|
+
const i = {} instanceof Proxy
|
|
33
|
+
const i = {} instanceof RegExp
|
|
34
|
+
const i = {} instanceof Set
|
|
35
|
+
const i = {} instanceof SharedArrayBuffer
|
|
36
|
+
const i = {} instanceof Uint16Array
|
|
37
|
+
const i = {} instanceof Uint32Array
|
|
38
|
+
const i = {} instanceof Uint8Array
|
|
39
|
+
const i = {} instanceof Uint8ClampedArray
|
|
40
|
+
const i = {} instanceof WeakMap
|
|
41
|
+
const i = {} instanceof WeakSet
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Pass
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
const i = Math.random() > 0.5 ? true: false
|
|
48
|
+
const i = {} instanceof await import('http')
|
|
49
|
+
```
|
|
50
|
+
<!-- prettier-ignore-end -->
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# no-jsx-in-non-jsx-file
|
|
3
|
+
|
|
4
|
+
Only allow JSX syntax in `.jsx` and `.tsx` file.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
const Foo = () => <div></div> // filename: foo.js
|
|
12
|
+
const Foo = () => <></> // filename: foo.js
|
|
13
|
+
function Foo(){const x = <div>foo</div>} // filename: foo.js
|
|
14
|
+
function Foo(){const x = <>foo</>} // filename: foo.js
|
|
15
|
+
const Foo = () => <div></div> // filename: foo.cjs
|
|
16
|
+
const Foo = () => <></> // filename: foo.cjs
|
|
17
|
+
function Foo(){const x = <div>foo</div>} // filename: foo.cjs
|
|
18
|
+
function Foo(){const x = <>foo</>} // filename: foo.cjs
|
|
19
|
+
const Foo = () => <div></div> // filename: foo.mjs
|
|
20
|
+
const Foo = () => <></> // filename: foo.mjs
|
|
21
|
+
function Foo(){const x = <div>foo</div>} // filename: foo.mjs
|
|
22
|
+
function Foo(){const x = <>foo</>} // filename: foo.mjs
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Pass
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
const Foo = () => <div></div> // filename: foo.jsx
|
|
29
|
+
const Foo = () => <></> // filename: foo.jsx
|
|
30
|
+
function Foo(){const x = <div>foo</div>} // filename: foo.jsx
|
|
31
|
+
function Foo(){const x = <>foo</>} // filename: foo.jsx
|
|
32
|
+
const Foo = () => <div></div> // filename: foo.tsx
|
|
33
|
+
const Foo = () => <></> // filename: foo.tsx
|
|
34
|
+
function Foo(){const x = <div>foo</div>} // filename: foo.tsx
|
|
35
|
+
function Foo(){const x = <>foo</>} // filename: foo.tsx
|
|
36
|
+
```
|
|
37
|
+
<!-- prettier-ignore-end -->
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# no-nested-class
|
|
3
|
+
|
|
4
|
+
Disallow nested class. Classes are expected to place at top level.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
if(true) class Foo{}
|
|
12
|
+
if(true) const foo = class {}
|
|
13
|
+
function foo(){class Foo{}}
|
|
14
|
+
function foo(){const foo = class {}}
|
|
15
|
+
function foo(){return class Foo{}}
|
|
16
|
+
function foo(){return class{}}
|
|
17
|
+
const Foo = class{}
|
|
18
|
+
let Foo = class Bar{}
|
|
19
|
+
let Foo; Foo = class{}
|
|
20
|
+
(class {})
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Pass
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
class Foo{}
|
|
27
|
+
export class Foo{}
|
|
28
|
+
export default class Foo{}
|
|
29
|
+
export default class {}
|
|
30
|
+
```
|
|
31
|
+
<!-- prettier-ignore-end -->
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# no-nested-function
|
|
3
|
+
|
|
4
|
+
Non top-level functions are expected to be arrow functions instead of function declarations.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
Foo.prototype.bar = function(){}
|
|
12
|
+
Foo.prototype.bar = function bar(){}
|
|
13
|
+
const foo = function(){}
|
|
14
|
+
const foo = function foo(){}
|
|
15
|
+
let foo; foo = function(){}
|
|
16
|
+
let foo; foo = function foo(){}
|
|
17
|
+
(function(){})
|
|
18
|
+
const foo = () => {function bar(){}}
|
|
19
|
+
function foo() {function bar(){}}
|
|
20
|
+
function foo() {let bar = function(){}}
|
|
21
|
+
function foo() {let bar = function bar(){}}
|
|
22
|
+
if(true) function foo(){}
|
|
23
|
+
class Foo{bar = function(){}}
|
|
24
|
+
class Foo{bar = function bar(){}}
|
|
25
|
+
const foo = {bar: function() {}}
|
|
26
|
+
const foo = {bar: function bar() {}}
|
|
27
|
+
const foo = {bar() {}}
|
|
28
|
+
setTimeout(function(){},100)
|
|
29
|
+
setTimeout(function callback(){},100)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Pass
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
function foo(){}
|
|
36
|
+
const foo = () => {}
|
|
37
|
+
export function foo() {}
|
|
38
|
+
export default function foo() {}
|
|
39
|
+
export default function() {}
|
|
40
|
+
class Foo{bar(){}}
|
|
41
|
+
```
|
|
42
|
+
<!-- prettier-ignore-end -->
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# no-restricted-loops
|
|
3
|
+
|
|
4
|
+
Only allow `while` and `for-of` loops. `for`, `for-in`, `do-while` and `for-await-of` loops are disallowed.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
for(let i = 0; i < foo.length; i++) {}
|
|
12
|
+
for(const bar in foo) {}
|
|
13
|
+
do{}while(condition)
|
|
14
|
+
for await (const bar of foo()) {}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Pass
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
for(const bar of foo) {}
|
|
21
|
+
while(condition){}
|
|
22
|
+
```
|
|
23
|
+
<!-- prettier-ignore-end -->
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# no-top-level-arrow-function
|
|
3
|
+
|
|
4
|
+
Top-level functions are expected to be function declarations instead of arrow functions.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
let foo = () => {}
|
|
12
|
+
const foo = () => {}
|
|
13
|
+
let foo = () => {
|
|
14
|
+
}
|
|
15
|
+
const foo = () => {
|
|
16
|
+
}
|
|
17
|
+
let foo; foo = () => {
|
|
18
|
+
}
|
|
19
|
+
export const foo = () => {
|
|
20
|
+
}
|
|
21
|
+
export let foo = () => {
|
|
22
|
+
}
|
|
23
|
+
export default () => {
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Pass
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
function foo(){}
|
|
31
|
+
const foo = function(){}
|
|
32
|
+
const foo = function foo(){}
|
|
33
|
+
if(true) const foo = () => {
|
|
34
|
+
}
|
|
35
|
+
let foo = () => ''
|
|
36
|
+
let foo = () => [
|
|
37
|
+
]
|
|
38
|
+
let foo = () => ({})
|
|
39
|
+
const foo = () => ({})
|
|
40
|
+
let foo; foo = () => ({})
|
|
41
|
+
export const foo = () => ({})
|
|
42
|
+
export let foo = () => ({})
|
|
43
|
+
export default () => ({})
|
|
44
|
+
```
|
|
45
|
+
<!-- prettier-ignore-end -->
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<!-- prettier-ignore-start -->
|
|
2
|
+
# no-unnecessary-template-string
|
|
3
|
+
|
|
4
|
+
Disallow using template string when it's unnecessary. Use normal literal string expression instead.
|
|
5
|
+
|
|
6
|
+
## Rule Details
|
|
7
|
+
|
|
8
|
+
### Fail
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
outdent`foo`
|
|
12
|
+
``
|
|
13
|
+
`abc`
|
|
14
|
+
`abc\n`
|
|
15
|
+
`\nabc`
|
|
16
|
+
`a\nbc`
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Pass
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
'abc'
|
|
23
|
+
"def"
|
|
24
|
+
`ab${cd}ef`
|
|
25
|
+
`
|
|
26
|
+
`
|
|
27
|
+
`abc
|
|
28
|
+
`
|
|
29
|
+
`
|
|
30
|
+
abc`
|
|
31
|
+
`a
|
|
32
|
+
bc`
|
|
33
|
+
```
|
|
34
|
+
<!-- prettier-ignore-end -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fenge/eslint-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "ESLint plugin for JavaScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"opinionated",
|
|
@@ -21,13 +21,11 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": "./dist/index.js",
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@types/eslint": "8.56.11",
|
|
25
24
|
"@types/estree": "1.0.6",
|
|
26
|
-
"@types/
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"tsx": "4.19.2"
|
|
25
|
+
"@types/node": "22.10.5",
|
|
26
|
+
"eslint": "9.18.0",
|
|
27
|
+
"tsx": "4.19.2",
|
|
28
|
+
"@fenge/dev-utils": "0.0.0"
|
|
31
29
|
},
|
|
32
30
|
"scripts": {
|
|
33
31
|
"build": "tsc",
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import { callArgumentsLength } from "./rules/call-arguments-length.
|
|
2
|
-
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.
|
|
3
|
-
import { noJsxInNonJsxFile } from "./rules/no-jsx-in-non-jsx-file.
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { callArgumentsLength } from "./rules/call-arguments-length.ts";
|
|
2
|
+
import { noInstanceofBuiltin } from "./rules/no-instanceof-builtin.ts";
|
|
3
|
+
import { noJsxInNonJsxFile } from "./rules/no-jsx-in-non-jsx-file.ts";
|
|
4
|
+
import { noNestedClass } from "./rules/no-nested-class.ts";
|
|
5
|
+
import { noNestedFunction } from "./rules/no-nested-function.ts";
|
|
6
|
+
import { noRestrictedLoops } from "./rules/no-restricted-loops.ts";
|
|
7
|
+
import { noTopLevelArrowFunction } from "./rules/no-top-level-arrow-function.ts";
|
|
8
|
+
import { noUnnecessaryTemplateString } from "./rules/no-unnecessary-template-string.ts";
|
|
6
9
|
|
|
7
10
|
export const rules = {
|
|
8
11
|
[callArgumentsLength.name]: callArgumentsLength.rule,
|
|
9
12
|
[noInstanceofBuiltin.name]: noInstanceofBuiltin.rule,
|
|
10
13
|
[noJsxInNonJsxFile.name]: noJsxInNonJsxFile.rule,
|
|
14
|
+
[noNestedClass.name]: noNestedClass.rule,
|
|
15
|
+
[noNestedFunction.name]: noNestedFunction.rule,
|
|
11
16
|
[noRestrictedLoops.name]: noRestrictedLoops.rule,
|
|
17
|
+
[noTopLevelArrowFunction.name]: noTopLevelArrowFunction.rule,
|
|
12
18
|
[noUnnecessaryTemplateString.name]: noUnnecessaryTemplateString.rule,
|
|
13
19
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Rule } from "eslint";
|
|
2
2
|
import type { CallExpression, NewExpression } from "estree";
|
|
3
|
-
import { getRuleName } from "../utils.
|
|
3
|
+
import { getRuleName } from "../utils.ts";
|
|
4
4
|
|
|
5
5
|
// TODO: If https://github.com/sindresorhus/eslint-plugin-unicorn/issues/1356 is implemented, migrate this rule to `eslint-plugin-unicorn`
|
|
6
6
|
const name = getRuleName(import.meta.url);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Rule } from "eslint";
|
|
2
|
-
import { getRuleName } from "../utils.
|
|
2
|
+
import { getRuleName } from "../utils.ts";
|
|
3
3
|
|
|
4
4
|
// TODO: If https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2452 is accepted, migrate this rule to `eslint-plugin-unicorn`
|
|
5
5
|
const name = getRuleName(import.meta.url);
|
|
@@ -15,6 +15,9 @@ const rule: Rule.RuleModule = {
|
|
|
15
15
|
create: (context) => {
|
|
16
16
|
let builtins: Set<string> | undefined = undefined;
|
|
17
17
|
return {
|
|
18
|
+
// ESLint visit the Node from root to leaf. The Program Node is the root.
|
|
19
|
+
// Therefore, Program will be called before BinaryExpression.
|
|
20
|
+
// https://eslint.org/docs/latest/extend/code-path-analysis
|
|
18
21
|
Program: (node) => {
|
|
19
22
|
const scope = context.sourceCode.getScope(node);
|
|
20
23
|
builtins = new Set([
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { test } from "
|
|
2
|
-
import { noJsxInNonJsxFile } from "./no-jsx-in-non-jsx-file.
|
|
1
|
+
import { test } from "@fenge/dev-utils";
|
|
2
|
+
import { noJsxInNonJsxFile } from "./no-jsx-in-non-jsx-file.ts";
|
|
3
3
|
|
|
4
4
|
const codes = [
|
|
5
5
|
"const Foo = () => <div></div>",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Rule } from "eslint";
|
|
2
2
|
import type { Node } from "estree";
|
|
3
|
-
import { getRuleName } from "../utils.
|
|
3
|
+
import { getRuleName } from "../utils.ts";
|
|
4
4
|
|
|
5
5
|
const name = getRuleName(import.meta.url);
|
|
6
6
|
const rule: Rule.RuleModule = {
|
|
@@ -13,12 +13,8 @@ const rule: Rule.RuleModule = {
|
|
|
13
13
|
},
|
|
14
14
|
},
|
|
15
15
|
create: (context) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
context.filename.endsWith(".tsx")
|
|
19
|
-
) {
|
|
20
|
-
return {};
|
|
21
|
-
}
|
|
16
|
+
// ignore jsx files
|
|
17
|
+
if (/\.[tj]sx$/.test(context.filename)) return {};
|
|
22
18
|
return {
|
|
23
19
|
":matches(JSXElement, JSXFragment)": (node: Node) => {
|
|
24
20
|
context.report({ node, messageId: `${name}/error` });
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { test } from "@fenge/dev-utils";
|
|
2
|
+
import { noNestedClass } from "./no-nested-class.ts";
|
|
3
|
+
|
|
4
|
+
const valid = [
|
|
5
|
+
"class Foo{}",
|
|
6
|
+
"export class Foo{}",
|
|
7
|
+
"export default class Foo{}",
|
|
8
|
+
"export default class {}",
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
const invalid = [
|
|
12
|
+
// nested
|
|
13
|
+
"if(true) class Foo{}",
|
|
14
|
+
"if(true) const foo = class {}",
|
|
15
|
+
"function foo(){class Foo{}}",
|
|
16
|
+
"function foo(){const foo = class {}}",
|
|
17
|
+
"function foo(){return class Foo{}}",
|
|
18
|
+
"function foo(){return class{}}",
|
|
19
|
+
|
|
20
|
+
// normal
|
|
21
|
+
"const Foo = class{}",
|
|
22
|
+
"let Foo = class Bar{}",
|
|
23
|
+
"let Foo; Foo = class{}",
|
|
24
|
+
"(class {})",
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
test({ valid, invalid, ...noNestedClass });
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
import type { Node } from "estree";
|
|
3
|
+
import { getRuleName } from "../utils.ts";
|
|
4
|
+
|
|
5
|
+
const name = getRuleName(import.meta.url);
|
|
6
|
+
const rule: Rule.RuleModule = {
|
|
7
|
+
meta: {
|
|
8
|
+
docs: {
|
|
9
|
+
description:
|
|
10
|
+
"Disallow nested class. Classes are expected to place at top level.",
|
|
11
|
+
},
|
|
12
|
+
messages: {
|
|
13
|
+
[`${name}/error`]:
|
|
14
|
+
"Disallow nested class. Classes are expected to place at top level.",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
create: (context) => {
|
|
18
|
+
const handle = (node: Node) =>
|
|
19
|
+
context.report({ node, messageId: `${name}/error` });
|
|
20
|
+
return {
|
|
21
|
+
// ClassDeclaration is only allowed when parent is Program, or parent is ExportNamedDeclaration, or parent is ExportDefaultDeclaration
|
|
22
|
+
"ClassDeclaration[parent.type!='Program'][parent.type!='ExportNamedDeclaration'][parent.type!='ExportDefaultDeclaration']":
|
|
23
|
+
handle,
|
|
24
|
+
// ClassExpression is only allowed when parent is ExportNamedDeclaration, or parent is ExportDefaultDeclaration
|
|
25
|
+
"ClassExpression[parent.type!='ExportNamedDeclaration'][parent.type!='ExportDefaultDeclaration']":
|
|
26
|
+
handle,
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const noNestedClass = { name, rule };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { test } from "@fenge/dev-utils";
|
|
2
|
+
import { noNestedFunction } from "./no-nested-function.ts";
|
|
3
|
+
|
|
4
|
+
const valid = [
|
|
5
|
+
// normal
|
|
6
|
+
"function foo(){}",
|
|
7
|
+
"const foo = () => {}",
|
|
8
|
+
|
|
9
|
+
// export
|
|
10
|
+
"export function foo() {}",
|
|
11
|
+
"export default function foo() {}",
|
|
12
|
+
"export default function() {}",
|
|
13
|
+
|
|
14
|
+
// class
|
|
15
|
+
"class Foo{bar(){}}",
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
const invalid = [
|
|
19
|
+
// normal
|
|
20
|
+
"Foo.prototype.bar = function(){}",
|
|
21
|
+
"Foo.prototype.bar = function bar(){}",
|
|
22
|
+
"const foo = function(){}",
|
|
23
|
+
"const foo = function foo(){}",
|
|
24
|
+
"let foo; foo = function(){}",
|
|
25
|
+
"let foo; foo = function foo(){}",
|
|
26
|
+
"(function(){})",
|
|
27
|
+
|
|
28
|
+
// nested
|
|
29
|
+
"const foo = () => {function bar(){}}",
|
|
30
|
+
"function foo() {function bar(){}}",
|
|
31
|
+
"function foo() {let bar = function(){}}",
|
|
32
|
+
"function foo() {let bar = function bar(){}}",
|
|
33
|
+
"if(true) function foo(){}",
|
|
34
|
+
|
|
35
|
+
// class
|
|
36
|
+
"class Foo{bar = function(){}}",
|
|
37
|
+
"class Foo{bar = function bar(){}}",
|
|
38
|
+
|
|
39
|
+
// object
|
|
40
|
+
"const foo = {bar: function() {}}",
|
|
41
|
+
"const foo = {bar: function bar() {}}",
|
|
42
|
+
"const foo = {bar() {}}", // disallow this case
|
|
43
|
+
|
|
44
|
+
// callback
|
|
45
|
+
"setTimeout(function(){},100)",
|
|
46
|
+
"setTimeout(function callback(){},100)",
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
test({ valid, invalid, ...noNestedFunction });
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
import type { Node } from "estree";
|
|
3
|
+
import { getRuleName } from "../utils.ts";
|
|
4
|
+
|
|
5
|
+
const name = getRuleName(import.meta.url);
|
|
6
|
+
const rule: Rule.RuleModule = {
|
|
7
|
+
meta: {
|
|
8
|
+
docs: {
|
|
9
|
+
description:
|
|
10
|
+
"Non top-level functions are expected to be arrow functions instead of function declarations.",
|
|
11
|
+
},
|
|
12
|
+
messages: {
|
|
13
|
+
[`${name}/error`]:
|
|
14
|
+
"Non top-level functions are expected to be arrow functions instead of function declarations.",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
create: (context) => {
|
|
18
|
+
const handle = (node: Node) =>
|
|
19
|
+
context.report({ node, messageId: `${name}/error` });
|
|
20
|
+
return {
|
|
21
|
+
// FunctionDeclaration is only allowed when parent is Program, or parent is ExportNamedDeclaration, or parent is ExportDefaultDeclaration
|
|
22
|
+
// function foo(){}
|
|
23
|
+
"FunctionDeclaration[parent.type!='Program'][parent.type!='ExportNamedDeclaration'][parent.type!='ExportDefaultDeclaration']":
|
|
24
|
+
handle,
|
|
25
|
+
// FunctionExpression is only allowed when parent is MethodDefinition
|
|
26
|
+
// function (){}
|
|
27
|
+
"FunctionExpression[parent.type!='MethodDefinition']": handle,
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const noNestedFunction = { name, rule };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { test } from "
|
|
2
|
-
import { noRestrictedLoops } from "./no-restricted-loops.
|
|
1
|
+
import { test } from "@fenge/dev-utils";
|
|
2
|
+
import { noRestrictedLoops } from "./no-restricted-loops.ts";
|
|
3
3
|
|
|
4
4
|
const valid = ["for(const bar of foo) {}", "while(condition){}"];
|
|
5
5
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Rule } from "eslint";
|
|
2
2
|
import type { Node } from "estree";
|
|
3
|
-
import { getRuleName } from "../utils.
|
|
3
|
+
import { getRuleName } from "../utils.ts";
|
|
4
4
|
|
|
5
5
|
// TODO: If https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2453 is accepted, migrate this rule to `eslint-plugin-unicorn`
|
|
6
6
|
const name = getRuleName(import.meta.url);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { test } from "@fenge/dev-utils";
|
|
2
|
+
import { noTopLevelArrowFunction } from "./no-top-level-arrow-function.ts";
|
|
3
|
+
|
|
4
|
+
const valid = [
|
|
5
|
+
"function foo(){}",
|
|
6
|
+
"const foo = function(){}",
|
|
7
|
+
"const foo = function foo(){}",
|
|
8
|
+
"if(true) const foo = () => {\n}",
|
|
9
|
+
|
|
10
|
+
// allow one-line function
|
|
11
|
+
"let foo = () => ''",
|
|
12
|
+
"let foo = () => [\n]",
|
|
13
|
+
"let foo = () => ({})",
|
|
14
|
+
"const foo = () => ({})",
|
|
15
|
+
"let foo; foo = () => ({})",
|
|
16
|
+
"export const foo = () => ({})",
|
|
17
|
+
"export let foo = () => ({})",
|
|
18
|
+
"export default () => ({})",
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
const invalid = [
|
|
22
|
+
"let foo = () => {}",
|
|
23
|
+
"const foo = () => {}",
|
|
24
|
+
"let foo = () => {\n}",
|
|
25
|
+
"const foo = () => {\n}",
|
|
26
|
+
"let foo; foo = () => {\n}",
|
|
27
|
+
"export const foo = () => {\n}",
|
|
28
|
+
"export let foo = () => {\n}",
|
|
29
|
+
"export default () => {\n}",
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
test({ valid, invalid, ...noTopLevelArrowFunction });
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
import type { ArrowFunctionExpression } from "estree";
|
|
3
|
+
import { getRuleName } from "../utils.ts";
|
|
4
|
+
|
|
5
|
+
const name = getRuleName(import.meta.url);
|
|
6
|
+
const rule: Rule.RuleModule = {
|
|
7
|
+
meta: {
|
|
8
|
+
docs: {
|
|
9
|
+
description:
|
|
10
|
+
"Top-level functions are expected to be function declarations instead of arrow functions.",
|
|
11
|
+
},
|
|
12
|
+
messages: {
|
|
13
|
+
[`${name}/error`]:
|
|
14
|
+
"Top-level functions are expected to be function declarations instead of arrow functions.",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
create: (context) => {
|
|
18
|
+
const handle = (node: ArrowFunctionExpression) => {
|
|
19
|
+
if (node.body.type === "BlockStatement") {
|
|
20
|
+
context.report({ node, messageId: `${name}/error` });
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
"VariableDeclaration[parent.type='Program'] > VariableDeclarator > ArrowFunctionExpression":
|
|
25
|
+
handle,
|
|
26
|
+
"ExpressionStatement[parent.type='Program'] > AssignmentExpression > ArrowFunctionExpression":
|
|
27
|
+
handle,
|
|
28
|
+
"ExportNamedDeclaration > VariableDeclaration > VariableDeclarator > ArrowFunctionExpression":
|
|
29
|
+
handle,
|
|
30
|
+
"ExportDefaultDeclaration > ArrowFunctionExpression": handle,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const noTopLevelArrowFunction = { name, rule };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { test } from "
|
|
2
|
-
import { noUnnecessaryTemplateString } from "./no-unnecessary-template-string.
|
|
1
|
+
import { test } from "@fenge/dev-utils";
|
|
2
|
+
import { noUnnecessaryTemplateString } from "./no-unnecessary-template-string.ts";
|
|
3
3
|
|
|
4
4
|
const valid = [
|
|
5
5
|
"'abc'",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Rule } from "eslint";
|
|
2
|
-
import { getRuleName } from "../utils.
|
|
2
|
+
import { getRuleName } from "../utils.ts";
|
|
3
3
|
|
|
4
4
|
// TODO deprecate this rule if https://github.com/sindresorhus/eslint-plugin-unicorn/issues/71 is implemented.
|
|
5
5
|
const name = getRuleName(import.meta.url);
|
package/src/test.spec.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
import { describe, it } from "node:test";
|
|
3
|
-
import { RuleTester, type Rule } from "eslint";
|
|
4
|
-
|
|
5
|
-
export type TestCase = string | { code: string; filename?: string };
|
|
6
|
-
|
|
7
|
-
const tester = new RuleTester({
|
|
8
|
-
parser: createRequire(import.meta.url).resolve("@typescript-eslint/parser"),
|
|
9
|
-
parserOptions: { ecmaVersion: "latest", sourceType: "module" },
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
export async function test({
|
|
13
|
-
name,
|
|
14
|
-
rule,
|
|
15
|
-
valid,
|
|
16
|
-
invalid,
|
|
17
|
-
errors = 1,
|
|
18
|
-
}: {
|
|
19
|
-
name: string;
|
|
20
|
-
rule: Rule.RuleModule;
|
|
21
|
-
valid: TestCase[];
|
|
22
|
-
invalid: TestCase[];
|
|
23
|
-
errors?: number;
|
|
24
|
-
}) {
|
|
25
|
-
await describe(name, async () => {
|
|
26
|
-
await Promise.all(
|
|
27
|
-
valid.map(async (testCase) => {
|
|
28
|
-
await it(JSON.stringify(testCase), () => {
|
|
29
|
-
tester.run(name, rule, {
|
|
30
|
-
valid: [testCase],
|
|
31
|
-
invalid: [],
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
}),
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
await Promise.all(
|
|
38
|
-
invalid.map(async (testCase) => {
|
|
39
|
-
await it(JSON.stringify(testCase), () => {
|
|
40
|
-
const code = typeof testCase === "string" ? testCase : testCase.code;
|
|
41
|
-
const filename =
|
|
42
|
-
typeof testCase === "string" ? undefined : testCase.filename;
|
|
43
|
-
tester.run(name, rule, {
|
|
44
|
-
valid: [],
|
|
45
|
-
invalid: [{ code, errors, filename }],
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
}),
|
|
49
|
-
);
|
|
50
|
-
});
|
|
51
|
-
}
|