@typestyles/cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{chunk-HWFK4DEK.js → chunk-5NP72GZV.js} +57 -55
- package/dist/chunk-5NP72GZV.js.map +1 -0
- package/dist/cli.cjs +52 -53
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.cjs +55 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-HWFK4DEK.js.map +0 -1
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/snapshot-classnames.ts","../src/commands/snapshot.ts","../src/cli.ts"],"names":["ts","fs","path","fg"],"mappings":"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","file":"cli.cjs","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport fg from 'fast-glob';\n\n/** Mirrors `sanitizeClassSegment` in `typestyles` class naming. */\nfunction sanitizeClassSegment(label: string): string {\n const normalized = label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-');\n return normalized.replace(/-+/g, '-').replace(/^-|-$/g, '') || 'style';\n}\n\nconst RESERVED_COMPONENT_KEYS = new Set([\n 'base',\n 'variants',\n 'compoundVariants',\n 'defaultVariants',\n 'slots',\n]);\n\nexport const PUBLIC_CLASSNAMES_SNAPSHOT = '.typestyles-public-classnames.json';\n\nexport type PublicClassNameEntry = {\n className: string;\n kind: 'class' | 'component';\n namespace: string;\n suffix?: string;\n file: string;\n line: number;\n};\n\nexport type PublicClassNamesSnapshot = {\n version: 1;\n classNames: string[];\n entries: PublicClassNameEntry[];\n};\n\nexport type StylesBindingConfig = {\n mode: 'semantic' | 'hashed' | 'compact' | 'atomic';\n scopeId: string;\n};\n\nexport type CollectPublicClassNamesOptions = {\n /** Project root for resolving snapshot paths and globs */\n rootDir?: string;\n /** Glob patterns relative to rootDir */\n include?: string[];\n /** Glob patterns to exclude */\n exclude?: string[];\n};\n\nconst DEFAULT_INCLUDE = ['**/*.{ts,tsx}'];\nconst DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/*.test.{ts,tsx}',\n '**/*.spec.{ts,tsx}',\n];\n\nfunction semanticScopePrefix(scopeId: string): string {\n if (!scopeId.trim()) return '';\n return `${sanitizeClassSegment(scopeId)}-`;\n}\n\nexport function semanticClassName(\n config: StylesBindingConfig,\n namespace: string,\n suffix?: string,\n): string | null {\n if (config.mode !== 'semantic') return null;\n const prefix = semanticScopePrefix(config.scopeId);\n if (suffix === undefined) return `${prefix}${namespace}`;\n return `${prefix}${namespace}-${suffix}`;\n}\n\nfunction getStaticObjectKey(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name)) return name.text;\n if (ts.isStringLiteral(name)) return name.text;\n return null;\n}\n\nfunction firstStringArg(args: ts.NodeArray<ts.Expression>): string | null {\n const first = args[0];\n if (!first || !ts.isStringLiteral(first)) return null;\n return first.text;\n}\n\nfunction unwrapExpression(expr: ts.Expression): ts.Expression {\n let current = expr;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\nfunction objectExpressionFromConfigArg(\n arg: ts.Expression | undefined,\n): ts.ObjectLiteralExpression | null {\n if (!arg) return null;\n const expr = unwrapExpression(arg);\n if (ts.isObjectLiteralExpression(expr)) return expr;\n if (ts.isArrowFunction(expr)) {\n if (ts.isObjectLiteralExpression(expr.body)) return expr.body;\n if (ts.isBlock(expr.body)) {\n for (const stmt of expr.body.statements) {\n if (\n ts.isReturnStatement(stmt) &&\n stmt.expression &&\n ts.isObjectLiteralExpression(unwrapExpression(stmt.expression))\n ) {\n return unwrapExpression(stmt.expression) as ts.ObjectLiteralExpression;\n }\n }\n }\n }\n return null;\n}\n\nfunction literalFromProperty(obj: ts.ObjectLiteralExpression, key: string): string | null {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const propKey = getStaticObjectKey(prop.name);\n if (propKey !== key) continue;\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteral(init)) return init.text;\n if (ts.isNoSubstitutionTemplateLiteral(init)) return init.text;\n }\n return null;\n}\n\nfunction hasObjectKey(obj: ts.ObjectLiteralExpression, key: string): boolean {\n return obj.properties.some((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === key;\n });\n}\n\nfunction collectSuffixesFromConfig(obj: ts.ObjectLiteralExpression): string[] {\n const suffixes: string[] = [];\n\n const hasVariants = hasObjectKey(obj, 'variants');\n const hasCompound = hasObjectKey(obj, 'compoundVariants');\n const hasDefaults = hasObjectKey(obj, 'defaultVariants');\n const hasSlots = hasObjectKey(obj, 'slots');\n\n if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {\n const baseObj = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'base';\n });\n if (\n baseObj &&\n ts.isPropertyAssignment(baseObj) &&\n ts.isObjectLiteralExpression(baseObj.initializer)\n ) {\n for (const slotProp of baseObj.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(slot);\n }\n }\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(optProp) ||\n !ts.isObjectLiteralExpression(optProp.initializer)\n ) {\n continue;\n }\n const option = getStaticObjectKey(optProp.name);\n if (!option) continue;\n for (const slotProp of optProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(`${slot}-${dimension}-${option}`);\n }\n }\n }\n }\n\n const compoundProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'compoundVariants';\n });\n if (\n compoundProp &&\n ts.isPropertyAssignment(compoundProp) &&\n ts.isArrayLiteralExpression(compoundProp.initializer)\n ) {\n compoundProp.initializer.elements.forEach((element, index) => {\n if (!element || !ts.isObjectLiteralExpression(element)) return;\n const styleProp = element.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'style';\n });\n if (\n styleProp &&\n ts.isPropertyAssignment(styleProp) &&\n ts.isObjectLiteralExpression(styleProp.initializer)\n ) {\n for (const slotProp of styleProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(`${slot}-compound-${index}`);\n }\n }\n });\n }\n\n return suffixes;\n }\n\n if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (\n slotsProp &&\n ts.isPropertyAssignment(slotsProp) &&\n ts.isArrayLiteralExpression(slotsProp.initializer)\n ) {\n for (const element of slotsProp.initializer.elements) {\n if (element && ts.isStringLiteral(element)) {\n suffixes.push(element.text);\n }\n }\n }\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || key === 'slots') continue;\n suffixes.push(key);\n }\n return suffixes;\n }\n\n if (hasVariants || hasCompound || hasDefaults) {\n if (hasObjectKey(obj, 'base')) suffixes.push('base');\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (!ts.isPropertyAssignment(optProp)) continue;\n const option = getStaticObjectKey(optProp.name);\n if (option) suffixes.push(`${dimension}-${option}`);\n }\n }\n }\n\n const compoundProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'compoundVariants';\n });\n if (\n compoundProp &&\n ts.isPropertyAssignment(compoundProp) &&\n ts.isArrayLiteralExpression(compoundProp.initializer)\n ) {\n compoundProp.initializer.elements.forEach((_, index) => {\n suffixes.push(`compound-${index}`);\n });\n }\n\n return suffixes;\n }\n\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || RESERVED_COMPONENT_KEYS.has(key)) continue;\n suffixes.push(key);\n }\n\n return suffixes;\n}\n\nfunction parseCreateStylesConfig(init: ts.Expression): StylesBindingConfig {\n const config: StylesBindingConfig = { mode: 'semantic', scopeId: '' };\n let expr = unwrapExpression(init);\n if (ts.isCallExpression(expr)) {\n const firstArg = expr.arguments[0];\n if (!firstArg) return config;\n expr = unwrapExpression(firstArg);\n }\n if (!ts.isObjectLiteralExpression(expr)) return config;\n\n const mode = literalFromProperty(expr, 'mode');\n if (mode === 'semantic' || mode === 'hashed' || mode === 'compact' || mode === 'atomic') {\n config.mode = mode;\n }\n const scopeId = literalFromProperty(expr, 'scopeId');\n if (scopeId != null) config.scopeId = scopeId;\n return config;\n}\n\nfunction isCreateStylesCall(expr: ts.Expression): boolean {\n const unwrapped = unwrapExpression(expr);\n if (!ts.isCallExpression(unwrapped)) return false;\n const callee = unwrapped.expression;\n if (\n ts.isIdentifier(callee) &&\n (callee.text === 'createStyles' || callee.text === 'createTypeStyles')\n ) {\n return true;\n }\n if (\n ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text === 'typestyles' &&\n (callee.name.text === 'createStyles' || callee.name.text === 'createTypeStyles')\n ) {\n return true;\n }\n return false;\n}\n\nfunction registerBindingFromCreateCall(\n bindings: Map<string, StylesBindingConfig>,\n name: string,\n init: ts.Expression,\n): void {\n bindings.set(name, parseCreateStylesConfig(init));\n}\n\nfunction collectBindings(sourceFile: ts.SourceFile): Map<string, StylesBindingConfig> {\n const bindings = new Map<string, StylesBindingConfig>();\n\n const visit = (node: ts.Node): void => {\n if (\n ts.isVariableDeclaration(node) &&\n node.initializer &&\n isCreateStylesCall(node.initializer)\n ) {\n if (ts.isIdentifier(node.name)) {\n registerBindingFromCreateCall(bindings, node.name.text, node.initializer);\n } else if (ts.isObjectBindingPattern(node.name)) {\n const config = parseCreateStylesConfig(node.initializer);\n for (const element of node.name.elements) {\n if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {\n bindings.set(element.name.text, config);\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return bindings;\n}\n\nfunction calleeMethodName(expr: ts.Expression): string | null {\n if (!ts.isPropertyAccessExpression(expr)) return null;\n if (ts.isIdentifier(expr.name)) return expr.name.text;\n return null;\n}\n\nfunction lineOf(sourceFile: ts.SourceFile, node: ts.Node): number {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));\n return line + 1;\n}\n\nfunction stylesBindingFromCallee(\n expr: ts.Expression,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): StylesBindingConfig {\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.expression)) {\n const binding = bindings.get(expr.expression.text);\n if (binding) return binding;\n if (expr.expression.text === 'styles' && defaultConfig) return defaultConfig;\n }\n if (ts.isIdentifier(expr) && expr.text === 'styles') {\n return bindings.get('styles') ?? defaultConfig ?? { mode: 'semantic', scopeId: '' };\n }\n return defaultConfig ?? { mode: 'semantic', scopeId: '' };\n}\n\nfunction mergeProjectBindings(sourceFiles: ts.SourceFile[]): {\n bindings: Map<string, StylesBindingConfig>;\n defaultConfig?: StylesBindingConfig;\n} {\n const bindings = new Map<string, StylesBindingConfig>();\n const configs: StylesBindingConfig[] = [];\n\n for (const sourceFile of sourceFiles) {\n const fileBindings = collectBindings(sourceFile);\n for (const [key, value] of fileBindings) {\n bindings.set(key, value);\n configs.push(value);\n }\n }\n\n const unique = new Map<string, StylesBindingConfig>();\n for (const config of configs) {\n unique.set(`${config.mode}:${config.scopeId}`, config);\n }\n\n const defaultConfig = unique.size === 1 ? [...unique.values()][0] : undefined;\n return { bindings, defaultConfig };\n}\n\nfunction collectCallsFromSourceFile(\n sourceFile: ts.SourceFile,\n relativePath: string,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): PublicClassNameEntry[] {\n const entries: PublicClassNameEntry[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const method = calleeMethodName(node.expression);\n if (method === 'class' || method === 'component') {\n const namespace = firstStringArg(node.arguments);\n if (!namespace) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const config = stylesBindingFromCallee(node.expression, bindings, defaultConfig);\n const line = lineOf(sourceFile, node.arguments[0] ?? node);\n\n if (method === 'class') {\n const className = semanticClassName(config, namespace);\n if (className) {\n entries.push({\n className,\n kind: 'class',\n namespace,\n file: relativePath,\n line,\n });\n }\n } else {\n const configObj = objectExpressionFromConfigArg(node.arguments[1]);\n const suffixes = configObj ? collectSuffixesFromConfig(configObj) : ['base'];\n for (const suffix of suffixes) {\n const className = semanticClassName(config, namespace, suffix);\n if (className) {\n entries.push({\n className,\n kind: 'component',\n namespace,\n suffix,\n file: relativePath,\n line,\n });\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return entries;\n}\n\nexport function collectPublicClassNamesFromFiles(\n filePaths: string[],\n rootDir: string,\n): PublicClassNameEntry[] {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n const sourceFile = ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n return { filePath, sourceFile, relativePath: path.relative(rootDir, filePath) };\n });\n\n const { bindings, defaultConfig } = mergeProjectBindings(parsed.map((item) => item.sourceFile));\n const entries: PublicClassNameEntry[] = [];\n\n for (const { sourceFile, relativePath } of parsed) {\n entries.push(...collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultConfig));\n }\n\n return dedupeEntries(entries);\n}\n\nfunction dedupeEntries(entries: PublicClassNameEntry[]): PublicClassNameEntry[] {\n const byClass = new Map<string, PublicClassNameEntry>();\n for (const entry of entries) {\n if (!byClass.has(entry.className)) {\n byClass.set(entry.className, entry);\n }\n }\n return [...byClass.values()].sort((a, b) => a.className.localeCompare(b.className));\n}\n\nexport async function collectPublicClassNames(\n options: CollectPublicClassNamesOptions = {},\n): Promise<PublicClassNameEntry[]> {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = await fg(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\nexport function collectPublicClassNamesSync(\n options: CollectPublicClassNamesOptions = {},\n): PublicClassNameEntry[] {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = fg.sync(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\n/** @internal Resolve merged `createStyles` / `createTypeStyles` bindings for tests. */\nexport function resolveProjectStylesBindings(\n filePaths: string[],\n _rootDir: string,\n): Map<string, StylesBindingConfig> {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n return ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n });\n return mergeProjectBindings(parsed).bindings;\n}\n\nexport function buildSnapshot(entries: PublicClassNameEntry[]): PublicClassNamesSnapshot {\n const sorted = dedupeEntries(entries);\n return {\n version: 1,\n classNames: sorted.map((entry) => entry.className),\n entries: sorted,\n };\n}\n\nexport function loadPublicClassNamesSnapshot(\n snapshotPath: string,\n): PublicClassNamesSnapshot | null {\n if (!fs.existsSync(snapshotPath)) return null;\n const raw = JSON.parse(fs.readFileSync(snapshotPath, 'utf8')) as PublicClassNamesSnapshot;\n if (!raw || raw.version !== 1 || !Array.isArray(raw.classNames)) {\n throw new Error(\n `[typestyles] Invalid public class name snapshot at ${snapshotPath}. Regenerate with \\`typestyles snapshot --write\\`.`,\n );\n }\n return raw;\n}\n\nexport function writePublicClassNamesSnapshot(\n snapshotPath: string,\n entries: PublicClassNameEntry[],\n): PublicClassNamesSnapshot {\n const snapshot = buildSnapshot(entries);\n fs.writeFileSync(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\\n`, 'utf8');\n return snapshot;\n}\n\nexport function diffRemovedPublicClassNames(\n snapshot: PublicClassNamesSnapshot,\n current: PublicClassNameEntry[],\n): PublicClassNameEntry[] {\n const currentSet = new Set(current.map((entry) => entry.className));\n return snapshot.entries.filter((entry) => !currentSet.has(entry.className));\n}\n","import path from 'node:path';\nimport {\n PUBLIC_CLASSNAMES_SNAPSHOT,\n collectPublicClassNames,\n writePublicClassNamesSnapshot,\n} from '../snapshot-classnames.js';\n\nexport const SNAPSHOT_HELP = `typestyles snapshot [options]\n\nScan TypeScript sources for semantic \\`styles.class\\` / \\`styles.component\\` class names\nand write or print the public API snapshot used by \\`@typestyles/no-removed-public-classname\\`.\n\nOptions:\n --write Write ${PUBLIC_CLASSNAMES_SNAPSHOT} in the project root\n --out <path> Snapshot output path (default: ./${PUBLIC_CLASSNAMES_SNAPSHOT})\n --root <path> Project root for scanning (default: cwd)\n --help Show this help\n`;\n\ntype SnapshotOptions = {\n write: boolean;\n outPath: string;\n rootDir: string;\n help: boolean;\n};\n\nfunction parseSnapshotArgs(argv: string[]): SnapshotOptions {\n let write = false;\n let outPath = PUBLIC_CLASSNAMES_SNAPSHOT;\n let rootDir = process.cwd();\n let help = false;\n\n for (let i = 0; i < argv.length; i += 1) {\n const token = argv[i];\n if (token === '--help' || token === '-h') {\n help = true;\n continue;\n }\n if (token === '--write') {\n write = true;\n continue;\n }\n if (token === '--out' && argv[i + 1]) {\n outPath = argv[i + 1];\n i += 1;\n continue;\n }\n if (token === '--root' && argv[i + 1]) {\n rootDir = path.resolve(argv[i + 1]);\n i += 1;\n }\n }\n\n return { write, outPath, rootDir, help };\n}\n\nfunction buildPreview(entries: Awaited<ReturnType<typeof collectPublicClassNames>>) {\n return {\n version: 1 as const,\n classNames: entries.map((entry) => entry.className),\n entries,\n };\n}\n\nexport async function runSnapshot(argv: string[]): Promise<void> {\n const { write, outPath, rootDir, help } = parseSnapshotArgs(argv);\n if (help) {\n process.stdout.write(SNAPSHOT_HELP);\n return;\n }\n\n const entries = await collectPublicClassNames({ rootDir });\n const resolvedOut = path.resolve(rootDir, outPath);\n\n if (write) {\n const snapshot = writePublicClassNamesSnapshot(resolvedOut, entries);\n process.stdout.write(\n `Wrote ${snapshot.classNames.length} public class name(s) to ${resolvedOut}\\n`,\n );\n return;\n }\n\n process.stdout.write(`${JSON.stringify(buildPreview(entries), null, 2)}\\n`);\n}\n","#!/usr/bin/env node\nimport { runSnapshot, SNAPSHOT_HELP } from './commands/snapshot.js';\n\nconst ROOT_HELP = `typestyles <command> [options]\n\nTypeStyles command-line tools.\n\nCommands:\n snapshot Snapshot semantic class names for semver guarding\n\nRun \\`typestyles <command> --help\\` for command-specific options.\n`;\n\nconst COMMANDS = {\n snapshot: runSnapshot,\n} as const;\n\ntype CommandName = keyof typeof COMMANDS;\n\nfunction isCommandName(value: string): value is CommandName {\n return value in COMMANDS;\n}\n\nasync function main(): Promise<void> {\n const argv = process.argv.slice(2);\n\n if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {\n process.stdout.write(ROOT_HELP);\n return;\n }\n\n const [command, ...rest] = argv;\n if (!isCommandName(command)) {\n process.stderr.write(`[typestyles] Unknown command \\`${command}\\`.\\n\\n${ROOT_HELP}`);\n process.exit(1);\n }\n\n if (rest[0] === '--help' || rest[0] === '-h') {\n if (command === 'snapshot') {\n process.stdout.write(SNAPSHOT_HELP);\n return;\n }\n }\n\n await COMMANDS[command](rest);\n}\n\nmain().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[typestyles] ${message}\\n`);\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/snapshot-classnames.ts","../src/commands/snapshot.ts","../src/cli.ts"],"names":["ts","fs","path","fg"],"mappings":"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","file":"cli.cjs","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport fg from 'fast-glob';\n\n/** Mirrors `sanitizeClassSegment` in `typestyles` class naming. */\nfunction sanitizeClassSegment(label: string): string {\n const normalized = label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-');\n return normalized.replace(/-+/g, '-').replace(/^-|-$/g, '') || 'style';\n}\n\nconst RESERVED_COMPONENT_KEYS = new Set([\n 'base',\n 'variants',\n 'compoundVariants',\n 'defaultVariants',\n 'slots',\n]);\n\nexport const PUBLIC_CLASSNAMES_SNAPSHOT = '.typestyles-public-classnames.json';\n\nexport type PublicClassNameEntry = {\n className: string;\n kind: 'class' | 'component';\n namespace: string;\n suffix?: string;\n file: string;\n line: number;\n};\n\nexport type PublicClassNamesSnapshot = {\n version: 1;\n classNames: string[];\n entries: PublicClassNameEntry[];\n};\n\nexport type StylesBindingConfig = {\n mode: 'semantic' | 'hashed' | 'compact' | 'atomic' | 'attribute' | 'bem' | 'template';\n scopeId: string;\n};\n\nexport type CollectPublicClassNamesOptions = {\n /** Project root for resolving snapshot paths and globs */\n rootDir?: string;\n /** Glob patterns relative to rootDir */\n include?: string[];\n /** Glob patterns to exclude */\n exclude?: string[];\n};\n\nconst DEFAULT_INCLUDE = ['**/*.{ts,tsx}'];\nconst DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/*.test.{ts,tsx}',\n '**/*.spec.{ts,tsx}',\n];\n\nfunction semanticScopePrefix(scopeId: string): string {\n if (!scopeId.trim()) return '';\n return `${sanitizeClassSegment(scopeId)}-`;\n}\n\nexport function semanticClassName(\n config: StylesBindingConfig,\n namespace: string,\n suffix?: string,\n): string | null {\n if (\n config.mode === 'hashed' ||\n config.mode === 'compact' ||\n config.mode === 'atomic' ||\n config.mode === 'template'\n ) {\n return null;\n }\n const prefix = semanticScopePrefix(config.scopeId);\n if (suffix === undefined || suffix === 'base') return `${prefix}${namespace}`;\n // Dimensioned attribute variants are data-* only; the helper cannot tell flat\n // modifiers from option names — prefer `componentClassName` / collect for that.\n if (config.mode === 'attribute') return `${prefix}${namespace}`;\n if (config.mode === 'bem') return `${prefix}${namespace}--${suffix}`;\n return `${prefix}${namespace}--${suffix}`;\n}\n\nfunction getStaticObjectKey(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name)) return name.text;\n if (ts.isStringLiteral(name)) return name.text;\n return null;\n}\n\nfunction firstStringArg(args: ts.NodeArray<ts.Expression>): string | null {\n const first = args[0];\n if (!first || !ts.isStringLiteral(first)) return null;\n return first.text;\n}\n\nfunction unwrapExpression(expr: ts.Expression): ts.Expression {\n let current = expr;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\nfunction objectExpressionFromConfigArg(\n arg: ts.Expression | undefined,\n): ts.ObjectLiteralExpression | null {\n if (!arg) return null;\n const expr = unwrapExpression(arg);\n if (ts.isObjectLiteralExpression(expr)) return expr;\n if (ts.isArrowFunction(expr)) {\n if (ts.isObjectLiteralExpression(expr.body)) return expr.body;\n if (ts.isBlock(expr.body)) {\n for (const stmt of expr.body.statements) {\n if (\n ts.isReturnStatement(stmt) &&\n stmt.expression &&\n ts.isObjectLiteralExpression(unwrapExpression(stmt.expression))\n ) {\n return unwrapExpression(stmt.expression) as ts.ObjectLiteralExpression;\n }\n }\n }\n }\n return null;\n}\n\nfunction literalFromProperty(obj: ts.ObjectLiteralExpression, key: string): string | null {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const propKey = getStaticObjectKey(prop.name);\n if (propKey !== key) continue;\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteral(init)) return init.text;\n if (ts.isNoSubstitutionTemplateLiteral(init)) return init.text;\n }\n return null;\n}\n\nfunction hasObjectKey(obj: ts.ObjectLiteralExpression, key: string): boolean {\n return obj.properties.some((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === key;\n });\n}\n\ntype ComponentClassNamePart = {\n suffix?: string;\n element?: string;\n dimension?: string;\n modifier?: string;\n};\n\nfunction collectClassNamePartsFromConfig(\n obj: ts.ObjectLiteralExpression,\n): ComponentClassNamePart[] {\n const parts: ComponentClassNamePart[] = [];\n\n const hasVariants = hasObjectKey(obj, 'variants');\n const hasCompound = hasObjectKey(obj, 'compoundVariants');\n const hasDefaults = hasObjectKey(obj, 'defaultVariants');\n const hasSlots = hasObjectKey(obj, 'slots');\n\n if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {\n const baseObj = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'base';\n });\n if (\n baseObj &&\n ts.isPropertyAssignment(baseObj) &&\n ts.isObjectLiteralExpression(baseObj.initializer)\n ) {\n for (const slotProp of baseObj.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) parts.push({ element: slot === 'root' ? undefined : slot });\n }\n }\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(optProp) ||\n !ts.isObjectLiteralExpression(optProp.initializer)\n ) {\n continue;\n }\n const option = getStaticObjectKey(optProp.name);\n if (!option) continue;\n for (const slotProp of optProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) {\n parts.push({\n element: slot === 'root' ? undefined : slot,\n dimension,\n modifier: option,\n });\n }\n }\n }\n }\n }\n\n return parts;\n }\n\n if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (\n slotsProp &&\n ts.isPropertyAssignment(slotsProp) &&\n ts.isArrayLiteralExpression(slotsProp.initializer)\n ) {\n for (const element of slotsProp.initializer.elements) {\n if (element && ts.isStringLiteral(element)) {\n parts.push({ element: element.text === 'root' ? undefined : element.text });\n }\n }\n }\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || key === 'slots') continue;\n parts.push({ element: key === 'root' ? undefined : key });\n }\n return parts;\n }\n\n if (hasVariants || hasCompound || hasDefaults) {\n parts.push({});\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (!ts.isPropertyAssignment(optProp)) continue;\n const option = getStaticObjectKey(optProp.name);\n if (option) parts.push({ dimension, modifier: option });\n }\n }\n }\n\n return parts;\n }\n\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key) continue;\n if (key === 'base') {\n parts.push({});\n continue;\n }\n if (RESERVED_COMPONENT_KEYS.has(key)) continue;\n parts.push({ modifier: key });\n }\n\n return parts;\n}\n\nfunction componentClassName(\n config: StylesBindingConfig,\n namespace: string,\n part: ComponentClassNamePart,\n): string | null {\n if (\n config.mode === 'hashed' ||\n config.mode === 'compact' ||\n config.mode === 'atomic' ||\n config.mode === 'template'\n ) {\n return null;\n }\n\n const prefix = semanticScopePrefix(config.scopeId);\n const block = `${prefix}${namespace}${part.element ? `__${part.element}` : ''}`;\n if (!part.modifier) return block;\n // Dimensioned attribute variants compile to data-* attrs (no public class).\n // Flat attribute modifiers still emit `block--modifier` classes.\n if (config.mode === 'attribute' && part.dimension) return block;\n if (config.mode === 'bem') return `${block}--${part.modifier}`;\n return `${block}--${part.dimension ? `${part.dimension}-` : ''}${part.modifier}`;\n}\n\nfunction parseCreateStylesConfig(init: ts.Expression): StylesBindingConfig {\n const config: StylesBindingConfig = { mode: 'semantic', scopeId: '' };\n let expr = unwrapExpression(init);\n if (ts.isCallExpression(expr)) {\n const firstArg = expr.arguments[0];\n if (!firstArg) return config;\n expr = unwrapExpression(firstArg);\n }\n if (!ts.isObjectLiteralExpression(expr)) return config;\n\n const mode = literalFromProperty(expr, 'mode');\n if (\n mode === 'semantic' ||\n mode === 'hashed' ||\n mode === 'compact' ||\n mode === 'atomic' ||\n mode === 'attribute' ||\n mode === 'bem' ||\n mode === 'template'\n ) {\n config.mode = mode;\n }\n const scopeId = literalFromProperty(expr, 'scopeId');\n if (scopeId != null) config.scopeId = scopeId;\n return config;\n}\n\nfunction isCreateStylesCall(expr: ts.Expression): boolean {\n const unwrapped = unwrapExpression(expr);\n if (!ts.isCallExpression(unwrapped)) return false;\n const callee = unwrapped.expression;\n if (\n ts.isIdentifier(callee) &&\n (callee.text === 'createStyles' || callee.text === 'createTypeStyles')\n ) {\n return true;\n }\n if (\n ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text === 'typestyles' &&\n (callee.name.text === 'createStyles' || callee.name.text === 'createTypeStyles')\n ) {\n return true;\n }\n return false;\n}\n\nfunction registerBindingFromCreateCall(\n bindings: Map<string, StylesBindingConfig>,\n name: string,\n init: ts.Expression,\n): void {\n bindings.set(name, parseCreateStylesConfig(init));\n}\n\nfunction collectBindings(sourceFile: ts.SourceFile): Map<string, StylesBindingConfig> {\n const bindings = new Map<string, StylesBindingConfig>();\n\n const visit = (node: ts.Node): void => {\n if (\n ts.isVariableDeclaration(node) &&\n node.initializer &&\n isCreateStylesCall(node.initializer)\n ) {\n if (ts.isIdentifier(node.name)) {\n registerBindingFromCreateCall(bindings, node.name.text, node.initializer);\n } else if (ts.isObjectBindingPattern(node.name)) {\n const config = parseCreateStylesConfig(node.initializer);\n for (const element of node.name.elements) {\n if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {\n bindings.set(element.name.text, config);\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return bindings;\n}\n\nfunction calleeMethodName(expr: ts.Expression): string | null {\n // New flat API: `style(...)` / `recipe(...)`\n if (ts.isIdentifier(expr)) {\n if (expr.text === 'style') return 'class';\n if (expr.text === 'recipe') return 'component';\n return null;\n }\n if (!ts.isPropertyAccessExpression(expr)) return null;\n if (ts.isIdentifier(expr.name)) return expr.name.text;\n return null;\n}\n\nfunction lineOf(sourceFile: ts.SourceFile, node: ts.Node): number {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));\n return line + 1;\n}\n\nfunction stylesBindingFromCallee(\n expr: ts.Expression,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): StylesBindingConfig {\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.expression)) {\n const binding = bindings.get(expr.expression.text);\n if (binding) return binding;\n if (expr.expression.text === 'styles' && defaultConfig) return defaultConfig;\n }\n if (ts.isIdentifier(expr)) {\n return bindings.get(expr.text) ?? defaultConfig ?? { mode: 'semantic', scopeId: '' };\n }\n return defaultConfig ?? { mode: 'semantic', scopeId: '' };\n}\n\nfunction mergeProjectBindings(sourceFiles: ts.SourceFile[]): {\n bindings: Map<string, StylesBindingConfig>;\n defaultConfig?: StylesBindingConfig;\n} {\n const bindings = new Map<string, StylesBindingConfig>();\n const configs: StylesBindingConfig[] = [];\n\n for (const sourceFile of sourceFiles) {\n const fileBindings = collectBindings(sourceFile);\n for (const [key, value] of fileBindings) {\n bindings.set(key, value);\n configs.push(value);\n }\n }\n\n const unique = new Map<string, StylesBindingConfig>();\n for (const config of configs) {\n unique.set(`${config.mode}:${config.scopeId}`, config);\n }\n\n const defaultConfig = unique.size === 1 ? [...unique.values()][0] : undefined;\n return { bindings, defaultConfig };\n}\n\nfunction collectCallsFromSourceFile(\n sourceFile: ts.SourceFile,\n relativePath: string,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): PublicClassNameEntry[] {\n const entries: PublicClassNameEntry[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const method = calleeMethodName(node.expression);\n if (method === 'class' || method === 'component') {\n const namespace = firstStringArg(node.arguments);\n if (!namespace) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const config = stylesBindingFromCallee(node.expression, bindings, defaultConfig);\n const line = lineOf(sourceFile, node.arguments[0] ?? node);\n\n if (method === 'class') {\n const className = semanticClassName(config, namespace);\n if (className) {\n entries.push({\n className,\n kind: 'class',\n namespace,\n file: relativePath,\n line,\n });\n }\n } else {\n const configObj = objectExpressionFromConfigArg(node.arguments[1]);\n const parts = configObj ? collectClassNamePartsFromConfig(configObj) : [{}];\n for (const part of parts) {\n const className = componentClassName(config, namespace, part);\n if (className) {\n entries.push({\n className,\n kind: 'component',\n namespace,\n suffix: part.modifier\n ? `${part.element ? `${part.element}-` : ''}${part.dimension ? `${part.dimension}-` : ''}${part.modifier}`\n : (part.element ?? 'base'),\n file: relativePath,\n line,\n });\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return entries;\n}\n\nexport function collectPublicClassNamesFromFiles(\n filePaths: string[],\n rootDir: string,\n): PublicClassNameEntry[] {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n const sourceFile = ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n return { filePath, sourceFile, relativePath: path.relative(rootDir, filePath) };\n });\n\n const { bindings, defaultConfig } = mergeProjectBindings(parsed.map((item) => item.sourceFile));\n const entries: PublicClassNameEntry[] = [];\n\n for (const { sourceFile, relativePath } of parsed) {\n entries.push(...collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultConfig));\n }\n\n return dedupeEntries(entries);\n}\n\nfunction dedupeEntries(entries: PublicClassNameEntry[]): PublicClassNameEntry[] {\n const byClass = new Map<string, PublicClassNameEntry>();\n for (const entry of entries) {\n if (!byClass.has(entry.className)) {\n byClass.set(entry.className, entry);\n }\n }\n return [...byClass.values()].sort((a, b) => a.className.localeCompare(b.className));\n}\n\nexport async function collectPublicClassNames(\n options: CollectPublicClassNamesOptions = {},\n): Promise<PublicClassNameEntry[]> {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = await fg(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\nexport function collectPublicClassNamesSync(\n options: CollectPublicClassNamesOptions = {},\n): PublicClassNameEntry[] {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = fg.sync(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\n/** @internal Resolve merged `createStyles` / `createTypeStyles` bindings for tests. */\nexport function resolveProjectStylesBindings(\n filePaths: string[],\n _rootDir: string,\n): Map<string, StylesBindingConfig> {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n return ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n });\n return mergeProjectBindings(parsed).bindings;\n}\n\nexport function buildSnapshot(entries: PublicClassNameEntry[]): PublicClassNamesSnapshot {\n const sorted = dedupeEntries(entries);\n return {\n version: 1,\n classNames: sorted.map((entry) => entry.className),\n entries: sorted,\n };\n}\n\nexport function loadPublicClassNamesSnapshot(\n snapshotPath: string,\n): PublicClassNamesSnapshot | null {\n if (!fs.existsSync(snapshotPath)) return null;\n const raw = JSON.parse(fs.readFileSync(snapshotPath, 'utf8')) as PublicClassNamesSnapshot;\n if (!raw || raw.version !== 1 || !Array.isArray(raw.classNames)) {\n throw new Error(\n `[typestyles] Invalid public class name snapshot at ${snapshotPath}. Regenerate with \\`typestyles snapshot --write\\`.`,\n );\n }\n return raw;\n}\n\nexport function writePublicClassNamesSnapshot(\n snapshotPath: string,\n entries: PublicClassNameEntry[],\n): PublicClassNamesSnapshot {\n const snapshot = buildSnapshot(entries);\n fs.writeFileSync(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\\n`, 'utf8');\n return snapshot;\n}\n\nexport function diffRemovedPublicClassNames(\n snapshot: PublicClassNamesSnapshot,\n current: PublicClassNameEntry[],\n): PublicClassNameEntry[] {\n const currentSet = new Set(current.map((entry) => entry.className));\n return snapshot.entries.filter((entry) => !currentSet.has(entry.className));\n}\n","import path from 'node:path';\nimport {\n PUBLIC_CLASSNAMES_SNAPSHOT,\n collectPublicClassNames,\n writePublicClassNamesSnapshot,\n} from '../snapshot-classnames.js';\n\nexport const SNAPSHOT_HELP = `typestyles snapshot [options]\n\nScan TypeScript sources for semantic \\`styles.class\\` / \\`styles.component\\` class names\nand write or print the public API snapshot used by \\`@typestyles/no-removed-public-classname\\`.\n\nOptions:\n --write Write ${PUBLIC_CLASSNAMES_SNAPSHOT} in the project root\n --out <path> Snapshot output path (default: ./${PUBLIC_CLASSNAMES_SNAPSHOT})\n --root <path> Project root for scanning (default: cwd)\n --help Show this help\n`;\n\ntype SnapshotOptions = {\n write: boolean;\n outPath: string;\n rootDir: string;\n help: boolean;\n};\n\nfunction parseSnapshotArgs(argv: string[]): SnapshotOptions {\n let write = false;\n let outPath = PUBLIC_CLASSNAMES_SNAPSHOT;\n let rootDir = process.cwd();\n let help = false;\n\n for (let i = 0; i < argv.length; i += 1) {\n const token = argv[i];\n if (token === '--help' || token === '-h') {\n help = true;\n continue;\n }\n if (token === '--write') {\n write = true;\n continue;\n }\n if (token === '--out' && argv[i + 1]) {\n outPath = argv[i + 1];\n i += 1;\n continue;\n }\n if (token === '--root' && argv[i + 1]) {\n rootDir = path.resolve(argv[i + 1]);\n i += 1;\n }\n }\n\n return { write, outPath, rootDir, help };\n}\n\nfunction buildPreview(entries: Awaited<ReturnType<typeof collectPublicClassNames>>) {\n return {\n version: 1 as const,\n classNames: entries.map((entry) => entry.className),\n entries,\n };\n}\n\nexport async function runSnapshot(argv: string[]): Promise<void> {\n const { write, outPath, rootDir, help } = parseSnapshotArgs(argv);\n if (help) {\n process.stdout.write(SNAPSHOT_HELP);\n return;\n }\n\n const entries = await collectPublicClassNames({ rootDir });\n const resolvedOut = path.resolve(rootDir, outPath);\n\n if (write) {\n const snapshot = writePublicClassNamesSnapshot(resolvedOut, entries);\n process.stdout.write(\n `Wrote ${snapshot.classNames.length} public class name(s) to ${resolvedOut}\\n`,\n );\n return;\n }\n\n process.stdout.write(`${JSON.stringify(buildPreview(entries), null, 2)}\\n`);\n}\n","#!/usr/bin/env node\nimport { runSnapshot, SNAPSHOT_HELP } from './commands/snapshot.js';\n\nconst ROOT_HELP = `typestyles <command> [options]\n\nTypeStyles command-line tools.\n\nCommands:\n snapshot Snapshot semantic class names for semver guarding\n\nRun \\`typestyles <command> --help\\` for command-specific options.\n`;\n\nconst COMMANDS = {\n snapshot: runSnapshot,\n} as const;\n\ntype CommandName = keyof typeof COMMANDS;\n\nfunction isCommandName(value: string): value is CommandName {\n return value in COMMANDS;\n}\n\nasync function main(): Promise<void> {\n const argv = process.argv.slice(2);\n\n if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {\n process.stdout.write(ROOT_HELP);\n return;\n }\n\n const [command, ...rest] = argv;\n if (!isCommandName(command)) {\n process.stderr.write(`[typestyles] Unknown command \\`${command}\\`.\\n\\n${ROOT_HELP}`);\n process.exit(1);\n }\n\n if (rest[0] === '--help' || rest[0] === '-h') {\n if (command === 'snapshot') {\n process.stdout.write(SNAPSHOT_HELP);\n return;\n }\n }\n\n await COMMANDS[command](rest);\n}\n\nmain().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[typestyles] ${message}\\n`);\n process.exit(1);\n});\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { PUBLIC_CLASSNAMES_SNAPSHOT, collectPublicClassNames, writePublicClassNamesSnapshot } from './chunk-
|
|
2
|
+
import { PUBLIC_CLASSNAMES_SNAPSHOT, collectPublicClassNames, writePublicClassNamesSnapshot } from './chunk-5NP72GZV.js';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
|
|
5
5
|
var SNAPSHOT_HELP = `typestyles snapshot [options]
|
package/dist/index.cjs
CHANGED
|
@@ -38,10 +38,14 @@ function semanticScopePrefix(scopeId) {
|
|
|
38
38
|
return `${sanitizeClassSegment(scopeId)}-`;
|
|
39
39
|
}
|
|
40
40
|
function semanticClassName(config, namespace, suffix) {
|
|
41
|
-
if (config.mode
|
|
41
|
+
if (config.mode === "hashed" || config.mode === "compact" || config.mode === "atomic" || config.mode === "template") {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
42
44
|
const prefix = semanticScopePrefix(config.scopeId);
|
|
43
|
-
if (suffix === void 0) return `${prefix}${namespace}`;
|
|
44
|
-
return `${prefix}${namespace}
|
|
45
|
+
if (suffix === void 0 || suffix === "base") return `${prefix}${namespace}`;
|
|
46
|
+
if (config.mode === "attribute") return `${prefix}${namespace}`;
|
|
47
|
+
if (config.mode === "bem") return `${prefix}${namespace}--${suffix}`;
|
|
48
|
+
return `${prefix}${namespace}--${suffix}`;
|
|
45
49
|
}
|
|
46
50
|
function getStaticObjectKey(name) {
|
|
47
51
|
if (ts__default.default.isIdentifier(name)) return name.text;
|
|
@@ -93,8 +97,8 @@ function hasObjectKey(obj, key) {
|
|
|
93
97
|
return getStaticObjectKey(prop.name) === key;
|
|
94
98
|
});
|
|
95
99
|
}
|
|
96
|
-
function
|
|
97
|
-
const
|
|
100
|
+
function collectClassNamePartsFromConfig(obj) {
|
|
101
|
+
const parts = [];
|
|
98
102
|
const hasVariants = hasObjectKey(obj, "variants");
|
|
99
103
|
const hasCompound = hasObjectKey(obj, "compoundVariants");
|
|
100
104
|
const hasDefaults = hasObjectKey(obj, "defaultVariants");
|
|
@@ -108,7 +112,7 @@ function collectSuffixesFromConfig(obj) {
|
|
|
108
112
|
for (const slotProp of baseObj.initializer.properties) {
|
|
109
113
|
if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
|
|
110
114
|
const slot = getStaticObjectKey(slotProp.name);
|
|
111
|
-
if (slot)
|
|
115
|
+
if (slot) parts.push({ element: slot === "root" ? void 0 : slot });
|
|
112
116
|
}
|
|
113
117
|
}
|
|
114
118
|
const variantsProp = obj.properties.find((prop) => {
|
|
@@ -131,32 +135,18 @@ function collectSuffixesFromConfig(obj) {
|
|
|
131
135
|
for (const slotProp of optProp.initializer.properties) {
|
|
132
136
|
if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
|
|
133
137
|
const slot = getStaticObjectKey(slotProp.name);
|
|
134
|
-
if (slot)
|
|
138
|
+
if (slot) {
|
|
139
|
+
parts.push({
|
|
140
|
+
element: slot === "root" ? void 0 : slot,
|
|
141
|
+
dimension,
|
|
142
|
+
modifier: option
|
|
143
|
+
});
|
|
144
|
+
}
|
|
135
145
|
}
|
|
136
146
|
}
|
|
137
147
|
}
|
|
138
148
|
}
|
|
139
|
-
|
|
140
|
-
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
141
|
-
return getStaticObjectKey(prop.name) === "compoundVariants";
|
|
142
|
-
});
|
|
143
|
-
if (compoundProp && ts__default.default.isPropertyAssignment(compoundProp) && ts__default.default.isArrayLiteralExpression(compoundProp.initializer)) {
|
|
144
|
-
compoundProp.initializer.elements.forEach((element, index) => {
|
|
145
|
-
if (!element || !ts__default.default.isObjectLiteralExpression(element)) return;
|
|
146
|
-
const styleProp = element.properties.find((prop) => {
|
|
147
|
-
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
148
|
-
return getStaticObjectKey(prop.name) === "style";
|
|
149
|
-
});
|
|
150
|
-
if (styleProp && ts__default.default.isPropertyAssignment(styleProp) && ts__default.default.isObjectLiteralExpression(styleProp.initializer)) {
|
|
151
|
-
for (const slotProp of styleProp.initializer.properties) {
|
|
152
|
-
if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
|
|
153
|
-
const slot = getStaticObjectKey(slotProp.name);
|
|
154
|
-
if (slot) suffixes.push(`${slot}-compound-${index}`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
return suffixes;
|
|
149
|
+
return parts;
|
|
160
150
|
}
|
|
161
151
|
if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {
|
|
162
152
|
const slotsProp = obj.properties.find((prop) => {
|
|
@@ -166,7 +156,7 @@ function collectSuffixesFromConfig(obj) {
|
|
|
166
156
|
if (slotsProp && ts__default.default.isPropertyAssignment(slotsProp) && ts__default.default.isArrayLiteralExpression(slotsProp.initializer)) {
|
|
167
157
|
for (const element of slotsProp.initializer.elements) {
|
|
168
158
|
if (element && ts__default.default.isStringLiteral(element)) {
|
|
169
|
-
|
|
159
|
+
parts.push({ element: element.text === "root" ? void 0 : element.text });
|
|
170
160
|
}
|
|
171
161
|
}
|
|
172
162
|
}
|
|
@@ -174,12 +164,12 @@ function collectSuffixesFromConfig(obj) {
|
|
|
174
164
|
if (!ts__default.default.isPropertyAssignment(prop)) continue;
|
|
175
165
|
const key = getStaticObjectKey(prop.name);
|
|
176
166
|
if (!key || key === "slots") continue;
|
|
177
|
-
|
|
167
|
+
parts.push({ element: key === "root" ? void 0 : key });
|
|
178
168
|
}
|
|
179
|
-
return
|
|
169
|
+
return parts;
|
|
180
170
|
}
|
|
181
171
|
if (hasVariants || hasCompound || hasDefaults) {
|
|
182
|
-
|
|
172
|
+
parts.push({});
|
|
183
173
|
const variantsProp = obj.properties.find((prop) => {
|
|
184
174
|
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
185
175
|
return getStaticObjectKey(prop.name) === "variants";
|
|
@@ -194,28 +184,35 @@ function collectSuffixesFromConfig(obj) {
|
|
|
194
184
|
for (const optProp of dimProp.initializer.properties) {
|
|
195
185
|
if (!ts__default.default.isPropertyAssignment(optProp)) continue;
|
|
196
186
|
const option = getStaticObjectKey(optProp.name);
|
|
197
|
-
if (option)
|
|
187
|
+
if (option) parts.push({ dimension, modifier: option });
|
|
198
188
|
}
|
|
199
189
|
}
|
|
200
190
|
}
|
|
201
|
-
|
|
202
|
-
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
203
|
-
return getStaticObjectKey(prop.name) === "compoundVariants";
|
|
204
|
-
});
|
|
205
|
-
if (compoundProp && ts__default.default.isPropertyAssignment(compoundProp) && ts__default.default.isArrayLiteralExpression(compoundProp.initializer)) {
|
|
206
|
-
compoundProp.initializer.elements.forEach((_, index) => {
|
|
207
|
-
suffixes.push(`compound-${index}`);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
return suffixes;
|
|
191
|
+
return parts;
|
|
211
192
|
}
|
|
212
193
|
for (const prop of obj.properties) {
|
|
213
194
|
if (!ts__default.default.isPropertyAssignment(prop)) continue;
|
|
214
195
|
const key = getStaticObjectKey(prop.name);
|
|
215
|
-
if (!key
|
|
216
|
-
|
|
196
|
+
if (!key) continue;
|
|
197
|
+
if (key === "base") {
|
|
198
|
+
parts.push({});
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (RESERVED_COMPONENT_KEYS.has(key)) continue;
|
|
202
|
+
parts.push({ modifier: key });
|
|
217
203
|
}
|
|
218
|
-
return
|
|
204
|
+
return parts;
|
|
205
|
+
}
|
|
206
|
+
function componentClassName(config, namespace, part) {
|
|
207
|
+
if (config.mode === "hashed" || config.mode === "compact" || config.mode === "atomic" || config.mode === "template") {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
const prefix = semanticScopePrefix(config.scopeId);
|
|
211
|
+
const block = `${prefix}${namespace}${part.element ? `__${part.element}` : ""}`;
|
|
212
|
+
if (!part.modifier) return block;
|
|
213
|
+
if (config.mode === "attribute" && part.dimension) return block;
|
|
214
|
+
if (config.mode === "bem") return `${block}--${part.modifier}`;
|
|
215
|
+
return `${block}--${part.dimension ? `${part.dimension}-` : ""}${part.modifier}`;
|
|
219
216
|
}
|
|
220
217
|
function parseCreateStylesConfig(init) {
|
|
221
218
|
const config = { mode: "semantic", scopeId: "" };
|
|
@@ -227,7 +224,7 @@ function parseCreateStylesConfig(init) {
|
|
|
227
224
|
}
|
|
228
225
|
if (!ts__default.default.isObjectLiteralExpression(expr)) return config;
|
|
229
226
|
const mode = literalFromProperty(expr, "mode");
|
|
230
|
-
if (mode === "semantic" || mode === "hashed" || mode === "compact" || mode === "atomic") {
|
|
227
|
+
if (mode === "semantic" || mode === "hashed" || mode === "compact" || mode === "atomic" || mode === "attribute" || mode === "bem" || mode === "template") {
|
|
231
228
|
config.mode = mode;
|
|
232
229
|
}
|
|
233
230
|
const scopeId = literalFromProperty(expr, "scopeId");
|
|
@@ -270,6 +267,11 @@ function collectBindings(sourceFile) {
|
|
|
270
267
|
return bindings;
|
|
271
268
|
}
|
|
272
269
|
function calleeMethodName(expr) {
|
|
270
|
+
if (ts__default.default.isIdentifier(expr)) {
|
|
271
|
+
if (expr.text === "style") return "class";
|
|
272
|
+
if (expr.text === "recipe") return "component";
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
273
275
|
if (!ts__default.default.isPropertyAccessExpression(expr)) return null;
|
|
274
276
|
if (ts__default.default.isIdentifier(expr.name)) return expr.name.text;
|
|
275
277
|
return null;
|
|
@@ -284,8 +286,8 @@ function stylesBindingFromCallee(expr, bindings, defaultConfig) {
|
|
|
284
286
|
if (binding) return binding;
|
|
285
287
|
if (expr.expression.text === "styles" && defaultConfig) return defaultConfig;
|
|
286
288
|
}
|
|
287
|
-
if (ts__default.default.isIdentifier(expr)
|
|
288
|
-
return bindings.get(
|
|
289
|
+
if (ts__default.default.isIdentifier(expr)) {
|
|
290
|
+
return bindings.get(expr.text) ?? defaultConfig ?? { mode: "semantic", scopeId: "" };
|
|
289
291
|
}
|
|
290
292
|
return defaultConfig ?? { mode: "semantic", scopeId: "" };
|
|
291
293
|
}
|
|
@@ -332,15 +334,15 @@ function collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultC
|
|
|
332
334
|
}
|
|
333
335
|
} else {
|
|
334
336
|
const configObj = objectExpressionFromConfigArg(node.arguments[1]);
|
|
335
|
-
const
|
|
336
|
-
for (const
|
|
337
|
-
const className =
|
|
337
|
+
const parts = configObj ? collectClassNamePartsFromConfig(configObj) : [{}];
|
|
338
|
+
for (const part of parts) {
|
|
339
|
+
const className = componentClassName(config, namespace, part);
|
|
338
340
|
if (className) {
|
|
339
341
|
entries.push({
|
|
340
342
|
className,
|
|
341
343
|
kind: "component",
|
|
342
344
|
namespace,
|
|
343
|
-
suffix,
|
|
345
|
+
suffix: part.modifier ? `${part.element ? `${part.element}-` : ""}${part.dimension ? `${part.dimension}-` : ""}${part.modifier}` : part.element ?? "base",
|
|
344
346
|
file: relativePath,
|
|
345
347
|
line
|
|
346
348
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/snapshot-classnames.ts"],"names":["ts","fs","path","fg"],"mappings":"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","file":"index.cjs","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport fg from 'fast-glob';\n\n/** Mirrors `sanitizeClassSegment` in `typestyles` class naming. */\nfunction sanitizeClassSegment(label: string): string {\n const normalized = label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-');\n return normalized.replace(/-+/g, '-').replace(/^-|-$/g, '') || 'style';\n}\n\nconst RESERVED_COMPONENT_KEYS = new Set([\n 'base',\n 'variants',\n 'compoundVariants',\n 'defaultVariants',\n 'slots',\n]);\n\nexport const PUBLIC_CLASSNAMES_SNAPSHOT = '.typestyles-public-classnames.json';\n\nexport type PublicClassNameEntry = {\n className: string;\n kind: 'class' | 'component';\n namespace: string;\n suffix?: string;\n file: string;\n line: number;\n};\n\nexport type PublicClassNamesSnapshot = {\n version: 1;\n classNames: string[];\n entries: PublicClassNameEntry[];\n};\n\nexport type StylesBindingConfig = {\n mode: 'semantic' | 'hashed' | 'compact' | 'atomic';\n scopeId: string;\n};\n\nexport type CollectPublicClassNamesOptions = {\n /** Project root for resolving snapshot paths and globs */\n rootDir?: string;\n /** Glob patterns relative to rootDir */\n include?: string[];\n /** Glob patterns to exclude */\n exclude?: string[];\n};\n\nconst DEFAULT_INCLUDE = ['**/*.{ts,tsx}'];\nconst DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/*.test.{ts,tsx}',\n '**/*.spec.{ts,tsx}',\n];\n\nfunction semanticScopePrefix(scopeId: string): string {\n if (!scopeId.trim()) return '';\n return `${sanitizeClassSegment(scopeId)}-`;\n}\n\nexport function semanticClassName(\n config: StylesBindingConfig,\n namespace: string,\n suffix?: string,\n): string | null {\n if (config.mode !== 'semantic') return null;\n const prefix = semanticScopePrefix(config.scopeId);\n if (suffix === undefined) return `${prefix}${namespace}`;\n return `${prefix}${namespace}-${suffix}`;\n}\n\nfunction getStaticObjectKey(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name)) return name.text;\n if (ts.isStringLiteral(name)) return name.text;\n return null;\n}\n\nfunction firstStringArg(args: ts.NodeArray<ts.Expression>): string | null {\n const first = args[0];\n if (!first || !ts.isStringLiteral(first)) return null;\n return first.text;\n}\n\nfunction unwrapExpression(expr: ts.Expression): ts.Expression {\n let current = expr;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\nfunction objectExpressionFromConfigArg(\n arg: ts.Expression | undefined,\n): ts.ObjectLiteralExpression | null {\n if (!arg) return null;\n const expr = unwrapExpression(arg);\n if (ts.isObjectLiteralExpression(expr)) return expr;\n if (ts.isArrowFunction(expr)) {\n if (ts.isObjectLiteralExpression(expr.body)) return expr.body;\n if (ts.isBlock(expr.body)) {\n for (const stmt of expr.body.statements) {\n if (\n ts.isReturnStatement(stmt) &&\n stmt.expression &&\n ts.isObjectLiteralExpression(unwrapExpression(stmt.expression))\n ) {\n return unwrapExpression(stmt.expression) as ts.ObjectLiteralExpression;\n }\n }\n }\n }\n return null;\n}\n\nfunction literalFromProperty(obj: ts.ObjectLiteralExpression, key: string): string | null {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const propKey = getStaticObjectKey(prop.name);\n if (propKey !== key) continue;\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteral(init)) return init.text;\n if (ts.isNoSubstitutionTemplateLiteral(init)) return init.text;\n }\n return null;\n}\n\nfunction hasObjectKey(obj: ts.ObjectLiteralExpression, key: string): boolean {\n return obj.properties.some((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === key;\n });\n}\n\nfunction collectSuffixesFromConfig(obj: ts.ObjectLiteralExpression): string[] {\n const suffixes: string[] = [];\n\n const hasVariants = hasObjectKey(obj, 'variants');\n const hasCompound = hasObjectKey(obj, 'compoundVariants');\n const hasDefaults = hasObjectKey(obj, 'defaultVariants');\n const hasSlots = hasObjectKey(obj, 'slots');\n\n if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {\n const baseObj = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'base';\n });\n if (\n baseObj &&\n ts.isPropertyAssignment(baseObj) &&\n ts.isObjectLiteralExpression(baseObj.initializer)\n ) {\n for (const slotProp of baseObj.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(slot);\n }\n }\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(optProp) ||\n !ts.isObjectLiteralExpression(optProp.initializer)\n ) {\n continue;\n }\n const option = getStaticObjectKey(optProp.name);\n if (!option) continue;\n for (const slotProp of optProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(`${slot}-${dimension}-${option}`);\n }\n }\n }\n }\n\n const compoundProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'compoundVariants';\n });\n if (\n compoundProp &&\n ts.isPropertyAssignment(compoundProp) &&\n ts.isArrayLiteralExpression(compoundProp.initializer)\n ) {\n compoundProp.initializer.elements.forEach((element, index) => {\n if (!element || !ts.isObjectLiteralExpression(element)) return;\n const styleProp = element.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'style';\n });\n if (\n styleProp &&\n ts.isPropertyAssignment(styleProp) &&\n ts.isObjectLiteralExpression(styleProp.initializer)\n ) {\n for (const slotProp of styleProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(`${slot}-compound-${index}`);\n }\n }\n });\n }\n\n return suffixes;\n }\n\n if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (\n slotsProp &&\n ts.isPropertyAssignment(slotsProp) &&\n ts.isArrayLiteralExpression(slotsProp.initializer)\n ) {\n for (const element of slotsProp.initializer.elements) {\n if (element && ts.isStringLiteral(element)) {\n suffixes.push(element.text);\n }\n }\n }\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || key === 'slots') continue;\n suffixes.push(key);\n }\n return suffixes;\n }\n\n if (hasVariants || hasCompound || hasDefaults) {\n if (hasObjectKey(obj, 'base')) suffixes.push('base');\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (!ts.isPropertyAssignment(optProp)) continue;\n const option = getStaticObjectKey(optProp.name);\n if (option) suffixes.push(`${dimension}-${option}`);\n }\n }\n }\n\n const compoundProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'compoundVariants';\n });\n if (\n compoundProp &&\n ts.isPropertyAssignment(compoundProp) &&\n ts.isArrayLiteralExpression(compoundProp.initializer)\n ) {\n compoundProp.initializer.elements.forEach((_, index) => {\n suffixes.push(`compound-${index}`);\n });\n }\n\n return suffixes;\n }\n\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || RESERVED_COMPONENT_KEYS.has(key)) continue;\n suffixes.push(key);\n }\n\n return suffixes;\n}\n\nfunction parseCreateStylesConfig(init: ts.Expression): StylesBindingConfig {\n const config: StylesBindingConfig = { mode: 'semantic', scopeId: '' };\n let expr = unwrapExpression(init);\n if (ts.isCallExpression(expr)) {\n const firstArg = expr.arguments[0];\n if (!firstArg) return config;\n expr = unwrapExpression(firstArg);\n }\n if (!ts.isObjectLiteralExpression(expr)) return config;\n\n const mode = literalFromProperty(expr, 'mode');\n if (mode === 'semantic' || mode === 'hashed' || mode === 'compact' || mode === 'atomic') {\n config.mode = mode;\n }\n const scopeId = literalFromProperty(expr, 'scopeId');\n if (scopeId != null) config.scopeId = scopeId;\n return config;\n}\n\nfunction isCreateStylesCall(expr: ts.Expression): boolean {\n const unwrapped = unwrapExpression(expr);\n if (!ts.isCallExpression(unwrapped)) return false;\n const callee = unwrapped.expression;\n if (\n ts.isIdentifier(callee) &&\n (callee.text === 'createStyles' || callee.text === 'createTypeStyles')\n ) {\n return true;\n }\n if (\n ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text === 'typestyles' &&\n (callee.name.text === 'createStyles' || callee.name.text === 'createTypeStyles')\n ) {\n return true;\n }\n return false;\n}\n\nfunction registerBindingFromCreateCall(\n bindings: Map<string, StylesBindingConfig>,\n name: string,\n init: ts.Expression,\n): void {\n bindings.set(name, parseCreateStylesConfig(init));\n}\n\nfunction collectBindings(sourceFile: ts.SourceFile): Map<string, StylesBindingConfig> {\n const bindings = new Map<string, StylesBindingConfig>();\n\n const visit = (node: ts.Node): void => {\n if (\n ts.isVariableDeclaration(node) &&\n node.initializer &&\n isCreateStylesCall(node.initializer)\n ) {\n if (ts.isIdentifier(node.name)) {\n registerBindingFromCreateCall(bindings, node.name.text, node.initializer);\n } else if (ts.isObjectBindingPattern(node.name)) {\n const config = parseCreateStylesConfig(node.initializer);\n for (const element of node.name.elements) {\n if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {\n bindings.set(element.name.text, config);\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return bindings;\n}\n\nfunction calleeMethodName(expr: ts.Expression): string | null {\n if (!ts.isPropertyAccessExpression(expr)) return null;\n if (ts.isIdentifier(expr.name)) return expr.name.text;\n return null;\n}\n\nfunction lineOf(sourceFile: ts.SourceFile, node: ts.Node): number {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));\n return line + 1;\n}\n\nfunction stylesBindingFromCallee(\n expr: ts.Expression,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): StylesBindingConfig {\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.expression)) {\n const binding = bindings.get(expr.expression.text);\n if (binding) return binding;\n if (expr.expression.text === 'styles' && defaultConfig) return defaultConfig;\n }\n if (ts.isIdentifier(expr) && expr.text === 'styles') {\n return bindings.get('styles') ?? defaultConfig ?? { mode: 'semantic', scopeId: '' };\n }\n return defaultConfig ?? { mode: 'semantic', scopeId: '' };\n}\n\nfunction mergeProjectBindings(sourceFiles: ts.SourceFile[]): {\n bindings: Map<string, StylesBindingConfig>;\n defaultConfig?: StylesBindingConfig;\n} {\n const bindings = new Map<string, StylesBindingConfig>();\n const configs: StylesBindingConfig[] = [];\n\n for (const sourceFile of sourceFiles) {\n const fileBindings = collectBindings(sourceFile);\n for (const [key, value] of fileBindings) {\n bindings.set(key, value);\n configs.push(value);\n }\n }\n\n const unique = new Map<string, StylesBindingConfig>();\n for (const config of configs) {\n unique.set(`${config.mode}:${config.scopeId}`, config);\n }\n\n const defaultConfig = unique.size === 1 ? [...unique.values()][0] : undefined;\n return { bindings, defaultConfig };\n}\n\nfunction collectCallsFromSourceFile(\n sourceFile: ts.SourceFile,\n relativePath: string,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): PublicClassNameEntry[] {\n const entries: PublicClassNameEntry[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const method = calleeMethodName(node.expression);\n if (method === 'class' || method === 'component') {\n const namespace = firstStringArg(node.arguments);\n if (!namespace) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const config = stylesBindingFromCallee(node.expression, bindings, defaultConfig);\n const line = lineOf(sourceFile, node.arguments[0] ?? node);\n\n if (method === 'class') {\n const className = semanticClassName(config, namespace);\n if (className) {\n entries.push({\n className,\n kind: 'class',\n namespace,\n file: relativePath,\n line,\n });\n }\n } else {\n const configObj = objectExpressionFromConfigArg(node.arguments[1]);\n const suffixes = configObj ? collectSuffixesFromConfig(configObj) : ['base'];\n for (const suffix of suffixes) {\n const className = semanticClassName(config, namespace, suffix);\n if (className) {\n entries.push({\n className,\n kind: 'component',\n namespace,\n suffix,\n file: relativePath,\n line,\n });\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return entries;\n}\n\nexport function collectPublicClassNamesFromFiles(\n filePaths: string[],\n rootDir: string,\n): PublicClassNameEntry[] {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n const sourceFile = ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n return { filePath, sourceFile, relativePath: path.relative(rootDir, filePath) };\n });\n\n const { bindings, defaultConfig } = mergeProjectBindings(parsed.map((item) => item.sourceFile));\n const entries: PublicClassNameEntry[] = [];\n\n for (const { sourceFile, relativePath } of parsed) {\n entries.push(...collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultConfig));\n }\n\n return dedupeEntries(entries);\n}\n\nfunction dedupeEntries(entries: PublicClassNameEntry[]): PublicClassNameEntry[] {\n const byClass = new Map<string, PublicClassNameEntry>();\n for (const entry of entries) {\n if (!byClass.has(entry.className)) {\n byClass.set(entry.className, entry);\n }\n }\n return [...byClass.values()].sort((a, b) => a.className.localeCompare(b.className));\n}\n\nexport async function collectPublicClassNames(\n options: CollectPublicClassNamesOptions = {},\n): Promise<PublicClassNameEntry[]> {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = await fg(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\nexport function collectPublicClassNamesSync(\n options: CollectPublicClassNamesOptions = {},\n): PublicClassNameEntry[] {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = fg.sync(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\n/** @internal Resolve merged `createStyles` / `createTypeStyles` bindings for tests. */\nexport function resolveProjectStylesBindings(\n filePaths: string[],\n _rootDir: string,\n): Map<string, StylesBindingConfig> {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n return ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n });\n return mergeProjectBindings(parsed).bindings;\n}\n\nexport function buildSnapshot(entries: PublicClassNameEntry[]): PublicClassNamesSnapshot {\n const sorted = dedupeEntries(entries);\n return {\n version: 1,\n classNames: sorted.map((entry) => entry.className),\n entries: sorted,\n };\n}\n\nexport function loadPublicClassNamesSnapshot(\n snapshotPath: string,\n): PublicClassNamesSnapshot | null {\n if (!fs.existsSync(snapshotPath)) return null;\n const raw = JSON.parse(fs.readFileSync(snapshotPath, 'utf8')) as PublicClassNamesSnapshot;\n if (!raw || raw.version !== 1 || !Array.isArray(raw.classNames)) {\n throw new Error(\n `[typestyles] Invalid public class name snapshot at ${snapshotPath}. Regenerate with \\`typestyles snapshot --write\\`.`,\n );\n }\n return raw;\n}\n\nexport function writePublicClassNamesSnapshot(\n snapshotPath: string,\n entries: PublicClassNameEntry[],\n): PublicClassNamesSnapshot {\n const snapshot = buildSnapshot(entries);\n fs.writeFileSync(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\\n`, 'utf8');\n return snapshot;\n}\n\nexport function diffRemovedPublicClassNames(\n snapshot: PublicClassNamesSnapshot,\n current: PublicClassNameEntry[],\n): PublicClassNameEntry[] {\n const currentSet = new Set(current.map((entry) => entry.className));\n return snapshot.entries.filter((entry) => !currentSet.has(entry.className));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/snapshot-classnames.ts"],"names":["ts","fs","path","fg"],"mappings":"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","file":"index.cjs","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport fg from 'fast-glob';\n\n/** Mirrors `sanitizeClassSegment` in `typestyles` class naming. */\nfunction sanitizeClassSegment(label: string): string {\n const normalized = label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-');\n return normalized.replace(/-+/g, '-').replace(/^-|-$/g, '') || 'style';\n}\n\nconst RESERVED_COMPONENT_KEYS = new Set([\n 'base',\n 'variants',\n 'compoundVariants',\n 'defaultVariants',\n 'slots',\n]);\n\nexport const PUBLIC_CLASSNAMES_SNAPSHOT = '.typestyles-public-classnames.json';\n\nexport type PublicClassNameEntry = {\n className: string;\n kind: 'class' | 'component';\n namespace: string;\n suffix?: string;\n file: string;\n line: number;\n};\n\nexport type PublicClassNamesSnapshot = {\n version: 1;\n classNames: string[];\n entries: PublicClassNameEntry[];\n};\n\nexport type StylesBindingConfig = {\n mode: 'semantic' | 'hashed' | 'compact' | 'atomic' | 'attribute' | 'bem' | 'template';\n scopeId: string;\n};\n\nexport type CollectPublicClassNamesOptions = {\n /** Project root for resolving snapshot paths and globs */\n rootDir?: string;\n /** Glob patterns relative to rootDir */\n include?: string[];\n /** Glob patterns to exclude */\n exclude?: string[];\n};\n\nconst DEFAULT_INCLUDE = ['**/*.{ts,tsx}'];\nconst DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/*.test.{ts,tsx}',\n '**/*.spec.{ts,tsx}',\n];\n\nfunction semanticScopePrefix(scopeId: string): string {\n if (!scopeId.trim()) return '';\n return `${sanitizeClassSegment(scopeId)}-`;\n}\n\nexport function semanticClassName(\n config: StylesBindingConfig,\n namespace: string,\n suffix?: string,\n): string | null {\n if (\n config.mode === 'hashed' ||\n config.mode === 'compact' ||\n config.mode === 'atomic' ||\n config.mode === 'template'\n ) {\n return null;\n }\n const prefix = semanticScopePrefix(config.scopeId);\n if (suffix === undefined || suffix === 'base') return `${prefix}${namespace}`;\n // Dimensioned attribute variants are data-* only; the helper cannot tell flat\n // modifiers from option names — prefer `componentClassName` / collect for that.\n if (config.mode === 'attribute') return `${prefix}${namespace}`;\n if (config.mode === 'bem') return `${prefix}${namespace}--${suffix}`;\n return `${prefix}${namespace}--${suffix}`;\n}\n\nfunction getStaticObjectKey(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name)) return name.text;\n if (ts.isStringLiteral(name)) return name.text;\n return null;\n}\n\nfunction firstStringArg(args: ts.NodeArray<ts.Expression>): string | null {\n const first = args[0];\n if (!first || !ts.isStringLiteral(first)) return null;\n return first.text;\n}\n\nfunction unwrapExpression(expr: ts.Expression): ts.Expression {\n let current = expr;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\nfunction objectExpressionFromConfigArg(\n arg: ts.Expression | undefined,\n): ts.ObjectLiteralExpression | null {\n if (!arg) return null;\n const expr = unwrapExpression(arg);\n if (ts.isObjectLiteralExpression(expr)) return expr;\n if (ts.isArrowFunction(expr)) {\n if (ts.isObjectLiteralExpression(expr.body)) return expr.body;\n if (ts.isBlock(expr.body)) {\n for (const stmt of expr.body.statements) {\n if (\n ts.isReturnStatement(stmt) &&\n stmt.expression &&\n ts.isObjectLiteralExpression(unwrapExpression(stmt.expression))\n ) {\n return unwrapExpression(stmt.expression) as ts.ObjectLiteralExpression;\n }\n }\n }\n }\n return null;\n}\n\nfunction literalFromProperty(obj: ts.ObjectLiteralExpression, key: string): string | null {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const propKey = getStaticObjectKey(prop.name);\n if (propKey !== key) continue;\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteral(init)) return init.text;\n if (ts.isNoSubstitutionTemplateLiteral(init)) return init.text;\n }\n return null;\n}\n\nfunction hasObjectKey(obj: ts.ObjectLiteralExpression, key: string): boolean {\n return obj.properties.some((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === key;\n });\n}\n\ntype ComponentClassNamePart = {\n suffix?: string;\n element?: string;\n dimension?: string;\n modifier?: string;\n};\n\nfunction collectClassNamePartsFromConfig(\n obj: ts.ObjectLiteralExpression,\n): ComponentClassNamePart[] {\n const parts: ComponentClassNamePart[] = [];\n\n const hasVariants = hasObjectKey(obj, 'variants');\n const hasCompound = hasObjectKey(obj, 'compoundVariants');\n const hasDefaults = hasObjectKey(obj, 'defaultVariants');\n const hasSlots = hasObjectKey(obj, 'slots');\n\n if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {\n const baseObj = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'base';\n });\n if (\n baseObj &&\n ts.isPropertyAssignment(baseObj) &&\n ts.isObjectLiteralExpression(baseObj.initializer)\n ) {\n for (const slotProp of baseObj.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) parts.push({ element: slot === 'root' ? undefined : slot });\n }\n }\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(optProp) ||\n !ts.isObjectLiteralExpression(optProp.initializer)\n ) {\n continue;\n }\n const option = getStaticObjectKey(optProp.name);\n if (!option) continue;\n for (const slotProp of optProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) {\n parts.push({\n element: slot === 'root' ? undefined : slot,\n dimension,\n modifier: option,\n });\n }\n }\n }\n }\n }\n\n return parts;\n }\n\n if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (\n slotsProp &&\n ts.isPropertyAssignment(slotsProp) &&\n ts.isArrayLiteralExpression(slotsProp.initializer)\n ) {\n for (const element of slotsProp.initializer.elements) {\n if (element && ts.isStringLiteral(element)) {\n parts.push({ element: element.text === 'root' ? undefined : element.text });\n }\n }\n }\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || key === 'slots') continue;\n parts.push({ element: key === 'root' ? undefined : key });\n }\n return parts;\n }\n\n if (hasVariants || hasCompound || hasDefaults) {\n parts.push({});\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (!ts.isPropertyAssignment(optProp)) continue;\n const option = getStaticObjectKey(optProp.name);\n if (option) parts.push({ dimension, modifier: option });\n }\n }\n }\n\n return parts;\n }\n\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key) continue;\n if (key === 'base') {\n parts.push({});\n continue;\n }\n if (RESERVED_COMPONENT_KEYS.has(key)) continue;\n parts.push({ modifier: key });\n }\n\n return parts;\n}\n\nfunction componentClassName(\n config: StylesBindingConfig,\n namespace: string,\n part: ComponentClassNamePart,\n): string | null {\n if (\n config.mode === 'hashed' ||\n config.mode === 'compact' ||\n config.mode === 'atomic' ||\n config.mode === 'template'\n ) {\n return null;\n }\n\n const prefix = semanticScopePrefix(config.scopeId);\n const block = `${prefix}${namespace}${part.element ? `__${part.element}` : ''}`;\n if (!part.modifier) return block;\n // Dimensioned attribute variants compile to data-* attrs (no public class).\n // Flat attribute modifiers still emit `block--modifier` classes.\n if (config.mode === 'attribute' && part.dimension) return block;\n if (config.mode === 'bem') return `${block}--${part.modifier}`;\n return `${block}--${part.dimension ? `${part.dimension}-` : ''}${part.modifier}`;\n}\n\nfunction parseCreateStylesConfig(init: ts.Expression): StylesBindingConfig {\n const config: StylesBindingConfig = { mode: 'semantic', scopeId: '' };\n let expr = unwrapExpression(init);\n if (ts.isCallExpression(expr)) {\n const firstArg = expr.arguments[0];\n if (!firstArg) return config;\n expr = unwrapExpression(firstArg);\n }\n if (!ts.isObjectLiteralExpression(expr)) return config;\n\n const mode = literalFromProperty(expr, 'mode');\n if (\n mode === 'semantic' ||\n mode === 'hashed' ||\n mode === 'compact' ||\n mode === 'atomic' ||\n mode === 'attribute' ||\n mode === 'bem' ||\n mode === 'template'\n ) {\n config.mode = mode;\n }\n const scopeId = literalFromProperty(expr, 'scopeId');\n if (scopeId != null) config.scopeId = scopeId;\n return config;\n}\n\nfunction isCreateStylesCall(expr: ts.Expression): boolean {\n const unwrapped = unwrapExpression(expr);\n if (!ts.isCallExpression(unwrapped)) return false;\n const callee = unwrapped.expression;\n if (\n ts.isIdentifier(callee) &&\n (callee.text === 'createStyles' || callee.text === 'createTypeStyles')\n ) {\n return true;\n }\n if (\n ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text === 'typestyles' &&\n (callee.name.text === 'createStyles' || callee.name.text === 'createTypeStyles')\n ) {\n return true;\n }\n return false;\n}\n\nfunction registerBindingFromCreateCall(\n bindings: Map<string, StylesBindingConfig>,\n name: string,\n init: ts.Expression,\n): void {\n bindings.set(name, parseCreateStylesConfig(init));\n}\n\nfunction collectBindings(sourceFile: ts.SourceFile): Map<string, StylesBindingConfig> {\n const bindings = new Map<string, StylesBindingConfig>();\n\n const visit = (node: ts.Node): void => {\n if (\n ts.isVariableDeclaration(node) &&\n node.initializer &&\n isCreateStylesCall(node.initializer)\n ) {\n if (ts.isIdentifier(node.name)) {\n registerBindingFromCreateCall(bindings, node.name.text, node.initializer);\n } else if (ts.isObjectBindingPattern(node.name)) {\n const config = parseCreateStylesConfig(node.initializer);\n for (const element of node.name.elements) {\n if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {\n bindings.set(element.name.text, config);\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return bindings;\n}\n\nfunction calleeMethodName(expr: ts.Expression): string | null {\n // New flat API: `style(...)` / `recipe(...)`\n if (ts.isIdentifier(expr)) {\n if (expr.text === 'style') return 'class';\n if (expr.text === 'recipe') return 'component';\n return null;\n }\n if (!ts.isPropertyAccessExpression(expr)) return null;\n if (ts.isIdentifier(expr.name)) return expr.name.text;\n return null;\n}\n\nfunction lineOf(sourceFile: ts.SourceFile, node: ts.Node): number {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));\n return line + 1;\n}\n\nfunction stylesBindingFromCallee(\n expr: ts.Expression,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): StylesBindingConfig {\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.expression)) {\n const binding = bindings.get(expr.expression.text);\n if (binding) return binding;\n if (expr.expression.text === 'styles' && defaultConfig) return defaultConfig;\n }\n if (ts.isIdentifier(expr)) {\n return bindings.get(expr.text) ?? defaultConfig ?? { mode: 'semantic', scopeId: '' };\n }\n return defaultConfig ?? { mode: 'semantic', scopeId: '' };\n}\n\nfunction mergeProjectBindings(sourceFiles: ts.SourceFile[]): {\n bindings: Map<string, StylesBindingConfig>;\n defaultConfig?: StylesBindingConfig;\n} {\n const bindings = new Map<string, StylesBindingConfig>();\n const configs: StylesBindingConfig[] = [];\n\n for (const sourceFile of sourceFiles) {\n const fileBindings = collectBindings(sourceFile);\n for (const [key, value] of fileBindings) {\n bindings.set(key, value);\n configs.push(value);\n }\n }\n\n const unique = new Map<string, StylesBindingConfig>();\n for (const config of configs) {\n unique.set(`${config.mode}:${config.scopeId}`, config);\n }\n\n const defaultConfig = unique.size === 1 ? [...unique.values()][0] : undefined;\n return { bindings, defaultConfig };\n}\n\nfunction collectCallsFromSourceFile(\n sourceFile: ts.SourceFile,\n relativePath: string,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): PublicClassNameEntry[] {\n const entries: PublicClassNameEntry[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const method = calleeMethodName(node.expression);\n if (method === 'class' || method === 'component') {\n const namespace = firstStringArg(node.arguments);\n if (!namespace) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const config = stylesBindingFromCallee(node.expression, bindings, defaultConfig);\n const line = lineOf(sourceFile, node.arguments[0] ?? node);\n\n if (method === 'class') {\n const className = semanticClassName(config, namespace);\n if (className) {\n entries.push({\n className,\n kind: 'class',\n namespace,\n file: relativePath,\n line,\n });\n }\n } else {\n const configObj = objectExpressionFromConfigArg(node.arguments[1]);\n const parts = configObj ? collectClassNamePartsFromConfig(configObj) : [{}];\n for (const part of parts) {\n const className = componentClassName(config, namespace, part);\n if (className) {\n entries.push({\n className,\n kind: 'component',\n namespace,\n suffix: part.modifier\n ? `${part.element ? `${part.element}-` : ''}${part.dimension ? `${part.dimension}-` : ''}${part.modifier}`\n : (part.element ?? 'base'),\n file: relativePath,\n line,\n });\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return entries;\n}\n\nexport function collectPublicClassNamesFromFiles(\n filePaths: string[],\n rootDir: string,\n): PublicClassNameEntry[] {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n const sourceFile = ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n return { filePath, sourceFile, relativePath: path.relative(rootDir, filePath) };\n });\n\n const { bindings, defaultConfig } = mergeProjectBindings(parsed.map((item) => item.sourceFile));\n const entries: PublicClassNameEntry[] = [];\n\n for (const { sourceFile, relativePath } of parsed) {\n entries.push(...collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultConfig));\n }\n\n return dedupeEntries(entries);\n}\n\nfunction dedupeEntries(entries: PublicClassNameEntry[]): PublicClassNameEntry[] {\n const byClass = new Map<string, PublicClassNameEntry>();\n for (const entry of entries) {\n if (!byClass.has(entry.className)) {\n byClass.set(entry.className, entry);\n }\n }\n return [...byClass.values()].sort((a, b) => a.className.localeCompare(b.className));\n}\n\nexport async function collectPublicClassNames(\n options: CollectPublicClassNamesOptions = {},\n): Promise<PublicClassNameEntry[]> {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = await fg(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\nexport function collectPublicClassNamesSync(\n options: CollectPublicClassNamesOptions = {},\n): PublicClassNameEntry[] {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = fg.sync(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\n/** @internal Resolve merged `createStyles` / `createTypeStyles` bindings for tests. */\nexport function resolveProjectStylesBindings(\n filePaths: string[],\n _rootDir: string,\n): Map<string, StylesBindingConfig> {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n return ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n });\n return mergeProjectBindings(parsed).bindings;\n}\n\nexport function buildSnapshot(entries: PublicClassNameEntry[]): PublicClassNamesSnapshot {\n const sorted = dedupeEntries(entries);\n return {\n version: 1,\n classNames: sorted.map((entry) => entry.className),\n entries: sorted,\n };\n}\n\nexport function loadPublicClassNamesSnapshot(\n snapshotPath: string,\n): PublicClassNamesSnapshot | null {\n if (!fs.existsSync(snapshotPath)) return null;\n const raw = JSON.parse(fs.readFileSync(snapshotPath, 'utf8')) as PublicClassNamesSnapshot;\n if (!raw || raw.version !== 1 || !Array.isArray(raw.classNames)) {\n throw new Error(\n `[typestyles] Invalid public class name snapshot at ${snapshotPath}. Regenerate with \\`typestyles snapshot --write\\`.`,\n );\n }\n return raw;\n}\n\nexport function writePublicClassNamesSnapshot(\n snapshotPath: string,\n entries: PublicClassNameEntry[],\n): PublicClassNamesSnapshot {\n const snapshot = buildSnapshot(entries);\n fs.writeFileSync(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\\n`, 'utf8');\n return snapshot;\n}\n\nexport function diffRemovedPublicClassNames(\n snapshot: PublicClassNamesSnapshot,\n current: PublicClassNameEntry[],\n): PublicClassNameEntry[] {\n const currentSet = new Set(current.map((entry) => entry.className));\n return snapshot.entries.filter((entry) => !currentSet.has(entry.className));\n}\n"]}
|