@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/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, @supports, @layer, and @scope.`, selectorExpr);
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
- replacements.push({
763
- start: init.span.start - baseByteOffset,
764
- end: init.span.end - baseByteOffset,
765
- content: JSON.stringify(`--pr-${hash}`),
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(`kf-${hash}`),
973
+ content: JSON.stringify(`vt-${hash}`),
916
974
  });
917
975
  }
918
976
  }
919
- else if (propName === 'viewTransition' &&
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.viewTransitionObjectTable[hash] = obj;
937
- replacements.push({
938
- start: node.span.start - baseByteOffset,
939
- end: node.span.end - baseByteOffset,
940
- content: JSON.stringify(`vt-${hash}`),
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, @supports, @layer, and @scope.`, selectorExpr);
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;
@@ -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": "19.15.0",
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": "2.10.0"
27
+ "zss-engine": "3.0.1"
28
28
  },
29
29
  "publishConfig": {
30
30
  "access": "public",