taon 21.0.126 → 21.0.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +2 -2
  2. package/browser/fesm2022/taon-browser.mjs +186 -5
  3. package/browser/fesm2022/taon-browser.mjs.map +1 -1
  4. package/browser/package.json +1 -1
  5. package/browser/types/taon-browser.d.ts +31 -4
  6. package/browser-prod/fesm2022/taon-browser-prod.mjs +187 -6
  7. package/browser-prod/fesm2022/taon-browser-prod.mjs.map +1 -1
  8. package/browser-prod/package.json +1 -1
  9. package/browser-prod/types/taon-browser-prod.d.ts +31 -4
  10. package/lib/base-classes/base-kv-repository.d.ts +0 -3
  11. package/lib/base-classes/base-kv-repository.js +51 -58
  12. package/lib/base-classes/base-kv-repository.js.map +1 -1
  13. package/lib/base-classes/base-kv-repository.test.d.ts +1 -0
  14. package/lib/base-classes/base-kv-repository.test.js +291 -0
  15. package/lib/base-classes/base-kv-repository.test.js.map +1 -0
  16. package/lib/base-classes/base-kv-sync-repository.d.ts +30 -0
  17. package/lib/base-classes/base-kv-sync-repository.js +151 -0
  18. package/lib/base-classes/base-kv-sync-repository.js.map +1 -0
  19. package/lib/base-classes/base-kv-sync-repository.test.d.ts +1 -0
  20. package/lib/base-classes/base-kv-sync-repository.test.js +281 -0
  21. package/lib/base-classes/base-kv-sync-repository.test.js.map +1 -0
  22. package/lib/build-info._auto-generated_.d.ts +1 -1
  23. package/lib/build-info._auto-generated_.js +1 -1
  24. package/lib/endpoint-context.js.map +1 -1
  25. package/lib/index.d.ts +1 -0
  26. package/lib/index.js +1 -0
  27. package/lib/index.js.map +1 -1
  28. package/lib/package.json +1 -1
  29. package/lib/ui/index.js +2 -2
  30. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  31. package/lib-esm/app.electron.d.ts +1 -1
  32. package/lib-esm/app.electron.js +1 -1
  33. package/lib-esm/app.vscode.d.ts +1 -1
  34. package/lib-esm/app.vscode.js +1 -1
  35. package/lib-esm/lib/base-classes/base-kv-repository.d.ts +0 -3
  36. package/lib-esm/lib/base-classes/base-kv-repository.js +21 -28
  37. package/lib-esm/lib/base-classes/base-kv-repository.js.map +1 -1
  38. package/lib-esm/lib/base-classes/base-kv-repository.test.d.ts +1 -0
  39. package/lib-esm/lib/base-classes/base-kv-repository.test.js +289 -0
  40. package/lib-esm/lib/base-classes/base-kv-repository.test.js.map +1 -0
  41. package/lib-esm/lib/base-classes/base-kv-sync-repository.d.ts +30 -0
  42. package/lib-esm/lib/base-classes/base-kv-sync-repository.js +142 -0
  43. package/lib-esm/lib/base-classes/base-kv-sync-repository.js.map +1 -0
  44. package/lib-esm/lib/base-classes/base-kv-sync-repository.test.d.ts +1 -0
  45. package/lib-esm/lib/base-classes/base-kv-sync-repository.test.js +279 -0
  46. package/lib-esm/lib/base-classes/base-kv-sync-repository.test.js.map +1 -0
  47. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  48. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  49. package/lib-esm/lib/endpoint-context.js.map +1 -1
  50. package/lib-esm/lib/index.d.ts +1 -0
  51. package/lib-esm/lib/index.js +1 -0
  52. package/lib-esm/lib/index.js.map +1 -1
  53. package/lib-esm/lib/ui/index.d.ts +1 -1
  54. package/lib-esm/lib/ui/index.js +1 -1
  55. package/lib-esm/lib/ui/taon-admin-mode-configuration/index.d.ts +1 -1
  56. package/lib-esm/lib/ui/taon-admin-mode-configuration/index.js +1 -1
  57. package/lib-prod/base-classes/base-kv-repository.d.ts +0 -3
  58. package/lib-prod/base-classes/base-kv-repository.js +21 -28
  59. package/lib-prod/base-classes/base-kv-repository.js.map +1 -1
  60. package/lib-prod/base-classes/base-kv-repository.test.d.ts +1 -0
  61. package/lib-prod/base-classes/base-kv-repository.test.js +289 -0
  62. package/lib-prod/base-classes/base-kv-repository.test.js.map +1 -0
  63. package/lib-prod/base-classes/base-kv-sync-repository.d.ts +30 -0
  64. package/lib-prod/base-classes/base-kv-sync-repository.js +142 -0
  65. package/lib-prod/base-classes/base-kv-sync-repository.js.map +1 -0
  66. package/lib-prod/base-classes/base-kv-sync-repository.test.d.ts +1 -0
  67. package/lib-prod/base-classes/base-kv-sync-repository.test.js +279 -0
  68. package/lib-prod/base-classes/base-kv-sync-repository.test.js.map +1 -0
  69. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  70. package/lib-prod/build-info._auto-generated_.js +1 -1
  71. package/lib-prod/create-context.js.map +1 -1
  72. package/lib-prod/endpoint-context.js.map +1 -1
  73. package/lib-prod/index.d.ts +1 -0
  74. package/lib-prod/index.js +1 -0
  75. package/lib-prod/index.js.map +1 -1
  76. package/lib-prod/package.json +1 -1
  77. package/lib-prod/realtime/realtime-client.js.map +1 -1
  78. package/lib-prod/realtime/realtime-core.js.map +1 -1
  79. package/lib-prod/realtime/realtime-server.js.map +1 -1
  80. package/lib-prod/ui/index.d.ts +1 -1
  81. package/lib-prod/ui/index.js +1 -1
  82. package/lib-prod/ui/taon-admin-mode-configuration/index.d.ts +1 -1
  83. package/lib-prod/ui/taon-admin-mode-configuration/index.js +1 -1
  84. package/package.json +5 -1
  85. package/websql/fesm2022/taon-websql.mjs +186 -5
  86. package/websql/fesm2022/taon-websql.mjs.map +1 -1
  87. package/websql/package.json +1 -1
  88. package/websql/types/taon-websql.d.ts +31 -4
  89. package/websql-prod/fesm2022/taon-websql-prod.mjs +187 -6
  90. package/websql-prod/fesm2022/taon-websql-prod.mjs.map +1 -1
  91. package/websql-prod/package.json +1 -1
  92. package/websql-prod/types/taon-websql-prod.d.ts +31 -4
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taon/browser-prod",
3
- "version": "21.0.126",
3
+ "version": "21.0.130",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0"
@@ -1635,9 +1635,6 @@ declare abstract class TaonBaseCrudController<Entity, UPLOAD_FILE_QUERY_PARAMS =
1635
1635
  }
