@plumeria/utils 19.2.11 → 19.2.13

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.
@@ -232,7 +232,7 @@ exports.applyVarFallback = applyVarFallback;
232
232
  const resolveDynamicStyle = (func, runtimeParams, staticTable, tables, providedParams) => {
233
233
  if (func.unsupportedParams)
234
234
  throw new Error('[plumeria] Dynamic styles require named parameters or object destructuring; array and rest parameters are not supported.');
235
- const tempStaticTable = { ...staticTable };
235
+ const tempStaticTable = Object.create(staticTable);
236
236
  const resolveBody = () => (0, parser_1.objectExpressionToObject)(func.body, tempStaticTable, tables.keyframesHashTable, tables.viewTransitionHashTable, tables.createThemeHashTable, tables.createThemeObjectTable, tables.createHashTable, tables.createStaticHashTable, tables.createStaticObjectTable);
237
237
  const withDefault = Object.entries(func.defaults ?? {}).filter(([param]) => providedParams
238
238
  ? !providedParams.has(param)
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, appendSheet, deepMerge, scanAll, resolveFileError, getFileDependencies, resolveExport, resolveComponentKey, resolveThemeSelector, } from './parser';
2
+ export { objectExpressionToObject, collectLocalConsts, traverse, t, getRootIdentifier, resolveOriginError, unwrapExpression, extractOndemandStyles, appendSheet, deepMerge, scanAll, scanOverlay, fileTableKeys, resolveFileError, getFileDependencies, resolveExport, resolveComponentKey, resolveThemeSelector, } from './parser';
3
3
  export 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.appendSheet = 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.fileTableKeys = exports.scanOverlay = 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; } });
