@typestyles/cli 0.3.0 → 0.3.2
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/dist/{chunk-5NP72GZV.js → chunk-Y4TAQOEY.js} +46 -18
- package/dist/chunk-Y4TAQOEY.js.map +1 -0
- package/dist/cli.cjs +47 -18
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +44 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5NP72GZV.js.map +0 -1
|
@@ -50,7 +50,7 @@ function firstStringArg(args) {
|
|
|
50
50
|
}
|
|
51
51
|
function unwrapExpression(expr) {
|
|
52
52
|
let current = expr;
|
|
53
|
-
while (ts.isParenthesizedExpression(current)) {
|
|
53
|
+
while (ts.isParenthesizedExpression(current) || ts.isAsExpression(current) || ts.isSatisfiesExpression(current) || ts.isTypeAssertionExpression(current) || ts.isNonNullExpression(current)) {
|
|
54
54
|
current = current.expression;
|
|
55
55
|
}
|
|
56
56
|
return current;
|
|
@@ -60,13 +60,15 @@ function objectExpressionFromConfigArg(arg) {
|
|
|
60
60
|
const expr = unwrapExpression(arg);
|
|
61
61
|
if (ts.isObjectLiteralExpression(expr)) return expr;
|
|
62
62
|
if (ts.isArrowFunction(expr)) {
|
|
63
|
-
if (ts.isObjectLiteralExpression(expr.body)) return expr.body;
|
|
64
63
|
if (ts.isBlock(expr.body)) {
|
|
65
64
|
for (const stmt of expr.body.statements) {
|
|
66
65
|
if (ts.isReturnStatement(stmt) && stmt.expression && ts.isObjectLiteralExpression(unwrapExpression(stmt.expression))) {
|
|
67
66
|
return unwrapExpression(stmt.expression);
|
|
68
67
|
}
|
|
69
68
|
}
|
|
69
|
+
} else {
|
|
70
|
+
const body = unwrapExpression(expr.body);
|
|
71
|
+
if (ts.isObjectLiteralExpression(body)) return body;
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
return null;
|
|
@@ -88,12 +90,35 @@ function hasObjectKey(obj, key) {
|
|
|
88
90
|
return getStaticObjectKey(prop.name) === key;
|
|
89
91
|
});
|
|
90
92
|
}
|
|
91
|
-
function
|
|
93
|
+
function slotsArrayFromObject(obj) {
|
|
94
|
+
const slotsProp = obj.properties.find((prop) => {
|
|
95
|
+
if (!ts.isPropertyAssignment(prop)) return false;
|
|
96
|
+
return getStaticObjectKey(prop.name) === "slots";
|
|
97
|
+
});
|
|
98
|
+
if (!slotsProp || !ts.isPropertyAssignment(slotsProp)) return null;
|
|
99
|
+
const init = unwrapExpression(slotsProp.initializer);
|
|
100
|
+
return ts.isArrayLiteralExpression(init) ? init : null;
|
|
101
|
+
}
|
|
102
|
+
function isSchemaRecipeCall(node) {
|
|
103
|
+
if (node.arguments.length < 3) return false;
|
|
104
|
+
const callback = node.arguments[2];
|
|
105
|
+
if (!callback) return false;
|
|
106
|
+
const unwrapped = unwrapExpression(callback);
|
|
107
|
+
return ts.isArrowFunction(unwrapped) || ts.isFunctionExpression(unwrapped);
|
|
108
|
+
}
|
|
109
|
+
function definitionSlots(arg) {
|
|
110
|
+
if (!arg) return null;
|
|
111
|
+
const def = unwrapExpression(arg);
|
|
112
|
+
if (!ts.isObjectLiteralExpression(def)) return null;
|
|
113
|
+
return slotsArrayFromObject(def);
|
|
114
|
+
}
|
|
115
|
+
function collectClassNamePartsFromConfig(obj, slotsOverride) {
|
|
92
116
|
const parts = [];
|
|
93
117
|
const hasVariants = hasObjectKey(obj, "variants");
|
|
94
118
|
const hasCompound = hasObjectKey(obj, "compoundVariants");
|
|
95
119
|
const hasDefaults = hasObjectKey(obj, "defaultVariants");
|
|
96
|
-
const
|
|
120
|
+
const slotsNode = slotsOverride ?? slotsArrayFromObject(obj);
|
|
121
|
+
const hasSlots = slotsNode !== null;
|
|
97
122
|
if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {
|
|
98
123
|
const baseObj = obj.properties.find((prop) => {
|
|
99
124
|
if (!ts.isPropertyAssignment(prop)) return false;
|
|
@@ -140,12 +165,8 @@ function collectClassNamePartsFromConfig(obj) {
|
|
|
140
165
|
return parts;
|
|
141
166
|
}
|
|
142
167
|
if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
return getStaticObjectKey(prop.name) === "slots";
|
|
146
|
-
});
|
|
147
|
-
if (slotsProp && ts.isPropertyAssignment(slotsProp) && ts.isArrayLiteralExpression(slotsProp.initializer)) {
|
|
148
|
-
for (const element of slotsProp.initializer.elements) {
|
|
168
|
+
if (slotsNode) {
|
|
169
|
+
for (const element of slotsNode.elements) {
|
|
149
170
|
if (element && ts.isStringLiteral(element)) {
|
|
150
171
|
parts.push({ element: element.text === "root" ? void 0 : element.text });
|
|
151
172
|
}
|
|
@@ -257,14 +278,17 @@ function collectBindings(sourceFile) {
|
|
|
257
278
|
visit(sourceFile);
|
|
258
279
|
return bindings;
|
|
259
280
|
}
|
|
281
|
+
function normalizeCalleeMethod(name) {
|
|
282
|
+
if (name === "style" || name === "class") return "class";
|
|
283
|
+
if (name === "recipe" || name === "component") return "component";
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
260
286
|
function calleeMethodName(expr) {
|
|
261
287
|
if (ts.isIdentifier(expr)) {
|
|
262
|
-
|
|
263
|
-
if (expr.text === "recipe") return "component";
|
|
264
|
-
return null;
|
|
288
|
+
return normalizeCalleeMethod(expr.text);
|
|
265
289
|
}
|
|
266
290
|
if (!ts.isPropertyAccessExpression(expr)) return null;
|
|
267
|
-
if (ts.isIdentifier(expr.name)) return expr.name.text;
|
|
291
|
+
if (ts.isIdentifier(expr.name)) return normalizeCalleeMethod(expr.name.text);
|
|
268
292
|
return null;
|
|
269
293
|
}
|
|
270
294
|
function lineOf(sourceFile, node) {
|
|
@@ -324,8 +348,12 @@ function collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultC
|
|
|
324
348
|
});
|
|
325
349
|
}
|
|
326
350
|
} else {
|
|
327
|
-
const
|
|
328
|
-
const
|
|
351
|
+
const schemaCall = isSchemaRecipeCall(node);
|
|
352
|
+
const configObj = objectExpressionFromConfigArg(
|
|
353
|
+
schemaCall ? node.arguments[2] : node.arguments[1]
|
|
354
|
+
);
|
|
355
|
+
const slotsOverride = schemaCall ? definitionSlots(node.arguments[1]) : void 0;
|
|
356
|
+
const parts = configObj ? collectClassNamePartsFromConfig(configObj, slotsOverride) : [{}];
|
|
329
357
|
for (const part of parts) {
|
|
330
358
|
const className = componentClassName(config, namespace, part);
|
|
331
359
|
if (className) {
|
|
@@ -440,5 +468,5 @@ function diffRemovedPublicClassNames(snapshot, current) {
|
|
|
440
468
|
}
|
|
441
469
|
|
|
442
470
|
export { PUBLIC_CLASSNAMES_SNAPSHOT, buildSnapshot, collectPublicClassNames, collectPublicClassNamesFromFiles, collectPublicClassNamesSync, diffRemovedPublicClassNames, loadPublicClassNamesSnapshot, resolveProjectStylesBindings, semanticClassName, writePublicClassNamesSnapshot };
|
|
443
|
-
//# sourceMappingURL=chunk-
|
|
444
|
-
//# sourceMappingURL=chunk-
|
|
471
|
+
//# sourceMappingURL=chunk-Y4TAQOEY.js.map
|
|
472
|
+
//# sourceMappingURL=chunk-Y4TAQOEY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/snapshot-classnames.ts"],"names":[],"mappings":"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","file":"chunk-Y4TAQOEY.js","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 (\n ts.isParenthesizedExpression(current) ||\n ts.isAsExpression(current) ||\n ts.isSatisfiesExpression(current) ||\n ts.isTypeAssertionExpression(current) ||\n ts.isNonNullExpression(current)\n ) {\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\n/** Read the `slots` array literal from an object, if present. */\nfunction slotsArrayFromObject(obj: ts.ObjectLiteralExpression): ts.ArrayLiteralExpression | null {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (!slotsProp || !ts.isPropertyAssignment(slotsProp)) return null;\n const init = unwrapExpression(slotsProp.initializer);\n return ts.isArrayLiteralExpression(init) ? init : null;\n}\n\n/**\n * A schema-first recipe call: `recipe(namespace, definition, callback, options?)`.\n *\n * The style config is the third argument (the callback); the second is a definition\n * `{ slots?, variants }` whose axes are branded `variant.enum(...)` / `variant.boolean(...)`\n * values rather than style objects. In the legacy shapes the third argument is an options\n * object (`{ layer }`), never a function, so a function there is an unambiguous tell.\n */\nfunction isSchemaRecipeCall(node: ts.CallExpression): boolean {\n if (node.arguments.length < 3) return false;\n const callback = node.arguments[2];\n if (!callback) return false;\n const unwrapped = unwrapExpression(callback);\n return ts.isArrowFunction(unwrapped) || ts.isFunctionExpression(unwrapped);\n}\n\n/** Slots declared on a schema recipe's definition argument, if any. */\nfunction definitionSlots(arg: ts.Expression | undefined): ts.ArrayLiteralExpression | null {\n if (!arg) return null;\n const def = unwrapExpression(arg);\n if (!ts.isObjectLiteralExpression(def)) return null;\n return slotsArrayFromObject(def);\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 slotsOverride?: ts.ArrayLiteralExpression | null,\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 // Schema-first recipes carry `slots` on the definition (second call argument), not on\n // the callback's returned config, so the caller passes it in.\n const slotsNode = slotsOverride ?? slotsArrayFromObject(obj);\n const hasSlots = slotsNode !== null;\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 if (slotsNode) {\n for (const element of slotsNode.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 schemaCall = isSchemaRecipeCall(node);\n const configObj = objectExpressionFromConfigArg(\n schemaCall ? node.arguments[2] : node.arguments[1],\n );\n const slotsOverride = schemaCall ? definitionSlots(node.arguments[1]) : undefined;\n const parts = configObj\n ? collectClassNamePartsFromConfig(configObj, slotsOverride)\n : [{}];\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"]}
|
package/dist/cli.cjs
CHANGED
|
@@ -56,7 +56,7 @@ function firstStringArg(args) {
|
|
|
56
56
|
}
|
|
57
57
|
function unwrapExpression(expr) {
|
|
58
58
|
let current = expr;
|
|
59
|
-
while (ts__default.default.isParenthesizedExpression(current)) {
|
|
59
|
+
while (ts__default.default.isParenthesizedExpression(current) || ts__default.default.isAsExpression(current) || ts__default.default.isSatisfiesExpression(current) || ts__default.default.isTypeAssertionExpression(current) || ts__default.default.isNonNullExpression(current)) {
|
|
60
60
|
current = current.expression;
|
|
61
61
|
}
|
|
62
62
|
return current;
|
|
@@ -66,13 +66,15 @@ function objectExpressionFromConfigArg(arg) {
|
|
|
66
66
|
const expr = unwrapExpression(arg);
|
|
67
67
|
if (ts__default.default.isObjectLiteralExpression(expr)) return expr;
|
|
68
68
|
if (ts__default.default.isArrowFunction(expr)) {
|
|
69
|
-
if (ts__default.default.isObjectLiteralExpression(expr.body)) return expr.body;
|
|
70
69
|
if (ts__default.default.isBlock(expr.body)) {
|
|
71
70
|
for (const stmt of expr.body.statements) {
|
|
72
71
|
if (ts__default.default.isReturnStatement(stmt) && stmt.expression && ts__default.default.isObjectLiteralExpression(unwrapExpression(stmt.expression))) {
|
|
73
72
|
return unwrapExpression(stmt.expression);
|
|
74
73
|
}
|
|
75
74
|
}
|
|
75
|
+
} else {
|
|
76
|
+
const body = unwrapExpression(expr.body);
|
|
77
|
+
if (ts__default.default.isObjectLiteralExpression(body)) return body;
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
return null;
|
|
@@ -94,12 +96,35 @@ function hasObjectKey(obj, key) {
|
|
|
94
96
|
return getStaticObjectKey(prop.name) === key;
|
|
95
97
|
});
|
|
96
98
|
}
|
|
97
|
-
function
|
|
99
|
+
function slotsArrayFromObject(obj) {
|
|
100
|
+
const slotsProp = obj.properties.find((prop) => {
|
|
101
|
+
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
102
|
+
return getStaticObjectKey(prop.name) === "slots";
|
|
103
|
+
});
|
|
104
|
+
if (!slotsProp || !ts__default.default.isPropertyAssignment(slotsProp)) return null;
|
|
105
|
+
const init = unwrapExpression(slotsProp.initializer);
|
|
106
|
+
return ts__default.default.isArrayLiteralExpression(init) ? init : null;
|
|
107
|
+
}
|
|
108
|
+
function isSchemaRecipeCall(node) {
|
|
109
|
+
if (node.arguments.length < 3) return false;
|
|
110
|
+
const callback = node.arguments[2];
|
|
111
|
+
if (!callback) return false;
|
|
112
|
+
const unwrapped = unwrapExpression(callback);
|
|
113
|
+
return ts__default.default.isArrowFunction(unwrapped) || ts__default.default.isFunctionExpression(unwrapped);
|
|
114
|
+
}
|
|
115
|
+
function definitionSlots(arg) {
|
|
116
|
+
if (!arg) return null;
|
|
117
|
+
const def = unwrapExpression(arg);
|
|
118
|
+
if (!ts__default.default.isObjectLiteralExpression(def)) return null;
|
|
119
|
+
return slotsArrayFromObject(def);
|
|
120
|
+
}
|
|
121
|
+
function collectClassNamePartsFromConfig(obj, slotsOverride) {
|
|
98
122
|
const parts = [];
|
|
99
123
|
const hasVariants = hasObjectKey(obj, "variants");
|
|
100
124
|
const hasCompound = hasObjectKey(obj, "compoundVariants");
|
|
101
125
|
const hasDefaults = hasObjectKey(obj, "defaultVariants");
|
|
102
|
-
const
|
|
126
|
+
const slotsNode = slotsOverride ?? slotsArrayFromObject(obj);
|
|
127
|
+
const hasSlots = slotsNode !== null;
|
|
103
128
|
if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {
|
|
104
129
|
const baseObj = obj.properties.find((prop) => {
|
|
105
130
|
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
@@ -146,12 +171,8 @@ function collectClassNamePartsFromConfig(obj) {
|
|
|
146
171
|
return parts;
|
|
147
172
|
}
|
|
148
173
|
if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return getStaticObjectKey(prop.name) === "slots";
|
|
152
|
-
});
|
|
153
|
-
if (slotsProp && ts__default.default.isPropertyAssignment(slotsProp) && ts__default.default.isArrayLiteralExpression(slotsProp.initializer)) {
|
|
154
|
-
for (const element of slotsProp.initializer.elements) {
|
|
174
|
+
if (slotsNode) {
|
|
175
|
+
for (const element of slotsNode.elements) {
|
|
155
176
|
if (element && ts__default.default.isStringLiteral(element)) {
|
|
156
177
|
parts.push({ element: element.text === "root" ? void 0 : element.text });
|
|
157
178
|
}
|
|
@@ -263,14 +284,17 @@ function collectBindings(sourceFile) {
|
|
|
263
284
|
visit(sourceFile);
|
|
264
285
|
return bindings;
|
|
265
286
|
}
|
|
287
|
+
function normalizeCalleeMethod(name) {
|
|
288
|
+
if (name === "style" || name === "class") return "class";
|
|
289
|
+
if (name === "recipe" || name === "component") return "component";
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
266
292
|
function calleeMethodName(expr) {
|
|
267
293
|
if (ts__default.default.isIdentifier(expr)) {
|
|
268
|
-
|
|
269
|
-
if (expr.text === "recipe") return "component";
|
|
270
|
-
return null;
|
|
294
|
+
return normalizeCalleeMethod(expr.text);
|
|
271
295
|
}
|
|
272
296
|
if (!ts__default.default.isPropertyAccessExpression(expr)) return null;
|
|
273
|
-
if (ts__default.default.isIdentifier(expr.name)) return expr.name.text;
|
|
297
|
+
if (ts__default.default.isIdentifier(expr.name)) return normalizeCalleeMethod(expr.name.text);
|
|
274
298
|
return null;
|
|
275
299
|
}
|
|
276
300
|
function lineOf(sourceFile, node) {
|
|
@@ -330,8 +354,12 @@ function collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultC
|
|
|
330
354
|
});
|
|
331
355
|
}
|
|
332
356
|
} else {
|
|
333
|
-
const
|
|
334
|
-
const
|
|
357
|
+
const schemaCall = isSchemaRecipeCall(node);
|
|
358
|
+
const configObj = objectExpressionFromConfigArg(
|
|
359
|
+
schemaCall ? node.arguments[2] : node.arguments[1]
|
|
360
|
+
);
|
|
361
|
+
const slotsOverride = schemaCall ? definitionSlots(node.arguments[1]) : void 0;
|
|
362
|
+
const parts = configObj ? collectClassNamePartsFromConfig(configObj, slotsOverride) : [{}];
|
|
335
363
|
for (const part of parts) {
|
|
336
364
|
const className = componentClassName(config, namespace, part);
|
|
337
365
|
if (className) {
|
|
@@ -410,8 +438,9 @@ function writePublicClassNamesSnapshot(snapshotPath, entries) {
|
|
|
410
438
|
// src/commands/snapshot.ts
|
|
411
439
|
var SNAPSHOT_HELP = `typestyles snapshot [options]
|
|
412
440
|
|
|
413
|
-
Scan TypeScript sources for semantic \`
|
|
414
|
-
and write or print the public API snapshot used by
|
|
441
|
+
Scan TypeScript sources for semantic \`style\` / \`recipe\` (and legacy \`styles.class\` /
|
|
442
|
+
\`styles.component\`) class names and write or print the public API snapshot used by
|
|
443
|
+
\`@typestyles/no-removed-public-classname\`.
|
|
415
444
|
|
|
416
445
|
Options:
|
|
417
446
|
--write Write ${PUBLIC_CLASSNAMES_SNAPSHOT} in the project root
|
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' | '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"]}
|
|
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 (\n ts.isParenthesizedExpression(current) ||\n ts.isAsExpression(current) ||\n ts.isSatisfiesExpression(current) ||\n ts.isTypeAssertionExpression(current) ||\n ts.isNonNullExpression(current)\n ) {\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\n/** Read the `slots` array literal from an object, if present. */\nfunction slotsArrayFromObject(obj: ts.ObjectLiteralExpression): ts.ArrayLiteralExpression | null {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (!slotsProp || !ts.isPropertyAssignment(slotsProp)) return null;\n const init = unwrapExpression(slotsProp.initializer);\n return ts.isArrayLiteralExpression(init) ? init : null;\n}\n\n/**\n * A schema-first recipe call: `recipe(namespace, definition, callback, options?)`.\n *\n * The style config is the third argument (the callback); the second is a definition\n * `{ slots?, variants }` whose axes are branded `variant.enum(...)` / `variant.boolean(...)`\n * values rather than style objects. In the legacy shapes the third argument is an options\n * object (`{ layer }`), never a function, so a function there is an unambiguous tell.\n */\nfunction isSchemaRecipeCall(node: ts.CallExpression): boolean {\n if (node.arguments.length < 3) return false;\n const callback = node.arguments[2];\n if (!callback) return false;\n const unwrapped = unwrapExpression(callback);\n return ts.isArrowFunction(unwrapped) || ts.isFunctionExpression(unwrapped);\n}\n\n/** Slots declared on a schema recipe's definition argument, if any. */\nfunction definitionSlots(arg: ts.Expression | undefined): ts.ArrayLiteralExpression | null {\n if (!arg) return null;\n const def = unwrapExpression(arg);\n if (!ts.isObjectLiteralExpression(def)) return null;\n return slotsArrayFromObject(def);\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 slotsOverride?: ts.ArrayLiteralExpression | null,\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 // Schema-first recipes carry `slots` on the definition (second call argument), not on\n // the callback's returned config, so the caller passes it in.\n const slotsNode = slotsOverride ?? slotsArrayFromObject(obj);\n const hasSlots = slotsNode !== null;\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 if (slotsNode) {\n for (const element of slotsNode.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 schemaCall = isSchemaRecipeCall(node);\n const configObj = objectExpressionFromConfigArg(\n schemaCall ? node.arguments[2] : node.arguments[1],\n );\n const slotsOverride = schemaCall ? definitionSlots(node.arguments[1]) : undefined;\n const parts = configObj\n ? collectClassNamePartsFromConfig(configObj, slotsOverride)\n : [{}];\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-Y4TAQOEY.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
|
@@ -59,7 +59,7 @@ function firstStringArg(args) {
|
|
|
59
59
|
}
|
|
60
60
|
function unwrapExpression(expr) {
|
|
61
61
|
let current = expr;
|
|
62
|
-
while (ts__default.default.isParenthesizedExpression(current)) {
|
|
62
|
+
while (ts__default.default.isParenthesizedExpression(current) || ts__default.default.isAsExpression(current) || ts__default.default.isSatisfiesExpression(current) || ts__default.default.isTypeAssertionExpression(current) || ts__default.default.isNonNullExpression(current)) {
|
|
63
63
|
current = current.expression;
|
|
64
64
|
}
|
|
65
65
|
return current;
|
|
@@ -69,13 +69,15 @@ function objectExpressionFromConfigArg(arg) {
|
|
|
69
69
|
const expr = unwrapExpression(arg);
|
|
70
70
|
if (ts__default.default.isObjectLiteralExpression(expr)) return expr;
|
|
71
71
|
if (ts__default.default.isArrowFunction(expr)) {
|
|
72
|
-
if (ts__default.default.isObjectLiteralExpression(expr.body)) return expr.body;
|
|
73
72
|
if (ts__default.default.isBlock(expr.body)) {
|
|
74
73
|
for (const stmt of expr.body.statements) {
|
|
75
74
|
if (ts__default.default.isReturnStatement(stmt) && stmt.expression && ts__default.default.isObjectLiteralExpression(unwrapExpression(stmt.expression))) {
|
|
76
75
|
return unwrapExpression(stmt.expression);
|
|
77
76
|
}
|
|
78
77
|
}
|
|
78
|
+
} else {
|
|
79
|
+
const body = unwrapExpression(expr.body);
|
|
80
|
+
if (ts__default.default.isObjectLiteralExpression(body)) return body;
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
83
|
return null;
|
|
@@ -97,12 +99,35 @@ function hasObjectKey(obj, key) {
|
|
|
97
99
|
return getStaticObjectKey(prop.name) === key;
|
|
98
100
|
});
|
|
99
101
|
}
|
|
100
|
-
function
|
|
102
|
+
function slotsArrayFromObject(obj) {
|
|
103
|
+
const slotsProp = obj.properties.find((prop) => {
|
|
104
|
+
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
105
|
+
return getStaticObjectKey(prop.name) === "slots";
|
|
106
|
+
});
|
|
107
|
+
if (!slotsProp || !ts__default.default.isPropertyAssignment(slotsProp)) return null;
|
|
108
|
+
const init = unwrapExpression(slotsProp.initializer);
|
|
109
|
+
return ts__default.default.isArrayLiteralExpression(init) ? init : null;
|
|
110
|
+
}
|
|
111
|
+
function isSchemaRecipeCall(node) {
|
|
112
|
+
if (node.arguments.length < 3) return false;
|
|
113
|
+
const callback = node.arguments[2];
|
|
114
|
+
if (!callback) return false;
|
|
115
|
+
const unwrapped = unwrapExpression(callback);
|
|
116
|
+
return ts__default.default.isArrowFunction(unwrapped) || ts__default.default.isFunctionExpression(unwrapped);
|
|
117
|
+
}
|
|
118
|
+
function definitionSlots(arg) {
|
|
119
|
+
if (!arg) return null;
|
|
120
|
+
const def = unwrapExpression(arg);
|
|
121
|
+
if (!ts__default.default.isObjectLiteralExpression(def)) return null;
|
|
122
|
+
return slotsArrayFromObject(def);
|
|
123
|
+
}
|
|
124
|
+
function collectClassNamePartsFromConfig(obj, slotsOverride) {
|
|
101
125
|
const parts = [];
|
|
102
126
|
const hasVariants = hasObjectKey(obj, "variants");
|
|
103
127
|
const hasCompound = hasObjectKey(obj, "compoundVariants");
|
|
104
128
|
const hasDefaults = hasObjectKey(obj, "defaultVariants");
|
|
105
|
-
const
|
|
129
|
+
const slotsNode = slotsOverride ?? slotsArrayFromObject(obj);
|
|
130
|
+
const hasSlots = slotsNode !== null;
|
|
106
131
|
if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {
|
|
107
132
|
const baseObj = obj.properties.find((prop) => {
|
|
108
133
|
if (!ts__default.default.isPropertyAssignment(prop)) return false;
|
|
@@ -149,12 +174,8 @@ function collectClassNamePartsFromConfig(obj) {
|
|
|
149
174
|
return parts;
|
|
150
175
|
}
|
|
151
176
|
if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return getStaticObjectKey(prop.name) === "slots";
|
|
155
|
-
});
|
|
156
|
-
if (slotsProp && ts__default.default.isPropertyAssignment(slotsProp) && ts__default.default.isArrayLiteralExpression(slotsProp.initializer)) {
|
|
157
|
-
for (const element of slotsProp.initializer.elements) {
|
|
177
|
+
if (slotsNode) {
|
|
178
|
+
for (const element of slotsNode.elements) {
|
|
158
179
|
if (element && ts__default.default.isStringLiteral(element)) {
|
|
159
180
|
parts.push({ element: element.text === "root" ? void 0 : element.text });
|
|
160
181
|
}
|
|
@@ -266,14 +287,17 @@ function collectBindings(sourceFile) {
|
|
|
266
287
|
visit(sourceFile);
|
|
267
288
|
return bindings;
|
|
268
289
|
}
|
|
290
|
+
function normalizeCalleeMethod(name) {
|
|
291
|
+
if (name === "style" || name === "class") return "class";
|
|
292
|
+
if (name === "recipe" || name === "component") return "component";
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
269
295
|
function calleeMethodName(expr) {
|
|
270
296
|
if (ts__default.default.isIdentifier(expr)) {
|
|
271
|
-
|
|
272
|
-
if (expr.text === "recipe") return "component";
|
|
273
|
-
return null;
|
|
297
|
+
return normalizeCalleeMethod(expr.text);
|
|
274
298
|
}
|
|
275
299
|
if (!ts__default.default.isPropertyAccessExpression(expr)) return null;
|
|
276
|
-
if (ts__default.default.isIdentifier(expr.name)) return expr.name.text;
|
|
300
|
+
if (ts__default.default.isIdentifier(expr.name)) return normalizeCalleeMethod(expr.name.text);
|
|
277
301
|
return null;
|
|
278
302
|
}
|
|
279
303
|
function lineOf(sourceFile, node) {
|
|
@@ -333,8 +357,12 @@ function collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultC
|
|
|
333
357
|
});
|
|
334
358
|
}
|
|
335
359
|
} else {
|
|
336
|
-
const
|
|
337
|
-
const
|
|
360
|
+
const schemaCall = isSchemaRecipeCall(node);
|
|
361
|
+
const configObj = objectExpressionFromConfigArg(
|
|
362
|
+
schemaCall ? node.arguments[2] : node.arguments[1]
|
|
363
|
+
);
|
|
364
|
+
const slotsOverride = schemaCall ? definitionSlots(node.arguments[1]) : void 0;
|
|
365
|
+
const parts = configObj ? collectClassNamePartsFromConfig(configObj, slotsOverride) : [{}];
|
|
338
366
|
for (const part of parts) {
|
|
339
367
|
const className = componentClassName(config, namespace, part);
|
|
340
368
|
if (className) {
|
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' | '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"]}
|
|
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 (\n ts.isParenthesizedExpression(current) ||\n ts.isAsExpression(current) ||\n ts.isSatisfiesExpression(current) ||\n ts.isTypeAssertionExpression(current) ||\n ts.isNonNullExpression(current)\n ) {\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\n/** Read the `slots` array literal from an object, if present. */\nfunction slotsArrayFromObject(obj: ts.ObjectLiteralExpression): ts.ArrayLiteralExpression | null {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (!slotsProp || !ts.isPropertyAssignment(slotsProp)) return null;\n const init = unwrapExpression(slotsProp.initializer);\n return ts.isArrayLiteralExpression(init) ? init : null;\n}\n\n/**\n * A schema-first recipe call: `recipe(namespace, definition, callback, options?)`.\n *\n * The style config is the third argument (the callback); the second is a definition\n * `{ slots?, variants }` whose axes are branded `variant.enum(...)` / `variant.boolean(...)`\n * values rather than style objects. In the legacy shapes the third argument is an options\n * object (`{ layer }`), never a function, so a function there is an unambiguous tell.\n */\nfunction isSchemaRecipeCall(node: ts.CallExpression): boolean {\n if (node.arguments.length < 3) return false;\n const callback = node.arguments[2];\n if (!callback) return false;\n const unwrapped = unwrapExpression(callback);\n return ts.isArrowFunction(unwrapped) || ts.isFunctionExpression(unwrapped);\n}\n\n/** Slots declared on a schema recipe's definition argument, if any. */\nfunction definitionSlots(arg: ts.Expression | undefined): ts.ArrayLiteralExpression | null {\n if (!arg) return null;\n const def = unwrapExpression(arg);\n if (!ts.isObjectLiteralExpression(def)) return null;\n return slotsArrayFromObject(def);\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 slotsOverride?: ts.ArrayLiteralExpression | null,\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 // Schema-first recipes carry `slots` on the definition (second call argument), not on\n // the callback's returned config, so the caller passes it in.\n const slotsNode = slotsOverride ?? slotsArrayFromObject(obj);\n const hasSlots = slotsNode !== null;\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 if (slotsNode) {\n for (const element of slotsNode.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 schemaCall = isSchemaRecipeCall(node);\n const configObj = objectExpressionFromConfigArg(\n schemaCall ? node.arguments[2] : node.arguments[1],\n );\n const slotsOverride = schemaCall ? definitionSlots(node.arguments[1]) : undefined;\n const parts = configObj\n ? collectClassNamePartsFromConfig(configObj, slotsOverride)\n : [{}];\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"]}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { PUBLIC_CLASSNAMES_SNAPSHOT, buildSnapshot, collectPublicClassNames, collectPublicClassNamesFromFiles, collectPublicClassNamesSync, diffRemovedPublicClassNames, loadPublicClassNamesSnapshot, resolveProjectStylesBindings, semanticClassName, writePublicClassNamesSnapshot } from './chunk-
|
|
1
|
+
export { PUBLIC_CLASSNAMES_SNAPSHOT, buildSnapshot, collectPublicClassNames, collectPublicClassNamesFromFiles, collectPublicClassNamesSync, diffRemovedPublicClassNames, loadPublicClassNamesSnapshot, resolveProjectStylesBindings, semanticClassName, writePublicClassNamesSnapshot } from './chunk-Y4TAQOEY.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/snapshot-classnames.ts"],"names":[],"mappings":"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","file":"chunk-5NP72GZV.js","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"]}
|