@typestyles/cli 0.0.0-unstable.de79e3a17eb1 → 0.0.0-unstable.df708abe489f
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-WKIJALJC.js} +64 -57
- package/dist/chunk-WKIJALJC.js.map +1 -0
- package/dist/cli.cjs +62 -57
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +62 -55
- 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.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 } else {\n // `() => ({ ... })` wraps the object in parentheses.\n const body = unwrapExpression(expr.body);\n if (ts.isObjectLiteralExpression(body)) return body;\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 normalizeCalleeMethod(name: string): 'class' | 'component' | null {\n if (name === 'style' || name === 'class') return 'class';\n if (name === 'recipe' || name === 'component') return 'component';\n return null;\n}\n\nfunction calleeMethodName(expr: ts.Expression): 'class' | 'component' | null {\n // Flat API: `style(...)` / `recipe(...)` and `typestyles.style` / `typestyles.recipe`\n // Legacy: `styles.class` / `styles.component`\n if (ts.isIdentifier(expr)) {\n return normalizeCalleeMethod(expr.text);\n }\n if (!ts.isPropertyAccessExpression(expr)) return null;\n if (ts.isIdentifier(expr.name)) return normalizeCalleeMethod(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 \\`style\\` / \\`recipe\\` (and legacy \\`styles.class\\` /\n\\`styles.component\\`) class names and write or print the public API snapshot used by\n\\`@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,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { PUBLIC_CLASSNAMES_SNAPSHOT, collectPublicClassNames, writePublicClassNamesSnapshot } from './chunk-
|
|
2
|
+
import { PUBLIC_CLASSNAMES_SNAPSHOT, collectPublicClassNames, writePublicClassNamesSnapshot } from './chunk-WKIJALJC.js';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
|
|
5
5
|
var SNAPSHOT_HELP = `typestyles snapshot [options]
|
|
6
6
|
|
|
7
|
-
Scan TypeScript sources for semantic \`
|
|
8
|
-
and write or print the public API snapshot used by
|
|
7
|
+
Scan TypeScript sources for semantic \`style\` / \`recipe\` (and legacy \`styles.class\` /
|
|
8
|
+
\`styles.component\`) class names and write or print the public API snapshot used by
|
|
9
|
+
\`@typestyles/no-removed-public-classname\`.
|
|
9
10
|
|
|
10
11
|
Options:
|
|
11
12
|
--write Write ${PUBLIC_CLASSNAMES_SNAPSHOT} in the project root
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/snapshot.ts","../src/cli.ts"],"names":[],"mappings":";;;;AAOO,IAAM,aAAA,GAAgB,CAAA;;AAAA;AAAA;;AAAA;AAAA,gCAAA,
|
|
1
|
+
{"version":3,"sources":["../src/commands/snapshot.ts","../src/cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":["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 \\`style\\` / \\`recipe\\` (and legacy \\`styles.class\\` /\n\\`styles.component\\`) class names and write or print the public API snapshot used by\n\\`@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/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;
|
|
@@ -65,13 +69,15 @@ function objectExpressionFromConfigArg(arg) {
|
|
|
65
69
|
const expr = unwrapExpression(arg);
|
|
66
70
|
if (ts__default.default.isObjectLiteralExpression(expr)) return expr;
|
|
67
71
|
if (ts__default.default.isArrowFunction(expr)) {
|
|
68
|
-
if (ts__default.default.isObjectLiteralExpression(expr.body)) return expr.body;
|
|
69
72
|
if (ts__default.default.isBlock(expr.body)) {
|
|
70
73
|
for (const stmt of expr.body.statements) {
|
|
71
74
|
if (ts__default.default.isReturnStatement(stmt) && stmt.expression && ts__default.default.isObjectLiteralExpression(unwrapExpression(stmt.expression))) {
|
|
72
75
|
return unwrapExpression(stmt.expression);
|
|
73
76
|
}
|
|
74
77
|
}
|
|
78
|
+
} else {
|
|
79
|
+
const body = unwrapExpression(expr.body);
|
|
80
|
+
if (ts__default.default.isObjectLiteralExpression(body)) return body;
|
|
75
81
|
}
|
|
76
82
|
}
|
|
77
83
|
return null;
|
|
@@ -93,8 +99,8 @@ function hasObjectKey(obj, key) {
|
|
|
93
99
|
return getStaticObjectKey(prop.name) === key;
|
|
94
100
|
});
|
|
95
101
|
}
|
|
96
|
-
function
|
|
97
|
-
const
|
|
102
|
+
function collectClassNamePartsFromConfig(obj) {
|
|
103
|
+
const parts = [];
|
|
98
104
|
const hasVariants = hasObjectKey(obj, "variants");
|
|
99
105
|
const hasCompound = hasObjectKey(obj, "compoundVariants");
|
|
100
106
|
const hasDefaults = hasObjectKey(obj, "defaultVariants");
|
|
@@ -108,7 +114,7 @@ function collectSuffixesFromConfig(obj) {
|
|
|
108
114
|
for (const slotProp of baseObj.initializer.properties) {
|
|
109
115
|
if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
|
|
110
116
|
const slot = getStaticObjectKey(slotProp.name);
|
|
111
|
-
if (slot)
|
|
117
|
+
if (slot) parts.push({ element: slot === "root" ? void 0 : slot });
|
|
112
118
|
}
|
|
113
119
|
}
|
|
114
120
|
const variantsProp = obj.properties.find((prop) => {
|
|
@@ -131,32 +137,18 @@ function collectSuffixesFromConfig(obj) {
|
|
|
131
137
|
for (const slotProp of optProp.initializer.properties) {
|
|
132
138
|
if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
|
|
133
139
|
const slot = getStaticObjectKey(slotProp.name);
|
|
134
|
-
if (slot)
|
|
140
|
+
if (slot) {
|
|
141
|
+
parts.push({
|
|
142
|
+
element: slot === "root" ? void 0 : slot,
|
|
143
|
+
dimension,
|
|
144
|
+
modifier: option
|
|
145
|
+
});
|
|
146
|
+
}
|
|
135
147
|
}
|
|
136
148
|
}
|
|
137
149
|
}
|
|
138
150
|
}
|
|
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;
|
|
151
|
+
return parts;
|
|
160
152
|
}
|
|
161
153
|
if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {
|
|
162
154
|
const slotsProp = obj.properties.find((prop) => {
|
|
@@ -166,7 +158,7 @@ function collectSuffixesFromConfig(obj) {
|
|
|
166
158
|
if (slotsProp && ts__default.default.isPropertyAssignment(slotsProp) && ts__default.default.isArrayLiteralExpression(slotsProp.initializer)) {
|
|
167
159
|
for (const element of slotsProp.initializer.elements) {
|
|
168
160
|
if (element && ts__default.default.isStringLiteral(element)) {
|
|
169
|
-
|
|
161
|
+
parts.push({ element: element.text === "root" ? void 0 : element.text });
|
|
170
162
|
}
|
|
171
163
|
}
|
|
172
164
|
}
|
|
@@ -174,12 +166,12 @@ function collectSuffixesFromConfig(obj) {
|
|
|
174
166
|
if (!ts__default.default.isPropertyAssignment(prop)) continue;
|
|
175
167
|
const key = getStaticObjectKey(prop.name);
|
|
176
168
|
if (!key || key === "slots") continue;
|
|
177
|
-
|
|
169
|
+
parts.push({ element: key === "root" ? void 0 : key });
|
|
178
170
|
}
|
|
179
|
-
return
|
|
171
|
+
return parts;
|
|
180
172
|
}
|
|
181
173
|
if (hasVariants || hasCompound || hasDefaults) {
|
|
182
|
-
|
|
174
|
+
parts.push({});
|
|
183
175
|
const variantsProp = obj.properties.find((prop) => {
|
|
184
176
|
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
185
177
|
return getStaticObjectKey(prop.name) === "variants";
|
|
@@ -194,28 +186,35 @@ function collectSuffixesFromConfig(obj) {
|
|
|
194
186
|
for (const optProp of dimProp.initializer.properties) {
|
|
195
187
|
if (!ts__default.default.isPropertyAssignment(optProp)) continue;
|
|
196
188
|
const option = getStaticObjectKey(optProp.name);
|
|
197
|
-
if (option)
|
|
189
|
+
if (option) parts.push({ dimension, modifier: option });
|
|
198
190
|
}
|
|
199
191
|
}
|
|
200
192
|
}
|
|
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;
|
|
193
|
+
return parts;
|
|
211
194
|
}
|
|
212
195
|
for (const prop of obj.properties) {
|
|
213
196
|
if (!ts__default.default.isPropertyAssignment(prop)) continue;
|
|
214
197
|
const key = getStaticObjectKey(prop.name);
|
|
215
|
-
if (!key
|
|
216
|
-
|
|
198
|
+
if (!key) continue;
|
|
199
|
+
if (key === "base") {
|
|
200
|
+
parts.push({});
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
if (RESERVED_COMPONENT_KEYS.has(key)) continue;
|
|
204
|
+
parts.push({ modifier: key });
|
|
205
|
+
}
|
|
206
|
+
return parts;
|
|
207
|
+
}
|
|
208
|
+
function componentClassName(config, namespace, part) {
|
|
209
|
+
if (config.mode === "hashed" || config.mode === "compact" || config.mode === "atomic" || config.mode === "template") {
|
|
210
|
+
return null;
|
|
217
211
|
}
|
|
218
|
-
|
|
212
|
+
const prefix = semanticScopePrefix(config.scopeId);
|
|
213
|
+
const block = `${prefix}${namespace}${part.element ? `__${part.element}` : ""}`;
|
|
214
|
+
if (!part.modifier) return block;
|
|
215
|
+
if (config.mode === "attribute" && part.dimension) return block;
|
|
216
|
+
if (config.mode === "bem") return `${block}--${part.modifier}`;
|
|
217
|
+
return `${block}--${part.dimension ? `${part.dimension}-` : ""}${part.modifier}`;
|
|
219
218
|
}
|
|
220
219
|
function parseCreateStylesConfig(init) {
|
|
221
220
|
const config = { mode: "semantic", scopeId: "" };
|
|
@@ -227,7 +226,7 @@ function parseCreateStylesConfig(init) {
|
|
|
227
226
|
}
|
|
228
227
|
if (!ts__default.default.isObjectLiteralExpression(expr)) return config;
|
|
229
228
|
const mode = literalFromProperty(expr, "mode");
|
|
230
|
-
if (mode === "semantic" || mode === "hashed" || mode === "compact" || mode === "atomic") {
|
|
229
|
+
if (mode === "semantic" || mode === "hashed" || mode === "compact" || mode === "atomic" || mode === "attribute" || mode === "bem" || mode === "template") {
|
|
231
230
|
config.mode = mode;
|
|
232
231
|
}
|
|
233
232
|
const scopeId = literalFromProperty(expr, "scopeId");
|
|
@@ -269,9 +268,17 @@ function collectBindings(sourceFile) {
|
|
|
269
268
|
visit(sourceFile);
|
|
270
269
|
return bindings;
|
|
271
270
|
}
|
|
271
|
+
function normalizeCalleeMethod(name) {
|
|
272
|
+
if (name === "style" || name === "class") return "class";
|
|
273
|
+
if (name === "recipe" || name === "component") return "component";
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
272
276
|
function calleeMethodName(expr) {
|
|
277
|
+
if (ts__default.default.isIdentifier(expr)) {
|
|
278
|
+
return normalizeCalleeMethod(expr.text);
|
|
279
|
+
}
|
|
273
280
|
if (!ts__default.default.isPropertyAccessExpression(expr)) return null;
|
|
274
|
-
if (ts__default.default.isIdentifier(expr.name)) return expr.name.text;
|
|
281
|
+
if (ts__default.default.isIdentifier(expr.name)) return normalizeCalleeMethod(expr.name.text);
|
|
275
282
|
return null;
|
|
276
283
|
}
|
|
277
284
|
function lineOf(sourceFile, node) {
|
|
@@ -284,8 +291,8 @@ function stylesBindingFromCallee(expr, bindings, defaultConfig) {
|
|
|
284
291
|
if (binding) return binding;
|
|
285
292
|
if (expr.expression.text === "styles" && defaultConfig) return defaultConfig;
|
|
286
293
|
}
|
|
287
|
-
if (ts__default.default.isIdentifier(expr)
|
|
288
|
-
return bindings.get(
|
|
294
|
+
if (ts__default.default.isIdentifier(expr)) {
|
|
295
|
+
return bindings.get(expr.text) ?? defaultConfig ?? { mode: "semantic", scopeId: "" };
|
|
289
296
|
}
|
|
290
297
|
return defaultConfig ?? { mode: "semantic", scopeId: "" };
|
|
291
298
|
}
|
|
@@ -332,15 +339,15 @@ function collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultC
|
|
|
332
339
|
}
|
|
333
340
|
} else {
|
|
334
341
|
const configObj = objectExpressionFromConfigArg(node.arguments[1]);
|
|
335
|
-
const
|
|
336
|
-
for (const
|
|
337
|
-
const className =
|
|
342
|
+
const parts = configObj ? collectClassNamePartsFromConfig(configObj) : [{}];
|
|
343
|
+
for (const part of parts) {
|
|
344
|
+
const className = componentClassName(config, namespace, part);
|
|
338
345
|
if (className) {
|
|
339
346
|
entries.push({
|
|
340
347
|
className,
|
|
341
348
|
kind: "component",
|
|
342
349
|
namespace,
|
|
343
|
-
suffix,
|
|
350
|
+
suffix: part.modifier ? `${part.element ? `${part.element}-` : ""}${part.dimension ? `${part.dimension}-` : ""}${part.modifier}` : part.element ?? "base",
|
|
344
351
|
file: relativePath,
|
|
345
352
|
line
|
|
346
353
|
});
|