fivocell 5.4.0 → 6.0.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.
Files changed (37) hide show
  1. package/dist/__tests__/performance.test.d.ts +2 -0
  2. package/dist/__tests__/performance.test.d.ts.map +1 -0
  3. package/dist/__tests__/performance.test.js +78 -0
  4. package/dist/__tests__/performance.test.js.map +1 -0
  5. package/dist/__tests__/polish.test.d.ts +2 -0
  6. package/dist/__tests__/polish.test.d.ts.map +1 -0
  7. package/dist/__tests__/polish.test.js +95 -0
  8. package/dist/__tests__/polish.test.js.map +1 -0
  9. package/dist/walls/06-memory/database/batch-write.d.ts +15 -0
  10. package/dist/walls/06-memory/database/batch-write.d.ts.map +1 -0
  11. package/dist/walls/06-memory/database/batch-write.js +56 -0
  12. package/dist/walls/06-memory/database/batch-write.js.map +1 -0
  13. package/dist/walls/06-memory/database/database.d.ts.map +1 -1
  14. package/dist/walls/06-memory/database/database.js +13 -0
  15. package/dist/walls/06-memory/database/database.js.map +1 -1
  16. package/dist/walls/06-memory/database/migrations.d.ts +19 -0
  17. package/dist/walls/06-memory/database/migrations.d.ts.map +1 -0
  18. package/dist/walls/06-memory/database/migrations.js +78 -0
  19. package/dist/walls/06-memory/database/migrations.js.map +1 -0
  20. package/dist/walls/06-memory/database/query-cache.d.ts +13 -0
  21. package/dist/walls/06-memory/database/query-cache.d.ts.map +1 -0
  22. package/dist/walls/06-memory/database/query-cache.js +80 -0
  23. package/dist/walls/06-memory/database/query-cache.js.map +1 -0
  24. package/dist/walls/06-memory/database/validation.d.ts +12 -0
  25. package/dist/walls/06-memory/database/validation.d.ts.map +1 -0
  26. package/dist/walls/06-memory/database/validation.js +73 -0
  27. package/dist/walls/06-memory/database/validation.js.map +1 -0
  28. package/dist/walls/07-runtime/cli/cli.js +60 -0
  29. package/dist/walls/07-runtime/cli/cli.js.map +1 -1
  30. package/dist/walls/07-runtime/daemon/restart.d.ts +13 -0
  31. package/dist/walls/07-runtime/daemon/restart.d.ts.map +1 -0
  32. package/dist/walls/07-runtime/daemon/restart.js +47 -0
  33. package/dist/walls/07-runtime/daemon/restart.js.map +1 -0
  34. package/dist/walls/07-runtime/daemon/server.d.ts.map +1 -1
  35. package/dist/walls/07-runtime/daemon/server.js +27 -6
  36. package/dist/walls/07-runtime/daemon/server.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ export declare function getRestartDelay(): number;
