@plumeria/utils 19.14.3 → 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/LICENSE +1 -1
- package/dist/compile.js +30 -10
- package/dist/dynamicKey.d.ts +2 -1
- package/dist/dynamicKey.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/parser.d.ts +2 -2
- package/dist/parser.js +94 -33
- package/dist/transform.js +75 -13
- package/dist/types.d.ts +3 -0
- package/dist/varType.d.ts +9 -0
- package/dist/varType.js +35 -0
- package/package.json +1 -1
package/LICENSE
CHANGED
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}`;
|
package/dist/dynamicKey.d.ts
CHANGED
|
@@ -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;
|
package/dist/dynamicKey.js
CHANGED
|
@@ -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;
|
package/dist/varType.js
ADDED
|
@@ -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;
|