@e-mc/core 0.5.3 → 0.5.4

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/LICENSE CHANGED
@@ -1,11 +1,7 @@
1
- Copyright 2023 An Pham
2
-
3
- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4
-
5
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
6
-
7
- 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
-
9
- 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
10
-
11
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1
+ Copyright 2023 Mile Square Park
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
- ### @e-mc/core
1
+ # @e-mc/core
2
2
 
3
- ### LICENSE
3
+ PEP 402 - Forever
4
4
 
5
- BSD 3-Clause
5
+ ## LICENSE
6
+
7
+ MIT
package/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import type { HostConstructor, ModuleConstructor } from '../types/lib';
2
- import type { AbortComponentConstructor, ClientConstructor, ClientDbConstructor, PermissionConstructor } from '../types/lib/core';
3
-
4
- declare namespace core {
5
- const Module: ModuleConstructor;
6
- const Host: HostConstructor;
7
- const Client: ClientConstructor;
8
- const ClientDb: ClientDbConstructor;
9
- const AbortComponent: AbortComponentConstructor;
10
- const Permission: PermissionConstructor;
11
- }
12
-
1
+ import type { HostConstructor, ModuleConstructor } from '../types/lib';
2
+ import type { AbortComponentConstructor, ClientConstructor, ClientDbConstructor, PermissionConstructor } from '../types/lib/core';
3
+
4
+ declare namespace core {
5
+ const Module: ModuleConstructor;
6
+ const Host: HostConstructor;
7
+ const Client: ClientConstructor;
8
+ const ClientDb: ClientDbConstructor;
9
+ const AbortComponent: AbortComponentConstructor;
10
+ const Permission: PermissionConstructor;
11
+ }
12
+
13
13
  export = core;
package/index.js CHANGED
@@ -1,16 +1,15 @@
1
1
  "use strict";
2
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
2
+ var _a, _b, _c, _d, _e, _f, _g, _h;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Module = exports.Permission = exports.AbortComponent = exports.ClientDb = exports.Client = exports.Host = void 0;
5
5
  const path = require("path");
6
6
  const fs = require("fs");
7
7
  const pm = require("picomatch");
8
- const types_1 = require("../types");
9
- const module_1 = require("../module");
8
+ const types_1 = require("@e-mc/types");
9
+ const module_1 = require("@e-mc/module");
10
10
  exports.Module = module_1.default;
11
11
  const kConfig = Symbol('config');
12
12
  const kQueued = Symbol('queued');
13
- const kUsername = Symbol('username');
14
13
  const kAbortHandler = Symbol('abortHandler');
15
14
  const kFreeze = Symbol('freeze');
16
15
  const kDone = Symbol('done');
