qnce-engine 1.3.2 → 1.4.1

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 (166) hide show
  1. package/README.md +134 -2
  2. package/dist/adapters/contracts.d.ts +1 -1
  3. package/dist/adapters/contracts.d.ts.map +1 -1
  4. package/dist/adapters/storage/MockAdapters.d.ts +89 -0
  5. package/dist/adapters/storage/MockAdapters.d.ts.map +1 -0
  6. package/dist/adapters/storage/MockAdapters.js +109 -0
  7. package/dist/adapters/storage/MockAdapters.js.map +1 -0
  8. package/dist/adapters/story/CustomJSONAdapter.d.ts +1 -1
  9. package/dist/adapters/story/CustomJSONAdapter.d.ts.map +1 -1
  10. package/dist/adapters/story/CustomJSONAdapter.js +20 -14
  11. package/dist/adapters/story/CustomJSONAdapter.js.map +1 -1
  12. package/dist/adapters/story/InkAdapter.d.ts +1 -1
  13. package/dist/adapters/story/InkAdapter.d.ts.map +1 -1
  14. package/dist/adapters/story/InkAdapter.js +7 -10
  15. package/dist/adapters/story/InkAdapter.js.map +1 -1
  16. package/dist/adapters/story/TwisonAdapter.d.ts +1 -1
  17. package/dist/adapters/story/TwisonAdapter.d.ts.map +1 -1
  18. package/dist/adapters/story/TwisonAdapter.js +2 -2
  19. package/dist/adapters/story/TwisonAdapter.js.map +1 -1
  20. package/dist/cli/audit.js +1 -0
  21. package/dist/cli/audit.js.map +1 -1
  22. package/dist/cli/import.d.ts.map +1 -1
  23. package/dist/cli/import.js +31 -20
  24. package/dist/cli/import.js.map +1 -1
  25. package/dist/cli/init.js +1 -0
  26. package/dist/cli/init.js.map +1 -1
  27. package/dist/cli/perf.d.ts.map +1 -1
  28. package/dist/cli/perf.js +30 -0
  29. package/dist/cli/perf.js.map +1 -1
  30. package/dist/cli/play.d.ts.map +1 -1
  31. package/dist/cli/play.js +90 -77
  32. package/dist/cli/play.js.map +1 -1
  33. package/dist/engine/condition.d.ts +25 -3
  34. package/dist/engine/condition.d.ts.map +1 -1
  35. package/dist/engine/condition.js +358 -64
  36. package/dist/engine/condition.js.map +1 -1
  37. package/dist/engine/core.d.ts +93 -1
  38. package/dist/engine/core.d.ts.map +1 -1
  39. package/dist/engine/core.js +405 -33
  40. package/dist/engine/core.js.map +1 -1
  41. package/dist/engine/demo-story.d.ts +1 -0
  42. package/dist/engine/demo-story.d.ts.map +1 -1
  43. package/dist/engine/demo-story.js +1 -0
  44. package/dist/engine/demo-story.js.map +1 -1
  45. package/dist/engine/error-factory.d.ts +86 -0
  46. package/dist/engine/error-factory.d.ts.map +1 -0
  47. package/dist/engine/error-factory.js +87 -0
  48. package/dist/engine/error-factory.js.map +1 -0
  49. package/dist/engine/errors.d.ts +3 -0
  50. package/dist/engine/errors.d.ts.map +1 -1
  51. package/dist/engine/errors.js +3 -0
  52. package/dist/engine/errors.js.map +1 -1
  53. package/dist/engine/validation.js +1 -1
  54. package/dist/engine/validation.js.map +1 -1
  55. package/dist/index.d.ts +20 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +29 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/integrations/react.d.ts +20 -3
  60. package/dist/integrations/react.d.ts.map +1 -1
  61. package/dist/integrations/react.js +15 -2
  62. package/dist/integrations/react.js.map +1 -1
  63. package/dist/narrative/branching/models.d.ts +1 -0
  64. package/dist/narrative/branching/models.d.ts.map +1 -1
  65. package/dist/narrative/branching/models.js.map +1 -1
  66. package/dist/performance/AdaptiveControllers.d.ts +51 -0
  67. package/dist/performance/AdaptiveControllers.d.ts.map +1 -0
  68. package/dist/performance/AdaptiveControllers.js +87 -0
  69. package/dist/performance/AdaptiveControllers.js.map +1 -0
  70. package/dist/performance/ContextPool.d.ts +1 -0
  71. package/dist/performance/ContextPool.d.ts.map +1 -0
  72. package/dist/performance/ContextPool.js +2 -0
  73. package/dist/performance/ContextPool.js.map +1 -0
  74. package/dist/performance/HotReloadDelta.d.ts +5 -0
  75. package/dist/performance/HotReloadDelta.d.ts.map +1 -1
  76. package/dist/performance/HotReloadDelta.js +18 -4
  77. package/dist/performance/HotReloadDelta.js.map +1 -1
  78. package/dist/performance/ObjectPool.d.ts.map +1 -1
  79. package/dist/performance/ObjectPool.js +4 -1
  80. package/dist/performance/ObjectPool.js.map +1 -1
  81. package/dist/performance/PerfReporter.d.ts +69 -0
  82. package/dist/performance/PerfReporter.d.ts.map +1 -1
  83. package/dist/performance/PerfReporter.js +314 -28
  84. package/dist/performance/PerfReporter.js.map +1 -1
  85. package/dist/performance/ThreadPool.d.ts +5 -0
  86. package/dist/performance/ThreadPool.d.ts.map +1 -1
  87. package/dist/performance/ThreadPool.js +33 -5
  88. package/dist/performance/ThreadPool.js.map +1 -1
  89. package/dist/persistence/StorageAdapters.d.ts.map +1 -1
  90. package/dist/persistence/StorageAdapters.js +13 -19
  91. package/dist/persistence/StorageAdapters.js.map +1 -1
  92. package/dist/qnce-engine.d.ts +2258 -0
  93. package/dist/quantum/entangler.d.ts +13 -0
  94. package/dist/quantum/entangler.d.ts.map +1 -0
  95. package/dist/quantum/entangler.js +24 -0
  96. package/dist/quantum/entangler.js.map +1 -0
  97. package/dist/quantum/flags.d.ts +24 -0
  98. package/dist/quantum/flags.d.ts.map +1 -0
  99. package/dist/quantum/flags.js +29 -0
  100. package/dist/quantum/flags.js.map +1 -0
  101. package/dist/quantum/integration.d.ts +26 -0
  102. package/dist/quantum/integration.d.ts.map +1 -0
  103. package/dist/quantum/integration.js +38 -0
  104. package/dist/quantum/integration.js.map +1 -0
  105. package/dist/quantum/measurement.d.ts +22 -0
  106. package/dist/quantum/measurement.d.ts.map +1 -0
  107. package/dist/quantum/measurement.js +44 -0
  108. package/dist/quantum/measurement.js.map +1 -0
  109. package/dist/quantum/phase.d.ts +20 -0
  110. package/dist/quantum/phase.d.ts.map +1 -0
  111. package/dist/quantum/phase.js +22 -0
  112. package/dist/quantum/phase.js.map +1 -0
  113. package/dist/quantum/types.d.ts +12 -0
  114. package/dist/quantum/types.d.ts.map +1 -0
  115. package/dist/quantum/types.js +5 -0
  116. package/dist/quantum/types.js.map +1 -0
  117. package/dist/schemas/validateStoryData.d.ts.map +1 -1
  118. package/dist/schemas/validateStoryData.js +8 -2
  119. package/dist/schemas/validateStoryData.js.map +1 -1
  120. package/dist/telemetry/core.d.ts +27 -1
  121. package/dist/telemetry/core.d.ts.map +1 -1
  122. package/dist/telemetry/core.js +63 -8
  123. package/dist/telemetry/core.js.map +1 -1
  124. package/dist/telemetry/types.d.ts +27 -0
  125. package/dist/telemetry/types.d.ts.map +1 -1
  126. package/dist/tsdoc-metadata.json +11 -0
  127. package/dist/ui/__tests__/AutosaveIndicator.test.js +10 -13
  128. package/dist/ui/__tests__/AutosaveIndicator.test.js.map +1 -1
  129. package/dist/ui/__tests__/UndoRedoControls.test.js +7 -9
  130. package/dist/ui/__tests__/UndoRedoControls.test.js.map +1 -1
  131. package/dist/ui/components/AutosaveIndicator.d.ts +1 -0
  132. package/dist/ui/components/AutosaveIndicator.d.ts.map +1 -1
  133. package/dist/ui/components/AutosaveIndicator.js +2 -1
  134. package/dist/ui/components/AutosaveIndicator.js.map +1 -1
  135. package/dist/ui/components/UndoRedoControls.d.ts +1 -0
  136. package/dist/ui/components/UndoRedoControls.d.ts.map +1 -1
  137. package/dist/ui/components/UndoRedoControls.js +1 -0
  138. package/dist/ui/components/UndoRedoControls.js.map +1 -1
  139. package/dist/ui/hooks/useKeyboardShortcuts.d.ts +1 -0
  140. package/dist/ui/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  141. package/dist/ui/hooks/useKeyboardShortcuts.js +17 -5
  142. package/dist/ui/hooks/useKeyboardShortcuts.js.map +1 -1
  143. package/dist/ui/types.d.ts +6 -0
  144. package/dist/ui/types.d.ts.map +1 -1
  145. package/dist/ui/types.js +1 -0
  146. package/dist/ui/types.js.map +1 -1
  147. package/dist/utils/debug-logger.d.ts +20 -0
  148. package/dist/utils/debug-logger.d.ts.map +1 -0
  149. package/dist/utils/debug-logger.js +24 -0
  150. package/dist/utils/debug-logger.js.map +1 -0
  151. package/dist/utils/hot-profiler.d.ts +21 -0
  152. package/dist/utils/hot-profiler.d.ts.map +1 -0
  153. package/dist/utils/hot-profiler.js +36 -0
  154. package/dist/utils/hot-profiler.js.map +1 -0
  155. package/dist/utils/intern.d.ts +11 -0
  156. package/dist/utils/intern.d.ts.map +1 -0
  157. package/dist/utils/intern.js +45 -0
  158. package/dist/utils/intern.js.map +1 -0
  159. package/dist/utils/logger.d.ts +34 -0
  160. package/dist/utils/logger.d.ts.map +1 -0
  161. package/dist/utils/logger.js +115 -0
  162. package/dist/utils/logger.js.map +1 -0
  163. package/docs/PERFORMANCE.md +330 -0
  164. package/examples/fluent-builder-prototype.ts +71 -0
  165. package/examples/quantum-integration-demo.ts +51 -0
  166. package/package.json +25 -9
