@o3r/eslint-plugin 11.6.0-prerelease.6 → 11.6.0-prerelease.8
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
    
        package/package.json
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
              "name": "@o3r/eslint-plugin",
         | 
| 3 | 
            -
              "version": "11.6.0-prerelease. | 
| 3 | 
            +
              "version": "11.6.0-prerelease.8",
         | 
| 4 4 | 
             
              "publishConfig": {
         | 
| 5 5 | 
             
                "access": "public"
         | 
| 6 6 | 
             
              },
         | 
| @@ -24,7 +24,7 @@ | |
| 24 24 | 
             
                "build:builders": "tsc -b tsconfig.builders.json --pretty && yarn generate-cjs-manifest"
         | 
| 25 25 | 
             
              },
         | 
| 26 26 | 
             
              "dependencies": {
         | 
| 27 | 
            -
                "@typescript-eslint/utils": " | 
| 27 | 
            +
                "@typescript-eslint/utils": "~8.12.2",
         | 
| 28 28 | 
             
                "globby": "^11.1.0",
         | 
| 29 29 | 
             
                "semver": "^7.5.2",
         | 
| 30 30 | 
             
                "tslib": "^2.6.2",
         | 
| @@ -46,46 +46,46 @@ | |
| 46 46 | 
             
              },
         | 
| 47 47 | 
             
              "peerDependencies": {
         | 
| 48 48 | 
             
                "@angular-devkit/schematics": "~18.2.0",
         | 
| 49 | 
            -
                "@angular-eslint/template-parser": "~18. | 
| 50 | 
            -
                "@angular-eslint/test-utils": "~18. | 
| 49 | 
            +
                "@angular-eslint/template-parser": "~18.4.0",
         | 
| 50 | 
            +
                "@angular-eslint/test-utils": "~18.4.0",
         | 
| 51 51 | 
             
                "@angular/compiler": "~18.2.0",
         | 
| 52 | 
            -
                " | 
| 53 | 
            -
                "@typescript-eslint/eslint-plugin": "^7.0.1",
         | 
| 54 | 
            -
                "@typescript-eslint/parser": "^7.14.1",
         | 
| 55 | 
            -
                "@typescript-eslint/rule-tester": "^7.11.0",
         | 
| 56 | 
            -
                "eslint": "^8.57.0",
         | 
| 52 | 
            +
                "eslint": "^8.57.0 || ~9.14.0",
         | 
| 57 53 | 
             
                "jsonc-eslint-parser": "~2.4.0",
         | 
| 58 54 | 
             
                "yaml-eslint-parser": "^1.2.2"
         | 
| 59 55 | 
             
              },
         | 
| 60 56 | 
             
              "devDependencies": {
         | 
| 61 57 | 
             
                "@angular-devkit/core": "~18.2.0",
         | 
| 62 58 | 
             
                "@angular-devkit/schematics": "~18.2.0",
         | 
| 63 | 
            -
                "@angular-eslint/ | 
| 64 | 
            -
                "@angular-eslint/template-parser": "~18.3.0",
         | 
| 65 | 
            -
                "@angular-eslint/test-utils": "~18.3.0",
         | 
| 59 | 
            +
                "@angular-eslint/test-utils": "~18.4.0",
         | 
| 66 60 | 
             
                "@angular/compiler": "~18.2.0",
         | 
| 67 61 | 
             
                "@babel/core": "~7.26.0",
         | 
| 68 62 | 
             
                "@babel/preset-typescript": "~7.26.0",
         | 
| 69 63 | 
             
                "@compodoc/compodoc": "^1.1.19",
         | 
| 64 | 
            +
                "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
         | 
| 70 65 | 
             
                "@eslint/eslintrc": "^3.0.0",
         | 
| 71 66 | 
             
                "@nx/eslint-plugin": "~19.5.0",
         | 
| 72 67 | 
             
                "@nx/jest": "~19.5.0",
         | 
| 73 | 
            -
                "@o3r/build-helpers": "^11.6.0-prerelease. | 
| 74 | 
            -
                "@o3r/ | 
| 75 | 
            -
                "@ | 
| 68 | 
            +
                "@o3r/build-helpers": "^11.6.0-prerelease.8",
         | 
| 69 | 
            +
                "@o3r/eslint-config": "^11.6.0-prerelease.8",
         | 
| 70 | 
            +
                "@o3r/test-helpers": "^11.6.0-prerelease.8",
         | 
| 71 | 
            +
                "@stylistic/eslint-plugin": "~2.7.0",
         | 
| 76 72 | 
             
                "@types/eslint": "~9.6.0",
         | 
| 77 73 | 
             
                "@types/jest": "~29.5.2",
         | 
| 78 74 | 
             
                "@types/node": "^20.0.0",
         | 
| 79 75 | 
             
                "@types/semver": "^7.3.13",
         | 
| 80 | 
            -
                "@typescript-eslint/ | 
| 81 | 
            -
                "@typescript-eslint/ | 
| 82 | 
            -
                " | 
| 76 | 
            +
                "@typescript-eslint/parser": "~8.12.2",
         | 
| 77 | 
            +
                "@typescript-eslint/rule-tester": "~8.12.2",
         | 
| 78 | 
            +
                "angular-eslint": "~18.4.0",
         | 
| 83 79 | 
             
                "cpy-cli": "^5.0.0",
         | 
| 84 | 
            -
                "eslint": " | 
| 80 | 
            +
                "eslint": "~9.14.0",
         | 
| 81 | 
            +
                "eslint-plugin-import": "^2.31.0",
         | 
| 82 | 
            +
                "eslint-plugin-import-newlines": "^1.4.0",
         | 
| 85 83 | 
             
                "eslint-plugin-jest": "~28.8.0",
         | 
| 86 | 
            -
                "eslint-plugin-jsdoc": "~ | 
| 84 | 
            +
                "eslint-plugin-jsdoc": "~50.2.0",
         | 
| 87 85 | 
             
                "eslint-plugin-prefer-arrow": "~1.2.3",
         | 
| 88 | 
            -
                "eslint-plugin-unicorn": "^ | 
| 86 | 
            +
                "eslint-plugin-unicorn": "^56.0.0",
         | 
| 87 | 
            +
                "eslint-plugin-unused-imports": "^4.1.4",
         | 
| 88 | 
            +
                "globals": "^15.9.0",
         | 
| 89 89 | 
             
                "jest": "~29.7.0",
         | 
| 90 90 | 
             
                "jest-junit": "~16.0.0",
         | 
| 91 91 | 
             
                "jsonc-eslint-parser": "~2.4.0",
         | 
| @@ -96,6 +96,7 @@ | |
| 96 96 | 
             
                "ts-jest": "~29.2.0",
         | 
| 97 97 | 
             
                "type-fest": "^4.10.2",
         | 
| 98 98 | 
             
                "typescript": "~5.5.4",
         | 
| 99 | 
            +
                "typescript-eslint": "~8.12.2",
         | 
| 99 100 | 
             
                "yaml-eslint-parser": "^1.2.2"
         | 
| 100 101 | 
             
              },
         | 