@@ -27,7 +26,7 @@ const HOST = {
27
26
  DONE: new Map(),
28
27
  QUEUE: [],
29
28
  QUEUE_LIMIT: Infinity,
30
- QUEUE_EXPIRES: 86400000 /* VALUES.HOST_EXPIRES */,
29
+ QUEUE_EXPIRES: 86400000,
31
30
  PID: 1,
32
31
  CLOSED: 0,
33
32
  QUEUED: 0,
@@ -39,12 +38,13 @@ const HOST = {
39
38
  ADMIN_USERS: [],
40
39
  ADMIN_PRIVATE: false,
41
40
  THREAD_LIMIT: Infinity,
42
- THREAD_EXPIRES: 86400000 /* VALUES.HOST_EXPIRES */,
41
+ THREAD_EXPIRES: 86400000,
43
42
  PRIORITY_MIN: 0,
44
43
  PRIORITY_MAX: 100,
45
44
  PRIORITY_BYPASS: undefined
46
45
  };
47
46
  const PLATFORM_WIN32 = process.platform === 'win32';
47
+ const HOST_USERNAME = new WeakMap();
48
48
  let STORE_RESULT_COUNT = 0;
49
49
  let PICOMATCH_OPTIONS = { nocase: PLATFORM_WIN32 };
50
50
  let MINIMATCH_OPTIONS = { matchBase: true, nocase: PLATFORM_WIN32 };
@@ -92,7 +92,7 @@ function callResumeThread(item, aborted) {
92
92
  if (item.joined) {
93
93
  const { instance, args = [], startTime } = item;
94
94
  if (!aborted) {
95
- instance.writeTimeElapsed('JOIN', ['Thread restarting...', HOST.THREAD_LIMIT > 1 ? 'Availability: ' + HOST.DONE.size + ' / ' + HOST.THREAD_LIMIT : ''], startTime, { type: 2 /* LOG_TYPE.NODE */, ...module_1.default.LOG_STYLE_WARN });
95
+ instance.writeTimeElapsed('JOIN', ['Thread restarting...', HOST.THREAD_LIMIT > 1 ? 'Availability: ' + HOST.DONE.size + ' / ' + HOST.THREAD_LIMIT : ''], startTime, { type: 2, ...module_1.default.LOG_STYLE_WARN });
96
96
  }
97
97
  queueMicrotask(() => {
98
98
  try {
@@ -104,7 +104,7 @@ function callResumeThread(item, aborted) {
104
104
  }
105
105
  }
106
106
  function cancelThread(host, hint, rejected) {
107
- host.writeFail(["Transaction was cancelled" /* ERR_MESSAGE.CANCELLED */, host.username], (0, types_1.errorValue)("Thread was killed" /* ERR_MESSAGE.THREAD_KILLED */, hint), { type: 2 /* LOG_TYPE.NODE */, fatal: true });
107
+ host.writeFail(["Transaction was cancelled", host.username], (0, types_1.errorValue)("Thread was killed", hint), { type: 2, fatal: true });
108
108
  host.abort();
109
109
  if (rejected) {
110
110
  ++HOST.REJECTED;
@@ -227,7 +227,7 @@ function resumeHostQueue(host) {
227
227
  }
228
228
  function updateHostQueue(host, position, priority, broadcast) {
229
229
  if (!broadcast || host.broadcastId) {
230
- host.formatMessage(2 /* LOG_TYPE.NODE */, 'QUEUE', ["Thread limit exceeded" /* ERR_MESSAGE.THREAD */ + ` (position #${position + 1})`, host.username], 'Priority: ' + priority, { type: 2 /* LOG_TYPE.NODE */, ...module_1.default.LOG_STYLE_WARN });
230
+ host.formatMessage(2, 'QUEUE', ["Thread limit exceeded" + ` (position #${position + 1})`, host.username], 'Priority: ' + priority, { type: 2, ...module_1.default.LOG_STYLE_WARN });
231
231
  }
232
232
  }
233
233
  function asPosix(value) {
@@ -235,8 +235,8 @@ function asPosix(value) {
235
235
  return PLATFORM_WIN32 ? value.replace(/\\/g, '/') : value;
236
236
  }
237
237
  const readable = (value) => (0, types_1.isString)(value) || (0, types_1.isArray)(value);
238
- const expireTime = (value) => Date.now() + value * 1000 /* TIME.S */;
239
- const convertSeconds = (value) => typeof value === 'string' && Math.ceil((0, types_1.parseTime)(value) / 1000 /* TIME.S */) || 0;
238
+ const expireTime = (value) => Date.now() + value * 1000;
239
+ const convertSeconds = (value) => typeof value === 'string' && Math.ceil((0, types_1.parseTime)(value) / 1000) || 0;
240
240
  class Host extends module_1.default {
241
241
  static purgeMemory(percent = 1, limit = 0, parent) {
242
242
  return parent ? super.purgeMemory(percent, limit) : Promise.resolve(0);
@@ -395,7 +395,7 @@ class Host extends module_1.default {
395
395
  closeThread(host);
396
396
  }
397
397
  else if (host.startTime + HOST.THREAD_EXPIRES >= current) {
398
- host.writeFail(["Transaction was cancelled" /* ERR_MESSAGE.CANCELLED */, host.username], (0, types_1.errorValue)("Timeout was exceeded" /* ERR_MESSAGE.TIMEOUT */, (0, types_1.formatTime)(HOST.THREAD_EXPIRES)), { fatal: true });
398
+ host.writeFail(["Transaction was cancelled", host.username], (0, types_1.errorValue)("Timeout was exceeded", (0, types_1.formatTime)(HOST.THREAD_EXPIRES)), { fatal: true });
399
399
  host.abort();
400
400
  closeThread(host);
401
401
  }
@@ -451,10 +451,9 @@ class Host extends module_1.default {
451
451
  this._usingObjects = new Set();
452
452
  this[_a] = false;
453
453
  this[_b] = false;
454
- this[_c] = '';
455
454
  const { broadcastId, log, username, priority } = config;
456
455
  if ((0, types_1.isString)(username)) {
457
- this[kUsername] = username;
456
+ HOST_USERNAME.set(this, username);
458
457
  }
459
458
  if (broadcastId) {
460
459
  this.broadcastId = broadcastId;
@@ -645,7 +644,7 @@ class Host extends module_1.default {
645
644
  return this[kConfig];
646
645
  }
647
646
  get username() {
648
- return this[kUsername];
647
+ return HOST_USERNAME.get(this) || '';
649
648
  }
650
649
  set done(value) {
651
650
  if (value) {
@@ -664,7 +663,7 @@ class Host extends module_1.default {
664
663
  }
665
664
  }
666
665
  exports.Host = Host;
667
- _a = kDone, _b = kQueued, _c = kUsername;
666
+ _a = kDone, _b = kQueued;
668
667
  class Client extends module_1.default {
669
668
  static purgeMemory(percent = 1, limit = 0, parent) {
670
669
  return parent ? super.purgeMemory(percent, limit) : Promise.resolve(0);
@@ -672,7 +671,7 @@ class Client extends module_1.default {
672
671
  constructor(data) {
673
672
  super();
674
673
  this._extensions = null;
675
- this[_d] = '';
674
+ this[_c] = '';
676
675
  this.module = (0, types_1.isPlainObject)(data) ? data : {};
677
676
  }
678
677
  init(...args) {
@@ -701,8 +700,8 @@ class Client extends module_1.default {
701
700
  return this[kCacheDir];
702
701
  }
703
702
  get settings() {
704
- var _k;
705
- return ((_k = this.module).settings || (_k.settings = {}));
703
+ var _j;
704
+ return ((_j = this.module).settings || (_j.settings = {}));
706
705
  }
707
706
  set extensions(values) {
708
707
  if (Array.isArray(values)) {
@@ -715,14 +714,14 @@ class Client extends module_1.default {
715
714
  }
716
715
  }
717
716
  exports.Client = Client;
718
- _d = kCacheDir;
717
+ _c = kCacheDir;
719
718
  class ClientDb extends Client {
720
- static get TRANSACTION_ACTIVE() { return 1 /* DB_TRANSACTION.ACTIVE */; }
721
- static get TRANSACTION_PARTIAL() { return 2 /* DB_TRANSACTION.PARTIAL */; }
722
- static get TRANSACTION_COMMIT() { return 4 /* DB_TRANSACTION.COMMIT */; }
723
- static get TRANSACTION_TERMINATE() { return 8 /* DB_TRANSACTION.TERMINATE */; }
724
- static get TRANSACTION_ABORT() { return 16 /* DB_TRANSACTION.ABORT */; }
725
- static get TRANSACTION_FAIL() { return 32 /* DB_TRANSACTION.FAIL */; }
719
+ static get TRANSACTION_ACTIVE() { return 1; }
720
+ static get TRANSACTION_PARTIAL() { return 2; }
721
+ static get TRANSACTION_COMMIT() { return 4; }
722
+ static get TRANSACTION_TERMINATE() { return 8; }
723
+ static get TRANSACTION_ABORT() { return 16; }
724
+ static get TRANSACTION_FAIL() { return 32; }
726
725
  static loadSettings(settings, password) {
727
726
  if (super.loadSettings({ process: settings.process }, password)) {
728
727
  const memory = settings.memory;
@@ -787,7 +786,7 @@ class ClientDb extends Client {
787
786
  let result = 0;
788
787
  switch (typeof value) {
789
788
  case 'number':
790
- result = value * 1000 /* TIME.S */;
789
+ result = value * 1000;
791
790
  break;
792
791
  case 'string':
793
792
  result = (0, types_1.parseTime)(value);
@@ -838,7 +837,7 @@ class ClientDb extends Client {
838
837
  }
839
838
  }
840
839
  static storeResult(source, credential, queryString, result, options, sessionKey, sessionExpires) {
841
- var _k, _l;
840
+ var _j, _k;
842
841
  let cache, cacheDir;
843
842
  if ((0, types_1.isObject)(sessionKey)) {
844
843
  ({ cacheDir, sessionKey, sessionExpires } = sessionKey);
@@ -881,7 +880,7 @@ class ClientDb extends Client {
881
880
  queryString = this.asHash(queryString);
882
881
  if (timeout > 0) {
883
882
  const item = [expireTime(timeout), result, Date.now(), 0];
884
- ((_k = (CACHE_USER[source] || (CACHE_USER[source] = {})))[userKey] || (_k[userKey] = {}))[queryString] = item;
883
+ ((_j = (CACHE_USER[source] || (CACHE_USER[source] = {})))[userKey] || (_j[userKey] = {}))[queryString] = item;
885
884
  addSourceResult(source, item);
886
885
  if (cacheDir) {
887
886
  if (partition) {
@@ -900,17 +899,17 @@ class ClientDb extends Client {
900
899
  }
901
900
  else if (typeof sessionKey === 'string' && sessionExpires && sessionExpires > 0) {
902
901
  const dbKey = userKey + sessionKey;
903
- ((_l = (CACHE_SESSION[source] || (CACHE_SESSION[source] = {})))[dbKey] || (_l[dbKey] = {}))[queryString] = result;
904
- setTimeout(() => delete CACHE_SESSION[dbKey], sessionExpires * 1000 /* TIME.S */);
902
+ ((_k = (CACHE_SESSION[source] || (CACHE_SESSION[source] = {})))[dbKey] || (_k[dbKey] = {}))[queryString] = result;
903
+ setTimeout(() => delete CACHE_SESSION[dbKey], sessionExpires * 1000);
905
904
  }
906
905
  }
907
906
  return result;
908
907
  }
909
- static purgeResult(prefix) {
908
+ static async purgeResult(prefix) {
910
909
  const current = Date.now();
911
910
  const providers = new Map();
912
911
  if (prefix) {
913
- if (prefix.indexOf('_') === -1) {
912
+ if (!prefix.includes('_')) {
914
913
  prefix += '_';
915
914
  for (const key in CACHE_USER) {
916
915
  if (key.startsWith(prefix)) {
@@ -971,7 +970,7 @@ class ClientDb extends Client {
971
970
  constructor(data, database = []) {
972
971
  super(data);
973
972
  this.database = database;
974
- this.cacheExpires = 600000 /* VALUES.DB_EXPIRES */;
973
+ this.cacheExpires = 600000;
975
974
  }
976
975
  init(config) {
977
976
  let { cache_dir, session_expires: expires } = this.settings;
@@ -1065,7 +1064,7 @@ class ClientDb extends Client {
1065
1064
  }
1066
1065
  const uuidKey = ClientDb.extractUUID(credential);
1067
1066
  let options;
1068
- if (ClientDb.enabled("memory.settings.users" /* KEY_NAME.MEMORY_SETTINGS_USERS */, this.host?.username)) {
1067
+ if (ClientDb.enabled("memory.settings.users", this.host?.username)) {
1069
1068
  let value;
1070
1069
  if ((0, types_1.isObject)(sessionKey)) {
1071
1070
  ({ value, sessionKey } = sessionKey);
@@ -1085,13 +1084,13 @@ class ClientDb extends Client {
1085
1084
  }
1086
1085
  applyState(items, value, as) {
1087
1086
  for (const item of Array.isArray(items) ? items : [items]) {
1088
- if ((0, types_1.hasBit)(value, 8 /* DB_TRANSACTION.TERMINATE */)) {
1087
+ if ((0, types_1.hasBit)(value, 8)) {
1089
1088
  const state = item.transactionState || (item.transactionState = 0);
1090
- if ((0, types_1.hasBit)(state, 4 /* DB_TRANSACTION.COMMIT */) || (0, types_1.hasBit)(state, 32 /* DB_TRANSACTION.FAIL */)) {
1089
+ if ((0, types_1.hasBit)(state, 4) || (0, types_1.hasBit)(state, 32)) {
1091
1090
  item.transactionState |= value;
1092
1091
  }
1093
1092
  }
1094
- else if ((0, types_1.hasBit)(value, 16 /* DB_TRANSACTION.ABORT */)) {
1093
+ else if ((0, types_1.hasBit)(value, 16)) {
1095
1094
  item.transactionState || (item.transactionState = value);
1096
1095
  }
1097
1096
  else if (as) {
@@ -1115,8 +1114,8 @@ class ClientDb extends Client {
1115
1114
  }
1116
1115
  }
1117
1116
  settingsKey(uuidKey, name, component) {
1118
- var _k;
1119
- const data = ((_k = this.settings).user_key || (_k.user_key = {}))[uuidKey];
1117
+ var _j;
1118
+ const data = ((_j = this.settings).user_key || (_j.user_key = {}))[uuidKey];
1120
1119
  if ((0, types_1.isObject)(data)) {
1121
1120
  return getSettingsValue(data, name, component);
1122
1121
  }
@@ -1124,22 +1123,22 @@ class ClientDb extends Client {
1124
1123
  get pending() {
1125
1124
  return this.database.filter(item => {
1126
1125
  const state = item.transactionState || 0;
1127
- return state === 0 || state === 16 /* DB_TRANSACTION.ABORT */;
1126
+ return state === 0 || state === 16;
1128
1127
  });
1129
1128
  }
1130
1129
  get committed() {
1131
- return this.database.filter(item => (item.transactionState & 4 /* DB_TRANSACTION.COMMIT */) === 4 /* DB_TRANSACTION.COMMIT */);
1130
+ return this.database.filter(item => (item.transactionState & 4) === 4);
1132
1131
  }
1133
1132
  get failed() {
1134
- return this.database.filter(item => (item.transactionState & 32 /* DB_TRANSACTION.FAIL */) === 32 /* DB_TRANSACTION.FAIL */);
1133
+ return this.database.filter(item => (item.transactionState & 32) === 32);
1135
1134
  }
1136
1135
  }
1137
- ClientDb.STORE_RESULT_PARTITION_SIZE = 16 /* VALUES.DB_PARTITION_SIZE */;
1138
- ClientDb.STORE_RESULT_PARTITION_MULT = 2 /* VALUES.DB_PARTITION_MULT */;
1136
+ ClientDb.STORE_RESULT_PARTITION_SIZE = 16;
1137
+ ClientDb.STORE_RESULT_PARTITION_MULT = 2;
1139
1138
  exports.ClientDb = ClientDb;
1140
1139
  class AbortComponent {
1141
1140
  constructor() {
1142
- this[_e] = new AbortController();
1141
+ this[_d] = new AbortController();
1143
1142
  }
1144
1143
  static attach(instance, signal, options) {
1145
1144
  let map = ABORT_LISTENER.get(instance);
@@ -1179,7 +1178,7 @@ class AbortComponent {
1179
1178
  }
1180
1179
  }
1181
1180
  exports.AbortComponent = AbortComponent;
1182
- _e = kAbortHandler;
1181
+ _d = kAbortHandler;
1183
1182
  class Permission {
1184
1183
  static create(settings, parent, freeze) {
1185
1184
  if (this.validate(settings)) {
@@ -1254,10 +1253,10 @@ class Permission {
1254
1253
  return pm.isMatch(pathname, pattern, PICOMATCH_OPTIONS);
1255
1254
  }
1256
1255
  constructor(freeze = false) {
1256
+ this[_e] = { enabled: null, value: '' };
1257
1257
  this[_f] = { enabled: null, value: '' };
1258
1258
  this[_g] = { enabled: null, value: '' };
1259
1259
  this[_h] = { enabled: null, value: '' };
1260
- this[_j] = { enabled: null, value: '' };
1261
1260
  this[kFreeze] = freeze;
1262
1261
  }
1263
1262
  setDiskRead(pathname = '', enabled = true) {
@@ -1310,5 +1309,5 @@ class Permission {
1310
1309
  }
1311
1310
  }
1312
1311
  exports.Permission = Permission;
1313
- _f = kDiskRead, _g = kDiskWrite, _h = kUncRead, _j = kUncWrite;
1312
+ _e = kDiskRead, _f = kDiskWrite, _g = kUncRead, _h = kUncWrite;
1314
1313
  PERMISSION = Host.createPermission(true, true);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e-mc/core",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "Core modules for E-mc.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "https://github.com/anpham6/e-mc.git",
12
+ "url": "git+https://github.com/anpham6/e-mc.git",
13
13
  "directory": "src/core"
14
14
  },
15
15
  "keywords": [
@@ -17,11 +17,11 @@
17
17
  "squared-functions"
18
18
  ],
19
19
  "author": "An Pham <anpham6@gmail.com>",
20
- "license": "BSD 3-Clause",
20
+ "license": "MIT",
21
21
  "homepage": "https://github.com/anpham6/e-mc#readme",
22
22
  "dependencies": {
23
- "@e-mc/module": "0.5.3",
24
- "@e-mc/types": "0.5.3",
23
+ "@e-mc/module": "0.5.4",
24
+ "@e-mc/types": "0.5.4",
25
25
  "picomatch": "^2.3.1"
26
26
  }
27
27
  }