@plumeria/utils 19.14.4 → 19.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/compile.js CHANGED
@@ -43,6 +43,7 @@ const rs = __importStar(require("@rust-gear/glob"));
43
43
  const index_1 = require("./index");
44
44
  const index_2 = require("./index");
45
45
  const dynamicKey_1 = require("./dynamicKey");
46
+ const varType_1 = require("./varType");
46
47
  const unwrapExport = (node) => {
47
48
  if (node?.type === 'ExportDeclaration')
48
49
  return node.declaration;
@@ -126,6 +127,7 @@ const isStaticArgValue = (node) => node.type === 'StringLiteral' ||
126
127
  const dynamicTablesOf = (ctx) => ({
127
128
  keyframesHashTable: ctx.mergedKeyframesTable,
128
129
  viewTransitionHashTable: ctx.mergedViewTransitionTable,
130
+ varTypeHashTable: ctx.mergedVarTypeTable,
129
131
  createThemeHashTable: ctx.mergedCreateThemeHashTable,
130
132
  createThemeObjectTable: ctx.scannedTables.createThemeObjectTable,
131
133
  createHashTable: ctx.mergedCreateTable,
@@ -345,6 +347,7 @@ function compileCSS(options) {
345
347
  const importMap = {};
346
348
  const keyframesImportMap = {};
347
349
  const viewTransitionImportMap = {};
350
+ const varTypeImportMap = {};
348
351
  const createImportMap = {};
349
352
  const createFunctionImportMap = {};
350
353
  const createThemeImportMap = {};
@@ -406,6 +409,9 @@ function compileCSS(options) {
406
409
  if (scannedTables.viewTransitionHashTable[uniqueKey])
407
410
  viewTransitionImportMap[localName] =
408
411
  scannedTables.viewTransitionHashTable[uniqueKey];
412
+ if (scannedTables.varTypeHashTable?.[uniqueKey])
413
+ varTypeImportMap[localName] =
414
+ scannedTables.varTypeHashTable[uniqueKey];
409
415
  if (scannedTables.createHashTable[uniqueKey])
410
416
  createImportMap[localName] =
411
417
  scannedTables.createHashTable[uniqueKey];
@@ -446,6 +452,15 @@ function compileCSS(options) {
446
452
  for (const key of Object.keys(viewTransitionImportMap)) {
447
453
  mergedViewTransitionTable[key] = viewTransitionImportMap[key];
448
454
  }
455
+ const varTypeHashTable = scannedTables.varTypeHashTable ?? {};
456
+ const mergedVarTypeTable = Object.create(varTypeHashTable);
457
+ for (const key of (0, index_1.fileTableKeys)(resourcePath, 'varTypeHashTable') ?? []) {
458
+ mergedVarTypeTable[key.slice(resourcePath.length + 1)] =
459
+ varTypeHashTable[key];
460
+ }
461
+ for (const key of Object.keys(varTypeImportMap)) {
462
+ mergedVarTypeTable[key] = varTypeImportMap[key];
463
+ }
449
464
  const mergedCreateThemeHashTable = Object.create(scannedTables.createThemeHashTable);
450
465
  for (const key of (0, index_1.fileTableKeys)(resourcePath, 'createThemeHashTable') ??
451
466
  []) {
@@ -477,6 +492,7 @@ function compileCSS(options) {
477
492
  mergedStaticTable,
478
493
  mergedKeyframesTable,
479
494
  mergedViewTransitionTable,
495
+ mergedVarTypeTable,
480
496
  mergedCreateThemeHashTable,
481
497
  mergedCreateStaticHashTable,
482
498
  mergedCreateTable,
@@ -601,7 +617,7 @@ function compileCSS(options) {
601
617
  return merged;
602
618
  }
603
619
  if (index_1.t.isObjectExpression(expr)) {
604
- return (0, index_1.objectExpressionToObject)(expr, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
620
+ return (0, index_1.objectExpressionToObject)(expr, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
605
621
  }
606
622
  else if (index_1.t.isMemberExpression(expr) &&
607
623
  index_1.t.isIdentifier(expr.object) &&
@@ -715,7 +731,7 @@ function compileCSS(options) {
715
731
  properties: argExpr.properties.filter((prop) => prop.type === 'Identifier' ||
716
732
  (prop.type === 'KeyValueProperty' &&
717
733
  isStaticArgValue(prop.value))),
718
- }, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
734
+ }, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
719
735
  if (func.named) {
720
736
  const argExpr = callArgs[0]?.expression;
721
737
  if (callArgs.length > 1 ||
@@ -973,7 +989,7 @@ function compileCSS(options) {
973
989
  propName = originalName;
974
990
  }
975
991
  if (propName) {
976
- if (['create', 'createTheme', 'createStatic'].includes(propName) &&
992
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName) &&
977
993
  !registeredStyleCalls.has(node.span.start)) {
978
994
  throw new Error(`[plumeria] css.${propName} must be assigned to a named top-level variable. ` +
979
995
  `Destructuring, assignment statements, and default-exported calls cannot be compiled. ` +
@@ -1003,14 +1019,14 @@ function compileCSS(options) {
1003
1019
  else if (propName === 'keyframes' &&
1004
1020
  args.length > 0 &&
1005
1021
  index_1.t.isObjectExpression(args[0].expression)) {
1006
- const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1022
+ const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
1007
1023
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1008
1024
  writes.keyframesObjectTable[hash] = obj;
1009
1025
  }
1010
1026
  else if (propName === 'viewTransition' &&
1011
1027
  args.length > 0 &&
1012
1028
  index_1.t.isObjectExpression(args[0].expression)) {
1013
- const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1029
+ const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
1014
1030
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1015
1031
  writes.viewTransitionObjectTable[hash] = obj;
1016
1032
  }
@@ -1027,7 +1043,7 @@ function compileCSS(options) {
1027
1043
  throw new Error(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports ` +
1028
1044
  `nesting at-rules such as @media, @container, @supports, @layer, and @scope. (${path.basename(resourcePath)})`);
1029
1045
  }
1030
- const obj = (0, index_1.objectExpressionToObject)(args[1].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1046
+ const obj = (0, index_1.objectExpressionToObject)(args[1].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
1031
1047
  const hash = (0, index_1.themeHashOf)(selector, obj);
1032
1048
  writes.createThemeObjectTable[hash] = obj;
1033
1049
  if (ctx.scannedTables.createThemeSelectorTable) {
@@ -1037,7 +1053,7 @@ function compileCSS(options) {
1037
1053
  else if (propName === 'createStatic' &&
1038
1054
  args.length > 0 &&
1039
1055
  index_1.t.isObjectExpression(args[0].expression)) {
1040
- const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1056
+ const obj = (0, index_1.objectExpressionToObject)(args[0].expression, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
1041
1057
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1042
1058
  writes.createStaticObjectTable[hash] = obj;
1043
1059
  }
@@ -1088,7 +1104,7 @@ function compileCSS(options) {
1088
1104
  ? ctx.scannedTables.createAtomicMapTable[ctx.mergedCreateThemeHashTable[name]]
1089
1105
  : undefined);
1090
1106
  if (pName === 'create') {
1091
- const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, resolveVariable);
1107
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, resolveVariable, ctx.mergedVarTypeTable);
1092
1108
  if (obj) {
1093
1109
  const styleFunctions = (0, index_1.styleFunctionsOf)(arg);
1094
1110
  ctx.localCreateStyles[node.id.value] = {
@@ -1109,7 +1125,7 @@ function compileCSS(options) {
1109
1125
  throw new Error(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports ` +
1110
1126
  `nesting at-rules such as @media, @container, @supports, @layer, and @scope. (${path.basename(resourcePath)})`);
1111
1127
  }
1112
- const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1128
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
1113
1129
  const hash = (0, index_1.themeHashOf)(selector, obj);
1114
1130
  const uKey = `${resourcePath}-${node.id.value}`;
1115
1131
  writes.createThemeHashTable[uKey] = hash;
@@ -1129,8 +1145,12 @@ function compileCSS(options) {
1129
1145
  obj: ctx.scannedTables.createAtomicMapTable[hash],
1130
1146
  };
1131
1147
  }
1148
+ else if (pName === 'varType') {
1149
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
1150
+ ctx.mergedVarTypeTable[node.id.value] = (0, varType_1.checkedVarTypeHash)(node.id.value, obj);
1151
+ }
1132
1152
  else if (pName === 'createStatic') {
1133
- const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable);
1153
+ const obj = (0, index_1.objectExpressionToObject)(arg, ctx.mergedStaticTable, ctx.mergedKeyframesTable, ctx.mergedViewTransitionTable, ctx.mergedCreateThemeHashTable, ctx.scannedTables.createThemeObjectTable, ctx.mergedCreateTable, ctx.mergedCreateStaticHashTable, ctx.scannedTables.createStaticObjectTable, undefined, ctx.mergedVarTypeTable);
1134
1154
  if (obj) {
1135
1155
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1136
1156
  const uKey = `${resourcePath}-${node.id.value}`;
@@ -1,5 +1,5 @@
1
1
  import type { Expression, ObjectExpression } from '@swc/core';
2
- import type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable } from './types';
2
+ import type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, VarTypeHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable } from './types';
3
3
  export type NamedParam = {
4
4
  key: string;
5
5
  local: string;
@@ -29,6 +29,7 @@ export declare const applyVarFallback: (style: CSSObject, cssVar: string, litera
29
29
  export type DynamicStyleTables = {
30
30
  keyframesHashTable: KeyframesHashTable;
31
31
  viewTransitionHashTable: ViewTransitionHashTable;
32
+ varTypeHashTable?: VarTypeHashTable;
32
33
  createThemeHashTable: CreateThemeHashTable;
33
34
  createThemeObjectTable: CreateThemeObjectTable;
34
35
  createHashTable: CreateHashTable;
@@ -381,7 +381,7 @@ const resolveDynamicStyle = (func, runtimeParams, staticTable, tables, providedP
381
381
  value: expr,
382
382
  },
383
383
  ],
384
- }, table, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable).value;
384
+ }, table, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable, undefined, tables.varTypeHashTable).value;
385
385
  const withDefault = Object.entries(func.defaults ?? {}).filter(([param]) => providedParams
386
386
  ? !providedParams.has(param)
387
387
  : tempStaticTable[param] === undefined);
@@ -424,7 +424,7 @@ const resolveDynamicStyle = (func, runtimeParams, staticTable, tables, providedP
424
424
  return undefined;
425
425
  }
426
426
  });
427
- const resolveBody = () => (0, parser_1.objectExpressionToObject)(body, tempStaticTable, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable);
427
+ const resolveBody = () => (0, parser_1.objectExpressionToObject)(body, tempStaticTable, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable, undefined, tables.varTypeHashTable);
428
428
  const varNames = [...varParams, ...derived.map(({ name }) => name)];
429
429
  if (varNames.length > 0) {
430
430
  varNames.forEach((name) => (tempStaticTable[name] = name));
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateFunctionTable, CreateThemeHashTable, CreateStaticHashTable, } from './types';
1
+ export type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, VarTypeHashTable, CreateHashTable, CreateFunctionTable, CreateThemeHashTable, CreateStaticHashTable, } from './types';
2
2
  export { objectExpressionToObject, collectLocalConsts, traverse, t, getRootIdentifier, resolveOriginError, unwrapExpression, extractOndemandStyles, appendSheet, deepMerge, scanAll, scanOverlay, fileTableKeys, resolveFileError, getFileDependencies, resolveExport, resolveComponentKey, resolveThemeSelector, } from './parser';
3
3
  export { resolveExportValue } from './constValue';
4
4
  export type { StyleRecord } from './create';
package/dist/parser.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CSSObject, Tables, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable, SheetSink } from './types';
1
+ import type { CSSObject, Tables, StaticTable, KeyframesHashTable, ViewTransitionHashTable, VarTypeHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable, SheetSink } from './types';
2
2
  import type { Module, Expression, CallExpression, Identifier, KeyValueProperty, StringLiteral, NumericLiteral, BooleanLiteral, ObjectExpression, MemberExpression, TemplateLiteral, BinaryExpression, UnaryExpression, ParenthesisExpression, VariableDeclaration, VariableDeclarator, ExportDeclaration, ConditionalExpression, JSXExpression, ArrowFunctionExpression, FunctionExpression } from '@swc/core';
3
3
  export declare function unwrapExpression(node: any): any;
4
4
  export declare const getRootIdentifier: (node: Expression) => string | null;
@@ -43,7 +43,7 @@ export declare function traverse(node: Module | JSXExpression, visitor: {
43
43
  stop: () => void;
44
44
  }) => void;
45
45
  }): void;
46
- export declare function objectExpressionToObject(node: ObjectExpression, staticTable: StaticTable, keyframesHashTable: KeyframesHashTable, viewTransitionHashTable: ViewTransitionHashTable, createThemeHashTable: CreateThemeHashTable, createThemeObjectTable: CreateThemeObjectTable, createHashTable: CreateHashTable, createStaticHashTable: CreateStaticHashTable, createStaticObjectTable: CreateStaticObjectTable, resolveVariable?: (name: string) => any): CSSObject;
46
+ export declare function objectExpressionToObject(node: ObjectExpression, staticTable: StaticTable, keyframesHashTable: KeyframesHashTable, viewTransitionHashTable: ViewTransitionHashTable, createThemeHashTable: CreateThemeHashTable, createThemeObjectTable: CreateThemeObjectTable, createHashTable: CreateHashTable, createStaticHashTable: CreateStaticHashTable, createStaticObjectTable: CreateStaticObjectTable, resolveVariable?: (name: string) => any, varTypeHashTable?: VarTypeHashTable): CSSObject;
47
47
  export declare function collectLocalConstNodes(ast: Module): Map<string, any>;
48
48
  export declare function collectLocalConsts(ast: Module): Record<string, any>;
49
49
  export declare function readsParams(node: any, params: Set<string>): boolean;
package/dist/parser.js CHANGED
@@ -61,6 +61,7 @@ const fs = __importStar(require("fs"));
61
61
  const rs = __importStar(require("@rust-gear/glob"));
62
62
  const zss_engine_1 = require("zss-engine");
63
63
  const viewTransition_1 = require("./viewTransition");
64
+ const varType_1 = require("./varType");
64
65
  const constants_1 = require("./constants");
65
66
  const stylePropFilter_1 = require("./stylePropFilter");
66
67
  const create_1 = require("./create");
@@ -274,12 +275,12 @@ function traverse(node, visitor) {
274
275
  }
275
276
  walk(node);
276
277
  }
277
- function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable) {
278
+ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable, varTypeHashTable = {}) {
278
279
  const obj = Object.create(null);
279
280
  node.properties.forEach((prop) => {
280
281
  if (prop.type === 'SpreadElement') {
281
282
  const arg = prop.arguments;
282
- const spreadVal = evaluateExpression(arg, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
283
+ const spreadVal = evaluateExpression(arg, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
283
284
  if (typeof spreadVal === 'object' && spreadVal !== null) {
284
285
  Object.assign(obj, spreadVal);
285
286
  }
@@ -301,7 +302,7 @@ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTra
301
302
  }
302
303
  if (!exports.t.isObjectProperty(prop))
303
304
  return;
304
- const rawKey = getPropertyKey(prop.key, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
305
+ const rawKey = getPropertyKey(prop.key, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
305
306
  if (!rawKey)
306
307
  return;
307
308
  const key = typeof rawKey === 'string' ? (0, zss_engine_1.stripSelectorComments)(rawKey) : rawKey;
@@ -340,6 +341,10 @@ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTra
340
341
  obj[key] = 'vt-' + resolvedViewTransitioin;
341
342
  return;
342
343
  }
344
+ if (exports.t.isIdentifier(val) && varTypeHashTable[val.value] !== undefined) {
345
+ obj[key] = '--pr-' + varTypeHashTable[val.value];
346
+ return;
347
+ }
343
348
  const resolvedCreate = resolveCreateTableMemberExpression(val, createHashTable);
344
349
  if (resolvedCreate !== undefined) {
345
350
  obj[key] = 'cr-' + resolvedCreate;
@@ -362,13 +367,13 @@ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTra
362
367
  obj[key] = val.value;
363
368
  }
364
369
  else if (exports.t.isUnaryExpression(val)) {
365
- obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
370
+ obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
366
371
  }
367
372
  else if (exports.t.isObjectExpression(val)) {
368
- obj[key] = objectExpressionToObject(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable);
373
+ obj[key] = objectExpressionToObject(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createHashTable, createStaticHashTable, createStaticObjectTable, resolveVariable, varTypeHashTable);
369
374
  }
370
375
  else if (exports.t.isBinaryExpression(val) || exports.t.isTemplateLiteral(val)) {
371
- obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
376
+ obj[key] = evaluateExpression(val, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
372
377
  }
373
378
  else if (exports.t.isMemberExpression(val)) {
374
379
  const resolved = resolveStaticTableMemberExpression(val, staticTable);
@@ -439,7 +444,7 @@ function collectLocalConsts(ast) {
439
444
  else if (exports.t.isBinaryExpression(init) ||
440
445
  exports.t.isTemplateLiteral(init) ||
441
446
  exports.t.isUnaryExpression(init)) {
442
- result = evaluateExpression(init, localConsts, {}, {}, {}, {}, {}, {});
447
+ result = evaluateExpression(init, localConsts, {}, {}, {}, {}, {}, {}, {});
443
448
  }
444
449
  }
445
450
  catch (e) {
@@ -670,7 +675,7 @@ function inlineOuterScope(objExpression, resolveProperty) {
670
675
  });
671
676
  return changed ? { ...objExpression, properties } : objExpression;
672
677
  }
673
- function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
678
+ function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
674
679
  if (exports.t.isIdentifier(node)) {
675
680
  return node.value;
676
681
  }
@@ -690,9 +695,12 @@ function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHas
690
695
  typeof staticTable[expr.value] === 'string') {
691
696
  return staticTable[expr.value];
692
697
  }
698
+ if (varTypeHashTable[expr.value] !== undefined) {
699
+ return '--pr-' + varTypeHashTable[expr.value];
700
+ }
693
701
  }
694
702
  if (exports.t.isCallExpression(expr)) {
695
- const result = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
703
+ const result = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
696
704
  if (typeof result === 'string')
697
705
  return result;
698
706
  }
@@ -708,28 +716,28 @@ function getPropertyKey(node, staticTable, keyframesHashTable, viewTransitionHas
708
716
  return themeResult;
709
717
  }
710
718
  if (exports.t.isTemplateLiteral(expr)) {
711
- return evaluateTemplateLiteral(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
719
+ return evaluateTemplateLiteral(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
712
720
  }
713
721
  if (exports.t.isBinaryExpression(expr)) {
714
- return evaluateBinaryExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
722
+ return evaluateBinaryExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
715
723
  }
716
724
  return '';
717
725
  }
718
726
  if (exports.t.isTemplateLiteral(node)) {
719
- return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
727
+ return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
720
728
  }
721
729
  if (exports.t.isBinaryExpression(node)) {
722
- return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
730
+ return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
723
731
  }
724
732
  return '';
725
733
  }
726
- function evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
734
+ function evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
727
735
  let result = '';
728
736
  for (let i = 0; i < node.quasis.length; i++) {
729
737
  result += node.quasis[i].cooked || node.quasis[i].raw;
730
738
  if (i < node.expressions.length) {
731
739
  const expr = node.expressions[i];
732
- const evaluatedExpr = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
740
+ const evaluatedExpr = evaluateExpression(expr, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
733
741
  if (evaluatedExpr === null || typeof evaluatedExpr === 'object')
734
742
  throw new Error(`[plumeria] Template value cannot be resolved to a primitive: ${(0, exports.expressionLabel)(expr)} inside \${} must resolve to a string or number at build time.`);
735
743
  result += String(evaluatedExpr);
@@ -737,15 +745,15 @@ function evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTran
737
745
  }
738
746
  return result;
739
747
  }
740
- function evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
741
- const left = evaluateExpression(node.left, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
748
+ function evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
749
+ const left = evaluateExpression(node.left, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
742
750
  if (node.operator === '&&' && !left)
743
751
  return left;
744
752
  if (node.operator === '||' && left)
745
753
  return left;
746
754
  if (node.operator === '??' && left !== null)
747
755
  return left;
748
- const right = evaluateExpression(node.right, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
756
+ const right = evaluateExpression(node.right, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
749
757
  if (['&&', '||', '??'].includes(node.operator))
750
758
  return right;
751
759
  if (typeof left === 'number' && typeof right === 'number') {
@@ -815,8 +823,8 @@ function evaluateCallExpression(node, staticTable) {
815
823
  if (method === 'marker') {
816
824
  const args = node.arguments;
817
825
  if (args.length >= 2) {
818
- const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {});
819
- const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {});
826
+ const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {}, {});
827
+ const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {}, {});
820
828
  if (typeof id === 'string' && typeof pseudo === 'string') {
821
829
  const varName = getMarkerVar(id, pseudo);
822
830
  return {
@@ -830,8 +838,8 @@ function evaluateCallExpression(node, staticTable) {
830
838
  if (method === 'extended') {
831
839
  const args = node.arguments;
832
840
  if (args.length >= 2) {
833
- const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {});
834
- const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {});
841
+ const id = evaluateExpression(args[0].expression, staticTable, {}, {}, {}, {}, {}, {}, {});
842
+ const pseudo = evaluateExpression(args[1].expression, staticTable, {}, {}, {}, {}, {}, {}, {});
835
843
  if (typeof id === 'string' && typeof pseudo === 'string') {
836
844
  const varName = getMarkerVar(id, pseudo);
837
845
  return `@container style(${varName}: 1)`;
@@ -840,7 +848,7 @@ function evaluateCallExpression(node, staticTable) {
840
848
  }
841
849
  return null;
842
850
  }
843
- function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
851
+ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable) {
844
852
  node = unwrapExpression(node);
845
853
  if (exports.t.isCallExpression(node)) {
846
854
  return evaluateCallExpression(node, staticTable);
@@ -867,6 +875,9 @@ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitio
867
875
  if (viewTransitionHashTable[node.value] !== undefined) {
868
876
  return 'vt-' + viewTransitionHashTable[node.value];
869
877
  }
878
+ if (varTypeHashTable[node.value] !== undefined) {
879
+ return '--pr-' + varTypeHashTable[node.value];
880
+ }
870
881
  if (createStaticHashTable[node.value] !== undefined) {
871
882
  const hash = createStaticHashTable[node.value];
872
883
  if (createStaticObjectTable[hash] !== undefined) {
@@ -891,13 +902,13 @@ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitio
891
902
  throw new Error(`[plumeria] Cannot resolve static member expression: ${(0, exports.expressionLabel)(node)}. Its object must be a const or a value created by css.createStatic or css.createTheme.`);
892
903
  }
893
904
  if (exports.t.isBinaryExpression(node)) {
894
- return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
905
+ return evaluateBinaryExpression(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
895
906
  }
896
907
  if (exports.t.isTemplateLiteral(node)) {
897
- return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
908
+ return evaluateTemplateLiteral(node, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
898
909
  }
899
910
  if (exports.t.isUnaryExpression(node)) {
900
- const value = evaluateExpression(node.argument, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
911
+ const value = evaluateExpression(node.argument, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
901
912
  if (node.operator === '!')
902
913
  return !value;
903
914
  if (typeof value === 'number') {
@@ -911,7 +922,7 @@ function evaluateExpression(node, staticTable, keyframesHashTable, viewTransitio
911
922
  throw new Error(`[plumeria] Unsupported unary operand for ${node.operator}: ${(0, exports.expressionLabel)(node.argument)} must resolve to a number at build time.`);
912
923
  }
913
924
  if (exports.t.isParenthesisExpression(node)) {
914
- return evaluateExpression(node.expression, staticTable, keyframesHashTable, viewTransitionHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
925
+ return evaluateExpression(node.expression, staticTable, keyframesHashTable, viewTransitionHashTable, varTypeHashTable, createThemeHashTable, createThemeObjectTable, createStaticHashTable, createStaticObjectTable);
915
926
  }
916
927
  throw new Error(`[plumeria] Unsupported expression type: ${(0, exports.expressionLabel)(node)}. Style values must be literals, consts, or arithmetic and template expressions of them.`);
917
928
  }
@@ -1023,7 +1034,7 @@ function resolveCreateStaticTableMemberExpression(node, createStaticHashTable, c
1023
1034
  }
1024
1035
  function resolveThemeSelector(node, staticTable, createStaticHashTable, createStaticObjectTable) {
1025
1036
  try {
1026
- const value = evaluateExpression(node, staticTable, {}, {}, {}, {}, createStaticHashTable, createStaticObjectTable);
1037
+ const value = evaluateExpression(node, staticTable, {}, {}, {}, {}, {}, createStaticHashTable, createStaticObjectTable);
1027
1038
  return typeof value === 'string' ? value : '';
1028
1039
  }
1029
1040
  catch {
@@ -1074,7 +1085,9 @@ const globalAgregatedTables = {
1074
1085
  keyframesHashTable: {},
1075
1086
  keyframesObjectTable: {},
1076
1087
  viewTransitionHashTable: {},
1088
+ varTypeHashTable: {},
1077
1089
  viewTransitionObjectTable: {},
1090
+ varTypeObjectTable: {},
1078
1091
  createThemeObjectTable: {},
1079
1092
  createThemeSelectorTable: {},
1080
1093
  createHashTable: {},
@@ -1098,6 +1111,7 @@ const detachedTables = new Set([
1098
1111
  'staticTable',
1099
1112
  'keyframesHashTable',
1100
1113
  'viewTransitionHashTable',
1114
+ 'varTypeHashTable',
1101
1115
  'createHashTable',
1102
1116
  'createObjectTable',
1103
1117
  'createFunctionTable',
@@ -1433,6 +1447,7 @@ function runScan(scanCwd, styleProp) {
1433
1447
  keyframesHashTable: {},
1434
1448
  keyframesObjectTable: {},
1435
1449
  viewTransitionHashTable: {},
1450
+ varTypeHashTable: {},
1436
1451
  viewTransitionObjectTable: {},
1437
1452
  createThemeHashTable: {},
1438
1453
  createThemeSelectorTable: {},
@@ -1492,7 +1507,9 @@ function runScan(scanCwd, styleProp) {
1492
1507
  const localKeyframesHashTable = {};
1493
1508
  const localKeyframesObjectTable = {};
1494
1509
  const localViewTransitionHashTable = {};
1510
+ const localVarTypeHashTable = {};
1495
1511
  const localViewTransitionObjectTable = {};
1512
+ const localVarTypeObjectTable = {};
1496
1513
  const localCreateThemeObjectTable = {};
1497
1514
  const localCreateThemeSelectorTable = {};
1498
1515
  const localCreateHashTable = {};
@@ -1578,6 +1595,14 @@ function runScan(scanCwd, styleProp) {
1578
1595
  localTables.keyframesObjectTable[hash];
1579
1596
  }
1580
1597
  }
1598
+ if (localTables.varTypeHashTable?.[uniqueKey]) {
1599
+ const hash = localTables.varTypeHashTable[uniqueKey];
1600
+ localVarTypeHashTable[localName] = hash;
1601
+ if (localTables.varTypeObjectTable?.[hash]) {
1602
+ localVarTypeObjectTable[hash] =
1603
+ localTables.varTypeObjectTable[hash];
1604
+ }
1605
+ }
1581
1606
  if (localTables.viewTransitionHashTable[uniqueKey]) {
1582
1607
  const hash = localTables.viewTransitionHashTable[uniqueKey];
1583
1608
  localViewTransitionHashTable[localName] = hash;
@@ -1681,6 +1706,7 @@ function runScan(scanCwd, styleProp) {
1681
1706
  'createStatic',
1682
1707
  'keyframes',
1683
1708
  'viewTransition',
1709
+ 'varType',
1684
1710
  ].includes(method)) {
1685
1711
  const argument = decl.init.arguments[method === 'createTheme' ? 1 : 0];
1686
1712
  if (argument)
@@ -1710,13 +1736,14 @@ function runScan(scanCwd, styleProp) {
1710
1736
  const isPassOneMethod = method === 'createStatic' ||
1711
1737
  method === 'createTheme' ||
1712
1738
  method === 'keyframes' ||
1713
- method === 'viewTransition';
1739
+ method === 'viewTransition' ||
1740
+ method === 'varType';
1714
1741
  if (isFirstPass && !isPassOneMethod)
1715
1742
  continue;
1716
1743
  const objExpression = isCreateTheme
1717
1744
  ? init.arguments[1].expression
1718
1745
  : init.arguments[0].expression;
1719
- const obj = objectExpressionToObject(objExpression, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable);
1746
+ const obj = objectExpressionToObject(objExpression, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable, localVarTypeHashTable);
1720
1747
  const uniqueKey = `${filePath}-${name}`;
1721
1748
  if (method === 'createStatic') {
1722
1749
  localStaticTable[name] = obj;
@@ -1739,6 +1766,15 @@ function runScan(scanCwd, styleProp) {
1739
1766
  localKeyframesObjectTable[hash] = obj;
1740
1767
  registerObjectOwner('keyframesObjectTable', hash, filePath);
1741
1768
  }
1769
+ else if (method === 'varType') {
1770
+ const hash = (0, varType_1.checkedVarTypeHash)(name, obj);
1771
+ localVarTypeHashTable[name] = hash;
1772
+ localTables.varTypeHashTable[uniqueKey] = hash;
1773
+ registerFileKey('varTypeHashTable', uniqueKey, filePath);
1774
+ (localTables.varTypeObjectTable ??= {})[hash] = obj;
1775
+ localVarTypeObjectTable[hash] = obj;
1776
+ registerObjectOwner('varTypeObjectTable', hash, filePath);
1777
+ }
1742
1778
  else if (method === 'viewTransition') {
1743
1779
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
1744
1780
  localViewTransitionHashTable[name] = hash;
@@ -1788,7 +1824,7 @@ function runScan(scanCwd, styleProp) {
1788
1824
  inlineOuterScope(objExpression, (property) => objectExpressionToObject({
1789
1825
  ...objExpression,
1790
1826
  properties: [property],
1791
- }, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable));
1827
+ }, scopedStaticTable, localKeyframesHashTable, localViewTransitionHashTable, localCreateThemeHashTable, localCreateThemeObjectTable, localCreateHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, resolveVariable, localVarTypeHashTable));
1792
1828
  registerFileKey('createFunctionTable', uniqueKey, filePath);
1793
1829
  }
1794
1830
  const hashMap = {};
@@ -1817,7 +1853,9 @@ function runScan(scanCwd, styleProp) {
1817
1853
  localKeyframesHashTable,
1818
1854
  localKeyframesObjectTable,
1819
1855
  localViewTransitionHashTable,
1856
+ localVarTypeHashTable,
1820
1857
  localViewTransitionObjectTable,
1858
+ localVarTypeObjectTable,
1821
1859
  localCreateThemeObjectTable,
1822
1860
  localCreateThemeSelectorTable,
1823
1861
  localCreateHashTable,
@@ -1837,7 +1875,7 @@ function runScan(scanCwd, styleProp) {
1837
1875
  for (const entry of jsxPhaseQueue) {
1838
1876
  try {
1839
1877
  delete fileErrors[entry.filePath];
1840
- const { filePath, ast, mtimeMs, localDependencies, localStaticTable, localKeyframesHashTable, localKeyframesObjectTable, localViewTransitionHashTable, localViewTransitionObjectTable, localCreateThemeObjectTable, localCreateThemeSelectorTable, localCreateHashTable, localCreateObjectTable, localCreateAtomicMapTable, localCreateThemeHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, localImports, } = entry;
1878
+ const { filePath, ast, mtimeMs, localDependencies, localStaticTable, localKeyframesHashTable, localKeyframesObjectTable, localViewTransitionHashTable, localVarTypeHashTable, localViewTransitionObjectTable, localVarTypeObjectTable, localCreateThemeObjectTable, localCreateThemeSelectorTable, localCreateHashTable, localCreateObjectTable, localCreateAtomicMapTable, localCreateThemeHashTable, localCreateStaticHashTable, localCreateStaticObjectTable, localImports, } = entry;
1841
1879
  const localCreateFunctionTable = {};
1842
1880
  for (const localName of Object.keys(localImports)) {
1843
1881
  const { actualPath, importedName } = localImports[localName];
@@ -1858,6 +1896,7 @@ function runScan(scanCwd, styleProp) {
1858
1896
  const dynamicStyleTables = {
1859
1897
  keyframesHashTable: localKeyframesHashTable,
1860
1898
  viewTransitionHashTable: localViewTransitionHashTable,
1899
+ varTypeHashTable: localVarTypeHashTable,
1861
1900
  createThemeHashTable: localCreateThemeHashTable,
1862
1901
  createThemeObjectTable: localTables.createThemeObjectTable,
1863
1902
  createHashTable: localCreateHashTable,
@@ -2273,7 +2312,9 @@ function runScan(scanCwd, styleProp) {
2273
2312
  keyframesHashTable: localKeyframesHashTable,
2274
2313
  keyframesObjectTable: localKeyframesObjectTable,
2275
2314
  viewTransitionHashTable: localViewTransitionHashTable,
2315
+ varTypeHashTable: localVarTypeHashTable,
2276
2316
  viewTransitionObjectTable: localViewTransitionObjectTable,
2317
+ varTypeObjectTable: localVarTypeObjectTable,
2277
2318
  createThemeHashTable: localCreateThemeHashTable,
2278
2319
  createThemeSelectorTable: localCreateThemeSelectorTable,
2279
2320
  createThemeObjectTable: localCreateThemeObjectTable,
@@ -2472,6 +2513,7 @@ function extractAndCacheExports(filePath, ast, mtimeMs) {
2472
2513
  keyframesHashTable: {},
2473
2514
  keyframesObjectTable: {},
2474
2515
  viewTransitionHashTable: {},
2516
+ varTypeHashTable: {},
2475
2517
  viewTransitionObjectTable: {},
2476
2518
  createThemeHashTable: {},
2477
2519
  createThemeSelectorTable: {},
@@ -2548,7 +2590,7 @@ function resolveExport(filePath, exportName, visited = new Set()) {
2548
2590
  }
2549
2591
  return null;
2550
2592
  }
2551
- const REFERENCE_MARKER = /(kf|vt|cr)-([0-9a-z]+)/g;
2593
+ const REFERENCE_MARKER = /(kf|vt|cr|pr)-([0-9a-z]+)/g;
2552
2594
  const CUSTOM_PROPERTY = /var\(\s*(--[^\s,)]+)/g;
2553
2595
  const appendSheet = (sheets) => {
2554
2596
  const existingSheets = new Set(sheets);
@@ -2566,16 +2608,31 @@ function extractOndemandStyles(obj, addSheet, t) {
2566
2608
  const visited = new Set();
2567
2609
  const keyframesHashes = new Set();
2568
2610
  const viewTransitionHashes = new Set();
2611
+ const varTypeHashes = new Set();
2569
2612
  const createHashes = new Set();
2570
2613
  const usedVariables = new Set();
2614
+ function findVarTypes(text) {
2615
+ for (const [, kind, hash] of text.matchAll(REFERENCE_MARKER)) {
2616
+ if (kind === 'pr' && t.varTypeObjectTable?.[hash])
2617
+ varTypeHashes.add(hash);
2618
+ }
2619
+ }
2571
2620
  function walk(n) {
2572
2621
  if (!n || typeof n !== 'object' || visited.has(n))
2573
2622
  return;
2574
2623
  visited.add(n);
2624
+ for (const key of Object.keys(n)) {
2625
+ if (key.includes('pr-'))
2626
+ findVarTypes(key);
2627
+ }
2575
2628
  Object.values(n).forEach((val) => {
2576
2629
  if (typeof val === 'string') {
2630
+ if (val.includes('pr-'))
2631
+ findVarTypes(val);
2577
2632
  if (val.includes('kf-') || val.includes('vt-') || val.includes('cr-')) {
2578
2633
  for (const [, kind, hash] of val.matchAll(REFERENCE_MARKER)) {
2634
+ if (kind === 'pr')
2635
+ continue;
2579
2636
  if (kind === 'kf') {
2580
2637
  if (!keyframesHashes.has(hash) && t.keyframesObjectTable[hash]) {
2581
2638
  keyframesHashes.add(hash);
@@ -2616,6 +2673,10 @@ function extractOndemandStyles(obj, addSheet, t) {
2616
2673
  }
2617
2674
  }
2618
2675
  }
2676
+ for (const hash of varTypeHashes) {
2677
+ const { styleSheet } = (0, zss_engine_1.transpile)((0, varType_1.createVarType)(t.varTypeObjectTable[hash], hash), undefined, '--global');
2678
+ addSheet(styleSheet);
2679
+ }
2619
2680
  if (viewTransitionHashes.size > 0) {
2620
2681
  for (const hash of viewTransitionHashes) {
2621
2682
  const obj = t.viewTransitionObjectTable[hash];
package/dist/transform.js CHANGED
@@ -39,6 +39,7 @@ const path = __importStar(require("path"));
39
39
  const zss_engine_1 = require("zss-engine");
40
40
  const parser_1 = require("./parser");
41
41
  const unresolvableValue_1 = require("./unresolvableValue");
42
+ const varType_1 = require("./varType");
42
43
  const spreadValues = (tables, constNodes, sourceOf) => {
43
44
  const spread = (prop) => {
44
45
  let values;
@@ -341,6 +342,7 @@ const transformSource = async (env) => {
341
342
  const importMap = {};
342
343
  const keyframesImportMap = {};
343
344
  const viewTransitionImportMap = {};
345
+ const varTypeImportMap = {};
344
346
  const createImportMap = {};
345
347
  const createFunctionImportMap = {};
346
348
  const createThemeImportMap = {};
@@ -404,6 +406,10 @@ const transformSource = async (env) => {
404
406
  viewTransitionImportMap[localName] =
405
407
  scannedTables.viewTransitionHashTable[uniqueKey];
406
408
  }
409
+ if (scannedTables.varTypeHashTable?.[uniqueKey]) {
410
+ varTypeImportMap[localName] =
411
+ scannedTables.varTypeHashTable[uniqueKey];
412
+ }
407
413
  if (scannedTables.createHashTable[uniqueKey]) {
408
414
  createImportMap[localName] =
409
415
  scannedTables.createHashTable[uniqueKey];
@@ -447,6 +453,15 @@ const transformSource = async (env) => {
447
453
  for (const key of Object.keys(viewTransitionImportMap)) {
448
454
  mergedViewTransitionTable[key] = viewTransitionImportMap[key];
449
455
  }
456
+ const varTypeHashTable = scannedTables.varTypeHashTable ?? {};
457
+ const mergedVarTypeTable = Object.create(varTypeHashTable);
458
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'varTypeHashTable') ?? []) {
459
+ mergedVarTypeTable[key.slice(resourcePath.length + 1)] =
460
+ varTypeHashTable[key];
461
+ }
462
+ for (const key of Object.keys(varTypeImportMap)) {
463
+ mergedVarTypeTable[key] = varTypeImportMap[key];
464
+ }
450
465
  const mergedCreateTable = Object.create(scannedTables.createHashTable);
451
466
  for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'createHashTable') ?? []) {
452
467
  mergedCreateTable[key.slice(resourcePath.length + 1)] =
@@ -475,6 +490,7 @@ const transformSource = async (env) => {
475
490
  const dynamicStyleTables = {
476
491
  keyframesHashTable: mergedKeyframesTable,
477
492
  viewTransitionHashTable: mergedViewTransitionTable,
493
+ varTypeHashTable: mergedVarTypeTable,
478
494
  createThemeHashTable: mergedCreateThemeHashTable,
479
495
  createThemeObjectTable: scannedTables.createThemeObjectTable,
480
496
  createHashTable: mergedCreateTable,
@@ -595,11 +611,11 @@ const transformSource = async (env) => {
595
611
  }
596
612
  }
597
613
  if (propName && init && parser_1.t.isCallExpression(init)) {
598
- if (['create', 'createTheme', 'createStatic'].includes(propName) &&
614
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName) &&
599
615
  !topLevelDeclarators.has(node)) {
600
616
  throwCompilationError(`[plumeria] css.${propName} must be assigned to a top-level variable so its styles can be resolved across files. Move this declaration outside the function or block.`, node);
601
617
  }
602
- if (['create', 'createTheme', 'createStatic'].includes(propName)) {
618
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName)) {
603
619
  const argumentIndex = propName === 'createTheme' ? 1 : 0;
604
620
  const argument = init.arguments[argumentIndex];
605
621
  const object = argument && literalObjectArgument(argument.expression);
@@ -610,7 +626,7 @@ const transformSource = async (env) => {
610
626
  }
611
627
  if (propName === 'create' &&
612
628
  parser_1.t.isObjectExpression(init.arguments[0].expression)) {
613
- const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
629
+ const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
614
630
  (0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[0].expression, obj, spreadValues([
615
631
  mergedStaticTable,
616
632
  mergedKeyframesTable,
@@ -620,6 +636,8 @@ const transformSource = async (env) => {
620
636
  mergedCreateTable,
621
637
  mergedCreateStaticHashTable,
622
638
  scannedTables.createStaticObjectTable,
639
+ undefined,
640
+ mergedVarTypeTable,
623
641
  ], localConstNodes, getSource));
624
642
  if (obj) {
625
643
  const hashMap = {};
@@ -670,7 +688,7 @@ const transformSource = async (env) => {
670
688
  if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
671
689
  throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, @supports, @layer, and @scope.`, selectorExpr);
672
690
  }
673
- const obj = (0, parser_1.objectExpressionToObject)(init.arguments[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
691
+ const obj = (0, parser_1.objectExpressionToObject)(init.arguments[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
674
692
  (0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[1].expression, obj, spreadValues([
675
693
  mergedStaticTable,
676
694
  mergedKeyframesTable,
@@ -680,6 +698,8 @@ const transformSource = async (env) => {
680
698
  mergedCreateTable,
681
699
  mergedCreateStaticHashTable,
682
700
  scannedTables.createStaticObjectTable,
701
+ undefined,
702
+ mergedVarTypeTable,
683
703
  ], localConstNodes, getSource));
684
704
  const hash = (0, createTheme_1.themeHashOf)(selector, obj);
685
705
  if (parser_1.t.isIdentifier(node.id)) {
@@ -713,12 +733,44 @@ const transformSource = async (env) => {
713
733
  };
714
734
  }
715
735
  }
736
+ else if (propName === 'varType' &&
737
+ parser_1.t.isIdentifier(node.id) &&
738
+ parser_1.t.isObjectExpression(init.arguments[0].expression)) {
739
+ const expr = init.arguments[0].expression;
740
+ const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
741
+ (0, unresolvableValue_1.assertNoDroppedValues)(expr, obj, spreadValues([
742
+ mergedStaticTable,
743
+ mergedKeyframesTable,
744
+ mergedViewTransitionTable,
745
+ mergedCreateThemeHashTable,
746
+ scannedTables.createThemeObjectTable,
747
+ mergedCreateTable,
748
+ mergedCreateStaticHashTable,
749
+ scannedTables.createStaticObjectTable,
750
+ undefined,
751
+ mergedVarTypeTable,
752
+ ], localConstNodes, getSource));
753
+ let hash = '';
754
+ try {
755
+ hash = (0, varType_1.checkedVarTypeHash)(node.id.value, obj);
756
+ }
757
+ catch (error) {
758
+ throwCompilationError(error.message, init);
759
+ }
760
+ mergedVarTypeTable[node.id.value] = hash;
761
+ (scannedTables.varTypeObjectTable ??= {})[hash] = obj;
762
+ replacements.push({
763
+ start: init.span.start - baseByteOffset,
764
+ end: init.span.end - baseByteOffset,
765
+ content: JSON.stringify(`--pr-${hash}`),
766
+ });
767
+ }
716
768
  else if (propName === 'createStatic' &&
717
769
  parser_1.t.isObjectExpression(init.arguments[0].expression)) {
718
770
  if (parser_1.t.isIdentifier(node.id)) {
719
771
  idSpans.add(node.id.span.start);
720
772
  }
721
- const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
773
+ const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
722
774
  (0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[0].expression, obj, spreadValues([
723
775
  mergedStaticTable,
724
776
  mergedKeyframesTable,
@@ -728,6 +780,8 @@ const transformSource = async (env) => {
728
780
  mergedCreateTable,
729
781
  mergedCreateStaticHashTable,
730
782
  scannedTables.createStaticObjectTable,
783
+ undefined,
784
+ mergedVarTypeTable,
731
785
  ], localConstNodes, getSource));
732
786
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
733
787
  if (parser_1.t.isIdentifier(node.id)) {
@@ -832,7 +886,7 @@ const transformSource = async (env) => {
832
886
  }
833
887
  }
834
888
  if (propName) {
835
- if (['create', 'createTheme', 'createStatic'].includes(propName) &&
889
+ if (['create', 'createTheme', 'createStatic', 'varType'].includes(propName) &&
836
890
  !registeredStyleCalls.has(node.span.start)) {
837
891
  throwCompilationError(`[plumeria] css.${propName} must be assigned to a named top-level variable. Destructuring, assignment statements, and default-exported calls cannot be compiled.`, node);
838
892
  }
@@ -840,7 +894,7 @@ const transformSource = async (env) => {
840
894
  if (propName === 'keyframes' && args.length > 0) {
841
895
  const expr = args[0].expression;
842
896
  if (parser_1.t.isObjectExpression(expr)) {
843
- const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
897
+ const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
844
898
  (0, unresolvableValue_1.assertNoDroppedValues)(expr, obj, spreadValues([
845
899
  mergedStaticTable,
846
900
  mergedKeyframesTable,
@@ -850,6 +904,8 @@ const transformSource = async (env) => {
850
904
  mergedCreateTable,
851
905
  mergedCreateStaticHashTable,
852
906
  scannedTables.createStaticObjectTable,
907
+ undefined,
908
+ mergedVarTypeTable,
853
909
  ], localConstNodes, getSource));
854
910
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
855
911
  scannedTables.keyframesObjectTable[hash] = obj;
@@ -863,7 +919,7 @@ const transformSource = async (env) => {
863
919
  else if (propName === 'viewTransition' &&
864
920
  args.length > 0 &&
865
921
  parser_1.t.isObjectExpression(args[0].expression)) {
866
- const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
922
+ const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
867
923
  (0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
868
924
  mergedStaticTable,
869
925
  mergedKeyframesTable,
@@ -873,6 +929,8 @@ const transformSource = async (env) => {
873
929
  mergedCreateTable,
874
930
  mergedCreateStaticHashTable,
875
931
  scannedTables.createStaticObjectTable,
932
+ undefined,
933
+ mergedVarTypeTable,
876
934
  ], localConstNodes, getSource));
877
935
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
878
936
  scannedTables.viewTransitionObjectTable[hash] = obj;
@@ -894,7 +952,7 @@ const transformSource = async (env) => {
894
952
  if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
895
953
  throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, @supports, @layer, and @scope.`, selectorExpr);
896
954
  }
897
- const obj = (0, parser_1.objectExpressionToObject)(args[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
955
+ const obj = (0, parser_1.objectExpressionToObject)(args[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
898
956
  (0, unresolvableValue_1.assertNoDroppedValues)(args[1].expression, obj, spreadValues([
899
957
  mergedStaticTable,
900
958
  mergedKeyframesTable,
@@ -904,6 +962,8 @@ const transformSource = async (env) => {
904
962
  mergedCreateTable,
905
963
  mergedCreateStaticHashTable,
906
964
  scannedTables.createStaticObjectTable,
965
+ undefined,
966
+ mergedVarTypeTable,
907
967
  ], localConstNodes, getSource));
908
968
  const hash = (0, createTheme_1.themeHashOf)(selector, obj);
909
969
  scannedTables.createThemeObjectTable[hash] = obj;
@@ -914,7 +974,7 @@ const transformSource = async (env) => {
914
974
  else if (propName === 'createStatic' &&
915
975
  args.length > 0 &&
916
976
  parser_1.t.isObjectExpression(args[0].expression)) {
917
- const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
977
+ const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
918
978
  (0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
919
979
  mergedStaticTable,
920
980
  mergedKeyframesTable,
@@ -924,6 +984,8 @@ const transformSource = async (env) => {
924
984
  mergedCreateTable,
925
985
  mergedCreateStaticHashTable,
926
986
  scannedTables.createStaticObjectTable,
987
+ undefined,
988
+ mergedVarTypeTable,
927
989
  ], localConstNodes, getSource));
928
990
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
929
991
  scannedTables.createStaticObjectTable[hash] = obj;
@@ -931,7 +993,7 @@ const transformSource = async (env) => {
931
993
  else if (propName === 'create' &&
932
994
  args.length > 0 &&
933
995
  parser_1.t.isObjectExpression(args[0].expression)) {
934
- const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
996
+ const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
935
997
  const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
936
998
  scannedTables.createObjectTable[hash] = obj;
937
999
  }
@@ -1031,7 +1093,7 @@ const transformSource = async (env) => {
1031
1093
  return merged;
1032
1094
  }
1033
1095
  if (parser_1.t.isObjectExpression(expr)) {
1034
- return (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
1096
+ return (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
1035
1097
  }
1036
1098
  else if (parser_1.t.isMemberExpression(expr) &&
1037
1099
  parser_1.t.isIdentifier(expr.object) &&
@@ -1130,7 +1192,7 @@ const transformSource = async (env) => {
1130
1192
  properties: argExpr.properties.filter((prop) => prop.type === 'Identifier' ||
1131
1193
  (prop.type === 'KeyValueProperty' &&
1132
1194
  isStaticArgValue(prop.value))),
1133
- }, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable);
1195
+ }, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
1134
1196
  if (func.named) {
1135
1197
  const argExpr = callArgs[0]?.expression;
1136
1198
  if (callArgs.length > 1 ||
package/dist/types.d.ts CHANGED
@@ -9,6 +9,7 @@ export type StaticTable = Record<string, CSSValue>;
9
9
  export type KeyframesHashTable = Record<string, string>;
10
10
  export type KeyframesObjectTable = Record<string, CSSObject>;
11
11
  export type ViewTransitionHashTable = Record<string, string>;
12
+ export type VarTypeHashTable = Record<string, string>;
12
13
  export type ViewTransitionObjectTable = Record<string, CSSObject>;
13
14
  export type CreateThemeObjectTable = Record<string, CSSObject>;
14
15
  export type CreateHashTable = Record<string, string>;
@@ -38,6 +39,8 @@ export interface Tables {
38
39
  keyframesObjectTable: KeyframesObjectTable;
39
40
  viewTransitionHashTable: ViewTransitionHashTable;
40
41
  viewTransitionObjectTable: ViewTransitionObjectTable;
42
+ varTypeHashTable?: VarTypeHashTable;
43
+ varTypeObjectTable?: Record<string, CSSObject>;
41
44
  createThemeHashTable: CreateThemeHashTable;
42
45
  createThemeSelectorTable: CreateThemeSelectorTable;
43
46
  createThemeObjectTable: CreateThemeObjectTable;
@@ -0,0 +1,9 @@
1
+ export declare const varTypeHashOf: (name: string, rule: Record<string, unknown>) => string;
2
+ export declare const createVarType: (rule: Record<string, unknown>, hash: string) => {
3
+ [x: string]: {
4
+ initialValue?: {} | null | undefined;
5
+ syntax: string;
6
+ inherits: string;
7
+ };
8
+ };
9
+ export declare const checkedVarTypeHash: (name: string, rule: Record<string, unknown>) => string;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkedVarTypeHash = exports.createVarType = exports.varTypeHashOf = void 0;
4
+ const lightningcss_1 = require("lightningcss");
5
+ const zss_engine_1 = require("zss-engine");
6
+ const varTypeHashOf = (name, rule) => (0, zss_engine_1.genBase36Hash)({ _varTypeName: name, ...rule }, 1, 8);
7
+ exports.varTypeHashOf = varTypeHashOf;
8
+ const createVarType = (rule, hash) => ({
9
+ [`@property --pr-${hash}`]: {
10
+ syntax: `"${typeof rule.syntax === 'string' ? rule.syntax : '*'}"`,
11
+ inherits: rule.inherits === true ? 'true' : 'false',
12
+ ...(rule.initialValue !== undefined && {
13
+ initialValue: rule.initialValue,
14
+ }),
15
+ },
16
+ });
17
+ exports.createVarType = createVarType;
18
+ const checkedVarTypeHash = (name, rule) => {
19
+ const hash = (0, exports.varTypeHashOf)(name, rule);
20
+ const { styleSheet } = (0, zss_engine_1.transpile)((0, exports.createVarType)(rule, hash), undefined, '--global');
21
+ try {
22
+ (0, lightningcss_1.transform)({ filename: 'global.css', code: Buffer.from(styleSheet) });
23
+ return hash;
24
+ }
25
+ catch {
26
+ const syntax = typeof rule.syntax === 'string' ? `syntax "${rule.syntax}"` : 'no syntax';
27
+ const initial = typeof rule.initialValue === 'string'
28
+ ? `initialValue "${rule.initialValue}"`
29
+ : typeof rule.initialValue === 'number'
30
+ ? `initialValue ${rule.initialValue}`
31
+ : 'no initialValue';
32
+ throw new Error(`[plumeria] css.varType "${name}" is not a valid @property: ${syntax} with ${initial}. The syntax has to be a valid @property syntax, and the initial value has to match it.`);
33
+ }
34
+ };
35
+ exports.checkedVarTypeHash = checkedVarTypeHash;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumeria/utils",
3
- "version": "19.14.4",
3
+ "version": "19.15.0",
4
4
  "description": "Plumeria Utils",
5
5
  "author": "Refirst 11",
6
6
  "license": "MIT",