@o3r/eslint-plugin 11.6.0-prerelease.0 → 11.6.0-prerelease.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +22 -21
- package/schematics/ng-add/index.d.ts.map +1 -1
- package/src/index.js +4 -5
- package/src/public_api.d.ts +3 -0
- package/src/public_api.js +1 -0
- package/src/rules/json/json-dependency-versions-harmonize/json-dependency-versions-harmonize.d.ts +3 -2
- package/src/rules/json/json-dependency-versions-harmonize/json-dependency-versions-harmonize.js +60 -60
- package/src/rules/json/json-dependency-versions-harmonize/version-harmonize.js +1 -1
- package/src/rules/json/utils.js +2 -2
- package/src/rules/template/no-inner-html/no-inner-html.d.ts +1 -1
- package/src/rules/template/no-inner-html/no-inner-html.js +30 -31
- package/src/rules/template/template-async-number-limitation/template-async-number-limitation.d.ts +2 -2
- package/src/rules/template/template-async-number-limitation/template-async-number-limitation.js +24 -24
- package/src/rules/template/utils.js +3 -3
- package/src/rules/typescript/matching-configuration-name/matching-configuration-name.d.ts +1 -1
- package/src/rules/typescript/matching-configuration-name/matching-configuration-name.js +40 -40
- package/src/rules/typescript/no-folder-import-for-module/no-folder-import-for-module.d.ts +1 -1
- package/src/rules/typescript/no-folder-import-for-module/no-folder-import-for-module.js +28 -24
- package/src/rules/typescript/no-multiple-type-configuration-property/no-multiple-type-configuration-property.d.ts +1 -1
- package/src/rules/typescript/no-multiple-type-configuration-property/no-multiple-type-configuration-property.js +3 -5
- package/src/rules/typescript/o3r-categories-tags/o3r-categories-tags.d.ts +1 -1
- package/src/rules/typescript/o3r-categories-tags/o3r-categories-tags.js +82 -82
- package/src/rules/typescript/o3r-widget-tags/o3r-widget-tags.d.ts +1 -1
- package/src/rules/typescript/o3r-widget-tags/o3r-widget-tags.js +142 -142
- package/src/rules/utils.d.ts +1 -1
- package/src/rules/utils.js +4 -7
- package/src/rules/yaml/utils.js +2 -2
- package/src/rules/yaml/yarnrc-package-extensions-harmonize/yarnrc-package-extensions-harmonize.d.ts +2 -2
- package/src/rules/yaml/yarnrc-package-extensions-harmonize/yarnrc-package-extensions-harmonize.js +45 -45
@@ -1,2 +1,2 @@
|
|
1
|
-
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"error" | "indexFile", [], import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
1
|
+
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"error" | "indexFile", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
2
2
|
export default _default;
|
@@ -20,30 +20,31 @@ exports.default = (0, utils_1.createRule)({
|
|
20
20
|
},
|
21
21
|
defaultOptions: [],
|
22
22
|
create: (context) => {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
const
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
fix: !indexFileExist ? undefined : (fixer) => {
|
23
|
+
const rule = (node) => {
|
24
|
+
const importedModules = node.specifiers.filter((specifier) => specifier.local.name.endsWith('Module'));
|
25
|
+
const importPath = node.source.value?.toString();
|
26
|
+
if (importedModules.length > 0 && importPath && importPath.startsWith('.') && !importPath.endsWith('.module') && !importPath.endsWith('index')) {
|
27
|
+
const dirname = path.dirname(context.filename);
|
28
|
+
const importTarget = path.resolve(dirname, importPath);
|
29
|
+
if (!fs.existsSync(importTarget) || !fs.statSync(importTarget).isDirectory()) {
|
30
|
+
return;
|
31
|
+
}
|
32
|
+
const indexPath = path.resolve(importTarget, 'index.ts');
|
33
|
+
const indexFileExist = fs.existsSync(indexPath);
|
34
|
+
const newIndexFilePath = path.join(importPath, 'index')
|
35
|
+
.replace(/[/\\]/g, '/')
|
36
|
+
.replace(/^([^.])/, './$1');
|
37
|
+
context.report({
|
38
|
+
node,
|
39
|
+
messageId: 'error',
|
40
|
+
fix: indexFileExist
|
41
|
+
? (fixer) => {
|
43
42
|
return fixer.replaceText(node.source, node.source.raw
|
44
43
|
.replace(importPath, newIndexFilePath));
|
45
|
-
}
|
46
|
-
|
44
|
+
}
|
45
|
+
: undefined,
|
46
|
+
suggest: indexFileExist
|
47
|
+
? [
|
47
48
|
{
|
48
49
|
messageId: 'indexFile',
|
49
50
|
fix: (fixer) => {
|
@@ -55,9 +56,12 @@ exports.default = (0, utils_1.createRule)({
|
|
55
56
|
}
|
56
57
|
}
|
57
58
|
]
|
58
|
-
|
59
|
-
}
|
59
|
+
: undefined
|
60
|
+
});
|
60
61
|
}
|
61
62
|
};
|
63
|
+
return {
|
64
|
+
ImportDeclaration: rule
|
65
|
+
};
|
62
66
|
}
|
63
67
|
});
|
@@ -1,5 +1,5 @@
|
|
1
1
|
export interface NoMultipleTypeConfigurationPropertyOption {
|
2
2
|
supportedInterfaceNames?: string[];
|
3
3
|
}
|
4
|
-
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"
|
4
|
+
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"error" | "suggestion", [Required<NoMultipleTypeConfigurationPropertyOption>, ...any[]], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
5
5
|
export default _default;
|
@@ -2,7 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const utils_1 = require("@typescript-eslint/utils");
|
4
4
|
const utils_2 = require("../../utils");
|
5
|
-
const separatorRegExp = /\s*[
|
5
|
+
const separatorRegExp = /\s*[&|]\s*/;
|
6
6
|
exports.default = (0, utils_2.createRule)({
|
7
7
|
name: 'no-multiple-type-configuration-property',
|
8
8
|
meta: {
|
@@ -35,14 +35,14 @@ exports.default = (0, utils_2.createRule)({
|
|
35
35
|
}],
|
36
36
|
create: (context, [options]) => {
|
37
37
|
const supportedInterfaceNames = options.supportedInterfaceNames;
|
38
|
-
const sourceCode = context
|
38
|
+
const { sourceCode } = context;
|
39
39
|
const rule = (node) => {
|
40
40
|
const interfaceDeclNode = node.parent?.parent?.parent?.parent;
|
41
41
|
if (!(0, utils_2.isExtendingConfiguration)(interfaceDeclNode, supportedInterfaceNames)) {
|
42
42
|
return; // Not in a configuration interface
|
43
43
|
}
|
44
44
|
if (node.types.every((type) => type.type === utils_1.TSESTree.AST_NODE_TYPES.TSLiteralType && type.literal.type === utils_1.TSESTree.AST_NODE_TYPES.Literal)
|
45
|
-
&&
|
45
|
+
&& new Set(node.types.map((literalType) => typeof literalType.literal.value)).size === 1) {
|
46
46
|
return; // Only the same literal type
|
47
47
|
}
|
48
48
|
const text = sourceCode.getText(node);
|
@@ -61,9 +61,7 @@ exports.default = (0, utils_2.createRule)({
|
|
61
61
|
});
|
62
62
|
};
|
63
63
|
return {
|
64
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
65
64
|
TSUnionType: rule,
|
66
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
67
65
|
TSIntersectionType: rule
|
68
66
|
};
|
69
67
|
}
|
@@ -3,5 +3,5 @@ export interface O3rCategoriesTagsRuleOption {
|
|
3
3
|
globalConfigCategories?: string[];
|
4
4
|
}
|
5
5
|
type Messages = 'alreadyDefined' | 'undefinedCategory' | 'onlyOneCategoryAllowed' | 'notInConfigurationInterface' | 'suggestReplaceO3rCategory';
|
6
|
-
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<Messages, readonly [O3rCategoriesTagsRuleOption, ...any[]], import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
6
|
+
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<Messages, readonly [O3rCategoriesTagsRuleOption, ...any[]], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
7
7
|
export default _default;
|
@@ -45,92 +45,92 @@ exports.default = (0, utils_1.createRule)({
|
|
45
45
|
}],
|
46
46
|
create: (context, [options]) => {
|
47
47
|
const globalConfigCategories = new Set(options.globalConfigCategories);
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
48
|
+
const ruleForProperties = (node) => {
|
49
|
+
const { sourceCode } = context;
|
50
|
+
const comment = (0, utils_1.getNodeComment)(node, sourceCode);
|
51
|
+
if (!comment || comment.value.length === 0) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
const { loc, value: docText } = comment;
|
55
|
+
const categories = Array.from(docText.matchAll(/@o3rCategory (\w+)/g)).map((match) => match[1]);
|
56
|
+
if (categories.length === 0) {
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
else if (categories.length > 1) {
|
60
|
+
return context.report({
|
61
|
+
messageId: 'onlyOneCategoryAllowed',
|
62
|
+
node,
|
63
|
+
loc
|
64
|
+
});
|
65
|
+
}
|
66
|
+
const category = categories[0];
|
67
|
+
const interfaceDeclNode = node.parent?.parent;
|
68
|
+
if (!(0, utils_1.isExtendingConfiguration)(interfaceDeclNode, options.supportedInterfaceNames)) {
|
69
|
+
return context.report({
|
70
|
+
messageId: 'notInConfigurationInterface',
|
71
|
+
node,
|
72
|
+
loc
|
73
|
+
});
|
74
|
+
}
|
75
|
+
const interfaceComment = (0, utils_1.getNodeComment)(interfaceDeclNode, sourceCode);
|
76
|
+
const supportedO3rCategories = new Set(options.globalConfigCategories);
|
77
|
+
Array.from(interfaceComment?.value.matchAll(/@o3rCategories (\w+)/g) || []).forEach((match) => supportedO3rCategories.add(match[1]));
|
78
|
+
if (!supportedO3rCategories.has(category)) {
|
79
|
+
return context.report({
|
80
|
+
messageId: 'undefinedCategory',
|
81
|
+
node,
|
82
|
+
loc,
|
83
|
+
data: {
|
84
|
+
currentCategory: category,
|
85
|
+
supportedCategories: Array.from(supportedO3rCategories).join(', ')
|
86
|
+
},
|
87
|
+
suggest: Array.from(supportedO3rCategories).map((suggestedCategory) => ({
|
88
|
+
messageId: 'suggestReplaceO3rCategory',
|
85
89
|
data: {
|
86
90
|
currentCategory: category,
|
87
|
-
|
91
|
+
suggestedCategory
|
88
92
|
},
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
},
|
102
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
103
|
-
TSInterfaceDeclaration: (node) => {
|
104
|
-
const sourceCode = context.getSourceCode();
|
105
|
-
const comment = (0, utils_1.getNodeComment)(node, sourceCode);
|
106
|
-
if (!comment || !comment.value.length) {
|
107
|
-
return;
|
108
|
-
}
|
109
|
-
const { loc, value: docText } = comment;
|
110
|
-
const categories = Array.from(docText.matchAll(/@o3rCategories (\w+)/g)).map((match) => match[1]);
|
111
|
-
if (categories.length < 1) {
|
112
|
-
return;
|
113
|
-
}
|
114
|
-
if (!(0, utils_1.isExtendingConfiguration)(node, options.supportedInterfaceNames)) {
|
115
|
-
return context.report({
|
116
|
-
messageId: 'notInConfigurationInterface',
|
117
|
-
node,
|
118
|
-
loc
|
119
|
-
});
|
120
|
-
}
|
121
|
-
const alreadyDefined = categories.find((category) => globalConfigCategories.has(category));
|
122
|
-
if (alreadyDefined) {
|
123
|
-
return context.report({
|
124
|
-
messageId: 'alreadyDefined',
|
125
|
-
fix: (fixer) => fixer.replaceTextRange(comment.range, (0, utils_1.createCommentString)(comment.value.replace(new RegExp(`.*@o3rCategories ${alreadyDefined}.*\n`), ''))),
|
126
|
-
data: {
|
127
|
-
currentCategory: alreadyDefined
|
128
|
-
},
|
129
|
-
node,
|
130
|
-
loc
|
131
|
-
});
|
132
|
-
}
|
93
|
+
fix: (fixer) => {
|
94
|
+
return fixer.replaceTextRange(comment.range, (0, utils_1.createCommentString)(comment.value.replace(`@o3rCategory ${category}`, `@o3rCategory ${suggestedCategory}`)));
|
95
|
+
}
|
96
|
+
}))
|
97
|
+
});
|
98
|
+
}
|
99
|
+
};
|
100
|
+
const ruleForInterface = (node) => {
|
101
|
+
const { sourceCode } = context;
|
102
|
+
const comment = (0, utils_1.getNodeComment)(node, sourceCode);
|
103
|
+
if (!comment || comment.value.length === 0) {
|
104
|
+
return;
|
133
105
|
}
|
106
|
+
const { loc, value: docText } = comment;
|
107
|
+
const categories = Array.from(docText.matchAll(/@o3rCategories (\w+)/g)).map((match) => match[1]);
|
108
|
+
if (categories.length === 0) {
|
109
|
+
return;
|
110
|
+
}
|
111
|
+
if (!(0, utils_1.isExtendingConfiguration)(node, options.supportedInterfaceNames)) {
|
112
|
+
return context.report({
|
113
|
+
messageId: 'notInConfigurationInterface',
|
114
|
+
node,
|
115
|
+
loc
|
116
|
+
});
|
117
|
+
}
|
118
|
+
const alreadyDefined = categories.find((category) => globalConfigCategories.has(category));
|
119
|
+
if (alreadyDefined) {
|
120
|
+
return context.report({
|
121
|
+
messageId: 'alreadyDefined',
|
122
|
+
fix: (fixer) => fixer.replaceTextRange(comment.range, (0, utils_1.createCommentString)(comment.value.replace(new RegExp(`.*@o3rCategories ${alreadyDefined}.*\n`), ''))),
|
123
|
+
data: {
|
124
|
+
currentCategory: alreadyDefined
|
125
|
+
},
|
126
|
+
node,
|
127
|
+
loc
|
128
|
+
});
|
129
|
+
}
|
130
|
+
};
|
131
|
+
return {
|
132
|
+
TSPropertySignature: ruleForProperties,
|
133
|
+
TSInterfaceDeclaration: ruleForInterface
|
134
134
|
};
|
135
135
|
}
|
136
136
|
});
|
@@ -12,5 +12,5 @@ export interface O3rWidgetTagsRuleOption {
|
|
12
12
|
};
|
13
13
|
}
|
14
14
|
type O3rWidgetRuleErrorId = 'notInConfigurationInterface' | 'notSupportedType' | 'notSupportedParamForType' | 'invalidParamValueType' | 'noParamWithoutWidget' | 'onlyOneWidgetAllowed' | 'duplicatedParam' | 'requiredParamMissing' | 'suggestParamMissing' | 'suggestRemoveDuplicatedO3rWidget' | 'suggestRemoveDuplicatedO3rWidgetParam' | 'suggestAddO3rWidgetTag' | 'suggestReplaceO3rWidgetType';
|
15
|
-
declare const _default: TSESLint.RuleModule<O3rWidgetRuleErrorId, [Readonly<O3rWidgetTagsRuleOption>, ...any[]], TSESLint.RuleListener>;
|
15
|
+
declare const _default: TSESLint.RuleModule<O3rWidgetRuleErrorId, [Readonly<O3rWidgetTagsRuleOption>, ...any[]], unknown, TSESLint.RuleListener>;
|
16
16
|
export default _default;
|