keyv-registry 2.0.1 → 2.0.3

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,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/index.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport worker from './worker.ts';\n\nexport { clearAdapterCache } from './loadAdapter.ts';\nexport { getRegistry, registerAdapter } from './registry.ts';\nexport type { AdapterConfig, CreateStoreCallback, CreateStoreOptions } from './types.ts';\n\n/**\n * Create a Keyv store from a URI string\n *\n * Supports dual-boot API (callback or Promise):\n *\n * @example\n * // Promise API\n * const store = await createStore('redis://localhost:6379');\n * const file = await createStore('file://~/.cache/app/data.json');\n * const memory = await createStore('memory://');\n *\n * @example\n * // Callback API\n * createStore('redis://localhost:6379', (err, store) => {\n * if (err) throw err;\n * // use store\n * });\n *\n * @example\n * // With options\n * const store = await createStore('redis://localhost:6379', {\n * namespace: 'myapp',\n * ttl: 60000\n * });\n *\n * @example\n * // Pre-instantiated adapter passthrough\n * import KeyvRedis from '@keyv/redis';\n * const redis = new KeyvRedis('redis://localhost:6379');\n * const store = await createStore('redis://ignored', { store: redis });\n */\nexport default function createStore<T>(uri: string, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions): Promise<Keyv<T>>;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions | CreateStoreCallback<T>, callback?: CreateStoreCallback<T>): void | Promise<Keyv<T>> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as CreateStoreOptions);\n\n if (typeof callback === 'function') return worker(uri, options, callback);\n return new Promise((resolve, reject) => worker(uri, options, (err, store) => (err ? reject(err) : resolve(store as Keyv<T>))));\n}\n"],"names":["clearAdapterCache","createStore","getRegistry","registerAdapter","uri","options","callback","worker","Promise","resolve","reject","err","store"],"mappings":";;;;;;;;;;;QAISA;eAAAA,gCAAiB;;QAsC1B;eAAwBC;;QArCfC;eAAAA,uBAAW;;QAAEC;eAAAA,2BAAe;;;+DAHlB;6BAEe;0BACW;;;;;;AAqC9B,SAASF,YAAeG,GAAW,EAAEC,OAAqD,EAAEC,QAAiC;IAC1IA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7D,IAAI,OAAOC,aAAa,YAAY,OAAOC,IAAAA,iBAAM,EAACH,KAAKC,SAASC;IAChE,OAAO,IAAIE,QAAQ,SAACC,SAASC;eAAWH,IAAAA,iBAAM,EAACH,KAAKC,SAAS,SAACM,KAAKC;mBAAWD,MAAMD,OAAOC,OAAOF,QAAQG;;;AAC5G"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/index.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport worker from './worker.ts';\n\nexport { clearAdapterCache } from './loadAdapter.ts';\nexport { getRegistry, registerAdapter } from './registry.ts';\nexport type { AdapterConfig, CreateStoreCallback, CreateStoreOptions } from './types.ts';\n\n/**\n * Create a Keyv store from a URI string\n *\n * Supports dual-boot API (callback or Promise):\n *\n * @example\n * // Promise API\n * const store = await createStore('redis://localhost:6379');\n * const file = await createStore('file://~/.cache/app/data.json');\n * const memory = await createStore('memory://');\n *\n * @example\n * // Callback API\n * createStore('redis://localhost:6379', (err, store) => {\n * if (err) throw err;\n * // use store\n * });\n *\n * @example\n * // With options\n * const store = await createStore('redis://localhost:6379', {\n * namespace: 'myapp',\n * ttl: 60000\n * });\n *\n * @example\n * // Pre-instantiated adapter passthrough\n * import KeyvRedis from '@keyv/redis';\n * const redis = new KeyvRedis('redis://localhost:6379');\n * const store = await createStore('redis://ignored', { store: redis });\n */\nexport default function createStore<T>(uri: string, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions): Promise<Keyv<T>>;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions | CreateStoreCallback<T>, callback?: CreateStoreCallback<T>): void | Promise<Keyv<T>> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as CreateStoreOptions);\n\n if (typeof callback === 'function') return worker(uri, options, callback);\n return new Promise((resolve, reject) => worker(uri, options, (err, store) => (err ? reject(err) : resolve(store as Keyv<T>))));\n}\n"],"names":["clearAdapterCache","createStore","getRegistry","registerAdapter","uri","options","callback","worker","Promise","resolve","reject","err","store"],"mappings":";;;;;;;;;;;QAISA;eAAAA,gCAAiB;;QAsC1B;eAAwBC;;QArCfC;eAAAA,uBAAW;;QAAEC;eAAAA,2BAAe;;;+DAHlB;6BAEe;0BACW;;;;;;AAqC9B,SAASF,YAAeG,GAAW,EAAEC,OAAqD,EAAEC,QAAiC;IAC1IA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7D,IAAI,OAAOC,aAAa,YAAY,OAAOC,IAAAA,iBAAM,EAACH,KAAKC,SAASC;IAChE,OAAO,IAAIE,QAAQ,SAACC,SAASC;eAAWH,IAAAA,iBAAM,EAACH,KAAKC,SAAS,SAACM,KAAKC;mBAAWD,MAAMD,OAAOC,OAAOF,QAAQG;;;AAC5G"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport type { LoadAdapterCallback } from './types.ts';\n\n// Create require function for ESM compatibility\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter from the modules installed alongside the consumer\n */\nexport default function loadAdapter(packageName: string, exportName: string | undefined, callback: LoadAdapterCallback): void {\n const cacheKey = `${packageName}:${exportName ?? 'default'}`;\n\n // Return cached adapter if available\n if (adapterCache.has(cacheKey)) {\n callback(null, adapterCache.get(cacheKey));\n return;\n }\n\n let Adapter: unknown;\n try {\n const mod = _require(packageName);\n Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n } catch {\n callback(new Error(`Adapter \"${packageName}\" is not installed. Install it alongside this package: npm install ${packageName}`));\n return;\n }\n\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n}\n\n/**\n * Clear the adapter cache (useful for testing)\n */\nexport function clearAdapterCache(): void {\n adapterCache.clear();\n}\n"],"names":["clearAdapterCache","loadAdapter","_require","require","Module","createRequire","adapterCache","Map","packageName","exportName","callback","cacheKey","has","get","Adapter","mod","default","Error","set","clear"],"mappings":";;;;;;;;;;;QAqCgBA;eAAAA;;QA5BhB;;CAEC,GACD;eAAwBC;;;iEAZL;;;;;;AAGnB,gDAAgD;AAChD,IAAMC,WAAW,OAAOC,YAAY,cAAcC,mBAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE1F,wBAAwB;AACxB,IAAMG,eAAe,IAAIC;AAKV,SAASN,YAAYO,WAAmB,EAAEC,UAA8B,EAAEC,QAA6B;IACpH,IAAMC,WAAW,AAbnB,AAaoB,UAAEH,aAAY,KAA2B,OAAxBC,uBAAAA,wBAAAA,aAAc;IAEjD,qCAAqC;IACrC,IAAIH,aAAaM,GAAG,CAACD,WAAW;QAC9BD,SAAS,MAAMJ,aAAaO,GAAG,CAACF;QAChC;IACF;IAEA,IAAIG;IACJ,IAAI;YAEwCC;QAD1C,IAAMA,MAAMb,SAASM;QACrBM,UAAUL,aAAaM,GAAG,CAACN,WAAW,IAAIM,eAAAA,IAAIC,OAAO,cAAXD,0BAAAA,eAAeA;IAC3D,EAAE,eAAM;QACNL,SAAS,IAAIO,MAAM,AAAC,YAA4FT,OAAjFA,aAAY,uEAAiF,OAAZA;QAChH;IACF;IAEAF,aAAaY,GAAG,CAACP,UAAUG;IAC3BJ,SAAS,MAAMI;AACjB;AAKO,SAASd;IACdM,aAAaa,KAAK;AACpB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport type { LoadAdapterCallback } from './types.ts';\n\n// Create require function for ESM compatibility\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter from the modules installed alongside the consumer\n */\nexport default function loadAdapter(packageName: string, exportName: string | undefined, callback: LoadAdapterCallback): void {\n const cacheKey = `${packageName}:${exportName ?? 'default'}`;\n\n // Return cached adapter if available\n if (adapterCache.has(cacheKey)) {\n callback(null, adapterCache.get(cacheKey));\n return;\n }\n\n let Adapter: unknown;\n try {\n const mod = _require(packageName);\n Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n } catch {\n callback(new Error(`Adapter \"${packageName}\" is not installed. Install it alongside this package: npm install ${packageName}`));\n return;\n }\n\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n}\n\n/**\n * Clear the adapter cache (useful for testing)\n */\nexport function clearAdapterCache(): void {\n adapterCache.clear();\n}\n"],"names":["clearAdapterCache","loadAdapter","_require","require","Module","createRequire","adapterCache","Map","packageName","exportName","callback","cacheKey","has","get","Adapter","mod","default","Error","set","clear"],"mappings":";;;;;;;;;;;QAqCgBA;eAAAA;;QA5BhB;;CAEC,GACD;eAAwBC;;;iEAZL;;;;;;AAGnB,gDAAgD;AAChD,IAAMC,WAAW,OAAOC,YAAY,cAAcC,mBAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE1F,wBAAwB;AACxB,IAAMG,eAAe,IAAIC;AAKV,SAASN,YAAYO,WAAmB,EAAEC,UAA8B,EAAEC,QAA6B;IACpH,IAAMC,WAAW,AAbnB,AAaoB,UAAEH,aAAY,KAA2B,OAAxBC,uBAAAA,wBAAAA,aAAc;IAEjD,qCAAqC;IACrC,IAAIH,aAAaM,GAAG,CAACD,WAAW;QAC9BD,SAAS,MAAMJ,aAAaO,GAAG,CAACF;QAChC;IACF;IAEA,IAAIG;IACJ,IAAI;YAEwCC;QAD1C,IAAMA,MAAMb,SAASM;QACrBM,UAAUL,aAAaM,GAAG,CAACN,WAAW,IAAIM,eAAAA,IAAIC,OAAO,cAAXD,0BAAAA,eAAeA;IAC3D,EAAE,eAAM;QACNL,SAAS,IAAIO,MAAM,AAAC,YAA4FT,OAAjFA,aAAY,uEAAiF,OAAZA;QAChH;IACF;IAEAF,aAAaY,GAAG,CAACP,UAAUG;IAC3BJ,SAAS,MAAMI;AACjB;AAKO,SAASd;IACdM,aAAaa,KAAK;AACpB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/registry.ts"],"sourcesContent":["import type { AdapterConfig } from './types.ts';\nimport { resolveFilePath } from './utils.ts';\n\n/**\n * Protocol registry mapping URI protocols to adapter configurations\n */\nconst PROTOCOL_REGISTRY: Record<string, AdapterConfig> = {\n // Official @keyv adapters\n 'redis:': { package: '@keyv/redis', mode: 'string' },\n 'rediss:': { package: '@keyv/redis', mode: 'string' },\n 'postgresql:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'postgres:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mysql:': { package: '@keyv/mysql', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'sqlite:': { package: '@keyv/sqlite', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mongodb:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'mongodb+srv:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'memcache:': { package: '@keyv/memcache', mode: 'string' },\n 'etcd:': { package: '@keyv/etcd', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n\n // Third-party adapters\n 'file:': {\n package: 'keyv-file',\n exportName: 'KeyvFile',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n\n // Built-in (no package needed)\n 'memory:': { package: null },\n\n // Future/custom adapters\n 'duckdb:': {\n package: 'keyv-duckdb',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n};\n\n/**\n * Register or override a protocol adapter\n */\nexport function registerAdapter(protocol: string, config: AdapterConfig): void {\n const normalizedProtocol = protocol.endsWith(':') ? protocol : `${protocol}:`;\n PROTOCOL_REGISTRY[normalizedProtocol] = config;\n}\n\n/**\n * Get the current registry (read-only copy)\n */\nexport function getRegistry(): Readonly<Record<string, AdapterConfig>> {\n return { ...PROTOCOL_REGISTRY };\n}\n\n/**\n * Get adapter config for a protocol\n */\nexport function getAdapterConfig(protocol: string): AdapterConfig | undefined {\n return PROTOCOL_REGISTRY[protocol];\n}\n"],"names":["getAdapterConfig","getRegistry","registerAdapter","PROTOCOL_REGISTRY","package","mode","optionsMapper","url","uri","toString","exportName","filename","resolveFilePath","protocol","config","normalizedProtocol","endsWith"],"mappings":";;;;;;;;;;;QAsDgBA;eAAAA;;QAPAC;eAAAA;;QARAC;eAAAA;;;uBAtCgB;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhC;;CAEC,GACD,IAAMC,oBAAmD;IACvD,0BAA0B;IAC1B,UAAU;QAAEC,SAAS;QAAeC,MAAM;IAAS;IACnD,WAAW;QAAED,SAAS;QAAeC,MAAM;IAAS;IACpD,eAAe;QAAED,SAAS;QAAkBC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IAC/G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IAC7G,UAAU;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IACvG,WAAW;QAAEL,SAAS;QAAgBC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IACzG,YAAY;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG;;IAAG;IACzG,gBAAgB;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG;;IAAG;IAC7G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;IAAS;IACzD,SAAS;QAAED,SAAS;QAAcC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG;;IAAG;IAErG,uBAAuB;IACvB,SAAS;QACPL,SAAS;QACTM,YAAY;QACZJ,eAAe,SAAfA,cAAgBC;mBAAc;gBAAEI,UAAUC,IAAAA,wBAAe,EAACL;YAAK;;IACjE;IAEA,+BAA+B;IAC/B,WAAW;QAAEH,SAAS;IAAK;IAE3B,yBAAyB;IACzB,WAAW;QACTA,SAAS;QACTE,eAAe,SAAfA,cAAgBC;mBAAc;gBAAEI,UAAUC,IAAAA,wBAAe,EAACL;YAAK;;IACjE;AACF;AAKO,SAASL,gBAAgBW,QAAgB,EAAEC,MAAqB;IACrE,IAAMC,qBAAqBF,SAASG,QAAQ,CAAC,OAAOH,WAAW,AAAC,GAAW,OAATA,UAAS;IAC3EV,iBAAiB,CAACY,mBAAmB,GAAGD;AAC1C;AAKO,SAASb;IACd,OAAO,mBAAKE;AACd;AAKO,SAASH,iBAAiBa,QAAgB;IAC/C,OAAOV,iBAAiB,CAACU,SAAS;AACpC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/registry.ts"],"sourcesContent":["import type { AdapterConfig } from './types.ts';\nimport { resolveFilePath } from './utils.ts';\n\n/**\n * Protocol registry mapping URI protocols to adapter configurations\n */\nconst PROTOCOL_REGISTRY: Record<string, AdapterConfig> = {\n // Official @keyv adapters\n 'redis:': { package: '@keyv/redis', mode: 'string' },\n 'rediss:': { package: '@keyv/redis', mode: 'string' },\n 'postgresql:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'postgres:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mysql:': { package: '@keyv/mysql', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'sqlite:': { package: '@keyv/sqlite', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mongodb:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'mongodb+srv:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'memcache:': { package: '@keyv/memcache', mode: 'string' },\n 'etcd:': { package: '@keyv/etcd', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n\n // Third-party adapters\n 'file:': {\n package: 'keyv-file',\n exportName: 'KeyvFile',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n\n // Built-in (no package needed)\n 'memory:': { package: null },\n\n // Future/custom adapters\n 'duckdb:': {\n package: 'keyv-duckdb',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n};\n\n/**\n * Register or override a protocol adapter\n */\nexport function registerAdapter(protocol: string, config: AdapterConfig): void {\n const normalizedProtocol = protocol.endsWith(':') ? protocol : `${protocol}:`;\n PROTOCOL_REGISTRY[normalizedProtocol] = config;\n}\n\n/**\n * Get the current registry (read-only copy)\n */\nexport function getRegistry(): Readonly<Record<string, AdapterConfig>> {\n return { ...PROTOCOL_REGISTRY };\n}\n\n/**\n * Get adapter config for a protocol\n */\nexport function getAdapterConfig(protocol: string): AdapterConfig | undefined {\n return PROTOCOL_REGISTRY[protocol];\n}\n"],"names":["getAdapterConfig","getRegistry","registerAdapter","PROTOCOL_REGISTRY","package","mode","optionsMapper","url","uri","toString","exportName","filename","resolveFilePath","protocol","config","normalizedProtocol","endsWith"],"mappings":";;;;;;;;;;;QAsDgBA;eAAAA;;QAPAC;eAAAA;;QARAC;eAAAA;;;uBAtCgB;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhC;;CAEC,GACD,IAAMC,oBAAmD;IACvD,0BAA0B;IAC1B,UAAU;QAAEC,SAAS;QAAeC,MAAM;IAAS;IACnD,WAAW;QAAED,SAAS;QAAeC,MAAM;IAAS;IACpD,eAAe;QAAED,SAAS;QAAkBC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IAC/G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IAC7G,UAAU;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IACvG,WAAW;QAAEL,SAAS;QAAgBC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG;;IAAG;IACzG,YAAY;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG;;IAAG;IACzG,gBAAgB;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG;;IAAG;IAC7G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;IAAS;IACzD,SAAS;QAAED,SAAS;QAAcC,MAAM;QAAWC,eAAe,SAAfA,cAAgBC;mBAAS;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG;;IAAG;IAErG,uBAAuB;IACvB,SAAS;QACPL,SAAS;QACTM,YAAY;QACZJ,eAAe,SAAfA,cAAgBC;mBAAc;gBAAEI,UAAUC,IAAAA,wBAAe,EAACL;YAAK;;IACjE;IAEA,+BAA+B;IAC/B,WAAW;QAAEH,SAAS;IAAK;IAE3B,yBAAyB;IACzB,WAAW;QACTA,SAAS;QACTE,eAAe,SAAfA,cAAgBC;mBAAc;gBAAEI,UAAUC,IAAAA,wBAAe,EAACL;YAAK;;IACjE;AACF;AAKO,SAASL,gBAAgBW,QAAgB,EAAEC,MAAqB;IACrE,IAAMC,qBAAqBF,SAASG,QAAQ,CAAC,OAAOH,WAAW,AAAC,GAAW,OAATA,UAAS;IAC3EV,iBAAiB,CAACY,mBAAmB,GAAGD;AAC1C;AAKO,SAASb;IACd,OAAO,mBAAKE;AACd;AAKO,SAASH,iBAAiBa,QAAgB;IAC/C,OAAOV,iBAAiB,CAACU,SAAS;AACpC"}
package/dist/cjs/utils.js CHANGED
@@ -19,6 +19,7 @@ _export(exports, {
19
19
  var _nodefs = /*#__PURE__*/ _interop_require_wildcard(require("node:fs"));
20
20
  var _nodeos = /*#__PURE__*/ _interop_require_wildcard(require("node:os"));
21
21
  var _nodepath = /*#__PURE__*/ _interop_require_wildcard(require("node:path"));
22
+ var _nodeurl = require("node:url");
22
23
  function _array_like_to_array(arr, len) {
23
24
  if (len == null || len > arr.length) len = arr.length;
24
25
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -99,9 +100,12 @@ function resolveFilePath(url) {
99
100
  var filePath = url.pathname;
100
101
  // Handle ~ for home directory
101
102
  if (url.host === '~') {
102
- filePath = _nodepath.join(_nodeos.homedir(), filePath.slice(1));
103
+ filePath = _nodepath.join(_nodeos.homedir(), decodeURIComponent(filePath.slice(1)));
103
104
  } else if (url.host === '.') {
104
- filePath = _nodepath.join(process.cwd(), filePath.slice(1));
105
+ filePath = _nodepath.join(process.cwd(), decodeURIComponent(filePath.slice(1)));
106
+ } else {
107
+ // File-backed adapters such as duckdb use the same native path conversion.
108
+ filePath = (0, _nodeurl.fileURLToPath)(new URL("file://".concat(url.host).concat(url.pathname)));
105
109
  }
106
110
  // Ensure directory exists
107
111
  _nodefs.mkdirSync(_nodepath.dirname(filePath), {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/utils.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\n/**\n * Resolve file path from URL, handling ~ and . prefixes\n */\nexport function resolveFilePath(url: URL): string {\n let filePath = url.pathname;\n\n // Handle ~ for home directory\n if (url.host === '~') {\n filePath = path.join(os.homedir(), filePath.slice(1));\n }\n // Handle . for current directory\n else if (url.host === '.') {\n filePath = path.join(process.cwd(), filePath.slice(1));\n }\n\n // Ensure directory exists\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n\n return filePath;\n}\n\n/**\n * Parse URL search params into options object with type conversion\n */\nexport function parseUriOptions(url: URL): Record<string, unknown> {\n const options: Record<string, unknown> = {};\n\n for (const [key, value] of url.searchParams) {\n // Auto-convert types\n if (value === 'true') options[key] = true;\n else if (value === 'false') options[key] = false;\n else if (/^\\d+$/.test(value)) options[key] = Number.parseInt(value, 10);\n else if (/^\\d+\\.\\d+$/.test(value)) options[key] = Number.parseFloat(value);\n else options[key] = value;\n }\n\n return options;\n}\n"],"names":["parseUriOptions","resolveFilePath","url","filePath","pathname","host","path","join","os","homedir","slice","process","cwd","fs","mkdirSync","dirname","recursive","options","searchParams","key","value","test","Number","parseInt","parseFloat"],"mappings":";;;;;;;;;;;QA4BgBA;eAAAA;;QArBAC;eAAAA;;;8DAPI;8DACA;gEACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKf,SAASA,gBAAgBC,GAAQ;IACtC,IAAIC,WAAWD,IAAIE,QAAQ;IAE3B,8BAA8B;IAC9B,IAAIF,IAAIG,IAAI,KAAK,KAAK;QACpBF,WAAWG,UAAKC,IAAI,CAACC,QAAGC,OAAO,IAAIN,SAASO,KAAK,CAAC;IACpD,OAEK,IAAIR,IAAIG,IAAI,KAAK,KAAK;QACzBF,WAAWG,UAAKC,IAAI,CAACI,QAAQC,GAAG,IAAIT,SAASO,KAAK,CAAC;IACrD;IAEA,0BAA0B;IAC1BG,QAAGC,SAAS,CAACR,UAAKS,OAAO,CAACZ,WAAW;QAAEa,WAAW;IAAK;IAEvD,OAAOb;AACT;AAKO,SAASH,gBAAgBE,GAAQ;IACtC,IAAMe,UAAmC,CAAC;QAErC,kCAAA,2BAAA;;QAAL,QAAK,YAAsBf,IAAIgB,YAAY,qBAAtC,SAAA,6BAAA,QAAA,yBAAA,iCAAwC;YAAxC,mCAAA,iBAAOC,sBAAKC;YACf,qBAAqB;YACrB,IAAIA,UAAU,QAAQH,OAAO,CAACE,IAAI,GAAG;iBAChC,IAAIC,UAAU,SAASH,OAAO,CAACE,IAAI,GAAG;iBACtC,IAAI,QAAQE,IAAI,CAACD,QAAQH,OAAO,CAACE,IAAI,GAAGG,OAAOC,QAAQ,CAACH,OAAO;iBAC/D,IAAI,aAAaC,IAAI,CAACD,QAAQH,OAAO,CAACE,IAAI,GAAGG,OAAOE,UAAU,CAACJ;iBAC/DH,OAAO,CAACE,IAAI,GAAGC;QACtB;;QAPK;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;IASL,OAAOH;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/utils.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Resolve file path from URL, handling ~ and . prefixes\n */\nexport function resolveFilePath(url: URL): string {\n let filePath = url.pathname;\n\n // Handle ~ for home directory\n if (url.host === '~') {\n filePath = path.join(os.homedir(), decodeURIComponent(filePath.slice(1)));\n }\n // Handle . for current directory\n else if (url.host === '.') {\n filePath = path.join(process.cwd(), decodeURIComponent(filePath.slice(1)));\n } else {\n // File-backed adapters such as duckdb use the same native path conversion.\n filePath = fileURLToPath(new URL(`file://${url.host}${url.pathname}`));\n }\n\n // Ensure directory exists\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n\n return filePath;\n}\n\n/**\n * Parse URL search params into options object with type conversion\n */\nexport function parseUriOptions(url: URL): Record<string, unknown> {\n const options: Record<string, unknown> = {};\n\n for (const [key, value] of url.searchParams) {\n // Auto-convert types\n if (value === 'true') options[key] = true;\n else if (value === 'false') options[key] = false;\n else if (/^\\d+$/.test(value)) options[key] = Number.parseInt(value, 10);\n else if (/^\\d+\\.\\d+$/.test(value)) options[key] = Number.parseFloat(value);\n else options[key] = value;\n }\n\n return options;\n}\n"],"names":["parseUriOptions","resolveFilePath","url","filePath","pathname","host","path","join","os","homedir","decodeURIComponent","slice","process","cwd","fileURLToPath","URL","fs","mkdirSync","dirname","recursive","options","searchParams","key","value","test","Number","parseInt","parseFloat"],"mappings":";;;;;;;;;;;QAgCgBA;eAAAA;;QAxBAC;eAAAA;;;8DARI;8DACA;gEACE;uBACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKvB,SAASA,gBAAgBC,GAAQ;IACtC,IAAIC,WAAWD,IAAIE,QAAQ;IAE3B,8BAA8B;IAC9B,IAAIF,IAAIG,IAAI,KAAK,KAAK;QACpBF,WAAWG,UAAKC,IAAI,CAACC,QAAGC,OAAO,IAAIC,mBAAmBP,SAASQ,KAAK,CAAC;IACvE,OAEK,IAAIT,IAAIG,IAAI,KAAK,KAAK;QACzBF,WAAWG,UAAKC,IAAI,CAACK,QAAQC,GAAG,IAAIH,mBAAmBP,SAASQ,KAAK,CAAC;IACxE,OAAO;QACL,2EAA2E;QAC3ER,WAAWW,IAAAA,sBAAa,EAAC,IAAIC,IAAI,AAAC,UAAoBb,OAAXA,IAAIG,IAAI,EAAgB,OAAbH,IAAIE,QAAQ;IACpE;IAEA,0BAA0B;IAC1BY,QAAGC,SAAS,CAACX,UAAKY,OAAO,CAACf,WAAW;QAAEgB,WAAW;IAAK;IAEvD,OAAOhB;AACT;AAKO,SAASH,gBAAgBE,GAAQ;IACtC,IAAMkB,UAAmC,CAAC;QAErC,kCAAA,2BAAA;;QAAL,QAAK,YAAsBlB,IAAImB,YAAY,qBAAtC,SAAA,6BAAA,QAAA,yBAAA,iCAAwC;YAAxC,mCAAA,iBAAOC,sBAAKC;YACf,qBAAqB;YACrB,IAAIA,UAAU,QAAQH,OAAO,CAACE,IAAI,GAAG;iBAChC,IAAIC,UAAU,SAASH,OAAO,CAACE,IAAI,GAAG;iBACtC,IAAI,QAAQE,IAAI,CAACD,QAAQH,OAAO,CAACE,IAAI,GAAGG,OAAOC,QAAQ,CAACH,OAAO;iBAC/D,IAAI,aAAaC,IAAI,CAACD,QAAQH,OAAO,CAACE,IAAI,GAAGG,OAAOE,UAAU,CAACJ;iBAC/DH,OAAO,CAACE,IAAI,GAAGC;QACtB;;QAPK;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;IASL,OAAOH;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/worker.ts"],"sourcesContent":["import Keyv from 'keyv';\nimport loadAdapter from './loadAdapter.ts';\nimport { getAdapterConfig } from './registry.ts';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport { parseUriOptions } from './utils.ts';\n\n/**\n * Core worker function that creates a Keyv store\n */\nexport default function worker<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void {\n // Passthrough: pre-instantiated adapter provided\n if (options.store) {\n try {\n const keyv = new Keyv<T>({ ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Parse URI\n let url: URL;\n try {\n url = new URL(uri);\n } catch (_err) {\n callback(new Error(`Invalid URI: ${uri}`));\n return;\n }\n\n const config = getAdapterConfig(url.protocol);\n\n if (!config) {\n callback(new Error(`Unknown protocol: ${url.protocol}. Use registerAdapter() to add support.`));\n return;\n }\n\n // Memory store - no package needed\n if (config.package === null) {\n try {\n const keyv = new Keyv<T>({ ...parseUriOptions(url), ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Load adapter (install if needed)\n loadAdapter(config.package, config.exportName, (err, AdapterClass) => {\n if (err) return callback(err);\n\n try {\n // Build adapter options: URI params + custom mapper + user options\n const adapterOptions = {\n ...parseUriOptions(url),\n ...(config.optionsMapper?.(url) ?? {}),\n ...options,\n };\n\n // Remove store from adapter options to avoid confusion\n const { store: _, ...cleanAdapterOptions } = adapterOptions;\n\n if (config.mode === 'string') {\n const storeInstance = new (AdapterClass as new (uri: string, options: Record<string, unknown>) => unknown)(uri, cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n callback(null, keyv);\n return;\n }\n\n const storeInstance = new (AdapterClass as new (options: Record<string, unknown>) => unknown)(cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n\n callback(null, keyv);\n } catch (createErr) {\n callback(createErr as Error);\n }\n });\n}\n"],"names":["worker","uri","options","callback","store","keyv","Keyv","err","url","URL","_err","Error","config","getAdapterConfig","protocol","package","parseUriOptions","loadAdapter","exportName","AdapterClass","adapterOptions","optionsMapper","_","cleanAdapterOptions","mode","storeInstance","createErr"],"mappings":";;;;+BAMA;;CAEC,GACD;;;eAAwBA;;;2DATP;oEACO;0BACS;uBAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKjB,SAASA,OAAUC,GAAW,EAAEC,OAA2B,EAAEC,QAAgC;IAC1G,iDAAiD;IACjD,IAAID,QAAQE,KAAK,EAAE;QACjB,IAAI;YACF,IAAMC,OAAO,IAAIC,aAAI,CAAI,mBAAKJ;YAC9BC,SAAS,MAAME;QACjB,EAAE,OAAOE,KAAK;YACZJ,SAASI;QACX;QACA;IACF;IAEA,YAAY;IACZ,IAAIC;IACJ,IAAI;QACFA,MAAM,IAAIC,IAAIR;IAChB,EAAE,OAAOS,MAAM;QACbP,SAAS,IAAIQ,MAAM,AAAC,gBAAmB,OAAJV;QACnC;IACF;IAEA,IAAMW,SAASC,IAAAA,4BAAgB,EAACL,IAAIM,QAAQ;IAE5C,IAAI,CAACF,QAAQ;QACXT,SAAS,IAAIQ,MAAM,AAAC,qBAAiC,OAAbH,IAAIM,QAAQ,EAAC;QACrD;IACF;IAEA,mCAAmC;IACnC,IAAIF,OAAOG,OAAO,KAAK,MAAM;QAC3B,IAAI;YACF,IAAMV,QAAO,IAAIC,aAAI,CAAI,mBAAKU,IAAAA,wBAAe,EAACR,MAASN;YACvDC,SAAS,MAAME;QACjB,EAAE,OAAOE,KAAK;YACZJ,SAASI;QACX;QACA;IACF;IAEA,mCAAmC;IACnCU,IAAAA,sBAAW,EAACL,OAAOG,OAAO,EAAEH,OAAOM,UAAU,EAAE,SAACX,KAAKY;QACnD,IAAIZ,KAAK,OAAOJ,SAASI;QAEzB,IAAI;;gBAIIK;YAHN,mEAAmE;YACnE,IAAMQ,iBAAiB,mBAClBJ,IAAAA,wBAAe,EAACR,eACfI,wBAAAA,OAAOS,aAAa,cAApBT,4CAAAA,2BAAAA,QAAuBJ,2CAAQ,CAAC,GACjCN;YAGL,uDAAuD;YACvD,IAAQE,AAAOkB,IAA8BF,eAArChB,OAAamB,iDAAwBH;;;YAE7C,IAAIR,OAAOY,IAAI,KAAK,UAAU;gBAC5B,IAAMC,gBAAgB,IAAKN,aAAgFlB,KAAKsB;gBAChH,IAAMlB,OAAO,IAAIC,aAAI,CAAI;oBAAEF,OAAOqB;mBAAkBvB;gBACpDC,SAAS,MAAME;gBACf;YACF;YAEA,IAAMoB,iBAAgB,IAAKN,aAAmEI;YAC9F,IAAMlB,QAAO,IAAIC,aAAI,CAAI;gBAAEF,OAAOqB;eAAkBvB;YAEpDC,SAAS,MAAME;QACjB,EAAE,OAAOqB,WAAW;YAClBvB,SAASuB;QACX;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/worker.ts"],"sourcesContent":["import Keyv from 'keyv';\nimport loadAdapter from './loadAdapter.ts';\nimport { getAdapterConfig } from './registry.ts';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport { parseUriOptions } from './utils.ts';\n\n/**\n * Core worker function that creates a Keyv store\n */\nexport default function worker<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void {\n // Passthrough: pre-instantiated adapter provided\n if (options.store) {\n try {\n const keyv = new Keyv<T>({ ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Parse URI\n let url: URL;\n try {\n url = new URL(uri);\n } catch (_err) {\n callback(new Error(`Invalid URI: ${uri}`));\n return;\n }\n\n const config = getAdapterConfig(url.protocol);\n\n if (!config) {\n callback(new Error(`Unknown protocol: ${url.protocol}. Use registerAdapter() to add support.`));\n return;\n }\n\n // Memory store - no package needed\n if (config.package === null) {\n try {\n const keyv = new Keyv<T>({ ...parseUriOptions(url), ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Load adapter (install if needed)\n loadAdapter(config.package, config.exportName, (err, AdapterClass) => {\n if (err) return callback(err);\n\n try {\n // Build adapter options: URI params + custom mapper + user options\n const adapterOptions = {\n ...parseUriOptions(url),\n ...(config.optionsMapper?.(url) ?? {}),\n ...options,\n };\n\n // Remove store from adapter options to avoid confusion\n const { store: _, ...cleanAdapterOptions } = adapterOptions;\n\n if (config.mode === 'string') {\n const storeInstance = new (AdapterClass as new (uri: string, options: Record<string, unknown>) => unknown)(uri, cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n callback(null, keyv);\n return;\n }\n\n const storeInstance = new (AdapterClass as new (options: Record<string, unknown>) => unknown)(cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n\n callback(null, keyv);\n } catch (createErr) {\n callback(createErr as Error);\n }\n });\n}\n"],"names":["worker","uri","options","callback","store","keyv","Keyv","err","url","URL","_err","Error","config","getAdapterConfig","protocol","package","parseUriOptions","loadAdapter","exportName","AdapterClass","adapterOptions","optionsMapper","_","cleanAdapterOptions","mode","storeInstance","createErr"],"mappings":";;;;+BAMA;;CAEC,GACD;;;eAAwBA;;;2DATP;oEACO;0BACS;uBAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKjB,SAASA,OAAUC,GAAW,EAAEC,OAA2B,EAAEC,QAAgC;IAC1G,iDAAiD;IACjD,IAAID,QAAQE,KAAK,EAAE;QACjB,IAAI;YACF,IAAMC,OAAO,IAAIC,aAAI,CAAI,mBAAKJ;YAC9BC,SAAS,MAAME;QACjB,EAAE,OAAOE,KAAK;YACZJ,SAASI;QACX;QACA;IACF;IAEA,YAAY;IACZ,IAAIC;IACJ,IAAI;QACFA,MAAM,IAAIC,IAAIR;IAChB,EAAE,OAAOS,MAAM;QACbP,SAAS,IAAIQ,MAAM,AAAC,gBAAmB,OAAJV;QACnC;IACF;IAEA,IAAMW,SAASC,IAAAA,4BAAgB,EAACL,IAAIM,QAAQ;IAE5C,IAAI,CAACF,QAAQ;QACXT,SAAS,IAAIQ,MAAM,AAAC,qBAAiC,OAAbH,IAAIM,QAAQ,EAAC;QACrD;IACF;IAEA,mCAAmC;IACnC,IAAIF,OAAOG,OAAO,KAAK,MAAM;QAC3B,IAAI;YACF,IAAMV,QAAO,IAAIC,aAAI,CAAI,mBAAKU,IAAAA,wBAAe,EAACR,MAASN;YACvDC,SAAS,MAAME;QACjB,EAAE,OAAOE,KAAK;YACZJ,SAASI;QACX;QACA;IACF;IAEA,mCAAmC;IACnCU,IAAAA,sBAAW,EAACL,OAAOG,OAAO,EAAEH,OAAOM,UAAU,EAAE,SAACX,KAAKY;QACnD,IAAIZ,KAAK,OAAOJ,SAASI;QAEzB,IAAI;;gBAIIK;YAHN,mEAAmE;YACnE,IAAMQ,iBAAiB,mBAClBJ,IAAAA,wBAAe,EAACR,eACfI,wBAAAA,OAAOS,aAAa,cAApBT,4CAAAA,2BAAAA,QAAuBJ,2CAAQ,CAAC,GACjCN;YAGL,uDAAuD;YACvD,IAAQE,AAAOkB,IAA8BF,eAArChB,OAAamB,iDAAwBH;;;YAE7C,IAAIR,OAAOY,IAAI,KAAK,UAAU;gBAC5B,IAAMC,gBAAgB,IAAKN,aAAgFlB,KAAKsB;gBAChH,IAAMlB,OAAO,IAAIC,aAAI,CAAI;oBAAEF,OAAOqB;mBAAkBvB;gBACpDC,SAAS,MAAME;gBACf;YACF;YAEA,IAAMoB,iBAAgB,IAAKN,aAAmEI;YAC9F,IAAMlB,QAAO,IAAIC,aAAI,CAAI;gBAAEF,OAAOqB;eAAkBvB;YAEpDC,SAAS,MAAME;QACjB,EAAE,OAAOqB,WAAW;YAClBvB,SAASuB;QACX;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/index.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport worker from './worker.ts';\n\nexport { clearAdapterCache } from './loadAdapter.ts';\nexport { getRegistry, registerAdapter } from './registry.ts';\nexport type { AdapterConfig, CreateStoreCallback, CreateStoreOptions } from './types.ts';\n\n/**\n * Create a Keyv store from a URI string\n *\n * Supports dual-boot API (callback or Promise):\n *\n * @example\n * // Promise API\n * const store = await createStore('redis://localhost:6379');\n * const file = await createStore('file://~/.cache/app/data.json');\n * const memory = await createStore('memory://');\n *\n * @example\n * // Callback API\n * createStore('redis://localhost:6379', (err, store) => {\n * if (err) throw err;\n * // use store\n * });\n *\n * @example\n * // With options\n * const store = await createStore('redis://localhost:6379', {\n * namespace: 'myapp',\n * ttl: 60000\n * });\n *\n * @example\n * // Pre-instantiated adapter passthrough\n * import KeyvRedis from '@keyv/redis';\n * const redis = new KeyvRedis('redis://localhost:6379');\n * const store = await createStore('redis://ignored', { store: redis });\n */\nexport default function createStore<T>(uri: string, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions): Promise<Keyv<T>>;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions | CreateStoreCallback<T>, callback?: CreateStoreCallback<T>): void | Promise<Keyv<T>> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as CreateStoreOptions);\n\n if (typeof callback === 'function') return worker(uri, options, callback);\n return new Promise((resolve, reject) => worker(uri, options, (err, store) => (err ? reject(err) : resolve(store as Keyv<T>))));\n}\n"],"names":["worker","clearAdapterCache","getRegistry","registerAdapter","createStore","uri","options","callback","Promise","resolve","reject","err","store"],"mappings":"AAEA,OAAOA,YAAY,cAAc;AAEjC,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,WAAW,EAAEC,eAAe,QAAQ,gBAAgB;AAqC7D,eAAe,SAASC,YAAeC,GAAW,EAAEC,OAAqD,EAAEC,QAAiC;IAC1IA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7D,IAAI,OAAOC,aAAa,YAAY,OAAOP,OAAOK,KAAKC,SAASC;IAChE,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAAWV,OAAOK,KAAKC,SAAS,CAACK,KAAKC,QAAWD,MAAMD,OAAOC,OAAOF,QAAQG;AAC5G"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/index.ts"],"sourcesContent":["import type Keyv from 'keyv';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport worker from './worker.ts';\n\nexport { clearAdapterCache } from './loadAdapter.ts';\nexport { getRegistry, registerAdapter } from './registry.ts';\nexport type { AdapterConfig, CreateStoreCallback, CreateStoreOptions } from './types.ts';\n\n/**\n * Create a Keyv store from a URI string\n *\n * Supports dual-boot API (callback or Promise):\n *\n * @example\n * // Promise API\n * const store = await createStore('redis://localhost:6379');\n * const file = await createStore('file://~/.cache/app/data.json');\n * const memory = await createStore('memory://');\n *\n * @example\n * // Callback API\n * createStore('redis://localhost:6379', (err, store) => {\n * if (err) throw err;\n * // use store\n * });\n *\n * @example\n * // With options\n * const store = await createStore('redis://localhost:6379', {\n * namespace: 'myapp',\n * ttl: 60000\n * });\n *\n * @example\n * // Pre-instantiated adapter passthrough\n * import KeyvRedis from '@keyv/redis';\n * const redis = new KeyvRedis('redis://localhost:6379');\n * const store = await createStore('redis://ignored', { store: redis });\n */\nexport default function createStore<T>(uri: string, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions): Promise<Keyv<T>>;\nexport default function createStore<T>(uri: string, options?: CreateStoreOptions | CreateStoreCallback<T>, callback?: CreateStoreCallback<T>): void | Promise<Keyv<T>> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as CreateStoreOptions);\n\n if (typeof callback === 'function') return worker(uri, options, callback);\n return new Promise((resolve, reject) => worker(uri, options, (err, store) => (err ? reject(err) : resolve(store as Keyv<T>))));\n}\n"],"names":["worker","clearAdapterCache","getRegistry","registerAdapter","createStore","uri","options","callback","Promise","resolve","reject","err","store"],"mappings":"AAEA,OAAOA,YAAY,cAAc;AAEjC,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,WAAW,EAAEC,eAAe,QAAQ,gBAAgB;AAqC7D,eAAe,SAASC,YAAeC,GAAW,EAAEC,OAAqD,EAAEC,QAAiC;IAC1IA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7D,IAAI,OAAOC,aAAa,YAAY,OAAOP,OAAOK,KAAKC,SAASC;IAChE,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAAWV,OAAOK,KAAKC,SAAS,CAACK,KAAKC,QAAWD,MAAMD,OAAOC,OAAOF,QAAQG;AAC5G"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport type { LoadAdapterCallback } from './types.ts';\n\n// Create require function for ESM compatibility\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter from the modules installed alongside the consumer\n */\nexport default function loadAdapter(packageName: string, exportName: string | undefined, callback: LoadAdapterCallback): void {\n const cacheKey = `${packageName}:${exportName ?? 'default'}`;\n\n // Return cached adapter if available\n if (adapterCache.has(cacheKey)) {\n callback(null, adapterCache.get(cacheKey));\n return;\n }\n\n let Adapter: unknown;\n try {\n const mod = _require(packageName);\n Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n } catch {\n callback(new Error(`Adapter \"${packageName}\" is not installed. Install it alongside this package: npm install ${packageName}`));\n return;\n }\n\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n}\n\n/**\n * Clear the adapter cache (useful for testing)\n */\nexport function clearAdapterCache(): void {\n adapterCache.clear();\n}\n"],"names":["Module","_require","require","createRequire","url","adapterCache","Map","loadAdapter","packageName","exportName","callback","cacheKey","has","get","Adapter","mod","default","Error","set","clearAdapterCache","clear"],"mappings":"AAAA,OAAOA,YAAY,cAAc;AAGjC,gDAAgD;AAChD,MAAMC,WAAW,OAAOC,YAAY,cAAcF,OAAOG,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,wBAAwB;AACxB,MAAMG,eAAe,IAAIC;AAEzB;;CAEC,GACD,eAAe,SAASC,YAAYC,WAAmB,EAAEC,UAA8B,EAAEC,QAA6B;IACpH,MAAMC,WAAW,GAAGH,YAAY,CAAC,EAAEC,uBAAAA,wBAAAA,aAAc,WAAW;IAE5D,qCAAqC;IACrC,IAAIJ,aAAaO,GAAG,CAACD,WAAW;QAC9BD,SAAS,MAAML,aAAaQ,GAAG,CAACF;QAChC;IACF;IAEA,IAAIG;IACJ,IAAI;YAEwCC;QAD1C,MAAMA,MAAMd,SAASO;QACrBM,UAAUL,aAAaM,GAAG,CAACN,WAAW,IAAIM,eAAAA,IAAIC,OAAO,cAAXD,0BAAAA,eAAeA;IAC3D,EAAE,OAAM;QACNL,SAAS,IAAIO,MAAM,CAAC,SAAS,EAAET,YAAY,mEAAmE,EAAEA,aAAa;QAC7H;IACF;IAEAH,aAAaa,GAAG,CAACP,UAAUG;IAC3BJ,SAAS,MAAMI;AACjB;AAEA;;CAEC,GACD,OAAO,SAASK;IACdd,aAAae,KAAK;AACpB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport type { LoadAdapterCallback } from './types.ts';\n\n// Create require function for ESM compatibility\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter from the modules installed alongside the consumer\n */\nexport default function loadAdapter(packageName: string, exportName: string | undefined, callback: LoadAdapterCallback): void {\n const cacheKey = `${packageName}:${exportName ?? 'default'}`;\n\n // Return cached adapter if available\n if (adapterCache.has(cacheKey)) {\n callback(null, adapterCache.get(cacheKey));\n return;\n }\n\n let Adapter: unknown;\n try {\n const mod = _require(packageName);\n Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n } catch {\n callback(new Error(`Adapter \"${packageName}\" is not installed. Install it alongside this package: npm install ${packageName}`));\n return;\n }\n\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n}\n\n/**\n * Clear the adapter cache (useful for testing)\n */\nexport function clearAdapterCache(): void {\n adapterCache.clear();\n}\n"],"names":["Module","_require","require","createRequire","url","adapterCache","Map","loadAdapter","packageName","exportName","callback","cacheKey","has","get","Adapter","mod","default","Error","set","clearAdapterCache","clear"],"mappings":"AAAA,OAAOA,YAAY,cAAc;AAGjC,gDAAgD;AAChD,MAAMC,WAAW,OAAOC,YAAY,cAAcF,OAAOG,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,wBAAwB;AACxB,MAAMG,eAAe,IAAIC;AAEzB;;CAEC,GACD,eAAe,SAASC,YAAYC,WAAmB,EAAEC,UAA8B,EAAEC,QAA6B;IACpH,MAAMC,WAAW,GAAGH,YAAY,CAAC,EAAEC,uBAAAA,wBAAAA,aAAc,WAAW;IAE5D,qCAAqC;IACrC,IAAIJ,aAAaO,GAAG,CAACD,WAAW;QAC9BD,SAAS,MAAML,aAAaQ,GAAG,CAACF;QAChC;IACF;IAEA,IAAIG;IACJ,IAAI;YAEwCC;QAD1C,MAAMA,MAAMd,SAASO;QACrBM,UAAUL,aAAaM,GAAG,CAACN,WAAW,IAAIM,eAAAA,IAAIC,OAAO,cAAXD,0BAAAA,eAAeA;IAC3D,EAAE,OAAM;QACNL,SAAS,IAAIO,MAAM,CAAC,SAAS,EAAET,YAAY,mEAAmE,EAAEA,aAAa;QAC7H;IACF;IAEAH,aAAaa,GAAG,CAACP,UAAUG;IAC3BJ,SAAS,MAAMI;AACjB;AAEA;;CAEC,GACD,OAAO,SAASK;IACdd,aAAae,KAAK;AACpB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/registry.ts"],"sourcesContent":["import type { AdapterConfig } from './types.ts';\nimport { resolveFilePath } from './utils.ts';\n\n/**\n * Protocol registry mapping URI protocols to adapter configurations\n */\nconst PROTOCOL_REGISTRY: Record<string, AdapterConfig> = {\n // Official @keyv adapters\n 'redis:': { package: '@keyv/redis', mode: 'string' },\n 'rediss:': { package: '@keyv/redis', mode: 'string' },\n 'postgresql:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'postgres:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mysql:': { package: '@keyv/mysql', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'sqlite:': { package: '@keyv/sqlite', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mongodb:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'mongodb+srv:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'memcache:': { package: '@keyv/memcache', mode: 'string' },\n 'etcd:': { package: '@keyv/etcd', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n\n // Third-party adapters\n 'file:': {\n package: 'keyv-file',\n exportName: 'KeyvFile',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n\n // Built-in (no package needed)\n 'memory:': { package: null },\n\n // Future/custom adapters\n 'duckdb:': {\n package: 'keyv-duckdb',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n};\n\n/**\n * Register or override a protocol adapter\n */\nexport function registerAdapter(protocol: string, config: AdapterConfig): void {\n const normalizedProtocol = protocol.endsWith(':') ? protocol : `${protocol}:`;\n PROTOCOL_REGISTRY[normalizedProtocol] = config;\n}\n\n/**\n * Get the current registry (read-only copy)\n */\nexport function getRegistry(): Readonly<Record<string, AdapterConfig>> {\n return { ...PROTOCOL_REGISTRY };\n}\n\n/**\n * Get adapter config for a protocol\n */\nexport function getAdapterConfig(protocol: string): AdapterConfig | undefined {\n return PROTOCOL_REGISTRY[protocol];\n}\n"],"names":["resolveFilePath","PROTOCOL_REGISTRY","package","mode","optionsMapper","url","uri","toString","exportName","filename","registerAdapter","protocol","config","normalizedProtocol","endsWith","getRegistry","getAdapterConfig"],"mappings":"AACA,SAASA,eAAe,QAAQ,aAAa;AAE7C;;CAEC,GACD,MAAMC,oBAAmD;IACvD,0BAA0B;IAC1B,UAAU;QAAEC,SAAS;QAAeC,MAAM;IAAS;IACnD,WAAW;QAAED,SAAS;QAAeC,MAAM;IAAS;IACpD,eAAe;QAAED,SAAS;QAAkBC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAC/G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAC7G,UAAU;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IACvG,WAAW;QAAEL,SAAS;QAAgBC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IACzG,YAAY;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG,CAAA;IAAG;IACzG,gBAAgB;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAC7G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;IAAS;IACzD,SAAS;QAAED,SAAS;QAAcC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAErG,uBAAuB;IACvB,SAAS;QACPL,SAAS;QACTM,YAAY;QACZJ,eAAe,CAACC,MAAc,CAAA;gBAAEI,UAAUT,gBAAgBK;YAAK,CAAA;IACjE;IAEA,+BAA+B;IAC/B,WAAW;QAAEH,SAAS;IAAK;IAE3B,yBAAyB;IACzB,WAAW;QACTA,SAAS;QACTE,eAAe,CAACC,MAAc,CAAA;gBAAEI,UAAUT,gBAAgBK;YAAK,CAAA;IACjE;AACF;AAEA;;CAEC,GACD,OAAO,SAASK,gBAAgBC,QAAgB,EAAEC,MAAqB;IACrE,MAAMC,qBAAqBF,SAASG,QAAQ,CAAC,OAAOH,WAAW,GAAGA,SAAS,CAAC,CAAC;IAC7EV,iBAAiB,CAACY,mBAAmB,GAAGD;AAC1C;AAEA;;CAEC,GACD,OAAO,SAASG;IACd,OAAO;QAAE,GAAGd,iBAAiB;IAAC;AAChC;AAEA;;CAEC,GACD,OAAO,SAASe,iBAAiBL,QAAgB;IAC/C,OAAOV,iBAAiB,CAACU,SAAS;AACpC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/registry.ts"],"sourcesContent":["import type { AdapterConfig } from './types.ts';\nimport { resolveFilePath } from './utils.ts';\n\n/**\n * Protocol registry mapping URI protocols to adapter configurations\n */\nconst PROTOCOL_REGISTRY: Record<string, AdapterConfig> = {\n // Official @keyv adapters\n 'redis:': { package: '@keyv/redis', mode: 'string' },\n 'rediss:': { package: '@keyv/redis', mode: 'string' },\n 'postgresql:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'postgres:': { package: '@keyv/postgres', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mysql:': { package: '@keyv/mysql', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'sqlite:': { package: '@keyv/sqlite', mode: 'options', optionsMapper: (url) => ({ uri: url.toString() }) },\n 'mongodb:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'mongodb+srv:': { package: '@keyv/mongo', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n 'memcache:': { package: '@keyv/memcache', mode: 'string' },\n 'etcd:': { package: '@keyv/etcd', mode: 'options', optionsMapper: (url) => ({ url: url.toString() }) },\n\n // Third-party adapters\n 'file:': {\n package: 'keyv-file',\n exportName: 'KeyvFile',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n\n // Built-in (no package needed)\n 'memory:': { package: null },\n\n // Future/custom adapters\n 'duckdb:': {\n package: 'keyv-duckdb',\n optionsMapper: (url: URL) => ({ filename: resolveFilePath(url) }),\n },\n};\n\n/**\n * Register or override a protocol adapter\n */\nexport function registerAdapter(protocol: string, config: AdapterConfig): void {\n const normalizedProtocol = protocol.endsWith(':') ? protocol : `${protocol}:`;\n PROTOCOL_REGISTRY[normalizedProtocol] = config;\n}\n\n/**\n * Get the current registry (read-only copy)\n */\nexport function getRegistry(): Readonly<Record<string, AdapterConfig>> {\n return { ...PROTOCOL_REGISTRY };\n}\n\n/**\n * Get adapter config for a protocol\n */\nexport function getAdapterConfig(protocol: string): AdapterConfig | undefined {\n return PROTOCOL_REGISTRY[protocol];\n}\n"],"names":["resolveFilePath","PROTOCOL_REGISTRY","package","mode","optionsMapper","url","uri","toString","exportName","filename","registerAdapter","protocol","config","normalizedProtocol","endsWith","getRegistry","getAdapterConfig"],"mappings":"AACA,SAASA,eAAe,QAAQ,aAAa;AAE7C;;CAEC,GACD,MAAMC,oBAAmD;IACvD,0BAA0B;IAC1B,UAAU;QAAEC,SAAS;QAAeC,MAAM;IAAS;IACnD,WAAW;QAAED,SAAS;QAAeC,MAAM;IAAS;IACpD,eAAe;QAAED,SAAS;QAAkBC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAC/G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAC7G,UAAU;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IACvG,WAAW;QAAEL,SAAS;QAAgBC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEC,KAAKD,IAAIE,QAAQ;YAAG,CAAA;IAAG;IACzG,YAAY;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG,CAAA;IAAG;IACzG,gBAAgB;QAAEL,SAAS;QAAeC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAC7G,aAAa;QAAEL,SAAS;QAAkBC,MAAM;IAAS;IACzD,SAAS;QAAED,SAAS;QAAcC,MAAM;QAAWC,eAAe,CAACC,MAAS,CAAA;gBAAEA,KAAKA,IAAIE,QAAQ;YAAG,CAAA;IAAG;IAErG,uBAAuB;IACvB,SAAS;QACPL,SAAS;QACTM,YAAY;QACZJ,eAAe,CAACC,MAAc,CAAA;gBAAEI,UAAUT,gBAAgBK;YAAK,CAAA;IACjE;IAEA,+BAA+B;IAC/B,WAAW;QAAEH,SAAS;IAAK;IAE3B,yBAAyB;IACzB,WAAW;QACTA,SAAS;QACTE,eAAe,CAACC,MAAc,CAAA;gBAAEI,UAAUT,gBAAgBK;YAAK,CAAA;IACjE;AACF;AAEA;;CAEC,GACD,OAAO,SAASK,gBAAgBC,QAAgB,EAAEC,MAAqB;IACrE,MAAMC,qBAAqBF,SAASG,QAAQ,CAAC,OAAOH,WAAW,GAAGA,SAAS,CAAC,CAAC;IAC7EV,iBAAiB,CAACY,mBAAmB,GAAGD;AAC1C;AAEA;;CAEC,GACD,OAAO,SAASG;IACd,OAAO;QAAE,GAAGd,iBAAiB;IAAC;AAChC;AAEA;;CAEC,GACD,OAAO,SAASe,iBAAiBL,QAAgB;IAC/C,OAAOV,iBAAiB,CAACU,SAAS;AACpC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/types.ts"],"sourcesContent":["import type Keyv from 'keyv';\n\n/**\n * Configuration for a protocol adapter\n */\nexport interface AdapterConfig {\n /** npm package name, or null for built-in adapters */\n package: string | null;\n /** Named export from the package (default: 'default') */\n exportName?: string;\n /** How to instantiate the adapter */\n mode?: 'string' | 'options';\n /** Custom function to map URL to adapter options */\n optionsMapper?: (url: URL) => Record<string, unknown>;\n}\n\n/**\n * Options for createStore\n */\nexport interface CreateStoreOptions {\n /** Pre-instantiated adapter (bypasses URI loading) */\n store?: unknown;\n /** Keyv namespace */\n namespace?: string;\n /** Default TTL in milliseconds */\n ttl?: number;\n /** Additional Keyv options */\n [key: string]: unknown;\n}\n\n/**\n * Callback type for createStore\n */\nexport type CreateStoreCallback<T> = (err: Error | null, store?: Keyv<T>) => void;\n\n/**\n * Internal callback type for loadAdapter\n */\nexport type LoadAdapterCallback = (err: Error | null, Adapter?: unknown) => void;\n"],"names":[],"mappings":"AAmCA;;CAEC,GACD,WAAiF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/types.ts"],"sourcesContent":["import type Keyv from 'keyv';\n\n/**\n * Configuration for a protocol adapter\n */\nexport interface AdapterConfig {\n /** npm package name, or null for built-in adapters */\n package: string | null;\n /** Named export from the package (default: 'default') */\n exportName?: string;\n /** How to instantiate the adapter */\n mode?: 'string' | 'options';\n /** Custom function to map URL to adapter options */\n optionsMapper?: (url: URL) => Record<string, unknown>;\n}\n\n/**\n * Options for createStore\n */\nexport interface CreateStoreOptions {\n /** Pre-instantiated adapter (bypasses URI loading) */\n store?: unknown;\n /** Keyv namespace */\n namespace?: string;\n /** Default TTL in milliseconds */\n ttl?: number;\n /** Additional Keyv options */\n [key: string]: unknown;\n}\n\n/**\n * Callback type for createStore\n */\nexport type CreateStoreCallback<T> = (err: Error | null, store?: Keyv<T>) => void;\n\n/**\n * Internal callback type for loadAdapter\n */\nexport type LoadAdapterCallback = (err: Error | null, Adapter?: unknown) => void;\n"],"names":[],"mappings":"AAmCA;;CAEC,GACD,WAAiF"}
package/dist/esm/utils.js CHANGED
@@ -1,15 +1,19 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as os from 'node:os';
3
3
  import * as path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
4
5
  /**
5
6
  * Resolve file path from URL, handling ~ and . prefixes
6
7
  */ export function resolveFilePath(url) {
7
8
  let filePath = url.pathname;
8
9
  // Handle ~ for home directory
9
10
  if (url.host === '~') {
10
- filePath = path.join(os.homedir(), filePath.slice(1));
11
+ filePath = path.join(os.homedir(), decodeURIComponent(filePath.slice(1)));
11
12
  } else if (url.host === '.') {
12
- filePath = path.join(process.cwd(), filePath.slice(1));
13
+ filePath = path.join(process.cwd(), decodeURIComponent(filePath.slice(1)));
14
+ } else {
15
+ // File-backed adapters such as duckdb use the same native path conversion.
16
+ filePath = fileURLToPath(new URL(`file://${url.host}${url.pathname}`));
13
17
  }
14
18
  // Ensure directory exists
15
19
  fs.mkdirSync(path.dirname(filePath), {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/utils.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\n/**\n * Resolve file path from URL, handling ~ and . prefixes\n */\nexport function resolveFilePath(url: URL): string {\n let filePath = url.pathname;\n\n // Handle ~ for home directory\n if (url.host === '~') {\n filePath = path.join(os.homedir(), filePath.slice(1));\n }\n // Handle . for current directory\n else if (url.host === '.') {\n filePath = path.join(process.cwd(), filePath.slice(1));\n }\n\n // Ensure directory exists\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n\n return filePath;\n}\n\n/**\n * Parse URL search params into options object with type conversion\n */\nexport function parseUriOptions(url: URL): Record<string, unknown> {\n const options: Record<string, unknown> = {};\n\n for (const [key, value] of url.searchParams) {\n // Auto-convert types\n if (value === 'true') options[key] = true;\n else if (value === 'false') options[key] = false;\n else if (/^\\d+$/.test(value)) options[key] = Number.parseInt(value, 10);\n else if (/^\\d+\\.\\d+$/.test(value)) options[key] = Number.parseFloat(value);\n else options[key] = value;\n }\n\n return options;\n}\n"],"names":["fs","os","path","resolveFilePath","url","filePath","pathname","host","join","homedir","slice","process","cwd","mkdirSync","dirname","recursive","parseUriOptions","options","key","value","searchParams","test","Number","parseInt","parseFloat"],"mappings":"AAAA,YAAYA,QAAQ,UAAU;AAC9B,YAAYC,QAAQ,UAAU;AAC9B,YAAYC,UAAU,YAAY;AAElC;;CAEC,GACD,OAAO,SAASC,gBAAgBC,GAAQ;IACtC,IAAIC,WAAWD,IAAIE,QAAQ;IAE3B,8BAA8B;IAC9B,IAAIF,IAAIG,IAAI,KAAK,KAAK;QACpBF,WAAWH,KAAKM,IAAI,CAACP,GAAGQ,OAAO,IAAIJ,SAASK,KAAK,CAAC;IACpD,OAEK,IAAIN,IAAIG,IAAI,KAAK,KAAK;QACzBF,WAAWH,KAAKM,IAAI,CAACG,QAAQC,GAAG,IAAIP,SAASK,KAAK,CAAC;IACrD;IAEA,0BAA0B;IAC1BV,GAAGa,SAAS,CAACX,KAAKY,OAAO,CAACT,WAAW;QAAEU,WAAW;IAAK;IAEvD,OAAOV;AACT;AAEA;;CAEC,GACD,OAAO,SAASW,gBAAgBZ,GAAQ;IACtC,MAAMa,UAAmC,CAAC;IAE1C,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIf,IAAIgB,YAAY,CAAE;QAC3C,qBAAqB;QACrB,IAAID,UAAU,QAAQF,OAAO,CAACC,IAAI,GAAG;aAChC,IAAIC,UAAU,SAASF,OAAO,CAACC,IAAI,GAAG;aACtC,IAAI,QAAQG,IAAI,CAACF,QAAQF,OAAO,CAACC,IAAI,GAAGI,OAAOC,QAAQ,CAACJ,OAAO;aAC/D,IAAI,aAAaE,IAAI,CAACF,QAAQF,OAAO,CAACC,IAAI,GAAGI,OAAOE,UAAU,CAACL;aAC/DF,OAAO,CAACC,IAAI,GAAGC;IACtB;IAEA,OAAOF;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/utils.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Resolve file path from URL, handling ~ and . prefixes\n */\nexport function resolveFilePath(url: URL): string {\n let filePath = url.pathname;\n\n // Handle ~ for home directory\n if (url.host === '~') {\n filePath = path.join(os.homedir(), decodeURIComponent(filePath.slice(1)));\n }\n // Handle . for current directory\n else if (url.host === '.') {\n filePath = path.join(process.cwd(), decodeURIComponent(filePath.slice(1)));\n } else {\n // File-backed adapters such as duckdb use the same native path conversion.\n filePath = fileURLToPath(new URL(`file://${url.host}${url.pathname}`));\n }\n\n // Ensure directory exists\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n\n return filePath;\n}\n\n/**\n * Parse URL search params into options object with type conversion\n */\nexport function parseUriOptions(url: URL): Record<string, unknown> {\n const options: Record<string, unknown> = {};\n\n for (const [key, value] of url.searchParams) {\n // Auto-convert types\n if (value === 'true') options[key] = true;\n else if (value === 'false') options[key] = false;\n else if (/^\\d+$/.test(value)) options[key] = Number.parseInt(value, 10);\n else if (/^\\d+\\.\\d+$/.test(value)) options[key] = Number.parseFloat(value);\n else options[key] = value;\n }\n\n return options;\n}\n"],"names":["fs","os","path","fileURLToPath","resolveFilePath","url","filePath","pathname","host","join","homedir","decodeURIComponent","slice","process","cwd","URL","mkdirSync","dirname","recursive","parseUriOptions","options","key","value","searchParams","test","Number","parseInt","parseFloat"],"mappings":"AAAA,YAAYA,QAAQ,UAAU;AAC9B,YAAYC,QAAQ,UAAU;AAC9B,YAAYC,UAAU,YAAY;AAClC,SAASC,aAAa,QAAQ,WAAW;AAEzC;;CAEC,GACD,OAAO,SAASC,gBAAgBC,GAAQ;IACtC,IAAIC,WAAWD,IAAIE,QAAQ;IAE3B,8BAA8B;IAC9B,IAAIF,IAAIG,IAAI,KAAK,KAAK;QACpBF,WAAWJ,KAAKO,IAAI,CAACR,GAAGS,OAAO,IAAIC,mBAAmBL,SAASM,KAAK,CAAC;IACvE,OAEK,IAAIP,IAAIG,IAAI,KAAK,KAAK;QACzBF,WAAWJ,KAAKO,IAAI,CAACI,QAAQC,GAAG,IAAIH,mBAAmBL,SAASM,KAAK,CAAC;IACxE,OAAO;QACL,2EAA2E;QAC3EN,WAAWH,cAAc,IAAIY,IAAI,CAAC,OAAO,EAAEV,IAAIG,IAAI,GAAGH,IAAIE,QAAQ,EAAE;IACtE;IAEA,0BAA0B;IAC1BP,GAAGgB,SAAS,CAACd,KAAKe,OAAO,CAACX,WAAW;QAAEY,WAAW;IAAK;IAEvD,OAAOZ;AACT;AAEA;;CAEC,GACD,OAAO,SAASa,gBAAgBd,GAAQ;IACtC,MAAMe,UAAmC,CAAC;IAE1C,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIjB,IAAIkB,YAAY,CAAE;QAC3C,qBAAqB;QACrB,IAAID,UAAU,QAAQF,OAAO,CAACC,IAAI,GAAG;aAChC,IAAIC,UAAU,SAASF,OAAO,CAACC,IAAI,GAAG;aACtC,IAAI,QAAQG,IAAI,CAACF,QAAQF,OAAO,CAACC,IAAI,GAAGI,OAAOC,QAAQ,CAACJ,OAAO;aAC/D,IAAI,aAAaE,IAAI,CAACF,QAAQF,OAAO,CAACC,IAAI,GAAGI,OAAOE,UAAU,CAACL;aAC/DF,OAAO,CAACC,IAAI,GAAGC;IACtB;IAEA,OAAOF;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/worker.ts"],"sourcesContent":["import Keyv from 'keyv';\nimport loadAdapter from './loadAdapter.ts';\nimport { getAdapterConfig } from './registry.ts';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport { parseUriOptions } from './utils.ts';\n\n/**\n * Core worker function that creates a Keyv store\n */\nexport default function worker<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void {\n // Passthrough: pre-instantiated adapter provided\n if (options.store) {\n try {\n const keyv = new Keyv<T>({ ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Parse URI\n let url: URL;\n try {\n url = new URL(uri);\n } catch (_err) {\n callback(new Error(`Invalid URI: ${uri}`));\n return;\n }\n\n const config = getAdapterConfig(url.protocol);\n\n if (!config) {\n callback(new Error(`Unknown protocol: ${url.protocol}. Use registerAdapter() to add support.`));\n return;\n }\n\n // Memory store - no package needed\n if (config.package === null) {\n try {\n const keyv = new Keyv<T>({ ...parseUriOptions(url), ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Load adapter (install if needed)\n loadAdapter(config.package, config.exportName, (err, AdapterClass) => {\n if (err) return callback(err);\n\n try {\n // Build adapter options: URI params + custom mapper + user options\n const adapterOptions = {\n ...parseUriOptions(url),\n ...(config.optionsMapper?.(url) ?? {}),\n ...options,\n };\n\n // Remove store from adapter options to avoid confusion\n const { store: _, ...cleanAdapterOptions } = adapterOptions;\n\n if (config.mode === 'string') {\n const storeInstance = new (AdapterClass as new (uri: string, options: Record<string, unknown>) => unknown)(uri, cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n callback(null, keyv);\n return;\n }\n\n const storeInstance = new (AdapterClass as new (options: Record<string, unknown>) => unknown)(cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n\n callback(null, keyv);\n } catch (createErr) {\n callback(createErr as Error);\n }\n });\n}\n"],"names":["Keyv","loadAdapter","getAdapterConfig","parseUriOptions","worker","uri","options","callback","store","keyv","err","url","URL","_err","Error","config","protocol","package","exportName","AdapterClass","adapterOptions","optionsMapper","_","cleanAdapterOptions","mode","storeInstance","createErr"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,iBAAiB,mBAAmB;AAC3C,SAASC,gBAAgB,QAAQ,gBAAgB;AAEjD,SAASC,eAAe,QAAQ,aAAa;AAE7C;;CAEC,GACD,eAAe,SAASC,OAAUC,GAAW,EAAEC,OAA2B,EAAEC,QAAgC;IAC1G,iDAAiD;IACjD,IAAID,QAAQE,KAAK,EAAE;QACjB,IAAI;YACF,MAAMC,OAAO,IAAIT,KAAQ;gBAAE,GAAGM,OAAO;YAAC;YACtCC,SAAS,MAAME;QACjB,EAAE,OAAOC,KAAK;YACZH,SAASG;QACX;QACA;IACF;IAEA,YAAY;IACZ,IAAIC;IACJ,IAAI;QACFA,MAAM,IAAIC,IAAIP;IAChB,EAAE,OAAOQ,MAAM;QACbN,SAAS,IAAIO,MAAM,CAAC,aAAa,EAAET,KAAK;QACxC;IACF;IAEA,MAAMU,SAASb,iBAAiBS,IAAIK,QAAQ;IAE5C,IAAI,CAACD,QAAQ;QACXR,SAAS,IAAIO,MAAM,CAAC,kBAAkB,EAAEH,IAAIK,QAAQ,CAAC,uCAAuC,CAAC;QAC7F;IACF;IAEA,mCAAmC;IACnC,IAAID,OAAOE,OAAO,KAAK,MAAM;QAC3B,IAAI;YACF,MAAMR,OAAO,IAAIT,KAAQ;gBAAE,GAAGG,gBAAgBQ,IAAI;gBAAE,GAAGL,OAAO;YAAC;YAC/DC,SAAS,MAAME;QACjB,EAAE,OAAOC,KAAK;YACZH,SAASG;QACX;QACA;IACF;IAEA,mCAAmC;IACnCT,YAAYc,OAAOE,OAAO,EAAEF,OAAOG,UAAU,EAAE,CAACR,KAAKS;QACnD,IAAIT,KAAK,OAAOH,SAASG;QAEzB,IAAI;;gBAIIK;YAHN,mEAAmE;YACnE,MAAMK,iBAAiB;gBACrB,GAAGjB,gBAAgBQ,IAAI;4BACnBI,wBAAAA,OAAOM,aAAa,cAApBN,4CAAAA,2BAAAA,QAAuBJ,2CAAQ,CAAC,CAApC;gBACA,GAAGL,OAAO;YACZ;YAEA,uDAAuD;YACvD,MAAM,EAAEE,OAAOc,CAAC,EAAE,GAAGC,qBAAqB,GAAGH;YAE7C,IAAIL,OAAOS,IAAI,KAAK,UAAU;gBAC5B,MAAMC,gBAAgB,IAAKN,aAAgFd,KAAKkB;gBAChH,MAAMd,OAAO,IAAIT,KAAQ;oBAAEQ,OAAOiB;oBAAe,GAAGnB,OAAO;gBAAC;gBAC5DC,SAAS,MAAME;gBACf;YACF;YAEA,MAAMgB,gBAAgB,IAAKN,aAAmEI;YAC9F,MAAMd,OAAO,IAAIT,KAAQ;gBAAEQ,OAAOiB;gBAAe,GAAGnB,OAAO;YAAC;YAE5DC,SAAS,MAAME;QACjB,EAAE,OAAOiB,WAAW;YAClBnB,SAASmB;QACX;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/open-source/keyv/keyv-registry/src/worker.ts"],"sourcesContent":["import Keyv from 'keyv';\nimport loadAdapter from './loadAdapter.ts';\nimport { getAdapterConfig } from './registry.ts';\nimport type { CreateStoreCallback, CreateStoreOptions } from './types.ts';\nimport { parseUriOptions } from './utils.ts';\n\n/**\n * Core worker function that creates a Keyv store\n */\nexport default function worker<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void {\n // Passthrough: pre-instantiated adapter provided\n if (options.store) {\n try {\n const keyv = new Keyv<T>({ ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Parse URI\n let url: URL;\n try {\n url = new URL(uri);\n } catch (_err) {\n callback(new Error(`Invalid URI: ${uri}`));\n return;\n }\n\n const config = getAdapterConfig(url.protocol);\n\n if (!config) {\n callback(new Error(`Unknown protocol: ${url.protocol}. Use registerAdapter() to add support.`));\n return;\n }\n\n // Memory store - no package needed\n if (config.package === null) {\n try {\n const keyv = new Keyv<T>({ ...parseUriOptions(url), ...options });\n callback(null, keyv);\n } catch (err) {\n callback(err as Error);\n }\n return;\n }\n\n // Load adapter (install if needed)\n loadAdapter(config.package, config.exportName, (err, AdapterClass) => {\n if (err) return callback(err);\n\n try {\n // Build adapter options: URI params + custom mapper + user options\n const adapterOptions = {\n ...parseUriOptions(url),\n ...(config.optionsMapper?.(url) ?? {}),\n ...options,\n };\n\n // Remove store from adapter options to avoid confusion\n const { store: _, ...cleanAdapterOptions } = adapterOptions;\n\n if (config.mode === 'string') {\n const storeInstance = new (AdapterClass as new (uri: string, options: Record<string, unknown>) => unknown)(uri, cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n callback(null, keyv);\n return;\n }\n\n const storeInstance = new (AdapterClass as new (options: Record<string, unknown>) => unknown)(cleanAdapterOptions);\n const keyv = new Keyv<T>({ store: storeInstance, ...options });\n\n callback(null, keyv);\n } catch (createErr) {\n callback(createErr as Error);\n }\n });\n}\n"],"names":["Keyv","loadAdapter","getAdapterConfig","parseUriOptions","worker","uri","options","callback","store","keyv","err","url","URL","_err","Error","config","protocol","package","exportName","AdapterClass","adapterOptions","optionsMapper","_","cleanAdapterOptions","mode","storeInstance","createErr"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,iBAAiB,mBAAmB;AAC3C,SAASC,gBAAgB,QAAQ,gBAAgB;AAEjD,SAASC,eAAe,QAAQ,aAAa;AAE7C;;CAEC,GACD,eAAe,SAASC,OAAUC,GAAW,EAAEC,OAA2B,EAAEC,QAAgC;IAC1G,iDAAiD;IACjD,IAAID,QAAQE,KAAK,EAAE;QACjB,IAAI;YACF,MAAMC,OAAO,IAAIT,KAAQ;gBAAE,GAAGM,OAAO;YAAC;YACtCC,SAAS,MAAME;QACjB,EAAE,OAAOC,KAAK;YACZH,SAASG;QACX;QACA;IACF;IAEA,YAAY;IACZ,IAAIC;IACJ,IAAI;QACFA,MAAM,IAAIC,IAAIP;IAChB,EAAE,OAAOQ,MAAM;QACbN,SAAS,IAAIO,MAAM,CAAC,aAAa,EAAET,KAAK;QACxC;IACF;IAEA,MAAMU,SAASb,iBAAiBS,IAAIK,QAAQ;IAE5C,IAAI,CAACD,QAAQ;QACXR,SAAS,IAAIO,MAAM,CAAC,kBAAkB,EAAEH,IAAIK,QAAQ,CAAC,uCAAuC,CAAC;QAC7F;IACF;IAEA,mCAAmC;IACnC,IAAID,OAAOE,OAAO,KAAK,MAAM;QAC3B,IAAI;YACF,MAAMR,OAAO,IAAIT,KAAQ;gBAAE,GAAGG,gBAAgBQ,IAAI;gBAAE,GAAGL,OAAO;YAAC;YAC/DC,SAAS,MAAME;QACjB,EAAE,OAAOC,KAAK;YACZH,SAASG;QACX;QACA;IACF;IAEA,mCAAmC;IACnCT,YAAYc,OAAOE,OAAO,EAAEF,OAAOG,UAAU,EAAE,CAACR,KAAKS;QACnD,IAAIT,KAAK,OAAOH,SAASG;QAEzB,IAAI;;gBAIIK;YAHN,mEAAmE;YACnE,MAAMK,iBAAiB;gBACrB,GAAGjB,gBAAgBQ,IAAI;4BACnBI,wBAAAA,OAAOM,aAAa,cAApBN,4CAAAA,2BAAAA,QAAuBJ,2CAAQ,CAAC,CAApC;gBACA,GAAGL,OAAO;YACZ;YAEA,uDAAuD;YACvD,MAAM,EAAEE,OAAOc,CAAC,EAAE,GAAGC,qBAAqB,GAAGH;YAE7C,IAAIL,OAAOS,IAAI,KAAK,UAAU;gBAC5B,MAAMC,gBAAgB,IAAKN,aAAgFd,KAAKkB;gBAChH,MAAMd,OAAO,IAAIT,KAAQ;oBAAEQ,OAAOiB;oBAAe,GAAGnB,OAAO;gBAAC;gBAC5DC,SAAS,MAAME;gBACf;YACF;YAEA,MAAMgB,gBAAgB,IAAKN,aAAmEI;YAC9F,MAAMd,OAAO,IAAIT,KAAQ;gBAAEQ,OAAOiB;gBAAe,GAAGnB,OAAO;YAAC;YAE5DC,SAAS,MAAME;QACjB,EAAE,OAAOiB,WAAW;YAClBnB,SAASmB;QACX;IACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keyv-registry",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Protocol-based Keyv adapter registry",
5
5
  "keywords": [
6
6
  "keyv",
@@ -47,7 +47,7 @@
47
47
  "keyv": "^5.0.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@keyv/redis": "*",
50
+ "@keyv/redis": "~5.1.6",
51
51
  "@types/mocha": "*",
52
52
  "@types/node": "*",
53
53
  "fs-remove-compat": "^1.0.4",