@actdim/utico 1.1.1 → 1.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"storeContracts.d.ts","sourceRoot":"","sources":["../../src/store/storeContracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storeContracts.d.ts","sourceRoot":"","sources":["../../src/store/storeContracts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"storeContracts.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/storeContracts.ts"],"sourcesContent":["import { CommonPartFromSchema, KeyPathValueMap } from \"@/typeCore\";\r\nimport * as Dexie from \"dexie\";\r\n\r\n// Making some navigation properties non-enumerable will prevent them from being handled by IndexedDB\r\n// when doing put() or add().\r\n// Object.defineProperties(obj, {\r\n// ...: { value: [], enumerable: false, writable: true }\r\n// });\r\n\r\n// MetadataEntry\r\nexport class MetadataRecord {\r\n key?: string;\r\n createdAt?: number;\r\n updatedAt?: number; // lastModified\r\n tags?: string[];\r\n // timestamp?: number;\r\n // weight?: number;\r\n // score?: number;\r\n // startDate?/endDate?\r\n // validFrom?/validTo?\r\n}\r\n\r\n// DataEntry\r\nexport type DataRecord<TValue = any> = {\r\n key: string;\r\n value: TValue;\r\n}\r\n\r\nexport type StoreItem<T extends MetadataRecord = MetadataRecord, TValue = any> = {\r\n metadata?: T,\r\n data?: DataRecord<TValue>;\r\n}\r\n\r\nexport type ChangeSet<T, TKey = string> = {\r\n key: TKey;\r\n changes: KeyPathValueMap<T>;\r\n}\r\n\r\nexport type BaseMetadataField = keyof MetadataRecord;\r\n// ++: auto-increment primary key\r\n// &: unique\r\n// *: array\r\nexport type FieldDef<T extends string> = T | `&${T}` | `*${T}` | `++${T}`;\r\nexport type BaseFieldDef = FieldDef<BaseMetadataField>;\r\n\r\n// DbFieldTemplate\r\nexport type FieldDefTemplate<T extends string> = FieldDef<T>[];\r\n\r\nexport type IndexableType = Dexie.IndexableTypePart;\r\nexport type IndexableTypeArray = Dexie.IndexableTypeArray;\r\nexport type TransactionMode = Dexie.TransactionMode;\r\nexport type OrderDirection = \"asc\" | \"desc\";\r\n\r\nexport type StoreBase = {\r\n openAsync(): PromiseLike<void>;\r\n}\r\n\r\nexport interface IStoreCollection<T extends MetadataRecord = MetadataRecord, TValue = any> {\r\n\r\n toArrayAsync(orderBy?: keyof T, orderDirection?: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;\r\n\r\n orderByAsync(field: keyof T, direction: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;\r\n\r\n filter<S extends T>(filter: (x: T) => x is S): IStoreCollection<S, TValue>;\r\n\r\n limit(n: number): IStoreCollection<T, TValue>;\r\n\r\n offset(n: number): IStoreCollection<T, TValue>;\r\n\r\n getKeysAsync(): Promise<T[\"key\"][]>;\r\n\r\n getCountAsync(): Promise<number>;\r\n\r\n modifyMetadataAsync(callback: (metadataRecord: T) => void, transactionMode?: TransactionMode): Promise<number>;\r\n\r\n modifyDataAsync(callback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;\r\n\r\n modifyAsync(metadataCallback: (metadataRecord: T) => void, dataCallback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;\r\n}\r\n\r\n// IKVStore\r\nexport interface IPersistentStore<T extends MetadataRecord = MetadataRecord> {\r\n\r\n openAsync(): Promise<void>;\r\n\r\n getKeysAsync(): Promise<string[]>;\r\n\r\n containsAsync(key: string): Promise<boolean>;\r\n\r\n deleteAsync(key: string): Promise<void>;\r\n\r\n bulkDeleteAsync(keys: string[]): Promise<void>;\r\n\r\n clearAsync(): Promise<void>;\r\n\r\n getAsync<TValue = any>(key: string): Promise<StoreItem<T, TValue>>;\r\n\r\n setAsync<TValue = any>(metadataRecord: T, value: TValue): Promise<string>;\r\n\r\n getOrSetAsync<TValue = any>(metadataRecord: MetadataRecord, factory: (metadataRecord: MetadataRecord) => TValue): Promise<StoreItem<T, TValue>>\r\n\r\n bulkGetAsync<TValue = any>(keys: string[]): Promise<StoreItem<T, TValue>[]>;\r\n\r\n bulkSetAsync<TValue = any>(metadataRecords: MetadataRecord[], dataRecords: DataRecord<TValue>[]): Promise<string[]>;\r\n\r\n dispose(): void;\r\n}"],"names":["MetadataRecord"],"mappings":"AAUO,MAAMA,EAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMJ;"}
1
+ {"version":3,"file":"storeContracts.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/storeContracts.ts"],"sourcesContent":["import { CommonPartFromSchema, KeyPathValueMap } from \"@/typeCore\";\r\nimport * as Dexie from \"dexie\";\r\n\r\n// Making some navigation properties non-enumerable will prevent them from being handled by IndexedDB\r\n// when doing put() or add().\r\n// Object.defineProperties(obj, {\r\n// ...: { value: [], enumerable: false, writable: true }\r\n// });\r\n\r\n// MetadataEntry\r\nexport class MetadataRecord {\r\n key?: string;\r\n createdAt?: number;\r\n updatedAt?: number; // lastModified\r\n tags?: string[];\r\n // timestamp?: number;\r\n // weight?: number;\r\n // score?: number;\r\n // startDate?/endDate?\r\n // validFrom?/validTo?\r\n}\r\n\r\n// DataEntry\r\nexport type DataRecord<TValue = any> = {\r\n key: string;\r\n value: TValue;\r\n}\r\n\r\nexport type StoreItem<T extends MetadataRecord = MetadataRecord, TValue = any> = {\r\n metadata?: T,\r\n data?: DataRecord<TValue>;\r\n}\r\n\r\nexport type ChangeSet<T, TKey = string> = {\r\n key: TKey;\r\n changes: KeyPathValueMap<T>;\r\n}\r\n\r\nexport type BaseMetadataField = keyof MetadataRecord;\r\n// ++: auto-increment primary key\r\n// &: unique\r\n// *: array\r\nexport type FieldDef<T extends string> = T | `&${T}` | `*${T}` | `++${T}`;\r\nexport type BaseFieldDef = FieldDef<BaseMetadataField>;\r\n\r\n// DbFieldTemplate\r\nexport type FieldDefTemplate<T extends string> = FieldDef<T>[];\r\n\r\nexport type IndexableType = Dexie.IndexableTypePart;\r\nexport type IndexableTypeArray = Dexie.IndexableTypeArray;\r\nexport type TransactionMode = Dexie.TransactionMode;\r\nexport type OrderDirection = \"asc\" | \"desc\";\r\n\r\nexport type StoreBase = {\r\n open(): PromiseLike<void>;\r\n}\r\n\r\nexport interface IStoreCollection<T extends MetadataRecord = MetadataRecord, TValue = any> {\r\n\r\n toArray(orderBy?: keyof T, orderDirection?: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;\r\n\r\n orderBy(field: keyof T, direction: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;\r\n\r\n filter<S extends T>(filter: (x: T) => x is S): IStoreCollection<S, TValue>;\r\n\r\n limit(n: number): IStoreCollection<T, TValue>;\r\n\r\n offset(n: number): IStoreCollection<T, TValue>;\r\n\r\n getKeys(): Promise<T[\"key\"][]>;\r\n\r\n getCount(): Promise<number>;\r\n\r\n modifyMetadata(callback: (metadataRecord: T) => void, transactionMode?: TransactionMode): Promise<number>;\r\n\r\n modifyData(callback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;\r\n\r\n modify(metadataCallback: (metadataRecord: T) => void, dataCallback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;\r\n}\r\n\r\n// IKVStore\r\nexport interface IPersistentStore<T extends MetadataRecord = MetadataRecord> {\r\n\r\n open(): Promise<void>;\r\n\r\n getKeys(): Promise<string[]>;\r\n\r\n contains(key: string): Promise<boolean>;\r\n\r\n delete(key: string): Promise<void>;\r\n\r\n bulkDelete(keys: string[]): Promise<void>;\r\n\r\n clear(): Promise<void>;\r\n\r\n get<TValue = any>(key: string): Promise<StoreItem<T, TValue>>;\r\n\r\n set<TValue = any>(metadataRecord: T, value: TValue): Promise<string>;\r\n\r\n getOrSet<TValue = any>(metadataRecord: MetadataRecord, factory: (metadataRecord: MetadataRecord) => TValue): Promise<StoreItem<T, TValue>>\r\n\r\n bulkGet<TValue = any>(keys: string[]): Promise<StoreItem<T, TValue>[]>;\r\n\r\n bulkSet<TValue = any>(metadataRecords: MetadataRecord[], dataRecords: DataRecord<TValue>[]): Promise<string[]>;\r\n\r\n [Symbol.dispose]: () => void;\r\n}"],"names":["MetadataRecord"],"mappings":"AAUO,MAAMA,EAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMJ;"}
@@ -1,6 +1,6 @@
1
1
  import { AsyncMutex as h } from "../asyncMutex.es.js";
