@plumeria/utils 19.15.0 → 21.0.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 +112 -13
- 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 +3 -2
- package/dist/parser.js +133 -54
- package/dist/positionTry.d.ts +4 -0
- package/dist/positionTry.js +7 -0
- package/dist/propertyPolicy.js +10 -1
- package/dist/transform.js +190 -26
- package/dist/types.d.ts +3 -0
- package/dist/viewTransition.js +4 -4
- package/package.json +2 -2
package/dist/transform.js
CHANGED
|
@@ -343,6 +343,7 @@ const transformSource = async (env) => {
|
|
|
343
343
|
const keyframesImportMap = {};
|
|
344
344
|
const viewTransitionImportMap = {};
|
|
345
345
|
const varTypeImportMap = {};
|
|
346
|
+
const positionTryImportMap = {};
|
|
346
347
|
const createImportMap = {};
|
|
347
348
|
const createFunctionImportMap = {};
|
|
348
349
|
const createThemeImportMap = {};
|
|
@@ -410,6 +411,10 @@ const transformSource = async (env) => {
|
|
|
410
411
|
varTypeImportMap[localName] =
|
|
411
412
|
scannedTables.varTypeHashTable[uniqueKey];
|
|
412
413
|
}
|
|
414
|
+
if (scannedTables.positionTryHashTable?.[uniqueKey]) {
|
|
415
|
+
positionTryImportMap[localName] =
|
|
416
|
+
scannedTables.positionTryHashTable[uniqueKey];
|
|
417
|
+
}
|
|
413
418
|
if (scannedTables.createHashTable[uniqueKey]) {
|
|
414
419
|
createImportMap[localName] =
|
|
415
420
|
scannedTables.createHashTable[uniqueKey];
|
|
@@ -462,6 +467,15 @@ const transformSource = async (env) => {
|
|
|
462
467
|
for (const key of Object.keys(varTypeImportMap)) {
|
|
463
468
|
mergedVarTypeTable[key] = varTypeImportMap[key];
|
|
464
469
|
}
|
|
470
|
+
const positionTryHashTable = scannedTables.positionTryHashTable ?? {};
|
|
471
|
+
const mergedPositionTryTable = Object.create(positionTryHashTable);
|
|
472
|
+
for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'positionTryHashTable') ?? []) {
|
|
473
|
+
mergedPositionTryTable[key.slice(resourcePath.length + 1)] =
|
|
474
|
+
positionTryHashTable[key];
|
|
475
|
+
}
|
|
476
|
+
for (const key of Object.keys(positionTryImportMap)) {
|
|
477
|
+
mergedPositionTryTable[key] = positionTryImportMap[key];
|
|
478
|
+
}
|
|
465
479
|
const mergedCreateTable = Object.create(scannedTables.createHashTable);
|
|
466
480
|
for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'createHashTable') ?? []) {
|
|
467
481
|
mergedCreateTable[key.slice(resourcePath.length + 1)] =
|
|
@@ -491,6 +505,7 @@ const transformSource = async (env) => {
|
|
|
491
505
|
keyframesHashTable: mergedKeyframesTable,
|
|
492
506
|
viewTransitionHashTable: mergedViewTransitionTable,
|
|
493
507
|
varTypeHashTable: mergedVarTypeTable,
|
|
508
|
+
positionTryHashTable: mergedPositionTryTable,
|
|
494
509
|
createThemeHashTable: mergedCreateThemeHashTable,
|
|
495
510
|
createThemeObjectTable: scannedTables.createThemeObjectTable,
|
|
496
511
|
createHashTable: mergedCreateTable,
|
|
@@ -584,6 +599,14 @@ const transformSource = async (env) => {
|
|
|
584
599
|
: null;
|
|
585
600
|
};
|
|
586
601
|
const registeredStyleCalls = new Set();
|
|
602
|
+
const dropDefinition = (init, declSpan, isExported) => {
|
|
603
|
+
const span = isExported ? init.span : declSpan;
|
|
604
|
+
replacements.push({
|
|
605
|
+
start: span.start - baseByteOffset,
|
|
606
|
+
end: span.end - baseByteOffset,
|
|
607
|
+
content: isExported ? '""' : '',
|
|
608
|
+
});
|
|
609
|
+
};
|
|
587
610
|
const registerStyle = (node, declSpan, isExported) => {
|
|
588
611
|
let propName;
|
|
589
612
|
const init = unwrapStyleExpression(node.init);
|
|
@@ -626,7 +649,7 @@ const transformSource = async (env) => {
|
|
|
626
649
|
}
|
|
627
650
|
if (propName === 'create' &&
|
|
628
651
|
parser_1.t.isObjectExpression(init.arguments[0].expression)) {
|
|
629
|
-
const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
652
|
+
const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
630
653
|
(0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[0].expression, obj, spreadValues([
|
|
631
654
|
mergedStaticTable,
|
|
632
655
|
mergedKeyframesTable,
|
|
@@ -638,6 +661,7 @@ const transformSource = async (env) => {
|
|
|
638
661
|
scannedTables.createStaticObjectTable,
|
|
639
662
|
undefined,
|
|
640
663
|
mergedVarTypeTable,
|
|
664
|
+
mergedPositionTryTable,
|
|
641
665
|
], localConstNodes, getSource));
|
|
642
666
|
if (obj) {
|
|
643
667
|
const hashMap = {};
|
|
@@ -686,9 +710,9 @@ const transformSource = async (env) => {
|
|
|
686
710
|
`Pass a string literal such as ".dark", or a name this file declares as one.`, selectorExpr);
|
|
687
711
|
}
|
|
688
712
|
if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
|
|
689
|
-
throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container,
|
|
713
|
+
throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, and @supports.`, selectorExpr);
|
|
690
714
|
}
|
|
691
|
-
const obj = (0, parser_1.objectExpressionToObject)(init.arguments[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
715
|
+
const obj = (0, parser_1.objectExpressionToObject)(init.arguments[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
692
716
|
(0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[1].expression, obj, spreadValues([
|
|
693
717
|
mergedStaticTable,
|
|
694
718
|
mergedKeyframesTable,
|
|
@@ -700,6 +724,7 @@ const transformSource = async (env) => {
|
|
|
700
724
|
scannedTables.createStaticObjectTable,
|
|
701
725
|
undefined,
|
|
702
726
|
mergedVarTypeTable,
|
|
727
|
+
mergedPositionTryTable,
|
|
703
728
|
], localConstNodes, getSource));
|
|
704
729
|
const hash = (0, createTheme_1.themeHashOf)(selector, obj);
|
|
705
730
|
if (parser_1.t.isIdentifier(node.id)) {
|
|
@@ -737,7 +762,7 @@ const transformSource = async (env) => {
|
|
|
737
762
|
parser_1.t.isIdentifier(node.id) &&
|
|
738
763
|
parser_1.t.isObjectExpression(init.arguments[0].expression)) {
|
|
739
764
|
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);
|
|
765
|
+
const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
741
766
|
(0, unresolvableValue_1.assertNoDroppedValues)(expr, obj, spreadValues([
|
|
742
767
|
mergedStaticTable,
|
|
743
768
|
mergedKeyframesTable,
|
|
@@ -749,6 +774,7 @@ const transformSource = async (env) => {
|
|
|
749
774
|
scannedTables.createStaticObjectTable,
|
|
750
775
|
undefined,
|
|
751
776
|
mergedVarTypeTable,
|
|
777
|
+
mergedPositionTryTable,
|
|
752
778
|
], localConstNodes, getSource));
|
|
753
779
|
let hash = '';
|
|
754
780
|
try {
|
|
@@ -759,18 +785,19 @@ const transformSource = async (env) => {
|
|
|
759
785
|
}
|
|
760
786
|
mergedVarTypeTable[node.id.value] = hash;
|
|
761
787
|
(scannedTables.varTypeObjectTable ??= {})[hash] = obj;
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
788
|
+
dropDefinition(init, declSpan, isExported);
|
|
789
|
+
}
|
|
790
|
+
else if (['keyframes', 'viewTransitionClass', 'positionTry'].includes(propName) &&
|
|
791
|
+
parser_1.t.isObjectExpression(init.arguments[0].expression)) {
|
|
792
|
+
registeredStyleCalls.add(init.span.start);
|
|
793
|
+
dropDefinition(init, declSpan, isExported);
|
|
767
794
|
}
|
|
768
795
|
else if (propName === 'createStatic' &&
|
|
769
796
|
parser_1.t.isObjectExpression(init.arguments[0].expression)) {
|
|
770
797
|
if (parser_1.t.isIdentifier(node.id)) {
|
|
771
798
|
idSpans.add(node.id.span.start);
|
|
772
799
|
}
|
|
773
|
-
const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
800
|
+
const obj = (0, parser_1.objectExpressionToObject)(init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
774
801
|
(0, unresolvableValue_1.assertNoDroppedValues)(init.arguments[0].expression, obj, spreadValues([
|
|
775
802
|
mergedStaticTable,
|
|
776
803
|
mergedKeyframesTable,
|
|
@@ -782,6 +809,7 @@ const transformSource = async (env) => {
|
|
|
782
809
|
scannedTables.createStaticObjectTable,
|
|
783
810
|
undefined,
|
|
784
811
|
mergedVarTypeTable,
|
|
812
|
+
mergedPositionTryTable,
|
|
785
813
|
], localConstNodes, getSource));
|
|
786
814
|
const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
|
|
787
815
|
if (parser_1.t.isIdentifier(node.id)) {
|
|
@@ -894,7 +922,7 @@ const transformSource = async (env) => {
|
|
|
894
922
|
if (propName === 'keyframes' && args.length > 0) {
|
|
895
923
|
const expr = args[0].expression;
|
|
896
924
|
if (parser_1.t.isObjectExpression(expr)) {
|
|
897
|
-
const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
925
|
+
const obj = (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
898
926
|
(0, unresolvableValue_1.assertNoDroppedValues)(expr, obj, spreadValues([
|
|
899
927
|
mergedStaticTable,
|
|
900
928
|
mergedKeyframesTable,
|
|
@@ -906,20 +934,50 @@ const transformSource = async (env) => {
|
|
|
906
934
|
scannedTables.createStaticObjectTable,
|
|
907
935
|
undefined,
|
|
908
936
|
mergedVarTypeTable,
|
|
937
|
+
mergedPositionTryTable,
|
|
909
938
|
], localConstNodes, getSource));
|
|
910
939
|
const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
|
|
911
940
|
scannedTables.keyframesObjectTable[hash] = obj;
|
|
941
|
+
if (!registeredStyleCalls.has(node.span.start)) {
|
|
942
|
+
replacements.push({
|
|
943
|
+
start: node.span.start - baseByteOffset,
|
|
944
|
+
end: node.span.end - baseByteOffset,
|
|
945
|
+
content: JSON.stringify(`kf-${hash}`),
|
|
946
|
+
});
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
else if (propName === 'viewTransitionClass' &&
|
|
951
|
+
args.length > 0 &&
|
|
952
|
+
parser_1.t.isObjectExpression(args[0].expression)) {
|
|
953
|
+
const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
954
|
+
(0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
|
|
955
|
+
mergedStaticTable,
|
|
956
|
+
mergedKeyframesTable,
|
|
957
|
+
mergedViewTransitionTable,
|
|
958
|
+
mergedCreateThemeHashTable,
|
|
959
|
+
scannedTables.createThemeObjectTable,
|
|
960
|
+
mergedCreateTable,
|
|
961
|
+
mergedCreateStaticHashTable,
|
|
962
|
+
scannedTables.createStaticObjectTable,
|
|
963
|
+
undefined,
|
|
964
|
+
mergedVarTypeTable,
|
|
965
|
+
mergedPositionTryTable,
|
|
966
|
+
], localConstNodes, getSource));
|
|
967
|
+
const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
|
|
968
|
+
scannedTables.viewTransitionObjectTable[hash] = obj;
|
|
969
|
+
if (!registeredStyleCalls.has(node.span.start)) {
|
|
912
970
|
replacements.push({
|
|
913
971
|
start: node.span.start - baseByteOffset,
|
|
914
972
|
end: node.span.end - baseByteOffset,
|
|
915
|
-
content: JSON.stringify(`
|
|
973
|
+
content: JSON.stringify(`vt-${hash}`),
|
|
916
974
|
});
|
|
917
975
|
}
|
|
918
976
|
}
|
|
919
|
-
else if (propName === '
|
|
977
|
+
else if (propName === 'positionTry' &&
|
|
920
978
|
args.length > 0 &&
|
|
921
979
|
parser_1.t.isObjectExpression(args[0].expression)) {
|
|
922
|
-
const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
980
|
+
const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
923
981
|
(0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
|
|
924
982
|
mergedStaticTable,
|
|
925
983
|
mergedKeyframesTable,
|
|
@@ -931,14 +989,17 @@ const transformSource = async (env) => {
|
|
|
931
989
|
scannedTables.createStaticObjectTable,
|
|
932
990
|
undefined,
|
|
933
991
|
mergedVarTypeTable,
|
|
992
|
+
mergedPositionTryTable,
|
|
934
993
|
], localConstNodes, getSource));
|
|
935
994
|
const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
|
|
936
|
-
scannedTables.
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
995
|
+
(scannedTables.positionTryObjectTable ??= {})[hash] = obj;
|
|
996
|
+
if (!registeredStyleCalls.has(node.span.start)) {
|
|
997
|
+
replacements.push({
|
|
998
|
+
start: node.span.start - baseByteOffset,
|
|
999
|
+
end: node.span.end - baseByteOffset,
|
|
1000
|
+
content: JSON.stringify(`--pt-${hash}`),
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
942
1003
|
}
|
|
943
1004
|
else if (propName === 'createTheme' &&
|
|
944
1005
|
args.length >= 2 &&
|
|
@@ -950,9 +1011,9 @@ const transformSource = async (env) => {
|
|
|
950
1011
|
`Pass a string literal such as ".dark", or a name this file declares as one.`, selectorExpr);
|
|
951
1012
|
}
|
|
952
1013
|
if (selector.startsWith('@') && !(0, zss_engine_1.isAtRule)(selector)) {
|
|
953
|
-
throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container,
|
|
1014
|
+
throwCompilationError(`[plumeria] Unsupported at-rule: "${selector}". createTheme only supports nesting at-rules such as @media, @container, and @supports.`, selectorExpr);
|
|
954
1015
|
}
|
|
955
|
-
const obj = (0, parser_1.objectExpressionToObject)(args[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
1016
|
+
const obj = (0, parser_1.objectExpressionToObject)(args[1].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
956
1017
|
(0, unresolvableValue_1.assertNoDroppedValues)(args[1].expression, obj, spreadValues([
|
|
957
1018
|
mergedStaticTable,
|
|
958
1019
|
mergedKeyframesTable,
|
|
@@ -964,6 +1025,7 @@ const transformSource = async (env) => {
|
|
|
964
1025
|
scannedTables.createStaticObjectTable,
|
|
965
1026
|
undefined,
|
|
966
1027
|
mergedVarTypeTable,
|
|
1028
|
+
mergedPositionTryTable,
|
|
967
1029
|
], localConstNodes, getSource));
|
|
968
1030
|
const hash = (0, createTheme_1.themeHashOf)(selector, obj);
|
|
969
1031
|
scannedTables.createThemeObjectTable[hash] = obj;
|
|
@@ -974,7 +1036,7 @@ const transformSource = async (env) => {
|
|
|
974
1036
|
else if (propName === 'createStatic' &&
|
|
975
1037
|
args.length > 0 &&
|
|
976
1038
|
parser_1.t.isObjectExpression(args[0].expression)) {
|
|
977
|
-
const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
1039
|
+
const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
978
1040
|
(0, unresolvableValue_1.assertNoDroppedValues)(args[0].expression, obj, spreadValues([
|
|
979
1041
|
mergedStaticTable,
|
|
980
1042
|
mergedKeyframesTable,
|
|
@@ -986,6 +1048,7 @@ const transformSource = async (env) => {
|
|
|
986
1048
|
scannedTables.createStaticObjectTable,
|
|
987
1049
|
undefined,
|
|
988
1050
|
mergedVarTypeTable,
|
|
1051
|
+
mergedPositionTryTable,
|
|
989
1052
|
], localConstNodes, getSource));
|
|
990
1053
|
const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
|
|
991
1054
|
scannedTables.createStaticObjectTable[hash] = obj;
|
|
@@ -993,7 +1056,7 @@ const transformSource = async (env) => {
|
|
|
993
1056
|
else if (propName === 'create' &&
|
|
994
1057
|
args.length > 0 &&
|
|
995
1058
|
parser_1.t.isObjectExpression(args[0].expression)) {
|
|
996
|
-
const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
1059
|
+
const obj = (0, parser_1.objectExpressionToObject)(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
997
1060
|
const hash = (0, zss_engine_1.genBase36Hash)(obj, 1, 8);
|
|
998
1061
|
scannedTables.createObjectTable[hash] = obj;
|
|
999
1062
|
}
|
|
@@ -1093,7 +1156,7 @@ const transformSource = async (env) => {
|
|
|
1093
1156
|
return merged;
|
|
1094
1157
|
}
|
|
1095
1158
|
if (parser_1.t.isObjectExpression(expr)) {
|
|
1096
|
-
return (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
1159
|
+
return (0, parser_1.objectExpressionToObject)(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
1097
1160
|
}
|
|
1098
1161
|
else if (parser_1.t.isMemberExpression(expr) &&
|
|
1099
1162
|
parser_1.t.isIdentifier(expr.object) &&
|
|
@@ -1192,7 +1255,7 @@ const transformSource = async (env) => {
|
|
|
1192
1255
|
properties: argExpr.properties.filter((prop) => prop.type === 'Identifier' ||
|
|
1193
1256
|
(prop.type === 'KeyValueProperty' &&
|
|
1194
1257
|
isStaticArgValue(prop.value))),
|
|
1195
|
-
}, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable);
|
|
1258
|
+
}, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, undefined, mergedVarTypeTable, mergedPositionTryTable);
|
|
1196
1259
|
if (func.named) {
|
|
1197
1260
|
const argExpr = callArgs[0]?.expression;
|
|
1198
1261
|
if (callArgs.length > 1 ||
|
|
@@ -2017,6 +2080,70 @@ const transformSource = async (env) => {
|
|
|
2017
2080
|
propVarSpreads,
|
|
2018
2081
|
};
|
|
2019
2082
|
};
|
|
2083
|
+
const definitionTables = [
|
|
2084
|
+
'keyframesHashTable',
|
|
2085
|
+
'viewTransitionHashTable',
|
|
2086
|
+
'positionTryHashTable',
|
|
2087
|
+
'varTypeHashTable',
|
|
2088
|
+
'createThemeHashTable',
|
|
2089
|
+
'createHashTable',
|
|
2090
|
+
'createStaticHashTable',
|
|
2091
|
+
];
|
|
2092
|
+
const namespacePath = (name) => {
|
|
2093
|
+
const namespaceImport = localImports[name];
|
|
2094
|
+
return namespaceImport?.importedName === '*'
|
|
2095
|
+
? namespaceImport.actualPath
|
|
2096
|
+
: undefined;
|
|
2097
|
+
};
|
|
2098
|
+
const definitionKey = (actualPath, propName) => {
|
|
2099
|
+
const resolved = (0, parser_1.resolveExport)(actualPath, propName);
|
|
2100
|
+
return resolved
|
|
2101
|
+
? `${resolved.filePath}-${resolved.localName}`
|
|
2102
|
+
: `${actualPath}-${propName}`;
|
|
2103
|
+
};
|
|
2104
|
+
const isDefinitionKey = (uniqueKey) => definitionTables.some((table) => Boolean(scannedTables[table]?.[uniqueKey]));
|
|
2105
|
+
const namespaceReads = new Set();
|
|
2106
|
+
const staticKey = (expr) => expr.type === 'StringLiteral'
|
|
2107
|
+
? expr.value
|
|
2108
|
+
: expr.type === 'TemplateLiteral' && expr.expressions.length === 0
|
|
2109
|
+
? (expr.quasis[0]?.cooked ?? undefined)
|
|
2110
|
+
: undefined;
|
|
2111
|
+
const patternKey = (key) => key.type === 'Identifier' || key.type === 'StringLiteral'
|
|
2112
|
+
? key.value
|
|
2113
|
+
: key.type === 'Computed'
|
|
2114
|
+
? staticKey(key.expression)
|
|
2115
|
+
: undefined;
|
|
2116
|
+
const exportedDefinition = (actualPath) => (0, parser_1.exportNames)(actualPath).find((exportName) => isDefinitionKey(definitionKey(actualPath, exportName)));
|
|
2117
|
+
const namespaceKeys = (namespace, actualPath, keys) => {
|
|
2118
|
+
for (const [key, node] of keys) {
|
|
2119
|
+
if (key !== undefined) {
|
|
2120
|
+
if (isDefinitionKey(definitionKey(actualPath, key)))
|
|
2121
|
+
throwNamespaceRead(namespace, key, node);
|
|
2122
|
+
continue;
|
|
2123
|
+
}
|
|
2124
|
+
const name = exportedDefinition(actualPath);
|
|
2125
|
+
if (name)
|
|
2126
|
+
throwNamespaceRead(namespace, name, node);
|
|
2127
|
+
}
|
|
2128
|
+
};
|
|
2129
|
+
const namespacePattern = (pattern, init) => {
|
|
2130
|
+
if (!parser_1.t.isIdentifier(init) ||
|
|
2131
|
+
!referenceIdents.references.has(init.span.start))
|
|
2132
|
+
return;
|
|
2133
|
+
const actualPath = namespacePath(init.value);
|
|
2134
|
+
if (!actualPath)
|
|
2135
|
+
return;
|
|
2136
|
+
namespaceKeys(init.value, actualPath, pattern.properties.map((prop) => [
|
|
2137
|
+
prop.type === 'RestElement'
|
|
2138
|
+
? undefined
|
|
2139
|
+
: prop.type === 'AssignmentPatternProperty'
|
|
2140
|
+
? prop.key.value
|
|
2141
|
+
: patternKey(prop.key),
|
|
2142
|
+
prop.type === 'KeyValuePatternProperty' ? prop.key : prop,
|
|
2143
|
+
]));
|
|
2144
|
+
namespaceReads.add(init.span.start);
|
|
2145
|
+
};
|
|
2146
|
+
const throwNamespaceRead = (namespace, propName, node) => throwCompilationError(`[plumeria] ${namespace}.${propName} reads a Plumeria definition through a namespace import, which cannot be compiled. Import it by name: import { ${propName} } from '...'.`, node);
|
|
2020
2147
|
(0, parser_1.traverse)(ast, {
|
|
2021
2148
|
JSXOpeningElement({ node }) {
|
|
2022
2149
|
const owner = {
|
|
@@ -2027,9 +2154,29 @@ const transformSource = async (env) => {
|
|
|
2027
2154
|
if (attribute.type === 'JSXAttribute')
|
|
2028
2155
|
jsxAttributeOwnerMap.set(attribute.span.start, owner);
|
|
2029
2156
|
},
|
|
2157
|
+
VariableDeclarator({ node }) {
|
|
2158
|
+
if (node.id.type === 'ObjectPattern' && node.init)
|
|
2159
|
+
namespacePattern(node.id, node.init);
|
|
2160
|
+
},
|
|
2161
|
+
AssignmentExpression({ node }) {
|
|
2162
|
+
if (node.left.type === 'ObjectPattern')
|
|
2163
|
+
namespacePattern(node.left, node.right);
|
|
2164
|
+
},
|
|
2030
2165
|
MemberExpression({ node }) {
|
|
2031
2166
|
if (!isVisibleReference(node))
|
|
2032
2167
|
return;
|
|
2168
|
+
if (parser_1.t.isIdentifier(node.object)) {
|
|
2169
|
+
const actualPath = namespacePath(node.object.value);
|
|
2170
|
+
const propName = parser_1.t.isIdentifier(node.property)
|
|
2171
|
+
? node.property.value
|
|
2172
|
+
: node.property.type === 'Computed'
|
|
2173
|
+
? staticKey(node.property.expression)
|
|
2174
|
+
: undefined;
|
|
2175
|
+
if (actualPath && propName !== undefined) {
|
|
2176
|
+
namespaceKeys(node.object.value, actualPath, [[propName, node]]);
|
|
2177
|
+
namespaceReads.add(node.object.span.start);
|
|
2178
|
+
}
|
|
2179
|
+
}
|
|
2033
2180
|
if (parser_1.t.isIdentifier(node.object) &&
|
|
2034
2181
|
(parser_1.t.isIdentifier(node.property) || node.property.type === 'Computed')) {
|
|
2035
2182
|
const varName = node.object.value;
|
|
@@ -2144,6 +2291,13 @@ const transformSource = async (env) => {
|
|
|
2144
2291
|
return;
|
|
2145
2292
|
if (!referenceIdents.references.has(node.span.start))
|
|
2146
2293
|
return;
|
|
2294
|
+
if (!namespaceReads.has(node.span.start)) {
|
|
2295
|
+
const actualPath = namespacePath(node.value);
|
|
2296
|
+
const name = actualPath && exportedDefinition(actualPath);
|
|
2297
|
+
if (name) {
|
|
2298
|
+
throwCompilationError(`[plumeria] ${node.value} is used as a whole, but it holds ${node.value}.${name}, a Plumeria definition that cannot be compiled through a namespace import. Import the names it needs instead: import { ${name} } from '...'.`, node);
|
|
2299
|
+
}
|
|
2300
|
+
}
|
|
2147
2301
|
const prefix = referenceIdents.shorthands.has(node.span.start)
|
|
2148
2302
|
? `${node.value}: `
|
|
2149
2303
|
: '';
|
|
@@ -2154,6 +2308,16 @@ const transformSource = async (env) => {
|
|
|
2154
2308
|
content: `${prefix}${content}`,
|
|
2155
2309
|
});
|
|
2156
2310
|
};
|
|
2311
|
+
const definition = [
|
|
2312
|
+
['kf-', mergedKeyframesTable[node.value]],
|
|
2313
|
+
['vt-', mergedViewTransitionTable[node.value]],
|
|
2314
|
+
['--pt-', mergedPositionTryTable[node.value]],
|
|
2315
|
+
['--pr-', mergedVarTypeTable[node.value]],
|
|
2316
|
+
].find(([, hash]) => typeof hash === 'string' && hash);
|
|
2317
|
+
if (definition) {
|
|
2318
|
+
pushReplacement(JSON.stringify(`${definition[0]}${definition[1]}`));
|
|
2319
|
+
return;
|
|
2320
|
+
}
|
|
2157
2321
|
const styleInfo = localCreateStyles[node.value];
|
|
2158
2322
|
if (styleInfo) {
|
|
2159
2323
|
pushReplacement(`(${JSON.stringify(styleInfo.hashMap)})`);
|
package/dist/types.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type KeyframesHashTable = Record<string, string>;
|
|
|
10
10
|
export type KeyframesObjectTable = Record<string, CSSObject>;
|
|
11
11
|
export type ViewTransitionHashTable = Record<string, string>;
|
|
12
12
|
export type VarTypeHashTable = Record<string, string>;
|
|
13
|
+
export type PositionTryHashTable = Record<string, string>;
|
|
13
14
|
export type ViewTransitionObjectTable = Record<string, CSSObject>;
|
|
14
15
|
export type CreateThemeObjectTable = Record<string, CSSObject>;
|
|
15
16
|
export type CreateHashTable = Record<string, string>;
|
|
@@ -41,6 +42,8 @@ export interface Tables {
|
|
|
41
42
|
viewTransitionObjectTable: ViewTransitionObjectTable;
|
|
42
43
|
varTypeHashTable?: VarTypeHashTable;
|
|
43
44
|
varTypeObjectTable?: Record<string, CSSObject>;
|
|
45
|
+
positionTryHashTable?: PositionTryHashTable;
|
|
46
|
+
positionTryObjectTable?: Record<string, CSSObject>;
|
|
44
47
|
createThemeHashTable: CreateThemeHashTable;
|
|
45
48
|
createThemeSelectorTable: CreateThemeSelectorTable;
|
|
46
49
|
createThemeObjectTable: CreateThemeObjectTable;
|
package/dist/viewTransition.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createViewTransition = void 0;
|
|
4
4
|
const createViewTransition = (rule, hash) => ({
|
|
5
|
-
[`::view-transition-group(vt-${hash})`]: rule.group,
|
|
6
|
-
[`::view-transition-image-pair(vt-${hash})`]: rule.imagePair,
|
|
7
|
-
[`::view-transition-old(vt-${hash})`]: rule.old,
|
|
8
|
-
[`::view-transition-new(vt-${hash})`]: rule.new,
|
|
5
|
+
[`::view-transition-group(*.vt-${hash})`]: rule.group,
|
|
6
|
+
[`::view-transition-image-pair(*.vt-${hash})`]: rule.imagePair,
|
|
7
|
+
[`::view-transition-old(*.vt-${hash})`]: rule.old,
|
|
8
|
+
[`::view-transition-new(*.vt-${hash})`]: rule.new,
|
|
9
9
|
});
|
|
10
10
|
exports.createViewTransition = createViewTransition;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plumeria/utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "21.0.0",
|
|
4
4
|
"description": "Plumeria Utils",
|
|
5
5
|
"author": "Refirst 11",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@swc/core": "1.15.47",
|
|
25
25
|
"lightningcss": "^1.32.0",
|
|
26
26
|
"postcss": "8.5.26",
|
|
27
|
-
"zss-engine": "
|
|
27
|
+
"zss-engine": "3.0.1"
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "public",
|