@thewhateverapp/platform 0.11.7 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/env.d.ts +24 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +33 -0
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/kv/index.d.ts.map +1 -1
- package/dist/kv/index.js +14 -1
- package/dist/kv/index.js.map +1 -1
- package/dist/kv/mock.d.ts +34 -0
- package/dist/kv/mock.d.ts.map +1 -0
- package/dist/kv/mock.js +184 -0
- package/dist/kv/mock.js.map +1 -0
- package/package.json +1 -1
package/dist/env.d.ts
CHANGED
|
@@ -65,5 +65,29 @@ export declare function isPlatformEnvConfigured(): boolean;
|
|
|
65
65
|
* Reset the environment provider (mainly for testing).
|
|
66
66
|
*/
|
|
67
67
|
export declare function resetPlatformEnv(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Enable preview mode for browser-based development.
|
|
70
|
+
*
|
|
71
|
+
* When preview mode is enabled, all SDK functions use in-memory mock implementations
|
|
72
|
+
* instead of requiring Cloudflare bindings. This allows tiles to be previewed in
|
|
73
|
+
* the browser without a real backend.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* import { configurePreviewMode } from '@thewhateverapp/platform';
|
|
78
|
+
*
|
|
79
|
+
* // Enable preview mode at app startup
|
|
80
|
+
* configurePreviewMode(true);
|
|
81
|
+
*
|
|
82
|
+
* // Now SDK functions use in-memory storage
|
|
83
|
+
* const kv = getKV();
|
|
84
|
+
* await kv.put('key', 'value'); // Stored in memory
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare function configurePreviewMode(enabled: boolean): void;
|
|
88
|
+
/**
|
|
89
|
+
* Check if preview mode is enabled.
|
|
90
|
+
*/
|
|
91
|
+
export declare function isPreviewMode(): boolean;
|
|
68
92
|
export {};
|
|
69
93
|
//# sourceMappingURL=env.d.ts.map
|
package/dist/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,KAAK,WAAW,GAAG,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,KAAK,WAAW,GAAG,MAAM,WAAW,CAAC;AAKrC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAEhE;AAaD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK3D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
|
package/dist/env.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
let envProvider = null;
|
|
22
|
+
let previewMode = false;
|
|
22
23
|
/**
|
|
23
24
|
* Configure the SDK's environment provider.
|
|
24
25
|
*
|
|
@@ -86,5 +87,37 @@ export function isPlatformEnvConfigured() {
|
|
|
86
87
|
*/
|
|
87
88
|
export function resetPlatformEnv() {
|
|
88
89
|
envProvider = null;
|
|
90
|
+
previewMode = false;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Enable preview mode for browser-based development.
|
|
94
|
+
*
|
|
95
|
+
* When preview mode is enabled, all SDK functions use in-memory mock implementations
|
|
96
|
+
* instead of requiring Cloudflare bindings. This allows tiles to be previewed in
|
|
97
|
+
* the browser without a real backend.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* import { configurePreviewMode } from '@thewhateverapp/platform';
|
|
102
|
+
*
|
|
103
|
+
* // Enable preview mode at app startup
|
|
104
|
+
* configurePreviewMode(true);
|
|
105
|
+
*
|
|
106
|
+
* // Now SDK functions use in-memory storage
|
|
107
|
+
* const kv = getKV();
|
|
108
|
+
* await kv.put('key', 'value'); // Stored in memory
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export function configurePreviewMode(enabled) {
|
|
112
|
+
previewMode = enabled;
|
|
113
|
+
if (enabled) {
|
|
114
|
+
console.log('[PLATFORM-SDK] Preview mode enabled - using in-memory mock implementations');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if preview mode is enabled.
|
|
119
|
+
*/
|
|
120
|
+
export function isPreviewMode() {
|
|
121
|
+
return previewMode;
|
|
89
122
|
}
|
|
90
123
|
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAmBH,IAAI,WAAW,GAAuB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAmBH,IAAI,WAAW,GAAuB,IAAI,CAAC;AAC3C,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAqB;IACxD,WAAW,GAAG,QAAQ,CAAC;AACzB,CAAC;AAED,wFAAwF;AACxF,SAAS,UAAU,CAAC,UAAkB;IACpC,IAAI,CAAC;QACH,mDAAmD;QACnD,8DAA8D;QAC9D,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,iDAAiD;QACjD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,UAAU,CAAC,wBAAwB,CAAkE,CAAC;YACvH,IAAI,QAAQ,EAAE,oBAAoB,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBAC5C,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;oBACb,OAAO,GAAG,CAAC,GAAG,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;QAED,MAAM,IAAI,KAAK,CACb,mCAAmC;YACjC,mGAAmG,CACtG,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,WAAW,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,WAAW,GAAG,IAAI,CAAC;IACnB,WAAW,GAAG,KAAK,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,WAAW,GAAG,OAAO,CAAC;IACtB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,13 +24,14 @@
|
|
|
24
24
|
* }
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
export { configurePlatformEnv, getPlatformEnv, isPlatformEnvConfigured, resetPlatformEnv, } from './env';
|
|
27
|
+
export { configurePlatformEnv, getPlatformEnv, isPlatformEnvConfigured, resetPlatformEnv, configurePreviewMode, isPreviewMode, } from './env';
|
|
28
28
|
export type { PlatformEnv } from './env';
|
|
29
29
|
export { createPlatform, WhateverPlatform } from './platform';
|
|
30
30
|
export type * from './types';
|
|
31
31
|
export { getDatabase, createDatabase } from './database';
|
|
32
32
|
export type { DatabaseProvider, Collection, Query, Update, FindOptions, InsertOneResult, InsertManyResult, UpdateResult, DeleteResult, } from './database/types';
|
|
33
33
|
export { getKV, createKV } from './kv';
|
|
34
|
+
export { MockKV } from './kv/mock';
|
|
34
35
|
export type { KVProvider, KVSetOptions, KVListOptions, KVListResult, KVValueType, KVValue, KVMetadata, } from './kv/types';
|
|
35
36
|
export { getStorage, createStorage } from './r2';
|
|
36
37
|
export type { StorageProvider, StorageObject, StorageMetadata, ListOptions as StorageListOptions, ListResult as StorageListResult, PutOptions as StoragePutOptions, PutResult as StoragePutResult, GetOptions as StorageGetOptions, } from './r2/types';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9D,mBAAmB,SAAS,CAAC;AAO7B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,KAAK,EACL,MAAM,EACN,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,YAAY,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AACjD,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAC/B,UAAU,IAAI,iBAAiB,EAC/B,SAAS,IAAI,gBAAgB,EAC7B,UAAU,IAAI,iBAAiB,GAChC,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,YAAY,GACb,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EACV,iBAAiB,EACjB,OAAO,EACP,MAAM,GACP,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACtG,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC7E,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,UAAU,EACV,KAAK,EACL,QAAQ,EACR,MAAM,EACN,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,eAAe,EACf,OAAO,EACP,UAAU,EACV,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
// Environment configuration (must be called before using SDK in OpenNext)
|
|
28
|
-
export { configurePlatformEnv, getPlatformEnv, isPlatformEnvConfigured, resetPlatformEnv, } from './env';
|
|
28
|
+
export { configurePlatformEnv, getPlatformEnv, isPlatformEnvConfigured, resetPlatformEnv, configurePreviewMode, isPreviewMode, } from './env';
|
|
29
29
|
// Main exports
|
|
30
30
|
export { createPlatform, WhateverPlatform } from './platform';
|
|
31
31
|
// =============================================================================
|
|
@@ -35,6 +35,7 @@ export { createPlatform, WhateverPlatform } from './platform';
|
|
|
35
35
|
export { getDatabase, createDatabase } from './database';
|
|
36
36
|
// KV - Key-Value storage (Cloudflare KV)
|
|
37
37
|
export { getKV, createKV } from './kv';
|
|
38
|
+
export { MockKV } from './kv/mock';
|
|
38
39
|
// Storage - Object storage (R2)
|
|
39
40
|
export { getStorage, createStorage } from './r2';
|
|
40
41
|
// Public Storage - Public file uploads via platform-api (CDN-backed)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,0EAA0E;AAC1E,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,0EAA0E;AAC1E,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,OAAO,CAAC;AAGf,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9D,gFAAgF;AAChF,mEAAmE;AACnE,gFAAgF;AAEhF,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAazD,yCAAyC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWnC,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAYjD,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAO1B,gFAAgF;AAChF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAYpC,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,gEAAgE;AAChE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAOvE,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAetG,0FAA0F;AAC1F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAsB7E,gFAAgF;AAChF,mDAAmD;AACnD,gFAAgF;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/kv/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAgBtE,mBAAmB,SAAS,CAAC;AAE7B;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE,GAAG,eAAe,GAAG,UAAU,CA4C9F;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,UAAU,CAezD"}
|
package/dist/kv/index.js
CHANGED
|
@@ -21,7 +21,16 @@
|
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
23
|
import { CloudflareKV } from './providers';
|
|
24
|
-
import {
|
|
24
|
+
import { MockKV } from './mock';
|
|
25
|
+
import { getPlatformEnv, isPlatformEnvConfigured, isPreviewMode } from '../env';
|
|
26
|
+
// Singleton MockKV instance for preview mode
|
|
27
|
+
let mockKVInstance = null;
|
|
28
|
+
function getMockKV() {
|
|
29
|
+
if (!mockKVInstance) {
|
|
30
|
+
mockKVInstance = new MockKV({ debug: true });
|
|
31
|
+
}
|
|
32
|
+
return mockKVInstance;
|
|
33
|
+
}
|
|
25
34
|
/**
|
|
26
35
|
* Get a KV instance for the current request
|
|
27
36
|
*
|
|
@@ -30,6 +39,10 @@ import { getPlatformEnv, isPlatformEnvConfigured } from '../env';
|
|
|
30
39
|
* @returns KV provider instance
|
|
31
40
|
*/
|
|
32
41
|
export function getKV(req) {
|
|
42
|
+
// Check for preview mode first - use mock KV in browser previews
|
|
43
|
+
if (isPreviewMode()) {
|
|
44
|
+
return getMockKV();
|
|
45
|
+
}
|
|
33
46
|
let env;
|
|
34
47
|
// If no argument provided, use the configured env provider
|
|
35
48
|
if (!req) {
|
package/dist/kv/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kv/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEhF,6CAA6C;AAC7C,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC,SAAS,SAAS;IAChB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAKD;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,GAA4D;IAChF,iEAAiE;IACjE,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,GAAgC,CAAC;IAErC,2DAA2D;IAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,wEAAwE;gBACtE,gHAAgH,CACnH,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,GAAG,GAAG,cAAc,EAAqB,CAAC;IAC5C,CAAC;SAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAChB,CAAC;SAAM,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,oBAAoB;QACpB,GAAG,GAAG,GAAsB,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,GAAG,GAAI,GAAW,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QACpG,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC;IACd,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,6FAA6F,CAC9F,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrG,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC;IAEjD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElC;YACE,OAAO,CAAC,IAAI,CAAC,wBAAwB,QAAQ,kCAAkC,CAAC,CAAC;YACjF,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock KV implementation using in-memory storage
|
|
3
|
+
* Used in development/testing and browser preview environments
|
|
4
|
+
*/
|
|
5
|
+
import type { KVProvider, KVSetOptions, KVListOptions, KVListResult, KVMetadata } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* In-memory KV storage for preview/development
|
|
8
|
+
*/
|
|
9
|
+
export declare class MockKV implements KVProvider {
|
|
10
|
+
private data;
|
|
11
|
+
private prefix;
|
|
12
|
+
private debug;
|
|
13
|
+
constructor(options?: {
|
|
14
|
+
debug?: boolean;
|
|
15
|
+
});
|
|
16
|
+
private log;
|
|
17
|
+
private isExpired;
|
|
18
|
+
get(key: string): Promise<string | null>;
|
|
19
|
+
getJson<T = unknown>(key: string): Promise<T | null>;
|
|
20
|
+
put(key: string, value: string, options?: KVSetOptions): Promise<void>;
|
|
21
|
+
putJson<T = unknown>(key: string, value: T, options?: KVSetOptions): Promise<void>;
|
|
22
|
+
set(key: string, value: string, options?: KVSetOptions): Promise<void>;
|
|
23
|
+
delete(key: string): Promise<void>;
|
|
24
|
+
deleteMany(keys: string[]): Promise<void>;
|
|
25
|
+
has(key: string): Promise<boolean>;
|
|
26
|
+
list(options?: KVListOptions): Promise<KVListResult>;
|
|
27
|
+
getMetadata(key: string): Promise<KVMetadata | null>;
|
|
28
|
+
increment(key: string, amount?: number): Promise<number>;
|
|
29
|
+
decrement(key: string, amount?: number): Promise<number>;
|
|
30
|
+
clear(): void;
|
|
31
|
+
size(): number;
|
|
32
|
+
debug_dump(): Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/kv/mock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjG;;GAEG;AACH,qBAAa,MAAO,YAAW,UAAU;IACvC,OAAO,CAAC,IAAI,CAAgG;IAC5G,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;IAOzC,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,SAAS;IAIX,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBxC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAWpD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBtE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUlC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAsDpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAapD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IASnD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzD,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,MAAM;IAId,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAatC"}
|
package/dist/kv/mock.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock KV implementation using in-memory storage
|
|
3
|
+
* Used in development/testing and browser preview environments
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* In-memory KV storage for preview/development
|
|
7
|
+
*/
|
|
8
|
+
export class MockKV {
|
|
9
|
+
data = new Map();
|
|
10
|
+
prefix = '[MockKV]';
|
|
11
|
+
debug;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.debug = options?.debug ?? false;
|
|
14
|
+
if (this.debug) {
|
|
15
|
+
console.log(`${this.prefix} Initialized with in-memory storage`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
log(message, ...args) {
|
|
19
|
+
if (this.debug) {
|
|
20
|
+
console.log(`${this.prefix} ${message}`, ...args);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
isExpired(expiresAt) {
|
|
24
|
+
return expiresAt !== undefined && Date.now() > expiresAt;
|
|
25
|
+
}
|
|
26
|
+
async get(key) {
|
|
27
|
+
const stored = this.data.get(key);
|
|
28
|
+
if (!stored) {
|
|
29
|
+
this.log(`GET ${key} → null (not found)`);
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
// Check expiration
|
|
33
|
+
if (this.isExpired(stored.expiresAt)) {
|
|
34
|
+
this.log(`GET ${key} → null (expired)`);
|
|
35
|
+
this.data.delete(key);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
this.log(`GET ${key} → string`);
|
|
39
|
+
return stored.value;
|
|
40
|
+
}
|
|
41
|
+
async getJson(key) {
|
|
42
|
+
const value = await this.get(key);
|
|
43
|
+
if (value === null)
|
|
44
|
+
return null;
|
|
45
|
+
try {
|
|
46
|
+
return JSON.parse(value);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async put(key, value, options) {
|
|
53
|
+
const stored = {
|
|
54
|
+
value,
|
|
55
|
+
metadata: options?.metadata,
|
|
56
|
+
};
|
|
57
|
+
if (options?.ttl) {
|
|
58
|
+
stored.expiresAt = Date.now() + options.ttl * 1000;
|
|
59
|
+
}
|
|
60
|
+
this.data.set(key, stored);
|
|
61
|
+
const ttlInfo = options?.ttl ? ` (TTL: ${options.ttl}s)` : '';
|
|
62
|
+
this.log(`PUT ${key}${ttlInfo}`);
|
|
63
|
+
}
|
|
64
|
+
async putJson(key, value, options) {
|
|
65
|
+
const stringValue = JSON.stringify(value);
|
|
66
|
+
return this.put(key, stringValue, options);
|
|
67
|
+
}
|
|
68
|
+
async set(key, value, options) {
|
|
69
|
+
return this.put(key, value, options);
|
|
70
|
+
}
|
|
71
|
+
async delete(key) {
|
|
72
|
+
const existed = this.data.has(key);
|
|
73
|
+
this.data.delete(key);
|
|
74
|
+
this.log(`DELETE ${key} → ${existed ? 'deleted' : 'not found'}`);
|
|
75
|
+
}
|
|
76
|
+
async deleteMany(keys) {
|
|
77
|
+
for (const key of keys) {
|
|
78
|
+
this.data.delete(key);
|
|
79
|
+
}
|
|
80
|
+
this.log(`DELETE MANY ${keys.length} keys`);
|
|
81
|
+
}
|
|
82
|
+
async has(key) {
|
|
83
|
+
const stored = this.data.get(key);
|
|
84
|
+
if (!stored)
|
|
85
|
+
return false;
|
|
86
|
+
if (this.isExpired(stored.expiresAt)) {
|
|
87
|
+
this.data.delete(key);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
async list(options) {
|
|
93
|
+
const allKeys = Array.from(this.data.keys());
|
|
94
|
+
let filteredKeys = allKeys;
|
|
95
|
+
// Filter by prefix
|
|
96
|
+
if (options?.prefix) {
|
|
97
|
+
filteredKeys = allKeys.filter((key) => key.startsWith(options.prefix));
|
|
98
|
+
}
|
|
99
|
+
// Remove expired keys
|
|
100
|
+
filteredKeys = filteredKeys.filter((key) => {
|
|
101
|
+
const stored = this.data.get(key);
|
|
102
|
+
if (stored && this.isExpired(stored.expiresAt)) {
|
|
103
|
+
this.data.delete(key);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
});
|
|
108
|
+
// Cursor-based pagination
|
|
109
|
+
let startIndex = 0;
|
|
110
|
+
if (options?.cursor) {
|
|
111
|
+
const cursorIndex = parseInt(options.cursor, 10);
|
|
112
|
+
if (!isNaN(cursorIndex)) {
|
|
113
|
+
startIndex = cursorIndex;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const limit = options?.limit || 1000;
|
|
117
|
+
const endIndex = startIndex + limit;
|
|
118
|
+
const paginatedKeys = filteredKeys.slice(startIndex, endIndex);
|
|
119
|
+
const keys = paginatedKeys.map((name) => {
|
|
120
|
+
const stored = this.data.get(name);
|
|
121
|
+
return {
|
|
122
|
+
name,
|
|
123
|
+
metadata: stored?.metadata,
|
|
124
|
+
expiration: stored?.expiresAt ? Math.floor(stored.expiresAt / 1000) : undefined,
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
const complete = endIndex >= filteredKeys.length;
|
|
128
|
+
const cursor = complete ? undefined : endIndex.toString();
|
|
129
|
+
this.log(`LIST prefix:${options?.prefix || 'none'} → ${keys.length} keys`);
|
|
130
|
+
return {
|
|
131
|
+
keys,
|
|
132
|
+
complete,
|
|
133
|
+
cursor,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async getMetadata(key) {
|
|
137
|
+
const stored = this.data.get(key);
|
|
138
|
+
if (!stored)
|
|
139
|
+
return null;
|
|
140
|
+
if (this.isExpired(stored.expiresAt)) {
|
|
141
|
+
this.data.delete(key);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
expiration: stored.expiresAt ? Math.floor(stored.expiresAt / 1000) : undefined,
|
|
146
|
+
metadata: stored.metadata,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
async increment(key, amount = 1) {
|
|
150
|
+
const current = await this.get(key);
|
|
151
|
+
const currentNum = current ? parseInt(current, 10) : 0;
|
|
152
|
+
const newValue = (isNaN(currentNum) ? 0 : currentNum) + amount;
|
|
153
|
+
await this.put(key, String(newValue));
|
|
154
|
+
this.log(`INCREMENT ${key} by ${amount} → ${newValue}`);
|
|
155
|
+
return newValue;
|
|
156
|
+
}
|
|
157
|
+
async decrement(key, amount = 1) {
|
|
158
|
+
return this.increment(key, -amount);
|
|
159
|
+
}
|
|
160
|
+
// Development helpers
|
|
161
|
+
clear() {
|
|
162
|
+
const count = this.data.size;
|
|
163
|
+
this.data.clear();
|
|
164
|
+
this.log(`CLEAR → removed ${count} keys`);
|
|
165
|
+
}
|
|
166
|
+
size() {
|
|
167
|
+
return this.data.size;
|
|
168
|
+
}
|
|
169
|
+
debug_dump() {
|
|
170
|
+
const result = {};
|
|
171
|
+
for (const [key, stored] of this.data.entries()) {
|
|
172
|
+
if (!this.isExpired(stored.expiresAt)) {
|
|
173
|
+
try {
|
|
174
|
+
result[key] = JSON.parse(stored.value);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
result[key] = stored.value;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/kv/mock.ts"],"names":[],"mappings":"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"}
|