lint-suite 1.6.2 → 1.6.3

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.
Files changed (63) hide show
  1. package/README.md +149 -2
  2. package/eslint.cjs +1049 -309
  3. package/eslint.cjs.map +4 -4
  4. package/eslint.js +938 -175
  5. package/eslint.js.map +4 -4
  6. package/lib/angular-template.d.ts +1 -0
  7. package/lib/angular-template.d.ts.map +1 -1
  8. package/lib/angular.d.ts.map +1 -1
  9. package/lib/base-practices.d.ts.map +1 -1
  10. package/lib/line-length.const.d.ts +2 -0
  11. package/lib/line-length.const.d.ts.map +1 -0
  12. package/lib/rules/common/class-usage.type.d.ts +25 -0
  13. package/lib/rules/common/class-usage.type.d.ts.map +1 -0
  14. package/lib/rules/component-metadata.d.ts +5 -0
  15. package/lib/rules/component-metadata.d.ts.map +1 -0
  16. package/lib/rules/no-unstyled-classes/common/no-unstyled-classes.type.d.ts +33 -0
  17. package/lib/rules/no-unstyled-classes/common/no-unstyled-classes.type.d.ts.map +1 -0
  18. package/lib/rules/no-unstyled-classes/no-unstyled-classes.d.ts +8 -0
  19. package/lib/rules/no-unstyled-classes/no-unstyled-classes.d.ts.map +1 -0
  20. package/lib/rules/no-unstyled-classes/styles/component-stylesheets.d.ts +4 -0
  21. package/lib/rules/no-unstyled-classes/styles/component-stylesheets.d.ts.map +1 -0
  22. package/lib/rules/no-unstyled-classes/styles/stylesheet-classes.d.ts +3 -0
  23. package/lib/rules/no-unstyled-classes/styles/stylesheet-classes.d.ts.map +1 -0
  24. package/lib/rules/no-unstyled-classes/styles/stylesheet-collection.d.ts +4 -0
  25. package/lib/rules/no-unstyled-classes/styles/stylesheet-collection.d.ts.map +1 -0
  26. package/lib/rules/no-unstyled-classes/styles/stylesheet-imports.d.ts +2 -0
  27. package/lib/rules/no-unstyled-classes/styles/stylesheet-imports.d.ts.map +1 -0
  28. package/lib/rules/no-unstyled-classes/styles/template-stylesheets.d.ts +3 -0
  29. package/lib/rules/no-unstyled-classes/styles/template-stylesheets.d.ts.map +1 -0
  30. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-literals.d.ts.map +1 -1
  31. package/lib/rules/no-unused-classes/common/no-unused-classes.type.d.ts +24 -0
  32. package/lib/rules/no-unused-classes/common/no-unused-classes.type.d.ts.map +1 -0
  33. package/lib/rules/no-unused-classes/no-unused-classes.d.ts +8 -0
  34. package/lib/rules/no-unused-classes/no-unused-classes.d.ts.map +1 -0
  35. package/lib/rules/no-unused-classes/styles/component-descriptors.d.ts +3 -0
  36. package/lib/rules/no-unused-classes/styles/component-descriptors.d.ts.map +1 -0
  37. package/lib/rules/no-unused-classes/styles/stylesheet-components.d.ts +3 -0
  38. package/lib/rules/no-unused-classes/styles/stylesheet-components.d.ts.map +1 -0
  39. package/lib/rules/no-unused-classes/template/template-usage.d.ts +3 -0
  40. package/lib/rules/no-unused-classes/template/template-usage.d.ts.map +1 -0
  41. package/lib/rules/one-line-guard/one-line-guard.d.ts +10 -0
  42. package/lib/rules/one-line-guard/one-line-guard.d.ts.map +1 -0
  43. package/lib/rules/utils/class-expression-literals.util.d.ts +4 -0
  44. package/lib/rules/utils/class-expression-literals.util.d.ts.map +1 -0
  45. package/lib/rules/utils/resolved-rules.util.d.ts +5 -0
  46. package/lib/rules/utils/resolved-rules.util.d.ts.map +1 -0
  47. package/lib/rules/utils/selector-classes.util.d.ts +7 -0
  48. package/lib/rules/utils/selector-classes.util.d.ts.map +1 -0
  49. package/lib/rules/utils/template-classes.util.d.ts +3 -0
  50. package/lib/rules/utils/template-classes.util.d.ts.map +1 -0
  51. package/lib/typescript-local-plugin.d.ts.map +1 -1
  52. package/lib/typescript-safety.d.ts.map +1 -1
  53. package/package.json +4 -1
  54. package/prettier.cjs +6 -1
  55. package/prettier.cjs.map +3 -3
  56. package/prettier.d.ts.map +1 -1
  57. package/prettier.js +4 -1
  58. package/prettier.js.map +3 -3
  59. package/stylelint.cjs +680 -4
  60. package/stylelint.cjs.map +4 -4
  61. package/stylelint.d.ts.map +1 -1
  62. package/stylelint.js +708 -4
  63. package/stylelint.js.map +4 -4
