@zeltjs/kv 0.9.1-canary.2 → 0.9.1-canary.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +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-constructor.ts","../../src/deferred-value.ts","../../src/injection-token-weak-map.ts","../../src/json.ts","../../src/keyed-values.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 isClassConstructor = <T extends object = object>(\n value: unknown,\n): value is new (\n ...args: never[]\n) => T => {\n if (typeof value !== 'function') return false;\n\n try {\n Reflect.construct(Object, [], value);\n return true;\n } catch {\n return false;\n }\n};\n","export const DEFERRED_VALUE_TYPE: unique symbol = Symbol('zelt.deferredValueType');\n\nexport type DeferredValueHandle<T> = {\n readonly [DEFERRED_VALUE_TYPE]: T;\n};\n\nexport type DeferredValueOf<THandle extends DeferredValueHandle<unknown>> =\n THandle[typeof DEFERRED_VALUE_TYPE];\n\nexport const unsafeResolveDeferredValue = <THandle extends DeferredValueHandle<unknown>>(\n handle: THandle,\n value: unknown,\n): DeferredValueOf<THandle> => {\n void handle;\n return value as DeferredValueOf<THandle>;\n};\n","import type { InjectionToken } from '@needle-di/core';\n\ntype TokenKey = new (...args: never[]) => unknown;\n\nexport class UnsafeInjectionTokenWeakMap {\n private readonly map = new WeakMap<TokenKey, InjectionToken<unknown>>();\n\n get<T>(key: TokenKey): InjectionToken<T> | undefined {\n const token = this.map.get(key);\n return token as InjectionToken<T> | undefined;\n }\n\n set<T>(key: TokenKey, token: InjectionToken<T>): void {\n this.map.set(key, token as InjectionToken<unknown>);\n }\n}\n","export const unsafeTypedJsonParse = <T>(data: string): T => JSON.parse(data) as T;\n","type KeyedItem = {\n readonly key: PropertyKey;\n};\n\nexport type KeyedMethodValue<TItem, TMethod extends PropertyKey> = TMethod extends keyof TItem\n ? TItem[TMethod] extends (...args: readonly never[]) => infer TValue\n ? Awaited<TValue>\n : never\n : never;\n\nexport type ObjectFromKeyedValues<\n TItems extends readonly KeyedItem[],\n TMethod extends PropertyKey,\n> = {\n readonly [TItem in TItems[number] as TItem['key']]: KeyedMethodValue<TItem, TMethod>;\n};\n\nexport type MapFromKeyedValues<\n TItems extends readonly KeyedItem[],\n TMethod extends PropertyKey,\n> = ReadonlyMap<TItems[number], KeyedMethodValue<TItems[number], TMethod>>;\n\nexport type KeyedValues<TItems extends readonly KeyedItem[], TMethod extends PropertyKey> = {\n readonly object: ObjectFromKeyedValues<TItems, TMethod>;\n readonly map: MapFromKeyedValues<TItems, TMethod>;\n};\n\ntype IsEmptyObject<T> = keyof T extends never ? true : false;\n\nexport type ObjectFromNonEmptyKeyedValues<\n TItems extends readonly KeyedItem[],\n TMethod extends PropertyKey,\n> = {\n readonly [TItem in TItems[number] as IsEmptyObject<KeyedMethodValue<TItem, TMethod>> extends true\n ? never\n : TItem['key']]: KeyedMethodValue<TItem, TMethod>;\n};\n\nconst isEmptyObject = (value: object): boolean => Object.keys(value).length === 0;\n\nexport const unsafeObjectFromKeyedValuesSync = <\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: () => object;\n })[],\n>(\n items: TItems,\n method: TMethod,\n): ObjectFromKeyedValues<TItems, TMethod> => {\n const result: Record<PropertyKey, object> = {};\n\n for (const item of items) {\n result[item.key] = item[method]();\n }\n\n return result as ObjectFromKeyedValues<TItems, TMethod>;\n};\n\nexport const unsafeObjectFromNonEmptyKeyedValuesSync = <\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: () => object;\n })[],\n>(\n items: TItems,\n method: TMethod,\n): ObjectFromNonEmptyKeyedValues<TItems, TMethod> => {\n const result: Record<PropertyKey, object> = {};\n\n for (const item of items) {\n const value = item[method]();\n if (!isEmptyObject(value)) {\n result[item.key] = value;\n }\n }\n\n return result as ObjectFromNonEmptyKeyedValues<TItems, TMethod>;\n};\n\nexport const unsafeObjectFromKeyedValues = async <\n TContext,\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: (context: TContext) => object | Promise<object>;\n })[],\n>(\n items: TItems,\n method: TMethod,\n context: TContext,\n): Promise<ObjectFromKeyedValues<TItems, TMethod>> => {\n const result: Record<PropertyKey, object> = {};\n\n for (const item of items) {\n result[item.key] = await item[method](context);\n }\n\n return result as ObjectFromKeyedValues<TItems, TMethod>;\n};\n\nexport const unsafeKeyedValues = async <\n TContext,\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: (context: TContext) => object | Promise<object>;\n })[],\n>(\n items: TItems,\n method: TMethod,\n context: TContext,\n): Promise<KeyedValues<TItems, TMethod>> => {\n const object: Record<PropertyKey, object> = {};\n const map = new Map<KeyedItem, object>();\n\n for (const item of items) {\n const value = await item[method](context);\n object[item.key] = value;\n map.set(item, value);\n }\n\n return {\n object: object as ObjectFromKeyedValues<TItems, TMethod>,\n map: map as unknown as MapFromKeyedValues<TItems, TMethod>,\n };\n};\n\nexport const
|
|
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-constructor.ts","../../src/deferred-value.ts","../../src/injection-token-weak-map.ts","../../src/json.ts","../../src/keyed-values.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 isClassConstructor = <T extends object = object>(\n value: unknown,\n): value is new (\n ...args: never[]\n) => T => {\n if (typeof value !== 'function') return false;\n\n try {\n Reflect.construct(Object, [], value);\n return true;\n } catch {\n return false;\n }\n};\n","export const DEFERRED_VALUE_TYPE: unique symbol = Symbol('zelt.deferredValueType');\n\nexport type DeferredValueHandle<T> = {\n readonly [DEFERRED_VALUE_TYPE]: T;\n};\n\nexport type DeferredValueOf<THandle extends DeferredValueHandle<unknown>> =\n THandle[typeof DEFERRED_VALUE_TYPE];\n\nexport const unsafeResolveDeferredValue = <THandle extends DeferredValueHandle<unknown>>(\n handle: THandle,\n value: unknown,\n): DeferredValueOf<THandle> => {\n void handle;\n return value as DeferredValueOf<THandle>;\n};\n","import type { InjectionToken } from '@needle-di/core';\n\ntype TokenKey = abstract new (...args: never[]) => unknown;\n\nexport class UnsafeInjectionTokenWeakMap {\n private readonly map = new WeakMap<TokenKey, InjectionToken<unknown>>();\n\n get<T>(key: TokenKey): InjectionToken<T> | undefined {\n const token = this.map.get(key);\n return token as InjectionToken<T> | undefined;\n }\n\n set<T>(key: TokenKey, token: InjectionToken<T>): void {\n this.map.set(key, token as InjectionToken<unknown>);\n }\n}\n","export const unsafeTypedJsonParse = <T>(data: string): T => JSON.parse(data) as T;\n","type KeyedItem = {\n readonly key: PropertyKey;\n};\n\nexport type KeyedMethodValue<TItem, TMethod extends PropertyKey> = TMethod extends keyof TItem\n ? TItem[TMethod] extends (...args: readonly never[]) => infer TValue\n ? Awaited<TValue>\n : never\n : never;\n\nexport type ObjectFromKeyedValues<\n TItems extends readonly KeyedItem[],\n TMethod extends PropertyKey,\n> = {\n readonly [TItem in TItems[number] as TItem['key']]: KeyedMethodValue<TItem, TMethod>;\n};\n\nexport type MapFromKeyedValues<\n TItems extends readonly KeyedItem[],\n TMethod extends PropertyKey,\n> = ReadonlyMap<TItems[number], KeyedMethodValue<TItems[number], TMethod>>;\n\nexport type KeyedValues<TItems extends readonly KeyedItem[], TMethod extends PropertyKey> = {\n readonly object: ObjectFromKeyedValues<TItems, TMethod>;\n readonly map: MapFromKeyedValues<TItems, TMethod>;\n};\n\nexport type KeyedValueEntry<TItem extends KeyedItem, TMethod extends PropertyKey> = {\n readonly key: TItem['key'];\n readonly item: TItem;\n readonly value: KeyedMethodValue<TItem, TMethod>;\n};\n\ntype IsEmptyObject<T> = keyof T extends never ? true : false;\n\nexport type ObjectFromNonEmptyKeyedValues<\n TItems extends readonly KeyedItem[],\n TMethod extends PropertyKey,\n> = {\n readonly [TItem in TItems[number] as IsEmptyObject<KeyedMethodValue<TItem, TMethod>> extends true\n ? never\n : TItem['key']]: KeyedMethodValue<TItem, TMethod>;\n};\n\nconst isEmptyObject = (value: object): boolean => Object.keys(value).length === 0;\n\nexport const unsafeObjectFromKeyedValuesSync = <\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: () => object;\n })[],\n>(\n items: TItems,\n method: TMethod,\n): ObjectFromKeyedValues<TItems, TMethod> => {\n const result: Record<PropertyKey, object> = {};\n\n for (const item of items) {\n result[item.key] = item[method]();\n }\n\n return result as ObjectFromKeyedValues<TItems, TMethod>;\n};\n\nexport const unsafeObjectFromNonEmptyKeyedValuesSync = <\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: () => object;\n })[],\n>(\n items: TItems,\n method: TMethod,\n): ObjectFromNonEmptyKeyedValues<TItems, TMethod> => {\n const result: Record<PropertyKey, object> = {};\n\n for (const item of items) {\n const value = item[method]();\n if (!isEmptyObject(value)) {\n result[item.key] = value;\n }\n }\n\n return result as ObjectFromNonEmptyKeyedValues<TItems, TMethod>;\n};\n\nexport const unsafeObjectFromKeyedValues = async <\n TContext,\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: (context: TContext) => object | Promise<object>;\n })[],\n>(\n items: TItems,\n method: TMethod,\n context: TContext,\n): Promise<ObjectFromKeyedValues<TItems, TMethod>> => {\n const result: Record<PropertyKey, object> = {};\n\n for (const item of items) {\n result[item.key] = await item[method](context);\n }\n\n return result as ObjectFromKeyedValues<TItems, TMethod>;\n};\n\nexport const unsafeKeyedValues = async <\n TContext,\n const TMethod extends PropertyKey,\n const TItems extends readonly (KeyedItem & {\n readonly [TKey in TMethod]: (context: TContext) => object | Promise<object>;\n })[],\n>(\n items: TItems,\n method: TMethod,\n context: TContext,\n): Promise<KeyedValues<TItems, TMethod>> => {\n const object: Record<PropertyKey, object> = {};\n const map = new Map<KeyedItem, object>();\n\n for (const item of items) {\n const value = await item[method](context);\n object[item.key] = value;\n map.set(item, value);\n }\n\n return {\n object: object as ObjectFromKeyedValues<TItems, TMethod>,\n map: map as unknown as MapFromKeyedValues<TItems, TMethod>,\n };\n};\n\nexport const unsafeGetKeyedValueEntriesForClass = <\n const TMethod extends PropertyKey,\n const TItems extends readonly KeyedItem[],\n const TClass extends abstract new (\n ...args: never[]\n ) => TItems[number],\n>(\n items: TItems,\n values: MapFromKeyedValues<TItems, TMethod>,\n itemClass: TClass,\n): readonly KeyedValueEntry<InstanceType<TClass>, TMethod>[] => {\n const entries: KeyedValueEntry<InstanceType<TClass>, TMethod>[] = [];\n\n for (const item of items) {\n if (!(item instanceof itemClass)) continue;\n entries.push({\n key: item.key,\n item: item as InstanceType<TClass>,\n value: values.get(item) as KeyedMethodValue<InstanceType<TClass>, TMethod>,\n });\n }\n\n return entries;\n};\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;;;AKJtE,MAAa,wBAA2B,SAAoB,KAAK,MAAM,KAAK;;;;;;;;;AEM5E,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.9.1-canary.
|
|
3
|
+
"version": "0.9.1-canary.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
],
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"vitest": ">=4 <5",
|
|
51
|
-
"@zeltjs/core": "0.9.1-canary.
|
|
52
|
-
"@zeltjs/redis": "0.9.1-canary.
|
|
51
|
+
"@zeltjs/core": "0.9.1-canary.4",
|
|
52
|
+
"@zeltjs/redis": "0.9.1-canary.4"
|
|
53
53
|
},
|
|
54
54
|
"peerDependenciesMeta": {
|
|
55
55
|
"@zeltjs/redis": {
|
|
@@ -59,9 +59,9 @@
|
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@types/node": "22.19.17",
|
|
61
61
|
"ioredis": "5.10.1",
|
|
62
|
-
"@zeltjs/core": "0.9.1-canary.
|
|
63
|
-
"@zeltjs/redis": "0.9.1-canary.
|
|
64
|
-
"@zeltjs/unsafe-type-lib": "0.9.1-canary.
|
|
62
|
+
"@zeltjs/core": "0.9.1-canary.4",
|
|
63
|
+
"@zeltjs/redis": "0.9.1-canary.4",
|
|
64
|
+
"@zeltjs/unsafe-type-lib": "0.9.1-canary.4"
|
|
65
65
|
},
|
|
66
66
|
"volta": {
|
|
67
67
|
"extends": "../../package.json"
|