@plumeria/utils 19.2.9 → 19.2.11

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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { CSSObject, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateFunctionTable, CreateThemeHashTable, CreateStaticHashTable, } from './types';
2
- export { objectExpressionToObject, collectLocalConsts, traverse, t, getRootIdentifier, resolveOriginError, unwrapExpression, extractOndemandStyles, deepMerge, scanAll, resolveFileError, getFileDependencies, resolveExport, resolveComponentKey, resolveThemeSelector, } from './parser';
2
+ export { objectExpressionToObject, collectLocalConsts, traverse, t, getRootIdentifier, resolveOriginError, unwrapExpression, extractOndemandStyles, appendSheet, deepMerge, scanAll, resolveFileError, getFileDependencies, resolveExport, resolveComponentKey, resolveThemeSelector, } from './parser';
3
3
  export type { StyleRecord } from './create';
4
4
  export { getStyleRecords } from './create';
5
5
  export type { NamedParam, StyleFunction, StyleFunctions, DynamicStyleTables, DynamicStyleResult, } from './dynamicKey';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformSource = exports.assertPropertyPolicy = exports.resolvePropertyPolicy = exports.DEFAULT_STYLE_PROP = exports.timedAsync = exports.timed = exports.tally = exports.measure = exports.mark = exports.profiling = exports.collectReferenceIdentifiers = exports.getLeadingCommentLength = exports.optimizer = exports.resolveImportPath = exports.themeHashOf = exports.getStateWeights = exports.getPseudoElement = exports.getSpecificity = exports.resolveDynamicStyle = exports.applyVarFallback = exports.splitVarByUnit = exports.isUnitlessProp = exports.styleFunctionsOf = exports.getStyleRecords = exports.resolveThemeSelector = exports.resolveComponentKey = exports.resolveExport = exports.getFileDependencies = exports.resolveFileError = exports.scanAll = exports.deepMerge = exports.extractOndemandStyles = exports.unwrapExpression = exports.resolveOriginError = exports.getRootIdentifier = exports.t = exports.traverse = exports.collectLocalConsts = exports.objectExpressionToObject = void 0;
3
+ exports.transformSource = exports.assertPropertyPolicy = exports.resolvePropertyPolicy = exports.DEFAULT_STYLE_PROP = exports.timedAsync = exports.timed = exports.tally = exports.measure = exports.mark = exports.profiling = exports.collectReferenceIdentifiers = exports.getLeadingCommentLength = exports.optimizer = exports.resolveImportPath = exports.themeHashOf = exports.getStateWeights = exports.getPseudoElement = exports.getSpecificity = exports.resolveDynamicStyle = exports.applyVarFallback = exports.splitVarByUnit = exports.isUnitlessProp = exports.styleFunctionsOf = exports.getStyleRecords = exports.resolveThemeSelector = exports.resolveComponentKey = exports.resolveExport = exports.getFileDependencies = exports.resolveFileError = exports.scanAll = exports.deepMerge = exports.appendSheet = exports.extractOndemandStyles = exports.unwrapExpression = exports.resolveOriginError = exports.getRootIdentifier = exports.t = exports.traverse = exports.collectLocalConsts = exports.objectExpressionToObject = void 0;
4
4
  var parser_1 = require("./parser");
5
5
  Object.defineProperty(exports, "objectExpressionToObject", { enumerable: true, get: function () { return parser_1.objectExpressionToObject; } });