1636
1636
 
1637
1637
  declare const KVexpirationsDbMetaKey = "__kvMeta.expirations";
1638
- /**
1639
- * Please override property entityClassFn with entity class.
1640
- */
1641
1638
  declare abstract class TaonBaseKvRepository<KV extends Record<string, any> = Record<string, any>> extends TaonBaseCustomRepository {
1642
1639
  private normalizeKey;
1643
1640
  private expirationPath;
@@ -1657,6 +1654,36 @@ declare abstract class TaonBaseKvRepository<KV extends Record<string, any> = Rec
1657
1654
  getAllData(): Promise<Partial<KV>>;
1658
1655
  }
1659
1656
 
1657
+ declare abstract class TaonBaseKvSyncRepository<KV extends Record<string, any> = Record<string, any>> extends TaonBaseCustomRepository {
1658
+ /**
1659
+ * In-memory data owned by this repository instance.
1660
+ *
1661
+ * Nothing is persisted to disk.
1662
+ */
1663
+ private readonly data;
1664
+ /**
1665
+ * Expiration timestamp indexed by normalized KV key.
1666
+ */
1667
+ private readonly expirations;
1668
+ private normalizeKey;
1669
+ private getExpirationTimestamp;
1670
+ private cleanupIfExpired;
1671
+ /**
1672
+ * Similar to set(), but when both the existing and incoming values
1673
+ * are objects, only incoming leaf properties are overwritten.
1674
+ *
1675
+ * Arrays are treated as values and replaced entirely.
1676
+ */
1677
+ merge<K extends keyof KV>(key: K, currentValue: KV[K]): void;
1678
+ set<K extends keyof KV>(key: K, value: KV[K]): void;
1679
+ get<K extends keyof KV>(key: K): KV[K] | undefined;
1680
+ delete<K extends keyof KV>(key: K): void;
1681
+ has<K extends keyof KV>(key: K): boolean;
1682
+ expire<K extends keyof KV>(key: K, ttlSeconds: number): void;
1683
+ ttl<K extends keyof KV>(key: K): number | undefined;
1684
+ getAllData(): Partial<KV>;
1685
+ }
1686
+
1660
1687
  /**
1661
1688
  * Configurable file upload middleware (multer based)
1662
1689
  */
@@ -2228,5 +2255,5 @@ declare const TAON_FLATTEN_MAPPING: {
2228
2255
  };
2229
2256
  };
2230
2257
 