package/stylelint.cjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../packages/lint-suite/src/stylelint.ts"],
4
- "sourcesContent": ["import type { Config } from 'stylelint';\nimport stylelintScss from 'stylelint-scss';\nimport bemPattern from 'stylelint-selector-bem-pattern';\n\nexport const stylelint: Config = {\n // Stylelint resolves config for cwd when picking a formatter; without a\n // top-level `rules` an overrides-only config fails with \"No rules found\".\n rules: {},\n overrides: [\n {\n files: ['**/*.scss', '**/*.css'],\n extends: [\n 'stylelint-config-standard',\n 'stylelint-config-standard-scss',\n 'stylelint-config-recess-order'\n ],\n plugins: [...stylelintScss, bemPattern],\n rules: {\n 'selector-class-pattern':\n '^(?:(?: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]+)*)?(?:\\\\[.+\\\\])?$',\n 'plugin/selector-bem-pattern': {\n preset: 'bem',\n implicitComponents: ['**/*.component.scss', '**/*.component.css'],\n ignoreCustomProperties: ['^--mdc', '^--sys']\n },\n 'no-descending-specificity': null\n }\n }\n ]\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAA0B;AAC1B,4CAAuB;AAEhB,IAAM,YAAoB;AAAA;AAAA;AAAA,EAG/B,OAAO,CAAC;AAAA,EACR,WAAW;AAAA,IACT;AAAA,MACE,OAAO,CAAC,aAAa,UAAU;AAAA,MAC/B,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,CAAC,GAAG,sBAAAA,SAAe,sCAAAC,OAAU;AAAA,MACtC,OAAO;AAAA,QACL,0BACE;AAAA,QACF,+BAA+B;AAAA,UAC7B,QAAQ;AAAA,UACR,oBAAoB,CAAC,uBAAuB,oBAAoB;AAAA,UAChE,wBAAwB,CAAC,UAAU,QAAQ;AAAA,QAC7C;AAAA,QACA,6BAA6B;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;",
6
- "names": ["stylelintScss", "bemPattern"]
3
+ "sources": ["../../../../packages/lint-suite/src/stylelint.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-classes/no-unused-classes.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-classes/styles/stylesheet-components.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-classes/styles/component-descriptors.ts", "../../../../packages/lint-suite/src/lib/rules/component-metadata.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-classes/template/template-usage.ts", "../../../../packages/lint-suite/src/lib/rules/utils/class-expression-literals.util.ts", "../../../../packages/lint-suite/src/lib/rules/utils/selector-classes.util.ts", "../../../../packages/lint-suite/src/lib/rules/utils/template-classes.util.ts", "../../../../packages/lint-suite/src/lib/rules/utils/resolved-rules.util.ts"],
4
+ "sourcesContent": ["import type { Config } from 'stylelint';\nimport stylelintScss from 'stylelint-scss';\nimport bemPattern from 'stylelint-selector-bem-pattern';\n\nimport noUnusedClasses from './lib/rules/no-unused-classes/no-unused-classes.ts';\n\nexport const stylelint: Config = {\n // Stylelint resolves config for cwd when picking a formatter; without a\n // top-level `rules` an overrides-only config fails with \"No rules found\".\n rules: {},\n overrides: [\n {\n files: ['**/*.scss', '**/*.css'],\n extends: [\n 'stylelint-config-standard',\n 'stylelint-config-standard-scss',\n 'stylelint-config-recess-order'\n ],\n plugins: [...stylelintScss, bemPattern, noUnusedClasses],\n rules: {\n 'selector-class-pattern':\n '^(?:(?: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]+)*)?(?:\\\\[.+\\\\])?$',\n 'plugin/selector-bem-pattern': {\n preset: 'bem',\n implicitComponents: ['**/*.component.scss', '**/*.component.css'],\n ignoreCustomProperties: ['^--mdc', '^--sys']\n },\n 'no-descending-specificity': null,\n 'lint-suite/no-unused-classes': true\n }\n }\n ]\n};\n", "import type { AtRule, Root, Rule } from 'postcss';\nimport stylelint from 'stylelint';\nimport type { Plugin, PostcssResult, Problem, RuleMeta } from 'stylelint';\n\nimport type { RuleOptions } from './common/no-unused-classes.type.ts';\nimport { stylesheetTemplates } from './styles/stylesheet-components.ts';\nimport { templateUsage } from './template/template-usage.ts';\nimport type { ClassMatcher } from '../common/class-usage.type.ts';\nimport { walkResolvedRules } from '../utils/resolved-rules.util.ts';\nimport { selectorTemplateClasses } from '../utils/selector-classes.util.ts';\n\ntype StylesheetWalker = (root: Root, result: PostcssResult) => void;\n\ntype UnusedContext = {\n readonly result: PostcssResult;\n readonly ignored: RegExp[];\n readonly extended: Set<string>;\n readonly isUsed: ClassMatcher;\n};\n\nconst { createPlugin, utils } = stylelint;\n\nconst DEFAULT_IGNORE_PATTERNS = ['^(js|qa|mat|cdk|mdc)-'];\n\nexport const ruleName = 'lint-suite/no-unused-classes';\n\nconst rejected = (name: string): string => {\n return `Unexpected class \".${name}\" not used by any template of this stylesheet`;\n};\n\nexport const messages = utils.ruleMessages(ruleName, { rejected });\n\nconst meta: RuleMeta = {\n url: 'https://github.com/F0rty-Tw0/lint-suite#no-unused-classes'\n};\n\nconst isString = (value: unknown): boolean => typeof value === 'string';\n\nconst toRegExp = (pattern: string): RegExp => new RegExp(pattern, 'u');\n\nconst validate = (\n result: PostcssResult,\n primary: true,\n secondary: RuleOptions | undefined\n): boolean => {\n const primaryOptions = { actual: primary, possible: [true] };\n const possible = { ignoreClassPatterns: [isString] };\n const secondaryOptions = { actual: secondary, possible, optional: true };\n\n return utils.validateOptions(\n result,\n ruleName,\n primaryOptions,\n secondaryOptions\n );\n};\n\nconst addNames = (selector: string, names: Set<string>): void => {\n for (const name of selectorTemplateClasses(selector)) names.add(name);\n};\n\nconst extendedClasses = (root: Root): Set<string> => {\n const names = new Set<string>();\n const collect = (atRule: AtRule): void => addNames(atRule.params, names);\n\n root.walkAtRules('extend', collect);\n\n return names;\n};\n\nconst ruleClasses = (resolved: string[], parents: string[]): string[] => {\n const inherited = new Set<string>();\n\n for (const parent of parents) addNames(parent, inherited);\n\n const own = new Set<string>();\n\n for (const selector of resolved) {\n for (const name of selectorTemplateClasses(selector)) {\n const isInherited = inherited.has(name);\n\n if (isInherited) continue;\n\n own.add(name);\n }\n }\n\n return [...own];\n};\n\nconst reportUnused = (\n context: UnusedContext,\n rule: Rule,\n name: string\n): void => {\n const matchesIgnored = (pattern: RegExp): boolean => pattern.test(name);\n const isIgnored = context.ignored.some(matchesIgnored);\n\n if (isIgnored) return;\n\n const isUsed = context.isUsed(name);\n\n if (isUsed) return;\n\n const isExtended = context.extended.has(name);\n\n if (isExtended) return;\n\n const message = messages.rejected(name);\n const word = `.${name}`;\n const problem: Problem = {\n ruleName,\n result: context.result,\n node: rule,\n message,\n word\n };\n\n utils.report(problem);\n};\n\nconst noUnusedClasses = (\n primary: true,\n secondary: RuleOptions | undefined\n): StylesheetWalker => {\n const walk = (root: Root, result: PostcssResult): void => {\n const isValid = validate(result, primary, secondary);\n\n if (!isValid) return;\n\n const file = root.source?.input.file;\n\n if (file === undefined) return;\n\n const templates = stylesheetTemplates(file);\n\n if (templates.length === 0) return;\n\n const usage = templateUsage(templates);\n\n if (usage.isDynamic) return;\n\n const patterns = secondary?.ignoreClassPatterns ?? DEFAULT_IGNORE_PATTERNS;\n const ignored = patterns.map(toRegExp);\n const extended = extendedClasses(root);\n const context: UnusedContext = {\n result,\n ignored,\n extended,\n isUsed: usage.has\n };\n const visit = (rule: Rule, resolved: string[], parents: string[]): void => {\n for (const name of ruleClasses(resolved, parents)) {\n reportUnused(context, rule, name);\n }\n };\n\n walkResolvedRules(root, visit);\n };\n\n return walk;\n};\n\nnoUnusedClasses.ruleName = ruleName;\nnoUnusedClasses.messages = messages;\nnoUnusedClasses.meta = meta;\n\nconst plugin: Plugin = createPlugin(ruleName, noUnusedClasses);\n\nexport default plugin;\n", "import { existsSync, readdirSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\n\nimport { componentDescriptors } from './component-descriptors.ts';\nimport type { ComponentDescriptor } from '../../common/class-usage.type.ts';\nimport type { TemplateSource } from '../common/no-unused-classes.type.ts';\n\nconst MODULE_EXTENSION = /\\.ts$/iu;\nconst STYLE_EXTENSION = /\\.(?:scss|sass|css)$/iu;\n\nconst UNKNOWN_TEMPLATE: TemplateSource = { kind: 'unknown' };\n\nconst declaredStylesheets = (\n descriptor: ComponentDescriptor,\n directory: string\n): string[] => {\n const resolveUrl = (url: string): string => resolve(directory, url);\n\n return descriptor.styleUrls.map(resolveUrl);\n};\n\nconst fileTemplate = (\n descriptor: ComponentDescriptor,\n directory: string\n): TemplateSource | null => {\n if (descriptor.templateUrl === null) return null;\n\n const path = resolve(directory, descriptor.templateUrl);\n const isPresent = existsSync(path);\n\n if (!isPresent) return null;\n\n const source: TemplateSource = { kind: 'file', path };\n\n return source;\n};\n\nconst inlineTemplate = (\n descriptor: ComponentDescriptor,\n componentPath: string\n): TemplateSource | null => {\n if (descriptor.template === null) return null;\n\n const source: TemplateSource = {\n kind: 'inline',\n source: descriptor.template,\n path: componentPath\n };\n\n return source;\n};\n\nconst componentTemplate = (\n descriptor: ComponentDescriptor,\n componentPath: string\n): TemplateSource => {\n const directory = dirname(componentPath);\n const file = fileTemplate(descriptor, directory);\n\n if (file !== null) return file;\n\n const inline = inlineTemplate(descriptor, componentPath);\n\n return inline ?? UNKNOWN_TEMPLATE;\n};\n\nconst matchedTemplates = (\n componentPath: string,\n stylesheetPath: string\n): TemplateSource[] => {\n const directory = dirname(componentPath);\n const sources: TemplateSource[] = [];\n\n for (const descriptor of componentDescriptors(componentPath)) {\n const declared = declaredStylesheets(descriptor, directory);\n const isMatch = declared.includes(stylesheetPath);\n\n if (!isMatch) continue;\n\n sources.push(componentTemplate(descriptor, componentPath));\n }\n\n return sources;\n};\n\nconst directoryModules = (directory: string): string[] => {\n try {\n return readdirSync(directory).filter((file) => MODULE_EXTENSION.test(file));\n } catch {\n return [];\n }\n};\n\nconst siblingTemplates = (stylesheetPath: string): TemplateSource[] => {\n const path = stylesheetPath.replace(STYLE_EXTENSION, '.html');\n const isPresent = existsSync(path);\n\n if (!isPresent) return [];\n\n const source: TemplateSource = { kind: 'file', path };\n\n return [source];\n};\n\nexport const stylesheetTemplates = (\n stylesheetPath: string\n): TemplateSource[] => {\n const resolved = resolve(stylesheetPath);\n const directory = dirname(resolved);\n const sources: TemplateSource[] = [];\n\n for (const file of directoryModules(directory)) {\n const componentPath = join(directory, file);\n\n sources.push(...matchedTemplates(componentPath, resolved));\n }\n\n if (sources.length > 0) return sources;\n\n return siblingTemplates(resolved);\n};\n", "import { readFileSync, statSync } from 'node:fs';\n\nimport type { ObjectLiteralExpression } from 'typescript';\n\nimport type { ComponentDescriptor } from '../../common/class-usage.type.ts';\nimport { metadataTexts, parseComponentMetadata } from '../../component-metadata.ts';\n\nconst COMPONENT_MARKER = '@Component';\n\ntype CachedDescriptors = {\n readonly descriptors: ComponentDescriptor[];\n readonly version: string;\n};\n\nconst cache = new Map<string, CachedDescriptors>();\n\nconst toDescriptor = (\n metadata: ObjectLiteralExpression\n): ComponentDescriptor => {\n const [templateUrl] = metadataTexts(metadata, 'templateUrl');\n const [template] = metadataTexts(metadata, 'template');\n const styleUrls = [\n ...metadataTexts(metadata, 'styleUrl'),\n ...metadataTexts(metadata, 'styleUrls')\n ];\n const descriptor: ComponentDescriptor = {\n templateUrl: templateUrl ?? null,\n template: template ?? null,\n styleUrls\n };\n\n return descriptor;\n};\n\nconst parseDescriptors = (\n text: string,\n path: string\n): ComponentDescriptor[] => {\n const hasComponent = text.includes(COMPONENT_MARKER);\n\n if (!hasComponent) return [];\n\n return parseComponentMetadata(text, path).map(toDescriptor);\n};\n\nexport const componentDescriptors = (path: string): ComponentDescriptor[] => {\n try {\n const stats = statSync(path, { bigint: true });\n const version = `${stats.mtimeNs}:${stats.size}`;\n const cached = cache.get(path);\n\n if (cached?.version === version) return cached.descriptors;\n\n const descriptors = parseDescriptors(readFileSync(path, 'utf8'), path);\n const fresh: CachedDescriptors = { descriptors, version };\n\n cache.set(path, fresh);\n\n return descriptors;\n } catch {\n return [];\n }\n};\n", "import { readFileSync } from 'node:fs';\n\nimport {\n ScriptTarget,\n canHaveDecorators,\n createSourceFile,\n forEachChild,\n getDecorators,\n isArrayLiteralExpression,\n isCallExpression,\n isIdentifier,\n isObjectLiteralExpression,\n isPropertyAssignment,\n isStringLiteralLike\n} from 'typescript';\nimport type {\n Decorator,\n Expression,\n Node,\n ObjectLiteralExpression\n} from 'typescript';\n\nconst componentArgument = (\n decorator: Decorator\n): ObjectLiteralExpression | null => {\n const { expression } = decorator;\n\n if (!isCallExpression(expression)) return null;\n\n if (!isIdentifier(expression.expression)) return null;\n\n const isComponent = expression.expression.text === 'Component';\n\n if (!isComponent) return null;\n\n const [argument] = expression.arguments;\n\n if (argument === undefined) return null;\n\n if (!isObjectLiteralExpression(argument)) return null;\n\n return argument;\n};\n\nconst decoratedMetadata = (node: Node): ObjectLiteralExpression | null => {\n if (!canHaveDecorators(node)) return null;\n\n const decorators = getDecorators(node) ?? [];\n\n for (const decorator of decorators) {\n const metadata = componentArgument(decorator);\n\n if (metadata !== null) return metadata;\n }\n\n return null;\n};\n\nexport const parseComponentMetadata = (\n text: string,\n path: string\n): ObjectLiteralExpression[] => {\n const found: ObjectLiteralExpression[] = [];\n\n const visit = (node: Node): void => {\n const metadata = decoratedMetadata(node);\n\n if (metadata !== null) found.push(metadata);\n\n forEachChild(node, visit);\n };\n\n const source = createSourceFile(path, text, ScriptTarget.Latest, true);\n\n forEachChild(source, visit);\n\n return found;\n};\n\nexport const componentMetadata = (path: string): ObjectLiteralExpression[] => {\n try {\n const text = readFileSync(path, 'utf8');\n\n return parseComponentMetadata(text, path);\n } catch {\n return [];\n }\n};\n\nconst literalText = (node: Expression): string | null => {\n if (!isStringLiteralLike(node)) return null;\n\n return node.text;\n};\n\nconst literalTexts = (node: Expression): string[] => {\n const single = literalText(node);\n\n if (single !== null) return [single];\n\n if (!isArrayLiteralExpression(node)) return [];\n\n const texts: string[] = [];\n\n for (const element of node.elements) {\n const text = literalText(element);\n\n if (text !== null) texts.push(text);\n }\n\n return texts;\n};\n\nconst metadataValue = (\n metadata: ObjectLiteralExpression,\n name: string\n): Expression | null => {\n for (const property of metadata.properties) {\n if (!isPropertyAssignment(property)) continue;\n\n if (!isIdentifier(property.name)) continue;\n\n const isMatch = property.name.text === name;\n\n if (isMatch) return property.initializer;\n }\n\n return null;\n};\n\nexport const metadataTexts = (\n metadata: ObjectLiteralExpression,\n name: string\n): string[] => {\n const value = metadataValue(metadata, name);\n\n if (value === null) return [];\n\n return literalTexts(value);\n};\n", "import {\n ASTWithSource,\n TmplAstRecursiveVisitor,\n parseTemplate,\n tmplAstVisitAll\n} from '@angular/compiler';\nimport type {\n AST,\n TmplAstBoundAttribute,\n TmplAstComponent,\n TmplAstElement,\n TmplAstTemplate\n} from '@angular/compiler';\n\nimport { readFileSync } from 'node:fs';\n\nimport type {\n ClassAttributeHost,\n ClassMatcher\n} from '../../common/class-usage.type.ts';\nimport { classExpressionUsage } from '../../utils/class-expression-literals.util.ts';\nimport { classMatcher } from '../../utils/selector-classes.util.ts';\nimport { templateClasses } from '../../utils/template-classes.util.ts';\nimport type {\n TemplateSource,\n TemplateUsage\n} from '../common/no-unused-classes.type.ts';\n\ntype TemplateText = {\n readonly text: string;\n readonly path: string;\n};\n\nconst CLASS_ATTRIBUTE = 'class';\nconst NG_CLASS_ATTRIBUTE = 'ngClass';\n\nconst matchesNone: ClassMatcher = () => false;\n\nconst UNKNOWN_USAGE: TemplateUsage = {\n has: matchesNone,\n isDynamic: true,\n size: 0\n};\n\nconst toRegExp = (pattern: string): RegExp => new RegExp(pattern, 'u');\n\nconst expressionSource = (value: AST): string | null => {\n const isWithSource = value instanceof ASTWithSource;\n\n if (!isWithSource) return null;\n\n return value.source;\n};\n\nconst isClassInput = (input: TmplAstBoundAttribute): boolean => {\n const isNgClass = input.name === NG_CLASS_ATTRIBUTE;\n\n if (isNgClass) return true;\n\n const isClass = input.name === CLASS_ATTRIBUTE;\n\n if (!isClass) return false;\n\n const { details } = input.keySpan;\n\n if (details === null) return true;\n\n return details === CLASS_ATTRIBUTE;\n};\n\nclass ClassUsageVisitor extends TmplAstRecursiveVisitor {\n public readonly names = new Set<string>();\n\n public readonly patterns = new Set<string>();\n\n public isDynamic = false;\n\n public override visitElement(element: TmplAstElement): void {\n this.collect(element);\n super.visitElement(element);\n }\n\n public override visitTemplate(template: TmplAstTemplate): void {\n this.collect(template);\n super.visitTemplate(template);\n }\n\n public override visitComponent(component: TmplAstComponent): void {\n this.collect(component);\n super.visitComponent(component);\n }\n\n private collect(node: ClassAttributeHost): void {\n for (const { name } of templateClasses(node)) this.names.add(name);\n\n for (const input of node.inputs) this.collectInput(input);\n }\n\n private collectInput(input: TmplAstBoundAttribute): void {\n const isClass = isClassInput(input);\n\n if (!isClass) return;\n\n const source = expressionSource(input.value);\n\n if (source === null) {\n this.isDynamic = true;\n\n return;\n }\n\n const usage = classExpressionUsage(source);\n\n for (const name of usage.names) this.names.add(name);\n\n for (const pattern of usage.patterns) this.patterns.add(pattern);\n\n if (usage.isDynamic) this.isDynamic = true;\n }\n}\n\nconst templateText = (source: TemplateSource): TemplateText | null => {\n if (source.kind === 'unknown') return null;\n\n if (source.kind === 'inline') {\n const inline: TemplateText = { text: source.source, path: source.path };\n\n return inline;\n }\n\n try {\n const text = readFileSync(source.path, 'utf8');\n const file: TemplateText = { text, path: source.path };\n\n return file;\n } catch {\n return null;\n }\n};\n\nexport const templateUsage = (sources: TemplateSource[]): TemplateUsage => {\n const visitor = new ClassUsageVisitor();\n\n for (const source of sources) {\n const template = templateText(source);\n\n if (template === null) return UNKNOWN_USAGE;\n\n const parsed = parseTemplate(template.text, template.path);\n\n if (parsed.errors !== null) return UNKNOWN_USAGE;\n\n tmplAstVisitAll(visitor, parsed.nodes);\n }\n\n if (visitor.isDynamic) return UNKNOWN_USAGE;\n\n const patterns = [...visitor.patterns].map(toRegExp);\n const has = classMatcher(visitor.names, patterns);\n const size = visitor.names.size;\n const usage: TemplateUsage = { has, isDynamic: false, size };\n\n return usage;\n};\n", "import {\n Conditional,\n Interpolation,\n Lexer,\n LiteralArray,\n LiteralMap,\n LiteralPrimitive,\n ParseLocation,\n ParseSourceFile,\n ParseSourceSpan,\n Parser\n} from '@angular/compiler';\nimport type { AST, ASTWithSource, LiteralMapKey } from '@angular/compiler';\n\nimport { classNamePattern } from './selector-classes.util.ts';\nimport type { ClassExpressionUsage } from '../common/class-usage.type.ts';\n\nconst WHITESPACE = /\\s+/u;\nconst EXPRESSION_FILE = 'class-expression';\nconst INTERPOLATION_TOKEN = 'zzinterpzz';\n\nconst parser = new Parser(new Lexer());\n\nconst spanOf = (source: string): ParseSourceSpan => {\n const file = new ParseSourceFile(source, EXPRESSION_FILE);\n const start = new ParseLocation(file, 0, 0, 0);\n const span = new ParseSourceSpan(start, start.moveBy(source.length));\n\n return span;\n};\n\nconst astOf = (parsed: ASTWithSource): AST | null => {\n const hasErrors = parsed.errors.length > 0;\n\n if (hasErrors) return null;\n\n return parsed.ast;\n};\n\nconst parseClassExpression = (source: string): AST | null => {\n try {\n const span = spanOf(source);\n const interpolation = parser.parseInterpolation(source, span, 0, null);\n\n if (interpolation) return astOf(interpolation);\n\n const binding = parser.parseBinding(source, span, 0);\n\n return astOf(binding);\n } catch {\n return null;\n }\n};\n\nconst addNames = (value: string, names: string[]): void => {\n for (const token of value.split(WHITESPACE)) {\n if (token) names.push(token);\n }\n};\n\nconst addPrimitive = (ast: LiteralPrimitive, names: string[]): void => {\n if (typeof ast.value === 'string') addNames(ast.value, names);\n};\n\nconst addMapKeys = (ast: LiteralMap, names: string[]): void => {\n for (const key of ast.keys) {\n if (key.kind !== 'spread') addNames(key.key, names);\n }\n};\n\nconst addInterpolation = (ast: Interpolation, names: string[]): void => {\n for (const text of ast.strings) addNames(text, names);\n};\n\nconst collect = (ast: AST, names: string[]): void => {\n if (ast instanceof LiteralPrimitive) {\n addPrimitive(ast, names);\n\n return;\n }\n\n if (ast instanceof LiteralMap) {\n addMapKeys(ast, names);\n\n return;\n }\n\n if (ast instanceof Interpolation) {\n addInterpolation(ast, names);\n\n return;\n }\n\n if (ast instanceof LiteralArray) {\n for (const expression of ast.expressions) collect(expression, names);\n\n return;\n }\n\n if (ast instanceof Conditional) {\n collect(ast.trueExp, names);\n collect(ast.falseExp, names);\n }\n};\n\nexport const classExpressionLiterals = (source: string): string[] => {\n const ast = parseClassExpression(source);\n\n if (ast === null) return [];\n\n const names: string[] = [];\n\n collect(ast, names);\n\n return [...new Set(names)];\n};\n\nconst isSpreadKey = (key: LiteralMapKey): boolean => key.kind === 'spread';\n\nconst isDynamicAst = (ast: AST): boolean => {\n if (ast instanceof LiteralPrimitive) return false;\n\n if (ast instanceof LiteralMap) return ast.keys.some(isSpreadKey);\n\n if (ast instanceof LiteralArray) return ast.expressions.some(isDynamicAst);\n\n if (ast instanceof Conditional) {\n const isTrueDynamic = isDynamicAst(ast.trueExp);\n const isFalseDynamic = isDynamicAst(ast.falseExp);\n\n return isTrueDynamic || isFalseDynamic;\n }\n\n return true;\n};\n\nconst isNamedToken = (token: string): boolean => token !== INTERPOLATION_TOKEN;\n\nconst isPatternToken = (token: string): boolean => {\n return token.includes(INTERPOLATION_TOKEN);\n};\n\nconst isPlainToken = (token: string): boolean => !isPatternToken(token);\n\nconst interpolationUsage = (ast: Interpolation): ClassExpressionUsage => {\n const joined = ast.strings.join(INTERPOLATION_TOKEN);\n const tokens = joined.split(WHITESPACE).filter(Boolean);\n const named = tokens.filter(isNamedToken);\n const patterns = named.filter(isPatternToken).map(classNamePattern);\n const names = named.filter(isPlainToken);\n const usage: ClassExpressionUsage = {\n names: [...new Set(names)],\n patterns: [...new Set(patterns)],\n isDynamic: named.length < tokens.length\n };\n\n return usage;\n};\n\nconst UNKNOWN_USAGE: ClassExpressionUsage = {\n names: [],\n patterns: [],\n isDynamic: true\n};\n\nexport const classExpressionUsage = (source: string): ClassExpressionUsage => {\n const ast = parseClassExpression(source);\n\n if (ast === null) return UNKNOWN_USAGE;\n\n if (ast instanceof Interpolation) return interpolationUsage(ast);\n\n const names: string[] = [];\n\n collect(ast, names);\n\n const isDynamic = isDynamicAst(ast);\n const usage: ClassExpressionUsage = {\n names: [...new Set(names)],\n patterns: [],\n isDynamic\n };\n\n return usage;\n};\n", "import selectorParser from 'postcss-selector-parser';\nimport type { Node } from 'postcss-selector-parser';\n\nimport type { ClassMatcher, SelectorClasses } from '../common/class-usage.type.ts';\n\ntype SelectorClassNode = { readonly value: string };\n\nconst INTERPOLATION_TOKEN = 'zzinterpzz';\nconst PARENT_TOKEN = 'zzparentzz';\nconst UNKNOWN_PARENT_SELECTOR = `.${PARENT_TOKEN}`;\nconst UNKNOWN_PARTS = new RegExp(\n `${INTERPOLATION_TOKEN}|${PARENT_TOKEN}`,\n 'gu'\n);\nconst INTERPOLATION = /#\\{[^}]*\\}/gu;\nconst DEEP_COMBINATORS = new Set(['/deep/', '>>>']);\nconst HOST_PSEUDOS = new Set([':host', ':host-context']);\nconst NG_DEEP_PSEUDO = '::ng-deep';\nconst REGEXP_META = /[.*+?^${}()|[\\]\\\\]/gu;\n\nconst escapeRegExp = (part: string): string => {\n return part.replaceAll(REGEXP_META, '\\\\$&');\n};\n\nexport const classNamePattern = (value: string): string => {\n const literals = value.split(UNKNOWN_PARTS).map(escapeRegExp);\n const joined = literals.join('.*');\n\n return `^${joined}$`;\n};\n\nconst withoutParent = (selector: string): string => {\n return selector.replaceAll('&', UNKNOWN_PARENT_SELECTOR);\n};\n\nconst withParent = (selector: string, parent: string): string => {\n const hasNesting = selector.includes('&');\n\n if (hasNesting) return selector.replaceAll('&', parent);\n\n return `${parent} ${selector}`;\n};\n\nexport const resolveSelectors = (\n selectors: string[],\n parents: string[]\n): string[] => {\n const hasParents = parents.length > 0;\n\n if (!hasParents) return selectors.map(withoutParent);\n\n const resolved: string[] = [];\n\n for (const parent of parents) {\n for (const selector of selectors) {\n resolved.push(withParent(selector, parent));\n }\n }\n\n return resolved;\n};\n\nexport const selectorClasses = (selector: string): SelectorClasses => {\n const exact: string[] = [];\n const patterns: string[] = [];\n const normalized = selector.replaceAll(INTERPOLATION, INTERPOLATION_TOKEN);\n\n const collect = (node: SelectorClassNode): void => {\n const isBareParent = node.value === PARENT_TOKEN;\n\n if (isBareParent) return;\n\n const hasInterpolation = node.value.includes(INTERPOLATION_TOKEN);\n const hasUnknownParent = node.value.includes(PARENT_TOKEN);\n const isDynamic = hasInterpolation || hasUnknownParent;\n\n if (isDynamic) {\n patterns.push(classNamePattern(node.value));\n\n return;\n }\n\n exact.push(node.value);\n };\n\n try {\n const root = selectorParser().astSync(normalized);\n\n root.walkClasses(collect);\n } catch {\n const empty: SelectorClasses = { exact: [], patterns: [] };\n\n return empty;\n }\n\n const classes: SelectorClasses = { exact, patterns };\n\n return classes;\n};\n\nconst isBoundaryNode = (node: Node): boolean => {\n if (node.type === 'combinator') return DEEP_COMBINATORS.has(node.value);\n\n if (node.type !== 'pseudo') return false;\n\n return node.value === NG_DEEP_PSEUDO;\n};\n\nconst addTemplateClass = (value: string, names: string[]): void => {\n const hasInterpolation = value.includes(INTERPOLATION_TOKEN);\n const hasUnknownParent = value.includes(PARENT_TOKEN);\n const isDynamic = hasInterpolation || hasUnknownParent;\n\n if (isDynamic) return;\n\n names.push(value);\n};\n\nconst collectTemplateClasses = (nodes: Node[], names: string[]): boolean => {\n for (const node of nodes) {\n const isBoundary = isBoundaryNode(node);\n\n if (isBoundary) return true;\n\n if (node.type === 'class') {\n addTemplateClass(node.value, names);\n continue;\n }\n\n if (node.type !== 'pseudo') continue;\n\n const isHost = HOST_PSEUDOS.has(node.value);\n\n if (isHost) continue;\n\n for (const argument of node.nodes) {\n const isStopped = collectTemplateClasses(argument.nodes, names);\n\n if (isStopped) return true;\n }\n }\n\n return false;\n};\n\nexport const selectorTemplateClasses = (selector: string): string[] => {\n const names: string[] = [];\n const normalized = selector.replaceAll(INTERPOLATION, INTERPOLATION_TOKEN);\n\n try {\n const root = selectorParser().astSync(normalized);\n\n for (const each of root.nodes) collectTemplateClasses(each.nodes, names);\n } catch {\n return [];\n }\n\n return [...new Set(names)];\n};\n\nexport const classMatcher = (\n exact: Set<string>,\n patterns: RegExp[]\n): ClassMatcher => {\n const matches = (name: string): boolean => {\n const isExact = exact.has(name);\n\n if (isExact) return true;\n\n return patterns.some((pattern) => pattern.test(name));\n };\n\n return matches;\n};\n", "import { ParseSourceSpan } from '@angular/compiler';\nimport type {\n TmplAstBoundAttribute,\n TmplAstTextAttribute\n} from '@angular/compiler';\n\nimport { classExpressionLiterals } from './class-expression-literals.util.ts';\nimport type { ClassAttributeHost, TemplateClass } from '../common/class-usage.type.ts';\n\nconst CLASS_ATTRIBUTE = 'class';\nconst CLASS_BINDING_PREFIX = 'class.';\nconst TOKEN = /\\S+/gu;\n\nconst expressionSource = (value: object): string | null => {\n if (!('source' in value)) return null;\n\n const { source } = value;\n\n if (typeof source !== 'string') return null;\n\n return source;\n};\n\nconst staticClasses = (attribute: TmplAstTextAttribute): TemplateClass[] => {\n const classes: TemplateClass[] = [];\n const valueSpan = attribute.valueSpan ?? attribute.sourceSpan;\n\n for (const token of attribute.value.matchAll(TOKEN)) {\n const start = valueSpan.start.moveBy(token.index);\n const end = valueSpan.start.moveBy(token.index + token[0].length);\n const span = new ParseSourceSpan(start, end);\n const templateClass: TemplateClass = { name: token[0], span };\n\n classes.push(templateClass);\n }\n\n return classes;\n};\n\nconst boundClassName = (input: TmplAstBoundAttribute): string | null => {\n const { details } = input.keySpan;\n\n if (details === null) return null;\n\n const isClassBinding = details.startsWith(CLASS_BINDING_PREFIX);\n\n if (!isClassBinding) return null;\n\n return input.name;\n};\n\nconst isClassExpression = (input: TmplAstBoundAttribute): boolean => {\n const isClassName = input.name === CLASS_ATTRIBUTE;\n\n if (!isClassName) return false;\n\n const { details } = input.keySpan;\n\n if (details === null) return true;\n\n return details === CLASS_ATTRIBUTE;\n};\n\nconst expressionClasses = (input: TmplAstBoundAttribute): TemplateClass[] => {\n const source = expressionSource(input.value);\n\n if (source === null) return [];\n\n const names = classExpressionLiterals(source);\n const templateClassOf = (name: string): TemplateClass => {\n const templateClass: TemplateClass = { name, span: input.sourceSpan };\n\n return templateClass;\n };\n\n return names.map(templateClassOf);\n};\n\nconst inputClasses = (input: TmplAstBoundAttribute): TemplateClass[] => {\n const bound = boundClassName(input);\n\n if (bound !== null) {\n const templateClass: TemplateClass = { name: bound, span: input.keySpan };\n\n return [templateClass];\n }\n\n const isExpression = isClassExpression(input);\n\n if (!isExpression) return [];\n\n return expressionClasses(input);\n};\n\nexport const templateClasses = (node: ClassAttributeHost): TemplateClass[] => {\n const classes: TemplateClass[] = [];\n\n for (const attribute of node.attributes) {\n const isClassName = attribute.name === CLASS_ATTRIBUTE;\n\n if (isClassName) classes.push(...staticClasses(attribute));\n }\n\n for (const input of node.inputs) {\n classes.push(...inputClasses(input));\n }\n\n return classes;\n};\n", "import type { ChildNode, Container, Root, Rule } from 'postcss';\n\nimport { resolveSelectors } from './selector-classes.util.ts';\n\ntype ResolvedRuleVisitor = (\n rule: Rule,\n resolved: string[],\n parents: string[]\n) => void;\n\nconst walkContainer = (\n container: Container<ChildNode>,\n parents: string[],\n visit: ResolvedRuleVisitor\n): void => {\n for (const node of container.nodes ?? []) {\n if (node.type === 'rule') {\n const resolved = resolveSelectors(node.selectors, parents);\n\n visit(node, resolved, parents);\n walkContainer(node, resolved, visit);\n continue;\n }\n\n if (node.type !== 'atrule') continue;\n\n walkContainer(node, parents, visit);\n }\n};\n\nexport const walkResolvedRules = (\n root: Root,\n visit: ResolvedRuleVisitor\n): void => {\n walkContainer(root, [], visit);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["stylelint", "import_node_fs", "import_compiler", "import_node_fs", "selectorParser", "INTERPOLATION_TOKEN", "import_compiler", "CLASS_ATTRIBUTE", "UNKNOWN_USAGE", "expressionSource", "stylelint", "toRegExp", "addNames", "collect", "stylelint", "stylelintScss", "bemPattern"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stylelint.d.ts","sourceRoot":"","sources":["../../../../packages/lint-suite/src/stylelint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAIxC,eAAO,MAAM,SAAS,EAAE,MAyBvB,CAAC"}
1
+ {"version":3,"file":"stylelint.d.ts","sourceRoot":"","sources":["../../../../packages/lint-suite/src/stylelint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAMxC,eAAO,MAAM,SAAS,EAAE,MA0BvB,CAAC"}