keyv-registry 0.1.5 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.cts +3 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +2 -35
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/loadAdapter.js +4 -7
- package/dist/cjs/loadAdapter.js.map +1 -1
- package/dist/cjs/worker.js +20 -14
- package/dist/cjs/worker.js.map +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -35
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loadAdapter.js +3 -6
- package/dist/esm/loadAdapter.js.map +1 -1
- package/dist/esm/worker.js +3 -6
- package/dist/esm/worker.js.map +1 -1
- package/package.json +7 -7
package/dist/cjs/index.d.cts
CHANGED
|
@@ -34,4 +34,6 @@ export type { AdapterConfig, CreateStoreCallback, CreateStoreOptions } from './t
|
|
|
34
34
|
* const redis = new KeyvRedis('redis://localhost:6379');
|
|
35
35
|
* const store = await createStore('redis://ignored', { store: redis });
|
|
36
36
|
*/
|
|
37
|
-
export default function createStore<T>(uri: string,
|
|
37
|
+
export default function createStore<T>(uri: string, callback: CreateStoreCallback<T>): void;
|
|
38
|
+
export default function createStore<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void;
|
|
39
|
+
export default function createStore<T>(uri: string, options?: CreateStoreOptions): Promise<Keyv<T>>;
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -34,4 +34,6 @@ export type { AdapterConfig, CreateStoreCallback, CreateStoreOptions } from './t
|
|
|
34
34
|
* const redis = new KeyvRedis('redis://localhost:6379');
|
|
35
35
|
* const store = await createStore('redis://ignored', { store: redis });
|
|
36
36
|
*/
|
|
37
|
-
export default function createStore<T>(uri: string,
|
|
37
|
+
export default function createStore<T>(uri: string, callback: CreateStoreCallback<T>): void;
|
|
38
|
+
export default function createStore<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void;
|
|
39
|
+
export default function createStore<T>(uri: string, options?: CreateStoreOptions): Promise<Keyv<T>>;
|
package/dist/cjs/index.js
CHANGED
|
@@ -12,37 +12,7 @@ _export(exports, {
|
|
|
12
12
|
get clearAdapterCache () {
|
|
13
13
|
return _loadAdapterts.clearAdapterCache;
|
|
14
14
|
},
|
|
15
|
-
get
|
|
16
|
-
* Create a Keyv store from a URI string
|
|
17
|
-
*
|
|
18
|
-
* Supports dual-boot API (callback or Promise):
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* // Promise API
|
|
22
|
-
* const store = await createStore('redis://localhost:6379');
|
|
23
|
-
* const file = await createStore('file://~/.cache/app/data.json');
|
|
24
|
-
* const memory = await createStore('memory://');
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* // Callback API
|
|
28
|
-
* createStore('redis://localhost:6379', (err, store) => {
|
|
29
|
-
* if (err) throw err;
|
|
30
|
-
* // use store
|
|
31
|
-
* });
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* // With options
|
|
35
|
-
* const store = await createStore('redis://localhost:6379', {
|
|
36
|
-
* namespace: 'myapp',
|
|
37
|
-
* ttl: 60000
|
|
38
|
-
* });
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* // Pre-instantiated adapter passthrough
|
|
42
|
-
* import KeyvRedis from '@keyv/redis';
|
|
43
|
-
* const redis = new KeyvRedis('redis://localhost:6379');
|
|
44
|
-
* const store = await createStore('redis://ignored', { store: redis });
|
|
45
|
-
*/ default () {
|
|
15
|
+
get default () {
|
|
46
16
|
return createStore;
|
|
47
17
|
},
|
|
48
18
|
get getRegistry () {
|
|
@@ -68,10 +38,7 @@ function createStore(uri, options, callback) {
|
|
|
68
38
|
}
|
|
69
39
|
options = options || {};
|
|
70
40
|
// Callback mode
|
|
71
|
-
if (typeof callback === 'function')
|
|
72
|
-
(0, _workerts.default)(uri, options, callback);
|
|
73
|
-
return undefined;
|
|
74
|
-
}
|
|
41
|
+
if (typeof callback === 'function') return (0, _workerts.default)(uri, options, callback);
|
|
75
42
|
// Promise mode
|
|
76
43
|
return new Promise(function(resolve, reject) {
|
|
77
44
|
(0, _workerts.default)(uri, options, function(err, store) {
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -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, options?: CreateStoreOptions | CreateStoreCallback<T>, callback?: CreateStoreCallback<T>):
|
|
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 // Normalize arguments\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n // Callback mode\n if (typeof callback === 'function') return worker(uri, options, callback);\n\n // Promise mode\n return new Promise((resolve, reject) => {\n worker(uri, options as CreateStoreOptions, (err, store) => (err ? reject(err) : resolve(store as Keyv<T>)));\n });\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;IAC1I,sBAAsB;IACtB,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,gBAAgB;IAChB,IAAI,OAAOC,aAAa,YAAY,OAAOC,IAAAA,iBAAM,EAACH,KAAKC,SAASC;IAEhE,eAAe;IACf,OAAO,IAAIE,QAAQ,SAACC,SAASC;QAC3BH,IAAAA,iBAAM,EAACH,KAAKC,SAA+B,SAACM,KAAKC;mBAAWD,MAAMD,OAAOC,OAAOF,QAAQG;;IAC1F;AACF"}
|
package/dist/cjs/loadAdapter.js
CHANGED
|
@@ -43,22 +43,19 @@ function loadAdapter(packageName, exportName, callback) {
|
|
|
43
43
|
}
|
|
44
44
|
// Try to require first (may already be installed)
|
|
45
45
|
try {
|
|
46
|
-
var mod = _require(packageName);
|
|
47
46
|
var _mod_default;
|
|
47
|
+
var mod = _require(packageName);
|
|
48
48
|
var Adapter = exportName ? mod[exportName] : (_mod_default = mod.default) !== null && _mod_default !== void 0 ? _mod_default : mod;
|
|
49
49
|
adapterCache.set(cacheKey, Adapter);
|
|
50
50
|
callback(null, Adapter);
|
|
51
51
|
return;
|
|
52
|
-
} catch (
|
|
52
|
+
} catch (unused) {
|
|
53
53
|
// Not installed - dynamically install then load
|
|
54
54
|
(0, _installmodulelinked.default)(packageName, nodeModulesPath, {}, function(err) {
|
|
55
|
-
if (err)
|
|
56
|
-
callback(err);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
55
|
+
if (err) return callback(err);
|
|
59
56
|
try {
|
|
60
|
-
var mod = _require(packageName);
|
|
61
57
|
var _mod_default;
|
|
58
|
+
var mod = _require(packageName);
|
|
62
59
|
var Adapter = exportName ? mod[exportName] : (_mod_default = mod.default) !== null && _mod_default !== void 0 ? _mod_default : mod;
|
|
63
60
|
adapterCache.set(cacheKey, Adapter);
|
|
64
61
|
callback(null, Adapter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport path from 'node:path';\nimport url from 'node:url';\nimport installModule from 'install-module-linked';\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// Determine node_modules path\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModulesPath = path.join(_dirname, '..', '..', 'node_modules');\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter, installing it dynamically if needed\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 // Try to require first (may already be installed)\n try {\n const mod = _require(packageName);\n const Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n return;\n } catch {\n // Not installed - dynamically install then load\n installModule(packageName, nodeModulesPath, {}, (err: Error | null) => {\n if (err)
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport path from 'node:path';\nimport url from 'node:url';\nimport installModule from 'install-module-linked';\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// Determine node_modules path\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModulesPath = path.join(_dirname, '..', '..', 'node_modules');\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter, installing it dynamically if needed\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 // Try to require first (may already be installed)\n try {\n const mod = _require(packageName);\n const Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n return;\n } catch {\n // Not installed - dynamically install then load\n installModule(packageName, nodeModulesPath, {}, (err: Error | null) => {\n if (err) return callback(err);\n try {\n const mod = _require(packageName);\n const Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n } catch (loadErr) {\n callback(loadErr as Error);\n }\n });\n }\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","_dirname","path","dirname","__dirname","url","fileURLToPath","nodeModulesPath","join","adapterCache","Map","packageName","exportName","callback","cacheKey","has","get","mod","Adapter","default","set","installModule","err","loadErr","clear"],"mappings":";;;;;;;;;;;QAsDgBA;eAAAA;;QAtChB;;CAEC,GACD;eAAwBC;;;iEAnBL;+DACF;8DACD;0EACU;;;;;;AAG1B,gDAAgD;AAChD,IAAMC,WAAW,OAAOC,YAAY,cAAcC,mBAAM,CAACC,aAAa,CAAC,uDAAmBF;AAE1F,8BAA8B;AAC9B,IAAMG,WAAWC,iBAAI,CAACC,OAAO,CAAC,OAAOC,cAAc,cAAcA,YAAYC,gBAAG,CAACC,aAAa,CAAC;AAC/F,IAAMC,kBAAkBL,iBAAI,CAACM,IAAI,CAACP,UAAU,MAAM,MAAM;AAExD,wBAAwB;AACxB,IAAMQ,eAAe,IAAIC;AAKV,SAASd,YAAYe,WAAmB,EAAEC,UAA8B,EAAEC,QAA6B;IACpH,IAAMC,WAAW,AApBnB,AAoBoB,UAAEH,aAAY,KAA2B,OAAxBC,uBAAAA,wBAAAA,aAAc;IAEjD,qCAAqC;IACrC,IAAIH,aAAaM,GAAG,CAACD,WAAW;QAC9BD,SAAS,MAAMJ,aAAaO,GAAG,CAACF;QAChC;IACF;IAEA,kDAAkD;IAClD,IAAI;YAE8CG;QADhD,IAAMA,MAAMpB,SAASc;QACrB,IAAMO,UAAUN,aAAaK,GAAG,CAACL,WAAW,IAAIK,eAAAA,IAAIE,OAAO,cAAXF,0BAAAA,eAAeA;QAC/DR,aAAaW,GAAG,CAACN,UAAUI;QAC3BL,SAAS,MAAMK;QACf;IACF,EAAE,eAAM;QACN,gDAAgD;QAChDG,IAAAA,4BAAa,EAACV,aAAaJ,iBAAiB,CAAC,GAAG,SAACe;YAC/C,IAAIA,KAAK,OAAOT,SAASS;YACzB,IAAI;oBAE8CL;gBADhD,IAAMA,MAAMpB,SAASc;gBACrB,IAAMO,UAAUN,aAAaK,GAAG,CAACL,WAAW,IAAIK,eAAAA,IAAIE,OAAO,cAAXF,0BAAAA,eAAeA;gBAC/DR,aAAaW,GAAG,CAACN,UAAUI;gBAC3BL,SAAS,MAAMK;YACjB,EAAE,OAAOK,SAAS;gBAChBV,SAASU;YACX;QACF;IACF;AACF;AAKO,SAAS5B;IACdc,aAAae,KAAK;AACpB"}
|
package/dist/cjs/worker.js
CHANGED
|
@@ -49,12 +49,22 @@ function _object_spread(target) {
|
|
|
49
49
|
}
|
|
50
50
|
function _object_without_properties(source, excluded) {
|
|
51
51
|
if (source == null) return {};
|
|
52
|
-
var target =
|
|
53
|
-
|
|
52
|
+
var target = {}, sourceKeys, key, i;
|
|
53
|
+
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
|
|
54
|
+
sourceKeys = Reflect.ownKeys(source);
|
|
55
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
56
|
+
key = sourceKeys[i];
|
|
57
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
58
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
59
|
+
target[key] = source[key];
|
|
60
|
+
}
|
|
61
|
+
return target;
|
|
62
|
+
}
|
|
63
|
+
target = _object_without_properties_loose(source, excluded);
|
|
54
64
|
if (Object.getOwnPropertySymbols) {
|
|
55
|
-
|
|
56
|
-
for(i = 0; i <
|
|
57
|
-
key =
|
|
65
|
+
sourceKeys = Object.getOwnPropertySymbols(source);
|
|
66
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
67
|
+
key = sourceKeys[i];
|
|
58
68
|
if (excluded.indexOf(key) >= 0) continue;
|
|
59
69
|
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
60
70
|
target[key] = source[key];
|
|
@@ -64,12 +74,11 @@ function _object_without_properties(source, excluded) {
|
|
|
64
74
|
}
|
|
65
75
|
function _object_without_properties_loose(source, excluded) {
|
|
66
76
|
if (source == null) return {};
|
|
67
|
-
var target = {};
|
|
68
|
-
var sourceKeys = Object.keys(source);
|
|
69
|
-
var key, i;
|
|
77
|
+
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
|
|
70
78
|
for(i = 0; i < sourceKeys.length; i++){
|
|
71
79
|
key = sourceKeys[i];
|
|
72
80
|
if (excluded.indexOf(key) >= 0) continue;
|
|
81
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
73
82
|
target[key] = source[key];
|
|
74
83
|
}
|
|
75
84
|
return target;
|
|
@@ -110,15 +119,12 @@ function worker(uri, options, callback) {
|
|
|
110
119
|
}
|
|
111
120
|
// Load adapter (install if needed)
|
|
112
121
|
(0, _loadAdapterts.default)(config.package, config.exportName, function(err, AdapterClass) {
|
|
113
|
-
if (err)
|
|
114
|
-
callback(err);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
122
|
+
if (err) return callback(err);
|
|
117
123
|
try {
|
|
124
|
+
var _ref;
|
|
118
125
|
var _config_optionsMapper;
|
|
119
|
-
var _config_optionsMapper1;
|
|
120
126
|
// Build adapter options: URI params + custom mapper + user options
|
|
121
|
-
var adapterOptions = _object_spread({}, (0, _utilsts.parseUriOptions)(url), (
|
|
127
|
+
var adapterOptions = _object_spread({}, (0, _utilsts.parseUriOptions)(url), (_ref = (_config_optionsMapper = config.optionsMapper) === null || _config_optionsMapper === void 0 ? void 0 : _config_optionsMapper.call(config, url)) !== null && _ref !== void 0 ? _ref : {
|
|
122
128
|
uri: uri
|
|
123
129
|
}, options);
|
|
124
130
|
// Remove store from adapter options to avoid confusion
|
package/dist/cjs/worker.js.map
CHANGED
|
@@ -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)
|
|
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) ?? { uri }),\n ...options,\n };\n\n // Remove store from adapter options to avoid confusion\n const { store: _, ...cleanAdapterOptions } = adapterOptions;\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","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;gBAAEP,KAAAA;YAAI,GACtCC;YAGL,uDAAuD;YACvD,IAAQE,AAAOkB,IAA8BF,eAArChB,OAAamB,iDAAwBH;;;YAE7C,IAAMI,gBAAgB,IAAKL,aAAmEI;YAC9F,IAAMlB,OAAO,IAAIC,aAAI,CAAI;gBAAEF,OAAOoB;eAAkBtB;YAEpDC,SAAS,MAAME;QACjB,EAAE,OAAOoB,WAAW;YAClBtB,SAASsB;QACX;IACF;AACF"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -34,4 +34,6 @@ export type { AdapterConfig, CreateStoreCallback, CreateStoreOptions } from './t
|
|
|
34
34
|
* const redis = new KeyvRedis('redis://localhost:6379');
|
|
35
35
|
* const store = await createStore('redis://ignored', { store: redis });
|
|
36
36
|
*/
|
|
37
|
-
export default function createStore<T>(uri: string,
|
|
37
|
+
export default function createStore<T>(uri: string, callback: CreateStoreCallback<T>): void;
|
|
38
|
+
export default function createStore<T>(uri: string, options: CreateStoreOptions, callback: CreateStoreCallback<T>): void;
|
|
39
|
+
export default function createStore<T>(uri: string, options?: CreateStoreOptions): Promise<Keyv<T>>;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,37 +1,7 @@
|
|
|
1
1
|
import worker from './worker.js';
|
|
2
2
|
export { clearAdapterCache } from './loadAdapter.js';
|
|
3
3
|
export { getRegistry, registerAdapter } from './registry.js';
|
|
4
|
-
|
|
5
|
-
* Create a Keyv store from a URI string
|
|
6
|
-
*
|
|
7
|
-
* Supports dual-boot API (callback or Promise):
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* // Promise API
|
|
11
|
-
* const store = await createStore('redis://localhost:6379');
|
|
12
|
-
* const file = await createStore('file://~/.cache/app/data.json');
|
|
13
|
-
* const memory = await createStore('memory://');
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* // Callback API
|
|
17
|
-
* createStore('redis://localhost:6379', (err, store) => {
|
|
18
|
-
* if (err) throw err;
|
|
19
|
-
* // use store
|
|
20
|
-
* });
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* // With options
|
|
24
|
-
* const store = await createStore('redis://localhost:6379', {
|
|
25
|
-
* namespace: 'myapp',
|
|
26
|
-
* ttl: 60000
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* // Pre-instantiated adapter passthrough
|
|
31
|
-
* import KeyvRedis from '@keyv/redis';
|
|
32
|
-
* const redis = new KeyvRedis('redis://localhost:6379');
|
|
33
|
-
* const store = await createStore('redis://ignored', { store: redis });
|
|
34
|
-
*/ export default function createStore(uri, options, callback) {
|
|
4
|
+
export default function createStore(uri, options, callback) {
|
|
35
5
|
// Normalize arguments
|
|
36
6
|
if (typeof options === 'function') {
|
|
37
7
|
callback = options;
|
|
@@ -39,10 +9,7 @@ export { getRegistry, registerAdapter } from './registry.js';
|
|
|
39
9
|
}
|
|
40
10
|
options = options || {};
|
|
41
11
|
// Callback mode
|
|
42
|
-
if (typeof callback === 'function')
|
|
43
|
-
worker(uri, options, callback);
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
12
|
+
if (typeof callback === 'function') return worker(uri, options, callback);
|
|
46
13
|
// Promise mode
|
|
47
14
|
return new Promise((resolve, reject)=>{
|
|
48
15
|
worker(uri, options, (err, store)=>err ? reject(err) : resolve(store));
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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, options?: CreateStoreOptions | CreateStoreCallback<T>, callback?: CreateStoreCallback<T>):
|
|
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 // Normalize arguments\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n // Callback mode\n if (typeof callback === 'function') return worker(uri, options, callback);\n\n // Promise mode\n return new Promise((resolve, reject) => {\n worker(uri, options as CreateStoreOptions, (err, store) => (err ? reject(err) : resolve(store as Keyv<T>)));\n });\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;IAC1I,sBAAsB;IACtB,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,gBAAgB;IAChB,IAAI,OAAOC,aAAa,YAAY,OAAOP,OAAOK,KAAKC,SAASC;IAEhE,eAAe;IACf,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3BV,OAAOK,KAAKC,SAA+B,CAACK,KAAKC,QAAWD,MAAMD,OAAOC,OAAOF,QAAQG;IAC1F;AACF"}
|
package/dist/esm/loadAdapter.js
CHANGED
|
@@ -20,8 +20,8 @@ const adapterCache = new Map();
|
|
|
20
20
|
}
|
|
21
21
|
// Try to require first (may already be installed)
|
|
22
22
|
try {
|
|
23
|
-
const mod = _require(packageName);
|
|
24
23
|
var _mod_default;
|
|
24
|
+
const mod = _require(packageName);
|
|
25
25
|
const Adapter = exportName ? mod[exportName] : (_mod_default = mod.default) !== null && _mod_default !== void 0 ? _mod_default : mod;
|
|
26
26
|
adapterCache.set(cacheKey, Adapter);
|
|
27
27
|
callback(null, Adapter);
|
|
@@ -29,13 +29,10 @@ const adapterCache = new Map();
|
|
|
29
29
|
} catch {
|
|
30
30
|
// Not installed - dynamically install then load
|
|
31
31
|
installModule(packageName, nodeModulesPath, {}, (err)=>{
|
|
32
|
-
if (err)
|
|
33
|
-
callback(err);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
32
|
+
if (err) return callback(err);
|
|
36
33
|
try {
|
|
37
|
-
const mod = _require(packageName);
|
|
38
34
|
var _mod_default;
|
|
35
|
+
const mod = _require(packageName);
|
|
39
36
|
const Adapter = exportName ? mod[exportName] : (_mod_default = mod.default) !== null && _mod_default !== void 0 ? _mod_default : mod;
|
|
40
37
|
adapterCache.set(cacheKey, Adapter);
|
|
41
38
|
callback(null, Adapter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport path from 'node:path';\nimport url from 'node:url';\nimport installModule from 'install-module-linked';\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// Determine node_modules path\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModulesPath = path.join(_dirname, '..', '..', 'node_modules');\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter, installing it dynamically if needed\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 // Try to require first (may already be installed)\n try {\n const mod = _require(packageName);\n const Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n return;\n } catch {\n // Not installed - dynamically install then load\n installModule(packageName, nodeModulesPath, {}, (err: Error | null) => {\n if (err)
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/keyv/keyv-registry/src/loadAdapter.ts"],"sourcesContent":["import Module from 'node:module';\nimport path from 'node:path';\nimport url from 'node:url';\nimport installModule from 'install-module-linked';\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// Determine node_modules path\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModulesPath = path.join(_dirname, '..', '..', 'node_modules');\n\n// Cache loaded adapters\nconst adapterCache = new Map<string, unknown>();\n\n/**\n * Load an adapter, installing it dynamically if needed\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 // Try to require first (may already be installed)\n try {\n const mod = _require(packageName);\n const Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n return;\n } catch {\n // Not installed - dynamically install then load\n installModule(packageName, nodeModulesPath, {}, (err: Error | null) => {\n if (err) return callback(err);\n try {\n const mod = _require(packageName);\n const Adapter = exportName ? mod[exportName] : (mod.default ?? mod);\n adapterCache.set(cacheKey, Adapter);\n callback(null, Adapter);\n } catch (loadErr) {\n callback(loadErr as Error);\n }\n });\n }\n}\n\n/**\n * Clear the adapter cache (useful for testing)\n */\nexport function clearAdapterCache(): void {\n adapterCache.clear();\n}\n"],"names":["Module","path","url","installModule","_require","require","createRequire","_dirname","dirname","__dirname","fileURLToPath","nodeModulesPath","join","adapterCache","Map","loadAdapter","packageName","exportName","callback","cacheKey","has","get","mod","Adapter","default","set","err","loadErr","clearAdapterCache","clear"],"mappings":"AAAA,OAAOA,YAAY,cAAc;AACjC,OAAOC,UAAU,YAAY;AAC7B,OAAOC,SAAS,WAAW;AAC3B,OAAOC,mBAAmB,wBAAwB;AAGlD,gDAAgD;AAChD,MAAMC,WAAW,OAAOC,YAAY,cAAcL,OAAOM,aAAa,CAAC,YAAYJ,GAAG,IAAIG;AAE1F,8BAA8B;AAC9B,MAAME,WAAWN,KAAKO,OAAO,CAAC,OAAOC,cAAc,cAAcA,YAAYP,IAAIQ,aAAa,CAAC,YAAYR,GAAG;AAC9G,MAAMS,kBAAkBV,KAAKW,IAAI,CAACL,UAAU,MAAM,MAAM;AAExD,wBAAwB;AACxB,MAAMM,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,kDAAkD;IAClD,IAAI;YAE8CG;QADhD,MAAMA,MAAMlB,SAASY;QACrB,MAAMO,UAAUN,aAAaK,GAAG,CAACL,WAAW,IAAIK,eAAAA,IAAIE,OAAO,cAAXF,0BAAAA,eAAeA;QAC/DT,aAAaY,GAAG,CAACN,UAAUI;QAC3BL,SAAS,MAAMK;QACf;IACF,EAAE,OAAM;QACN,gDAAgD;QAChDpB,cAAca,aAAaL,iBAAiB,CAAC,GAAG,CAACe;YAC/C,IAAIA,KAAK,OAAOR,SAASQ;YACzB,IAAI;oBAE8CJ;gBADhD,MAAMA,MAAMlB,SAASY;gBACrB,MAAMO,UAAUN,aAAaK,GAAG,CAACL,WAAW,IAAIK,eAAAA,IAAIE,OAAO,cAAXF,0BAAAA,eAAeA;gBAC/DT,aAAaY,GAAG,CAACN,UAAUI;gBAC3BL,SAAS,MAAMK;YACjB,EAAE,OAAOI,SAAS;gBAChBT,SAASS;YACX;QACF;IACF;AACF;AAEA;;CAEC,GACD,OAAO,SAASC;IACdf,aAAagB,KAAK;AACpB"}
|
package/dist/esm/worker.js
CHANGED
|
@@ -45,17 +45,14 @@ import { parseUriOptions } from './utils.js';
|
|
|
45
45
|
}
|
|
46
46
|
// Load adapter (install if needed)
|
|
47
47
|
loadAdapter(config.package, config.exportName, (err, AdapterClass)=>{
|
|
48
|
-
if (err)
|
|
49
|
-
callback(err);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
48
|
+
if (err) return callback(err);
|
|
52
49
|
try {
|
|
50
|
+
var _ref;
|
|
53
51
|
var _config_optionsMapper;
|
|
54
|
-
var _config_optionsMapper1;
|
|
55
52
|
// Build adapter options: URI params + custom mapper + user options
|
|
56
53
|
const adapterOptions = {
|
|
57
54
|
...parseUriOptions(url),
|
|
58
|
-
...(
|
|
55
|
+
...(_ref = (_config_optionsMapper = config.optionsMapper) === null || _config_optionsMapper === void 0 ? void 0 : _config_optionsMapper.call(config, url)) !== null && _ref !== void 0 ? _ref : {
|
|
59
56
|
uri
|
|
60
57
|
},
|
|
61
58
|
...options
|
package/dist/esm/worker.js.map
CHANGED
|
@@ -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)
|
|
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) ?? { uri }),\n ...options,\n };\n\n // Remove store from adapter options to avoid confusion\n const { store: _, ...cleanAdapterOptions } = adapterOptions;\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","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;oBAAEN;gBAAI,CAAzC;gBACA,GAAGC,OAAO;YACZ;YAEA,uDAAuD;YACvD,MAAM,EAAEE,OAAOc,CAAC,EAAE,GAAGC,qBAAqB,GAAGH;YAE7C,MAAMI,gBAAgB,IAAKL,aAAmEI;YAC9F,MAAMd,OAAO,IAAIT,KAAQ;gBAAEQ,OAAOgB;gBAAe,GAAGlB,OAAO;YAAC;YAE5DC,SAAS,MAAME;QACjB,EAAE,OAAOgB,WAAW;YAClBlB,SAASkB;QACX;IACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "keyv-registry",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Protocol-based Keyv adapter registry with dynamic module installation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"keyv",
|
|
@@ -44,15 +44,15 @@
|
|
|
44
44
|
"version": "tsds version"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"install-module-linked": "^1.3.
|
|
47
|
+
"install-module-linked": "^1.3.16",
|
|
48
48
|
"keyv": "^5.5.5"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@types/mocha": "
|
|
52
|
-
"@types/node": "
|
|
53
|
-
"node-version-use": "
|
|
54
|
-
"ts-dev-stack": "
|
|
55
|
-
"tsds-config": "
|
|
51
|
+
"@types/mocha": "*",
|
|
52
|
+
"@types/node": "*",
|
|
53
|
+
"node-version-use": "*",
|
|
54
|
+
"ts-dev-stack": "*",
|
|
55
|
+
"tsds-config": "*"
|
|
56
56
|
},
|
|
57
57
|
"engines": {
|
|
58
58
|
"node": ">=16"
|