@zeltjs/kv 0.6.1 → 0.8.0

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,2 +1,2 @@
1
- import { t as MemoryKVAdaptor } from "../index-BlASVNzQ.js";
1
+ import { t as MemoryKVAdaptor } from "../index-C0Xw8ZsQ.js";
2
2
  export { MemoryKVAdaptor };
@@ -1,2 +1,2 @@
1
- import { t as MemoryKVAdaptor } from "../adaptor-memory-BcPJjrIS.js";
1
+ import { t as MemoryKVAdaptor } from "../adaptor-memory-BpDnyuqz.js";
2
2
  export { MemoryKVAdaptor };
@@ -0,0 +1,114 @@
1
+ import { n as ZeltKVInvalidTtlError, t as KVUtilService } from "./util-BMIWgHNV.js";
2
+ import { Injectable, LifecycleManager, inject } from "@zeltjs/core";
3
+ //#region src/adaptor-memory/memory-kv.adaptor.ts
4
+ function _ts_decorate(decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
9
+ }
10
+ function _ts_metadata(k, v) {
11
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12
+ }
13
+ /** @throws {ZeltKVInvalidTtlError} */ function validateTtl(ttlSec) {
14
+ if (ttlSec !== void 0 && ttlSec <= 0) throw new ZeltKVInvalidTtlError({ ttlSec });
15
+ }
16
+ function makeEntry(raw, ttlSec) {
17
+ return ttlSec !== void 0 ? {
18
+ raw,
19
+ expiresAt: Date.now() + ttlSec * 1e3
20
+ } : { raw };
21
+ }
22
+ var MemoryKVAdaptor = class {
23
+ gc() {
24
+ const now = Date.now();
25
+ for (const [key, entry] of this.data) if (entry.expiresAt !== void 0 && entry.expiresAt <= now) this.data.delete(key);
26
+ }
27
+ async startup() {}
28
+ async shutdown() {
29
+ clearInterval(this.gcInterval);
30
+ }
31
+ namespace(prefix) {
32
+ return new MemoryKVStore(this.data, prefix, this.util);
33
+ }
34
+ constructor(util = inject(KVUtilService), lifecycle = inject(LifecycleManager)) {
35
+ this.util = util;
36
+ this.data = /* @__PURE__ */ new Map();
37
+ this.gcInterval = setInterval(() => this.gc(), 6e4);
38
+ this.gcInterval.unref();
39
+ lifecycle.register(this);
40
+ }
41
+ };
42
+ MemoryKVAdaptor = _ts_decorate([
43
+ Injectable(),
44
+ _ts_metadata("design:type", Function),
45
+ _ts_metadata("design:paramtypes", [void 0, void 0])
46
+ ], MemoryKVAdaptor);
47
+ var MemoryKVStore = class MemoryKVStore {
48
+ k(key) {
49
+ return this.util.joinPrefix(this.prefix, key);
50
+ }
51
+ current(key) {
52
+ const entry = this.data.get(this.k(key));
53
+ if (!entry) return void 0;
54
+ if (entry.expiresAt !== void 0 && entry.expiresAt <= Date.now()) {
55
+ this.data.delete(this.k(key));
56
+ return;
57
+ }
58
+ return entry;
59
+ }
60
+ async get(key) {
61
+ const entry = this.current(key);
62
+ return entry ? this.util.deserialize(entry.raw) : void 0;
63
+ }
64
+ /** @throws {ZeltKVInvalidTtlError} */ async set(key, value, opts) {
65
+ validateTtl(opts?.ttlSec);
66
+ const raw = this.util.serialize(value);
67
+ this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));
68
+ }
69
+ async del(key) {
70
+ this.data.delete(this.k(key));
71
+ }
72
+ async has(key) {
73
+ return this.current(key) !== void 0;
74
+ }
75
+ /** @throws {ZeltKVInvalidTtlError} */ async expire(key, ttlSec) {
76
+ validateTtl(ttlSec);
77
+ const entry = this.current(key);
78
+ if (!entry) return false;
79
+ entry.expiresAt = Date.now() + ttlSec * 1e3;
80
+ return true;
81
+ }
82
+ namespace(sub) {
83
+ return new MemoryKVStore(this.data, this.util.joinPrefix(this.prefix, sub), this.util);
84
+ }
85
+ /** @throws {ZeltKVInvalidTtlError} */ async incr(key, by = 1, opts) {
86
+ validateTtl(opts?.ttlSec);
87
+ const k = this.k(key);
88
+ const entry = this.current(key);
89
+ if (!entry) {
90
+ const raw = this.util.serialize(by);
91
+ this.data.set(k, makeEntry(raw, opts?.ttlSec));
92
+ return by;
93
+ }
94
+ const next = (this.util.deserialize(entry.raw) ?? 0) + by;
95
+ entry.raw = this.util.serialize(next);
96
+ return next;
97
+ }
98
+ /** @throws {ZeltKVInvalidTtlError} */ async setnx(key, value, opts) {
99
+ validateTtl(opts?.ttlSec);
100
+ if (this.current(key)) return false;
101
+ const raw = this.util.serialize(value);
102
+ this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));
103
+ return true;
104
+ }
105
+ constructor(data, prefix, util) {
106
+ this.data = data;
107
+ this.prefix = prefix;
108
+ this.util = util;
109
+ }
110
+ };
111
+ //#endregion
112
+ export { MemoryKVAdaptor as t };
113
+
114
+ //# sourceMappingURL=adaptor-memory-BpDnyuqz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptor-memory-BpDnyuqz.js","names":["Injectable","inject","LifecycleManager","ZeltKVInvalidTtlError","KVUtilService","validateTtl","ttlSec","undefined","makeEntry","raw","expiresAt","Date","now","MemoryKVAdaptor","gc","key","entry","data","delete","startup","shutdown","clearInterval","gcInterval","namespace","prefix","MemoryKVStore","util","lifecycle","Map","setInterval","unref","register","k","joinPrefix","current","get","deserialize","set","value","opts","serialize","del","has","expire","sub","incr","by","next","setnx"],"sources":["../src/adaptor-memory/memory-kv.adaptor.ts"],"sourcesContent":["import type { Lifecycle } from '@zeltjs/core';\nimport { Injectable, inject, LifecycleManager } from '@zeltjs/core';\n\nimport { ZeltKVInvalidTtlError } from '../kv.errors';\nimport type {\n AtomicKVAdaptor,\n AtomicKVStore,\n Defined,\n NonEmptyString,\n SetOptions,\n} from '../kv.types';\nimport { KVUtilService } from '../util';\n\ntype Entry = {\n raw: string;\n /** epoch ms。undefined は永続 */\n expiresAt?: number;\n};\n\n/** @throws {ZeltKVInvalidTtlError} */\nfunction validateTtl(ttlSec: number | undefined): void {\n if (ttlSec !== undefined && ttlSec <= 0) throw new ZeltKVInvalidTtlError({ ttlSec });\n}\n\nfunction makeEntry(raw: string, ttlSec?: number): Entry {\n return ttlSec !== undefined ? { raw, expiresAt: Date.now() + ttlSec * 1000 } : { raw };\n}\n\n@Injectable()\nexport class MemoryKVAdaptor implements AtomicKVAdaptor, Lifecycle {\n private readonly data = new Map<string, Entry>();\n private readonly gcInterval: ReturnType<typeof setInterval>;\n\n constructor(\n private readonly util = inject(KVUtilService),\n lifecycle = inject(LifecycleManager),\n ) {\n this.gcInterval = setInterval(() => this.gc(), 60_000);\n this.gcInterval.unref();\n lifecycle.register(this);\n }\n\n private gc(): void {\n const now = Date.now();\n for (const [key, entry] of this.data) {\n if (entry.expiresAt !== undefined && entry.expiresAt <= now) {\n this.data.delete(key);\n }\n }\n }\n\n async startup(): Promise<void> {}\n\n async shutdown(): Promise<void> {\n clearInterval(this.gcInterval);\n }\n\n namespace<const S extends string>(prefix: NonEmptyString<S>): AtomicKVStore {\n return new MemoryKVStore(this.data, prefix, this.util);\n }\n}\n\nclass MemoryKVStore implements AtomicKVStore {\n constructor(\n private readonly data: Map<string, Entry>,\n private readonly prefix: string,\n private readonly util: KVUtilService,\n ) {}\n\n private k(key: string): string {\n return this.util.joinPrefix(this.prefix, key);\n }\n\n private current(key: string): Entry | undefined {\n const entry = this.data.get(this.k(key));\n if (!entry) return undefined;\n if (entry.expiresAt !== undefined && entry.expiresAt <= Date.now()) {\n this.data.delete(this.k(key));\n return undefined;\n }\n return entry;\n }\n\n async get<T>(key: string): Promise<T | undefined> {\n const entry = this.current(key);\n return entry ? this.util.deserialize<T>(entry.raw) : undefined;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async set<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<void> {\n validateTtl(opts?.ttlSec);\n const raw = this.util.serialize(value);\n this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));\n }\n\n async del(key: string): Promise<void> {\n this.data.delete(this.k(key));\n }\n\n async has(key: string): Promise<boolean> {\n return this.current(key) !== undefined;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async expire(key: string, ttlSec: number): Promise<boolean> {\n validateTtl(ttlSec);\n const entry = this.current(key);\n if (!entry) return false;\n entry.expiresAt = Date.now() + ttlSec * 1000;\n return true;\n }\n\n namespace<const S extends string>(sub: NonEmptyString<S>): AtomicKVStore {\n return new MemoryKVStore(this.data, this.util.joinPrefix(this.prefix, sub), this.util);\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async incr(key: string, by = 1, opts?: { ttlSec?: number }): Promise<number> {\n validateTtl(opts?.ttlSec);\n const k = this.k(key);\n const entry = this.current(key);\n if (!entry) {\n const raw = this.util.serialize(by);\n this.data.set(k, makeEntry(raw, opts?.ttlSec));\n return by;\n }\n const next = (this.util.deserialize<number>(entry.raw) ?? 0) + by;\n entry.raw = this.util.serialize(next);\n return next;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async setnx<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<boolean> {\n validateTtl(opts?.ttlSec);\n if (this.current(key)) return false;\n const raw = this.util.serialize(value);\n this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));\n return true;\n }\n}\n"],"mappings":"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"}
@@ -1,10 +1,14 @@
1
- import { n as AtomicKVStore, o as NonEmptyString, t as AtomicKVAdaptor } from "../types-PDNBLwuJ.js";
1
+ import { n as AtomicKVAdaptor, r as AtomicKVStore, s as NonEmptyString, t as KVUtilService } from "../kvutil.service-3_YSZSxJ.js";
2
+ import { Lifecycle, LifecycleManager } from "@zeltjs/core";
2
3
  import { RedisService } from "@zeltjs/redis";
