lint-suite 2.0.2 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +542 -0
- package/README.md +228 -57
- package/eslint.d.ts +0 -1
- package/eslint.js +735 -7125
- package/lib/angular-template.d.ts +0 -1
- package/lib/angular.d.ts +0 -1
- package/lib/base-limits.d.ts +0 -1
- package/lib/base-practices.d.ts +0 -1
- package/lib/base-recommended.d.ts +0 -1
- package/lib/base.d.ts +0 -1
- package/lib/boundaries.d.ts +0 -1
- package/lib/javascript.d.ts +0 -1
- package/lib/json.d.ts +0 -1
- package/lib/line-length.const.d.ts +0 -1
- package/lib/playwright.d.ts +0 -1
- package/lib/prettier.d.ts +0 -1
- package/lib/rxjs.d.ts +0 -1
- package/lib/storybook.d.ts +0 -1
- package/lib/typescript-consistency.d.ts +0 -1
- package/lib/typescript-imports.d.ts +0 -1
- package/lib/typescript-local-plugin.d.ts +2 -2
- package/lib/typescript-overrides.d.ts +0 -1
- package/lib/typescript-recommended.d.ts +0 -1
- package/lib/typescript-safety.d.ts +0 -1
- package/lib/typescript.d.ts +0 -1
- package/lib/vitest.d.ts +0 -1
- package/package.json +30 -20
- package/prettier.d.ts +0 -1
- package/prettier.js +0 -1
- package/stylelint.d.ts +0 -1
- package/stylelint.js +11 -937
- package/eslint.cjs +0 -7376
- package/eslint.cjs.map +0 -7
- package/eslint.d.ts.map +0 -1
- package/eslint.js.map +0 -7
- package/lib/angular-template.d.ts.map +0 -1
- package/lib/angular.d.ts.map +0 -1
- package/lib/base-limits.d.ts.map +0 -1
- package/lib/base-practices.d.ts.map +0 -1
- package/lib/base-recommended.d.ts.map +0 -1
- package/lib/base.d.ts.map +0 -1
- package/lib/boundaries.d.ts.map +0 -1
- package/lib/javascript.d.ts.map +0 -1
- package/lib/json.d.ts.map +0 -1
- package/lib/line-length.const.d.ts.map +0 -1
- package/lib/playwright.d.ts.map +0 -1
- package/lib/prettier.d.ts.map +0 -1
- package/lib/rules/arrow-body-fits-line/arrow-body-fits-line.d.ts +0 -6
- package/lib/rules/arrow-body-fits-line/arrow-body-fits-line.d.ts.map +0 -1
- package/lib/rules/chain-fits-line/chain-fits-line.d.ts +0 -6
- package/lib/rules/chain-fits-line/chain-fits-line.d.ts.map +0 -1
- package/lib/rules/chain-receiver-is-name/chain-receiver-is-name.d.ts +0 -7
- package/lib/rules/chain-receiver-is-name/chain-receiver-is-name.d.ts.map +0 -1
- package/lib/rules/common/class-usage.type.d.ts +0 -26
- package/lib/rules/common/class-usage.type.d.ts.map +0 -1
- package/lib/rules/common/file-cache.type.d.ts +0 -11
- package/lib/rules/common/file-cache.type.d.ts.map +0 -1
- package/lib/rules/common/glob-matcher.type.d.ts +0 -2
- package/lib/rules/common/glob-matcher.type.d.ts.map +0 -1
- package/lib/rules/component-metadata.d.ts +0 -3
- package/lib/rules/component-metadata.d.ts.map +0 -1
- package/lib/rules/define-plugin.util.d.ts +0 -6
- package/lib/rules/define-plugin.util.d.ts.map +0 -1
- package/lib/rules/explicit-accessibility/common/explicit-accessibility.const.d.ts +0 -6
- package/lib/rules/explicit-accessibility/common/explicit-accessibility.const.d.ts.map +0 -1
- package/lib/rules/explicit-accessibility/common/explicit-accessibility.type.d.ts +0 -17
- package/lib/rules/explicit-accessibility/common/explicit-accessibility.type.d.ts.map +0 -1
- package/lib/rules/explicit-accessibility/explicit-accessibility.d.ts +0 -7
- package/lib/rules/explicit-accessibility/explicit-accessibility.d.ts.map +0 -1
- package/lib/rules/file-cache.d.ts +0 -14
- package/lib/rules/file-cache.d.ts.map +0 -1
- package/lib/rules/max-condition-operands/max-condition-operands.d.ts +0 -10
- package/lib/rules/max-condition-operands/max-condition-operands.d.ts.map +0 -1
- package/lib/rules/no-call-in-condition/common/no-call-in-condition.const.d.ts +0 -6
- package/lib/rules/no-call-in-condition/common/no-call-in-condition.const.d.ts.map +0 -1
- package/lib/rules/no-call-in-condition/common/no-call-in-condition.type.d.ts +0 -21
- package/lib/rules/no-call-in-condition/common/no-call-in-condition.type.d.ts.map +0 -1
- package/lib/rules/no-call-in-condition/no-call-in-condition.d.ts +0 -7
- package/lib/rules/no-call-in-condition/no-call-in-condition.d.ts.map +0 -1
- package/lib/rules/no-call-in-condition/utils/call-exemptions.util.d.ts +0 -4
- package/lib/rules/no-call-in-condition/utils/call-exemptions.util.d.ts.map +0 -1
- package/lib/rules/no-call-in-condition/utils/condition-calls.util.d.ts +0 -7
- package/lib/rules/no-call-in-condition/utils/condition-calls.util.d.ts.map +0 -1
- package/lib/rules/no-grouped-condition/no-grouped-condition.d.ts +0 -7
- package/lib/rules/no-grouped-condition/no-grouped-condition.d.ts.map +0 -1
- package/lib/rules/no-inline-object-types/no-inline-object-types.d.ts +0 -6
- package/lib/rules/no-inline-object-types/no-inline-object-types.d.ts.map +0 -1
- package/lib/rules/no-inline-return-object/no-inline-return-object.d.ts +0 -6
- package/lib/rules/no-inline-return-object/no-inline-return-object.d.ts.map +0 -1
- package/lib/rules/no-nested-object-value/common/no-nested-object-value.const.d.ts +0 -5
- package/lib/rules/no-nested-object-value/common/no-nested-object-value.const.d.ts.map +0 -1
- package/lib/rules/no-nested-object-value/common/no-nested-object-value.type.d.ts +0 -7
- package/lib/rules/no-nested-object-value/common/no-nested-object-value.type.d.ts.map +0 -1
- package/lib/rules/no-nested-object-value/no-nested-object-value.d.ts +0 -7
- package/lib/rules/no-nested-object-value/no-nested-object-value.d.ts.map +0 -1
- package/lib/rules/no-nested-object-value/utils/decorator-config.util.d.ts +0 -3
- package/lib/rules/no-nested-object-value/utils/decorator-config.util.d.ts.map +0 -1
- package/lib/rules/no-spread-expression/no-spread-expression.d.ts +0 -6
- package/lib/rules/no-spread-expression/no-spread-expression.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/common/no-unstyled-classes.type.d.ts +0 -33
- package/lib/rules/no-unstyled-classes/common/no-unstyled-classes.type.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/no-unstyled-classes.d.ts +0 -8
- package/lib/rules/no-unstyled-classes/no-unstyled-classes.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/styles/component-stylesheets.d.ts +0 -4
- package/lib/rules/no-unstyled-classes/styles/component-stylesheets.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/styles/linked-stylesheets.d.ts +0 -3
- package/lib/rules/no-unstyled-classes/styles/linked-stylesheets.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/styles/stylesheet-classes.d.ts +0 -3
- package/lib/rules/no-unstyled-classes/styles/stylesheet-classes.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/styles/stylesheet-collection.d.ts +0 -4
- package/lib/rules/no-unstyled-classes/styles/stylesheet-collection.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/styles/stylesheet-imports.d.ts +0 -2
- package/lib/rules/no-unstyled-classes/styles/stylesheet-imports.d.ts.map +0 -1
- package/lib/rules/no-unstyled-classes/styles/template-stylesheets.d.ts +0 -3
- package/lib/rules/no-unstyled-classes/styles/template-stylesheets.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-discovery.d.ts +0 -5
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-discovery.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-scope.d.ts +0 -9
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-scope.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-decorator-kind.d.ts +0 -10
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-decorator-kind.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-directive-index.d.ts +0 -9
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-directive-index.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-metadata-values.d.ts +0 -12
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-metadata-values.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-resolved-path.d.ts +0 -3
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-resolved-path.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-chains.d.ts +0 -17
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-chains.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-resolution.d.ts +0 -7
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-resolution.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-reads.d.ts +0 -6
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-reads.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-references.d.ts +0 -5
- package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-references.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-index.type.d.ts +0 -52
- package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-index.type.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-usage.type.d.ts +0 -105
- package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-usage.type.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-file-entry.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-file-entry.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-classes.d.ts +0 -5
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-classes.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-reconciliation.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-reconciliation.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-staleness.d.ts +0 -14
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-staleness.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-usage.d.ts +0 -18
- package/lib/rules/no-unused-angular-instance-fields/project-usage/project-usage.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-angular-interface-methods.d.ts +0 -8
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-angular-interface-methods.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-assignment-pattern-elements.d.ts +0 -5
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-assignment-pattern-elements.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-binding-pattern-elements.d.ts +0 -6
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-binding-pattern-elements.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-candidate-names.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-candidate-names.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-destructuring-reads.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-destructuring-reads.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-reads.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-reads.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-symbol-reads.d.ts +0 -8
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-symbol-reads.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-type-dependencies.d.ts +0 -3
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-type-dependencies.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-write-targets.d.ts +0 -7
- package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-write-targets.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/class-members.util.d.ts +0 -10
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/class-members.util.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/read-chain-text.util.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/read-chain-text.util.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/spec-file.util.d.ts +0 -2
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/spec-file.util.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/type-property-symbols.util.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/type-property-symbols.util.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-class-fields.d.ts +0 -3
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-class-fields.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-expression-reads.d.ts +0 -6
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-expression-reads.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-imports.d.ts +0 -9
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-imports.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-managed-fields.d.ts +0 -5
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-managed-fields.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-member-candidates.d.ts +0 -6
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-member-candidates.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-literals.d.ts +0 -5
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-literals.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-reads.d.ts +0 -9
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-reads.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-template-parsing.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-template-parsing.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/common/no-unused-angular-instance-fields.type.d.ts +0 -55
- package/lib/rules/no-unused-angular-instance-fields/rule/common/no-unused-angular-instance-fields.type.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/no-unused-angular-instance-fields.d.ts +0 -8
- package/lib/rules/no-unused-angular-instance-fields/rule/no-unused-angular-instance-fields.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-class-read-visitor.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-class-read-visitor.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-field-reads.d.ts +0 -8
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-field-reads.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-lexical-this.d.ts +0 -3
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-lexical-this.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-write-targets.d.ts +0 -3
- package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-write-targets.d.ts.map +0 -1
- package/lib/rules/no-unused-angular-instance-fields/utils/angular-read-target.util.d.ts +0 -4
- package/lib/rules/no-unused-angular-instance-fields/utils/angular-read-target.util.d.ts.map +0 -1
- package/lib/rules/no-unused-classes/common/no-unused-classes.type.d.ts +0 -24
- package/lib/rules/no-unused-classes/common/no-unused-classes.type.d.ts.map +0 -1
- package/lib/rules/no-unused-classes/no-unused-classes.d.ts +0 -8
- package/lib/rules/no-unused-classes/no-unused-classes.d.ts.map +0 -1
- package/lib/rules/no-unused-classes/styles/linked-templates.d.ts +0 -9
- package/lib/rules/no-unused-classes/styles/linked-templates.d.ts.map +0 -1
- package/lib/rules/no-unused-classes/styles/stylesheet-components.d.ts +0 -3
- package/lib/rules/no-unused-classes/styles/stylesheet-components.d.ts.map +0 -1
- package/lib/rules/no-unused-classes/template/template-usage.d.ts +0 -3
- package/lib/rules/no-unused-classes/template/template-usage.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/common/no-unused-exports.const.d.ts +0 -7
- package/lib/rules/no-unused-exports/common/no-unused-exports.const.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/common/no-unused-exports.type.d.ts +0 -70
- package/lib/rules/no-unused-exports/common/no-unused-exports.type.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/export-index.d.ts +0 -6
- package/lib/rules/no-unused-exports/export-index.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/no-unused-exports.d.ts +0 -7
- package/lib/rules/no-unused-exports/no-unused-exports.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/report-unused-exports.d.ts +0 -12
- package/lib/rules/no-unused-exports/report-unused-exports.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/aggregate-update.util.d.ts +0 -4
- package/lib/rules/no-unused-exports/utils/aggregate-update.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/export-edges.util.d.ts +0 -5
- package/lib/rules/no-unused-exports/utils/export-edges.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/export-nodes.util.d.ts +0 -5
- package/lib/rules/no-unused-exports/utils/export-nodes.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/export-usage.util.d.ts +0 -4
- package/lib/rules/no-unused-exports/utils/export-usage.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/exported-names.util.d.ts +0 -3
- package/lib/rules/no-unused-exports/utils/exported-names.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/file-changes.util.d.ts +0 -4
- package/lib/rules/no-unused-exports/utils/file-changes.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/module-edges.util.d.ts +0 -4
- package/lib/rules/no-unused-exports/utils/module-edges.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/module-target.util.d.ts +0 -4
- package/lib/rules/no-unused-exports/utils/module-target.util.d.ts.map +0 -1
- package/lib/rules/no-unused-exports/utils/public-exports.util.d.ts +0 -3
- package/lib/rules/no-unused-exports/utils/public-exports.util.d.ts.map +0 -1
- package/lib/rules/one-line-guard/one-line-guard.d.ts +0 -10
- package/lib/rules/one-line-guard/one-line-guard.d.ts.map +0 -1
- package/lib/rules/readonly-type-properties/readonly-type-properties.d.ts +0 -7
- package/lib/rules/readonly-type-properties/readonly-type-properties.d.ts.map +0 -1
- package/lib/rules/selector-classes.d.ts +0 -7
- package/lib/rules/selector-classes.d.ts.map +0 -1
- package/lib/rules/ternary-branch-shape/ternary-branch-shape.d.ts +0 -6
- package/lib/rules/ternary-branch-shape/ternary-branch-shape.d.ts.map +0 -1
- package/lib/rules/test-file-shape/common/test-file-shape.const.d.ts +0 -14
- package/lib/rules/test-file-shape/common/test-file-shape.const.d.ts.map +0 -1
- package/lib/rules/test-file-shape/common/test-file-shape.type.d.ts +0 -7
- package/lib/rules/test-file-shape/common/test-file-shape.type.d.ts.map +0 -1
- package/lib/rules/test-file-shape/mock-exports.d.ts +0 -7
- package/lib/rules/test-file-shape/mock-exports.d.ts.map +0 -1
- package/lib/rules/test-file-shape/stub-exports.d.ts +0 -7
- package/lib/rules/test-file-shape/stub-exports.d.ts.map +0 -1
- package/lib/rules/test-file-shape/test-file-shape.d.ts +0 -7
- package/lib/rules/test-file-shape/test-file-shape.d.ts.map +0 -1
- package/lib/rules/type-placement/common/type-placement.const.d.ts +0 -5
- package/lib/rules/type-placement/common/type-placement.const.d.ts.map +0 -1
- package/lib/rules/type-placement/common/type-placement.type.d.ts +0 -7
- package/lib/rules/type-placement/common/type-placement.type.d.ts.map +0 -1
- package/lib/rules/type-placement/type-placement.d.ts +0 -7
- package/lib/rules/type-placement/type-placement.d.ts.map +0 -1
- package/lib/rules/util-purity/common/util-purity.const.d.ts +0 -10
- package/lib/rules/util-purity/common/util-purity.const.d.ts.map +0 -1
- package/lib/rules/util-purity/common/util-purity.type.d.ts +0 -7
- package/lib/rules/util-purity/common/util-purity.type.d.ts.map +0 -1
- package/lib/rules/util-purity/util-purity.d.ts +0 -7
- package/lib/rules/util-purity/util-purity.d.ts.map +0 -1
- package/lib/rules/utils/class-expression-literals.util.d.ts +0 -4
- package/lib/rules/utils/class-expression-literals.util.d.ts.map +0 -1
- package/lib/rules/utils/enclosing-statement.util.d.ts +0 -3
- package/lib/rules/utils/enclosing-statement.util.d.ts.map +0 -1
- package/lib/rules/utils/glob-matcher.util.d.ts +0 -3
- package/lib/rules/utils/glob-matcher.util.d.ts.map +0 -1
- package/lib/rules/utils/indent-of.util.d.ts +0 -3
- package/lib/rules/utils/indent-of.util.d.ts.map +0 -1
- package/lib/rules/utils/resolved-rules.util.d.ts +0 -5
- package/lib/rules/utils/resolved-rules.util.d.ts.map +0 -1
- package/lib/rules/utils/template-classes.util.d.ts +0 -5
- package/lib/rules/utils/template-classes.util.d.ts.map +0 -1
- package/lib/rules/utils/template-links.util.d.ts +0 -2
- package/lib/rules/utils/template-links.util.d.ts.map +0 -1
- package/lib/rules/utils/to-regexp.util.d.ts +0 -2
- package/lib/rules/utils/to-regexp.util.d.ts.map +0 -1
- package/lib/rxjs.d.ts.map +0 -1
- package/lib/storybook.d.ts.map +0 -1
- package/lib/typescript-consistency.d.ts.map +0 -1
- package/lib/typescript-imports.d.ts.map +0 -1
- package/lib/typescript-local-plugin.d.ts.map +0 -1
- package/lib/typescript-overrides.d.ts.map +0 -1
- package/lib/typescript-recommended.d.ts.map +0 -1
- package/lib/typescript-safety.d.ts.map +0 -1
- package/lib/typescript.d.ts.map +0 -1
- package/lib/vitest.d.ts.map +0 -1
- package/prettier.cjs +0 -50
- package/prettier.cjs.map +0 -7
- package/prettier.d.ts.map +0 -1
- package/prettier.js.map +0 -7
- package/stylelint.cjs +0 -968
- package/stylelint.cjs.map +0 -7
- package/stylelint.d.ts.map +0 -1
- package/stylelint.js.map +0 -7
package/stylelint.js
CHANGED
|
@@ -1,938 +1,13 @@
|
|
|
1
1
|
// packages/lint-suite/src/stylelint.ts
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import noUnusedClasses from "@lint-suite/stylelint-no-unused-classes";
|
|
2
4
|
import stylelintScss from "stylelint-scss";
|
|
3
5
|
import bemPattern from "stylelint-selector-bem-pattern";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// packages/lint-suite/src/lib/rules/no-unused-classes/styles/stylesheet-components.ts
|
|
9
|
-
import { existsSync, readdirSync as readdirSync2, statSync as statSync2 } from "node:fs";
|
|
10
|
-
import { dirname as dirname3, join as join3, resolve as resolve2 } from "node:path";
|
|
11
|
-
|
|
12
|
-
// packages/lint-suite/src/lib/rules/no-unused-classes/styles/linked-templates.ts
|
|
13
|
-
import { readdirSync } from "node:fs";
|
|
14
|
-
import { dirname as dirname2, join as join2, resolve } from "node:path";
|
|
15
|
-
|
|
16
|
-
// packages/lint-suite/src/lib/rules/file-cache.ts
|
|
17
|
-
import {
|
|
18
|
-
mkdirSync,
|
|
19
|
-
readFileSync,
|
|
20
|
-
renameSync,
|
|
21
|
-
statSync,
|
|
22
|
-
writeFileSync
|
|
23
|
-
} from "node:fs";
|
|
24
|
-
import { dirname, join } from "node:path";
|
|
25
|
-
var CACHE_FORMAT_VERSION = 1;
|
|
26
|
-
var caches = /* @__PURE__ */ new Set();
|
|
27
|
-
var isFlushRegistered = false;
|
|
28
|
-
var cacheDirectory = () => {
|
|
29
|
-
const { LINT_SUITE_CACHE, LINT_SUITE_CACHE_DIR } = process.env;
|
|
30
|
-
const isDisabled = LINT_SUITE_CACHE === "0";
|
|
31
|
-
if (isDisabled) return null;
|
|
32
|
-
if (LINT_SUITE_CACHE_DIR) return LINT_SUITE_CACHE_DIR;
|
|
33
|
-
return join(process.cwd(), "node_modules", ".cache", "lint-suite");
|
|
6
|
+
var resolveConfig = (specifier) => {
|
|
7
|
+
const url = import.meta.resolve(specifier);
|
|
8
|
+
return fileURLToPath(url);
|
|
34
9
|
};
|
|
35
|
-
var
|
|
36
|
-
const directory = cacheDirectory();
|
|
37
|
-
if (directory === null) return null;
|
|
38
|
-
return join(directory, `${name}.v${CACHE_FORMAT_VERSION}.json`);
|
|
39
|
-
};
|
|
40
|
-
var isCachedFile = (value) => {
|
|
41
|
-
const isObject = typeof value === "object" && value !== null;
|
|
42
|
-
if (!isObject) return false;
|
|
43
|
-
const hasVersion = "version" in value && typeof value.version === "string";
|
|
44
|
-
return hasVersion && "value" in value;
|
|
45
|
-
};
|
|
46
|
-
var storedEntries = (text) => {
|
|
47
|
-
const entries = /* @__PURE__ */ new Map();
|
|
48
|
-
const parsed = JSON.parse(text);
|
|
49
|
-
const isRecord = typeof parsed === "object" && parsed !== null;
|
|
50
|
-
if (!isRecord) return entries;
|
|
51
|
-
for (const [path, entry] of Object.entries(parsed)) {
|
|
52
|
-
if (isCachedFile(entry)) entries.set(path, entry);
|
|
53
|
-
}
|
|
54
|
-
return entries;
|
|
55
|
-
};
|
|
56
|
-
var load = (cache2) => {
|
|
57
|
-
cache2.loaded = true;
|
|
58
|
-
const file = cacheFile(cache2.name);
|
|
59
|
-
if (file === null) return;
|
|
60
|
-
try {
|
|
61
|
-
const stored = storedEntries(readFileSync(file, "utf8"));
|
|
62
|
-
for (const [path, entry] of stored) cache2.entries.set(path, entry);
|
|
63
|
-
} catch {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
var write = (cache2) => {
|
|
68
|
-
const file = cacheFile(cache2.name);
|
|
69
|
-
if (file === null) return;
|
|
70
|
-
try {
|
|
71
|
-
mkdirSync(dirname(file), { recursive: true });
|
|
72
|
-
const temporary = `${file}.${process.pid}.tmp`;
|
|
73
|
-
const stored = Object.fromEntries(cache2.entries);
|
|
74
|
-
writeFileSync(temporary, JSON.stringify(stored));
|
|
75
|
-
renameSync(temporary, file);
|
|
76
|
-
} catch {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
var flushFileCaches = () => {
|
|
81
|
-
for (const cache2 of caches) {
|
|
82
|
-
if (!cache2.dirty) continue;
|
|
83
|
-
write(cache2);
|
|
84
|
-
cache2.dirty = false;
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
var registerFlush = () => {
|
|
88
|
-
if (isFlushRegistered) return;
|
|
89
|
-
isFlushRegistered = true;
|
|
90
|
-
process.once("exit", flushFileCaches);
|
|
91
|
-
};
|
|
92
|
-
var createFileCache = (name) => {
|
|
93
|
-
const cache2 = {
|
|
94
|
-
name,
|
|
95
|
-
entries: /* @__PURE__ */ new Map(),
|
|
96
|
-
loaded: false,
|
|
97
|
-
dirty: false
|
|
98
|
-
};
|
|
99
|
-
caches.add(cache2);
|
|
100
|
-
registerFlush();
|
|
101
|
-
return cache2;
|
|
102
|
-
};
|
|
103
|
-
var readCached = (cache2, path, parse) => {
|
|
104
|
-
if (!cache2.loaded) load(cache2);
|
|
105
|
-
try {
|
|
106
|
-
const stats = statSync(path, { bigint: true });
|
|
107
|
-
const version = `${stats.mtimeNs}:${stats.size}`;
|
|
108
|
-
const cached = cache2.entries.get(path);
|
|
109
|
-
if (cached?.version === version) return cached.value;
|
|
110
|
-
const value = parse(readFileSync(path, "utf8"), path);
|
|
111
|
-
const fresh = { value, version };
|
|
112
|
-
cache2.entries.set(path, fresh);
|
|
113
|
-
cache2.dirty = true;
|
|
114
|
-
return value;
|
|
115
|
-
} catch {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
// packages/lint-suite/src/lib/rules/utils/template-links.util.ts
|
|
121
|
-
var LINK_TAG = /<link\b[^>]*>/giu;
|
|
122
|
-
var STYLESHEET_REL = /\brel\s*=\s*["']stylesheet["']/iu;
|
|
123
|
-
var HREF = /\bhref\s*=\s*["']([^"']*)["']/iu;
|
|
124
|
-
var UNRESOLVABLE = /^(?:\/|[^:/?#]+:)/u;
|
|
125
|
-
var hrefOf = (tag) => {
|
|
126
|
-
const isStylesheet = STYLESHEET_REL.test(tag);
|
|
127
|
-
if (!isStylesheet) return null;
|
|
128
|
-
const href = HREF.exec(tag)?.[1] ?? "";
|
|
129
|
-
const isUnresolvable = UNRESOLVABLE.test(href);
|
|
130
|
-
const isLocal = href.length > 0 && !isUnresolvable;
|
|
131
|
-
return isLocal ? href : null;
|
|
132
|
-
};
|
|
133
|
-
var linkedStylesheetHrefs = (template) => {
|
|
134
|
-
const tags = template.match(LINK_TAG) ?? [];
|
|
135
|
-
return tags.map(hrefOf).filter((href) => href !== null);
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
// packages/lint-suite/src/lib/rules/no-unused-classes/styles/linked-templates.ts
|
|
139
|
-
var TEMPLATE_EXTENSION = /\.html$/iu;
|
|
140
|
-
var SKIPPED_DIRECTORIES = /* @__PURE__ */ new Set(["node_modules", "dist", "coverage"]);
|
|
141
|
-
var links = createFileCache("template-links");
|
|
142
|
-
var linkIndex = null;
|
|
143
|
-
var templateLinks = (templatePath) => {
|
|
144
|
-
return readCached(links, templatePath, linkedStylesheetHrefs) ?? [];
|
|
145
|
-
};
|
|
146
|
-
var isWalkable = (name) => {
|
|
147
|
-
const isDotfile = name.startsWith(".");
|
|
148
|
-
if (isDotfile) return false;
|
|
149
|
-
return !SKIPPED_DIRECTORIES.has(name);
|
|
150
|
-
};
|
|
151
|
-
var walkTemplates = (root) => {
|
|
152
|
-
const found = [];
|
|
153
|
-
const pending = [root];
|
|
154
|
-
while (pending.length > 0) {
|
|
155
|
-
const directory = pending.pop();
|
|
156
|
-
if (directory === void 0) break;
|
|
157
|
-
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
|
158
|
-
const path = join2(directory, entry.name);
|
|
159
|
-
const isDirectory = entry.isDirectory();
|
|
160
|
-
if (isDirectory) {
|
|
161
|
-
const canWalk = isWalkable(entry.name);
|
|
162
|
-
if (canWalk) pending.push(path);
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
const isTemplate = TEMPLATE_EXTENSION.test(entry.name);
|
|
166
|
-
if (isTemplate) found.push(path);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return found;
|
|
170
|
-
};
|
|
171
|
-
var templatesUnder = (root) => {
|
|
172
|
-
try {
|
|
173
|
-
return walkTemplates(root);
|
|
174
|
-
} catch {
|
|
175
|
-
return [];
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
var templatesByStylesheet = (root) => {
|
|
179
|
-
const byStylesheet = /* @__PURE__ */ new Map();
|
|
180
|
-
for (const template of templatesUnder(root)) {
|
|
181
|
-
const directory = dirname2(template);
|
|
182
|
-
for (const href of templateLinks(template)) {
|
|
183
|
-
const stylesheet = resolve(directory, href);
|
|
184
|
-
const linked = byStylesheet.get(stylesheet) ?? [];
|
|
185
|
-
linked.push(template);
|
|
186
|
-
byStylesheet.set(stylesheet, linked);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return byStylesheet;
|
|
190
|
-
};
|
|
191
|
-
var currentLinkIndex = () => {
|
|
192
|
-
const now = performance.now();
|
|
193
|
-
const cached = linkIndex;
|
|
194
|
-
const isFresh = cached !== null && now - cached.builtAt < cached.buildDuration * 100;
|
|
195
|
-
if (isFresh) return cached;
|
|
196
|
-
const templates2 = templatesByStylesheet(process.cwd());
|
|
197
|
-
const fresh = {
|
|
198
|
-
builtAt: now,
|
|
199
|
-
buildDuration: performance.now() - now,
|
|
200
|
-
templates: templates2
|
|
201
|
-
};
|
|
202
|
-
linkIndex = fresh;
|
|
203
|
-
return fresh;
|
|
204
|
-
};
|
|
205
|
-
var linkedTemplates = (stylesheetPath) => {
|
|
206
|
-
return currentLinkIndex().templates.get(stylesheetPath) ?? [];
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
// packages/lint-suite/src/lib/rules/component-metadata.ts
|
|
210
|
-
import {
|
|
211
|
-
ScriptTarget,
|
|
212
|
-
canHaveDecorators,
|
|
213
|
-
createSourceFile,
|
|
214
|
-
forEachChild,
|
|
215
|
-
getDecorators,
|
|
216
|
-
isArrayLiteralExpression,
|
|
217
|
-
isCallExpression,
|
|
218
|
-
isIdentifier,
|
|
219
|
-
isObjectLiteralExpression,
|
|
220
|
-
isPropertyAssignment,
|
|
221
|
-
isStringLiteralLike
|
|
222
|
-
} from "typescript";
|
|
223
|
-
var COMPONENT_MARKER = "@Component";
|
|
224
|
-
var cache = createFileCache("component-metadata");
|
|
225
|
-
var componentArgument = (decorator) => {
|
|
226
|
-
const { expression } = decorator;
|
|
227
|
-
if (!isCallExpression(expression)) return null;
|
|
228
|
-
if (!isIdentifier(expression.expression)) return null;
|
|
229
|
-
const isComponent = expression.expression.text === "Component";
|
|
230
|
-
if (!isComponent) return null;
|
|
231
|
-
const [argument] = expression.arguments;
|
|
232
|
-
if (argument === void 0) return null;
|
|
233
|
-
if (!isObjectLiteralExpression(argument)) return null;
|
|
234
|
-
return argument;
|
|
235
|
-
};
|
|
236
|
-
var decoratedMetadata = (node) => {
|
|
237
|
-
if (!canHaveDecorators(node)) return null;
|
|
238
|
-
const decorators = getDecorators(node) ?? [];
|
|
239
|
-
for (const decorator of decorators) {
|
|
240
|
-
const metadata = componentArgument(decorator);
|
|
241
|
-
if (metadata !== null) return metadata;
|
|
242
|
-
}
|
|
243
|
-
return null;
|
|
244
|
-
};
|
|
245
|
-
var literalText = (node) => {
|
|
246
|
-
if (!isStringLiteralLike(node)) return null;
|
|
247
|
-
return node.text;
|
|
248
|
-
};
|
|
249
|
-
var literalTexts = (node) => {
|
|
250
|
-
const single = literalText(node);
|
|
251
|
-
if (single !== null) return [single];
|
|
252
|
-
if (!isArrayLiteralExpression(node)) return [];
|
|
253
|
-
const texts = [];
|
|
254
|
-
for (const element of node.elements) {
|
|
255
|
-
const text = literalText(element);
|
|
256
|
-
if (text !== null) texts.push(text);
|
|
257
|
-
}
|
|
258
|
-
return texts;
|
|
259
|
-
};
|
|
260
|
-
var metadataValue = (metadata, name) => {
|
|
261
|
-
for (const property of metadata.properties) {
|
|
262
|
-
if (!isPropertyAssignment(property)) continue;
|
|
263
|
-
if (!isIdentifier(property.name)) continue;
|
|
264
|
-
const isMatch = property.name.text === name;
|
|
265
|
-
if (isMatch) return property.initializer;
|
|
266
|
-
}
|
|
267
|
-
return null;
|
|
268
|
-
};
|
|
269
|
-
var metadataTexts = (metadata, name) => {
|
|
270
|
-
const value = metadataValue(metadata, name);
|
|
271
|
-
if (value === null) return [];
|
|
272
|
-
return literalTexts(value);
|
|
273
|
-
};
|
|
274
|
-
var toDescriptor = (metadata) => {
|
|
275
|
-
const [templateUrl] = metadataTexts(metadata, "templateUrl");
|
|
276
|
-
const [template] = metadataTexts(metadata, "template");
|
|
277
|
-
const styleUrl = metadataTexts(metadata, "styleUrl");
|
|
278
|
-
const listedStyleUrls = metadataTexts(metadata, "styleUrls");
|
|
279
|
-
const styleUrls = [...styleUrl, ...listedStyleUrls];
|
|
280
|
-
const styles = metadataTexts(metadata, "styles");
|
|
281
|
-
const descriptor = {
|
|
282
|
-
templateUrl: templateUrl ?? null,
|
|
283
|
-
template: template ?? null,
|
|
284
|
-
styleUrls,
|
|
285
|
-
styles
|
|
286
|
-
};
|
|
287
|
-
return descriptor;
|
|
288
|
-
};
|
|
289
|
-
var parseComponentMetadata = (text, path) => {
|
|
290
|
-
const found = [];
|
|
291
|
-
const hasComponent = text.includes(COMPONENT_MARKER);
|
|
292
|
-
if (!hasComponent) return found;
|
|
293
|
-
const visit = (node) => {
|
|
294
|
-
const metadata = decoratedMetadata(node);
|
|
295
|
-
if (metadata !== null) found.push(toDescriptor(metadata));
|
|
296
|
-
forEachChild(node, visit);
|
|
297
|
-
};
|
|
298
|
-
const source = createSourceFile(path, text, ScriptTarget.Latest, true);
|
|
299
|
-
forEachChild(source, visit);
|
|
300
|
-
return found;
|
|
301
|
-
};
|
|
302
|
-
var componentMetadata = (path) => {
|
|
303
|
-
return readCached(cache, path, parseComponentMetadata) ?? [];
|
|
304
|
-
};
|
|
305
|
-
|
|
306
|
-
// packages/lint-suite/src/lib/rules/no-unused-classes/styles/stylesheet-components.ts
|
|
307
|
-
var MODULE_EXTENSION = /\.ts$/iu;
|
|
308
|
-
var STYLE_EXTENSION = /\.(?:scss|sass|css)$/iu;
|
|
309
|
-
var UNKNOWN_TEMPLATE = { kind: "unknown" };
|
|
310
|
-
var listings = /* @__PURE__ */ new Map();
|
|
311
|
-
var directoryListing = (directory) => {
|
|
312
|
-
const stats = statSync2(directory, { bigint: true });
|
|
313
|
-
const version = `${stats.mtimeNs}`;
|
|
314
|
-
const cached = listings.get(directory);
|
|
315
|
-
if (cached?.version === version) return cached.files;
|
|
316
|
-
const files = readdirSync2(directory);
|
|
317
|
-
const fresh = { files, version };
|
|
318
|
-
listings.set(directory, fresh);
|
|
319
|
-
return files;
|
|
320
|
-
};
|
|
321
|
-
var declaredStylesheets = (descriptor, directory) => {
|
|
322
|
-
const resolveUrl = (url) => resolve2(directory, url);
|
|
323
|
-
return descriptor.styleUrls.map(resolveUrl);
|
|
324
|
-
};
|
|
325
|
-
var fileTemplate = (descriptor, directory) => {
|
|
326
|
-
if (descriptor.templateUrl === null) return null;
|
|
327
|
-
const path = resolve2(directory, descriptor.templateUrl);
|
|
328
|
-
const isPresent = existsSync(path);
|
|
329
|
-
if (!isPresent) return null;
|
|
330
|
-
const source = { kind: "file", path };
|
|
331
|
-
return source;
|
|
332
|
-
};
|
|
333
|
-
var inlineTemplate = (descriptor, componentPath) => {
|
|
334
|
-
if (descriptor.template === null) return null;
|
|
335
|
-
const source = {
|
|
336
|
-
kind: "inline",
|
|
337
|
-
source: descriptor.template,
|
|
338
|
-
path: componentPath
|
|
339
|
-
};
|
|
340
|
-
return source;
|
|
341
|
-
};
|
|
342
|
-
var componentTemplate = (descriptor, componentPath) => {
|
|
343
|
-
const directory = dirname3(componentPath);
|
|
344
|
-
const file = fileTemplate(descriptor, directory);
|
|
345
|
-
if (file !== null) return file;
|
|
346
|
-
const inline = inlineTemplate(descriptor, componentPath);
|
|
347
|
-
return inline ?? UNKNOWN_TEMPLATE;
|
|
348
|
-
};
|
|
349
|
-
var matchedTemplates = (componentPath, stylesheetPath) => {
|
|
350
|
-
const directory = dirname3(componentPath);
|
|
351
|
-
const sources = [];
|
|
352
|
-
for (const descriptor of componentMetadata(componentPath)) {
|
|
353
|
-
const declared = declaredStylesheets(descriptor, directory);
|
|
354
|
-
const isMatch = declared.includes(stylesheetPath);
|
|
355
|
-
if (!isMatch) continue;
|
|
356
|
-
sources.push(componentTemplate(descriptor, componentPath));
|
|
357
|
-
}
|
|
358
|
-
return sources;
|
|
359
|
-
};
|
|
360
|
-
var directoryFiles = (directory, extension) => {
|
|
361
|
-
try {
|
|
362
|
-
return directoryListing(directory).filter((file) => extension.test(file));
|
|
363
|
-
} catch {
|
|
364
|
-
return [];
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
var fallbackTemplates = (stylesheetPath) => {
|
|
368
|
-
const sibling = stylesheetPath.replace(STYLE_EXTENSION, ".html");
|
|
369
|
-
const paths = /* @__PURE__ */ new Set();
|
|
370
|
-
const hasSibling = existsSync(sibling);
|
|
371
|
-
if (hasSibling) paths.add(sibling);
|
|
372
|
-
for (const path of linkedTemplates(stylesheetPath)) paths.add(path);
|
|
373
|
-
const toSource = (path) => {
|
|
374
|
-
const source = { kind: "file", path };
|
|
375
|
-
return source;
|
|
376
|
-
};
|
|
377
|
-
const pathList = [...paths];
|
|
378
|
-
return pathList.map(toSource);
|
|
379
|
-
};
|
|
380
|
-
var stylesheetTemplates = (stylesheetPath) => {
|
|
381
|
-
const resolved = resolve2(stylesheetPath);
|
|
382
|
-
const directory = dirname3(resolved);
|
|
383
|
-
const sources = [];
|
|
384
|
-
for (const file of directoryFiles(directory, MODULE_EXTENSION)) {
|
|
385
|
-
const componentPath = join3(directory, file);
|
|
386
|
-
const matched = matchedTemplates(componentPath, resolved);
|
|
387
|
-
sources.push(...matched);
|
|
388
|
-
}
|
|
389
|
-
if (sources.length > 0) return sources;
|
|
390
|
-
return fallbackTemplates(resolved);
|
|
391
|
-
};
|
|
392
|
-
|
|
393
|
-
// packages/lint-suite/src/lib/rules/no-unused-classes/template/template-usage.ts
|
|
394
|
-
import {
|
|
395
|
-
ASTWithSource,
|
|
396
|
-
TmplAstRecursiveVisitor,
|
|
397
|
-
parseTemplate,
|
|
398
|
-
tmplAstVisitAll
|
|
399
|
-
} from "@angular/compiler";
|
|
400
|
-
|
|
401
|
-
// packages/lint-suite/src/lib/rules/selector-classes.ts
|
|
402
|
-
import selectorParser from "postcss-selector-parser";
|
|
403
|
-
var INTERPOLATION_TOKEN = "zzinterpzz";
|
|
404
|
-
var PARENT_TOKEN = "zzparentzz";
|
|
405
|
-
var UNKNOWN_PARENT_SELECTOR = `.${PARENT_TOKEN}`;
|
|
406
|
-
var UNKNOWN_PARTS = new RegExp(
|
|
407
|
-
`${INTERPOLATION_TOKEN}|${PARENT_TOKEN}`,
|
|
408
|
-
"gu"
|
|
409
|
-
);
|
|
410
|
-
var INTERPOLATION = /#\{[^}]*\}/gu;
|
|
411
|
-
var DEEP_COMBINATORS = /* @__PURE__ */ new Set(["/deep/", ">>>"]);
|
|
412
|
-
var HOST_PSEUDOS = /* @__PURE__ */ new Set([":host", ":host-context"]);
|
|
413
|
-
var NG_DEEP_PSEUDO = "::ng-deep";
|
|
414
|
-
var REGEXP_META = /[.*+?^${}()|[\]\\]/gu;
|
|
415
|
-
var escapeRegExp = (part) => {
|
|
416
|
-
return part.replaceAll(REGEXP_META, "\\$&");
|
|
417
|
-
};
|
|
418
|
-
var classNamePattern = (value) => {
|
|
419
|
-
const literals = value.split(UNKNOWN_PARTS).map(escapeRegExp);
|
|
420
|
-
const joined = literals.join(".*");
|
|
421
|
-
return `^${joined}$`;
|
|
422
|
-
};
|
|
423
|
-
var withoutParent = (selector) => {
|
|
424
|
-
return selector.replaceAll("&", UNKNOWN_PARENT_SELECTOR);
|
|
425
|
-
};
|
|
426
|
-
var withParent = (selector, parent) => {
|
|
427
|
-
const hasNesting = selector.includes("&");
|
|
428
|
-
if (hasNesting) return selector.replaceAll("&", parent);
|
|
429
|
-
return `${parent} ${selector}`;
|
|
430
|
-
};
|
|
431
|
-
var resolveSelectors = (selectors, parents) => {
|
|
432
|
-
const hasParents = parents.length > 0;
|
|
433
|
-
if (!hasParents) return selectors.map(withoutParent);
|
|
434
|
-
const resolved = [];
|
|
435
|
-
for (const parent of parents) {
|
|
436
|
-
for (const selector of selectors) {
|
|
437
|
-
resolved.push(withParent(selector, parent));
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
return resolved;
|
|
441
|
-
};
|
|
442
|
-
var isBoundaryNode = (node) => {
|
|
443
|
-
if (node.type === "combinator") return DEEP_COMBINATORS.has(node.value);
|
|
444
|
-
if (node.type !== "pseudo") return false;
|
|
445
|
-
return node.value === NG_DEEP_PSEUDO;
|
|
446
|
-
};
|
|
447
|
-
var addTemplateClass = (value, names) => {
|
|
448
|
-
const hasInterpolation = value.includes(INTERPOLATION_TOKEN);
|
|
449
|
-
const hasUnknownParent = value.includes(PARENT_TOKEN);
|
|
450
|
-
const isDynamic = hasInterpolation || hasUnknownParent;
|
|
451
|
-
if (isDynamic) return;
|
|
452
|
-
names.push(value);
|
|
453
|
-
};
|
|
454
|
-
var collectTemplateClasses = (nodes, names) => {
|
|
455
|
-
for (const node of nodes) {
|
|
456
|
-
const isBoundary = isBoundaryNode(node);
|
|
457
|
-
if (isBoundary) return true;
|
|
458
|
-
if (node.type === "class") {
|
|
459
|
-
addTemplateClass(node.value, names);
|
|
460
|
-
continue;
|
|
461
|
-
}
|
|
462
|
-
if (node.type !== "pseudo") continue;
|
|
463
|
-
const isHost = HOST_PSEUDOS.has(node.value);
|
|
464
|
-
if (isHost) continue;
|
|
465
|
-
for (const argument of node.nodes) {
|
|
466
|
-
const isStopped = collectTemplateClasses(argument.nodes, names);
|
|
467
|
-
if (isStopped) return true;
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
return false;
|
|
471
|
-
};
|
|
472
|
-
var selectorTemplateClasses = (selector) => {
|
|
473
|
-
const names = [];
|
|
474
|
-
const normalized = selector.replaceAll(INTERPOLATION, INTERPOLATION_TOKEN);
|
|
475
|
-
try {
|
|
476
|
-
const root = selectorParser().astSync(normalized);
|
|
477
|
-
for (const each of root.nodes) collectTemplateClasses(each.nodes, names);
|
|
478
|
-
} catch {
|
|
479
|
-
return [];
|
|
480
|
-
}
|
|
481
|
-
const uniqueNames = new Set(names);
|
|
482
|
-
return [...uniqueNames];
|
|
483
|
-
};
|
|
484
|
-
var classMatcher = (exact, patterns) => {
|
|
485
|
-
const matches = (name) => {
|
|
486
|
-
const isExact = exact.has(name);
|
|
487
|
-
if (isExact) return true;
|
|
488
|
-
return patterns.some((pattern) => pattern.test(name));
|
|
489
|
-
};
|
|
490
|
-
return matches;
|
|
491
|
-
};
|
|
492
|
-
|
|
493
|
-
// packages/lint-suite/src/lib/rules/utils/class-expression-literals.util.ts
|
|
494
|
-
import {
|
|
495
|
-
Conditional,
|
|
496
|
-
Interpolation,
|
|
497
|
-
Lexer,
|
|
498
|
-
LiteralArray,
|
|
499
|
-
LiteralMap,
|
|
500
|
-
LiteralPrimitive,
|
|
501
|
-
ParseLocation,
|
|
502
|
-
ParseSourceFile,
|
|
503
|
-
ParseSourceSpan,
|
|
504
|
-
Parser
|
|
505
|
-
} from "@angular/compiler";
|
|
506
|
-
var WHITESPACE = /\s+/u;
|
|
507
|
-
var EXPRESSION_FILE = "class-expression";
|
|
508
|
-
var INTERPOLATION_TOKEN2 = "zzinterpzz";
|
|
509
|
-
var parser = new Parser(new Lexer());
|
|
510
|
-
var spanOf = (source) => {
|
|
511
|
-
const file = new ParseSourceFile(source, EXPRESSION_FILE);
|
|
512
|
-
const start = new ParseLocation(file, 0, 0, 0);
|
|
513
|
-
const span = new ParseSourceSpan(start, start.moveBy(source.length));
|
|
514
|
-
return span;
|
|
515
|
-
};
|
|
516
|
-
var astOf = (parsed) => {
|
|
517
|
-
const hasErrors = parsed.errors.length > 0;
|
|
518
|
-
if (hasErrors) return null;
|
|
519
|
-
return parsed.ast;
|
|
520
|
-
};
|
|
521
|
-
var parseClassExpression = (source) => {
|
|
522
|
-
try {
|
|
523
|
-
const span = spanOf(source);
|
|
524
|
-
const interpolation = parser.parseInterpolation(source, span, 0, null);
|
|
525
|
-
if (interpolation) return astOf(interpolation);
|
|
526
|
-
const binding = parser.parseBinding(source, span, 0);
|
|
527
|
-
return astOf(binding);
|
|
528
|
-
} catch {
|
|
529
|
-
return null;
|
|
530
|
-
}
|
|
531
|
-
};
|
|
532
|
-
var addNames = (value, names) => {
|
|
533
|
-
for (const token of value.split(WHITESPACE)) {
|
|
534
|
-
if (token) names.push(token);
|
|
535
|
-
}
|
|
536
|
-
};
|
|
537
|
-
var addPrimitive = (ast, names) => {
|
|
538
|
-
if (typeof ast.value === "string") addNames(ast.value, names);
|
|
539
|
-
};
|
|
540
|
-
var addMapKeys = (ast, names) => {
|
|
541
|
-
for (const key of ast.keys) {
|
|
542
|
-
if (key.kind !== "spread") addNames(key.key, names);
|
|
543
|
-
}
|
|
544
|
-
};
|
|
545
|
-
var addInterpolation = (ast, names) => {
|
|
546
|
-
for (const text of ast.strings) addNames(text, names);
|
|
547
|
-
};
|
|
548
|
-
var collect = (ast, names) => {
|
|
549
|
-
if (ast instanceof LiteralPrimitive) {
|
|
550
|
-
addPrimitive(ast, names);
|
|
551
|
-
return;
|
|
552
|
-
}
|
|
553
|
-
if (ast instanceof LiteralMap) {
|
|
554
|
-
addMapKeys(ast, names);
|
|
555
|
-
return;
|
|
556
|
-
}
|
|
557
|
-
if (ast instanceof Interpolation) {
|
|
558
|
-
addInterpolation(ast, names);
|
|
559
|
-
return;
|
|
560
|
-
}
|
|
561
|
-
if (ast instanceof LiteralArray) {
|
|
562
|
-
for (const expression of ast.expressions) collect(expression, names);
|
|
563
|
-
return;
|
|
564
|
-
}
|
|
565
|
-
if (ast instanceof Conditional) {
|
|
566
|
-
collect(ast.trueExp, names);
|
|
567
|
-
collect(ast.falseExp, names);
|
|
568
|
-
}
|
|
569
|
-
};
|
|
570
|
-
var classExpressionLiterals = (source) => {
|
|
571
|
-
const ast = parseClassExpression(source);
|
|
572
|
-
if (ast === null) return [];
|
|
573
|
-
const names = [];
|
|
574
|
-
collect(ast, names);
|
|
575
|
-
const uniqueNames = new Set(names);
|
|
576
|
-
return [...uniqueNames];
|
|
577
|
-
};
|
|
578
|
-
var isSpreadKey = (key) => key.kind === "spread";
|
|
579
|
-
var isDynamicAst = (ast) => {
|
|
580
|
-
if (ast instanceof LiteralPrimitive) return false;
|
|
581
|
-
if (ast instanceof LiteralMap) return ast.keys.some(isSpreadKey);
|
|
582
|
-
if (ast instanceof LiteralArray) return ast.expressions.some(isDynamicAst);
|
|
583
|
-
if (ast instanceof Conditional) {
|
|
584
|
-
const isTrueDynamic = isDynamicAst(ast.trueExp);
|
|
585
|
-
const isFalseDynamic = isDynamicAst(ast.falseExp);
|
|
586
|
-
return isTrueDynamic || isFalseDynamic;
|
|
587
|
-
}
|
|
588
|
-
return true;
|
|
589
|
-
};
|
|
590
|
-
var isNamedToken = (token) => token !== INTERPOLATION_TOKEN2;
|
|
591
|
-
var isPatternToken = (token) => {
|
|
592
|
-
return token.includes(INTERPOLATION_TOKEN2);
|
|
593
|
-
};
|
|
594
|
-
var isPlainToken = (token) => !isPatternToken(token);
|
|
595
|
-
var interpolationUsage = (ast) => {
|
|
596
|
-
const joined = ast.strings.join(INTERPOLATION_TOKEN2);
|
|
597
|
-
const tokens = joined.split(WHITESPACE).filter(Boolean);
|
|
598
|
-
const named = tokens.filter(isNamedToken);
|
|
599
|
-
const patterns = named.filter(isPatternToken).map(classNamePattern);
|
|
600
|
-
const names = named.filter(isPlainToken);
|
|
601
|
-
const uniqueNames = new Set(names);
|
|
602
|
-
const uniquePatterns = new Set(patterns);
|
|
603
|
-
const usage = {
|
|
604
|
-
names: [...uniqueNames],
|
|
605
|
-
patterns: [...uniquePatterns],
|
|
606
|
-
isDynamic: named.length < tokens.length
|
|
607
|
-
};
|
|
608
|
-
return usage;
|
|
609
|
-
};
|
|
610
|
-
var UNKNOWN_USAGE = {
|
|
611
|
-
names: [],
|
|
612
|
-
patterns: [],
|
|
613
|
-
isDynamic: true
|
|
614
|
-
};
|
|
615
|
-
var classExpressionUsage = (source) => {
|
|
616
|
-
const ast = parseClassExpression(source);
|
|
617
|
-
if (ast === null) return UNKNOWN_USAGE;
|
|
618
|
-
if (ast instanceof Interpolation) return interpolationUsage(ast);
|
|
619
|
-
const names = [];
|
|
620
|
-
collect(ast, names);
|
|
621
|
-
const isDynamic = isDynamicAst(ast);
|
|
622
|
-
const uniqueNames = new Set(names);
|
|
623
|
-
const usage = {
|
|
624
|
-
names: [...uniqueNames],
|
|
625
|
-
patterns: [],
|
|
626
|
-
isDynamic
|
|
627
|
-
};
|
|
628
|
-
return usage;
|
|
629
|
-
};
|
|
630
|
-
|
|
631
|
-
// packages/lint-suite/src/lib/rules/utils/template-classes.util.ts
|
|
632
|
-
import { ParseSourceSpan as ParseSourceSpan2 } from "@angular/compiler";
|
|
633
|
-
var CLASS_ATTRIBUTES = [
|
|
634
|
-
"class",
|
|
635
|
-
"routerLinkActive",
|
|
636
|
-
"animate.enter",
|
|
637
|
-
"animate.leave"
|
|
638
|
-
];
|
|
639
|
-
var CLASS_BINDING_PREFIX = "class.";
|
|
640
|
-
var TOKEN = /\S+/gu;
|
|
641
|
-
var expressionSource = (value) => {
|
|
642
|
-
if (!("source" in value)) return null;
|
|
643
|
-
const { source } = value;
|
|
644
|
-
if (typeof source !== "string") return null;
|
|
645
|
-
return source;
|
|
646
|
-
};
|
|
647
|
-
var staticClasses = (attribute) => {
|
|
648
|
-
const classes = [];
|
|
649
|
-
const valueSpan = attribute.valueSpan ?? attribute.sourceSpan;
|
|
650
|
-
for (const token of attribute.value.matchAll(TOKEN)) {
|
|
651
|
-
const start = valueSpan.start.moveBy(token.index);
|
|
652
|
-
const end = valueSpan.start.moveBy(token.index + token[0].length);
|
|
653
|
-
const span = new ParseSourceSpan2(start, end);
|
|
654
|
-
const templateClass = { name: token[0], span };
|
|
655
|
-
classes.push(templateClass);
|
|
656
|
-
}
|
|
657
|
-
return classes;
|
|
658
|
-
};
|
|
659
|
-
var boundClassName = (input) => {
|
|
660
|
-
const { details } = input.keySpan;
|
|
661
|
-
if (details === null) return null;
|
|
662
|
-
const isClassBinding = details.startsWith(CLASS_BINDING_PREFIX);
|
|
663
|
-
if (!isClassBinding) return null;
|
|
664
|
-
return input.name;
|
|
665
|
-
};
|
|
666
|
-
var isClassExpression = (input) => {
|
|
667
|
-
const isClassName = CLASS_ATTRIBUTES.includes(input.name);
|
|
668
|
-
if (!isClassName) return false;
|
|
669
|
-
const { details } = input.keySpan;
|
|
670
|
-
if (details === null) return true;
|
|
671
|
-
return details === input.name;
|
|
672
|
-
};
|
|
673
|
-
var expressionClasses = (input) => {
|
|
674
|
-
const source = expressionSource(input.value);
|
|
675
|
-
if (source === null) return [];
|
|
676
|
-
const names = classExpressionLiterals(source);
|
|
677
|
-
const templateClassOf = (name) => {
|
|
678
|
-
const templateClass = { name, span: input.sourceSpan };
|
|
679
|
-
return templateClass;
|
|
680
|
-
};
|
|
681
|
-
return names.map(templateClassOf);
|
|
682
|
-
};
|
|
683
|
-
var inputClasses = (input) => {
|
|
684
|
-
const bound = boundClassName(input);
|
|
685
|
-
if (bound !== null) {
|
|
686
|
-
const templateClass = { name: bound, span: input.keySpan };
|
|
687
|
-
return [templateClass];
|
|
688
|
-
}
|
|
689
|
-
const isExpression = isClassExpression(input);
|
|
690
|
-
if (!isExpression) return [];
|
|
691
|
-
return expressionClasses(input);
|
|
692
|
-
};
|
|
693
|
-
var templateClasses = (node) => {
|
|
694
|
-
const classes = [];
|
|
695
|
-
for (const attribute of node.attributes) {
|
|
696
|
-
const isClassName = CLASS_ATTRIBUTES.includes(attribute.name);
|
|
697
|
-
if (isClassName) {
|
|
698
|
-
const found = staticClasses(attribute);
|
|
699
|
-
classes.push(...found);
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
for (const input of node.inputs) {
|
|
703
|
-
const found = inputClasses(input);
|
|
704
|
-
classes.push(...found);
|
|
705
|
-
}
|
|
706
|
-
return classes;
|
|
707
|
-
};
|
|
708
|
-
|
|
709
|
-
// packages/lint-suite/src/lib/rules/utils/to-regexp.util.ts
|
|
710
|
-
var toRegExp = (pattern) => new RegExp(pattern, "u");
|
|
711
|
-
|
|
712
|
-
// packages/lint-suite/src/lib/rules/no-unused-classes/template/template-usage.ts
|
|
713
|
-
var NG_CLASS_ATTRIBUTE = "ngClass";
|
|
714
|
-
var matchesNone = () => false;
|
|
715
|
-
var UNKNOWN_USAGE2 = {
|
|
716
|
-
has: matchesNone,
|
|
717
|
-
isDynamic: true,
|
|
718
|
-
size: 0
|
|
719
|
-
};
|
|
720
|
-
var templates = createFileCache("template-usage");
|
|
721
|
-
var expressionSource2 = (value) => {
|
|
722
|
-
const isWithSource = value instanceof ASTWithSource;
|
|
723
|
-
if (!isWithSource) return null;
|
|
724
|
-
return value.source;
|
|
725
|
-
};
|
|
726
|
-
var isClassInput = (input) => {
|
|
727
|
-
const isNgClass = input.name === NG_CLASS_ATTRIBUTE;
|
|
728
|
-
if (isNgClass) return true;
|
|
729
|
-
return isClassExpression(input);
|
|
730
|
-
};
|
|
731
|
-
var ClassUsageVisitor = class extends TmplAstRecursiveVisitor {
|
|
732
|
-
names = /* @__PURE__ */ new Set();
|
|
733
|
-
patterns = /* @__PURE__ */ new Set();
|
|
734
|
-
isDynamic = false;
|
|
735
|
-
visitElement(element) {
|
|
736
|
-
this.collect(element);
|
|
737
|
-
super.visitElement(element);
|
|
738
|
-
}
|
|
739
|
-
visitTemplate(template) {
|
|
740
|
-
this.collect(template);
|
|
741
|
-
super.visitTemplate(template);
|
|
742
|
-
}
|
|
743
|
-
visitComponent(component) {
|
|
744
|
-
this.collect(component);
|
|
745
|
-
super.visitComponent(component);
|
|
746
|
-
}
|
|
747
|
-
collect(node) {
|
|
748
|
-
for (const { name } of templateClasses(node)) this.names.add(name);
|
|
749
|
-
for (const input of node.inputs) this.collectInput(input);
|
|
750
|
-
}
|
|
751
|
-
collectInput(input) {
|
|
752
|
-
const isClass = isClassInput(input);
|
|
753
|
-
if (!isClass) return;
|
|
754
|
-
const source = expressionSource2(input.value);
|
|
755
|
-
if (source === null) {
|
|
756
|
-
this.isDynamic = true;
|
|
757
|
-
return;
|
|
758
|
-
}
|
|
759
|
-
const usage = classExpressionUsage(source);
|
|
760
|
-
for (const name of usage.names) this.names.add(name);
|
|
761
|
-
for (const pattern of usage.patterns) this.patterns.add(pattern);
|
|
762
|
-
if (usage.isDynamic) this.isDynamic = true;
|
|
763
|
-
}
|
|
764
|
-
};
|
|
765
|
-
var parseUsage = (text, path) => {
|
|
766
|
-
const parsed = parseTemplate(text, path);
|
|
767
|
-
if (parsed.errors !== null) return null;
|
|
768
|
-
const visitor = new ClassUsageVisitor();
|
|
769
|
-
tmplAstVisitAll(visitor, parsed.nodes);
|
|
770
|
-
const names = [...visitor.names];
|
|
771
|
-
const patterns = [...visitor.patterns];
|
|
772
|
-
const entry = { names, patterns, isDynamic: visitor.isDynamic };
|
|
773
|
-
return entry;
|
|
774
|
-
};
|
|
775
|
-
var sourceUsage = (source) => {
|
|
776
|
-
if (source.kind === "unknown") return null;
|
|
777
|
-
if (source.kind === "inline") return parseUsage(source.source, source.path);
|
|
778
|
-
return readCached(templates, source.path, parseUsage) ?? null;
|
|
779
|
-
};
|
|
780
|
-
var templateUsage = (sources) => {
|
|
781
|
-
const names = /* @__PURE__ */ new Set();
|
|
782
|
-
const patterns = /* @__PURE__ */ new Set();
|
|
783
|
-
for (const source of sources) {
|
|
784
|
-
const entry = sourceUsage(source);
|
|
785
|
-
if (entry === null) return UNKNOWN_USAGE2;
|
|
786
|
-
if (entry.isDynamic) return UNKNOWN_USAGE2;
|
|
787
|
-
for (const name of entry.names) names.add(name);
|
|
788
|
-
for (const pattern of entry.patterns) patterns.add(pattern);
|
|
789
|
-
}
|
|
790
|
-
const patternList = [...patterns];
|
|
791
|
-
const compiled = patternList.map(toRegExp);
|
|
792
|
-
const has = classMatcher(names, compiled);
|
|
793
|
-
const size = names.size;
|
|
794
|
-
const usage = { has, isDynamic: false, size };
|
|
795
|
-
return usage;
|
|
796
|
-
};
|
|
797
|
-
|
|
798
|
-
// packages/lint-suite/src/lib/rules/utils/resolved-rules.util.ts
|
|
799
|
-
var walkContainer = (container, parents, visit) => {
|
|
800
|
-
for (const node of container.nodes ?? []) {
|
|
801
|
-
if (node.type === "rule") {
|
|
802
|
-
const resolved = resolveSelectors(node.selectors, parents);
|
|
803
|
-
visit(node, resolved, parents);
|
|
804
|
-
walkContainer(node, resolved, visit);
|
|
805
|
-
continue;
|
|
806
|
-
}
|
|
807
|
-
if (node.type !== "atrule") continue;
|
|
808
|
-
walkContainer(node, parents, visit);
|
|
809
|
-
}
|
|
810
|
-
};
|
|
811
|
-
var walkResolvedRules = (root, visit) => {
|
|
812
|
-
walkContainer(root, [], visit);
|
|
813
|
-
};
|
|
814
|
-
|
|
815
|
-
// packages/lint-suite/src/lib/rules/no-unused-classes/no-unused-classes.ts
|
|
816
|
-
var { createPlugin, utils } = stylelint;
|
|
817
|
-
var DEFAULT_IGNORE_PATTERNS = ["^(js|qa|mat|cdk|mdc)-"];
|
|
818
|
-
var ruleName = "lint-suite/no-unused-classes";
|
|
819
|
-
var rejected = (name) => {
|
|
820
|
-
return `Unexpected class ".${name}" not used by any template of this stylesheet`;
|
|
821
|
-
};
|
|
822
|
-
var messages = utils.ruleMessages(ruleName, { rejected });
|
|
823
|
-
var meta = {
|
|
824
|
-
url: "https://github.com/F0rty-Tw0/lint-suite#no-unused-classes"
|
|
825
|
-
};
|
|
826
|
-
var isString = (value) => typeof value === "string";
|
|
827
|
-
var validate = (result, primary, secondary) => {
|
|
828
|
-
const primaryOptions = { actual: primary, possible: [true] };
|
|
829
|
-
const possible = { ignoreClassPatterns: [isString] };
|
|
830
|
-
const secondaryOptions = { actual: secondary, possible, optional: true };
|
|
831
|
-
return utils.validateOptions(
|
|
832
|
-
result,
|
|
833
|
-
ruleName,
|
|
834
|
-
primaryOptions,
|
|
835
|
-
secondaryOptions
|
|
836
|
-
);
|
|
837
|
-
};
|
|
838
|
-
var addNames2 = (selector, names) => {
|
|
839
|
-
for (const name of selectorTemplateClasses(selector)) names.add(name);
|
|
840
|
-
};
|
|
841
|
-
var extendedClasses = (root) => {
|
|
842
|
-
const names = /* @__PURE__ */ new Set();
|
|
843
|
-
const collect2 = (atRule) => addNames2(atRule.params, names);
|
|
844
|
-
root.walkAtRules("extend", collect2);
|
|
845
|
-
return names;
|
|
846
|
-
};
|
|
847
|
-
var isEmittingRule = (rule) => {
|
|
848
|
-
const isEmittingNode = (node) => {
|
|
849
|
-
return node.type === "decl" || node.type === "atrule";
|
|
850
|
-
};
|
|
851
|
-
const children = rule.nodes;
|
|
852
|
-
return children.some(isEmittingNode);
|
|
853
|
-
};
|
|
854
|
-
var emittedClasses = (root) => {
|
|
855
|
-
const names = /* @__PURE__ */ new Set();
|
|
856
|
-
const visit = (rule, resolved) => {
|
|
857
|
-
const isEmitting = isEmittingRule(rule);
|
|
858
|
-
if (!isEmitting) return;
|
|
859
|
-
for (const selector of resolved) addNames2(selector, names);
|
|
860
|
-
};
|
|
861
|
-
walkResolvedRules(root, visit);
|
|
862
|
-
return names;
|
|
863
|
-
};
|
|
864
|
-
var ruleClasses = (resolved, parents) => {
|
|
865
|
-
const inherited = /* @__PURE__ */ new Set();
|
|
866
|
-
for (const parent of parents) addNames2(parent, inherited);
|
|
867
|
-
const own = /* @__PURE__ */ new Set();
|
|
868
|
-
for (const selector of resolved) {
|
|
869
|
-
for (const name of selectorTemplateClasses(selector)) {
|
|
870
|
-
const isInherited = inherited.has(name);
|
|
871
|
-
if (isInherited) continue;
|
|
872
|
-
own.add(name);
|
|
873
|
-
}
|
|
874
|
-
}
|
|
875
|
-
return [...own];
|
|
876
|
-
};
|
|
877
|
-
var reportUnused = (context, rule, name) => {
|
|
878
|
-
const isEmitted = context.emitted.has(name);
|
|
879
|
-
if (!isEmitted) return;
|
|
880
|
-
const matchesIgnored = (pattern) => pattern.test(name);
|
|
881
|
-
const isIgnored = context.ignored.some(matchesIgnored);
|
|
882
|
-
if (isIgnored) return;
|
|
883
|
-
const isUsed = context.isUsed(name);
|
|
884
|
-
if (isUsed) return;
|
|
885
|
-
const isExtended = context.extended.has(name);
|
|
886
|
-
if (isExtended) return;
|
|
887
|
-
const message = messages.rejected(name);
|
|
888
|
-
const word = `.${name}`;
|
|
889
|
-
const problem = {
|
|
890
|
-
ruleName,
|
|
891
|
-
result: context.result,
|
|
892
|
-
node: rule,
|
|
893
|
-
message,
|
|
894
|
-
word
|
|
895
|
-
};
|
|
896
|
-
utils.report(problem);
|
|
897
|
-
};
|
|
898
|
-
var noUnusedClasses = (primary, secondary) => {
|
|
899
|
-
const walk = (root, result) => {
|
|
900
|
-
const isValid = validate(result, primary, secondary);
|
|
901
|
-
if (!isValid) return;
|
|
902
|
-
const file = root.source?.input.file;
|
|
903
|
-
if (file === void 0) return;
|
|
904
|
-
const templates2 = stylesheetTemplates(file);
|
|
905
|
-
if (templates2.length === 0) return;
|
|
906
|
-
const usage = templateUsage(templates2);
|
|
907
|
-
if (usage.isDynamic) return;
|
|
908
|
-
const patterns = secondary?.ignoreClassPatterns ?? DEFAULT_IGNORE_PATTERNS;
|
|
909
|
-
const ignored = patterns.map(toRegExp);
|
|
910
|
-
const extended = extendedClasses(root);
|
|
911
|
-
const emitted = emittedClasses(root);
|
|
912
|
-
const context = {
|
|
913
|
-
result,
|
|
914
|
-
ignored,
|
|
915
|
-
extended,
|
|
916
|
-
emitted,
|
|
917
|
-
isUsed: usage.has
|
|
918
|
-
};
|
|
919
|
-
const visit = (rule, resolved, parents) => {
|
|
920
|
-
for (const name of ruleClasses(resolved, parents)) {
|
|
921
|
-
reportUnused(context, rule, name);
|
|
922
|
-
}
|
|
923
|
-
};
|
|
924
|
-
walkResolvedRules(root, visit);
|
|
925
|
-
};
|
|
926
|
-
return walk;
|
|
927
|
-
};
|
|
928
|
-
noUnusedClasses.ruleName = ruleName;
|
|
929
|
-
noUnusedClasses.messages = messages;
|
|
930
|
-
noUnusedClasses.meta = meta;
|
|
931
|
-
var plugin = createPlugin(ruleName, noUnusedClasses);
|
|
932
|
-
var no_unused_classes_default = plugin;
|
|
933
|
-
|
|
934
|
-
// packages/lint-suite/src/stylelint.ts
|
|
935
|
-
var stylelint2 = {
|
|
10
|
+
var stylelint = {
|
|
936
11
|
// Stylelint resolves config for cwd when picking a formatter; without a
|
|
937
12
|
// top-level `rules` an overrides-only config fails with "No rules found".
|
|
938
13
|
rules: {},
|
|
@@ -940,11 +15,11 @@ var stylelint2 = {
|
|
|
940
15
|
{
|
|
941
16
|
files: ["**/*.scss", "**/*.css"],
|
|
942
17
|
extends: [
|
|
943
|
-
"stylelint-config-standard",
|
|
944
|
-
"stylelint-config-standard-scss",
|
|
945
|
-
"stylelint-config-recess-order"
|
|
18
|
+
resolveConfig("stylelint-config-standard"),
|
|
19
|
+
resolveConfig("stylelint-config-standard-scss"),
|
|
20
|
+
resolveConfig("stylelint-config-recess-order")
|
|
946
21
|
],
|
|
947
|
-
plugins: [...stylelintScss, bemPattern,
|
|
22
|
+
plugins: [...stylelintScss, bemPattern, noUnusedClasses],
|
|
948
23
|
rules: {
|
|
949
24
|
"selector-class-pattern": "^(?:(?:o|c|u|t|s|is|has|_|js|qa)-)?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:__[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:--[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:\\[.+\\])?$",
|
|
950
25
|
"plugin/selector-bem-pattern": {
|
|
@@ -962,6 +37,5 @@ var stylelint2 = {
|
|
|
962
37
|
]
|
|
963
38
|
};
|
|
964
39
|
export {
|
|
965
|
-
|
|
40
|
+
stylelint
|
|
966
41
|
};
|
|
967
|
-
//# sourceMappingURL=stylelint.js.map
|