@objectstack/driver-memory 3.0.11 → 3.1.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/.turbo/turbo-build.log +10 -10
- package/CHANGELOG.md +8 -0
- package/dist/index.d.mts +26 -1
- package/dist/index.d.ts +26 -1
- package/dist/index.js +33 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +33 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/memory-driver.ts +51 -1
- package/src/persistence/persistence.test.ts +83 -0
|
@@ -212,4 +212,87 @@ describe('InMemoryDriver Persistence', () => {
|
|
|
212
212
|
await driver2.disconnect();
|
|
213
213
|
});
|
|
214
214
|
});
|
|
215
|
+
|
|
216
|
+
describe('Serverless Environment Detection', () => {
|
|
217
|
+
const serverlessEnvVars = [
|
|
218
|
+
'VERCEL',
|
|
219
|
+
'VERCEL_ENV',
|
|
220
|
+
'AWS_LAMBDA_FUNCTION_NAME',
|
|
221
|
+
'NETLIFY',
|
|
222
|
+
'FUNCTIONS_WORKER_RUNTIME',
|
|
223
|
+
'K_SERVICE',
|
|
224
|
+
'FUNCTION_TARGET',
|
|
225
|
+
'DENO_DEPLOYMENT_ID',
|
|
226
|
+
];
|
|
227
|
+
|
|
228
|
+
afterEach(() => {
|
|
229
|
+
// Clean up all serverless env vars after each test
|
|
230
|
+
for (const key of serverlessEnvVars) {
|
|
231
|
+
delete process.env[key];
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
it('should disable file persistence in auto mode when VERCEL env is set', async () => {
|
|
236
|
+
process.env.VERCEL = '1';
|
|
237
|
+
const filePath = path.join(TEST_DATA_DIR, 'serverless-test.json');
|
|
238
|
+
const driver = new InMemoryDriver({
|
|
239
|
+
persistence: { type: 'auto', path: filePath },
|
|
240
|
+
});
|
|
241
|
+
await driver.connect();
|
|
242
|
+
await driver.create('items', { id: '1', name: 'Widget' });
|
|
243
|
+
await driver.flush();
|
|
244
|
+
await driver.disconnect();
|
|
245
|
+
|
|
246
|
+
// File should NOT have been created because auto mode skips file persistence in serverless
|
|
247
|
+
expect(fs.existsSync(filePath)).toBe(false);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('should disable file persistence in auto shorthand mode when AWS_LAMBDA_FUNCTION_NAME is set', async () => {
|
|
251
|
+
process.env.AWS_LAMBDA_FUNCTION_NAME = 'my-function';
|
|
252
|
+
const driver = new InMemoryDriver({ persistence: 'auto' });
|
|
253
|
+
await driver.connect();
|
|
254
|
+
await driver.create('items', { id: '1', name: 'Widget' });
|
|
255
|
+
|
|
256
|
+
// Should work as pure in-memory without errors
|
|
257
|
+
const items = await driver.find('items', { object: 'items' });
|
|
258
|
+
expect(items).toHaveLength(1);
|
|
259
|
+
|
|
260
|
+
await driver.disconnect();
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it('should still allow explicit file persistence in serverless if user requests it', async () => {
|
|
264
|
+
process.env.VERCEL = '1';
|
|
265
|
+
const filePath = path.join(TEST_DATA_DIR, 'explicit-file-serverless.json');
|
|
266
|
+
const driver = new InMemoryDriver({
|
|
267
|
+
persistence: { type: 'file', path: filePath, autoSaveInterval: 100 },
|
|
268
|
+
});
|
|
269
|
+
await driver.connect();
|
|
270
|
+
await driver.create('items', { id: '1', name: 'Widget' });
|
|
271
|
+
await driver.flush();
|
|
272
|
+
await driver.disconnect();
|
|
273
|
+
|
|
274
|
+
// Explicit 'file' type should still create the file even in serverless
|
|
275
|
+
expect(fs.existsSync(filePath)).toBe(true);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('should still allow custom adapter in serverless', async () => {
|
|
279
|
+
process.env.NETLIFY = 'true';
|
|
280
|
+
const stored: Record<string, any[]> = {};
|
|
281
|
+
const customAdapter = {
|
|
282
|
+
load: async () => Object.keys(stored).length > 0 ? { ...stored } : null,
|
|
283
|
+
save: async (db: Record<string, any[]>) => {
|
|
284
|
+
for (const [k, v] of Object.entries(db)) { stored[k] = [...v]; }
|
|
285
|
+
},
|
|
286
|
+
flush: async () => {},
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
const driver = new InMemoryDriver({ persistence: { adapter: customAdapter } });
|
|
290
|
+
await driver.connect();
|
|
291
|
+
await driver.create('items', { id: '1', name: 'Widget' });
|
|
292
|
+
await driver.disconnect();
|
|
293
|
+
|
|
294
|
+
expect(stored.items).toBeDefined();
|
|
295
|
+
expect(stored.items).toHaveLength(1);
|
|
296
|
+
});
|
|
297
|
+
});
|
|
215
298
|
});
|