@@ -0,0 +1,20 @@
1
+ /** Lightweight ring-buffer debug logger (opt-in at runtime). */
2
+ export interface DebugLogEntry {
3
+ ts: number;
4
+ level: 'debug';
5
+ event: string;
6
+ data?: Record<string, unknown>;
7
+ }
8
+ export declare class DebugLogger {
9
+ private enabled;
10
+ private buffer;
11
+ private capacity;
12
+ constructor(capacity?: number);
13
+ setEnabled(v: boolean): void;
14
+ isEnabled(): boolean;
15
+ log(event: string, data?: Record<string, unknown>): void;
16
+ flush(): DebugLogEntry[];
17
+ clear(): void;
18
+ }
19
+ export declare const globalDebugLogger: DebugLogger;
20
+ //# sourceMappingURL=debug-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-logger.d.ts","sourceRoot":"","sources":["../../src/utils/debug-logger.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,SAAM;IAE1B,UAAU,CAAC,CAAC,EAAE,OAAO;IACrB,SAAS;IAET,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOjD,KAAK,IAAI,aAAa,EAAE;IACxB,KAAK;CACN;AAED,eAAO,MAAM,iBAAiB,aAAoB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.globalDebugLogger = exports.DebugLogger = void 0;
4
+ class DebugLogger {
5
+ enabled = false;
6
+ buffer = [];
7
+ capacity;
8
+ constructor(capacity = 200) { this.capacity = capacity; }
9
+ setEnabled(v) { this.enabled = v; }
10
+ isEnabled() { return this.enabled; }
11
+ log(event, data) {
12
+ if (!this.enabled)
13
+ return;
14
+ const entry = { ts: Date.now(), level: 'debug', event, data };
15
+ if (this.buffer.length >= this.capacity)
16
+ this.buffer.shift();
17
+ this.buffer.push(entry);
18
+ }
19
+ flush() { return [...this.buffer]; }
20
+ clear() { this.buffer = []; }
21
+ }
22
+ exports.DebugLogger = DebugLogger;
23
+ exports.globalDebugLogger = new DebugLogger();
24
+ //# sourceMappingURL=debug-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-logger.js","sourceRoot":"","sources":["../../src/utils/debug-logger.ts"],"names":[],"mappings":";;;AAQA,MAAa,WAAW;IACd,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAoB,EAAE,CAAC;IAC7B,QAAQ,CAAS;IAEzB,YAAY,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;IAEzD,UAAU,CAAC,CAAU,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5C,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpC,GAAG,CAAC,KAAa,EAAE,IAA8B;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAkB,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,KAAsB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrD,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;CAC9B;AAnBD,kCAmBC;AAEY,QAAA,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /** Simple aggregated hot-path profiler for micro-sections. */
2
+ export interface HotSample {
3
+ count: number;
4
+ totalMs: number;
5
+ maxMs: number;
6
+ }
7
+ export declare class HotProfiler {
8
+ private map;
9
+ private enabled;
10
+ enable(v?: boolean): void;
11
+ isEnabled(): boolean;
12
+ wrap<T>(label: string, fn: () => T): T;
13
+ summary(): Record<string, {
14
+ count: number;
15
+ avgMs: number;
16
+ maxMs: number;
17
+ }>;
18
+ reset(): void;
19
+ }
20
+ export declare const globalHotProfiler: HotProfiler;
21
+ //# sourceMappingURL=hot-profiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hot-profiler.d.ts","sourceRoot":"","sources":["../../src/utils/hot-profiler.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE;AAE7E,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,OAAO,CAAS;IACxB,MAAM,CAAC,CAAC,UAAO;IACf,SAAS;IACT,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAStC,OAAO;eAC8B,MAAM;eAAS,MAAM;eAAS,MAAM;;IAIzE,KAAK;CACN;AAED,eAAO,MAAM,iBAAiB,aAAoB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.globalHotProfiler = exports.HotProfiler = void 0;
4
+ class HotProfiler {
5
+ map = new Map();
6
+ enabled = false;
7
+ enable(v = true) { this.enabled = v; }
8
+ isEnabled() { return this.enabled; }
9
+ wrap(label, fn) {
10
+ if (!this.enabled)
11
+ return fn();
12
+ const t0 = performance.now();
13
+ try {
14
+ return fn();
15
+ }
16
+ finally {
17
+ const ms = performance.now() - t0;
18
+ const s = this.map.get(label) || { count: 0, totalMs: 0, maxMs: 0 };
19
+ s.count++;
20
+ s.totalMs += ms;
21
+ if (ms > s.maxMs)
22
+ s.maxMs = ms;
23
+ this.map.set(label, s);
24
+ }
25
+ }
26
+ summary() {
27
+ const out = {};
28
+ for (const [k, v] of this.map)
29
+ out[k] = { count: v.count, avgMs: v.totalMs / v.count, maxMs: v.maxMs };
30
+ return out;
31
+ }
32
+ reset() { this.map.clear(); }
33
+ }
34
+ exports.HotProfiler = HotProfiler;
35
+ exports.globalHotProfiler = new HotProfiler();
36
+ //# sourceMappingURL=hot-profiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hot-profiler.js","sourceRoot":"","sources":["../../src/utils/hot-profiler.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IACd,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACnC,OAAO,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,IAAI,CAAI,KAAa,EAAE,EAAW;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;QAAC,CAAC;gBAAS,CAAC;YAC5B,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACpE,CAAC,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK;gBAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO;QACL,MAAM,GAAG,GAAoE,EAAE,CAAC;QAChF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACvG,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC9B;AApBD,kCAoBC;AAEY,QAAA,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Intern a short string. Returns a canonical instance from a small pool.
3
+ * Non-string or long strings are returned as-is.
4
+ * @internal
5
+ */
6
+ export declare function internString<T = unknown>(value: T): T;
7
+ /** Intern all string keys and string values in an object (shallow).
8
+ * @internal
9
+ */
10
+ export declare function internShallowRecord(obj: Record<string, unknown> | undefined | null): Record<string, unknown> | undefined;
11
+ //# sourceMappingURL=intern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intern.d.ts","sourceRoot":"","sources":["../../src/utils/intern.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAcrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CASxH"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ // Lightweight string interning utility to reduce duplicate string allocations
3
+ // Intended for short, frequently repeated keys/values on hot paths
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.internString = internString;
6
+ exports.internShallowRecord = internShallowRecord;
7
+ const MAX_ENTRIES = 1024; // soft cap to avoid unbounded growth
8
+ const pool = new Map();
9
+ /**
10
+ * Intern a short string. Returns a canonical instance from a small pool.
11
+ * Non-string or long strings are returned as-is.
12
+ * @internal
13
+ */
14
+ function internString(value) {
15
+ if (typeof value !== 'string')
16
+ return value;
17
+ if (value.length > 64)
18
+ return value;
19
+ const existing = pool.get(value);
20
+ if (existing)
21
+ return existing;
22
+ // Evict oldest when exceeding cap (Map preserves insertion order)
23
+ if (pool.size >= MAX_ENTRIES) {
24
+ const firstKey = pool.keys().next().value;
25
+ if (firstKey !== undefined)
26
+ pool.delete(firstKey);
27
+ }
28
+ pool.set(value, value);
29
+ return value;
30
+ }
31
+ /** Intern all string keys and string values in an object (shallow).
32
+ * @internal
33
+ */
34
+ function internShallowRecord(obj) {
35
+ if (!obj)
36
+ return obj;
37
+ const out = {};
38
+ for (const k of Object.keys(obj)) {
39
+ const ik = internString(k);
40
+ const v = obj[k];
41
+ out[ik] = typeof v === 'string' ? internString(v) : v;
42
+ }
43
+ return out;
44
+ }
45
+ //# sourceMappingURL=intern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intern.js","sourceRoot":"","sources":["../../src/utils/intern.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,mEAAmE;;AAWnE,oCAcC;AAKD,kDASC;AArCD,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,qCAAqC;AAE/D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEvC;;;;GAIG;AACH,SAAgB,YAAY,CAAc,KAAQ;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAqB,CAAC;IAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,QAAQ;QAAE,OAAO,QAAwB,CAAC;IAE9C,kEAAkE;IAClE,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvB,OAAO,KAAqB,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,GAA+C;IACjF,IAAI,CAAC,GAAG;QAAE,OAAO,GAA2B,CAAC;IAC7C,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAI,GAA+B,CAAC,CAAC,CAAC,CAAC;QAC9C,GAAG,CAAC,EAAY,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,34 @@
1
+ /** Lightweight logger with level filtering and pluggable sink (no external deps). */
2
+ export type LogLevelName = 'silent' | 'error' | 'warn' | 'info' | 'success' | 'debug';
3
+ export interface LogEntry {
4
+ level: LogLevelName;
5
+ message: string;
6
+ ts: number;
7
+ }
8
+ export interface LoggerSink {
9
+ write(entry: LogEntry): void;
10
+ }
11
+ export interface CreateLoggerOptions {
12
+ level?: LogLevelName;
13
+ sink?: LoggerSink;
14
+ useColor?: boolean;
15
+ }
16
+ export interface Logger {
17
+ level: LogLevelName;
18
+ setLevel(lvl: LogLevelName): void;
19
+ error(msg: string): void;
20
+ warn(msg: string): void;
21
+ info(msg: string): void;
22
+ success(msg: string): void;
23
+ debug(msg: string): void;
24
+ child(pfx: string): Logger;
25
+ }
26
+ /** Serialize arbitrary values safely for log messages (avoids generic [object Object]). */
27
+ export declare function formatLog(value: unknown, depth?: number, seen?: WeakSet<object>): string;
28
+ export declare function createLogger(opts?: CreateLoggerOptions): Logger;
29
+ /** Helper to derive level from flags */
30
+ export declare function deriveLogLevel(flags: {
31
+ quiet?: boolean;
32
+ verbose?: boolean;
33
+ }): LogLevelName;
34
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAWtF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC9B;AAiCD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,EAAE,IAAI,kBAAwB,GAAG,MAAM,CAsBzF;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,MAAM,CAoBnE;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CAI1F"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatLog = formatLog;
4
+ exports.createLogger = createLogger;
5
+ exports.deriveLogLevel = deriveLogLevel;
6
+ const LEVEL_ORDER = {
7
+ silent: 100, // suppress all
8
+ error: 50,
9
+ warn: 40,
10
+ info: 30,
11
+ success: 30, // treat success same visibility as info
12
+ debug: 10
13
+ };
14
+ class ConsoleSink {
15
+ useColor;
16
+ constructor(useColor) {
17
+ this.useColor = useColor;
18
+ }
19
+ write(entry) {
20
+ const { level, message } = entry;
21
+ const color = this.colorFor(level);
22
+ const prefix = this.prefixFor(level);
23
+ // Use process.stdout / stderr directly to avoid triggering no-console
24
+ const out = (level === 'error' ? process.stderr : process.stdout);
25
+ out.write(`${color}${prefix}${message}${this.useColor ? '\u001b[0m' : ''}\n`);
26
+ }
27
+ colorFor(level) {
28
+ if (!this.useColor)
29
+ return '';
30
+ switch (level) {
31
+ case 'error': return '\u001b[31m'; // red
32
+ case 'warn': return '\u001b[33m'; // yellow
33
+ case 'success': return '\u001b[32m'; // green
34
+ case 'debug': return '\u001b[90m'; // gray
35
+ default: return '\u001b[36m'; // cyan/info
36
+ }
37
+ }
38
+ prefixFor(level) {
39
+ switch (level) {
40
+ case 'error': return '❌ ';
41
+ case 'warn': return '⚠️ ';
42
+ case 'success': return '✅ ';
43
+ case 'debug': return '🔍 ';
44
+ default: return '';
45
+ }
46
+ }
47
+ }
48
+ /** Serialize arbitrary values safely for log messages (avoids generic [object Object]). */
49
+ function formatLog(value, depth = 0, seen = new WeakSet()) {
50
+ if (typeof value === 'string')
51
+ return value;
52
+ if (value instanceof Error)
53
+ return value.stack || value.message;
54
+ const t = typeof value;
55
+ if (value == null || t === 'number' || t === 'boolean')
56
+ return String(value);
57
+ if (t === 'function')
58
+ return `[Function ${value.name || 'anonymous'}]`;
59
+ if (t === 'symbol')
60
+ return value.toString();
61
+ if (Array.isArray(value)) {
62
+ if (depth > 2)
63
+ return `[Array(${value.length})]`;
64
+ return '[' + value.map(v => formatLog(v, depth + 1, seen)).join(', ') + ']';
65
+ }
66
+ if (t === 'object') {
67
+ if (seen.has(value))
68
+ return '[Circular]';
69
+ seen.add(value);
70
+ if (depth > 2)
71
+ return '{…}';
72
+ const entries = Object.entries(value)
73
+ .slice(0, 25)
74
+ .map(([k, v]) => `${k}: ${formatLog(v, depth + 1, seen)}`);
75
+ const truncated = Object.keys(value).length > 25 ? ' …' : '';
76
+ return '{ ' + entries.join(', ') + truncated + ' }';
77
+ }
78
+ try {
79
+ return JSON.stringify(value);
80
+ }
81
+ catch {
82
+ return String(value);
83
+ }
84
+ }
85
+ function createLogger(opts = {}) {
86
+ const sink = opts.sink || new ConsoleSink(opts.useColor ?? process.stdout.isTTY);
87
+ let level = opts.level || 'info';
88
+ const basePrefix = '';
89
+ function emit(l, msg) {
90
+ // lower numeric = more verbose; allow if candidate order >= current level order
91
+ if (LEVEL_ORDER[l] < LEVEL_ORDER[level])
92
+ return; // require candidate >= threshold
93
+ sink.write({ level: l, message: basePrefix + formatLog(msg), ts: Date.now() });
94
+ }
95
+ const logger = {
96
+ get level() { return level; },
97
+ setLevel(lvl) { level = lvl; },
98
+ error(msg) { emit('error', msg); },
99
+ warn(msg) { emit('warn', msg); },
100
+ info(msg) { emit('info', msg); },
101
+ success(msg) { emit('success', msg); },
102
+ debug(msg) { emit('debug', msg); },
103
+ child() { return createLogger({ level, sink, useColor: (opts.useColor ?? process.stdout.isTTY) }); }
104
+ };
105
+ return logger;
106
+ }
107
+ /** Helper to derive level from flags */
108
+ function deriveLogLevel(flags) {
109
+ if (flags.quiet)
110
+ return 'warn';
111
+ if (flags.verbose)
112
+ return 'debug';
113
+ return 'info';
114
+ }
115
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}