@typestyles/cli 0.0.0-unstable.2bfa8a4cdcb5 → 0.0.0-unstable.31872bc1ed7b

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/index.cjs CHANGED
@@ -38,10 +38,14 @@ function semanticScopePrefix(scopeId) {
38
38
  return `${sanitizeClassSegment(scopeId)}-`;
39
39
  }
40
40
  function semanticClassName(config, namespace, suffix) {
41
- if (config.mode !== "semantic") return null;
41
+ if (config.mode === "hashed" || config.mode === "compact" || config.mode === "atomic" || config.mode === "template") {
42
+ return null;
43
+ }
42
44
  const prefix = semanticScopePrefix(config.scopeId);
43
- if (suffix === void 0) return `${prefix}${namespace}`;
44
- return `${prefix}${namespace}-${suffix}`;
45
+ if (suffix === void 0 || suffix === "base") return `${prefix}${namespace}`;
46
+ if (config.mode === "attribute") return `${prefix}${namespace}`;
47
+ if (config.mode === "bem") return `${prefix}${namespace}--${suffix}`;
48
+ return `${prefix}${namespace}--${suffix}`;
45
49
  }
46
50
  function getStaticObjectKey(name) {
47
51
  if (ts__default.default.isIdentifier(name)) return name.text;
@@ -55,7 +59,7 @@ function firstStringArg(args) {
55
59
  }
56
60
  function unwrapExpression(expr) {
57
61
  let current = expr;
58
- 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)) {
59
63
  current = current.expression;
60
64
  }
61
65
  return current;
@@ -65,13 +69,15 @@ function objectExpressionFromConfigArg(arg) {
65
69
  const expr = unwrapExpression(arg);
66
70
  if (ts__default.default.isObjectLiteralExpression(expr)) return expr;
67
71
  if (ts__default.default.isArrowFunction(expr)) {
68
- if (ts__default.default.isObjectLiteralExpression(expr.body)) return expr.body;
69
72
  if (ts__default.default.isBlock(expr.body)) {
70
73
  for (const stmt of expr.body.statements) {
71
74
  if (ts__default.default.isReturnStatement(stmt) && stmt.expression && ts__default.default.isObjectLiteralExpression(unwrapExpression(stmt.expression))) {
72
75
  return unwrapExpression(stmt.expression);
73
76
  }
74
77
  }
78
+ } else {
79
+ const body = unwrapExpression(expr.body);
80
+ if (ts__default.default.isObjectLiteralExpression(body)) return body;
75
81
  }
76
82
  }
77
83
  return null;
@@ -93,12 +99,57 @@ function hasObjectKey(obj, key) {
93
99
  return getStaticObjectKey(prop.name) === key;
94
100
  });
95
101
  }