6
6
  Object.defineProperty(exports, "collectLocalConsts", { enumerable: true, get: function () { return parser_1.collectLocalConsts; } });
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "getRootIdentifier", { enumerable: true, get: fun
10
10
  Object.defineProperty(exports, "resolveOriginError", { enumerable: true, get: function () { return parser_1.resolveOriginError; } });
11
11
  Object.defineProperty(exports, "unwrapExpression", { enumerable: true, get: function () { return parser_1.unwrapExpression; } });
12
12
  Object.defineProperty(exports, "extractOndemandStyles", { enumerable: true, get: function () { return parser_1.extractOndemandStyles; } });
13
+ Object.defineProperty(exports, "appendSheet", { enumerable: true, get: function () { return parser_1.appendSheet; } });
13
14
  Object.defineProperty(exports, "deepMerge", { enumerable: true, get: function () { return parser_1.deepMerge; } });
14
15
  Object.defineProperty(exports, "scanAll", { enumerable: true, get: function () { return parser_1.scanAll; } });
15
16
  Object.defineProperty(exports, "resolveFileError", { enumerable: true, get: function () { return parser_1.resolveFileError; } });
package/dist/parser.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CSSObject, Tables, StaticTable, KeyframesHashTable, ViewTransitionHashTable, CreateHashTable, CreateThemeHashTable, CreateThemeObjectTable, CreateStaticHashTable, CreateStaticObjectTable } from './types';
1
+ import type { CSSObject, Tables, StaticTable, KeyframesHashTable, ViewTransitionHashTable, 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;
@@ -55,5 +55,6 @@ export declare function resolveExport(filePath: string, exportName: string, visi
55
55
  filePath: string;
56
56
  localName: string;
57
57
  } | null;
58
- export declare function extractOndemandStyles(obj: any, extractedSheets: string[], t: Tables): void;
58
+ export declare const appendSheet: (sheets: string[]) => SheetSink;
59
+ export declare function extractOndemandStyles(obj: any, addSheet: SheetSink, t: Tables): void;
59
60
  export declare function deepMerge(target: Record<string, any>, source: Record<string, any>): Record<string, any>;
package/dist/parser.js CHANGED
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.t = exports.getRootIdentifier = void 0;
36
+ exports.appendSheet = exports.t = exports.getRootIdentifier = void 0;
37
37
  exports.unwrapExpression = unwrapExpression;
38
38
  exports.resolveOriginError = resolveOriginError;
39
39
  exports.resolveComponentKey = resolveComponentKey;
@@ -2421,7 +2421,17 @@ function resolveExport(filePath, exportName, visited = new Set()) {
2421
2421
  }
2422
2422
  const REFERENCE_MARKER = /(kf|vt|cr)-([0-9a-z]+)/g;
2423
2423
  const CUSTOM_PROPERTY = /var\(\s*(--[^\s,)]+)/g;
2424
- function extractOndemandStyles(obj, extractedSheets, t) {
2424
+ const appendSheet = (sheets) => {
2425
+ const existingSheets = new Set(sheets);
2426
+ return (sheet) => {
2427
+ if (existingSheets.has(sheet))
2428
+ return;
2429
+ existingSheets.add(sheet);
2430
+ sheets.push(sheet);
2431
+ };
2432
+ };
2433
+ exports.appendSheet = appendSheet;
2434
+ function extractOndemandStyles(obj, addSheet, t) {
2425
2435
  if (!obj || typeof obj !== 'object')
2426
2436
  return;
2427
2437
  const visited = new Set();
@@ -2468,13 +2478,6 @@ function extractOndemandStyles(obj, extractedSheets, t) {
2468
2478
  });
2469
2479
  }
2470
2480
  walk(obj);
2471
- const existingSheets = new Set(extractedSheets);
2472
- const addSheet = (sheet) => {
2473
- if (!existingSheets.has(sheet)) {
2474
- existingSheets.add(sheet);
2475
- extractedSheets.push(sheet);
2476
- }
2477
- };
2478
2481
  if (keyframesHashes.size > 0) {
2479
2482
  for (const hash of keyframesHashes) {
2480
2483
  const definition = t.keyframesObjectTable[hash];
package/dist/transform.js CHANGED
@@ -293,16 +293,14 @@ const transformSource = async (env) => {
293
293
  appliedStyleProps.add(`${owner}:${name}`);
294
294
  }
295
295
  };
296
- const extractedSheets = [];
296
+ const extractedSheets = new Set();
297
297
  const addSheet = (sheet) => {
298
- if (!extractedSheets.includes(sheet)) {
299
- extractedSheets.push(sheet);
300
- }
298
+ extractedSheets.add(sheet);
301
299
  };
302
300
  const processStyleRecords = (style, weights) => {
303
301
  const records = (0, create_1.getStyleRecords)(style, weights);
304
302
  if (collectOndemandSheets) {
305
- (0, parser_1.extractOndemandStyles)(style, extractedSheets, scannedTables);
303
+ (0, parser_1.extractOndemandStyles)(style, addSheet, scannedTables);
306
304
  records.forEach((r) => {
307
305
  addSheet(r.sheet);
308
306
  });
@@ -404,9 +402,8 @@ const transformSource = async (env) => {
404
402
  for (const key of Object.keys(importMap)) {
405
403
  mergedStaticTable[key] = importMap[key];
406
404
  }
407
- const mergedKeyframesTable = {};
405
+ const mergedKeyframesTable = Object.create(scannedTables.keyframesHashTable);
408
406
  for (const key of Object.keys(scannedTables.keyframesHashTable)) {
409
- mergedKeyframesTable[key] = scannedTables.keyframesHashTable[key];
410
407
  if (key.startsWith(`${resourcePath}-`)) {
411
408
  const varName = key.slice(resourcePath.length + 1);
412
409
  mergedKeyframesTable[varName] = scannedTables.keyframesHashTable[key];
@@ -415,9 +412,8 @@ const transformSource = async (env) => {
415
412
  for (const key of Object.keys(keyframesImportMap)) {
416
413
  mergedKeyframesTable[key] = keyframesImportMap[key];
417
414
  }
418
- const mergedViewTransitionTable = {};
415
+ const mergedViewTransitionTable = Object.create(scannedTables.viewTransitionHashTable);
419
416
  for (const key of Object.keys(scannedTables.viewTransitionHashTable)) {
420
- mergedViewTransitionTable[key] = scannedTables.viewTransitionHashTable[key];
421
417
  if (key.startsWith(`${resourcePath}-`)) {
422
418
  const varName = key.slice(resourcePath.length + 1);
423
419
  mergedViewTransitionTable[varName] =
@@ -427,9 +423,8 @@ const transformSource = async (env) => {
427
423
  for (const key of Object.keys(viewTransitionImportMap)) {
428
424
  mergedViewTransitionTable[key] = viewTransitionImportMap[key];
429
425
  }
430
- const mergedCreateTable = {};
426
+ const mergedCreateTable = Object.create(scannedTables.createHashTable);
431
427
  for (const key of Object.keys(scannedTables.createHashTable)) {
432
- mergedCreateTable[key] = scannedTables.createHashTable[key];
433
428
  if (key.startsWith(`${resourcePath}-`)) {
434
429
  const varName = key.slice(resourcePath.length + 1);
435
430
  mergedCreateTable[varName] = scannedTables.createHashTable[key];
@@ -438,9 +433,8 @@ const transformSource = async (env) => {
438
433
  for (const key of Object.keys(createImportMap)) {
439
434
  mergedCreateTable[key] = createImportMap[key];
440
435
  }
441
- const mergedCreateThemeHashTable = {};
436
+ const mergedCreateThemeHashTable = Object.create(scannedTables.createThemeHashTable);
442
437
  for (const key of Object.keys(scannedTables.createThemeHashTable)) {
443
- mergedCreateThemeHashTable[key] = scannedTables.createThemeHashTable[key];
444
438
  if (key.startsWith(`${resourcePath}-`)) {
445
439
  const varName = key.slice(resourcePath.length + 1);
446
440
  mergedCreateThemeHashTable[varName] =
@@ -450,9 +444,8 @@ const transformSource = async (env) => {
450
444
  for (const key of Object.keys(createThemeImportMap)) {
451
445
  mergedCreateThemeHashTable[key] = createThemeImportMap[key];
452
446
  }
453
- const mergedCreateStaticHashTable = {};
447
+ const mergedCreateStaticHashTable = Object.create(scannedTables.createStaticHashTable);
454
448
  for (const key of Object.keys(scannedTables.createStaticHashTable)) {
455
- mergedCreateStaticHashTable[key] = scannedTables.createStaticHashTable[key];
456
449
  if (key.startsWith(`${resourcePath}-`)) {
457
450
  const varName = key.slice(resourcePath.length + 1);
458
451
  mergedCreateStaticHashTable[varName] =
@@ -858,7 +851,25 @@ const transformSource = async (env) => {
858
851
  }
859
852
  },
860
853
  });
861
- const jsxOpeningElementMap = new Map();
854
+ const jsxAttributeOwnerMap = new Map();
855
+ const propEntryIndexes = new Map();
856
+ const localPropEntries = (list, spanStart) => {
857
+ let index = propEntryIndexes.get(list);
858
+ if (!index) {
859
+ index = new Map();
860
+ for (const entry of list) {
861
+ if (entry.filePath !== resourcePath)
862
+ continue;
863
+ const bucket = index.get(entry.spanStart);
864
+ if (bucket)
865
+ bucket.push(entry);
866
+ else
867
+ index.set(entry.spanStart, [entry]);
868
+ }
869
+ propEntryIndexes.set(list, index);
870
+ }
871
+ return index.get(spanStart);
872
+ };
862
873
  const componentParamNames = new Set();
863
874
  const addFirstParamName = (fn) => {
864
875
  const first = fn.params[0];
@@ -1841,10 +1852,13 @@ const transformSource = async (env) => {
1841
1852
  };
1842
1853
  (0, parser_1.traverse)(ast, {
1843
1854
  JSXOpeningElement({ node }) {
1844
- jsxOpeningElementMap.set(node.span.start, {
1855
+ const owner = {
1845
1856
  compKey: (0, parser_1.resolveComponentKey)(node.name, resourcePath, localImports),
1846
1857
  attributes: node.attributes,
1847
- });
1858
+ };
1859
+ for (const attribute of node.attributes)
1860
+ if (attribute.type === 'JSXAttribute')
1861
+ jsxAttributeOwnerMap.set(attribute.span.start, owner);
1848
1862
  },
1849
1863
  MemberExpression({ node }) {
1850
1864
  if (!isVisibleReference(node))
@@ -2023,16 +2037,7 @@ const transformSource = async (env) => {
2023
2037
  if (node.name.type !== 'Identifier')
2024
2038
  return;
2025
2039
  const attrName = node.name.value;
2026
- let compKey = null;
2027
- for (const [, val] of jsxOpeningElementMap) {
2028
- const found = val.attributes
2029
- .filter((a) => a.type === 'JSXAttribute')
2030
- .find((a) => a.span.start === node.span.start);
2031
- if (found) {
2032
- compKey = val.compKey;
2033
- break;
2034
- }
2035
- }
2040
+ const compKey = jsxAttributeOwnerMap.get(node.span.start)?.compKey ?? null;
2036
2041
  const receivesStyleProp = Boolean(compKey &&
2037
2042
  scannedTables.styleReceiverTable?.[compKey]?.includes(attrName));
2038
2043
  let relayed = false;
@@ -2066,9 +2071,8 @@ const transformSource = async (env) => {
2066
2071
  return `{ ${foldDynamicVars(vars).join(', ')} }`;
2067
2072
  };
2068
2073
  const replaceWithKey = (subNode) => {
2069
- const entries = list.filter((entry) => entry.spanStart === subNode.span.start &&
2070
- entry.filePath === resourcePath);
2071
- if (!entries.length)
2074
+ const entries = localPropEntries(list, subNode.span.start);
2075
+ if (!entries)
2072
2076
  return false;
2073
2077
  let content = '""';
2074
2078
  for (const entry of [...entries].reverse()) {
@@ -2133,16 +2137,7 @@ const transformSource = async (env) => {
2133
2137
  : [{ expression: expr }];
2134
2138
  const dynamicClassParts = [];
2135
2139
  const existingStyleParts = [];
2136
- let attributes = [];
2137
- for (const [, val] of jsxOpeningElementMap) {
2138
- const found = val.attributes
2139
- .filter((a) => a.type === 'JSXAttribute')
2140
- .find((a) => a.span.start === node.span.start);
2141
- if (found) {
2142
- attributes = val.attributes;
2143
- break;
2144
- }
2145
- }
2140
+ const attributes = jsxAttributeOwnerMap.get(node.span.start)?.attributes ?? [];
2146
2141
  const classNameAttr = attributes.find((attr) => attr.type === 'JSXAttribute' &&
2147
2142
  attr.name.type === 'Identifier' &&
2148
2143
  attr.name.value === 'className');
@@ -2325,10 +2320,11 @@ const transformSource = async (env) => {
2325
2320
  `so it cannot be passed through another prop or read as a value.`, call);
2326
2321
  }
2327
2322
  });
2323
+ replacements.sort((a, b) => a.start - b.start || b.end - a.end);
2328
2324
  for (const deferred of deferredSources) {
2329
2325
  let cursor = deferred.start;
2330
2326
  const pieces = [];
2331
- for (const replacement of [...replacements].sort((a, b) => a.start - b.start || b.end - a.end)) {
2327
+ for (const replacement of replacements) {
2332
2328
  if (replacement.start < cursor || replacement.end > deferred.end)
2333
2329
  continue;
2334
2330
  pieces.push(sourceBuffer.subarray(cursor, replacement.start).toString('utf-8'), replacement.content);
@@ -2342,9 +2338,7 @@ const transformSource = async (env) => {
2342
2338
  const buffer = Buffer.from(source);
2343
2339
  let offset = 0;
2344
2340
  const parts = [];
2345
- replacements
2346
- .sort((a, b) => a.start - b.start || b.end - a.end)
2347
- .forEach((r) => {
2341
+ replacements.forEach((r) => {
2348
2342
  if (r.start < offset)
2349
2343
  return;
2350
2344
  parts.push(buffer.subarray(offset, r.start));
@@ -2353,6 +2347,6 @@ const transformSource = async (env) => {
2353
2347
  });
2354
2348
  parts.push(buffer.subarray(offset));
2355
2349
  const transformedSource = Buffer.concat(parts).toString();
2356
- return { code: transformedSource, sheets: extractedSheets };
2350
+ return { code: transformedSource, sheets: [...extractedSheets] };
2357
2351
  };
2358
2352
  exports.transformSource = transformSource;
package/dist/types.d.ts CHANGED
@@ -62,4 +62,5 @@ export type ViewTransition = {
62
62
  new?: CSSProperties;
63
63
  old?: CSSProperties;
64
64
  };
65
+ export type SheetSink = (sheet: string) => void;
65
66
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumeria/utils",
3
- "version": "19.2.9",
3
+ "version": "19.2.11",
4
4
  "description": "Plumeria Utils",
5
5
  "author": "Refirst 11",
6
6
  "license": "MIT",