2231
- export { BaseTaonClassesNames, Body, BooleanColumn, CURRENT_HOST_BACKEND_PORT, CURRENT_HOST_URL, ClassHelpers__NS__asyncHandler, ClassHelpers__NS__ensureClassConfig, ClassHelpers__NS__ensureMethodConfig, ClassHelpers__NS__getClassConfig, ClassHelpers__NS__getClassFnFromObject, ClassHelpers__NS__getControllerConfigs, ClassHelpers__NS__getFullInternalName, ClassHelpers__NS__getMethodsNames, ClassHelpers__NS__getName, ClassHelpers__NS__getOrginalClass, ClassHelpers__NS__getUniqueKey, ClassHelpers__NS__hasParentClassWithName, ClassHelpers__NS__isContextClassObject, ClassHelpers__NS__setName, ContextDbMigrations, ContextsEndpointStorage, ControllerConfig, Cookie, DELETE, DITaonContainer, DateTimeColumn, DecimalNumberColumn, DecoratorAbstractOpt, EndpointContext, EntityProcess, FormlyHorizontalWrapper, GET, HEAD, HTML, Header, KVexpirationsDbMetaKey, MethodConfig, MockNamespaceIpc, MockServerIpc, MockSocketIpc, Models__NS__ClassType, Models__NS__ClassTypeKey, Models__NS__DatabaseConfig, Models__NS__DatabaseConfigTypeOrm, Models__NS__DatabasesFolder, Models__NS__KVDatabaseConfig, NumberColumn, PATCH, POST, PUT, ParamConfig, Path, Query, RealtimeClient, RealtimeCore, RealtimeServer, RealtimeStrategy, RealtimeStrategyIpc, RealtimeStrategyMock, RealtimeStrategySocketIO, RealtimeSubsManager, RegisterComponentType, RegisterComponentTypeForEntity, RepeatTypeComponent, SimpleJsonColumn, String100Column, String200Column, String20Column, String45Column, String500Column, String50Column, StringColumn, Symbols__NS__REALTIME, Symbols__NS__classMethodsNames, Symbols__NS__ctxInClassOrClassObj, Symbols__NS__fullClassNameStaticProperty, Symbols__NS__metadata, Symbols__NS__old, Symbols__NS__orignalClassClonesObj, Symbols__NS__taonInstanceId, TAON_CONTEXT, TAON_FLATTEN_MAPPING, TaonAdmin, TaonAdminPanelMode, TaonAdminService, TaonBaseAbstractEntity, TaonBaseAngularService, TaonBaseClass, TaonBaseContext, TaonBaseController, TaonBaseCrudController, TaonBaseCustomRepository, TaonBaseEntity, TaonBaseFileUploadMiddleware, TaonBaseInjector, TaonBaseKvRepository, TaonBaseMiddleware, TaonBaseMigration, TaonBaseProvider, TaonBaseRepository, TaonBaseRepositoryClassName, TaonBaseSubscriberForEntity, TaonController, TaonControllerOptions, TaonEntity, TaonEntityKeysToOmitArr, TaonEntityOptions, TaonHelpers__NS__defaultType, TaonHelpers__NS__fillUpTo, TaonHelpers__NS__firstStringOrElemFromArray, TaonHelpers__NS__getExpressPath, TaonHelpers__NS__ipcKeyNameRequest, TaonHelpers__NS__ipcKeyNameResponse, TaonHelpers__NS__isGoodPath, TaonHelpers__NS__isPlainFileOrFolder, TaonHelpers__NS__parseJSONwithStringJSONs, TaonHelpers__NS__tryTransformParam, TaonHelpers__NS__websqlMocks, TaonMiddleware, TaonMiddlewareOptions, TaonMigration, TaonMigrationOptions, TaonProvider, TaonProviderOptions, TaonRepository, TaonRepositoryOptions, TaonRestResponseWrapper, TaonSubscriber, TaonSubscriberOptions, TaonTempDatabasesFolder, TaonTempRoutesFolder, Taon__NS__LANG_IMPORT_MAP, Taon__NS____FILE_RELATIVE_PATH, Taon__NS__asset, Taon__NS__assetsFrom, Taon__NS__assetsListFrom, Taon__NS__createContext, Taon__NS__createContextTemplate, Taon__NS__error, Taon__NS__getResponseValue, Taon__NS__isBrowser, Taon__NS__isElectron, Taon__NS__isNode, Taon__NS__isWebSQL, Taon__NS__removeLoader, Validators__NS__checkIfMethodsWithReponseTYpeAlowed, Validators__NS__classNameVlidation, Validators__NS__preventUndefinedModel, Validators__NS__validateClassFunctions, apiPrefix, cloneObj, controllerConfigFrom, createContext, createContextTemplate, findTypeForEntity, getFromlyConfigFor, getRegisteredComponents, getResponseValue, getTransformFunction, singleTransform, typeFromEntity, typeFromName };
2258
+ export { BaseTaonClassesNames, Body, BooleanColumn, CURRENT_HOST_BACKEND_PORT, CURRENT_HOST_URL, ClassHelpers__NS__asyncHandler, ClassHelpers__NS__ensureClassConfig, ClassHelpers__NS__ensureMethodConfig, ClassHelpers__NS__getClassConfig, ClassHelpers__NS__getClassFnFromObject, ClassHelpers__NS__getControllerConfigs, ClassHelpers__NS__getFullInternalName, ClassHelpers__NS__getMethodsNames, ClassHelpers__NS__getName, ClassHelpers__NS__getOrginalClass, ClassHelpers__NS__getUniqueKey, ClassHelpers__NS__hasParentClassWithName, ClassHelpers__NS__isContextClassObject, ClassHelpers__NS__setName, ContextDbMigrations, ContextsEndpointStorage, ControllerConfig, Cookie, DELETE, DITaonContainer, DateTimeColumn, DecimalNumberColumn, DecoratorAbstractOpt, EndpointContext, EntityProcess, FormlyHorizontalWrapper, GET, HEAD, HTML, Header, KVexpirationsDbMetaKey, MethodConfig, MockNamespaceIpc, MockServerIpc, MockSocketIpc, Models__NS__ClassType, Models__NS__ClassTypeKey, Models__NS__DatabaseConfig, Models__NS__DatabaseConfigTypeOrm, Models__NS__DatabasesFolder, Models__NS__KVDatabaseConfig, NumberColumn, PATCH, POST, PUT, ParamConfig, Path, Query, RealtimeClient, RealtimeCore, RealtimeServer, RealtimeStrategy, RealtimeStrategyIpc, RealtimeStrategyMock, RealtimeStrategySocketIO, RealtimeSubsManager, RegisterComponentType, RegisterComponentTypeForEntity, RepeatTypeComponent, SimpleJsonColumn, String100Column, String200Column, String20Column, String45Column, String500Column, String50Column, StringColumn, Symbols__NS__REALTIME, Symbols__NS__classMethodsNames, Symbols__NS__ctxInClassOrClassObj, Symbols__NS__fullClassNameStaticProperty, Symbols__NS__metadata, Symbols__NS__old, Symbols__NS__orignalClassClonesObj, Symbols__NS__taonInstanceId, TAON_CONTEXT, TAON_FLATTEN_MAPPING, TaonAdmin, TaonAdminPanelMode, TaonAdminService, TaonBaseAbstractEntity, TaonBaseAngularService, TaonBaseClass, TaonBaseContext, TaonBaseController, TaonBaseCrudController, TaonBaseCustomRepository, TaonBaseEntity, TaonBaseFileUploadMiddleware, TaonBaseInjector, TaonBaseKvRepository, TaonBaseKvSyncRepository, TaonBaseMiddleware, TaonBaseMigration, TaonBaseProvider, TaonBaseRepository, TaonBaseRepositoryClassName, TaonBaseSubscriberForEntity, TaonController, TaonControllerOptions, TaonEntity, TaonEntityKeysToOmitArr, TaonEntityOptions, TaonHelpers__NS__defaultType, TaonHelpers__NS__fillUpTo, TaonHelpers__NS__firstStringOrElemFromArray, TaonHelpers__NS__getExpressPath, TaonHelpers__NS__ipcKeyNameRequest, TaonHelpers__NS__ipcKeyNameResponse, TaonHelpers__NS__isGoodPath, TaonHelpers__NS__isPlainFileOrFolder, TaonHelpers__NS__parseJSONwithStringJSONs, TaonHelpers__NS__tryTransformParam, TaonHelpers__NS__websqlMocks, TaonMiddleware, TaonMiddlewareOptions, TaonMigration, TaonMigrationOptions, TaonProvider, TaonProviderOptions, TaonRepository, TaonRepositoryOptions, TaonRestResponseWrapper, TaonSubscriber, TaonSubscriberOptions, TaonTempDatabasesFolder, TaonTempRoutesFolder, Taon__NS__LANG_IMPORT_MAP, Taon__NS____FILE_RELATIVE_PATH, Taon__NS__asset, Taon__NS__assetsFrom, Taon__NS__assetsListFrom, Taon__NS__createContext, Taon__NS__createContextTemplate, Taon__NS__error, Taon__NS__getResponseValue, Taon__NS__isBrowser, Taon__NS__isElectron, Taon__NS__isNode, Taon__NS__isWebSQL, Taon__NS__removeLoader, Validators__NS__checkIfMethodsWithReponseTYpeAlowed, Validators__NS__classNameVlidation, Validators__NS__preventUndefinedModel, Validators__NS__validateClassFunctions, apiPrefix, cloneObj, controllerConfigFrom, createContext, createContextTemplate, findTypeForEntity, getFromlyConfigFor, getRegisteredComponents, getResponseValue, getTransformFunction, singleTransform, typeFromEntity, typeFromName };
2232
2259
  export type { AbstractEntityOmitKeys, FormlyArrayTransformFn, FormlyEntityType, FormlyInputType, MigrationStatus, Models__NS__ConnectionOptionsLogs, Models__NS__ContextOptions, Models__NS__DBRecreateMode, Models__NS__FrameworkMode, Models__NS__Http__NS__AsyncResponse, Models__NS__Http__NS__ClientAction, Models__NS__Http__NS__ContextENDPOINT, Models__NS__Http__NS__ExpressContext, Models__NS__Http__NS__FormlyFromType, Models__NS__Http__NS__MixResponse, Models__NS__Http__NS__PromiseObservableMix, Models__NS__Http__NS__Response, Models__NS__Http__NS__ResponseFuncOpt, Models__NS__Http__NS__SyncResponse, Models__NS__Http__NS__SyncResponseFunc, Models__NS__MiddlewareType, Models__NS__StartParams, Models__NS__TaonCtxCloneParams, Models__NS__TaonInitializeParams, MulterFileUploadResponse, RealtimeModels__NS__ChangeOption, RealtimeModels__NS__EventHandler, RealtimeModels__NS__SubsManagerOpt, TaonAdditionalMiddlewareMethodInfo, TaonAdminTab, TaonContext, TaonEntityKeysToOmit, TaonHttpDecoratorOptions, TaonMiddlewareFunction, TaonMiddlewareInheritanceObj, Taon__NS__Response, Taon__NS__ResponseHtml, Taon__NS__StartParams };