96
- function collectSuffixesFromConfig(obj) {
97
- const suffixes = [];
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 propertyInit(obj, key) {
119
+ for (const prop of obj.properties) {
120
+ if (!ts__default.default.isPropertyAssignment(prop)) continue;
121
+ if (getStaticObjectKey(prop.name) === key) return prop.initializer;
122
+ }
123
+ return void 0;
124
+ }
125
+ function recipeInputFromCall(node) {
126
+ const first = node.arguments[0];
127
+ if (!first) return null;
128
+ const unwrapped = unwrapExpression(first);
129
+ if (ts__default.default.isObjectLiteralExpression(unwrapped)) {
130
+ const namespace = literalFromProperty(unwrapped, "name");
131
+ if (!namespace) return null;
132
+ return {
133
+ namespace,
134
+ styles: objectExpressionFromConfigArg(propertyInit(unwrapped, "styles")),
135
+ slots: slotsArrayFromObject(unwrapped)
136
+ };
137
+ }
138
+ return null;
139
+ }
140
+ function definitionSlots(arg) {
141
+ if (!arg) return null;
142
+ const def = unwrapExpression(arg);
143
+ if (!ts__default.default.isObjectLiteralExpression(def)) return null;
144
+ return slotsArrayFromObject(def);
145
+ }
146
+ function collectClassNamePartsFromConfig(obj, slotsOverride) {
147
+ const parts = [];
98
148
  const hasVariants = hasObjectKey(obj, "variants");
99
149
  const hasCompound = hasObjectKey(obj, "compoundVariants");
100
150
  const hasDefaults = hasObjectKey(obj, "defaultVariants");
101
- const hasSlots = hasObjectKey(obj, "slots");
151
+ const slotsNode = slotsOverride ?? slotsArrayFromObject(obj);
152
+ const hasSlots = slotsNode !== null;
102
153
  if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {
103
154
  const baseObj = obj.properties.find((prop) => {
104
155
  if (!ts__default.default.isPropertyAssignment(prop)) return false;
@@ -108,7 +159,7 @@ function collectSuffixesFromConfig(obj) {
108
159
  for (const slotProp of baseObj.initializer.properties) {
109
160
  if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
110
161
  const slot = getStaticObjectKey(slotProp.name);
111
- if (slot) suffixes.push(slot);
162
+ if (slot) parts.push({ element: slot === "root" ? void 0 : slot });
112
163
  }
113
164
  }
114
165
  const variantsProp = obj.properties.find((prop) => {
@@ -131,55 +182,31 @@ function collectSuffixesFromConfig(obj) {
131
182
  for (const slotProp of optProp.initializer.properties) {
132
183
  if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
133
184
  const slot = getStaticObjectKey(slotProp.name);
134
- if (slot) suffixes.push(`${slot}-${dimension}-${option}`);
185
+ if (slot) {
186
+ parts.push({
187
+ element: slot === "root" ? void 0 : slot,
188
+ dimension,
189
+ modifier: option
190
+ });
191
+ }
135
192
  }
136
193
  }
137
194
  }
138
195
  }
139
- const compoundProp = obj.properties.find((prop) => {
140
- if (!ts__default.default.isPropertyAssignment(prop)) return false;
141
- return getStaticObjectKey(prop.name) === "compoundVariants";
142
- });
143
- if (compoundProp && ts__default.default.isPropertyAssignment(compoundProp) && ts__default.default.isArrayLiteralExpression(compoundProp.initializer)) {
144
- compoundProp.initializer.elements.forEach((element, index) => {
145
- if (!element || !ts__default.default.isObjectLiteralExpression(element)) return;
146
- const styleProp = element.properties.find((prop) => {
147
- if (!ts__default.default.isPropertyAssignment(prop)) return false;
148
- return getStaticObjectKey(prop.name) === "style";
149
- });
150
- if (styleProp && ts__default.default.isPropertyAssignment(styleProp) && ts__default.default.isObjectLiteralExpression(styleProp.initializer)) {
151
- for (const slotProp of styleProp.initializer.properties) {
152
- if (!ts__default.default.isPropertyAssignment(slotProp)) continue;
153
- const slot = getStaticObjectKey(slotProp.name);
154
- if (slot) suffixes.push(`${slot}-compound-${index}`);
155
- }
156
- }
157
- });
158
- }
159
- return suffixes;
196
+ return parts;
160
197
  }
161
198
  if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {
162
- const slotsProp = obj.properties.find((prop) => {
163
- if (!ts__default.default.isPropertyAssignment(prop)) return false;
164
- return getStaticObjectKey(prop.name) === "slots";
165
- });
166
- if (slotsProp && ts__default.default.isPropertyAssignment(slotsProp) && ts__default.default.isArrayLiteralExpression(slotsProp.initializer)) {
167
- for (const element of slotsProp.initializer.elements) {
199
+ if (slotsNode) {
200
+ for (const element of slotsNode.elements) {
168
201
  if (element && ts__default.default.isStringLiteral(element)) {
169
- suffixes.push(element.text);
202
+ parts.push({ element: element.text === "root" ? void 0 : element.text });
170
203
  }
171
204
  }
172
205
  }
173
- for (const prop of obj.properties) {
174
- if (!ts__default.default.isPropertyAssignment(prop)) continue;
175
- const key = getStaticObjectKey(prop.name);
176
- if (!key || key === "slots") continue;
177
- suffixes.push(key);
178
- }
179
- return suffixes;
206
+ return parts;
180
207
  }
181
208
  if (hasVariants || hasCompound || hasDefaults) {
182
- if (hasObjectKey(obj, "base")) suffixes.push("base");
209
+ parts.push({});
183
210
  const variantsProp = obj.properties.find((prop) => {
184
211
  if (!ts__default.default.isPropertyAssignment(prop)) return false;
185
212
  return getStaticObjectKey(prop.name) === "variants";
@@ -194,28 +221,35 @@ function collectSuffixesFromConfig(obj) {
194
221
  for (const optProp of dimProp.initializer.properties) {
195
222
  if (!ts__default.default.isPropertyAssignment(optProp)) continue;
196
223
  const option = getStaticObjectKey(optProp.name);
197
- if (option) suffixes.push(`${dimension}-${option}`);
224
+ if (option) parts.push({ dimension, modifier: option });
198
225
  }
199
226
  }
200
227
  }
201
- const compoundProp = obj.properties.find((prop) => {
202
- if (!ts__default.default.isPropertyAssignment(prop)) return false;
203
- return getStaticObjectKey(prop.name) === "compoundVariants";
204
- });
205
- if (compoundProp && ts__default.default.isPropertyAssignment(compoundProp) && ts__default.default.isArrayLiteralExpression(compoundProp.initializer)) {
206
- compoundProp.initializer.elements.forEach((_, index) => {
207
- suffixes.push(`compound-${index}`);
208
- });
209
- }
210
- return suffixes;
228
+ return parts;
211
229
  }
212
230
  for (const prop of obj.properties) {
213
231
  if (!ts__default.default.isPropertyAssignment(prop)) continue;
214
232
  const key = getStaticObjectKey(prop.name);
215
- if (!key || RESERVED_COMPONENT_KEYS.has(key)) continue;
216
- suffixes.push(key);
233
+ if (!key) continue;
234
+ if (key === "base") {
235
+ parts.push({});
236
+ continue;
237
+ }
238
+ if (RESERVED_COMPONENT_KEYS.has(key)) continue;
239
+ parts.push({ modifier: key });
217
240
  }
218
- return suffixes;
241
+ return parts;
242
+ }
243
+ function componentClassName(config, namespace, part) {
244
+ if (config.mode === "hashed" || config.mode === "compact" || config.mode === "atomic" || config.mode === "template") {
245
+ return null;
246
+ }
247
+ const prefix = semanticScopePrefix(config.scopeId);
248
+ const block = `${prefix}${namespace}${part.element ? `__${part.element}` : ""}`;
249
+ if (!part.modifier) return block;
250
+ if (config.mode === "attribute" && part.dimension) return block;
251
+ if (config.mode === "bem") return `${block}--${part.modifier}`;
252
+ return `${block}--${part.dimension ? `${part.dimension}-` : ""}${part.modifier}`;
219
253
  }
220
254
  function parseCreateStylesConfig(init) {
221
255
  const config = { mode: "semantic", scopeId: "" };
@@ -227,7 +261,7 @@ function parseCreateStylesConfig(init) {
227
261
  }
228
262
  if (!ts__default.default.isObjectLiteralExpression(expr)) return config;
229
263
  const mode = literalFromProperty(expr, "mode");
230
- if (mode === "semantic" || mode === "hashed" || mode === "compact" || mode === "atomic") {
264
+ if (mode === "semantic" || mode === "hashed" || mode === "compact" || mode === "atomic" || mode === "attribute" || mode === "bem" || mode === "template") {
231
265
  config.mode = mode;
232
266
  }
233
267
  const scopeId = literalFromProperty(expr, "scopeId");
@@ -269,9 +303,17 @@ function collectBindings(sourceFile) {
269
303
  visit(sourceFile);
270
304
  return bindings;
271
305
  }
306
+ function normalizeCalleeMethod(name) {
307
+ if (name === "style" || name === "class") return "class";
308
+ if (name === "recipe" || name === "component") return "component";
309
+ return null;
310
+ }
272
311
  function calleeMethodName(expr) {
312
+ if (ts__default.default.isIdentifier(expr)) {
313
+ return normalizeCalleeMethod(expr.text);
314
+ }
273
315
  if (!ts__default.default.isPropertyAccessExpression(expr)) return null;
274
- if (ts__default.default.isIdentifier(expr.name)) return expr.name.text;
316
+ if (ts__default.default.isIdentifier(expr.name)) return normalizeCalleeMethod(expr.name.text);
275
317
  return null;
276
318
  }
277
319
  function lineOf(sourceFile, node) {
@@ -284,8 +326,8 @@ function stylesBindingFromCallee(expr, bindings, defaultConfig) {
284
326
  if (binding) return binding;
285
327
  if (expr.expression.text === "styles" && defaultConfig) return defaultConfig;
286
328
  }
287
- if (ts__default.default.isIdentifier(expr) && expr.text === "styles") {
288
- return bindings.get("styles") ?? defaultConfig ?? { mode: "semantic", scopeId: "" };
329
+ if (ts__default.default.isIdentifier(expr)) {
330
+ return bindings.get(expr.text) ?? defaultConfig ?? { mode: "semantic", scopeId: "" };
289
331
  }
290
332
  return defaultConfig ?? { mode: "semantic", scopeId: "" };
291
333
  }
@@ -312,7 +354,8 @@ function collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultC
312
354
  if (ts__default.default.isCallExpression(node)) {
313
355
  const method = calleeMethodName(node.expression);
314
356
  if (method === "class" || method === "component") {
315
- const namespace = firstStringArg(node.arguments);
357
+ const recipeInput = method === "component" ? recipeInputFromCall(node) : null;
358
+ const namespace = recipeInput?.namespace ?? firstStringArg(node.arguments);
316
359
  if (!namespace) {
317
360
  ts__default.default.forEachChild(node, visit);
318
361
  return;
@@ -331,16 +374,18 @@ function collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultC
331
374
  });
332
375
  }
333
376
  } else {
334
- const configObj = objectExpressionFromConfigArg(node.arguments[1]);
335
- const suffixes = configObj ? collectSuffixesFromConfig(configObj) : ["base"];
336
- for (const suffix of suffixes) {
337
- const className = semanticClassName(config, namespace, suffix);
377
+ const schemaCall = recipeInput ? false : isSchemaRecipeCall(node);
378
+ const configObj = recipeInput?.styles ?? objectExpressionFromConfigArg(schemaCall ? node.arguments[2] : node.arguments[1]);
379
+ const slotsOverride = recipeInput ? recipeInput.slots : schemaCall ? definitionSlots(node.arguments[1]) : void 0;
380
+ const parts = configObj ? collectClassNamePartsFromConfig(configObj, slotsOverride) : [{}];
381
+ for (const part of parts) {
382
+ const className = componentClassName(config, namespace, part);
338
383
  if (className) {
339
384
  entries.push({
340
385
  className,
341
386
  kind: "component",
342
387
  namespace,
343
- suffix,
388
+ suffix: part.modifier ? `${part.element ? `${part.element}-` : ""}${part.dimension ? `${part.dimension}-` : ""}${part.modifier}` : part.element ?? "base",
344
389
  file: relativePath,
345
390
  line
346
391
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/snapshot-classnames.ts"],"names":["ts","fs","path","fg"],"mappings":"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","file":"index.cjs","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport fg from 'fast-glob';\n\n/** Mirrors `sanitizeClassSegment` in `typestyles` class naming. */\nfunction sanitizeClassSegment(label: string): string {\n const normalized = label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-');\n return normalized.replace(/-+/g, '-').replace(/^-|-$/g, '') || 'style';\n}\n\nconst RESERVED_COMPONENT_KEYS = new Set([\n 'base',\n 'variants',\n 'compoundVariants',\n 'defaultVariants',\n 'slots',\n]);\n\nexport const PUBLIC_CLASSNAMES_SNAPSHOT = '.typestyles-public-classnames.json';\n\nexport type PublicClassNameEntry = {\n className: string;\n kind: 'class' | 'component';\n namespace: string;\n suffix?: string;\n file: string;\n line: number;\n};\n\nexport type PublicClassNamesSnapshot = {\n version: 1;\n classNames: string[];\n entries: PublicClassNameEntry[];\n};\n\nexport type StylesBindingConfig = {\n mode: 'semantic' | 'hashed' | 'compact' | 'atomic';\n scopeId: string;\n};\n\nexport type CollectPublicClassNamesOptions = {\n /** Project root for resolving snapshot paths and globs */\n rootDir?: string;\n /** Glob patterns relative to rootDir */\n include?: string[];\n /** Glob patterns to exclude */\n exclude?: string[];\n};\n\nconst DEFAULT_INCLUDE = ['**/*.{ts,tsx}'];\nconst DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/*.test.{ts,tsx}',\n '**/*.spec.{ts,tsx}',\n];\n\nfunction semanticScopePrefix(scopeId: string): string {\n if (!scopeId.trim()) return '';\n return `${sanitizeClassSegment(scopeId)}-`;\n}\n\nexport function semanticClassName(\n config: StylesBindingConfig,\n namespace: string,\n suffix?: string,\n): string | null {\n if (config.mode !== 'semantic') return null;\n const prefix = semanticScopePrefix(config.scopeId);\n if (suffix === undefined) return `${prefix}${namespace}`;\n return `${prefix}${namespace}-${suffix}`;\n}\n\nfunction getStaticObjectKey(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name)) return name.text;\n if (ts.isStringLiteral(name)) return name.text;\n return null;\n}\n\nfunction firstStringArg(args: ts.NodeArray<ts.Expression>): string | null {\n const first = args[0];\n if (!first || !ts.isStringLiteral(first)) return null;\n return first.text;\n}\n\nfunction unwrapExpression(expr: ts.Expression): ts.Expression {\n let current = expr;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\nfunction objectExpressionFromConfigArg(\n arg: ts.Expression | undefined,\n): ts.ObjectLiteralExpression | null {\n if (!arg) return null;\n const expr = unwrapExpression(arg);\n if (ts.isObjectLiteralExpression(expr)) return expr;\n if (ts.isArrowFunction(expr)) {\n if (ts.isObjectLiteralExpression(expr.body)) return expr.body;\n if (ts.isBlock(expr.body)) {\n for (const stmt of expr.body.statements) {\n if (\n ts.isReturnStatement(stmt) &&\n stmt.expression &&\n ts.isObjectLiteralExpression(unwrapExpression(stmt.expression))\n ) {\n return unwrapExpression(stmt.expression) as ts.ObjectLiteralExpression;\n }\n }\n }\n }\n return null;\n}\n\nfunction literalFromProperty(obj: ts.ObjectLiteralExpression, key: string): string | null {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const propKey = getStaticObjectKey(prop.name);\n if (propKey !== key) continue;\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteral(init)) return init.text;\n if (ts.isNoSubstitutionTemplateLiteral(init)) return init.text;\n }\n return null;\n}\n\nfunction hasObjectKey(obj: ts.ObjectLiteralExpression, key: string): boolean {\n return obj.properties.some((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === key;\n });\n}\n\nfunction collectSuffixesFromConfig(obj: ts.ObjectLiteralExpression): string[] {\n const suffixes: string[] = [];\n\n const hasVariants = hasObjectKey(obj, 'variants');\n const hasCompound = hasObjectKey(obj, 'compoundVariants');\n const hasDefaults = hasObjectKey(obj, 'defaultVariants');\n const hasSlots = hasObjectKey(obj, 'slots');\n\n if (hasSlots && (hasVariants || hasCompound || hasDefaults)) {\n const baseObj = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'base';\n });\n if (\n baseObj &&\n ts.isPropertyAssignment(baseObj) &&\n ts.isObjectLiteralExpression(baseObj.initializer)\n ) {\n for (const slotProp of baseObj.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(slot);\n }\n }\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(optProp) ||\n !ts.isObjectLiteralExpression(optProp.initializer)\n ) {\n continue;\n }\n const option = getStaticObjectKey(optProp.name);\n if (!option) continue;\n for (const slotProp of optProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(`${slot}-${dimension}-${option}`);\n }\n }\n }\n }\n\n const compoundProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'compoundVariants';\n });\n if (\n compoundProp &&\n ts.isPropertyAssignment(compoundProp) &&\n ts.isArrayLiteralExpression(compoundProp.initializer)\n ) {\n compoundProp.initializer.elements.forEach((element, index) => {\n if (!element || !ts.isObjectLiteralExpression(element)) return;\n const styleProp = element.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'style';\n });\n if (\n styleProp &&\n ts.isPropertyAssignment(styleProp) &&\n ts.isObjectLiteralExpression(styleProp.initializer)\n ) {\n for (const slotProp of styleProp.initializer.properties) {\n if (!ts.isPropertyAssignment(slotProp)) continue;\n const slot = getStaticObjectKey(slotProp.name);\n if (slot) suffixes.push(`${slot}-compound-${index}`);\n }\n }\n });\n }\n\n return suffixes;\n }\n\n if (hasSlots && !hasVariants && !hasCompound && !hasDefaults) {\n const slotsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'slots';\n });\n if (\n slotsProp &&\n ts.isPropertyAssignment(slotsProp) &&\n ts.isArrayLiteralExpression(slotsProp.initializer)\n ) {\n for (const element of slotsProp.initializer.elements) {\n if (element && ts.isStringLiteral(element)) {\n suffixes.push(element.text);\n }\n }\n }\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || key === 'slots') continue;\n suffixes.push(key);\n }\n return suffixes;\n }\n\n if (hasVariants || hasCompound || hasDefaults) {\n if (hasObjectKey(obj, 'base')) suffixes.push('base');\n\n const variantsProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'variants';\n });\n if (\n variantsProp &&\n ts.isPropertyAssignment(variantsProp) &&\n ts.isObjectLiteralExpression(variantsProp.initializer)\n ) {\n for (const dimProp of variantsProp.initializer.properties) {\n if (\n !ts.isPropertyAssignment(dimProp) ||\n !ts.isObjectLiteralExpression(dimProp.initializer)\n ) {\n continue;\n }\n const dimension = getStaticObjectKey(dimProp.name);\n if (!dimension) continue;\n for (const optProp of dimProp.initializer.properties) {\n if (!ts.isPropertyAssignment(optProp)) continue;\n const option = getStaticObjectKey(optProp.name);\n if (option) suffixes.push(`${dimension}-${option}`);\n }\n }\n }\n\n const compoundProp = obj.properties.find((prop) => {\n if (!ts.isPropertyAssignment(prop)) return false;\n return getStaticObjectKey(prop.name) === 'compoundVariants';\n });\n if (\n compoundProp &&\n ts.isPropertyAssignment(compoundProp) &&\n ts.isArrayLiteralExpression(compoundProp.initializer)\n ) {\n compoundProp.initializer.elements.forEach((_, index) => {\n suffixes.push(`compound-${index}`);\n });\n }\n\n return suffixes;\n }\n\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const key = getStaticObjectKey(prop.name);\n if (!key || RESERVED_COMPONENT_KEYS.has(key)) continue;\n suffixes.push(key);\n }\n\n return suffixes;\n}\n\nfunction parseCreateStylesConfig(init: ts.Expression): StylesBindingConfig {\n const config: StylesBindingConfig = { mode: 'semantic', scopeId: '' };\n let expr = unwrapExpression(init);\n if (ts.isCallExpression(expr)) {\n const firstArg = expr.arguments[0];\n if (!firstArg) return config;\n expr = unwrapExpression(firstArg);\n }\n if (!ts.isObjectLiteralExpression(expr)) return config;\n\n const mode = literalFromProperty(expr, 'mode');\n if (mode === 'semantic' || mode === 'hashed' || mode === 'compact' || mode === 'atomic') {\n config.mode = mode;\n }\n const scopeId = literalFromProperty(expr, 'scopeId');\n if (scopeId != null) config.scopeId = scopeId;\n return config;\n}\n\nfunction isCreateStylesCall(expr: ts.Expression): boolean {\n const unwrapped = unwrapExpression(expr);\n if (!ts.isCallExpression(unwrapped)) return false;\n const callee = unwrapped.expression;\n if (\n ts.isIdentifier(callee) &&\n (callee.text === 'createStyles' || callee.text === 'createTypeStyles')\n ) {\n return true;\n }\n if (\n ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text === 'typestyles' &&\n (callee.name.text === 'createStyles' || callee.name.text === 'createTypeStyles')\n ) {\n return true;\n }\n return false;\n}\n\nfunction registerBindingFromCreateCall(\n bindings: Map<string, StylesBindingConfig>,\n name: string,\n init: ts.Expression,\n): void {\n bindings.set(name, parseCreateStylesConfig(init));\n}\n\nfunction collectBindings(sourceFile: ts.SourceFile): Map<string, StylesBindingConfig> {\n const bindings = new Map<string, StylesBindingConfig>();\n\n const visit = (node: ts.Node): void => {\n if (\n ts.isVariableDeclaration(node) &&\n node.initializer &&\n isCreateStylesCall(node.initializer)\n ) {\n if (ts.isIdentifier(node.name)) {\n registerBindingFromCreateCall(bindings, node.name.text, node.initializer);\n } else if (ts.isObjectBindingPattern(node.name)) {\n const config = parseCreateStylesConfig(node.initializer);\n for (const element of node.name.elements) {\n if (ts.isBindingElement(element) && ts.isIdentifier(element.name)) {\n bindings.set(element.name.text, config);\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return bindings;\n}\n\nfunction calleeMethodName(expr: ts.Expression): string | null {\n if (!ts.isPropertyAccessExpression(expr)) return null;\n if (ts.isIdentifier(expr.name)) return expr.name.text;\n return null;\n}\n\nfunction lineOf(sourceFile: ts.SourceFile, node: ts.Node): number {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));\n return line + 1;\n}\n\nfunction stylesBindingFromCallee(\n expr: ts.Expression,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): StylesBindingConfig {\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.expression)) {\n const binding = bindings.get(expr.expression.text);\n if (binding) return binding;\n if (expr.expression.text === 'styles' && defaultConfig) return defaultConfig;\n }\n if (ts.isIdentifier(expr) && expr.text === 'styles') {\n return bindings.get('styles') ?? defaultConfig ?? { mode: 'semantic', scopeId: '' };\n }\n return defaultConfig ?? { mode: 'semantic', scopeId: '' };\n}\n\nfunction mergeProjectBindings(sourceFiles: ts.SourceFile[]): {\n bindings: Map<string, StylesBindingConfig>;\n defaultConfig?: StylesBindingConfig;\n} {\n const bindings = new Map<string, StylesBindingConfig>();\n const configs: StylesBindingConfig[] = [];\n\n for (const sourceFile of sourceFiles) {\n const fileBindings = collectBindings(sourceFile);\n for (const [key, value] of fileBindings) {\n bindings.set(key, value);\n configs.push(value);\n }\n }\n\n const unique = new Map<string, StylesBindingConfig>();\n for (const config of configs) {\n unique.set(`${config.mode}:${config.scopeId}`, config);\n }\n\n const defaultConfig = unique.size === 1 ? [...unique.values()][0] : undefined;\n return { bindings, defaultConfig };\n}\n\nfunction collectCallsFromSourceFile(\n sourceFile: ts.SourceFile,\n relativePath: string,\n bindings: Map<string, StylesBindingConfig>,\n defaultConfig?: StylesBindingConfig,\n): PublicClassNameEntry[] {\n const entries: PublicClassNameEntry[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const method = calleeMethodName(node.expression);\n if (method === 'class' || method === 'component') {\n const namespace = firstStringArg(node.arguments);\n if (!namespace) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const config = stylesBindingFromCallee(node.expression, bindings, defaultConfig);\n const line = lineOf(sourceFile, node.arguments[0] ?? node);\n\n if (method === 'class') {\n const className = semanticClassName(config, namespace);\n if (className) {\n entries.push({\n className,\n kind: 'class',\n namespace,\n file: relativePath,\n line,\n });\n }\n } else {\n const configObj = objectExpressionFromConfigArg(node.arguments[1]);\n const suffixes = configObj ? collectSuffixesFromConfig(configObj) : ['base'];\n for (const suffix of suffixes) {\n const className = semanticClassName(config, namespace, suffix);\n if (className) {\n entries.push({\n className,\n kind: 'component',\n namespace,\n suffix,\n file: relativePath,\n line,\n });\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return entries;\n}\n\nexport function collectPublicClassNamesFromFiles(\n filePaths: string[],\n rootDir: string,\n): PublicClassNameEntry[] {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n const sourceFile = ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n return { filePath, sourceFile, relativePath: path.relative(rootDir, filePath) };\n });\n\n const { bindings, defaultConfig } = mergeProjectBindings(parsed.map((item) => item.sourceFile));\n const entries: PublicClassNameEntry[] = [];\n\n for (const { sourceFile, relativePath } of parsed) {\n entries.push(...collectCallsFromSourceFile(sourceFile, relativePath, bindings, defaultConfig));\n }\n\n return dedupeEntries(entries);\n}\n\nfunction dedupeEntries(entries: PublicClassNameEntry[]): PublicClassNameEntry[] {\n const byClass = new Map<string, PublicClassNameEntry>();\n for (const entry of entries) {\n if (!byClass.has(entry.className)) {\n byClass.set(entry.className, entry);\n }\n }\n return [...byClass.values()].sort((a, b) => a.className.localeCompare(b.className));\n}\n\nexport async function collectPublicClassNames(\n options: CollectPublicClassNamesOptions = {},\n): Promise<PublicClassNameEntry[]> {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = await fg(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\nexport function collectPublicClassNamesSync(\n options: CollectPublicClassNamesOptions = {},\n): PublicClassNameEntry[] {\n const rootDir = path.resolve(options.rootDir ?? process.cwd());\n const include = options.include ?? DEFAULT_INCLUDE;\n const exclude = options.exclude ?? DEFAULT_EXCLUDE;\n\n const files = fg.sync(include, {\n cwd: rootDir,\n absolute: true,\n ignore: exclude,\n });\n\n return collectPublicClassNamesFromFiles(files, rootDir);\n}\n\n/** @internal Resolve merged `createStyles` / `createTypeStyles` bindings for tests. */\nexport function resolveProjectStylesBindings(\n filePaths: string[],\n _rootDir: string,\n): Map<string, StylesBindingConfig> {\n const parsed = filePaths.map((filePath) => {\n const sourceText = fs.readFileSync(filePath, 'utf8');\n return ts.createSourceFile(\n filePath,\n sourceText,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS,\n );\n });\n return mergeProjectBindings(parsed).bindings;\n}\n\nexport function buildSnapshot(entries: PublicClassNameEntry[]): PublicClassNamesSnapshot {\n const sorted = dedupeEntries(entries);\n return {\n version: 1,\n classNames: sorted.map((entry) => entry.className),\n entries: sorted,\n };\n}\n\nexport function loadPublicClassNamesSnapshot(\n snapshotPath: string,\n): PublicClassNamesSnapshot | null {\n if (!fs.existsSync(snapshotPath)) return null;\n const raw = JSON.parse(fs.readFileSync(snapshotPath, 'utf8')) as PublicClassNamesSnapshot;\n if (!raw || raw.version !== 1 || !Array.isArray(raw.classNames)) {\n throw new Error(\n `[typestyles] Invalid public class name snapshot at ${snapshotPath}. Regenerate with \\`typestyles snapshot --write\\`.`,\n );\n }\n return raw;\n}\n\nexport function writePublicClassNamesSnapshot(\n snapshotPath: string,\n entries: PublicClassNameEntry[],\n): PublicClassNamesSnapshot {\n const snapshot = buildSnapshot(entries);\n fs.writeFileSync(snapshotPath, `${JSON.stringify(snapshot, null, 2)}\\n`, 'utf8');\n return snapshot;\n}\n\nexport function diffRemovedPublicClassNames(\n snapshot: PublicClassNamesSnapshot,\n current: PublicClassNameEntry[],\n): PublicClassNameEntry[] {\n const currentSet = new Set(current.map((entry) => entry.className));\n return snapshot.entries.filter((entry) => !currentSet.has(entry.className));\n}\n"]}
1
+ {"version":3,"sources":["../src/snapshot-classnames.ts"],"names":["ts","fs","path","fg"],"mappings":"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","file":"index.cjs","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport ts from 'typescript';\nimport fg from 'fast-glob';\n\n/** Mirrors `sanitizeClassSegment` in `typestyles` class naming. */\nfunction sanitizeClassSegment(label: string): string {\n const normalized = label\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-');\n return normalized.replace(/-+/g, '-').replace(/^-|-$/g, '') || 'style';\n}\n\nconst RESERVED_COMPONENT_KEYS = new Set([\n 'base',\n 'variants',\n 'compoundVariants',\n 'defaultVariants',\n 'slots',\n]);\n\nexport const PUBLIC_CLASSNAMES_SNAPSHOT = '.typestyles-public-classnames.json';\n\nexport type PublicClassNameEntry = {\n className: string;\n kind: 'class' | 'component';\n namespace: string;\n suffix?: string;\n file: string;\n line: number;\n};\n\nexport type PublicClassNamesSnapshot = {\n version: 1;\n classNames: string[];\n entries: PublicClassNameEntry[];\n};\n\nexport type StylesBindingConfig = {\n mode: 'semantic' | 'hashed' | 'compact' | 'atomic' | 'attribute' | 'bem' | 'template';\n scopeId: string;\n};\n\nexport type CollectPublicClassNamesOptions = {\n /** Project root for resolving snapshot paths and globs */\n rootDir?: string;\n /** Glob patterns relative to rootDir */\n include?: string[];\n /** Glob patterns to exclude */\n exclude?: string[];\n};\n\nconst DEFAULT_INCLUDE = ['**/*.{ts,tsx}'];\nconst DEFAULT_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/*.test.{ts,tsx}',\n '**/*.spec.{ts,tsx}',\n];\n\nfunction semanticScopePrefix(scopeId: string): string {\n if (!scopeId.trim()) return '';\n return `${sanitizeClassSegment(scopeId)}-`;\n}\n\nexport function semanticClassName(\n config: StylesBindingConfig,\n namespace: string,\n suffix?: string,\n): string | null {\n if (\n config.mode === 'hashed' ||\n config.mode === 'compact' ||\n config.mode === 'atomic' ||\n config.mode === 'template'\n ) {\n return null;\n }\n const prefix = semanticScopePrefix(config.scopeId);\n if (suffix === undefined || suffix === 'base') return `${prefix}${namespace}`;\n // Dimensioned attribute variants are data-* only; the helper cannot tell flat\n // modifiers from option names — prefer `componentClassName` / collect for that.\n if (config.mode === 'attribute') return `${prefix}${namespace}`;\n if (config.mode === 'bem') return `${prefix}${namespace}--${suffix}`;\n return `${prefix}${namespace}--${suffix}`;\n}\n\nfunction getStaticObjectKey(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name)) return name.text;\n if (ts.isStringLiteral(name)) return name.text;\n return null;\n}\n\nfunction firstStringArg(args: ts.NodeArray<ts.Expression>): string | null {\n const first = args[0];\n if (!first || !ts.isStringLiteral(first)) return null;\n return first.text;\n}\n\nfunction unwrapExpression(expr: ts.Expression): ts.Expression {\n let current = expr;\n while (\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\nfunction propertyInit(obj: ts.ObjectLiteralExpression, key: string): ts.Expression | undefined {\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n if (getStaticObjectKey(prop.name) === key) return prop.initializer;\n }\n return undefined;\n}\n\n/**\n * `recipe({ name, slots?, styles })` or the removed positional\n * `recipe(name, config | definition, callback?)`.\n */\nfunction recipeInputFromCall(node: ts.CallExpression): {\n namespace: string;\n styles: ts.ObjectLiteralExpression | null;\n slots: ts.ArrayLiteralExpression | null;\n} | null {\n const first = node.arguments[0];\n if (!first) return null;\n const unwrapped = unwrapExpression(first);\n if (ts.isObjectLiteralExpression(unwrapped)) {\n const namespace = literalFromProperty(unwrapped, 'name');\n if (!namespace) return null;\n return {\n namespace,\n styles: objectExpressionFromConfigArg(propertyInit(unwrapped, 'styles')),\n slots: slotsArrayFromObject(unwrapped),\n };\n }\n return null;\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 // Slot class names come from the declared `slots` list. `styles.base` is the\n // slot style map, not a slot named \"base\".\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 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 recipeInput = method === 'component' ? recipeInputFromCall(node) : null;\n const namespace = recipeInput?.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 = recipeInput ? false : isSchemaRecipeCall(node);\n const configObj =\n recipeInput?.styles ??\n objectExpressionFromConfigArg(schemaCall ? node.arguments[2] : node.arguments[1]);\n const slotsOverride = recipeInput\n ? recipeInput.slots\n : schemaCall\n ? definitionSlots(node.arguments[1])\n : 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.d.cts CHANGED
@@ -13,7 +13,7 @@ type PublicClassNamesSnapshot = {
13
13
  entries: PublicClassNameEntry[];
14
14
  };
15
15
  type StylesBindingConfig = {
16
- mode: 'semantic' | 'hashed' | 'compact' | 'atomic';
16
+ mode: 'semantic' | 'hashed' | 'compact' | 'atomic' | 'attribute' | 'bem' | 'template';
17
17
  scopeId: string;
18
18
  };
19
19
  type CollectPublicClassNamesOptions = {
package/dist/index.d.ts CHANGED
@@ -13,7 +13,7 @@ type PublicClassNamesSnapshot = {
13
13
  entries: PublicClassNameEntry[];
14
14
  };
15
15
  type StylesBindingConfig = {
16
- mode: 'semantic' | 'hashed' | 'compact' | 'atomic';
16
+ mode: 'semantic' | 'hashed' | 'compact' | 'atomic' | 'attribute' | 'bem' | 'template';
17
17
  scopeId: string;
18
18
  };
19
19
  type CollectPublicClassNamesOptions = {
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-HWFK4DEK.js';
1
+ export { PUBLIC_CLASSNAMES_SNAPSHOT, buildSnapshot, collectPublicClassNames, collectPublicClassNamesFromFiles, collectPublicClassNamesSync, diffRemovedPublicClassNames, loadPublicClassNamesSnapshot, resolveProjectStylesBindings, semanticClassName, writePublicClassNamesSnapshot } from './chunk-DO2YWMF2.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typestyles/cli",
3
- "version": "0.0.0-unstable.2bfa8a4cdcb5",
3
+ "version": "0.0.0-unstable.31872bc1ed7b",
4
4
  "description": "TypeStyles command-line tools",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",