2
2
  import * as s from "dexie";
3
- const r = "metadata", o = "data", y = ["&key", "value"], d = new h();
3
+ const o = "metadata", c = "data", l = ["&key", "value"], d = new h();
4
4
  class i extends s.Dexie {
5
5
  // catalog/registry
6
6
  metadata;
@@ -12,58 +12,58 @@ class i extends s.Dexie {
12
12
  super(t), this._isDisposed = !1;
13
13
  const e = this;
14
14
  e.version(1).stores({
15
- [r]: a.join(", "),
16
- [o]: y.join(", ")
17
- }), this.metadata = e.table(r), this.data = e.table(o), this.metadata.hook("creating", (n, c) => {
18
- c.createdAt = Date.now();
19
- }), this.metadata.hook("updating", (n, c, l) => ({ ...n, updatedAt: Date.now() }));
15
+ [o]: a.join(", "),
16
+ [c]: l.join(", ")
17
+ }), this.metadata = e.table(o), this.data = e.table(c), this.metadata.hook("creating", (r, n) => {
18
+ n.createdAt = Date.now();
19
+ }), this.metadata.hook("updating", (r, n, w) => ({ ...r, updatedAt: Date.now() }));
20
20
  }
21
- dispose() {
21
+ [Symbol.dispose]() {
22
22
  this._isDisposed || (this.isOpen() && this.close(), this._isDisposed = !0);
23
23
  }
24
- async openAsync() {
25
- if (!this.isOpen())
26
- try {
27
- await this.open();
28
- } catch (t) {
29
- if (t instanceof s.Dexie.OpenFailedError)
30
- await this.open();
31
- else
32
- throw t;
33
- }
24
+ async open() {
25
+ if (this.isOpen())
26
+ return this;
27
+ try {
28
+ return await super.open();
29
+ } catch (t) {
30
+ if (t instanceof s.Dexie.OpenFailedError)
31
+ return await super.open();
32
+ throw t;
33
+ }
34
34
  }
35
- async execAsync(t, a = "r!") {
36
- await this.openAsync();
35
+ async exec(t, a = "r!") {
36
+ await this.open();
37
37
  try {
38
38
  return await this.transaction(a, this.metadata, this.data, async () => await t());
39
39
  } catch (e) {
40
40
  throw this.isOpen(), e;
41
41
  }
42
42
  }
43
- async getKeysAsync() {
43
+ async getKeys() {
44
44
  return this.metadata.toCollection().primaryKeys();
45
45
  }
46
- async containsAsync(t, a = "r") {
47
- return await this.execAsync(async () => await this.metadata.get(t) !== void 0, a);
46
+ async contains(t, a = "r") {
47
+ return await this.exec(async () => await this.metadata.get(t) !== void 0, a);
48
48
  }
49
- async deleteAsync(t, a = "rw") {
50
- await this.execAsync(async () => {
49
+ async deleteOne(t, a = "rw") {
50
+ await this.exec(async () => {
51
51
  await this.metadata.delete(t), await this.data.delete(t);
52
52
  }, a);
53
53
  }
54
54
  // deleteManyAsync
55
- async bulkDeleteAsync(t, a = "rw") {
56
- await this.execAsync(async () => {
55
+ async bulkDelete(t, a = "rw") {
56
+ await this.exec(async () => {
57
57
  await this.metadata.bulkDelete(t), await this.data.bulkDelete(t);
58
58
  }, a);
59
59
  }
60
- // clearAllAsync
61
- async clearAsync(t = "rw") {
62
- await this.execAsync(async () => {
60
+ // clearAll
61
+ async clear(t = "rw") {
62
+ await this.exec(async () => {
63
63
  await this.metadata.clear(), await this.data.clear();
64
64
  }, t);
65
65
  }
66
- static async deleteAsync(t) {
66
+ static async delete(t) {
67
67
  try {
68
68
  await d.dispatch(async () => {
69
69
  await i.exists(t) && await i.delete(t);
@@ -75,13 +75,13 @@ class i extends s.Dexie {
75
75
  throw a;
76
76
  }
77
77
  }
78
- static existsAsync(t) {
78
+ static exists(t) {
79
79
  return s.Dexie.exists(t);
80
80
  }
81
- static async openAsync(t, a) {
81
+ static async open(t, a) {
82
82
  return await d.dispatch(async () => {
83
83
  const e = a(t);
84
- return await e.openAsync(), e;
84
+ return await e.open(), e;
85
85
  });
86
86
  }
87
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storeDb.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/storeDb.ts"],"sourcesContent":["import { AsyncMutex } from \"@/asyncMutex\";\r\nimport { DataRecord, FieldDefTemplate, MetadataRecord, StoreBase, TransactionMode } from \"./storeContracts\";\r\nimport * as Dexie from \"dexie\";\r\n\r\nconst metadataTableName = \"metadata\";\r\nconst dataTableName = \"data\";\r\nconst dataFieldDefTemplate: FieldDefTemplate<keyof DataRecord> = [\"&key\", \"value\"];\r\n\r\nconst mutex = new AsyncMutex();\r\n\r\nexport class StoreDb<T extends MetadataRecord = MetadataRecord> extends Dexie.Dexie {\r\n // catalog/registry\r\n metadata: Dexie.Table<T, string>;\r\n data: Dexie.Table<DataRecord, string>;\r\n\r\n protected _isDisposed: boolean;\r\n\r\n constructor(name: string, metadataFieldDefTemplate: keyof T extends string ? FieldDefTemplate<keyof T> : never) {\r\n // navigator.storage.estimate()\r\n // navigator.webkitTemporaryStorage.queryUsageAndQuota()\r\n\r\n if (!name) {\r\n throw new Error(\"Invalid database name.\"); // cannot be empty\r\n }\r\n\r\n super(name); // {autoOpen: false}\r\n\r\n this._isDisposed = false;\r\n\r\n const db = this;\r\n\r\n db.version(1).stores({\r\n [metadataTableName]: metadataFieldDefTemplate.join(\", \"),\r\n [dataTableName]: dataFieldDefTemplate.join(\", \")\r\n });\r\n\r\n // db.version(2).stores({\r\n // \t// ...\r\n // }).upgrade(trans => {\r\n // \treturn trans.table(dataTableName).toCollection().modify((entry: MetadataRecord) => {\r\n // \t\t// ...\r\n // \t});\r\n // });\r\n\r\n this.metadata = db.table(metadataTableName);\r\n this.data = db.table(dataTableName);\r\n\r\n this.metadata.hook('creating', (key, obj) => {\r\n obj.createdAt = Date.now();\r\n });\r\n\r\n this.metadata.hook('updating', (mods, key, obj) => {\r\n return { ...mods, updatedAt: Date.now() };\r\n });\r\n\r\n // additional way to handle relationships\r\n // this.metadata.hook(\"deleting\", (key, obj, transaction) => {\r\n // // only synchronous code!\r\n // transaction.table(dataTableName).delete(key);\r\n // });\r\n\r\n // this.metadata.mapToClass(MetadataRecord);\r\n // this.data.mapToClass(DataRecord);\r\n\r\n // this.on('populate', () => db.metadata.bulkAdd([\r\n // \t// ...\r\n // ]));\r\n }\r\n\r\n dispose() {\r\n if (!this._isDisposed) {\r\n if (this.isOpen()) {\r\n this.close();\r\n }\r\n this._isDisposed = true;\r\n }\r\n }\r\n\r\n async openAsync() {\r\n if (!this.isOpen()) {\r\n try {\r\n await this.open();\r\n } catch (err) {\r\n if (err instanceof Dexie.Dexie.OpenFailedError) {\r\n await this.open();\r\n } else {\r\n throw err;\r\n }\r\n }\r\n // TODO: log (this.verno, this._dbSchema etc)\r\n }\r\n }\r\n\r\n async execAsync<T>(\r\n action: () => Promise<T>, // scope\r\n transactionMode: TransactionMode = \"r!\") {\r\n await this.openAsync();\r\n try {\r\n const result = await this.transaction(transactionMode, this.metadata, this.data, async () => {\r\n return await action();\r\n });\r\n return result;\r\n } catch (err) {\r\n if (this.isOpen()) {\r\n // this._db.close(); // generally speaking: we don't (never) need to close a connection\r\n }\r\n throw err;\r\n }\r\n }\r\n\r\n async getKeysAsync() {\r\n return this.metadata.toCollection().primaryKeys();\r\n }\r\n\r\n async containsAsync(key: string, transactionMode: TransactionMode = \"r\") {\r\n return await this.execAsync(async () => {\r\n const metadataRecord = await this.metadata.get(key);\r\n return metadataRecord !== undefined;\r\n }, transactionMode);\r\n }\r\n\r\n async deleteAsync(key: string, transactionMode: TransactionMode = \"rw\") {\r\n await this.execAsync(async () => {\r\n await this.metadata.delete(key);\r\n await this.data.delete(key);\r\n }, transactionMode);\r\n }\r\n\r\n // deleteManyAsync\r\n async bulkDeleteAsync(keys: string[], transactionMode: TransactionMode = \"rw\") {\r\n await this.execAsync(async () => {\r\n await this.metadata.bulkDelete(keys);\r\n await this.data.bulkDelete(keys);\r\n }, transactionMode);\r\n }\r\n\r\n // clearAllAsync\r\n async clearAsync(transactionMode: TransactionMode = \"rw\") {\r\n await this.execAsync(async () => {\r\n await this.metadata.clear();\r\n await this.data.clear();\r\n }, transactionMode);\r\n }\r\n\r\n static async deleteAsync(name: string) {\r\n try {\r\n await mutex.dispatch(async () => {\r\n if (await StoreDb.exists(name)) {\r\n await StoreDb.delete(name);\r\n }\r\n });\r\n } catch (err) {\r\n if (err instanceof Dexie.Dexie.InvalidStateError || err instanceof Dexie.Dexie.VersionError) {\r\n console.warn(`[DataStore] delete(${name}) failed:`, err);\r\n } else {\r\n throw err;\r\n }\r\n }\r\n }\r\n\r\n static existsAsync(name: string) {\r\n return Dexie.Dexie.exists(name);\r\n }\r\n\r\n static async openAsync<T extends StoreBase>(name: string, factory: (name: string) => T) {\r\n return await mutex.dispatch(async () => {\r\n const store = factory(name);\r\n await store.openAsync();\r\n return store;\r\n });\r\n }\r\n}"],"names":["metadataTableName","dataTableName","dataFieldDefTemplate","mutex","AsyncMutex","StoreDb","Dexie","name","metadataFieldDefTemplate","db","key","obj","mods","err","action","transactionMode","keys","factory","store"],"mappings":"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"}
1
+ {"version":3,"file":"storeDb.es.js","sources":["D:/Src/my/actdim/public/utico/src/store/storeDb.ts"],"sourcesContent":["import { AsyncMutex } from \"@/asyncMutex\";\r\nimport { DataRecord, FieldDefTemplate, MetadataRecord, StoreBase, TransactionMode } from \"./storeContracts\";\r\nimport * as Dexie from \"dexie\";\r\n\r\nconst metadataTableName = \"metadata\";\r\nconst dataTableName = \"data\";\r\nconst dataFieldDefTemplate: FieldDefTemplate<keyof DataRecord> = [\"&key\", \"value\"];\r\n\r\nconst mutex = new AsyncMutex();\r\n\r\nexport class StoreDb<T extends MetadataRecord = MetadataRecord> extends Dexie.Dexie {\r\n // catalog/registry\r\n metadata: Dexie.Table<T, string>;\r\n data: Dexie.Table<DataRecord, string>;\r\n\r\n protected _isDisposed: boolean;\r\n\r\n constructor(name: string, metadataFieldDefTemplate: keyof T extends string ? FieldDefTemplate<keyof T> : never) {\r\n // navigator.storage.estimate()\r\n // navigator.webkitTemporaryStorage.queryUsageAndQuota()\r\n\r\n if (!name) {\r\n throw new Error(\"Invalid database name.\"); // cannot be empty\r\n }\r\n\r\n super(name); // {autoOpen: false}\r\n\r\n this._isDisposed = false;\r\n\r\n const db = this;\r\n\r\n db.version(1).stores({\r\n [metadataTableName]: metadataFieldDefTemplate.join(\", \"),\r\n [dataTableName]: dataFieldDefTemplate.join(\", \")\r\n });\r\n\r\n // db.version(2).stores({\r\n // \t// ...\r\n // }).upgrade(trans => {\r\n // \treturn trans.table(dataTableName).toCollection().modify((entry: MetadataRecord) => {\r\n // \t\t// ...\r\n // \t});\r\n // });\r\n\r\n this.metadata = db.table(metadataTableName);\r\n this.data = db.table(dataTableName);\r\n\r\n this.metadata.hook('creating', (key, obj) => {\r\n obj.createdAt = Date.now();\r\n });\r\n\r\n this.metadata.hook('updating', (mods, key, obj) => {\r\n return { ...mods, updatedAt: Date.now() };\r\n });\r\n\r\n // additional way to handle relationships\r\n // this.metadata.hook(\"deleting\", (key, obj, transaction) => {\r\n // // only synchronous code!\r\n // transaction.table(dataTableName).delete(key);\r\n // });\r\n\r\n // this.metadata.mapToClass(MetadataRecord);\r\n // this.data.mapToClass(DataRecord);\r\n\r\n // this.on('populate', () => db.metadata.bulkAdd([\r\n // \t// ...\r\n // ]));\r\n }\r\n\r\n [Symbol.dispose]() {\r\n if (!this._isDisposed) {\r\n if (this.isOpen()) {\r\n this.close();\r\n }\r\n this._isDisposed = true;\r\n }\r\n }\r\n\r\n async open() {\r\n if (this.isOpen()) {\r\n return this;\r\n }\r\n try {\r\n return await super.open();\r\n } catch (err) {\r\n if (err instanceof Dexie.Dexie.OpenFailedError) {\r\n return await super.open();\r\n } else {\r\n throw err;\r\n }\r\n }\r\n // TODO: log (this.verno, this._dbSchema etc)\r\n\r\n }\r\n\r\n async exec<T>(\r\n action: () => Promise<T>, // scope\r\n transactionMode: TransactionMode = \"r!\") {\r\n await this.open();\r\n try {\r\n const result = await this.transaction(transactionMode, this.metadata, this.data, async () => {\r\n return await action();\r\n });\r\n return result;\r\n } catch (err) {\r\n if (this.isOpen()) {\r\n // this._db.close(); // generally speaking: we don't (never) need to close a connection\r\n }\r\n throw err;\r\n }\r\n }\r\n\r\n async getKeys() {\r\n return this.metadata.toCollection().primaryKeys();\r\n }\r\n\r\n async contains(key: string, transactionMode: TransactionMode = \"r\") {\r\n return await this.exec(async () => {\r\n const metadataRecord = await this.metadata.get(key);\r\n return metadataRecord !== undefined;\r\n }, transactionMode);\r\n }\r\n\r\n async deleteOne(key: string, transactionMode: TransactionMode = \"rw\") {\r\n await this.exec(async () => {\r\n await this.metadata.delete(key);\r\n await this.data.delete(key);\r\n }, transactionMode);\r\n }\r\n\r\n // deleteManyAsync\r\n async bulkDelete(keys: string[], transactionMode: TransactionMode = \"rw\") {\r\n await this.exec(async () => {\r\n await this.metadata.bulkDelete(keys);\r\n await this.data.bulkDelete(keys);\r\n }, transactionMode);\r\n }\r\n\r\n // clearAll\r\n async clear(transactionMode: TransactionMode = \"rw\") {\r\n await this.exec(async () => {\r\n await this.metadata.clear();\r\n await this.data.clear();\r\n }, transactionMode);\r\n }\r\n\r\n static async delete(name: string) {\r\n try {\r\n await mutex.dispatch(async () => {\r\n if (await StoreDb.exists(name)) {\r\n await StoreDb.delete(name);\r\n }\r\n });\r\n } catch (err) {\r\n if (err instanceof Dexie.Dexie.InvalidStateError || err instanceof Dexie.Dexie.VersionError) {\r\n console.warn(`[DataStore] delete(${name}) failed:`, err);\r\n } else {\r\n throw err;\r\n }\r\n }\r\n }\r\n\r\n static exists(name: string) {\r\n return Dexie.Dexie.exists(name);\r\n }\r\n\r\n static async open<T extends StoreBase>(name: string, factory: (name: string) => T) {\r\n return await mutex.dispatch(async () => {\r\n const store = factory(name);\r\n await store.open();\r\n return store;\r\n });\r\n }\r\n}"],"names":["metadataTableName","dataTableName","dataFieldDefTemplate","mutex","AsyncMutex","StoreDb","Dexie","name","metadataFieldDefTemplate","db","key","obj","mods","err","action","transactionMode","keys","factory","store"],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export declare const normalize: (v: number) => number;
2
2
  export declare function numericOr(...values: number[]): number;
3
3
  export declare const buildFuncArgCacheKey: (...args: any[]) => string;
4
- export declare const delayAsync: (ms: number) => Promise<void>;
5
- export declare const delayErrorAsync: (ms: number, errFactory?: () => Error) => Promise<never>;
6
- export declare function withTimeoutAsync<T>(promise: Promise<T>, ms: number): Promise<T>;
4
+ export declare const delay: (ms: number) => Promise<void>;
5
+ export declare const delayError: (ms: number, errFactory?: () => Error) => Promise<never>;
6
+ export declare function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T>;
7
7
  export declare function searchTree<T>(treeNodes: T[], predicate: (item: T) => boolean, childSelector: (item: T) => T[]): any;
8
8
  export declare const suppressConsole: (action: () => void) => {
9
9
  method: keyof Console;
@@ -13,4 +13,5 @@ export declare function removePrefix(str: string, prefixes: string[]): string;
13
13
  export declare function removeSuffix(str: string, suffixes: string[]): string;
14
14
  export declare function memoEffect<TDep, TResult>(getValue: () => TDep, callback: (v: TDep) => TResult, comparator?: (a: TDep, b: TDep) => boolean): () => TResult;
15
15
  export declare function lazy<T>(factory: () => T): () => T;
16
+ export declare function makeNonEnumerable<T>(obj: T, propertyNames: (keyof T)[]): void;
16
17
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAAiC,CAAC;AAGrE,wBAAgB,SAAS,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,UAO5C;AAGD,eAAO,MAAM,oBAAoB,YAEZ,GAAG,EAAE,WAiBtB,CAAC;AAEL,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,kBAEpC,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,EAAE,aAAa,MAAM,KAAK,mBAWnE,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAS/E;AAQD,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAc7G;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,IAAI;YAGlC,MAAM,OAAO;UACf,GAAG,EAAE;GAoBlB,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAapE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAapE;AAKD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EACpC,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,EAC9B,UAAU,GAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,KAAK,OAA2B,iBAchE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAWjD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,WAAiC,CAAC;AAGrE,wBAAgB,SAAS,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,UAO5C;AAGD,eAAO,MAAM,oBAAoB,YAEZ,GAAG,EAAE,WAiBtB,CAAC;AAEL,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,kBAE/B,CAAC;AAGF,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,EAAE,aAAa,MAAM,KAAK,mBAW9D,CAAC;AAEF,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAS1E;AAQD,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAc7G;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,IAAI;YAGlC,MAAM,OAAO;UACf,GAAG,EAAE;GAoBlB,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAapE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAapE;AAKD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EACpC,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,EAC9B,UAAU,GAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,KAAK,OAA2B,iBAchE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAWjD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,QAQtE"}
package/dist/utils.es.js CHANGED
@@ -1,109 +1,118 @@
1
- import { v4 as f } from "uuid";
1
+ import { v4 as s } from "uuid";
2
2
  const a = (e) => !e || !isFinite(e) ? 0 : e;
3
3
  function m(...e) {
4
- for (const o of e)
5
- if (o != null)
6
- return o;
4
+ for (const t of e)
5
+ if (t != null)
6
+ return t;
7
7
  }
8
- const d = /* @__PURE__ */ (() => {
8
+ const p = /* @__PURE__ */ (() => {
9
9
  const e = /* @__PURE__ */ new WeakMap();
10
- return (...o) => {
11
- const r = [];
12
- for (const n of o) {
13
- let t;
14
- typeof n == "number" || typeof n == "string" || typeof n == "boolean" || n == null ? t = "" + n : (t = e.get(n), t || (t = f(), e.set(n, t))), r.push(t);
10
+ return (...t) => {
11
+ const n = [];
12
+ for (const o of t) {
13
+ let r;
14
+ typeof o == "number" || typeof o == "string" || typeof o == "boolean" || o == null ? r = "" + o : (r = e.get(o), r || (r = s(), e.set(o, r))), n.push(r);
15
15
  }
16
- return `"${r.join("/")}"`;
16
+ return `"${n.join("/")}"`;
17
17
  };
18
- })(), y = (e) => new Promise((o) => setTimeout(o, e)), u = (e, o) => new Promise(
19
- (r, n) => setTimeout(
18
+ })(), d = (e) => new Promise((t) => setTimeout(t, e)), u = (e, t) => new Promise(
19
+ (n, o) => setTimeout(
20
20
  () => {
21
- const t = o ? o() : new Error("Timeout exceeded");
22
- n(t);
21
+ const r = t ? t() : new Error("Timeout exceeded");
22
+ o(r);
23
23
  },
24
24
  e
25
25
  )
26
26
  );
27
- function h(e, o) {
28
- return Promise.race([u(o), e]);
27
+ function y(e, t) {
28
+ return Promise.race([u(t), e]);
29
29
  }
30
- function c(e, o, r) {
30
+ function c(e, t, n) {
31
31
  if (e)
32
- for (const n of e) {
33
- if (o(n))
34
- return n;
35
- const t = c(r(n), o, r);
36
- if (t)
37
- return t;
32
+ for (const o of e) {
33
+ if (t(o))
34
+ return o;
35
+ const r = c(n(o), t, n);
36
+ if (r)
37
+ return r;
38
38
  }
39
39
  }
40
- const p = (e) => {
41
- const o = {}, r = [], n = [
40
+ const h = (e) => {
41
+ const t = {}, n = [], o = [
42
42
  "log"
43
43
  /*, "debug", "warn", "info"*/
44
44
  ];
45
- for (const t of n)
46
- o[t] = console[t], console[t] = function(...i) {
47
- r.push({
48
- method: t,
45
+ for (const r of o)
46
+ t[r] = console[r], console[r] = function(...i) {
47
+ n.push({
48
+ method: r,
49
49
  args: i
50
50
  });
51
51
  };
52
52
  try {
53
53
  e();
54
54
  } finally {
55
- for (const t of n)
56
- console[t] = o[t];
55
+ for (const r of o)
56
+ console[r] = t[r];
57
57
  }
58
- return r;
58
+ return n;
59
59
  };
60
- function v(e, o) {
61
- let r = !0;
62
- for (; r; ) {
63
- r = !1;
64
- for (const n of o)
65
- if (n && e.startsWith(n)) {
66
- e = e.slice(n.length), r = !0;
60
+ function v(e, t) {
61
+ let n = !0;
62
+ for (; n; ) {
63
+ n = !1;
64
+ for (const o of t)
65
+ if (o && e.startsWith(o)) {
66
+ e = e.slice(o.length), n = !0;
67
67
  break;
68
68
  }
69
69
  }
70
70
  return e;
71
71
  }
72
- function k(e, o) {
73
- let r = !0;
74
- for (; r; ) {
75
- r = !1;
76
- for (const n of o)
77
- if (n && e.endsWith(n)) {
78
- e = e.slice(0, -n.length), r = !0;
72
+ function k(e, t) {
73
+ let n = !0;
74
+ for (; n; ) {
75
+ n = !1;
76
+ for (const o of t)
77
+ if (o && e.endsWith(o)) {
78
+ e = e.slice(0, -o.length), n = !0;
79
79
  break;
80
80
  }
81
81
  }
82
82
  return e;
83
83
  }
84
- function g(e, o, r = (n, t) => n === t) {
85
- let n, t = !1, i;
84
+ function b(e, t, n = (o, r) => o === r) {
85
+ let o, r = !1, i;
86
86
  return () => {
87
- const s = e();
88
- return (!t || !r(s, n)) && (n = s, t = !0, i = o(s)), i;
87
+ const f = e();
88
+ return (!r || !n(f, o)) && (o = f, r = !0, i = t(f)), i;
89
89
  };
90
90
  }
91
- function w(e) {
92
- let o, r = !1;
93
- return () => (r || (o = e(), r = !0), o);
91
+ function g(e) {
92
+ let t, n = !1;
93
+ return () => (n || (t = e(), n = !0), t);
94
+ }
95
+ function w(e, t) {
96
+ let n = {};
97
+ for (const o of t)
98
+ n[o] = {
99
+ enumerable: !1
100
+ };
101
+ Object.defineProperties(e, n);
94
102
  }
95
103
  export {
96
- d as buildFuncArgCacheKey,
97
- y as delayAsync,
98
- u as delayErrorAsync,
99
- w as lazy,
100
- g as memoEffect,
104
+ p as buildFuncArgCacheKey,
105
+ d as delay,
106
+ u as delayError,
107
+ g as lazy,
108
+ w as makeNonEnumerable,
109
+ b as memoEffect,
101
110
  a as normalize,
102
111
  m as numericOr,
103
112
  v as removePrefix,
104
113
  k as removeSuffix,
105
114
  c as searchTree,
106
- p as suppressConsole,
107
- h as withTimeoutAsync
115
+ h as suppressConsole,
116
+ y as withTimeout
108
117
  };
109
118
  //# sourceMappingURL=utils.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.es.js","sources":["D:/Src/my/actdim/public/utico/src/utils.ts"],"sourcesContent":["import { v4 as uuid } from \"uuid\";\r\n\r\n// @filename: util.ts\r\n\r\n// export function guid() {\r\n// function s4() {\r\n// return Math.floor((1 + Math.random()) * 0x10000)\r\n// .toString(16)\r\n// .substring(1);\r\n// }\r\n// return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\r\n// }\r\n\r\nexport const normalize = (v: number) => (!v || !isFinite(v) ? 0 : v);\r\n\r\n// numericalOr\r\nexport function numericOr(...values: number[]) {\r\n for (const value of values) {\r\n if (value != undefined) {\r\n return value;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n// funcArgCacheKeyResolver(Provider/Builder)\r\nexport const buildFuncArgCacheKey = (() => {\r\n const weakMap = new WeakMap<any, string>();\r\n return (...args: any[]) => {\r\n const keys: string[] = [];\r\n for (const arg of args) {\r\n let key: string = undefined;\r\n if (typeof arg === \"number\" || typeof arg === \"string\" || typeof arg === \"boolean\" || arg == undefined) {\r\n key = \"\" + arg;\r\n } else {\r\n key = weakMap.get(arg);\r\n if (!key) {\r\n key = uuid();\r\n weakMap.set(arg, key);\r\n }\r\n }\r\n keys.push(key);\r\n }\r\n return `\"${keys.join(\"/\")}\"`;\r\n };\r\n})();\r\n\r\nexport const delayAsync = (ms: number) => {\r\n return new Promise<void>((resolve) => setTimeout(resolve, ms));\r\n};\r\n\r\n// scheduleErrorAsync\r\nexport const delayErrorAsync = (ms: number, errFactory?: () => Error) => {\r\n return new Promise<never>((_, reject) =>\r\n setTimeout(\r\n () => {\r\n // Do not throw!\r\n const err = errFactory ? errFactory() : new Error(\"Timeout exceeded\");\r\n reject(err);\r\n },\r\n ms\r\n )\r\n );\r\n};\r\n\r\nexport function withTimeoutAsync<T>(promise: Promise<T>, ms: number): Promise<T> {\r\n // return new Promise((resolve, reject) => {\r\n // const timer = setTimeout(() => reject(new Error('Timeout exceeded')), ms);\r\n // promise.then((value) => {\r\n // clearTimeout(timer);\r\n // resolve(value);\r\n // }, reject);\r\n // });\r\n return Promise.race([delayErrorAsync(ms), promise]);\r\n}\r\n\r\n/**\r\n * Search node in a tree\r\n * @param predicate filter\r\n * @param childSelector\r\n * @param treeNodes\r\n */\r\nexport function searchTree<T>(treeNodes: T[], predicate: (item: T) => boolean, childSelector: (item: T) => T[]) {\r\n if (!treeNodes) {\r\n return undefined;\r\n }\r\n for (const treeNode of treeNodes) {\r\n if (predicate(treeNode)) {\r\n return treeNode;\r\n }\r\n const node = searchTree(childSelector(treeNode), predicate, childSelector);\r\n if (node) {\r\n return node;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const suppressConsole = (action: () => void) => {\r\n const origConsole: any = {};\r\n const result: {\r\n method: keyof Console;\r\n args: any[];\r\n }[] = [];\r\n const keys: (keyof Console)[] = [\"log\" /*, \"debug\", \"warn\", \"info\"*/];\r\n for (const key of keys) {\r\n origConsole[key] = console[key];\r\n console[key] = function (...args: any[]) {\r\n result.push({\r\n method: key,\r\n args: args\r\n });\r\n } as any;\r\n }\r\n try {\r\n action();\r\n } finally {\r\n for (const key of keys) {\r\n console[key] = origConsole[key];\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport function removePrefix(str: string, prefixes: string[]): string {\r\n let removed = true;\r\n while (removed) {\r\n removed = false;\r\n for (const prefix of prefixes) {\r\n if (prefix && str.startsWith(prefix)) {\r\n str = str.slice(prefix.length);\r\n removed = true;\r\n break;\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\nexport function removeSuffix(str: string, suffixes: string[]): string {\r\n let removed = true;\r\n while (removed) {\r\n removed = false;\r\n for (const suffix of suffixes) {\r\n if (suffix && str.endsWith(suffix)) {\r\n str = str.slice(0, -suffix.length);\r\n removed = true;\r\n break;\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// another comparator example\r\n// const deepEqual = (a: any, b: any) => JSON.stringify(a) === JSON.stringify(b);\r\n// depEffect\r\nexport function memoEffect<TDep, TResult>(\r\n getValue: () => TDep, // getDep\r\n callback: (v: TDep) => TResult, // onChange/action\r\n comparator: (a: TDep, b: TDep) => boolean = (a, b) => a === b // equals\r\n) {\r\n let val: TDep | undefined;\r\n let initialized = false;\r\n let retVal: TResult;\r\n return () => {\r\n const next = getValue();\r\n if (!initialized || !comparator(next, val!)) {\r\n val = next;\r\n initialized = true;\r\n retVal = callback(next);\r\n }\r\n return retVal;\r\n };\r\n}\r\n\r\nexport function lazy<T>(factory: () => T): () => T {\r\n let instance: T | undefined;\r\n let initialized = false;\r\n\r\n return () => {\r\n if (!initialized) {\r\n instance = factory();\r\n initialized = true;\r\n }\r\n return instance!;\r\n };\r\n}\r\n\r\n// TODO:\r\n/*\r\nfunction getMetadata<T>(\r\n store: WeakMap<object, Map<PropertyKey, T>>,\r\n target: object,\r\n prop: PropertyKey,\r\n): T | undefined {\r\n return store.get(target)?.get(prop) as T | undefined;\r\n}\r\n\r\nfunction setMetadata<T>(\r\n store: WeakMap<object, Map<PropertyKey, T>>,\r\n target: object,\r\n prop: PropertyKey,\r\n value: T,\r\n) {\r\n let propMap = store.get(target);\r\n if (!propMap) {\r\n propMap = new Map();\r\n store.set(target, propMap);\r\n }\r\n propMap.set(prop, value);\r\n}\r\n\r\nfunction hasMetadata(\r\n store: WeakMap<object, Map<PropertyKey, any>>,\r\n target: object,\r\n prop: PropertyKey,\r\n): boolean {\r\n return store.get(target)?.has(prop) ?? false;\r\n}\r\n*/\r\n\r\n/*\r\nexport function memoizeThrottle<T extends Func>(\r\n func: T,\r\n wait = 0,\r\n options?: Parameters<typeof _.throttle<T>>[2],\r\n resolver?: Parameters<typeof _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.throttle<T>>>>[1]\r\n) {\r\n const mem = _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.throttle<T>>>(() => {\r\n return _.throttle<T>(func, wait, options);\r\n }, resolver);\r\n\r\n return (...args: Parameters<T>) => {\r\n return mem(...args)(...args);\r\n };\r\n}\r\n\r\nexport function memoizeDebounce<T extends Func>(\r\n func: T,\r\n wait = 0,\r\n options?: Parameters<typeof _.debounce<T>>[2],\r\n resolver?: Parameters<typeof _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.debounce<T>>>>[1]\r\n) {\r\n const mem = _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.debounce<T>>>(() => {\r\n return _.debounce<T>(func, wait, options);\r\n }, resolver);\r\n\r\n return (...args: Parameters<T>) => {\r\n return mem(...args)(...args);\r\n };\r\n}\r\n*/\r\n"],"names":["normalize","v","numericOr","values","value","buildFuncArgCacheKey","weakMap","args","keys","arg","key","uuid","delayAsync","ms","resolve","delayErrorAsync","errFactory","_","reject","err","withTimeoutAsync","promise","searchTree","treeNodes","predicate","childSelector","treeNode","node","suppressConsole","action","origConsole","result","removePrefix","str","prefixes","removed","prefix","removeSuffix","suffixes","suffix","memoEffect","getValue","callback","comparator","a","b","val","initialized","retVal","next","lazy","factory","instance"],"mappings":"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"}
1
+ {"version":3,"file":"utils.es.js","sources":["D:/Src/my/actdim/public/utico/src/utils.ts"],"sourcesContent":["import { v4 as uuid } from \"uuid\";\r\n\r\n// @filename: util.ts\r\n\r\n// export function guid() {\r\n// function s4() {\r\n// return Math.floor((1 + Math.random()) * 0x10000)\r\n// .toString(16)\r\n// .substring(1);\r\n// }\r\n// return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\r\n// }\r\n\r\nexport const normalize = (v: number) => (!v || !isFinite(v) ? 0 : v);\r\n\r\n// numericalOr\r\nexport function numericOr(...values: number[]) {\r\n for (const value of values) {\r\n if (value != undefined) {\r\n return value;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n// funcArgCacheKeyResolver(Provider/Builder)\r\nexport const buildFuncArgCacheKey = (() => {\r\n const weakMap = new WeakMap<any, string>();\r\n return (...args: any[]) => {\r\n const keys: string[] = [];\r\n for (const arg of args) {\r\n let key: string = undefined;\r\n if (typeof arg === \"number\" || typeof arg === \"string\" || typeof arg === \"boolean\" || arg == undefined) {\r\n key = \"\" + arg;\r\n } else {\r\n key = weakMap.get(arg);\r\n if (!key) {\r\n key = uuid();\r\n weakMap.set(arg, key);\r\n }\r\n }\r\n keys.push(key);\r\n }\r\n return `\"${keys.join(\"/\")}\"`;\r\n };\r\n})();\r\n\r\nexport const delay = (ms: number) => {\r\n return new Promise<void>((resolve) => setTimeout(resolve, ms));\r\n};\r\n\r\n// scheduleError\r\nexport const delayError = (ms: number, errFactory?: () => Error) => {\r\n return new Promise<never>((_, reject) =>\r\n setTimeout(\r\n () => {\r\n // Do not throw!\r\n const err = errFactory ? errFactory() : new Error(\"Timeout exceeded\");\r\n reject(err);\r\n },\r\n ms\r\n )\r\n );\r\n};\r\n\r\nexport function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\r\n // return new Promise((resolve, reject) => {\r\n // const timer = setTimeout(() => reject(new Error('Timeout exceeded')), ms);\r\n // promise.then((value) => {\r\n // clearTimeout(timer);\r\n // resolve(value);\r\n // }, reject);\r\n // });\r\n return Promise.race([delayError(ms), promise]);\r\n}\r\n\r\n/**\r\n * Search node in a tree\r\n * @param predicate filter\r\n * @param childSelector\r\n * @param treeNodes\r\n */\r\nexport function searchTree<T>(treeNodes: T[], predicate: (item: T) => boolean, childSelector: (item: T) => T[]) {\r\n if (!treeNodes) {\r\n return undefined;\r\n }\r\n for (const treeNode of treeNodes) {\r\n if (predicate(treeNode)) {\r\n return treeNode;\r\n }\r\n const node = searchTree(childSelector(treeNode), predicate, childSelector);\r\n if (node) {\r\n return node;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const suppressConsole = (action: () => void) => {\r\n const origConsole: any = {};\r\n const result: {\r\n method: keyof Console;\r\n args: any[];\r\n }[] = [];\r\n const keys: (keyof Console)[] = [\"log\" /*, \"debug\", \"warn\", \"info\"*/];\r\n for (const key of keys) {\r\n origConsole[key] = console[key];\r\n console[key] = function (...args: any[]) {\r\n result.push({\r\n method: key,\r\n args: args\r\n });\r\n } as any;\r\n }\r\n try {\r\n action();\r\n } finally {\r\n for (const key of keys) {\r\n console[key] = origConsole[key];\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport function removePrefix(str: string, prefixes: string[]): string {\r\n let removed = true;\r\n while (removed) {\r\n removed = false;\r\n for (const prefix of prefixes) {\r\n if (prefix && str.startsWith(prefix)) {\r\n str = str.slice(prefix.length);\r\n removed = true;\r\n break;\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\nexport function removeSuffix(str: string, suffixes: string[]): string {\r\n let removed = true;\r\n while (removed) {\r\n removed = false;\r\n for (const suffix of suffixes) {\r\n if (suffix && str.endsWith(suffix)) {\r\n str = str.slice(0, -suffix.length);\r\n removed = true;\r\n break;\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// another comparator example\r\n// const deepEqual = (a: any, b: any) => JSON.stringify(a) === JSON.stringify(b);\r\n// depEffect\r\nexport function memoEffect<TDep, TResult>(\r\n getValue: () => TDep, // getDep\r\n callback: (v: TDep) => TResult, // onChange/action\r\n comparator: (a: TDep, b: TDep) => boolean = (a, b) => a === b // equals\r\n) {\r\n let val: TDep | undefined;\r\n let initialized = false;\r\n let retVal: TResult;\r\n return () => {\r\n const next = getValue();\r\n if (!initialized || !comparator(next, val!)) {\r\n val = next;\r\n initialized = true;\r\n retVal = callback(next);\r\n }\r\n return retVal;\r\n };\r\n}\r\n\r\nexport function lazy<T>(factory: () => T): () => T {\r\n let instance: T | undefined;\r\n let initialized = false;\r\n\r\n return () => {\r\n if (!initialized) {\r\n instance = factory();\r\n initialized = true;\r\n }\r\n return instance!;\r\n };\r\n}\r\n\r\nexport function makeNonEnumerable<T>(obj: T, propertyNames: (keyof T)[]) {\r\n let propertyDescriptorMap: PropertyDescriptorMap = {};\r\n for (const propertyName of propertyNames) {\r\n propertyDescriptorMap[propertyName] = {\r\n enumerable: false\r\n };\r\n }\r\n Object.defineProperties(obj, propertyDescriptorMap);\r\n}\r\n\r\n// TODO:\r\n/*\r\nfunction getMetadata<T>(\r\n store: WeakMap<object, Map<PropertyKey, T>>,\r\n target: object,\r\n prop: PropertyKey,\r\n): T | undefined {\r\n return store.get(target)?.get(prop) as T | undefined;\r\n}\r\n\r\nfunction setMetadata<T>(\r\n store: WeakMap<object, Map<PropertyKey, T>>,\r\n target: object,\r\n prop: PropertyKey,\r\n value: T,\r\n) {\r\n let propMap = store.get(target);\r\n if (!propMap) {\r\n propMap = new Map();\r\n store.set(target, propMap);\r\n }\r\n propMap.set(prop, value);\r\n}\r\n\r\nfunction hasMetadata(\r\n store: WeakMap<object, Map<PropertyKey, any>>,\r\n target: object,\r\n prop: PropertyKey,\r\n): boolean {\r\n return store.get(target)?.has(prop) ?? false;\r\n}\r\n*/\r\n\r\n/*\r\nexport function memoizeThrottle<T extends Func>(\r\n func: T,\r\n wait = 0,\r\n options?: Parameters<typeof _.throttle<T>>[2],\r\n resolver?: Parameters<typeof _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.throttle<T>>>>[1]\r\n) {\r\n const mem = _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.throttle<T>>>(() => {\r\n return _.throttle<T>(func, wait, options);\r\n }, resolver);\r\n\r\n return (...args: Parameters<T>) => {\r\n return mem(...args)(...args);\r\n };\r\n}\r\n\r\nexport function memoizeDebounce<T extends Func>(\r\n func: T,\r\n wait = 0,\r\n options?: Parameters<typeof _.debounce<T>>[2],\r\n resolver?: Parameters<typeof _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.debounce<T>>>>[1]\r\n) {\r\n const mem = _.memoize<(...args: Parameters<T>) => ReturnType<typeof _.debounce<T>>>(() => {\r\n return _.debounce<T>(func, wait, options);\r\n }, resolver);\r\n\r\n return (...args: Parameters<T>) => {\r\n return mem(...args)(...args);\r\n };\r\n}\r\n*/\r\n"],"names":["normalize","v","numericOr","values","value","buildFuncArgCacheKey","weakMap","args","keys","arg","key","uuid","delay","ms","resolve","delayError","errFactory","_","reject","err","withTimeout","promise","searchTree","treeNodes","predicate","childSelector","treeNode","node","suppressConsole","action","origConsole","result","removePrefix","str","prefixes","removed","prefix","removeSuffix","suffixes","suffix","memoEffect","getValue","callback","comparator","a","b","val","initialized","retVal","next","lazy","factory","instance","makeNonEnumerable","obj","propertyNames","propertyDescriptorMap","propertyName"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actdim/utico",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "A modern foundation toolkit for complex TypeScript apps",
5
5
  "author": "Pavel Borodaev",
6
6
  "license": "Proprietary",
@@ -52,8 +52,8 @@
52
52
  "test": "npx vitest --config=vitest.node.config.ts --no-cache",
53
53
  "test:w": "npx vitest --config=vitest.node.config.ts --watch",
54
54
  "test:v8": "npx vite",
55
- "lint": "eslint . -f visualstudio --ext .ts,.tsx --report-unused-disable-directives --max-warnings 0",
56
- "build": "tsc -b && vite build",
55
+ "lint": "eslint \"./**/*.{ts,tsx}\" -f visualstudio --ext .ts,.tsx --report-unused-disable-directives --max-warnings 0",
56
+ "build": "tsc -b tsconfig.json --noEmit && vite build",
57
57
  "pnpm:u": "pnpm update",
58
58
  "pnpm:ou": "pnpm outdated",
59
59
  "ncu:l": "ncu",
@@ -62,7 +62,8 @@
62
62
  "nvm:la": "nvm list available",
63
63
  "nvm:il": "nvm install lts",
64
64
  "format": "prettier --write .",
65
- "format:check": "prettier --check ."
65
+ "format:check": "prettier --check .",
66
+ "typecheck": "tsc -p tsconfig.json --noEmit"
66
67
  },
67
68
  "peerDependencies": {
68
69
  "dexie": "^4.2.0",
@@ -70,6 +71,7 @@
70
71
  "uuid": "^13.0.0"
71
72
  },
72
73
  "devDependencies": {
74
+ "@eslint/js": "^9.39.2",
73
75
  "@types/chai": "^5.2.3",
74
76
  "@types/mocha": "^10.0.10",
75
77
  "@types/node": "^24.10.0",