2
+ export declare function recordRestart(): void;
3
+ export declare function resetRestartState(): void;
4
+ export declare function shouldAutoRestart(): boolean;
5
+ export declare function getRestartStatus(): {
6
+ recentRestarts: number;
7
+ maxRestarts: number;
8
+ windowMs: number;
9
+ backoffIndex: number;
10
+ currentDelay: number;
11
+ canRestart: boolean;
12
+ };
13
+ //# sourceMappingURL=restart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../../../src/walls/07-runtime/daemon/restart.ts"],"names":[],"mappings":"AAYA,wBAAgB,eAAe,IAAI,MAAM,CAYxC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAED,wBAAgB,gBAAgB,IAAI;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAWrK"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRestartDelay = getRestartDelay;
4
+ exports.recordRestart = recordRestart;
5
+ exports.resetRestartState = resetRestartState;
6
+ exports.shouldAutoRestart = shouldAutoRestart;
7
+ exports.getRestartStatus = getRestartStatus;
8
+ const BACKOFF_DELAYS = [1000, 2000, 4000, 8000, 16000, 30000];
9
+ const MAX_RESTARTS = 10;
10
+ const RESTART_WINDOW_MS = 120000;
11
+ let state = { count: 0, lastRestartAt: [], backoffIndex: 0 };
12
+ function getRestartDelay() {
13
+ const now = Date.now();
14
+ state.lastRestartAt = state.lastRestartAt.filter(t => now - t < RESTART_WINDOW_MS);
15
+ state.count = state.lastRestartAt.length;
16
+ if (state.count >= MAX_RESTARTS) {
17
+ return -1;
18
+ }
19
+ const delay = BACKOFF_DELAYS[Math.min(state.backoffIndex, BACKOFF_DELAYS.length - 1)];
20
+ state.backoffIndex++;
21
+ return delay;
22
+ }
23
+ function recordRestart() {
24
+ state.lastRestartAt.push(Date.now());
25
+ state.count++;
26
+ }
27
+ function resetRestartState() {
28
+ state = { count: 0, lastRestartAt: [], backoffIndex: 0 };
29
+ }
30
+ function shouldAutoRestart() {
31
+ const now = Date.now();
32
+ state.lastRestartAt = state.lastRestartAt.filter(t => now - t < RESTART_WINDOW_MS);
33
+ return state.lastRestartAt.length < MAX_RESTARTS;
34
+ }
35
+ function getRestartStatus() {
36
+ const now = Date.now();
37
+ state.lastRestartAt = state.lastRestartAt.filter(t => now - t < RESTART_WINDOW_MS);
38
+ return {
39
+ recentRestarts: state.lastRestartAt.length,
40
+ maxRestarts: MAX_RESTARTS,
41
+ windowMs: RESTART_WINDOW_MS,
42
+ backoffIndex: state.backoffIndex,
43
+ currentDelay: BACKOFF_DELAYS[Math.min(state.backoffIndex, BACKOFF_DELAYS.length - 1)],
44
+ canRestart: state.lastRestartAt.length < MAX_RESTARTS,
45
+ };
46
+ }
47
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../../src/walls/07-runtime/daemon/restart.ts"],"names":[],"mappings":";;AAYA,0CAYC;AAED,sCAGC;AAED,8CAEC;AAED,8CAIC;AAED,4CAWC;AApDD,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9D,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAQjC,IAAI,KAAK,GAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AAE3E,SAAgB,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC;IACnF,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;IAEzC,IAAI,KAAK,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,YAAY,EAAE,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,aAAa;IAC3B,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC;AACnD,CAAC;AAED,SAAgB,gBAAgB;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC;IACnF,OAAO;QACL,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM;QAC1C,WAAW,EAAE,YAAY;QACzB,QAAQ,EAAE,iBAAiB;QAC3B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrF,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,YAAY;KACtD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/walls/07-runtime/daemon/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA0F3D,QAAA,MAAM,GAAG,6CAAY,CAAC;AAQtB,QAAA,MAAM,OAAO;;;mBAMuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EhD,CAAC;AAm8LF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/walls/07-runtime/daemon/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA0F3D,QAAA,MAAM,GAAG,6CAAY,CAAC;AAQtB,QAAA,MAAM,OAAO;;;mBAMuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EhD,CAAC;AAk9LF,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC"}
@@ -3385,11 +3385,32 @@ server.on('close', () => {
3385
3385
  console.log('[cell] Daemon stopped.');
3386
3386
  });
3387
3387
  // Graceful shutdown
3388
- const gracefulShutdown = () => {
3389
- console.log('[cell] Daemon shutting down...');
3390
- server.close();
3391
- process.exit(0);
3388
+ const gracefulShutdown = (signal) => {
3389
+ console.log(`[cell] Daemon shutting down${signal ? ' (' + signal + ')' : ''}...`);
3390
+ try {
3391
+ const { closeDb } = require('../../06-memory/database/database');
3392
+ const { cacheClear } = require('../../06-memory/database/query-cache');
3393
+ cacheClear();
3394
+ closeDb();
3395
+ console.log('[cell] Database closed, cache flushed');
3396
+ }
3397
+ catch (e) {
3398
+ // ignore shutdown errors
3399
+ }
3400
+ try {
3401
+ const { resetRestartState } = require('./restart');
3402
+ resetRestartState();
3403
+ }
3404
+ catch { }
3405
+ server.close(() => {
3406
+ console.log('[cell] Server closed');
3407
+ process.exit(0);
3408
+ });
3409
+ setTimeout(() => {
3410
+ console.log('[cell] Forced exit');
3411
+ process.exit(1);
3412
+ }, 5000);
3392
3413
  };
3393
- process.on('SIGTERM', gracefulShutdown);
3394
- process.on('SIGINT', gracefulShutdown);
3414
+ process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
3415
+ process.on('SIGINT', () => gracefulShutdown('SIGINT'));
3395
3416
  //# sourceMappingURL=server.js.map