@plumeria/vite-plugin 6.2.0 → 6.3.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.
Files changed (2) hide show
  1. package/dist/index.js +170 -56
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -82,6 +82,8 @@ export function plumeria(options = {}) {
82
82
  const localConsts = collectLocalConsts(ast);
83
83
  const resourcePath = id;
84
84
  const importMap = {};
85
+ const createThemeImportMap = {};
86
+ const createStaticImportMap = {};
85
87
  const plumeriaAliases = {};
86
88
  traverse(ast, {
87
89
  ImportDeclaration({ node }) {
@@ -122,9 +124,6 @@ export function plumeria(options = {}) {
122
124
  importMap[localName] =
123
125
  scannedTables.viewTransitionHashTable[uniqueKey];
124
126
  }
125
- if (scannedTables.themeTable[uniqueKey]) {
126
- importMap[localName] = scannedTables.themeTable[uniqueKey];
127
- }
128
127
  if (scannedTables.createHashTable[uniqueKey]) {
129
128
  importMap[localName] =
130
129
  scannedTables.createHashTable[uniqueKey];
@@ -133,6 +132,14 @@ export function plumeria(options = {}) {
133
132
  importMap[localName] =
134
133
  scannedTables.variantsHashTable[uniqueKey];
135
134
  }
135
+ if (scannedTables.createThemeHashTable[uniqueKey]) {
136
+ createThemeImportMap[localName] =
137
+ scannedTables.createThemeHashTable[uniqueKey];
138
+ }
139
+ if (scannedTables.createStaticHashTable[uniqueKey]) {
140
+ createStaticImportMap[localName] =
141
+ scannedTables.createStaticHashTable[uniqueKey];
142
+ }
136
143
  }
137
144
  });
138
145
  }
@@ -163,13 +170,6 @@ export function plumeria(options = {}) {
163
170
  for (const key of Object.keys(importMap)) {
164
171
  mergedViewTransitionTable[key] = importMap[key];
165
172
  }
166
- const mergedThemeTable = {};
167
- for (const key of Object.keys(scannedTables.themeTable)) {
168
- mergedThemeTable[key] = scannedTables.themeTable[key];
169
- }
170
- for (const key of Object.keys(importMap)) {
171
- mergedThemeTable[key] = importMap[key];
172
- }
173
173
  const mergedCreateTable = {};
174
174
  for (const key of Object.keys(scannedTables.createHashTable)) {
175
175
  mergedCreateTable[key] = scannedTables.createHashTable[key];
@@ -184,6 +184,32 @@ export function plumeria(options = {}) {
184
184
  for (const key of Object.keys(importMap)) {
185
185
  mergedVariantsTable[key] = importMap[key];
186
186
  }
187
+ const mergedCreateThemeHashTable = {};
188
+ for (const key of Object.keys(scannedTables.createThemeHashTable)) {
189
+ mergedCreateThemeHashTable[key] =
190
+ scannedTables.createThemeHashTable[key];
191
+ if (key.startsWith(`${resourcePath}-`)) {
192
+ const varName = key.slice(resourcePath.length + 1);
193
+ mergedCreateThemeHashTable[varName] =
194
+ scannedTables.createThemeHashTable[key];
195
+ }
196
+ }
197
+ for (const key of Object.keys(createThemeImportMap)) {
198
+ mergedCreateThemeHashTable[key] = createThemeImportMap[key];
199
+ }
200
+ const mergedCreateStaticHashTable = {};
201
+ for (const key of Object.keys(scannedTables.createStaticHashTable)) {
202
+ mergedCreateStaticHashTable[key] =
203
+ scannedTables.createStaticHashTable[key];
204
+ if (key.startsWith(`${resourcePath}-`)) {
205
+ const varName = key.slice(resourcePath.length + 1);
206
+ mergedCreateStaticHashTable[varName] =
207
+ scannedTables.createStaticHashTable[key];
208
+ }
209
+ }
210
+ for (const key of Object.keys(createStaticImportMap)) {
211
+ mergedCreateStaticHashTable[key] = createStaticImportMap[key];
212
+ }
187
213
  const localCreateStyles = {};
188
214
  const replacements = [];
189
215
  const extractedSheets = [];
@@ -238,7 +264,7 @@ export function plumeria(options = {}) {
238
264
  if (propName) {
239
265
  if (propName === 'create' &&
240
266
  t.isObjectExpression(node.init.arguments[0].expression)) {
241
- const obj = objectExpressionToObject(node.init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedThemeTable, mergedCreateTable, mergedVariantsTable);
267
+ const obj = objectExpressionToObject(node.init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable);
242
268
  if (obj) {
243
269
  const hashMap = {};
244
270
  Object.entries(obj).forEach(([key, style]) => {
@@ -271,28 +297,12 @@ export function plumeria(options = {}) {
271
297
  };
272
298
  }
273
299
  }
274
- else if ((propName === 'createTheme' || propName === 'createStatic') &&
275
- (t.isObjectExpression(node.init.arguments[0].expression) ||
276
- t.isStringLiteral(node.init.arguments[0].expression))) {
277
- localCreateStyles[node.id.value] = {
278
- name: node.id.value,
279
- type: 'constant',
280
- obj: {},
281
- hashMap: {},
282
- isExported,
283
- initSpan: {
284
- start: node.init.span.start - ast.span.start,
285
- end: node.init.span.end - ast.span.start,
286
- },
287
- declSpan: {
288
- start: declSpan.start - ast.span.start,
289
- end: declSpan.end - ast.span.start,
290
- },
291
- };
292
- }
293
300
  else if (propName === 'variants' &&
294
301
  t.isObjectExpression(node.init.arguments[0].expression)) {
295
- const obj = objectExpressionToObject(node.init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedThemeTable, mergedCreateTable, mergedVariantsTable, (name) => {
302
+ if (t.isIdentifier(node.id)) {
303
+ idSpans.add(node.id.span.start);
304
+ }
305
+ const obj = objectExpressionToObject(node.init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable, (name) => {
296
306
  if (localCreateStyles[name]) {
297
307
  return localCreateStyles[name].obj;
298
308
  }
@@ -320,6 +330,32 @@ export function plumeria(options = {}) {
320
330
  },
321
331
  };
322
332
  }
333
+ else if (propName === 'createTheme' &&
334
+ t.isObjectExpression(node.init.arguments[0].expression)) {
335
+ if (t.isIdentifier(node.id)) {
336
+ idSpans.add(node.id.span.start);
337
+ }
338
+ const obj = objectExpressionToObject(node.init.arguments[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable);
339
+ const hash = genBase36Hash(obj, 1, 8);
340
+ const uniqueKey = `${resourcePath}-${node.id.value}`;
341
+ scannedTables.createThemeHashTable[uniqueKey] = hash;
342
+ scannedTables.createThemeObjectTable[hash] = obj;
343
+ localCreateStyles[node.id.value] = {
344
+ name: node.id.value,
345
+ type: 'constant',
346
+ obj,
347
+ hashMap: scannedTables.createAtomicMapTable[hash],
348
+ isExported,
349
+ initSpan: {
350
+ start: node.init.span.start - ast.span.start,
351
+ end: node.init.span.end - ast.span.start,
352
+ },
353
+ declSpan: {
354
+ start: declSpan.start - ast.span.start,
355
+ end: declSpan.end - ast.span.start,
356
+ },
357
+ };
358
+ }
323
359
  }
324
360
  };
325
361
  traverse(ast, {
@@ -377,7 +413,7 @@ export function plumeria(options = {}) {
377
413
  if (propName === 'keyframes' &&
378
414
  args.length > 0 &&
379
415
  t.isObjectExpression(args[0].expression)) {
380
- const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedThemeTable, mergedCreateTable, mergedVariantsTable);
416
+ const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable);
381
417
  const hash = genBase36Hash(obj, 1, 8);
382
418
  scannedTables.keyframesObjectTable[hash] = obj;
383
419
  replacements.push({
@@ -389,10 +425,9 @@ export function plumeria(options = {}) {
389
425
  else if (propName === 'viewTransition' &&
390
426
  args.length > 0 &&
391
427
  t.isObjectExpression(args[0].expression)) {
392
- const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedThemeTable, mergedCreateTable, mergedVariantsTable);
428
+ const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable);
393
429
  const hash = genBase36Hash(obj, 1, 8);
394
430
  scannedTables.viewTransitionObjectTable[hash] = obj;
395
- extractOndemandStyles(obj, extractedSheets, scannedTables);
396
431
  extractOndemandStyles({ vt: `vt-${hash}` }, extractedSheets, scannedTables);
397
432
  replacements.push({
398
433
  start: node.span.start - ast.span.start,
@@ -400,17 +435,28 @@ export function plumeria(options = {}) {
400
435
  content: JSON.stringify(`vt-${hash}`),
401
436
  });
402
437
  }
403
- else if (propName === 'createTheme' &&
438
+ else if ((propName === 'createTheme' || propName === 'createStatic') &&
404
439
  args.length > 0 &&
405
440
  t.isObjectExpression(args[0].expression)) {
406
- const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedThemeTable, mergedCreateTable, mergedVariantsTable);
441
+ const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable);
407
442
  const hash = genBase36Hash(obj, 1, 8);
408
- scannedTables.createThemeObjectTable[hash] = obj;
443
+ if (propName === 'createTheme') {
444
+ scannedTables.createThemeObjectTable[hash] = obj;
445
+ }
446
+ else {
447
+ scannedTables.createStaticObjectTable[hash] = obj;
448
+ }
449
+ const prefix = propName === 'createTheme' ? 'tm-' : 'st-';
450
+ replacements.push({
451
+ start: node.span.start - ast.span.start,
452
+ end: node.span.end - ast.span.start,
453
+ content: JSON.stringify(`${prefix}${hash}`),
454
+ });
409
455
  }
410
456
  else if (propName === 'create' &&
411
457
  args.length > 0 &&
412
458
  t.isObjectExpression(args[0].expression)) {
413
- const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedThemeTable, mergedCreateTable, mergedVariantsTable);
459
+ const obj = objectExpressionToObject(args[0].expression, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable);
414
460
  const hash = genBase36Hash(obj, 1, 8);
415
461
  scannedTables.createObjectTable[hash] = obj;
416
462
  Object.entries(obj).forEach(([key, style]) => {
@@ -429,7 +475,7 @@ export function plumeria(options = {}) {
429
475
  if (t.isIdentifier(node.object) && t.isIdentifier(node.property)) {
430
476
  const varName = node.object.value;
431
477
  const propName = node.property.value;
432
- const uniqueKey = `${id}-${varName}`;
478
+ const uniqueKey = `${resourcePath}-${varName}`;
433
479
  let hash = scannedTables.createHashTable[uniqueKey];
434
480
  if (!hash) {
435
481
  hash = mergedCreateTable[varName];
@@ -447,6 +493,34 @@ export function plumeria(options = {}) {
447
493
  });
448
494
  }
449
495
  }
496
+ let themeHash = scannedTables.createThemeHashTable[uniqueKey];
497
+ if (!themeHash) {
498
+ themeHash = mergedCreateThemeHashTable[varName];
499
+ }
500
+ if (themeHash) {
501
+ const atomicMap = scannedTables.createAtomicMapTable[themeHash];
502
+ if (atomicMap && atomicMap && atomicMap[propName]) {
503
+ replacements.push({
504
+ start: node.span.start - ast.span.start,
505
+ end: node.span.end - ast.span.start,
506
+ content: JSON.stringify(atomicMap[propName]),
507
+ });
508
+ }
509
+ }
510
+ let staticHash = scannedTables.createStaticHashTable[uniqueKey];
511
+ if (!staticHash) {
512
+ staticHash = mergedCreateStaticHashTable[varName];
513
+ }
514
+ if (staticHash) {
515
+ const staticObj = scannedTables.createStaticObjectTable[staticHash];
516
+ if (staticObj && staticObj[propName] !== undefined) {
517
+ replacements.push({
518
+ start: node.span.start - ast.span.start,
519
+ end: node.span.end - ast.span.start,
520
+ content: JSON.stringify(staticObj[propName]),
521
+ });
522
+ }
523
+ }
450
524
  }
451
525
  },
452
526
  Identifier({ node }) {
@@ -464,7 +538,7 @@ export function plumeria(options = {}) {
464
538
  return;
465
539
  }
466
540
  const varName = node.value;
467
- const uniqueKey = `${this.resourcePath}-${varName}`;
541
+ const uniqueKey = `${resourcePath}-${varName}`;
468
542
  let hash = scannedTables.createHashTable[uniqueKey];
469
543
  if (!hash) {
470
544
  hash = mergedCreateTable[varName];
@@ -486,6 +560,35 @@ export function plumeria(options = {}) {
486
560
  });
487
561
  }
488
562
  }
563
+ let themeHash = scannedTables.createThemeHashTable[uniqueKey];
564
+ if (!themeHash) {
565
+ themeHash = mergedCreateThemeHashTable[varName];
566
+ }
567
+ if (themeHash) {
568
+ const atomicMap = scannedTables.createAtomicMapTable[themeHash];
569
+ if (atomicMap) {
570
+ replacements.push({
571
+ start: node.span.start - ast.span.start,
572
+ end: node.span.end - ast.span.start,
573
+ content: JSON.stringify(atomicMap),
574
+ });
575
+ return;
576
+ }
577
+ }
578
+ let staticHash = scannedTables.createStaticHashTable[uniqueKey];
579
+ if (!staticHash) {
580
+ staticHash = mergedCreateStaticHashTable[varName];
581
+ }
582
+ if (staticHash) {
583
+ const staticObj = scannedTables.createStaticObjectTable[staticHash];
584
+ if (staticObj) {
585
+ replacements.push({
586
+ start: node.span.start - ast.span.start,
587
+ end: node.span.end - ast.span.start,
588
+ content: JSON.stringify(staticObj),
589
+ });
590
+ }
591
+ }
489
592
  },
490
593
  CallExpression({ node }) {
491
594
  const callee = node.callee;
@@ -512,7 +615,7 @@ export function plumeria(options = {}) {
512
615
  const args = node.arguments;
513
616
  const resolveStyleObject = (expr) => {
514
617
  if (t.isObjectExpression(expr)) {
515
- return objectExpressionToObject(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedThemeTable, mergedCreateTable, mergedVariantsTable);
618
+ return objectExpressionToObject(expr, mergedStaticTable, mergedKeyframesTable, mergedViewTransitionTable, mergedCreateThemeHashTable, scannedTables.createThemeObjectTable, mergedCreateTable, mergedCreateStaticHashTable, scannedTables.createStaticObjectTable, mergedVariantsTable);
516
619
  }
517
620
  else if (t.isMemberExpression(expr) &&
518
621
  t.isIdentifier(expr.object) &&
@@ -543,17 +646,21 @@ export function plumeria(options = {}) {
543
646
  }
544
647
  else if (t.isIdentifier(expr)) {
545
648
  const varName = expr.value;
546
- const styleInfo = localCreateStyles[varName];
547
- if (styleInfo && styleInfo.obj) {
548
- return styleInfo.obj;
649
+ const uniqueKey = `${this.resourcePath}-${varName}`;
650
+ let hash = scannedTables.createHashTable[uniqueKey];
651
+ if (!hash) {
652
+ hash = mergedCreateTable[varName];
549
653
  }
550
- const hash = mergedCreateTable[varName];
551
654
  if (hash) {
552
655
  const obj = scannedTables.createObjectTable[hash];
553
656
  if (obj && typeof obj === 'object') {
554
657
  return obj;
555
658
  }
556
659
  }
660
+ const styleInfo = localCreateStyles[varName];
661
+ if (styleInfo && styleInfo.obj) {
662
+ return styleInfo.obj;
663
+ }
557
664
  if (localCreateStyles[varName]) {
558
665
  return localCreateStyles[varName].obj;
559
666
  }
@@ -573,14 +680,18 @@ export function plumeria(options = {}) {
573
680
  if (t.isCallExpression(expr) && t.isIdentifier(expr.callee)) {
574
681
  const varName = expr.callee.value;
575
682
  let variantObj;
576
- if (localCreateStyles[varName] &&
577
- localCreateStyles[varName].obj) {
578
- variantObj = localCreateStyles[varName].obj;
683
+ const uniqueKey = `${this.resourcePath}-${varName}`;
684
+ let hash = scannedTables.variantsHashTable[uniqueKey];
685
+ if (!hash) {
686
+ hash = mergedVariantsTable[varName];
687
+ }
688
+ if (hash && scannedTables.variantsObjectTable[hash]) {
689
+ variantObj = scannedTables.variantsObjectTable[hash];
579
690
  }
580
- else if (mergedVariantsTable[varName]) {
581
- const hash = mergedVariantsTable[varName];
582
- if (scannedTables.variantsObjectTable[hash]) {
583
- variantObj = scannedTables.variantsObjectTable[hash];
691
+ if (!variantObj) {
692
+ if (localCreateStyles[varName] &&
693
+ localCreateStyles[varName].obj) {
694
+ variantObj = localCreateStyles[varName].obj;
584
695
  }
585
696
  }
586
697
  if (variantObj) {
@@ -737,7 +848,7 @@ export function plumeria(options = {}) {
737
848
  extractOndemandStyles(currentStyle, extractedSheets, scannedTables);
738
849
  const hash = genBase36Hash(currentStyle, 1, 8);
739
850
  const records = getStyleRecords(hash, currentStyle, 2);
740
- records.forEach((r) => addSheet(r.sheet));
851
+ records.forEach((r) => extractedSheets.push(r.sheet));
741
852
  const className = records
742
853
  .map((r) => r.hash)
743
854
  .join(' ');
@@ -772,6 +883,9 @@ export function plumeria(options = {}) {
772
883
  },
773
884
  });
774
885
  Object.values(localCreateStyles).forEach((info) => {
886
+ if (info.type === 'constant' || info.type === 'variant') {
887
+ return;
888
+ }
775
889
  if (info.isExported) {
776
890
  replacements.push({
777
891
  start: info.declSpan.start,
@@ -800,7 +914,7 @@ export function plumeria(options = {}) {
800
914
  offset = r.end;
801
915
  });
802
916
  parts.push(buffer.subarray(offset));
803
- const transformedCode = Buffer.concat(parts).toString();
917
+ const transformedSource = Buffer.concat(parts).toString();
804
918
  if (extractedSheets.length > 0) {
805
919
  const generatedCSS = extractedSheets.join('');
806
920
  const baseId = id.replace(EXTENSION_PATTERN, '');
@@ -824,12 +938,12 @@ export function plumeria(options = {}) {
824
938
  devServer.reloadModule(cssModule);
825
939
  }
826
940
  return {
827
- code: injectImport(transformedCode, id, cssFilename),
941
+ code: injectImport(transformedSource, id, cssFilename),
828
942
  map: null,
829
943
  };
830
944
  }
831
945
  return {
832
- code: transformedCode,
946
+ code: transformedSource,
833
947
  map: null,
834
948
  };
835
949
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumeria/vite-plugin",
3
- "version": "6.2.0",
3
+ "version": "6.3.0",
4
4
  "type": "module",
5
5
  "description": "Plumeria Vite plugin",
6
6
  "author": "Refirst 11",
@@ -22,7 +22,7 @@
22
22
  "dist/"
23
23
  ],
24
24
  "dependencies": {
25
- "@plumeria/utils": "^6.2.0"
25
+ "@plumeria/utils": "^6.3.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@swc/core": "1.15.8",