@@ -13,6 +13,8 @@ Object.defineProperty(exports, "extractOndemandStyles", { enumerable: true, get:
13
13
  Object.defineProperty(exports, "appendSheet", { enumerable: true, get: function () { return parser_1.appendSheet; } });
14
14
  Object.defineProperty(exports, "deepMerge", { enumerable: true, get: function () { return parser_1.deepMerge; } });
15
15
  Object.defineProperty(exports, "scanAll", { enumerable: true, get: function () { return parser_1.scanAll; } });
16
+ Object.defineProperty(exports, "scanOverlay", { enumerable: true, get: function () { return parser_1.scanOverlay; } });
17
+ Object.defineProperty(exports, "fileTableKeys", { enumerable: true, get: function () { return parser_1.fileTableKeys; } });
16
18
  Object.defineProperty(exports, "resolveFileError", { enumerable: true, get: function () { return parser_1.resolveFileError; } });
17
19
  Object.defineProperty(exports, "getFileDependencies", { enumerable: true, get: function () { return parser_1.getFileDependencies; } });
18
20
  Object.defineProperty(exports, "resolveExport", { enumerable: true, get: function () { return parser_1.resolveExport; } });
package/dist/parser.d.ts CHANGED
@@ -49,6 +49,8 @@ export declare function resolveFileError(actualPath: string, importedName: strin
49
49
  filePath: string;
50
50
  message: string;
51
51
  } | undefined;
52
+ export declare function fileTableKeys(filePath: string, tableName: string): ReadonlySet<string> | undefined;
53
+ export declare function scanOverlay(scanCwd?: string): Tables;
52
54
  export declare function scanAll(scanCwd?: string): Tables;
53
55
  export declare function getFileDependencies(filePath: string): string[];
54
56
  export declare function resolveExport(filePath: string, exportName: string, visited?: Set<string>): {
package/dist/parser.js CHANGED
@@ -42,6 +42,8 @@ exports.objectExpressionToObject = objectExpressionToObject;
42
42
  exports.collectLocalConsts = collectLocalConsts;
43
43
  exports.resolveThemeSelector = resolveThemeSelector;
44
44
  exports.resolveFileError = resolveFileError;
45
+ exports.fileTableKeys = fileTableKeys;
46
+ exports.scanOverlay = scanOverlay;
45
47
  exports.scanAll = scanAll;
46
48
  exports.getFileDependencies = getFileDependencies;
47
49
  exports.resolveExport = resolveExport;
@@ -271,10 +273,9 @@ function objectExpressionToObject(node, staticTable, keyframesHashTable, viewTra
271
273
  const root = (0, exports.getRootIdentifier)(val);
272
274
  const resolved = root ? resolveVariable(root) : undefined;
273
275
  if (resolved !== undefined && root) {
274
- const member = resolveStaticTableMemberExpression(val, {
275
- ...staticTable,
276
+ const member = resolveStaticTableMemberExpression(val, Object.assign(Object.create(staticTable), {
276
277
  [root]: resolved,
277
- });
278
+ }));
278
279
  if (member === undefined)
279
280
  throw new Error(`[plumeria] Unknown style member on ${root}.`);
280
281
  obj[key] = member;
@@ -1040,12 +1041,46 @@ let scannedCwd;
1040
1041
  const objectTableOwners = new Map();
1041
1042
  const fileObjectContributions = new Map();
1042
1043
  const fileKeyContributions = new Map();
1043
- function snapshotTables() {
1044
- return Object.fromEntries(Object.entries(globalAgregatedTables).map(([key, value]) => [
1044
+ const detachedTables = new Set([
1045
+ 'staticTable',
1046
+ 'keyframesHashTable',
1047
+ 'viewTransitionHashTable',
1048
+ 'createHashTable',
1049
+ 'createObjectTable',
1050
+ 'createFunctionTable',
1051
+ 'createThemeHashTable',
1052
+ 'componentPropsTable',
1053
+ ]);
1054
+ const detachedOverlayTables = new Set([
1055
+ 'createThemeHashTable',
1056
+ 'componentPropsTable',
1057
+ ]);
1058
+ let overlayScan = false;
1059
+ let tablesGeneration = 0;
1060
+ let overlayBaseGeneration = -1;
1061
+ let overlayBase;
1062
+ function layerTables(source, detached) {
1063
+ return Object.fromEntries(Object.entries(source).map(([key, value]) => [
1045
1064
  key,
1046
- key === 'styleReceiverTable' ? value : { ...value },
1065
+ key === 'styleReceiverTable'
1066
+ ? value
1067
+ : detached.has(key)
1068
+ ? { ...value }
1069
+ : Object.create(value),
1047
1070
  ]));
1048
1071
  }
1072
+ function snapshotTables() {
1073
+ if (!overlayScan)
1074
+ return layerTables(globalAgregatedTables, detachedTables);
1075
+ if (overlayBaseGeneration !== tablesGeneration) {
1076
+ overlayBase = Object.fromEntries(Object.entries(globalAgregatedTables).map(([key, value]) => [
1077
+ key,
1078
+ key === 'styleReceiverTable' ? value : { ...value },
1079
+ ]));
1080
+ overlayBaseGeneration = tablesGeneration;
1081
+ }
1082
+ return layerTables(overlayBase, detachedOverlayTables);
1083
+ }
1049
1084
  function releaseFileObjects(filePath) {
1050
1085
  const contributions = fileObjectContributions.get(filePath);
1051
1086
  if (!contributions)
@@ -1056,6 +1091,9 @@ function releaseFileObjects(filePath) {
1056
1091
  }
1057
1092
  fileObjectContributions.delete(filePath);
1058
1093
  }
1094
+ function fileTableKeys(filePath, tableName) {
1095
+ return fileKeyContributions.get(filePath)?.get(tableName);
1096
+ }
1059
1097
  function registerFileKey(tableName, key, filePath) {
1060
1098
  let contributions = fileKeyContributions.get(filePath);
1061
1099
  if (!contributions)
@@ -1161,6 +1199,15 @@ function statFile(filePath) {
1161
1199
  throw e;
1162
1200
  }
1163
1201
  }
1202
+ function scanOverlay(scanCwd = process.cwd()) {
1203
+ overlayScan = true;
1204
+ try {
1205
+ return scanAll(scanCwd);
1206
+ }
1207
+ finally {
1208
+ overlayScan = false;
1209
+ }
1210
+ }
1164
1211
  function scanAll(scanCwd = process.cwd()) {
1165
1212
  scanning = true;
1166
1213
  statMemo.clear();
@@ -1287,6 +1334,7 @@ function runScan(scanCwd = process.cwd()) {
1287
1334
  if (invalidated.size === 0 && hasComputedOnce) {
1288
1335
  return snapshotTables();
1289
1336
  }
1337
+ tablesGeneration++;
1290
1338
  for (const fp of deletedFiles) {
1291
1339
  const cached = fileCache[fp];
1292
1340
  if (cached)
package/dist/transform.js CHANGED
@@ -201,7 +201,7 @@ const transformSource = async (env) => {
201
201
  }
202
202
  }
203
203
  };
204
- const scannedTables = (0, parser_1.scanAll)();
204
+ const scannedTables = (0, parser_1.scanOverlay)();
205
205
  const ownFailure = (0, parser_1.resolveFileError)(baseId, '');
206
206
  if (ownFailure)
207
207
  throwCompilationError(`Plumeria: ${ownFailure.message}`);
@@ -317,85 +317,83 @@ const transformSource = async (env) => {
317
317
  const createStaticImportMap = {};
318
318
  const plumeriaAliases = {};
319
319
  const localImports = {};
320
- (0, parser_1.traverse)(ast, {
321
- ImportDeclaration({ node }) {
322
- const sourcePath = node.source.value;
323
- if (sourcePath === '@plumeria/core') {
324
- node.specifiers.forEach((specifier) => {
325
- if (specifier.type === 'ImportNamespaceSpecifier') {
326
- plumeriaAliases[specifier.local.value] = 'NAMESPACE';
327
- }
328
- else if (specifier.type === 'ImportDefaultSpecifier') {
329
- plumeriaAliases[specifier.local.value] = 'NAMESPACE';
330
- }
331
- else if (specifier.type === 'ImportSpecifier') {
332
- const importedName = specifier.imported
320
+ for (const statement of ast.body) {
321
+ if (statement.type !== 'ImportDeclaration')
322
+ continue;
323
+ const node = statement;
324
+ const sourcePath = node.source.value;
325
+ if (sourcePath === '@plumeria/core') {
326
+ node.specifiers.forEach((specifier) => {
327
+ if (specifier.type === 'ImportNamespaceSpecifier') {
328
+ plumeriaAliases[specifier.local.value] = 'NAMESPACE';
329
+ }
330
+ else if (specifier.type === 'ImportDefaultSpecifier') {
331
+ plumeriaAliases[specifier.local.value] = 'NAMESPACE';
332
+ }
333
+ else if (specifier.type === 'ImportSpecifier') {
334
+ const importedName = specifier.imported
335
+ ? specifier.imported.value
336
+ : specifier.local.value;
337
+ plumeriaAliases[specifier.local.value] = importedName;
338
+ }
339
+ });
340
+ }
341
+ const actualPath = (0, resolver_1.resolveImportPath)(sourcePath, resourcePath);
342
+ if (actualPath) {
343
+ node.specifiers.forEach((specifier) => {
344
+ if (specifier.type === 'ImportNamespaceSpecifier') {
345
+ localImports[specifier.local.value] = {
346
+ actualPath,
347
+ importedName: '*',
348
+ };
349
+ return;
350
+ }
351
+ if (specifier.type === 'ImportSpecifier' ||
352
+ specifier.type === 'ImportDefaultSpecifier') {
353
+ const importedName = specifier.type === 'ImportDefaultSpecifier'
354
+ ? 'default'
355
+ : specifier.imported
333
356
  ? specifier.imported.value
334
357
  : specifier.local.value;
335
- plumeriaAliases[specifier.local.value] = importedName;
358
+ const localName = specifier.local.value;
359
+ let resolvedKey = `${actualPath}-${importedName}`;
360
+ const resolved = (0, parser_1.resolveExport)(actualPath, importedName);
361
+ if (resolved) {
362
+ resolvedKey = `${resolved.filePath}-${resolved.localName}`;
336
363
  }
337
- });
338
- }
339
- const actualPath = (0, resolver_1.resolveImportPath)(sourcePath, resourcePath);
340
- if (actualPath) {
341
- node.specifiers.forEach((specifier) => {
342
- if (specifier.type === 'ImportNamespaceSpecifier') {
343
- localImports[specifier.local.value] = {
344
- actualPath,
345
- importedName: '*',
346
- };
347
- return;
364
+ const uniqueKey = resolvedKey;
365
+ localImports[localName] = { actualPath, importedName };
366
+ if (scannedTables.staticTable[uniqueKey]) {
367
+ importMap[localName] = scannedTables.staticTable[uniqueKey];
348
368
  }
349
- if (specifier.type === 'ImportSpecifier' ||
350
- specifier.type === 'ImportDefaultSpecifier') {
351
- const importedName = specifier.type === 'ImportDefaultSpecifier'
352
- ? 'default'
353
- : specifier.imported
354
- ? specifier.imported.value
355
- : specifier.local.value;
356
- const localName = specifier.local.value;
357
- let resolvedKey = `${actualPath}-${importedName}`;
358
- const resolved = (0, parser_1.resolveExport)(actualPath, importedName);
359
- if (resolved) {
360
- resolvedKey = `${resolved.filePath}-${resolved.localName}`;
361
- }
362
- const uniqueKey = resolvedKey;
363
- localImports[localName] = { actualPath, importedName };
364
- if (scannedTables.staticTable[uniqueKey]) {
365
- importMap[localName] = scannedTables.staticTable[uniqueKey];
366
- }
367
- if (scannedTables.keyframesHashTable[uniqueKey]) {
368
- keyframesImportMap[localName] =
369
- scannedTables.keyframesHashTable[uniqueKey];
370
- }
371
- if (scannedTables.viewTransitionHashTable[uniqueKey]) {
372
- viewTransitionImportMap[localName] =
373
- scannedTables.viewTransitionHashTable[uniqueKey];
374
- }
375
- if (scannedTables.createHashTable[uniqueKey]) {
376
- createImportMap[localName] =
377
- scannedTables.createHashTable[uniqueKey];
378
- }
379
- if (scannedTables.createFunctionTable[uniqueKey]) {
380
- createFunctionImportMap[localName] = (0, dynamicKey_1.styleFunctionsOf)(scannedTables.createFunctionTable[uniqueKey]);
381
- }
382
- if (scannedTables.createThemeHashTable[uniqueKey]) {
383
- createThemeImportMap[localName] =
384
- scannedTables.createThemeHashTable[uniqueKey];
385
- }
386
- if (scannedTables.createStaticHashTable[uniqueKey]) {
387
- createStaticImportMap[localName] =
388
- scannedTables.createStaticHashTable[uniqueKey];
389
- }
369
+ if (scannedTables.keyframesHashTable[uniqueKey]) {
370
+ keyframesImportMap[localName] =
371
+ scannedTables.keyframesHashTable[uniqueKey];
390
372
  }
391
- });
392
- }
393
- },
394
- });
395
- const mergedStaticTable = {};
396
- for (const key of Object.keys(scannedTables.staticTable)) {
397
- mergedStaticTable[key] = scannedTables.staticTable[key];
373
+ if (scannedTables.viewTransitionHashTable[uniqueKey]) {
374
+ viewTransitionImportMap[localName] =
375
+ scannedTables.viewTransitionHashTable[uniqueKey];
376
+ }
377
+ if (scannedTables.createHashTable[uniqueKey]) {
378
+ createImportMap[localName] =
379
+ scannedTables.createHashTable[uniqueKey];
380
+ }
381
+ if (scannedTables.createFunctionTable[uniqueKey]) {
382
+ createFunctionImportMap[localName] = (0, dynamicKey_1.styleFunctionsOf)(scannedTables.createFunctionTable[uniqueKey]);
383
+ }
384
+ if (scannedTables.createThemeHashTable[uniqueKey]) {
385
+ createThemeImportMap[localName] =
386
+ scannedTables.createThemeHashTable[uniqueKey];
387
+ }
388
+ if (scannedTables.createStaticHashTable[uniqueKey]) {
389
+ createStaticImportMap[localName] =
390
+ scannedTables.createStaticHashTable[uniqueKey];
391
+ }
392
+ }
393
+ });
394
+ }
398
395
  }
396
+ const mergedStaticTable = Object.create(scannedTables.staticTable);
399
397
  for (const key of Object.keys(localConsts)) {
400
398
  mergedStaticTable[key] = localConsts[key];
401
399
  }
@@ -403,54 +401,43 @@ const transformSource = async (env) => {
403
401
  mergedStaticTable[key] = importMap[key];
404
402
  }
405
403
  const mergedKeyframesTable = Object.create(scannedTables.keyframesHashTable);
406
- for (const key of Object.keys(scannedTables.keyframesHashTable)) {
407
- if (key.startsWith(`${resourcePath}-`)) {
408
- const varName = key.slice(resourcePath.length + 1);
409
- mergedKeyframesTable[varName] = scannedTables.keyframesHashTable[key];
410
- }
404
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'keyframesHashTable') ?? []) {
405
+ mergedKeyframesTable[key.slice(resourcePath.length + 1)] =
406
+ scannedTables.keyframesHashTable[key];
411
407
  }
412
408
  for (const key of Object.keys(keyframesImportMap)) {
413
409
  mergedKeyframesTable[key] = keyframesImportMap[key];
414
410
  }
415
411
  const mergedViewTransitionTable = Object.create(scannedTables.viewTransitionHashTable);
416
- for (const key of Object.keys(scannedTables.viewTransitionHashTable)) {
417
- if (key.startsWith(`${resourcePath}-`)) {
418
- const varName = key.slice(resourcePath.length + 1);
419
- mergedViewTransitionTable[varName] =
420
- scannedTables.viewTransitionHashTable[key];
421
- }
412
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'viewTransitionHashTable') ??
413
+ []) {
414
+ mergedViewTransitionTable[key.slice(resourcePath.length + 1)] =
415
+ scannedTables.viewTransitionHashTable[key];
422
416
  }
423
417
  for (const key of Object.keys(viewTransitionImportMap)) {
424
418
  mergedViewTransitionTable[key] = viewTransitionImportMap[key];
425
419
  }
426
420
  const mergedCreateTable = Object.create(scannedTables.createHashTable);
427
- for (const key of Object.keys(scannedTables.createHashTable)) {
428
- if (key.startsWith(`${resourcePath}-`)) {
429
- const varName = key.slice(resourcePath.length + 1);
430
- mergedCreateTable[varName] = scannedTables.createHashTable[key];
431
- }
421
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'createHashTable') ?? []) {
422
+ mergedCreateTable[key.slice(resourcePath.length + 1)] =
423
+ scannedTables.createHashTable[key];
432
424
  }
433
425
  for (const key of Object.keys(createImportMap)) {
434
426
  mergedCreateTable[key] = createImportMap[key];
435
427
  }
436
428
  const mergedCreateThemeHashTable = Object.create(scannedTables.createThemeHashTable);
437
- for (const key of Object.keys(scannedTables.createThemeHashTable)) {
438
- if (key.startsWith(`${resourcePath}-`)) {
439
- const varName = key.slice(resourcePath.length + 1);
440
- mergedCreateThemeHashTable[varName] =
441
- scannedTables.createThemeHashTable[key];
442
- }
429
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'createThemeHashTable') ?? []) {
430
+ mergedCreateThemeHashTable[key.slice(resourcePath.length + 1)] =
431
+ scannedTables.createThemeHashTable[key];
443
432
  }
444
433
  for (const key of Object.keys(createThemeImportMap)) {
445
434
  mergedCreateThemeHashTable[key] = createThemeImportMap[key];
446
435
  }
447
436
  const mergedCreateStaticHashTable = Object.create(scannedTables.createStaticHashTable);
448
- for (const key of Object.keys(scannedTables.createStaticHashTable)) {
449
- if (key.startsWith(`${resourcePath}-`)) {
450
- const varName = key.slice(resourcePath.length + 1);
451
- mergedCreateStaticHashTable[varName] =
452
- scannedTables.createStaticHashTable[key];
453
- }
437
+ for (const key of (0, parser_1.fileTableKeys)(resourcePath, 'createStaticHashTable') ??
438
+ []) {
439
+ mergedCreateStaticHashTable[key.slice(resourcePath.length + 1)] =
440
+ scannedTables.createStaticHashTable[key];
454
441
  }
455
442
  for (const key of Object.keys(createStaticImportMap)) {
456
443
  mergedCreateStaticHashTable[key] = createStaticImportMap[key];
@@ -2335,17 +2322,16 @@ const transformSource = async (env) => {
2335
2322
  for (const replacement of replacements)
2336
2323
  replacement.content = replacement.content.replaceAll(deferred.token, content);
2337
2324
  }
2338
- const buffer = Buffer.from(source);
2339
2325
  let offset = 0;
2340
2326
  const parts = [];
2341
2327
  replacements.forEach((r) => {
2342
2328
  if (r.start < offset)
2343
2329
  return;
2344
- parts.push(buffer.subarray(offset, r.start));
2330
+ parts.push(sourceBuffer.subarray(offset, r.start));
2345
2331
  parts.push(Buffer.from(r.content));
2346
2332
  offset = r.end;
2347
2333
  });
2348
- parts.push(buffer.subarray(offset));
2334
+ parts.push(sourceBuffer.subarray(offset));
2349
2335
  const transformedSource = Buffer.concat(parts).toString();
2350
2336
  return { code: transformedSource, sheets: [...extractedSheets] };
2351
2337
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumeria/utils",
3
- "version": "19.2.11",
3
+ "version": "19.2.13",
4
4
  "description": "Plumeria Utils",
5
5
  "author": "Refirst 11",
6
6
  "license": "MIT",