@@ -6,9 +6,6 @@ type KvLowDbShape<KV extends Record<string, any>> = KV & {
6
6
  };
7
7
  };
8
8
  export declare const KVexpirationsDbMetaKey = "__kvMeta.expirations";
9
- /**
10
- * Please override property entityClassFn with entity class.
11
- */
12
9
  export declare abstract class TaonBaseKvRepository<KV extends Record<string, any> = Record<string, any>> extends TaonBaseCustomRepository {
13
10
  private lowDB;
14
11
  private defaultDb;
@@ -8,16 +8,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.TaonBaseKvRepository = exports.KVexpirationsDbMetaKey = void 0;
10
10
  //#region imports
11
- const lib_1 = require("tnp-core/lib");
12
- const lib_2 = require("tnp-core/lib"); // @backend
11
+ const lib_1 = require("lodash-walk-object/lib");
12
+ const lib_2 = require("tnp-core/lib");
13
+ const lib_3 = require("tnp-core/lib"); // @backend
13
14
  const repository_decorator_1 = require("../decorators/classes/repository-decorator");
14
- const base_custom_repository_1 = require("./base-custom-repository");
15
15
  const class_helpers_1 = require("../helpers/class-helpers");
16
- const lib_3 = require("lodash-walk-object/lib");
16
+ const base_custom_repository_1 = require("./base-custom-repository");
17
17
  exports.KVexpirationsDbMetaKey = '__kvMeta.expirations';
18
- /**
19
- * Please override property entityClassFn with entity class.
20
- */
21
18
  let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_repository_1.TaonBaseCustomRepository {
22
19
  //#region lowdb for development
23
20
  //#region @backend
@@ -38,8 +35,8 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
38
35
  let dbLocation;
39
36
  if (!this.useInMemoryDB()) {
40
37
  dbLocation = this.jsonDbLocation;
41
- if (!lib_1.Helpers.exists(lib_1.path.dirname(dbLocation))) {
42
- lib_1.Helpers.mkdirp(lib_1.path.dirname(dbLocation));
38
+ if (!lib_2.Helpers.exists(lib_2.path.dirname(dbLocation))) {
39
+ lib_2.Helpers.mkdirp(lib_2.path.dirname(dbLocation));
43
40
  }
44
41
  }
45
42
  if (this.useInMemoryDB()) {
@@ -49,17 +46,17 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
49
46
  this.ctx.logDb && console.log(`USING KV DB FROM ${dbLocation}`);
50
47
  }
51
48
  try {
52
- this.lowDB = await (0, lib_2.JSONFilePreset)(dbLocation, this.defaultDb, this.useInMemoryDB());
49
+ this.lowDB = await (0, lib_3.JSONFilePreset)(dbLocation, this.defaultDb, this.useInMemoryDB());
53
50
  }
54
51
  catch (error) {
55
52
  console.error(error);
56
- lib_1.Helpers.error(`[taon-helpers] Cannot use db.json file for projects in location, restoring default db.`, true, true);
53
+ lib_2.Helpers.error(`[taon-helpers] Cannot use db.json file for projects in location, restoring default db.`, true, true);
57
54
  if (!this.useInMemoryDB()) {
58
- lib_1.Helpers.writeJson(dbLocation, this.defaultDb);
55
+ lib_2.Helpers.writeJson(dbLocation, this.defaultDb);
59
56
  }
60
- this.lowDB = await (0, lib_2.JSONFilePreset)(dbLocation, this.defaultDb, this.useInMemoryDB());
57
+ this.lowDB = await (0, lib_3.JSONFilePreset)(dbLocation, this.defaultDb, this.useInMemoryDB());
61
58
  }
62
- lib_1._.set(this.lowDB.data, exports.KVexpirationsDbMetaKey, lib_1._.get(this.lowDB.data, exports.KVexpirationsDbMetaKey, {}));
59
+ lib_2._.set(this.lowDB.data, exports.KVexpirationsDbMetaKey, lib_2._.get(this.lowDB.data, exports.KVexpirationsDbMetaKey, {}));
63
60
  //#endregion
64
61
  }
65
62
  if (!this.useInMemoryDB()) {
@@ -80,19 +77,19 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
80
77
  async getExpirationTimestamp(key) {
81
78
  //#region @backendFunc
82
79
  const connection = await this.getConnection();
83
- const expiresAt = lib_1._.get(connection.data, this.expirationPath(key));
80
+ const expiresAt = lib_2._.get(connection.data, this.expirationPath(key));
84
81
  return typeof expiresAt === 'number' ? expiresAt : undefined;
85
82
  //#endregion
86
83
  }
87
84
  async cleanupIfExpired(key) {
88
85
  //#region @backendFunc
89
86
  const connection = await this.getConnection();
90
- const expiresAt = lib_1._.get(connection.data, this.expirationPath(key));
91
- if (!lib_1._.isNumber(expiresAt) || Date.now() < expiresAt) {
87
+ const expiresAt = lib_2._.get(connection.data, this.expirationPath(key));
88
+ if (!lib_2._.isNumber(expiresAt) || Date.now() < expiresAt) {
92
89
  return false;
93
90
  }
94
- lib_1._.unset(connection.data, this.normalizeKey(key));
95
- lib_1._.unset(connection.data, this.expirationPath(key));
91
+ lib_2._.unset(connection.data, this.normalizeKey(key));
92
+ lib_2._.unset(connection.data, this.expirationPath(key));
96
93
  await connection.write();
97
94
  return true;
98
95
  //#endregion
@@ -104,38 +101,34 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
104
101
  */
105
102
  async merge(key, currentValue) {
106
103
  //#region @backendFunc
107
- const existedData = await this.get(key);
108
- // console.log(`set ${key as any} `, {
109
- // existedData: existedData,
110
- // currentValue: currentValue,
111
- // });
112
- if (lib_1._.isObject(existedData) && lib_1._.isObject(currentValue)) {
113
- lib_3.walk.Object(currentValue || {}, (value, lodashPath) => {
114
- if (lib_1._.isNil(value) ||
115
- lib_1._.isFunction(value) ||
116
- (lib_1._.isObject(value) && !Array.isArray(value)) // I can set array
117
- ) {
118
- // skipping
119
- }
120
- else {
121
- lib_1._.set(existedData, lodashPath, value);
122
- }
123
- }, {
124
- walkGetters: false,
125
- });
104
+ const existingValue = await this.get(key);
105
+ const canMerge = lib_2._.isObject(existingValue) &&
106
+ !Array.isArray(existingValue) &&
107
+ lib_2._.isObject(currentValue) &&
108
+ !Array.isArray(currentValue);
109
+ if (!canMerge) {
110
+ await this.set(key, currentValue);
111
+ return;
126
112
  }
127
- // console.log(`result ${key as any} `, {
128
- // existedData: existedData,
129
- // });
130
- await this.set(key, existedData);
113
+ lib_1.walk.Object(currentValue, (value, lodashPath) => {
114
+ if (lib_2._.isNil(value) ||
115
+ lib_2._.isFunction(value) ||
116
+ (lib_2._.isObject(value) && !Array.isArray(value))) {
117
+ return;
118
+ }
119
+ lib_2._.set(existingValue, lodashPath, value);
120
+ }, {
121
+ walkGetters: false,
122
+ });
123
+ await this.set(key, existingValue);
131
124
  //#endregion
132
125
  }
133
126
  async set(key, value) {
134
127
  //#region @backendFunc
135
128
  const connection = await this.getConnection();
136
- lib_1._.set(connection.data, this.normalizeKey(key), value);
129
+ lib_2._.set(connection.data, this.normalizeKey(key), value);
137
130
  // overwrite should remove previous expiration unless expire() is called again
138
- lib_1._.unset(connection.data, this.expirationPath(key));
131
+ lib_2._.unset(connection.data, this.expirationPath(key));
139
132
  await connection.write();
140
133
  //#endregion
141
134
  }
@@ -146,14 +139,14 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
146
139
  return undefined;
147
140
  }
148
141
  const connection = await this.getConnection();
149
- return lib_1._.get(connection.data, this.normalizeKey(key));
142
+ return lib_2._.get(connection.data, this.normalizeKey(key));
150
143
  //#endregion
151
144
  }
152
145
  async delete(key) {
153
146
  //#region @backendFunc
154
147
  const connection = await this.getConnection();
155
- lib_1._.unset(connection.data, this.normalizeKey(key));
156
- lib_1._.unset(connection.data, this.expirationPath(key));
148
+ lib_2._.unset(connection.data, this.normalizeKey(key));
149
+ lib_2._.unset(connection.data, this.expirationPath(key));
157
150
  await connection.write();
158
151
  //#endregion
159
152
  }
@@ -164,17 +157,17 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
164
157
  return false;
165
158
  }
166
159
  const connection = await this.getConnection();
167
- return lib_1._.has(connection.data, this.normalizeKey(key));
160
+ return lib_2._.has(connection.data, this.normalizeKey(key));
168
161
  //#endregion
169
162
  }
170
163
  async expire(key, ttlSeconds) {
171
164
  //#region @backendFunc
172
165
  const connection = await this.getConnection();
173
- if (!lib_1._.has(connection.data, this.normalizeKey(key))) {
166
+ if (!lib_2._.has(connection.data, this.normalizeKey(key))) {
174
167
  return;
175
168
  }
176
169
  const expiresAt = Date.now() + ttlSeconds * 1000;
177
- lib_1._.set(connection.data, this.expirationPath(key), expiresAt);
170
+ lib_2._.set(connection.data, this.expirationPath(key), expiresAt);
178
171
  await connection.write();
179
172
  //#endregion
180
173
  }
@@ -185,11 +178,11 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
185
178
  return undefined;
186
179
  }
187
180
  const connection = await this.getConnection();
188
- if (!lib_1._.has(connection.data, this.normalizeKey(key))) {
181
+ if (!lib_2._.has(connection.data, this.normalizeKey(key))) {
189
182
  return undefined;
190
183
  }
191
- const expiresAt = lib_1._.get(connection.data, this.expirationPath(key));
192
- if (!lib_1._.isNumber(expiresAt)) {
184
+ const expiresAt = lib_2._.get(connection.data, this.expirationPath(key));
185
+ if (!lib_2._.isNumber(expiresAt)) {
193
186
  return undefined;
194
187
  }
195
188
  const diffMs = expiresAt - Date.now();
@@ -203,20 +196,20 @@ let TaonBaseKvRepository = class TaonBaseKvRepository extends base_custom_reposi
203
196
  async getAllData() {
204
197
  //#region @backendFunc
205
198
  const connection = await this.getConnection();
206
- const expirations = lib_1._.get(connection.data, exports.KVexpirationsDbMetaKey, {});
199
+ const expirations = lib_2._.get(connection.data, exports.KVexpirationsDbMetaKey, {});
207
200
  let changed = false;
208
201
  const now = Date.now();
209
202
  for (const [key, expiresAt] of Object.entries(expirations)) {
210
- if (lib_1._.isNumber(expiresAt) && now >= expiresAt) {
211
- lib_1._.unset(connection.data, key);
212
- lib_1._.unset(connection.data, `${exports.KVexpirationsDbMetaKey}.${key}`);
203
+ if (lib_2._.isNumber(expiresAt) && now >= expiresAt) {
204
+ lib_2._.unset(connection.data, key);
205
+ lib_2._.unset(connection.data, `${exports.KVexpirationsDbMetaKey}.${key}`);
213
206
  changed = true;
214
207
  }
215
208
  }
216
209
  if (changed) {
217
210
  await connection.write();
218
211
  }
219
- const data = lib_1._.cloneDeep(connection.data || {});
212
+ const data = lib_2._.cloneDeep(connection.data || {});
220
213
  delete data.__kvMeta;
221
214
  return data;
222
215
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"base-kv-repository.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;;;;;;;AAAA,iBAAiB;AACjB,sCAAgD;AAEhD,sCAA8C,CAAC,WAAW;AAG1D,qFAA4E;AAG5E,qEAAoE;AAEpE,4DAAwD;AACxD,gDAA8C;AASjC,QAAA,sBAAsB,GAAG,sBAAsB,CAAC;AAE7D;;GAEG;AAEI,IAAe,oBAAoB,GAAnC,MAAe,oBAEpB,SAAQ,iDAAwB;IAChC,+BAA+B;IAC/B,kBAAkB;IACV,KAAK,CAAwB;IAE7B,SAAS,GAAG,EAAsB,CAAC;IAEjC,aAAa;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAW,cAAc;QACvB,sBAAsB;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,4BAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,YAAY;IACd,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,+BAA+B;YAC/B,IAAI,UAAkB,CAAC;YAEvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;gBAC1B,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;gBAEjC,IAAI,CAAC,aAAO,CAAC,MAAM,CAAC,UAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;oBAC9C,aAAO,CAAC,MAAM,CAAC,UAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,GAAG,MAAM,IAAA,oBAAc,EAC/B,UAAU,EACV,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAAE,CACrB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,aAAO,CAAC,KAAK,CACX,wFAAwF,EACxF,IAAI,EACJ,IAAI,CACL,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;oBAC1B,aAAO,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChD,CAAC;gBAED,IAAI,CAAC,KAAK,GAAG,MAAM,IAAA,oBAAc,EAC/B,UAAU,EACV,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAAE,CACrB,CAAC;YACJ,CAAC;YAED,OAAC,CAAC,GAAG,CACH,IAAI,CAAC,KAAK,CAAC,IAAI,EACf,8BAAsB,EACtB,OAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,8BAAsB,EAAE,EAAE,CAAC,CACnD,CAAC;YACF,YAAY;QACd,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,YAAY;IACd,CAAC;IACD,YAAY;IACZ,YAAY;IAEZ,yBAAyB;IACjB,YAAY,CAAC,GAAa;QAChC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc,CAAC,GAAa;QAClC,OAAO,GAAG,8BAAsB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,GAAM;QAEN,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,YAAY;IACd,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAqB,GAAM;QACvD,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnE,IAAI,CAAC,OAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QAEzB,OAAO,IAAI,CAAC;QACZ,YAAY;IACd,CAAC;IAED,YAAY;IAEZ;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAqB,GAAM,EAAE,YAAmB;QACzD,sBAAsB;QACtB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExC,uCAAuC;QACvC,8BAA8B;QAC9B,gCAAgC;QAChC,MAAM;QAEN,IAAI,OAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxD,UAAI,CAAC,MAAM,CACT,YAAY,IAAI,EAAE,EAClB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBACpB,IACE,OAAC,CAAC,KAAK,CAAC,KAAK,CAAC;oBACd,OAAC,CAAC,UAAU,CAAC,KAAK,CAAC;oBACnB,CAAC,OAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB;kBAC/D,CAAC;oBACD,WAAW;gBACb,CAAC;qBAAM,CAAC;oBACN,OAAC,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC,EACD;gBACE,WAAW,EAAE,KAAK;aACnB,CACF,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,8BAA8B;QAC9B,MAAM;QAEN,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACjC,YAAY;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAqB,GAAM,EAAE,KAAY;QAChD,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAEtD,8EAA8E;QAC9E,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnD,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,YAAY;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAqB,GAAM;QAClC,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAO,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAsB,CAAC;QAC3E,YAAY;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAqB,GAAM;QACrC,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,YAAY;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAqB,GAAM;QAClC,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,OAAO,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,YAAY;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAqB,GAAM,EAAE,UAAkB;QACzD,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE9C,IAAI,CAAC,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC;QACjD,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QAE5D,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,YAAY;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAqB,GAAM;QAClC,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE9C,IAAI,CAAC,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG,OAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnE,IAAI,CAAC,OAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEtC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAChC,YAAY;IACd,CAAC;IAED,KAAK,CAAC,UAAU;QACd,sBAAsB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE9C,MAAM,WAAW,GAAG,OAAC,CAAC,GAAG,CACvB,UAAU,CAAC,IAAI,EACf,8BAAsB,EACtB,EAAE,CACuB,CAAC;QAE5B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,IAAI,OAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC9C,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC9B,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,8BAAsB,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC7D,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,IAAI,GAAG,OAAC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAChD,OAAQ,IAAY,CAAC,QAAQ,CAAC;QAE9B,OAAO,IAAmB,CAAC;QAC3B,YAAY;IACd,CAAC;CACF,CAAA;AAxRqB,oDAAoB;+BAApB,oBAAoB;IADzC,IAAA,qCAAc,EAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC;GAChC,oBAAoB,CAwRzC"}
1
+ {"version":3,"file":"base-kv-repository.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cjs_1 = require("vitest/cjs");
4
+ const base_kv_repository_1 = require("./base-kv-repository");
5
+ class TestKvRepository extends base_kv_repository_1.TaonBaseKvRepository {
6
+ useInMemoryDB() {
7
+ return true;
8
+ }
9
+ }
10
+ describe('TaonBaseKvRepository', () => {
11
+ let repository;
12
+ function createRepository() {
13
+ const instance = new TestKvRepository();
14
+ Object.defineProperty(instance, 'ctx', {
15
+ configurable: true,
16
+ writable: true,
17
+ value: {
18
+ logDb: false,
19
+ kvDbJsonLocationForClass: cjs_1.vi.fn((className) => `/tmp/${className}.json`),
20
+ },
21
+ });
22
+ return instance;
23
+ }
24
+ beforeEach(() => {
25
+ repository = createRepository();
26
+ });
27
+ afterEach(() => {
28
+ cjs_1.vi.useRealTimers();
29
+ cjs_1.vi.restoreAllMocks();
30
+ });
31
+ describe('set / get', () => {
32
+ it('stores and returns a value asynchronously', async () => {
33
+ await repository.set('name', 'Taon');
34
+ await expect(repository.get('name')).resolves.toBe('Taon');
35
+ });
36
+ it('returns undefined for a missing key', async () => {
37
+ await expect(repository.get('name')).resolves.toBeUndefined();
38
+ });
39
+ it('overwrites an existing value', async () => {
40
+ await repository.set('counter', 1);
41
+ await repository.set('counter', 2);
42
+ await expect(repository.get('counter')).resolves.toBe(2);
43
+ });
44
+ it('can store null as a value', async () => {
45
+ await repository.set('nullable', null);
46
+ await expect(repository.has('nullable')).resolves.toBe(true);
47
+ await expect(repository.get('nullable')).resolves.toBeNull();
48
+ });
49
+ });
50
+ describe('has', () => {
51
+ it('returns true when a key exists', async () => {
52
+ await repository.set('name', 'Taon');
53
+ await expect(repository.has('name')).resolves.toBe(true);
54
+ });
55
+ it('returns false when a key does not exist', async () => {
56
+ await expect(repository.has('name')).resolves.toBe(false);
57
+ });
58
+ });
59
+ describe('delete', () => {
60
+ it('removes an existing value', async () => {
61
+ await repository.set('name', 'Taon');
62
+ await repository.delete('name');
63
+ await expect(repository.has('name')).resolves.toBe(false);
64
+ await expect(repository.get('name')).resolves.toBeUndefined();
65
+ });
66
+ it('does not throw when deleting a missing key', async () => {
67
+ await expect(repository.delete('name')).resolves.toBeUndefined();
68
+ });
69
+ it('also removes expiration metadata', async () => {
70
+ await repository.set('name', 'Taon');
71
+ await repository.expire('name', 100);
72
+ await repository.delete('name');
73
+ await repository.set('name', 'New Taon');
74
+ await expect(repository.ttl('name')).resolves.toBeUndefined();
75
+ await expect(repository.get('name')).resolves.toBe('New Taon');
76
+ });
77
+ });
78
+ describe('merge', () => {
79
+ it('merges object properties without removing existing properties', async () => {
80
+ await repository.set('settings', {
81
+ theme: 'light',
82
+ nested: {
83
+ enabled: false,
84
+ label: 'original',
85
+ },
86
+ tags: ['one'],
87
+ });
88
+ await repository.merge('settings', {
89
+ theme: 'dark',
90
+ nested: {
91
+ enabled: true,
92
+ },
93
+ tags: ['two', 'three'],
94
+ });
95
+ await expect(repository.get('settings')).resolves.toEqual({
96
+ theme: 'dark',
97
+ nested: {
98
+ enabled: true,
99
+ label: 'original',
100
+ },
101
+ tags: ['two', 'three'],
102
+ });
103
+ });
104
+ it('replaces arrays instead of merging their indexes', async () => {
105
+ await repository.set('settings', {
106
+ theme: 'light',
107
+ nested: {
108
+ enabled: false,
109
+ },
110
+ tags: ['one', 'two', 'three'],
111
+ });
112
+ await repository.merge('settings', {
113
+ theme: 'light',
114
+ nested: {
115
+ enabled: false,
116
+ },
117
+ tags: ['replacement'],
118
+ });
119
+ expect((await repository.get('settings'))?.tags).toEqual(['replacement']);
120
+ });
121
+ it('sets the value when the key does not exist yet', async () => {
122
+ await repository.merge('settings', {
123
+ theme: 'dark',
124
+ nested: {
125
+ enabled: true,
126
+ },
127
+ tags: [],
128
+ });
129
+ await expect(repository.get('settings')).resolves.toEqual({
130
+ theme: 'dark',
131
+ nested: {
132
+ enabled: true,
133
+ },
134
+ tags: [],
135
+ });
136
+ });
137
+ it('overwrites primitive values', async () => {
138
+ await repository.set('counter', 1);
139
+ await repository.merge('counter', 2);
140
+ await expect(repository.get('counter')).resolves.toBe(2);
141
+ });
142
+ it('ignores undefined leaf values during an object merge', async () => {
143
+ await repository.set('settings', {
144
+ theme: 'light',
145
+ nested: {
146
+ enabled: false,
147
+ label: 'keep me',
148
+ },
149
+ tags: [],
150
+ });
151
+ await repository.merge('settings', {
152
+ theme: 'dark',
153
+ nested: {
154
+ enabled: true,
155
+ label: undefined,
156
+ },
157
+ tags: [],
158
+ });
159
+ await expect(repository.get('settings')).resolves.toEqual({
160
+ theme: 'dark',
161
+ nested: {
162
+ enabled: true,
163
+ label: 'keep me',
164
+ },
165
+ tags: [],
166
+ });
167
+ });
168
+ });
169
+ describe('expire / ttl', () => {
170
+ it('sets TTL for an existing key', async () => {
171
+ cjs_1.vi.useFakeTimers();
172
+ cjs_1.vi.setSystemTime(new Date('2026-07-12T12:00:00.000Z'));
173
+ await repository.set('name', 'Taon');
174
+ await repository.expire('name', 10);
175
+ await expect(repository.ttl('name')).resolves.toBe(10);
176
+ });
177
+ it('returns rounded-up TTL seconds', async () => {
178
+ cjs_1.vi.useFakeTimers();
179
+ cjs_1.vi.setSystemTime(new Date('2026-07-12T12:00:00.000Z'));
180
+ await repository.set('name', 'Taon');
181
+ await repository.expire('name', 10);
182
+ cjs_1.vi.advanceTimersByTime(1_500);
183
+ await expect(repository.ttl('name')).resolves.toBe(9);
184
+ });
185
+ it('removes a key after its TTL expires', async () => {
186
+ cjs_1.vi.useFakeTimers();
187
+ cjs_1.vi.setSystemTime(new Date('2026-07-12T12:00:00.000Z'));
188
+ await repository.set('name', 'Taon');
189
+ await repository.expire('name', 5);
190
+ cjs_1.vi.advanceTimersByTime(5_000);
191
+ await expect(repository.get('name')).resolves.toBeUndefined();
192
+ await expect(repository.has('name')).resolves.toBe(false);
193
+ await expect(repository.ttl('name')).resolves.toBeUndefined();
194
+ });
195
+ it('does nothing when expire is called for a missing key', async () => {
196
+ cjs_1.vi.useFakeTimers();
197
+ await repository.expire('name', 10);
198
+ await expect(repository.ttl('name')).resolves.toBeUndefined();
199
+ await expect(repository.has('name')).resolves.toBe(false);
200
+ });
201
+ it('removes the previous expiration when set is called again', async () => {
202
+ cjs_1.vi.useFakeTimers();
203
+ cjs_1.vi.setSystemTime(new Date('2026-07-12T12:00:00.000Z'));
204
+ await repository.set('name', 'Old value');
205
+ await repository.expire('name', 5);
206
+ cjs_1.vi.advanceTimersByTime(2_000);
207
+ await repository.set('name', 'New value');
208
+ cjs_1.vi.advanceTimersByTime(10_000);
209
+ await expect(repository.get('name')).resolves.toBe('New value');
210
+ await expect(repository.ttl('name')).resolves.toBeUndefined();
211
+ });
212
+ it('supports immediate expiration with zero TTL', async () => {
213
+ cjs_1.vi.useFakeTimers();
214
+ cjs_1.vi.setSystemTime(new Date('2026-07-12T12:00:00.000Z'));
215
+ await repository.set('name', 'Taon');
216
+ await repository.expire('name', 0);
217
+ await expect(repository.get('name')).resolves.toBeUndefined();
218
+ await expect(repository.has('name')).resolves.toBe(false);
219
+ });
220
+ it('does not expire the value before its TTL', async () => {
221
+ cjs_1.vi.useFakeTimers();
222
+ cjs_1.vi.setSystemTime(new Date('2026-07-12T12:00:00.000Z'));
223
+ await repository.set('name', 'Taon');
224
+ await repository.expire('name', 10);
225
+ cjs_1.vi.advanceTimersByTime(9_999);
226
+ await expect(repository.get('name')).resolves.toBe('Taon');
227
+ await expect(repository.ttl('name')).resolves.toBe(1);
228
+ });
229
+ });
230
+ describe('getAllData', () => {
231
+ it('returns all stored values without KV metadata', async () => {
232
+ await repository.set('name', 'Taon');
233
+ await repository.set('counter', 5);
234
+ await repository.expire('name', 100);
235
+ const result = await repository.getAllData();
236
+ expect(result).toEqual({
237
+ name: 'Taon',
238
+ counter: 5,
239
+ });
240
+ expect(result).not.toHaveProperty('__kvMeta');
241
+ });
242
+ it('removes expired entries before returning data', async () => {
243
+ cjs_1.vi.useFakeTimers();
244
+ cjs_1.vi.setSystemTime(new Date('2026-07-12T12:00:00.000Z'));
245
+ await repository.set('name', 'Taon');
246
+ await repository.set('counter', 5);
247
+ await repository.expire('name', 2);
248
+ cjs_1.vi.advanceTimersByTime(2_000);
249
+ await expect(repository.getAllData()).resolves.toEqual({
250
+ counter: 5,
251
+ });
252
+ });
253
+ it('returns a deep clone and does not expose internal state', async () => {
254
+ await repository.set('settings', {
255
+ theme: 'light',
256
+ nested: {
257
+ enabled: true,
258
+ },
259
+ tags: ['one'],
260
+ });
261
+ const result = await repository.getAllData();
262
+ result.settings.theme = 'changed';
263
+ result.settings.nested.enabled = false;
264
+ result.settings.tags.push('two');
265
+ await expect(repository.get('settings')).resolves.toEqual({
266
+ theme: 'light',
267
+ nested: {
268
+ enabled: true,
269
+ },
270
+ tags: ['one'],
271
+ });
272
+ });
273
+ });
274
+ describe('repository isolation', () => {
275
+ it('keeps in-memory databases separate between repository instances', async () => {
276
+ const firstRepository = createRepository();
277
+ const secondRepository = createRepository();
278
+ await firstRepository.set('name', 'First');
279
+ await expect(firstRepository.get('name')).resolves.toBe('First');
280
+ await expect(secondRepository.get('name')).resolves.toBeUndefined();
281
+ });
282
+ });
283
+ describe('ctx mock', () => {
284
+ it('does not request a JSON location when using the in-memory database', async () => {
285
+ const ctx = repository.ctx;
286
+ await repository.set('name', 'Taon');
287
+ expect(ctx.kvDbJsonLocationForClass).not.toHaveBeenCalled();
288
+ });
289
+ });
290
+ });
291
+ //# sourceMappingURL=base-kv-repository.test.js.map