3
4
 
4
- //#region src/adaptor-redis/redis-kv-adaptor.d.ts
5
- declare class RedisKVAdaptor implements AtomicKVAdaptor {
5
+ //#region src/adaptor-redis/redis-kv.adaptor.d.ts
6
+ declare class RedisKVAdaptor implements AtomicKVAdaptor, Lifecycle {
6
7
  private readonly redis;
7
- constructor(redis?: RedisService);
8
+ private readonly util;
9
+ constructor(redis?: RedisService, util?: KVUtilService, lifecycle?: LifecycleManager);
10
+ startup(): Promise<void>;
11
+ shutdown(): Promise<void>;
8
12
  namespace<const S extends string>(prefix: NonEmptyString<S>): AtomicKVStore;
9
13
  }
10
14
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/adaptor-redis/redis-kv-adaptor.ts"],"mappings":";;;;cAOa,cAAA,YAA0B,eAAA;EAAA,iBACR,KAAA;cAAA,KAAA,GAAK,YAAA;EAElC,SAAA,wBAAA,CAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/adaptor-redis/redis-kv.adaptor.ts"],"mappings":";;;;;cAUa,cAAA,YAA0B,eAAA,EAAiB,SAAA;EAAA,iBAEnC,KAAA;EAAA,iBACA,IAAA;cADA,KAAA,GAAK,YAAA,EACL,IAAA,GAAI,aAAA,EACrB,SAAA,GAAS,gBAAA;EAKL,OAAA,CAAA,GAAW,OAAA;EAOX,QAAA,CAAA,GAAY,OAAA;EAElB,SAAA,wBAAA,CAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA"}
@@ -1,7 +1,7 @@
1
- import { i as ZeltKVInvalidTtlError, n as serialize, r as joinPrefix, t as deserialize } from "../serialize-DwL5y2vb.js";
2
- import { inject } from "@zeltjs/core";
1
+ import { n as ZeltKVInvalidTtlError, t as KVUtilService } from "../util-BMIWgHNV.js";
2
+ import { Injectable, LifecycleManager, inject } from "@zeltjs/core";
3
3
  import { RedisService } from "@zeltjs/redis";
4
- //#region src/adaptor-redis/lua-scripts.ts
4
+ //#region src/adaptor-redis/lua-scripts.lib.ts
5
5
  const INCR_WITH_TTL_LUA = `
6
6
  if ARGV[2] ~= '' then
7
7
  redis.call('SET', KEYS[1], 0, 'EX', ARGV[2], 'NX')
@@ -9,31 +9,21 @@ const INCR_WITH_TTL_LUA = `
9
9
  return redis.call('INCRBY', KEYS[1], ARGV[1])
10
10
  `;
11
11
  //#endregion
12
- //#region src/adaptor-redis/redis-kv-store.ts
13
- /** @throws {ZeltKVInvalidTtlError} */
14
- const validateTtl = (ttlSec) => {
12
+ //#region src/adaptor-redis/redis-kv-store.lib.ts
13
+ /** @throws {ZeltKVInvalidTtlError} */ const validateTtl = (ttlSec) => {
15
14
  if (ttlSec !== void 0 && ttlSec <= 0) throw new ZeltKVInvalidTtlError({ ttlSec });
16
15
  };
17
- const incrWithTtl = async (client, key, by, ttlSec) => {
18
- const ttlArg = ttlSec !== void 0 ? String(ttlSec) : "";
19
- return client.eval(INCR_WITH_TTL_LUA, 1, key, by, ttlArg);
20
- };
21
16
  var RedisKVStore = class RedisKVStore {
22
- constructor(client, prefix) {
23
- this.client = client;
24
- this.prefix = prefix;
25
- }
26
17
  k(key) {
27
- return this.prefix + key;
18
+ return this.util.joinPrefix(this.prefix, key);
28
19
  }
29
20
  async get(key) {
30
21
  const raw = await this.client.get(this.k(key));
31
- return raw === null ? void 0 : deserialize(raw);
22
+ return raw === null ? void 0 : this.util.deserialize(raw);
32
23
  }
33
- /** @throws {ZeltKVInvalidTtlError} */
34
- async set(key, value, opts) {
24
+ /** @throws {ZeltKVInvalidTtlError} */ async set(key, value, opts) {
35
25
  validateTtl(opts?.ttlSec);
36
- const json = serialize(value);
26
+ const json = this.util.serialize(value);
37
27
  if (opts?.ttlSec !== void 0) await this.client.set(this.k(key), json, "EX", opts.ttlSec);
38
28
  else await this.client.set(this.k(key), json);
39
29
  }
@@ -43,36 +33,66 @@ var RedisKVStore = class RedisKVStore {
43
33
  async has(key) {
44
34
  return await this.client.exists(this.k(key)) === 1;
45
35
  }
46
- /** @throws {ZeltKVInvalidTtlError} */
47
- async expire(key, ttlSec) {
36
+ /** @throws {ZeltKVInvalidTtlError} */ async expire(key, ttlSec) {
48
37
  validateTtl(ttlSec);
49
38
  return await this.client.expire(this.k(key), ttlSec) === 1;
50
39
  }
51
40
  namespace(sub) {
52
- return new RedisKVStore(this.client, joinPrefix(this.prefix, sub));
41
+ return new RedisKVStore(this.client, this.util.joinPrefix(this.prefix, sub), this.util);
53
42
  }
54
- /** @throws {ZeltKVInvalidTtlError} */
55
- async incr(key, by = 1, opts) {
43
+ /** @throws {ZeltKVInvalidTtlError} */ async incr(key, by = 1, opts) {
56
44
  validateTtl(opts?.ttlSec);
57
- return incrWithTtl(this.client, this.k(key), by, opts?.ttlSec);
45
+ const ttlArg = opts?.ttlSec !== void 0 ? String(opts.ttlSec) : "";
46
+ return this.client.incrWithTtl(this.k(key), by, ttlArg);
58
47
  }
59
- /** @throws {ZeltKVInvalidTtlError} */
60
- async setnx(key, value, opts) {
48
+ /** @throws {ZeltKVInvalidTtlError} */ async setnx(key, value, opts) {
61
49
  validateTtl(opts?.ttlSec);
62
- const json = serialize(value);
50
+ const json = this.util.serialize(value);
63
51
  return (opts?.ttlSec !== void 0 ? await this.client.set(this.k(key), json, "EX", opts.ttlSec, "NX") : await this.client.set(this.k(key), json, "NX")) === "OK";
64
52
  }
53
+ constructor(client, prefix, util) {
54
+ this.client = client;
55
+ this.prefix = prefix;
56
+ this.util = util;
57
+ }
65
58
  };
66
59
  //#endregion
67
- //#region src/adaptor-redis/redis-kv-adaptor.ts
60
+ //#region src/adaptor-redis/redis-kv.adaptor.ts
61
+ function _ts_decorate(decorators, target, key, desc) {
62
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
63
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
64
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
65
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
66
+ }
67
+ function _ts_metadata(k, v) {
68
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
69
+ }
68
70
  var RedisKVAdaptor = class {
69
- constructor(redis = inject(RedisService)) {
70
- this.redis = redis;
71
+ async startup() {
72
+ this.redis.client.defineCommand("incrWithTtl", {
73
+ numberOfKeys: 1,
74
+ lua: INCR_WITH_TTL_LUA
75
+ });
71
76
  }
77
+ async shutdown() {}
72
78
  namespace(prefix) {
73
- return new RedisKVStore(this.redis.client, prefix);
79
+ return new RedisKVStore(this.redis.client, prefix, this.util);
80
+ }
81
+ constructor(redis = inject(RedisService), util = inject(KVUtilService), lifecycle = inject(LifecycleManager)) {
82
+ this.redis = redis;
83
+ this.util = util;
84
+ lifecycle.register(this);
74
85
  }
75
86
  };
87
+ RedisKVAdaptor = _ts_decorate([
88
+ Injectable(),
89
+ _ts_metadata("design:type", Function),
90
+ _ts_metadata("design:paramtypes", [
91
+ void 0,
92
+ void 0,
93
+ void 0
94
+ ])
95
+ ], RedisKVAdaptor);
76
96
  //#endregion
77
97
  export { RedisKVAdaptor };
78
98
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/adaptor-redis/lua-scripts.ts","../../src/adaptor-redis/redis-kv-store.ts","../../src/adaptor-redis/redis-kv-adaptor.ts"],"sourcesContent":["export const INCR_WITH_TTL_LUA = `\n if ARGV[2] ~= '' then\n redis.call('SET', KEYS[1], 0, 'EX', ARGV[2], 'NX')\n end\n return redis.call('INCRBY', KEYS[1], ARGV[1])\n`;\n","import type Redis from 'ioredis';\nimport { ZeltKVInvalidTtlError } from '../errors';\nimport { joinPrefix } from '../namespace';\nimport { deserialize, serialize } from '../serialize';\nimport type { AtomicKVStore, Defined, NonEmptyString, SetOptions } from '../types';\n\nimport { INCR_WITH_TTL_LUA } from './lua-scripts';\n\n/** @throws {ZeltKVInvalidTtlError} */\nconst validateTtl = (ttlSec: number | undefined): void => {\n if (ttlSec !== undefined && ttlSec <= 0) throw new ZeltKVInvalidTtlError({ ttlSec });\n};\n\nconst incrWithTtl = async (\n client: Redis,\n key: string,\n by: number,\n ttlSec: number | undefined,\n): Promise<number> => {\n const ttlArg = ttlSec !== undefined ? String(ttlSec) : '';\n return client.eval(INCR_WITH_TTL_LUA, 1, key, by, ttlArg) as Promise<number>;\n};\n\nexport class RedisKVStore implements AtomicKVStore {\n constructor(\n private readonly client: Redis,\n private readonly prefix: string,\n ) {}\n\n private k(key: string): string {\n return this.prefix + key;\n }\n\n async get<T>(key: string): Promise<T | undefined> {\n const raw = await this.client.get(this.k(key));\n return raw === null ? undefined : deserialize<T>(raw);\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async set<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<void> {\n validateTtl(opts?.ttlSec);\n const json = serialize(value);\n if (opts?.ttlSec !== undefined) {\n await this.client.set(this.k(key), json, 'EX', opts.ttlSec);\n } else {\n await this.client.set(this.k(key), json);\n }\n }\n\n async del(key: string): Promise<void> {\n await this.client.del(this.k(key));\n }\n\n async has(key: string): Promise<boolean> {\n const n = await this.client.exists(this.k(key));\n return n === 1;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async expire(key: string, ttlSec: number): Promise<boolean> {\n validateTtl(ttlSec);\n const n = await this.client.expire(this.k(key), ttlSec);\n return n === 1;\n }\n\n namespace<const S extends string>(sub: NonEmptyString<S>): AtomicKVStore {\n return new RedisKVStore(this.client, joinPrefix(this.prefix, sub));\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async incr(key: string, by = 1, opts?: { ttlSec?: number }): Promise<number> {\n validateTtl(opts?.ttlSec);\n return incrWithTtl(this.client, this.k(key), by, opts?.ttlSec);\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async setnx<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<boolean> {\n validateTtl(opts?.ttlSec);\n const json = serialize(value);\n const result =\n opts?.ttlSec !== undefined\n ? await this.client.set(this.k(key), json, 'EX', opts.ttlSec, 'NX')\n : await this.client.set(this.k(key), json, 'NX');\n return result === 'OK';\n }\n}\n","import { inject } from '@zeltjs/core';\nimport { RedisService } from '@zeltjs/redis';\n\nimport type { AtomicKVAdaptor, AtomicKVStore, NonEmptyString } from '../types';\n\nimport { RedisKVStore } from './redis-kv-store';\n\nexport class RedisKVAdaptor implements AtomicKVAdaptor {\n constructor(private readonly redis = inject(RedisService)) {}\n\n namespace<const S extends string>(prefix: NonEmptyString<S>): AtomicKVStore {\n return new RedisKVStore(this.redis.client, prefix);\n }\n}\n"],"mappings":";;;;AAAA,MAAa,oBAAoB;;;;;;;;;ACSjC,MAAM,eAAe,WAAqC;AACxD,KAAI,WAAW,KAAA,KAAa,UAAU,EAAG,OAAM,IAAI,sBAAsB,EAAE,QAAQ,CAAC;;AAGtF,MAAM,cAAc,OAClB,QACA,KACA,IACA,WACoB;CACpB,MAAM,SAAS,WAAW,KAAA,IAAY,OAAO,OAAO,GAAG;AACvD,QAAO,OAAO,KAAK,mBAAmB,GAAG,KAAK,IAAI,OAAO;;AAG3D,IAAa,eAAb,MAAa,aAAsC;CACjD,YACE,QACA,QACA;AAFiB,OAAA,SAAA;AACA,OAAA,SAAA;;CAGnB,EAAU,KAAqB;AAC7B,SAAO,KAAK,SAAS;;CAGvB,MAAM,IAAO,KAAqC;EAChD,MAAM,MAAM,MAAM,KAAK,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC;AAC9C,SAAO,QAAQ,OAAO,KAAA,IAAY,YAAe,IAAI;;;CAIvD,MAAM,IAAuB,KAAa,OAAU,MAAkC;AACpF,cAAY,MAAM,OAAO;EACzB,MAAM,OAAO,UAAU,MAAM;AAC7B,MAAI,MAAM,WAAW,KAAA,EACnB,OAAM,KAAK,OAAO,IAAI,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,KAAK,OAAO;MAE3D,OAAM,KAAK,OAAO,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK;;CAI5C,MAAM,IAAI,KAA4B;AACpC,QAAM,KAAK,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC;;CAGpC,MAAM,IAAI,KAA+B;AAEvC,SAAO,MADS,KAAK,OAAO,OAAO,KAAK,EAAE,IAAI,CAAC,KAClC;;;CAIf,MAAM,OAAO,KAAa,QAAkC;AAC1D,cAAY,OAAO;AAEnB,SAAO,MADS,KAAK,OAAO,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,KAC1C;;CAGf,UAAkC,KAAuC;AACvE,SAAO,IAAI,aAAa,KAAK,QAAQ,WAAW,KAAK,QAAQ,IAAI,CAAC;;;CAIpE,MAAM,KAAK,KAAa,KAAK,GAAG,MAA6C;AAC3E,cAAY,MAAM,OAAO;AACzB,SAAO,YAAY,KAAK,QAAQ,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,OAAO;;;CAIhE,MAAM,MAAyB,KAAa,OAAU,MAAqC;AACzF,cAAY,MAAM,OAAO;EACzB,MAAM,OAAO,UAAU,MAAM;AAK7B,UAHE,MAAM,WAAW,KAAA,IACb,MAAM,KAAK,OAAO,IAAI,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,KAAK,QAAQ,KAAK,GACjE,MAAM,KAAK,OAAO,IAAI,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,MAClC;;;;;AC5EtB,IAAa,iBAAb,MAAuD;CACrD,YAAY,QAAyB,OAAO,aAAa,EAAE;AAA9B,OAAA,QAAA;;CAE7B,UAAkC,QAA0C;AAC1E,SAAO,IAAI,aAAa,KAAK,MAAM,QAAQ,OAAO"}
1
+ {"version":3,"file":"index.js","names":["INCR_WITH_TTL_LUA","ZeltKVInvalidTtlError","validateTtl","ttlSec","undefined","RedisKVStore","k","key","util","joinPrefix","prefix","get","raw","client","deserialize","set","value","opts","json","serialize","del","has","n","exists","expire","namespace","sub","incr","by","ttlArg","String","incrWithTtl","setnx","result","Injectable","inject","LifecycleManager","RedisService","KVUtilService","INCR_WITH_TTL_LUA","RedisKVStore","RedisKVAdaptor","startup","redis","client","defineCommand","numberOfKeys","lua","shutdown","namespace","prefix","util","lifecycle","register"],"sources":["../../src/adaptor-redis/lua-scripts.lib.ts","../../src/adaptor-redis/redis-kv-store.lib.ts","../../src/adaptor-redis/redis-kv.adaptor.ts"],"sourcesContent":["export const INCR_WITH_TTL_LUA = `\n if ARGV[2] ~= '' then\n redis.call('SET', KEYS[1], 0, 'EX', ARGV[2], 'NX')\n end\n return redis.call('INCRBY', KEYS[1], ARGV[1])\n`;\n","import type Redis from 'ioredis';\nimport type { Result } from 'ioredis';\n\nimport { ZeltKVInvalidTtlError } from '../kv.errors';\nimport type { AtomicKVStore, Defined, NonEmptyString, SetOptions } from '../kv.types';\nimport type { KVUtilService } from '../util';\n\ndeclare module 'ioredis' {\n interface RedisCommander<Context> {\n incrWithTtl(key: string, by: number | string, ttlArg: string): Result<number, Context>;\n }\n}\n\n/** @throws {ZeltKVInvalidTtlError} */\nconst validateTtl = (ttlSec: number | undefined): void => {\n if (ttlSec !== undefined && ttlSec <= 0) throw new ZeltKVInvalidTtlError({ ttlSec });\n};\n\nexport class RedisKVStore implements AtomicKVStore {\n constructor(\n private readonly client: Redis,\n private readonly prefix: string,\n private readonly util: KVUtilService,\n ) {}\n\n private k(key: string): string {\n return this.util.joinPrefix(this.prefix, key);\n }\n\n async get<T>(key: string): Promise<T | undefined> {\n const raw = await this.client.get(this.k(key));\n return raw === null ? undefined : this.util.deserialize<T>(raw);\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async set<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<void> {\n validateTtl(opts?.ttlSec);\n const json = this.util.serialize(value);\n if (opts?.ttlSec !== undefined) {\n await this.client.set(this.k(key), json, 'EX', opts.ttlSec);\n } else {\n await this.client.set(this.k(key), json);\n }\n }\n\n async del(key: string): Promise<void> {\n await this.client.del(this.k(key));\n }\n\n async has(key: string): Promise<boolean> {\n const n = await this.client.exists(this.k(key));\n return n === 1;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async expire(key: string, ttlSec: number): Promise<boolean> {\n validateTtl(ttlSec);\n const n = await this.client.expire(this.k(key), ttlSec);\n return n === 1;\n }\n\n namespace<const S extends string>(sub: NonEmptyString<S>): AtomicKVStore {\n return new RedisKVStore(this.client, this.util.joinPrefix(this.prefix, sub), this.util);\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async incr(key: string, by = 1, opts?: { ttlSec?: number }): Promise<number> {\n validateTtl(opts?.ttlSec);\n const ttlArg = opts?.ttlSec !== undefined ? String(opts.ttlSec) : '';\n return this.client.incrWithTtl(this.k(key), by, ttlArg);\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async setnx<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<boolean> {\n validateTtl(opts?.ttlSec);\n const json = this.util.serialize(value);\n const result =\n opts?.ttlSec !== undefined\n ? await this.client.set(this.k(key), json, 'EX', opts.ttlSec, 'NX')\n : await this.client.set(this.k(key), json, 'NX');\n return result === 'OK';\n }\n}\n","import type { Lifecycle } from '@zeltjs/core';\nimport { Injectable, inject, LifecycleManager } from '@zeltjs/core';\nimport { RedisService } from '@zeltjs/redis';\nimport type { AtomicKVAdaptor, AtomicKVStore, NonEmptyString } from '../kv.types';\nimport { KVUtilService } from '../util';\n\nimport { INCR_WITH_TTL_LUA } from './lua-scripts.lib';\nimport { RedisKVStore } from './redis-kv-store.lib';\n\n@Injectable()\nexport class RedisKVAdaptor implements AtomicKVAdaptor, Lifecycle {\n constructor(\n private readonly redis = inject(RedisService),\n private readonly util = inject(KVUtilService),\n lifecycle = inject(LifecycleManager),\n ) {\n lifecycle.register(this);\n }\n\n async startup(): Promise<void> {\n this.redis.client.defineCommand('incrWithTtl', {\n numberOfKeys: 1,\n lua: INCR_WITH_TTL_LUA,\n });\n }\n\n async shutdown(): Promise<void> {}\n\n namespace<const S extends string>(prefix: NonEmptyString<S>): AtomicKVStore {\n return new RedisKVStore(this.redis.client, prefix, this.util);\n }\n}\n"],"mappings":";;;;AAAA,MAAaA,oBAAoB;;;;;;;;uCCcjC,MAAME,eAAeC,WAAAA;AACnB,KAAIA,WAAWC,KAAAA,KAAaD,UAAU,EAAG,OAAM,IAAIF,sBAAsB,EAAEE,QAAO,CAAA;;AAGpF,IAAaE,eAAb,MAAaA,aAAAA;CAOHC,EAAEC,KAAqB;AAC7B,SAAO,KAAKC,KAAKC,WAAW,KAAKC,QAAQH,IAAAA;;CAG3C,MAAMI,IAAOJ,KAAqC;EAChD,MAAMK,MAAM,MAAM,KAAKC,OAAOF,IAAI,KAAKL,EAAEC,IAAAA,CAAAA;AACzC,SAAOK,QAAQ,OAAOR,KAAAA,IAAY,KAAKI,KAAKM,YAAeF,IAAAA;;wCAI7D,MAAMG,IAAuBR,KAAaS,OAAUC,MAAkC;AACpFf,cAAYe,MAAMd,OAAAA;EAClB,MAAMe,OAAO,KAAKV,KAAKW,UAAUH,MAAAA;AACjC,MAAIC,MAAMd,WAAWC,KAAAA,EACnB,OAAM,KAAKS,OAAOE,IAAI,KAAKT,EAAEC,IAAAA,EAAMW,MAAM,MAAMD,KAAKd,OAAM;MAE1D,OAAM,KAAKU,OAAOE,IAAI,KAAKT,EAAEC,IAAAA,EAAMW,KAAAA;;CAIvC,MAAME,IAAIb,KAA4B;AACpC,QAAM,KAAKM,OAAOO,IAAI,KAAKd,EAAEC,IAAAA,CAAAA;;CAG/B,MAAMc,IAAId,KAA+B;AAEvC,SAAOe,MADS,KAAKT,OAAOU,OAAO,KAAKjB,EAAEC,IAAAA,CAAAA,KAC7B;;wCAIf,MAAMiB,OAAOjB,KAAaJ,QAAkC;AAC1DD,cAAYC,OAAAA;AAEZ,SAAOmB,MADS,KAAKT,OAAOW,OAAO,KAAKlB,EAAEC,IAAAA,EAAMJ,OAAAA,KACnC;;CAGfsB,UAAkCC,KAAuC;AACvE,SAAO,IAAIrB,aAAa,KAAKQ,QAAQ,KAAKL,KAAKC,WAAW,KAAKC,QAAQgB,IAAAA,EAAM,KAAKlB,KAAI;;wCAIxF,MAAMmB,KAAKpB,KAAaqB,KAAK,GAAGX,MAA6C;AAC3Ef,cAAYe,MAAMd,OAAAA;EAClB,MAAM0B,SAASZ,MAAMd,WAAWC,KAAAA,IAAY0B,OAAOb,KAAKd,OAAM,GAAI;AAClE,SAAO,KAAKU,OAAOkB,YAAY,KAAKzB,EAAEC,IAAAA,EAAMqB,IAAIC,OAAAA;;wCAIlD,MAAMG,MAAyBzB,KAAaS,OAAUC,MAAqC;AACzFf,cAAYe,MAAMd,OAAAA;EAClB,MAAMe,OAAO,KAAKV,KAAKW,UAAUH,MAAAA;AAKjC,UAHEC,MAAMd,WAAWC,KAAAA,IACb,MAAM,KAAKS,OAAOE,IAAI,KAAKT,EAAEC,IAAAA,EAAMW,MAAM,MAAMD,KAAKd,QAAQ,KAAA,GAC5D,MAAM,KAAKU,OAAOE,IAAI,KAAKT,EAAEC,IAAAA,EAAMW,MAAM,KAAA,MAC7B;;CA7DpB,YACE,QACA,QACA,MACA;OAHiBL,SAAAA;OACAH,SAAAA;OACAF,OAAAA;;;;;;;;;;;;;;ACZrB,IAAaiC,iBAAb,MAAaA;CASX,MAAMC,UAAyB;AAC7B,OAAKC,MAAMC,OAAOC,cAAc,eAAe;GAC7CC,cAAc;GACdC,KAAKR;GACP,CAAA;;CAGF,MAAMS,WAA0B;CAEhCC,UAAkCC,QAA0C;AAC1E,SAAO,IAAIV,aAAa,KAAKG,MAAMC,QAAQM,QAAQ,KAAKC,KAAI;;CAlB9D,YACE,QAAyBhB,OAAOE,aAAa,EAC7C,OAAwBF,OAAOG,cAAc,EAC7Cc,YAAYjB,OAAOC,iBAAiB,EACpC;OAHiBO,QAAAA;OACAQ,OAAAA;AAGjBC,YAAUC,SAAS,KAAI"}
@@ -1,11 +1,12 @@
1
- import { n as AtomicKVStore, o as NonEmptyString, t as AtomicKVAdaptor } from "./types-PDNBLwuJ.js";
1
+ import { n as AtomicKVAdaptor, r as AtomicKVStore, s as NonEmptyString, t as KVUtilService } from "./kvutil.service-3_YSZSxJ.js";
2
2
  import { Lifecycle, LifecycleManager } from "@zeltjs/core";
3
3
 
4
4
  //#region src/adaptor-memory/memory-kv.adaptor.d.ts
5
5
  declare class MemoryKVAdaptor implements AtomicKVAdaptor, Lifecycle {
6
+ private readonly util;
6
7
  private readonly data;
7
8
  private readonly gcInterval;
8
- constructor(lifecycle?: LifecycleManager);
9
+ constructor(util?: KVUtilService, lifecycle?: LifecycleManager);
9
10
  private gc;
10
11
  startup(): Promise<void>;
11
12
  shutdown(): Promise<void>;
@@ -13,4 +14,4 @@ declare class MemoryKVAdaptor implements AtomicKVAdaptor, Lifecycle {
13
14
  }
14
15
  //#endregion
15
16
  export { MemoryKVAdaptor as t };
16
- //# sourceMappingURL=index-BlASVNzQ.d.ts.map
17
+ //# sourceMappingURL=index-C0Xw8ZsQ.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C0Xw8ZsQ.d.ts","names":[],"sources":["../src/adaptor-memory/memory-kv.adaptor.ts"],"mappings":";;;;cA6Ba,eAAA,YAA2B,eAAA,EAAiB,SAAA;EAAA,iBAKpC,IAAA;EAAA,iBAJF,IAAA;EAAA,iBACA,UAAA;cAGE,IAAA,GAAI,aAAA,EACrB,SAAA,GAAS,gBAAA;EAAA,QAOH,EAAA;EASF,OAAA,CAAA,GAAW,OAAA;EAEX,QAAA,CAAA,GAAY,OAAA;EAIlB,SAAA,wBAAA,CAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { a as KVStore, i as KVAdaptor, n as AtomicKVStore, o as NonEmptyString, r as Defined, s as SetOptions, t as AtomicKVAdaptor } from "./types-PDNBLwuJ.js";
2
- import { t as MemoryKVAdaptor } from "./index-BlASVNzQ.js";
1
+ import { a as KVAdaptor, c as SetOptions, i as Defined, n as AtomicKVAdaptor, o as KVStore, r as AtomicKVStore, s as NonEmptyString, t as KVUtilService } from "./kvutil.service-3_YSZSxJ.js";
2
+ import { t as MemoryKVAdaptor } from "./index-C0Xw8ZsQ.js";
3
3
 
4
- //#region src/errors.d.ts
4
+ //#region src/kv.errors.d.ts
5
5
  declare const ZeltKVInvalidTtlError: new (context: {
6
6
  ttlSec: number;
7
7
  }, cause?: unknown) => Error & {
@@ -10,14 +10,6 @@ declare const ZeltKVInvalidTtlError: new (context: {
10
10
  ttlSec: number;
11
11
  };
12
12
  };
13
- declare const isZeltKVInvalidTtlError: (err: unknown) => err is InstanceType<typeof ZeltKVInvalidTtlError>;
14
13
  //#endregion
15
- //#region src/namespace.d.ts
16
- declare const joinPrefix: (a: string, b: string) => string;
17
- //#endregion
18
- //#region src/serialize.d.ts
19
- declare const serialize: (value: Defined) => string;
20
- declare const deserialize: <T>(raw: string | null) => T | undefined;
21
- //#endregion
22
- export { type AtomicKVAdaptor, type AtomicKVStore, type Defined, type KVAdaptor, type KVStore, MemoryKVAdaptor as MemoryKV, MemoryKVAdaptor, MemoryKVAdaptor as MemoryKVService, type NonEmptyString, type SetOptions, ZeltKVInvalidTtlError, deserialize, isZeltKVInvalidTtlError, joinPrefix, serialize };
14
+ export { type AtomicKVAdaptor, type AtomicKVStore, type Defined, type KVAdaptor, type KVStore, KVUtilService, MemoryKVAdaptor as MemoryKV, MemoryKVAdaptor, MemoryKVAdaptor as MemoryKVService, type NonEmptyString, type SetOptions, ZeltKVInvalidTtlError };
23
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/errors.ts","../src/namespace.ts","../src/serialize.ts"],"mappings":";;;;cAEa,qBAAA,OAAqB,OAAA;;uBAGjC,KAAA;EAAA;;;;;cAEY,uBAAA,GACX,GAAA,cACC,GAAA,IAAO,YAAA,QAAoB,qBAAA;;;cCTjB,UAAA,GAAc,CAAA,UAAW,CAAA;;;cCEzB,SAAA,GAAa,KAAA,EAAO,OAAA;AAAA,cAIpB,WAAA,MAAkB,GAAA,oBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/kv.errors.ts"],"mappings":";;;;cAEa,qBAAA,OAAqB,OAAA;;uBAGjC,KAAA;EAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as isZeltKVInvalidTtlError, i as ZeltKVInvalidTtlError, n as serialize, r as joinPrefix, t as deserialize } from "./serialize-DwL5y2vb.js";
2
- import { t as MemoryKVAdaptor } from "./adaptor-memory-BcPJjrIS.js";
3
- export { MemoryKVAdaptor as MemoryKV, MemoryKVAdaptor, MemoryKVAdaptor as MemoryKVService, ZeltKVInvalidTtlError, deserialize, isZeltKVInvalidTtlError, joinPrefix, serialize };
1
+ import { n as ZeltKVInvalidTtlError, t as KVUtilService } from "./util-BMIWgHNV.js";
2
+ import { t as MemoryKVAdaptor } from "./adaptor-memory-BpDnyuqz.js";
3
+ export { KVUtilService, MemoryKVAdaptor as MemoryKV, MemoryKVAdaptor, MemoryKVAdaptor as MemoryKVService, ZeltKVInvalidTtlError };
@@ -1,4 +1,4 @@
1
- //#region src/types.d.ts
1
+ //#region src/kv.types.d.ts
2
2
  /** 空文字を型レベルで禁止 */
3
3
  type NonEmptyString<S extends string> = S extends '' ? never : S;
4
4
  /** undefined を除外した値型 */
@@ -48,5 +48,12 @@ type SetOptions = {
48
48
  ttlSec?: number;
49
49
  };
50
50
  //#endregion
51
- export { KVStore as a, KVAdaptor as i, AtomicKVStore as n, NonEmptyString as o, Defined as r, SetOptions as s, AtomicKVAdaptor as t };
52
- //# sourceMappingURL=types-PDNBLwuJ.d.ts.map
51
+ //#region src/util/kvutil.service.d.ts
52
+ declare class KVUtilService {
53
+ joinPrefix(a: string, b: string): string;
54
+ serialize(value: Defined): string;
55
+ deserialize<T>(raw: string | null): T | undefined;
56
+ }
57
+ //#endregion
58
+ export { KVAdaptor as a, SetOptions as c, Defined as i, AtomicKVAdaptor as n, KVStore as o, AtomicKVStore as r, NonEmptyString as s, KVUtilService as t };
59
+ //# sourceMappingURL=kvutil.service-3_YSZSxJ.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kvutil.service-3_YSZSxJ.d.ts","names":[],"sources":["../src/kv.types.ts","../src/util/kvutil.service.ts"],"mappings":";;KACY,cAAA,qBAAmC,CAAA,sBAAuB,CAAA;;KAI1D,OAAA;;UAGK,SAAA;EACf,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,OAAA;AAAA;;UAI/C,eAAA,SAAwB,SAAA;EACvC,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA;;UAI/C,OAAA;EACf,GAAA,IAAO,GAAA,WAAc,OAAA,CAAQ,CAAA;EAXd;;;EAef,GAAA,WAAc,OAAA,EAAS,GAAA,UAAa,KAAA,EAAO,CAAA,EAAG,IAAA,GAAO,UAAA,GAAa,OAAA;EAClE,GAAA,CAAI,GAAA,WAAc,OAAA;EAClB,GAAA,CAAI,GAAA,WAAc,OAAA;EAhBmD;;;;EAqBrE,MAAA,CAAO,GAAA,UAAa,MAAA,WAAiB,OAAA;EArBoB;EAuBzD,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,OAAA;AAAA;;UAI/C,aAAA,SAAsB,OAAA;EAvBtB;;;;EA4Bf,IAAA,CAAK,GAAA,UAAa,EAAA,WAAa,IAAA;IAAS,MAAA;EAAA,IAAoB,OAAA;EA5BZ;;;;EAiChD,KAAA,WAAgB,OAAA,EAAS,GAAA,UAAa,KAAA,EAAO,CAAA,EAAG,IAAA,GAAO,UAAA,GAAa,OAAA;EACpE,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA;AAAA,KAGpD,UAAA;EACV,MAAA;AAAA;;;cC7CW,aAAA;EACX,UAAA,CAAW,CAAA,UAAW,CAAA;EAItB,SAAA,CAAU,KAAA,EAAO,OAAA;EAIjB,WAAA,GAAA,CAAe,GAAA,kBAAqB,CAAA;AAAA"}
@@ -0,0 +1,32 @@
1
+ import { Injectable } from "@zeltjs/core";
2
+ import { defineError } from "@zeltjs/core/internal-bridge/errors";
3
+ //#region src/kv.errors.ts
4
+ const ZeltKVInvalidTtlError = defineError("ZeltKVInvalidTtlError", (ctx) => `ttlSec must be > 0, got ${ctx.ttlSec}`);
5
+ //#endregion
6
+ //#region ../unsafe-type-lib/dist/index.js
7
+ const unsafeTypedJsonParse = (data) => JSON.parse(data);
8
+ //#endregion
9
+ //#region src/util/kvutil.service.ts
10
+ function _ts_decorate(decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ }
16
+ var KVUtilService = class {
17
+ joinPrefix(a, b) {
18
+ return a + b;
19
+ }
20
+ serialize(value) {
21
+ return JSON.stringify(value);
22
+ }
23
+ deserialize(raw) {
24
+ if (raw === null) return void 0;
25
+ return unsafeTypedJsonParse(raw);
26
+ }
27
+ };
28
+ KVUtilService = _ts_decorate([Injectable()], KVUtilService);
29
+ //#endregion
30
+ export { ZeltKVInvalidTtlError as n, KVUtilService as t };
31
+
32
+ //# sourceMappingURL=util-BMIWgHNV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util-BMIWgHNV.js","names":["defineError","ZeltKVInvalidTtlError","ctx","ttlSec","Injectable","unsafeTypedJsonParse","KVUtilService","joinPrefix","a","b","serialize","value","JSON","stringify","deserialize","raw","undefined"],"sources":["../src/kv.errors.ts","../../src/callable.ts","../../src/class-token.ts","../../src/json.ts","../src/util/kvutil.service.ts"],"sourcesContent":["import { defineError } from '@zeltjs/core/internal-bridge/errors';\n\nexport const ZeltKVInvalidTtlError = defineError(\n 'ZeltKVInvalidTtlError',\n (ctx: { ttlSec: number }) => `ttlSec must be > 0, got ${ctx.ttlSec}`,\n);\n","export const toUnknownCallable = (fn: unknown): ((...args: unknown[]) => unknown) =>\n fn as (...args: unknown[]) => unknown;\n","export const isClassToken = <T extends object = object>(\n value: unknown,\n): value is new (\n ...args: never[]\n) => T => typeof value === 'function' && 'prototype' in value;\n","export const unsafeTypedJsonParse = <T>(data: string): T => JSON.parse(data) as T;\n","import { Injectable } from '@zeltjs/core';\nimport { unsafeTypedJsonParse } from '@zeltjs/unsafe-type-lib';\n\nimport type { Defined } from '../kv.types';\n\n@Injectable()\nexport class KVUtilService {\n joinPrefix(a: string, b: string): string {\n return a + b;\n }\n\n serialize(value: Defined): string {\n return JSON.stringify(value);\n }\n\n deserialize<T>(raw: string | null): T | undefined {\n if (raw === null) return undefined;\n return unsafeTypedJsonParse<T>(raw);\n }\n}\n"],"mappings":";;;AAEA,MAAaC,wBAAwBD,YACnC,0BACCE,QAA4B,2BAA2BA,IAAIC,SAAQ;;;AGJtE,MAAa,wBAA2B,SAAoB,KAAK,MAAM,KAAK;;;;;;;;;ACM5E,IAAaG,gBAAb,MAAaA;CACXC,WAAWC,GAAWC,GAAmB;AACvC,SAAOD,IAAIC;;CAGbC,UAAUC,OAAwB;AAChC,SAAOC,KAAKC,UAAUF,MAAAA;;CAGxBG,YAAeC,KAAmC;AAChD,MAAIA,QAAQ,KAAM,QAAOC,KAAAA;AACzB,SAAOX,qBAAwBU,IAAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeltjs/kv",
3
- "version": "0.6.1",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -30,8 +30,8 @@
30
30
  ],
31
31
  "peerDependencies": {
32
32
  "vitest": ">=4 <5",
33
- "@zeltjs/core": "0.6.1",
34
- "@zeltjs/redis": "0.6.1"
33
+ "@zeltjs/core": "0.8.0",
34
+ "@zeltjs/redis": "0.8.0"
35
35
  },
36
36
  "peerDependenciesMeta": {
37
37
  "@zeltjs/redis": {
@@ -41,8 +41,9 @@
41
41
  "devDependencies": {
42
42
  "@types/node": "22.19.17",
43
43
  "ioredis": "5.10.1",
44
- "@zeltjs/core": "0.6.1",
45
- "@zeltjs/redis": "0.6.1"
44
+ "@zeltjs/unsafe-type-lib": "0.8.0",
45
+ "@zeltjs/core": "0.8.0",
46
+ "@zeltjs/redis": "0.8.0"
46
47
  },
47
48
  "volta": {
48
49
  "extends": "../../package.json"
@@ -1,103 +0,0 @@
1
- import { i as ZeltKVInvalidTtlError, n as serialize, r as joinPrefix, t as deserialize } from "./serialize-DwL5y2vb.js";
2
- import { Injectable, LifecycleManager, inject } from "@zeltjs/core";
3
- //#region src/adaptor-memory/memory-kv.adaptor.ts
4
- /** @throws {ZeltKVInvalidTtlError} */
5
- function validateTtl(ttlSec) {
6
- if (ttlSec !== void 0 && ttlSec <= 0) throw new ZeltKVInvalidTtlError({ ttlSec });
7
- }
8
- function makeEntry(raw, ttlSec) {
9
- return ttlSec !== void 0 ? {
10
- raw,
11
- expiresAt: Date.now() + ttlSec * 1e3
12
- } : { raw };
13
- }
14
- var MemoryKVAdaptor = @Injectable() class {
15
- constructor(lifecycle = inject(LifecycleManager)) {
16
- this.data = /* @__PURE__ */ new Map();
17
- this.gcInterval = setInterval(() => this.gc(), 6e4);
18
- this.gcInterval.unref();
19
- lifecycle.register(this);
20
- }
21
- gc() {
22
- const now = Date.now();
23
- for (const [key, entry] of this.data) if (entry.expiresAt !== void 0 && entry.expiresAt <= now) this.data.delete(key);
24
- }
25
- async startup() {}
26
- async shutdown() {
27
- clearInterval(this.gcInterval);
28
- }
29
- namespace(prefix) {
30
- return new MemoryKVStore(this.data, prefix);
31
- }
32
- };
33
- var MemoryKVStore = class MemoryKVStore {
34
- constructor(data, prefix) {
35
- this.data = data;
36
- this.prefix = prefix;
37
- }
38
- k(key) {
39
- return this.prefix + key;
40
- }
41
- current(key) {
42
- const entry = this.data.get(this.k(key));
43
- if (!entry) return void 0;
44
- if (entry.expiresAt !== void 0 && entry.expiresAt <= Date.now()) {
45
- this.data.delete(this.k(key));
46
- return;
47
- }
48
- return entry;
49
- }
50
- async get(key) {
51
- const entry = this.current(key);
52
- return entry ? deserialize(entry.raw) : void 0;
53
- }
54
- /** @throws {ZeltKVInvalidTtlError} */
55
- async set(key, value, opts) {
56
- validateTtl(opts?.ttlSec);
57
- const raw = serialize(value);
58
- this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));
59
- }
60
- async del(key) {
61
- this.data.delete(this.k(key));
62
- }
63
- async has(key) {
64
- return this.current(key) !== void 0;
65
- }
66
- /** @throws {ZeltKVInvalidTtlError} */
67
- async expire(key, ttlSec) {
68
- validateTtl(ttlSec);
69
- const entry = this.current(key);
70
- if (!entry) return false;
71
- entry.expiresAt = Date.now() + ttlSec * 1e3;
72
- return true;
73
- }
74
- namespace(sub) {
75
- return new MemoryKVStore(this.data, joinPrefix(this.prefix, sub));
76
- }
77
- /** @throws {ZeltKVInvalidTtlError} */
78
- async incr(key, by = 1, opts) {
79
- validateTtl(opts?.ttlSec);
80
- const k = this.k(key);
81
- const entry = this.current(key);
82
- if (!entry) {
83
- const raw = serialize(by);
84
- this.data.set(k, makeEntry(raw, opts?.ttlSec));
85
- return by;
86
- }
87
- const next = (deserialize(entry.raw) ?? 0) + by;
88
- entry.raw = serialize(next);
89
- return next;
90
- }
91
- /** @throws {ZeltKVInvalidTtlError} */
92
- async setnx(key, value, opts) {
93
- validateTtl(opts?.ttlSec);
94
- if (this.current(key)) return false;
95
- const raw = serialize(value);
96
- this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));
97
- return true;
98
- }
99
- };
100
- //#endregion
101
- export { MemoryKVAdaptor as t };
102
-
103
- //# sourceMappingURL=adaptor-memory-BcPJjrIS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adaptor-memory-BcPJjrIS.js","names":[],"sources":["../src/adaptor-memory/memory-kv.adaptor.ts"],"sourcesContent":["import type { Lifecycle } from '@zeltjs/core';\nimport { Injectable, inject, LifecycleManager } from '@zeltjs/core';\n\nimport { ZeltKVInvalidTtlError } from '../errors';\nimport { joinPrefix } from '../namespace';\nimport { deserialize, serialize } from '../serialize';\nimport type { AtomicKVAdaptor, AtomicKVStore, Defined, NonEmptyString, SetOptions } from '../types';\n\ntype Entry = {\n raw: string;\n /** epoch ms。undefined は永続 */\n expiresAt?: number;\n};\n\n/** @throws {ZeltKVInvalidTtlError} */\nfunction validateTtl(ttlSec: number | undefined): void {\n if (ttlSec !== undefined && ttlSec <= 0) throw new ZeltKVInvalidTtlError({ ttlSec });\n}\n\nfunction makeEntry(raw: string, ttlSec?: number): Entry {\n return ttlSec !== undefined ? { raw, expiresAt: Date.now() + ttlSec * 1000 } : { raw };\n}\n\n@Injectable()\nexport class MemoryKVAdaptor implements AtomicKVAdaptor, Lifecycle {\n private readonly data = new Map<string, Entry>();\n private readonly gcInterval: ReturnType<typeof setInterval>;\n\n constructor(lifecycle = inject(LifecycleManager)) {\n this.gcInterval = setInterval(() => this.gc(), 60_000);\n this.gcInterval.unref();\n lifecycle.register(this);\n }\n\n private gc(): void {\n const now = Date.now();\n for (const [key, entry] of this.data) {\n if (entry.expiresAt !== undefined && entry.expiresAt <= now) {\n this.data.delete(key);\n }\n }\n }\n\n async startup(): Promise<void> {}\n\n async shutdown(): Promise<void> {\n clearInterval(this.gcInterval);\n }\n\n namespace<const S extends string>(prefix: NonEmptyString<S>): AtomicKVStore {\n return new MemoryKVStore(this.data, prefix);\n }\n}\n\nclass MemoryKVStore implements AtomicKVStore {\n constructor(\n private readonly data: Map<string, Entry>,\n private readonly prefix: string,\n ) {}\n\n private k(key: string): string {\n return this.prefix + key;\n }\n\n private current(key: string): Entry | undefined {\n const entry = this.data.get(this.k(key));\n if (!entry) return undefined;\n if (entry.expiresAt !== undefined && entry.expiresAt <= Date.now()) {\n this.data.delete(this.k(key));\n return undefined;\n }\n return entry;\n }\n\n async get<T>(key: string): Promise<T | undefined> {\n const entry = this.current(key);\n return entry ? deserialize<T>(entry.raw) : undefined;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async set<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<void> {\n validateTtl(opts?.ttlSec);\n const raw = serialize(value);\n this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));\n }\n\n async del(key: string): Promise<void> {\n this.data.delete(this.k(key));\n }\n\n async has(key: string): Promise<boolean> {\n return this.current(key) !== undefined;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async expire(key: string, ttlSec: number): Promise<boolean> {\n validateTtl(ttlSec);\n const entry = this.current(key);\n if (!entry) return false;\n entry.expiresAt = Date.now() + ttlSec * 1000;\n return true;\n }\n\n namespace<const S extends string>(sub: NonEmptyString<S>): AtomicKVStore {\n return new MemoryKVStore(this.data, joinPrefix(this.prefix, sub));\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async incr(key: string, by = 1, opts?: { ttlSec?: number }): Promise<number> {\n validateTtl(opts?.ttlSec);\n const k = this.k(key);\n const entry = this.current(key);\n if (!entry) {\n const raw = serialize(by);\n this.data.set(k, makeEntry(raw, opts?.ttlSec));\n return by;\n }\n const next = (deserialize<number>(entry.raw) ?? 0) + by;\n entry.raw = serialize(next);\n return next;\n }\n\n /** @throws {ZeltKVInvalidTtlError} */\n async setnx<T extends Defined>(key: string, value: T, opts?: SetOptions): Promise<boolean> {\n validateTtl(opts?.ttlSec);\n if (this.current(key)) return false;\n const raw = serialize(value);\n this.data.set(this.k(key), makeEntry(raw, opts?.ttlSec));\n return true;\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BlASVNzQ.d.ts","names":[],"sources":["../src/adaptor-memory/memory-kv.adaptor.ts"],"mappings":";;;;cAwBa,eAAA,YAA2B,eAAA,EAAiB,SAAA;EAAA,iBACtC,IAAA;EAAA,iBACA,UAAA;cAEL,SAAA,GAAS,gBAAA;EAAA,QAMb,EAAA;EASF,OAAA,CAAA,GAAW,OAAA;EAEX,QAAA,CAAA,GAAY,OAAA;EAIlB,SAAA,wBAAA,CAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA"}
@@ -1,20 +0,0 @@
1
- import { defineError } from "@zeltjs/core/internal-bridge/errors";
2
- //#region src/errors.ts
3
- const ZeltKVInvalidTtlError = defineError("ZeltKVInvalidTtlError", (ctx) => `ttlSec must be > 0, got ${ctx.ttlSec}`);
4
- const isZeltKVInvalidTtlError = (err) => {
5
- return err instanceof ZeltKVInvalidTtlError;
6
- };
7
- //#endregion
8
- //#region src/namespace.ts
9
- const joinPrefix = (a, b) => a + b;
10
- //#endregion
11
- //#region src/serialize.ts
12
- const serialize = (value) => JSON.stringify(value);
13
- const deserialize = (raw) => {
14
- if (raw === null) return void 0;
15
- return JSON.parse(raw);
16
- };
17
- //#endregion
18
- export { isZeltKVInvalidTtlError as a, ZeltKVInvalidTtlError as i, serialize as n, joinPrefix as r, deserialize as t };
19
-
20
- //# sourceMappingURL=serialize-DwL5y2vb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialize-DwL5y2vb.js","names":[],"sources":["../src/errors.ts","../src/namespace.ts","../src/serialize.ts"],"sourcesContent":["import { defineError } from '@zeltjs/core/internal-bridge/errors';\n\nexport const ZeltKVInvalidTtlError = defineError(\n 'ZeltKVInvalidTtlError',\n (ctx: { ttlSec: number }) => `ttlSec must be > 0, got ${ctx.ttlSec}`,\n);\n\nexport const isZeltKVInvalidTtlError = (\n err: unknown,\n): err is InstanceType<typeof ZeltKVInvalidTtlError> => {\n return err instanceof ZeltKVInvalidTtlError;\n};\n","export const joinPrefix = (a: string, b: string): string => a + b;\n","import type { Defined } from './types';\n\nexport const serialize = (value: Defined): string => JSON.stringify(value);\n\n// deserialize stays sync without Result because we control the input (always\n// a string we previously serialized via JSON.stringify, plus driver-controlled null sentinel).\nexport const deserialize = <T>(raw: string | null): T | undefined => {\n if (raw === null) return undefined;\n return JSON.parse(raw) as T;\n};\n"],"mappings":";;AAEA,MAAa,wBAAwB,YACnC,0BACC,QAA4B,2BAA2B,IAAI,SAC7D;AAED,MAAa,2BACX,QACsD;AACtD,QAAO,eAAe;;;;ACVxB,MAAa,cAAc,GAAW,MAAsB,IAAI;;;ACEhE,MAAa,aAAa,UAA2B,KAAK,UAAU,MAAM;AAI1E,MAAa,eAAkB,QAAsC;AACnE,KAAI,QAAQ,KAAM,QAAO,KAAA;AACzB,QAAO,KAAK,MAAM,IAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-PDNBLwuJ.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";;KACY,cAAA,qBAAmC,CAAA,sBAAuB,CAAA;;KAI1D,OAAA;;UAGK,SAAA;EACf,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,OAAA;AAAA;;UAI/C,eAAA,SAAwB,SAAA;EACvC,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA;;UAI/C,OAAA;EACf,GAAA,IAAO,GAAA,WAAc,OAAA,CAAQ,CAAA;EAXd;;;EAef,GAAA,WAAc,OAAA,EAAS,GAAA,UAAa,KAAA,EAAO,CAAA,EAAG,IAAA,GAAO,UAAA,GAAa,OAAA;EAClE,GAAA,CAAI,GAAA,WAAc,OAAA;EAClB,GAAA,CAAI,GAAA,WAAc,OAAA;EAhBmD;;;;EAqBrE,MAAA,CAAO,GAAA,UAAa,MAAA,WAAiB,OAAA;EArBoB;EAuBzD,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,OAAA;AAAA;;UAI/C,aAAA,SAAsB,OAAA;EAvBtB;;;;EA4Bf,IAAA,CAAK,GAAA,UAAa,EAAA,WAAa,IAAA;IAAS,MAAA;EAAA,IAAoB,OAAA;EA5BZ;;;;EAiChD,KAAA,WAAgB,OAAA,EAAS,GAAA,UAAa,KAAA,EAAO,CAAA,EAAG,IAAA,GAAO,UAAA,GAAa,OAAA;EACpE,SAAA,yBAAkC,MAAA,EAAQ,cAAA,CAAe,CAAA,IAAK,aAAA;AAAA;AAAA,KAGpD,UAAA;EACV,MAAA;AAAA"}