| 101 102 | 
             
              "schematics": "./collection.json",
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":" | 
| 1 | 
            +
            {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../schematics/ng-add/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,IAAI,EACL,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAG5B"}
         | 
    
        package/src/index.js
    CHANGED
    
    | @@ -1,15 +1,14 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 2 | 
             
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            const no_folder_import_for_module_1 = require("./rules/typescript/no-folder-import-for-module/no-folder-import-for-module");
         | 
| 5 | 
            -
            const o3r_widget_tags_1 = require("./rules/typescript/o3r-widget-tags/o3r-widget-tags");
         | 
| 3 | 
            +
            const json_dependency_versions_harmonize_1 = require("./rules/json/json-dependency-versions-harmonize/json-dependency-versions-harmonize");
         | 
| 6 4 | 
             
            const no_inner_html_1 = require("./rules/template/no-inner-html/no-inner-html");
         | 
| 7 5 | 
             
            const template_async_number_limitation_1 = require("./rules/template/template-async-number-limitation/template-async-number-limitation");
         | 
| 8 | 
            -
            const json_dependency_versions_harmonize_1 = require("./rules/json/json-dependency-versions-harmonize/json-dependency-versions-harmonize");
         | 
| 9 | 
            -
            const yarnrc_package_extensions_harmonize_1 = require("./rules/yaml/yarnrc-package-extensions-harmonize/yarnrc-package-extensions-harmonize");
         | 
| 10 6 | 
             
            const matching_configuration_name_1 = require("./rules/typescript/matching-configuration-name/matching-configuration-name");
         | 
| 7 | 
            +
            const no_folder_import_for_module_1 = require("./rules/typescript/no-folder-import-for-module/no-folder-import-for-module");
         | 
| 11 8 | 
             
            const no_multiple_type_configuration_property_1 = require("./rules/typescript/no-multiple-type-configuration-property/no-multiple-type-configuration-property");
         | 
| 12 9 | 
             
            const o3r_categories_tags_1 = require("./rules/typescript/o3r-categories-tags/o3r-categories-tags");
         | 
| 10 | 
            +
            const o3r_widget_tags_1 = require("./rules/typescript/o3r-widget-tags/o3r-widget-tags");
         | 
| 11 | 
            +
            const yarnrc_package_extensions_harmonize_1 = require("./rules/yaml/yarnrc-package-extensions-harmonize/yarnrc-package-extensions-harmonize");
         | 
| 13 12 | 
             
            module.exports = {
         | 
| 14 13 | 
             
                rules: {
         | 
| 15 14 | 
             
                    'no-folder-import-for-module': no_folder_import_for_module_1.default,
         | 
    
        package/src/public_api.d.ts
    CHANGED
    
    | @@ -1 +1,4 @@ | |
| 1 1 | 
             
            export * from './index';
         | 
| 2 | 
            +
            export type { NoMultipleTypeConfigurationPropertyOption } from './rules/typescript/no-multiple-type-configuration-property/no-multiple-type-configuration-property';
         | 
| 3 | 
            +
            export type { O3rCategoriesTagsRuleOption } from './rules/typescript/o3r-categories-tags/o3r-categories-tags';
         | 
| 4 | 
            +
            export type { O3rWidgetTagsRuleOption } from './rules/typescript/o3r-widget-tags/o3r-widget-tags';
         | 
    
        package/src/public_api.js
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 2 | 
             
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 3 3 | 
             
            const tslib_1 = require("tslib");
         | 
| 4 | 
            +
            // eslint-disable-next-line import/export -- needed to export the eslint plugin in the same format as in index.ts
         | 
| 4 5 | 
             
            tslib_1.__exportStar(require("./index"), exports);
         | 
    
        package/src/rules/json/json-dependency-versions-harmonize/json-dependency-versions-harmonize.d.ts
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            /** Options for the ESLint rule @o3r/json-dependency-versions-harmonize */
         | 
| 2 | 
            +
            export interface VersionsHarmonizeOptions {
         | 
| 2 3 | 
             
                /** List of package name to ignore when determining the dependencies versions */
         | 
| 3 4 | 
             
                ignoredPackages?: string[];
         | 
| 4 5 | 
             
                /** List of dependencies to ignore */
         | 
| @@ -15,5 +16,5 @@ interface Options { | |
| 15 16 | 
             
                /** Align the Engines versions */
         | 
| 16 17 | 
             
                alignEngines?: boolean;
         | 
| 17 18 | 
             
            }
         | 
| 18 | 
            -
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"error" | "versionUpdate", [ | 
| 19 | 
            +
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"error" | "versionUpdate", [VersionsHarmonizeOptions, ...any[]], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
         | 
| 19 20 | 
             
            export default _default;
         | 
    
        package/src/rules/json/json-dependency-versions-harmonize/json-dependency-versions-harmonize.js
    CHANGED
    
    | @@ -78,74 +78,74 @@ exports.default = (0, utils_1.createRule)({ | |
| 78 78 | 
             
                    const workspace = (0, version_harmonize_1.findWorkspacePackageJsons)(dirname);
         | 
| 79 79 | 
             
                    const dependencyTypesWithInterest = [...options.dependencyTypes, ...(options.alignEngines ? [enginesField] : [])];
         | 
| 80 80 | 
             
                    const bestRanges = workspace && (0, version_harmonize_1.getBestRanges)(dependencyTypesWithInterest, workspace.packages.filter(({ content }) => !content.name || !options.ignoredPackages.includes(content.name)));
         | 
| 81 | 
            -
                    const ignoredDependencies = options.ignoredDependencies.map((dep) => new RegExp(dep.replace(/[ | 
| 81 | 
            +
                    const ignoredDependencies = options.ignoredDependencies.map((dep) => new RegExp(dep.replace(/[$()+.?[\\\]^{|}]/g, '\\$&').replace(/\*/g, '.*')));
         | 
| 82 82 | 
             
                    const dependencyTypes = [...dependencyTypesWithInterest, ...(options.alignResolutions ? resolutionsFields : [])];
         | 
| 83 83 | 
             
                    if (parserServices.isJSON) {
         | 
| 84 | 
            -
                         | 
| 85 | 
            -
                             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
                                         | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
                                             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
                                                     | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
                                                     | 
| 102 | 
            -
                                                     | 
| 103 | 
            -
             | 
| 104 | 
            -
                                                         | 
| 105 | 
            -
                                                         | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
                                                         | 
| 111 | 
            -
             | 
| 112 | 
            -
                                                            {
         | 
| 113 | 
            -
                                                                 | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 84 | 
            +
                        const rule = (node) => {
         | 
| 85 | 
            +
                            if (node.expression.type === 'JSONObjectExpression') {
         | 
| 86 | 
            +
                                const deps = node.expression.properties
         | 
| 87 | 
            +
                                    .filter(({ key }) => dependencyTypes.includes(key.type === 'JSONLiteral' ? key.value.toString() : key.name));
         | 
| 88 | 
            +
                                if (deps.length > 0 && bestRanges) {
         | 
| 89 | 
            +
                                    deps
         | 
| 90 | 
            +
                                        .map((depGroup) => depGroup.value)
         | 
| 91 | 
            +
                                        .filter((depGroup) => depGroup.type === 'JSONObjectExpression')
         | 
| 92 | 
            +
                                        .forEach((depGroup) => {
         | 
| 93 | 
            +
                                        const report = (name, resolvedName, dep, range, bestRange) => {
         | 
| 94 | 
            +
                                            if (bestRange && bestRange !== range) {
         | 
| 95 | 
            +
                                                if (!options.alignPeerDependencies && depGroup.parent.type === 'JSONProperty' && range
         | 
| 96 | 
            +
                                                    && (depGroup.parent.key.type === 'JSONLiteral' ? depGroup.parent.key.value.toString() : depGroup.parent.key.name) === 'peerDependencies'
         | 
| 97 | 
            +
                                                    && semver.subset(bestRange, range)) {
         | 
| 98 | 
            +
                                                    return;
         | 
| 99 | 
            +
                                                }
         | 
| 100 | 
            +
                                                context.report({
         | 
| 101 | 
            +
                                                    loc: dep.value.loc,
         | 
| 102 | 
            +
                                                    messageId: 'error',
         | 
| 103 | 
            +
                                                    data: {
         | 
| 104 | 
            +
                                                        depName: name,
         | 
| 105 | 
            +
                                                        version: bestRange,
         | 
| 106 | 
            +
                                                        packageJsonFile: bestRanges[resolvedName].path
         | 
| 107 | 
            +
                                                    },
         | 
| 108 | 
            +
                                                    fix: (fixer) => fixer.replaceTextRange(dep.value.range, `"${bestRange}"`),
         | 
| 109 | 
            +
                                                    suggest: [
         | 
| 110 | 
            +
                                                        {
         | 
| 111 | 
            +
                                                            messageId: 'versionUpdate',
         | 
| 112 | 
            +
                                                            data: {
         | 
| 113 | 
            +
                                                                version: bestRange
         | 
| 114 | 
            +
                                                            },
         | 
| 115 | 
            +
                                                            fix: (fixer) => fixer.replaceTextRange(dep.value.range, `"${bestRange}"`)
         | 
| 116 | 
            +
                                                        }
         | 
| 117 | 
            +
                                                    ]
         | 
| 118 | 
            +
                                                });
         | 
| 119 | 
            +
                                            }
         | 
| 120 | 
            +
                                        };
         | 
| 121 | 
            +
                                        depGroup.properties.forEach((dependencyNode) => {
         | 
| 122 | 
            +
                                            const isResolutionsField = options.alignResolutions && depGroup.parent.type === 'JSONProperty'
         | 
| 123 | 
            +
                                                && resolutionsFields.includes(depGroup.parent.key.type === 'JSONLiteral' ? depGroup.parent.key.value.toString() : depGroup.parent.key.name);
         | 
| 124 | 
            +
                                            const getNodeDetails = (dep) => {
         | 
| 125 | 
            +
                                                const name = dep.key.type === 'JSONLiteral' ? dep.key.value.toString() : dep.key.name;
         | 
| 126 | 
            +
                                                const nameParts = name.split('/');
         | 
| 127 | 
            +
                                                if (ignoredDependencies.some((ignore) => ignore.test(name))) {
         | 
| 128 | 
            +
                                                    return;
         | 
| 129 | 
            +
                                                }
         | 
| 130 | 
            +
                                                const range = dep.value.type === 'JSONLiteral' ? dep.value.value : (dep.value.type === 'JSONIdentifier' ? dep.value.name : undefined);
         | 
| 131 | 
            +
                                                if (!range && dep.value.type === 'JSONObjectExpression') {
         | 
| 132 | 
            +
                                                    return dep.value.properties
         | 
| 133 | 
            +
                                                        .forEach((prop) => getNodeDetails(prop));
         | 
| 121 134 | 
             
                                                }
         | 
| 135 | 
            +
                                                const resolutionSubNameIndex = isResolutionsField ? nameParts.findIndex((_, i) => !!bestRanges[nameParts.slice(nameParts.length - i).join('/')]) : -1;
         | 
| 136 | 
            +
                                                const resolvedName = resolutionSubNameIndex > -1 ? nameParts.slice(nameParts.length - resolutionSubNameIndex).join('/') : name;
         | 
| 137 | 
            +
                                                const bestRange = (0, version_harmonize_1.getBestRange)(range, bestRanges[resolvedName]?.range);
         | 
| 138 | 
            +
                                                report(name, resolvedName, dep, range, bestRange);
         | 
| 122 139 | 
             
                                            };
         | 
| 123 | 
            -
                                             | 
| 124 | 
            -
                                                const isResolutionsField = options.alignResolutions && depGroup.parent.type === 'JSONProperty' &&
         | 
| 125 | 
            -
                                                    resolutionsFields.includes(depGroup.parent.key.type === 'JSONLiteral' ? depGroup.parent.key.value.toString() : depGroup.parent.key.name);
         | 
| 126 | 
            -
                                                const getNodeDetails = (dep) => {
         | 
| 127 | 
            -
                                                    const name = dep.key.type === 'JSONLiteral' ? dep.key.value.toString() : dep.key.name;
         | 
| 128 | 
            -
                                                    const nameParts = name.split('/');
         | 
| 129 | 
            -
                                                    if (ignoredDependencies.some((ignore) => ignore.test(name))) {
         | 
| 130 | 
            -
                                                        return;
         | 
| 131 | 
            -
                                                    }
         | 
| 132 | 
            -
                                                    const range = dep.value.type === 'JSONLiteral' ? dep.value.value : (dep.value.type === 'JSONIdentifier' ? dep.value.name : undefined);
         | 
| 133 | 
            -
                                                    if (!range && dep.value.type === 'JSONObjectExpression') {
         | 
| 134 | 
            -
                                                        return dep.value.properties
         | 
| 135 | 
            -
                                                            .forEach((prop) => getNodeDetails(prop));
         | 
| 136 | 
            -
                                                    }
         | 
| 137 | 
            -
                                                    const resolutionSubNameIndex = isResolutionsField ? nameParts.findIndex((_, i) => !!bestRanges[nameParts.slice(nameParts.length - i).join('/')]) : -1;
         | 
| 138 | 
            -
                                                    const resolvedName = resolutionSubNameIndex > -1 ? nameParts.slice(nameParts.length - resolutionSubNameIndex).join('/') : name;
         | 
| 139 | 
            -
                                                    const bestRange = (0, version_harmonize_1.getBestRange)(range, bestRanges[resolvedName]?.range);
         | 
| 140 | 
            -
                                                    report(name, resolvedName, dep, range, bestRange);
         | 
| 141 | 
            -
                                                };
         | 
| 142 | 
            -
                                                getNodeDetails(dependencyNode);
         | 
| 143 | 
            -
                                            });
         | 
| 140 | 
            +
                                            getNodeDetails(dependencyNode);
         | 
| 144 141 | 
             
                                        });
         | 
| 145 | 
            -
                                    }
         | 
| 142 | 
            +
                                    });
         | 
| 146 143 | 
             
                                }
         | 
| 147 144 | 
             
                            }
         | 
| 148 145 | 
             
                        };
         | 
| 146 | 
            +
                        return {
         | 
| 147 | 
            +
                            JSONExpressionStatement: rule
         | 
| 148 | 
            +
                        };
         | 
| 149 149 | 
             
                    }
         | 
| 150 150 | 
             
                    return {};
         | 
| 151 151 | 
             
                }
         | 
| @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 2 | 
             
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 3 3 | 
             
            exports.getBestRanges = exports.getBestRange = exports.findWorkspacePackageJsons = void 0;
         | 
| 4 | 
            -
            const semver = require("semver");
         | 
| 5 4 | 
             
            const fs = require("node:fs");
         | 
| 6 5 | 
             
            const node_fs_1 = require("node:fs");
         | 
| 7 6 | 
             
            const node_path_1 = require("node:path");
         | 
| 8 7 | 
             
            const globby_1 = require("globby");
         | 
| 8 | 
            +
            const semver = require("semver");
         | 
| 9 9 | 
             
            /**
         | 
| 10 10 | 
             
             * Find the closest package.json file containing workspace definition in the parent directories
         | 
| 11 11 | 
             
             * @param directory Current directory to search for
         | 
    
        package/src/rules/json/utils.js
    CHANGED
    
    | @@ -15,7 +15,7 @@ function isJsoncParserServices(parserServices) { | |
| 15 15 | 
             
             * @param context Rule context
         | 
| 16 16 | 
             
             */
         | 
| 17 17 | 
             
            function getJsoncParserServices(context) {
         | 
| 18 | 
            -
                const parserService = context.parserServices;
         | 
| 18 | 
            +
                const parserService = context.sourceCode.parserServices;
         | 
| 19 19 | 
             
                if (!isJsoncParserServices(parserService)) {
         | 
| 20 20 | 
             
                    /*
         | 
| 21 21 | 
             
                     * The user needs to have configured "parser" in their eslint config and set it
         | 
| @@ -31,7 +31,7 @@ function getJsoncParserServices(context) { | |
| 31 31 | 
             
             * @param context
         | 
| 32 32 | 
             
             */
         | 
| 33 33 | 
             
            function ensureJsoncParser(context) {
         | 
| 34 | 
            -
                if (!(context.parserServices)) {
         | 
| 34 | 
            +
                if (!(context.sourceCode.parserServices)) {
         | 
| 35 35 | 
             
                    /*
         | 
| 36 36 | 
             
                     * The user needs to have configured "parser" in their eslint config and set it
         | 
| 37 37 | 
             
                     * to jsonc-eslint-parser
         | 
| @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            /** Rule Name */
         | 
| 2 2 | 
             
            export declare const name = "no-inner-html";
         | 
| 3 3 | 
             
            type Messages = 'error' | 'fix';
         | 
| 4 | 
            -
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<Messages, [], import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
         | 
| 4 | 
            +
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<Messages, [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
         | 
| 5 5 | 
             
            export default _default;
         | 
| @@ -1,19 +1,18 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 2 | 
             
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 3 3 | 
             
            exports.name = void 0;
         | 
| 4 | 
            -
            const utils_1 = require(" | 
| 5 | 
            -
            const utils_2 = require(" | 
| 4 | 
            +
            const utils_1 = require("../../utils");
         | 
| 5 | 
            +
            const utils_2 = require("../utils");
         | 
| 6 6 | 
             
            /** Rule Name */
         | 
| 7 7 | 
             
            exports.name = 'no-inner-html';
         | 
| 8 | 
            -
            exports.default = (0,  | 
| 8 | 
            +
            exports.default = (0, utils_1.createRule)({
         | 
| 9 9 | 
             
                name: exports.name,
         | 
| 10 10 | 
             
                defaultOptions: [],
         | 
| 11 11 | 
             
                meta: {
         | 
| 12 12 | 
             
                    type: 'problem',
         | 
| 13 13 | 
             
                    hasSuggestions: true,
         | 
| 14 14 | 
             
                    docs: {
         | 
| 15 | 
            -
                        description: 'Ensures that your template does not use innerHTML' | 
| 16 | 
            -
                        recommended: 'recommended'
         | 
| 15 | 
            +
                        description: 'Ensures that your template does not use innerHTML'
         | 
| 17 16 | 
             
                    },
         | 
| 18 17 | 
             
                    schema: [],
         | 
| 19 18 | 
             
                    messages: {
         | 
| @@ -24,34 +23,34 @@ exports.default = (0, utils_2.createRule)({ | |
| 24 23 | 
             
                },
         | 
| 25 24 | 
             
                create: (context) => {
         | 
| 26 25 | 
             
                    // To throw error if use without @angular-eslint/template-parser
         | 
| 27 | 
            -
                    (0,  | 
| 28 | 
            -
                     | 
| 29 | 
            -
                         | 
| 30 | 
            -
                         | 
| 31 | 
            -
                             | 
| 32 | 
            -
             | 
| 33 | 
            -
                                 | 
| 34 | 
            -
                                     | 
| 35 | 
            -
                                     | 
| 36 | 
            -
             | 
| 37 | 
            -
                                         | 
| 38 | 
            -
                                         | 
| 39 | 
            -
                                            column: innerHTMLAttribute.keySpan.end.col,
         | 
| 40 | 
            -
                                            line: innerHTMLAttribute.keySpan.end.line
         | 
| 41 | 
            -
                                        },
         | 
| 42 | 
            -
                                        start: {
         | 
| 43 | 
            -
                                            column: innerHTMLAttribute.keySpan.start.col,
         | 
| 44 | 
            -
                                            line: innerHTMLAttribute.keySpan.start.line
         | 
| 45 | 
            -
                                        }
         | 
| 26 | 
            +
                    (0, utils_2.getTemplateParserServices)(context);
         | 
| 27 | 
            +
                    const rule = (node) => {
         | 
| 28 | 
            +
                        const innerHTMLAttribute = node.attributes.find((a) => /innerhtml/i.test(a.name));
         | 
| 29 | 
            +
                        if (innerHTMLAttribute && innerHTMLAttribute.keySpan) {
         | 
| 30 | 
            +
                            context.report({
         | 
| 31 | 
            +
                                messageId: 'error',
         | 
| 32 | 
            +
                                loc: {
         | 
| 33 | 
            +
                                    column: innerHTMLAttribute.keySpan.start.col,
         | 
| 34 | 
            +
                                    line: innerHTMLAttribute.keySpan.start.line,
         | 
| 35 | 
            +
                                    end: {
         | 
| 36 | 
            +
                                        column: innerHTMLAttribute.keySpan.end.col,
         | 
| 37 | 
            +
                                        line: innerHTMLAttribute.keySpan.end.line
         | 
| 46 38 | 
             
                                    },
         | 
| 47 | 
            -
                                     | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
                                 | 
| 53 | 
            -
             | 
| 39 | 
            +
                                    start: {
         | 
| 40 | 
            +
                                        column: innerHTMLAttribute.keySpan.start.col,
         | 
| 41 | 
            +
                                        line: innerHTMLAttribute.keySpan.start.line
         | 
| 42 | 
            +
                                    }
         | 
| 43 | 
            +
                                },
         | 
| 44 | 
            +
                                fix: (fixer) => fixer.replaceTextRange([innerHTMLAttribute.keySpan.start.offset, innerHTMLAttribute.keySpan.end.offset], 'innerText'),
         | 
| 45 | 
            +
                                suggest: [{
         | 
| 46 | 
            +
                                        messageId: 'fix',
         | 
| 47 | 
            +
                                        fix: (fixer) => fixer.replaceTextRange([innerHTMLAttribute.keySpan.start.offset, innerHTMLAttribute.keySpan.end.offset], 'innerText')
         | 
| 48 | 
            +
                                    }]
         | 
| 49 | 
            +
                            });
         | 
| 54 50 | 
             
                        }
         | 
| 55 51 | 
             
                    };
         | 
| 52 | 
            +
                    return {
         | 
| 53 | 
            +
                        Element$1: rule
         | 
| 54 | 
            +
                    };
         | 
| 56 55 | 
             
                }
         | 
| 57 56 | 
             
            });
         | 
    
        package/src/rules/template/template-async-number-limitation/template-async-number-limitation.d.ts
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 | 
            -
            interface  | 
| 1 | 
            +
            export interface TemplateAsyncNumberLimitationOptions {
         | 
| 2 2 | 
             
                maximumAsyncOnTag: number;
         | 
| 3 3 | 
             
            }
         | 
| 4 4 | 
             
            /** Rule Name */
         | 
| 5 5 | 
             
            export declare const name = "template-async-number-limitation";
         | 
| 6 | 
            -
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"tooManyAsyncOnTag", [ | 
| 6 | 
            +
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"tooManyAsyncOnTag", [TemplateAsyncNumberLimitationOptions, ...any[]], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
         | 
| 7 7 | 
             
            export default _default;
         | 
    
        package/src/rules/template/template-async-number-limitation/template-async-number-limitation.js
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            "use strict";
         | 
| 2 2 | 
             
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 3 3 | 
             
            exports.name = void 0;
         | 
| 4 | 
            -
            const utils_1 = require(" | 
| 5 | 
            -
            const utils_2 = require(" | 
| 4 | 
            +
            const utils_1 = require("../../utils");
         | 
| 5 | 
            +
            const utils_2 = require("../utils");
         | 
| 6 6 | 
             
            /** Rule Name */
         | 
| 7 7 | 
             
            exports.name = 'template-async-number-limitation';
         | 
| 8 8 | 
             
            const defaultOptions = [{
         | 
| 9 9 | 
             
                    maximumAsyncOnTag: 5
         | 
| 10 10 | 
             
                }];
         | 
| 11 | 
            -
            exports.default = (0,  | 
| 11 | 
            +
            exports.default = (0, utils_1.createRule)({
         | 
| 12 12 | 
             
                name: exports.name,
         | 
| 13 13 | 
             
                meta: {
         | 
| 14 14 | 
             
                    type: 'problem',
         | 
| @@ -35,29 +35,29 @@ exports.default = (0, utils_2.createRule)({ | |
| 35 35 | 
             
                },
         | 
| 36 36 | 
             
                defaultOptions,
         | 
| 37 37 | 
             
                create: (context, [options]) => {
         | 
| 38 | 
            -
                    const parserServices = (0,  | 
| 38 | 
            +
                    const parserServices = (0, utils_2.getTemplateParserServices)(context);
         | 
| 39 39 | 
             
                    const asyncRegExp = /\| *async\b/g;
         | 
| 40 | 
            -
                     | 
| 41 | 
            -
                         | 
| 42 | 
            -
             | 
| 43 | 
            -
                             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
                             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
                             | 
| 50 | 
            -
                                 | 
| 51 | 
            -
                                 | 
| 52 | 
            -
                                     | 
| 53 | 
            -
                                     | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
                                    loc
         | 
| 58 | 
            -
                                });
         | 
| 59 | 
            -
                            }
         | 
| 40 | 
            +
                    const rule = ({ attributes, inputs, sourceSpan }) => {
         | 
| 41 | 
            +
                        const values = [
         | 
| 42 | 
            +
                            ...attributes.map(({ value }) => value),
         | 
| 43 | 
            +
                            ...inputs.map((attr) => attr.value.toString())
         | 
| 44 | 
            +
                        ];
         | 
| 45 | 
            +
                        const asyncNumber = values
         | 
| 46 | 
            +
                            .reduce((acc, value) => acc + (value.match(asyncRegExp)?.length ?? 0), 0);
         | 
| 47 | 
            +
                        if (asyncNumber > options.maximumAsyncOnTag) {
         | 
| 48 | 
            +
                            const loc = parserServices.convertNodeSourceSpanToLoc(sourceSpan);
         | 
| 49 | 
            +
                            context.report({
         | 
| 50 | 
            +
                                messageId: 'tooManyAsyncOnTag',
         | 
| 51 | 
            +
                                data: {
         | 
| 52 | 
            +
                                    asyncNumber,
         | 
| 53 | 
            +
                                    maximumAsyncOnTag: options.maximumAsyncOnTag
         | 
| 54 | 
            +
                                },
         | 
| 55 | 
            +
                                loc
         | 
| 56 | 
            +
                            });
         | 
| 60 57 | 
             
                        }
         | 
| 61 58 | 
             
                    };
         | 
| 59 | 
            +
                    return {
         | 
| 60 | 
            +
                        Element$1: rule
         | 
| 61 | 
            +
                    };
         | 
| 62 62 | 
             
                }
         | 
| 63 63 | 
             
            });
         | 
| @@ -8,15 +8,15 @@ exports.ensureTemplateParser = ensureTemplateParser; | |
| 8 8 | 
             
             * @param parserServices Parser services object
         | 
| 9 9 | 
             
             */
         | 
| 10 10 | 
             
            function isTemplateParserServices(parserServices) {
         | 
| 11 | 
            -
                return parserServices && (typeof parserServices.convertElementSourceSpanToLoc === 'function' | 
| 12 | 
            -
                    typeof parserServices.convertNodeSourceSpanToLoc === 'function');
         | 
| 11 | 
            +
                return parserServices && (typeof parserServices.convertElementSourceSpanToLoc === 'function'
         | 
| 12 | 
            +
                    || typeof parserServices.convertNodeSourceSpanToLoc === 'function');
         | 
| 13 13 | 
             
            }
         | 
| 14 14 | 
             
            /**
         | 
| 15 15 | 
             
             * Retrieve the template parser services object or throw if the invalid parser is used
         | 
| 16 16 | 
             
             * @param context Rule context
         | 
| 17 17 | 
             
             */
         | 
| 18 18 | 
             
            function getTemplateParserServices(context) {
         | 
| 19 | 
            -
                const parserService = context.parserServices;
         | 
| 19 | 
            +
                const parserService = context.sourceCode.parserServices;
         | 
| 20 20 | 
             
                if (!isTemplateParserServices(parserService)) {
         | 
| 21 21 | 
             
                    /*
         | 
| 22 22 | 
             
                     * The user needs to have configured "parser" in their eslint config and set it
         | 
| @@ -1,2 +1,2 @@ | |
| 1 | 
            -
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<" | 
| 1 | 
            +
            declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<"error" | "suggestion", [], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
         | 
| 2 2 | 
             
            export default _default;
         | 
| @@ -10,8 +10,8 @@ exports.default = (0, utils_2.createRule)({ | |
| 10 10 | 
             
                    fixable: 'code',
         | 
| 11 11 | 
             
                    type: 'problem',
         | 
| 12 12 | 
             
                    docs: {
         | 
| 13 | 
            -
                         | 
| 14 | 
            -
             | 
| 13 | 
            +
                        description: 'Ensures that the configuration interface name matches the first parameter of `computeItemIdentifier`'
         | 
| 14 | 
            +
                            + ' (or `computeConfigurationName`) used beside the configuration interface to expose its ID (as generated by the configuration module).'
         | 
| 15 15 | 
             
                    },
         | 
| 16 16 | 
             
                    schema: [],
         | 
| 17 17 | 
             
                    messages: {
         | 
| @@ -21,49 +21,49 @@ exports.default = (0, utils_2.createRule)({ | |
| 21 21 | 
             
                },
         | 
| 22 22 | 
             
                defaultOptions: [],
         | 
| 23 23 | 
             
                create: (context) => {
         | 
| 24 | 
            -
                     | 
| 25 | 
            -
                         | 
| 26 | 
            -
             | 
| 27 | 
            -
                             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
                             | 
| 35 | 
            -
                             | 
| 36 | 
            -
             | 
| 37 | 
            -
                                &&  | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
                             | 
| 42 | 
            -
             | 
| 43 | 
            -
                                 | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
                                     | 
| 24 | 
            +
                    const rule = (node) => {
         | 
| 25 | 
            +
                        if (node.callee.type !== utils_1.TSESTree.AST_NODE_TYPES.Identifier
         | 
| 26 | 
            +
                            || !nameDeterminingFunctionNames.includes(node.callee.name)
         | 
| 27 | 
            +
                            || node.arguments.length === 0
         | 
| 28 | 
            +
                            || node.arguments[0].type !== utils_1.TSESTree.AST_NODE_TYPES.Literal
         | 
| 29 | 
            +
                            || typeof node.arguments[0].value !== 'string') {
         | 
| 30 | 
            +
                            return;
         | 
| 31 | 
            +
                        }
         | 
| 32 | 
            +
                        const { sourceCode } = context;
         | 
| 33 | 
            +
                        const interfaceNames = sourceCode.ast.body
         | 
| 34 | 
            +
                            .filter((statement) => statement.type === utils_1.TSESTree.AST_NODE_TYPES.ExportNamedDeclaration
         | 
| 35 | 
            +
                            && statement.declaration?.type === utils_1.TSESTree.AST_NODE_TYPES.TSInterfaceDeclaration
         | 
| 36 | 
            +
                            && (statement.declaration.extends || []).some((heritageClause) => heritageClause.expression.type === utils_1.TSESTree.AST_NODE_TYPES.Identifier
         | 
| 37 | 
            +
                                && heritageClause.expression.name === 'Configuration'))
         | 
| 38 | 
            +
                            .map((statement) => statement.declaration.id.name);
         | 
| 39 | 
            +
                        const fnArgInterfaceName = node.arguments[0].value;
         | 
| 40 | 
            +
                        if (interfaceNames.length > 0 && !interfaceNames.includes(fnArgInterfaceName)) {
         | 
| 41 | 
            +
                            return context.report({
         | 
| 42 | 
            +
                                node: node.arguments[0],
         | 
| 43 | 
            +
                                loc: node.arguments[0].loc,
         | 
| 44 | 
            +
                                messageId: 'error',
         | 
| 45 | 
            +
                                data: {
         | 
| 46 | 
            +
                                    currentValue: fnArgInterfaceName,
         | 
| 47 | 
            +
                                    possibleValues: interfaceNames.join(', ')
         | 
| 48 | 
            +
                                },
         | 
| 49 | 
            +
                                fix: (fixer) => {
         | 
| 50 | 
            +
                                    return fixer.replaceText(node.arguments[0], `'${interfaceNames[0]}'`);
         | 
| 51 | 
            +
                                },
         | 
| 52 | 
            +
                                suggest: interfaceNames.map((interfaceName) => ({
         | 
| 53 | 
            +
                                    messageId: 'suggestion',
         | 
| 47 54 | 
             
                                    data: {
         | 
| 48 55 | 
             
                                        currentValue: fnArgInterfaceName,
         | 
| 49 | 
            -
                                         | 
| 56 | 
            +
                                        recommendedValue: interfaceName
         | 
| 50 57 | 
             
                                    },
         | 
| 51 58 | 
             
                                    fix: (fixer) => {
         | 
| 52 | 
            -
                                        return fixer.replaceText(node.arguments[0], `'${ | 
| 53 | 
            -
                                    } | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
                                        data: {
         | 
| 57 | 
            -
                                            currentValue: fnArgInterfaceName,
         | 
| 58 | 
            -
                                            recommendedValue: interfaceName
         | 
| 59 | 
            -
                                        },
         | 
| 60 | 
            -
                                        fix: (fixer) => {
         | 
| 61 | 
            -
                                            return fixer.replaceText(node.arguments[0], `'${interfaceName}'`);
         | 
| 62 | 
            -
                                        }
         | 
| 63 | 
            -
                                    }))
         | 
| 64 | 
            -
                                });
         | 
| 65 | 
            -
                            }
         | 
| 59 | 
            +
                                        return fixer.replaceText(node.arguments[0], `'${interfaceName}'`);
         | 
| 60 | 
            +
                                    }
         | 
| 61 | 
            +
                                }))
         | 
| 62 | 
            +
                            });
         | 
| 66 63 | 
             
                        }
         | 
| 67 64 | 
             
                    };
         | 
| 65 | 
            +
                    return {
         | 
| 66 | 
            +
                        CallExpression: rule
         | 
| 67 | 
            +
                    };
         | 
| 68 68 | 
             
                }
         | 
| 69 69 | 
             
            });
         |