qnce-engine 1.3.1 → 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 (168) hide show
  1. package/README.md +136 -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 +56 -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 +135 -60
  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 +109 -3
  38. package/dist/engine/core.d.ts.map +1 -1
  39. package/dist/engine/core.js +486 -36
  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 +22 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +34 -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 +88 -0
  121. package/dist/telemetry/core.d.ts.map +1 -0
  122. package/dist/telemetry/core.js +303 -0
  123. package/dist/telemetry/core.js.map +1 -0
  124. package/dist/telemetry/types.d.ts +76 -0
  125. package/dist/telemetry/types.d.ts.map +1 -0
  126. package/dist/telemetry/types.js +4 -0
  127. package/dist/telemetry/types.js.map +1 -0
  128. package/dist/tsdoc-metadata.json +11 -0
  129. package/dist/ui/__tests__/AutosaveIndicator.test.js +10 -13
  130. package/dist/ui/__tests__/AutosaveIndicator.test.js.map +1 -1
  131. package/dist/ui/__tests__/UndoRedoControls.test.js +7 -9
  132. package/dist/ui/__tests__/UndoRedoControls.test.js.map +1 -1
  133. package/dist/ui/components/AutosaveIndicator.d.ts +1 -0
  134. package/dist/ui/components/AutosaveIndicator.d.ts.map +1 -1
  135. package/dist/ui/components/AutosaveIndicator.js +2 -1
  136. package/dist/ui/components/AutosaveIndicator.js.map +1 -1
  137. package/dist/ui/components/UndoRedoControls.d.ts +1 -0
  138. package/dist/ui/components/UndoRedoControls.d.ts.map +1 -1
  139. package/dist/ui/components/UndoRedoControls.js +1 -0
  140. package/dist/ui/components/UndoRedoControls.js.map +1 -1
  141. package/dist/ui/hooks/useKeyboardShortcuts.d.ts +1 -0
  142. package/dist/ui/hooks/useKeyboardShortcuts.d.ts.map +1 -1
  143. package/dist/ui/hooks/useKeyboardShortcuts.js +17 -5
  144. package/dist/ui/hooks/useKeyboardShortcuts.js.map +1 -1
  145. package/dist/ui/types.d.ts +6 -0
  146. package/dist/ui/types.d.ts.map +1 -1
  147. package/dist/ui/types.js +1 -0
  148. package/dist/ui/types.js.map +1 -1
  149. package/dist/utils/debug-logger.d.ts +20 -0
  150. package/dist/utils/debug-logger.d.ts.map +1 -0
  151. package/dist/utils/debug-logger.js +24 -0
  152. package/dist/utils/debug-logger.js.map +1 -0
  153. package/dist/utils/hot-profiler.d.ts +21 -0
  154. package/dist/utils/hot-profiler.d.ts.map +1 -0
  155. package/dist/utils/hot-profiler.js +36 -0
  156. package/dist/utils/hot-profiler.js.map +1 -0
  157. package/dist/utils/intern.d.ts +11 -0
  158. package/dist/utils/intern.d.ts.map +1 -0
  159. package/dist/utils/intern.js +45 -0
  160. package/dist/utils/intern.js.map +1 -0
  161. package/dist/utils/logger.d.ts +34 -0
  162. package/dist/utils/logger.d.ts.map +1 -0
  163. package/dist/utils/logger.js +115 -0
  164. package/dist/utils/logger.js.map +1 -0
  165. package/docs/PERFORMANCE.md +330 -0
  166. package/examples/fluent-builder-prototype.ts +71 -0
  167. package/examples/quantum-integration-demo.ts +51 -0
  168. package/package.json +25 -9
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Entangler primitive for declarative variable binding
3
+ * @beta
4
+ * @experimental
5
+ */
6
+ export type TransformFn = (value: unknown) => unknown;
7
+ /** @beta @experimental */
8
+ export declare class Entangler<TKey extends string = string> {
9
+ private bindings;
10
+ bind(from: TKey, to: TKey, transform?: TransformFn): this;
11
+ apply(flags: Record<string, unknown>): void;
12
+ }
13
+ //# sourceMappingURL=entangler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entangler.d.ts","sourceRoot":"","sources":["../../src/quantum/entangler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAEtD,0BAA0B;AAC1B,qBAAa,SAAS,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACjD,OAAO,CAAC,QAAQ,CAAgE;IAEhF,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,WAAW;IAKlD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMrC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * Entangler primitive for declarative variable binding
4
+ * @beta
5
+ * @experimental
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.Entangler = void 0;
9
+ /** @beta @experimental */
10
+ class Entangler {
11
+ bindings = [];
12
+ bind(from, to, transform) {
13
+ this.bindings.push({ from, to, transform });
14
+ return this;
15
+ }
16
+ apply(flags) {
17
+ for (const b of this.bindings) {
18
+ const v = flags[b.from];
19
+ flags[b.to] = b.transform ? b.transform(v) : v;
20
+ }
21
+ }
22
+ }
23
+ exports.Entangler = Entangler;
24
+ //# sourceMappingURL=entangler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entangler.js","sourceRoot":"","sources":["../../src/quantum/entangler.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAIH,0BAA0B;AAC1B,MAAa,SAAS;IACZ,QAAQ,GAA6D,EAAE,CAAC;IAEhF,IAAI,CAAC,IAAU,EAAE,EAAQ,EAAE,SAAuB;QAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAA8B;QAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC;YAClC,KAAK,CAAC,CAAC,CAAC,EAAY,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAdD,8BAcC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Feature flags utility to gate experimental behavior
3
+ * @beta
4
+ * @experimental
5
+ */
6
+ /**
7
+ * @beta
8
+ * @experimental
9
+ */
10
+ export type FeatureFlagsConfig = {
11
+ [flag: string]: boolean;
12
+ };
13
+ /** @beta @experimental */
14
+ export declare class FeatureFlags {
15
+ private flags;
16
+ constructor(initial?: FeatureFlagsConfig);
17
+ enable(flag: string): void;
18
+ disable(flag: string): void;
19
+ isEnabled(flag: string): boolean;
20
+ getAll(): {
21
+ [x: string]: boolean;
22
+ };
23
+ }
24
+ //# sourceMappingURL=flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/quantum/flags.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB,CAAC;AAEF,0BAA0B;AAC1B,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqB;gBAEtB,OAAO,CAAC,EAAE,kBAAkB;IAIxC,MAAM,CAAC,IAAI,EAAE,MAAM;IAInB,OAAO,CAAC,IAAI,EAAE,MAAM;IAIpB,SAAS,CAAC,IAAI,EAAE,MAAM;IAItB,MAAM;;;CAGP"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * Feature flags utility to gate experimental behavior
4
+ * @beta
5
+ * @experimental
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.FeatureFlags = void 0;
9
+ /** @beta @experimental */
10
+ class FeatureFlags {
11
+ flags;
12
+ constructor(initial) {
13
+ this.flags = { ...(initial || {}) };
14
+ }
15
+ enable(flag) {
16
+ this.flags[flag] = true;
17
+ }
18
+ disable(flag) {
19
+ this.flags[flag] = false;
20
+ }
21
+ isEnabled(flag) {
22
+ return !!this.flags[flag];
23
+ }
24
+ getAll() {
25
+ return { ...this.flags };
26
+ }
27
+ }
28
+ exports.FeatureFlags = FeatureFlags;
29
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/quantum/flags.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAUH,0BAA0B;AAC1B,MAAa,YAAY;IACf,KAAK,CAAqB;IAElC,YAAY,OAA4B;QACtC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF;AAtBD,oCAsBC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Optional integration helpers for quantum primitives behind feature flags
3
+ * @beta
4
+ * @experimental
5
+ */
6
+ import type { QNCEEngine } from '../engine/core.js';
7
+ import { Phase } from './phase.js';
8
+ import { Entangler } from './entangler.js';
9
+ import { FeatureFlags, type FeatureFlagsConfig } from './flags.js';
10
+ /** @beta @experimental */
11
+ export type QuantumIntegration = {
12
+ isPhaseActive: (phase: Phase, ctx?: {
13
+ nodeId?: string;
14
+ }) => boolean;
15
+ entangle: (configure: (e: Entangler) => Entangler) => void;
16
+ detach: () => void;
17
+ flags: FeatureFlags;
18
+ };
19
+ /**
20
+ * Attach optional quantum helpers to an engine instance. No-ops unless the corresponding
21
+ * feature flags are enabled. This does not mutate engine behavior; it only provides
22
+ * opt-in utilities that operate against engine.flags.
23
+ */
24
+ /** @beta @experimental */
25
+ export declare function attachQuantumFeatures(engine: Pick<QNCEEngine, 'flags'>, flagsConfig?: FeatureFlags | FeatureFlagsConfig): QuantumIntegration;
26
+ //# sourceMappingURL=integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../src/quantum/integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEnE,0BAA0B;AAC1B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IACpE,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC;IAC3D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,0BAA0B;AAC1B,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EACjC,WAAW,CAAC,EAAE,YAAY,GAAG,kBAAkB,GAC9C,kBAAkB,CAoBpB"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ /**
3
+ * Optional integration helpers for quantum primitives behind feature flags
4
+ * @beta
5
+ * @experimental
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.attachQuantumFeatures = attachQuantumFeatures;
9
+ const entangler_js_1 = require("./entangler.js");
10
+ const flags_js_1 = require("./flags.js");
11
+ /**
12
+ * Attach optional quantum helpers to an engine instance. No-ops unless the corresponding
13
+ * feature flags are enabled. This does not mutate engine behavior; it only provides
14
+ * opt-in utilities that operate against engine.flags.
15
+ */
16
+ /** @beta @experimental */
17
+ function attachQuantumFeatures(engine, flagsConfig) {
18
+ const flags = flagsConfig instanceof flags_js_1.FeatureFlags ? flagsConfig : new flags_js_1.FeatureFlags(flagsConfig);
19
+ const isOn = (key) => flags.isEnabled(key);
20
+ return {
21
+ flags,
22
+ isPhaseActive: (phase, ctx) => {
23
+ if (!isOn('quantum.phases'))
24
+ return false;
25
+ return phase.isActive({ flags: engine.flags, nodeId: ctx?.nodeId });
26
+ },
27
+ entangle: (configure) => {
28
+ if (!isOn('quantum.entanglement'))
29
+ return; // no-op when disabled
30
+ const e = new entangler_js_1.Entangler();
31
+ configure(e).apply(engine.flags);
32
+ },
33
+ detach: () => {
34
+ // currently stateless; reserved for future wiring
35
+ }
36
+ };
37
+ }
38
+ //# sourceMappingURL=integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.js","sourceRoot":"","sources":["../../src/quantum/integration.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAqBH,sDAuBC;AAxCD,iDAA2C;AAC3C,yCAAmE;AAUnE;;;;GAIG;AACH,0BAA0B;AAC1B,SAAgB,qBAAqB,CACnC,MAAiC,EACjC,WAA+C;IAE/C,MAAM,KAAK,GAAG,WAAW,YAAY,uBAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,uBAAY,CAAC,WAAW,CAAC,CAAC;IAEhG,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEnD,OAAO;QACL,KAAK;QACL,aAAa,EAAE,CAAC,KAAY,EAAE,GAAyB,EAAE,EAAE;YACzD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,QAAQ,EAAE,CAAC,SAAsC,EAAE,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBAAE,OAAO,CAAC,sBAAsB;YACjE,MAAM,CAAC,GAAG,IAAI,wBAAS,EAAE,CAAC;YAC1B,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,kDAAkD;QACpD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** @beta @experimental */
2
+ export type MeasurementContext = {
3
+ flags: Record<string, unknown>;
4
+ nodeId?: string;
5
+ };
6
+ /** @beta @experimental */
7
+ export type Sampler = (ctx: MeasurementContext) => boolean | number;
8
+ /** @beta @experimental */
9
+ export declare class Measurement {
10
+ readonly name: string;
11
+ private sampler?;
12
+ private trials;
13
+ private successes;
14
+ constructor(name: string, sampler?: Sampler);
15
+ sample(ctx?: MeasurementContext): boolean;
16
+ getStats(): {
17
+ trials: number;
18
+ successes: number;
19
+ rate: number;
20
+ };
21
+ }
22
+ //# sourceMappingURL=measurement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurement.d.ts","sourceRoot":"","sources":["../../src/quantum/measurement.ts"],"names":[],"mappings":"AAGA,0BAA0B;AAC1B,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,0BAA0B;AAC1B,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,GAAG,MAAM,CAAC;AAEpE,0BAA0B;AAC1B,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAK;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAK3C,MAAM,CAAC,GAAG,GAAE,kBAAkC,GAAG,OAAO;IAmBxD,QAAQ;;;;;CAKT"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ // Experimental Measurement primitive
3
+ // Allows sampling outcomes (boolean or probabilistic) and tracking rates.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.Measurement = void 0;
6
+ /** @beta @experimental */
7
+ class Measurement {
8
+ name;
9
+ sampler;
10
+ trials = 0;
11
+ successes = 0;
12
+ constructor(name, sampler) {
13
+ this.name = name;
14
+ this.sampler = sampler;
15
+ }
16
+ sample(ctx = { flags: {} }) {
17
+ let result;
18
+ if (this.sampler) {
19
+ const out = this.sampler(ctx);
20
+ if (typeof out === 'number') {
21
+ const p = Math.max(0, Math.min(1, out));
22
+ result = Math.random() < p;
23
+ }
24
+ else {
25
+ result = !!out;
26
+ }
27
+ }
28
+ else {
29
+ // default fair coin
30
+ result = Math.random() < 0.5;
31
+ }
32
+ this.trials++;
33
+ if (result)
34
+ this.successes++;
35
+ return result;
36
+ }
37
+ getStats() {
38
+ const { trials, successes } = this;
39
+ const rate = trials > 0 ? successes / trials : 0;
40
+ return { trials, successes, rate };
41
+ }
42
+ }
43
+ exports.Measurement = Measurement;
44
+ //# sourceMappingURL=measurement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurement.js","sourceRoot":"","sources":["../../src/quantum/measurement.ts"],"names":[],"mappings":";AAAA,qCAAqC;AACrC,0EAA0E;;;AAQ1E,0BAA0B;AAC1B,MAAa,WAAW;IACb,IAAI,CAAS;IACd,OAAO,CAAW;IAClB,MAAM,GAAG,CAAC,CAAC;IACX,SAAS,GAAG,CAAC,CAAC;IAEtB,YAAY,IAAY,EAAE,OAAiB;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,MAA0B,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C,IAAI,MAAe,CAAC;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACxC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;YACjB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,MAAM;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,QAAQ;QACN,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;CACF;AAnCD,kCAmCC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Phase primitive representing a labeled coexistence region
3
+ * @beta
4
+ * @experimental
5
+ */
6
+ /** @beta @experimental */
7
+ export interface PhaseContext {
8
+ flags: Record<string, unknown>;
9
+ nodeId?: string;
10
+ }
11
+ /** @beta @experimental */
12
+ export type PhasePredicate = (ctx: PhaseContext) => boolean;
13
+ /** @beta @experimental */
14
+ export declare class Phase {
15
+ readonly name: string;
16
+ when?: PhasePredicate | undefined;
17
+ constructor(name: string, when?: PhasePredicate | undefined);
18
+ isActive(ctx: PhaseContext): boolean;
19
+ }
20
+ //# sourceMappingURL=phase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../../src/quantum/phase.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;AAE5D,0BAA0B;AAC1B,qBAAa,KAAK;aACY,IAAI,EAAE,MAAM;IAAS,IAAI,CAAC,EAAE,cAAc;gBAA1C,IAAI,EAAE,MAAM,EAAS,IAAI,CAAC,EAAE,cAAc,YAAA;IACtE,QAAQ,CAAC,GAAG,EAAE,YAAY;CAG3B"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Phase primitive representing a labeled coexistence region
4
+ * @beta
5
+ * @experimental
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.Phase = void 0;
9
+ /** @beta @experimental */
10
+ class Phase {
11
+ name;
12
+ when;
13
+ constructor(name, when) {
14
+ this.name = name;
15
+ this.when = when;
16
+ }
17
+ isActive(ctx) {
18
+ return !this.when || this.when(ctx);
19
+ }
20
+ }
21
+ exports.Phase = Phase;
22
+ //# sourceMappingURL=phase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase.js","sourceRoot":"","sources":["../../src/quantum/phase.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAWH,0BAA0B;AAC1B,MAAa,KAAK;IACY;IAAqB;IAAjD,YAA4B,IAAY,EAAS,IAAqB;QAA1C,SAAI,GAAJ,IAAI,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IAC1E,QAAQ,CAAC,GAAiB;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF;AALD,sBAKC"}
@@ -0,0 +1,12 @@
1
+ /** @beta @experimental */
2
+ export type FeatureFlagKey = string;
3
+ /** @beta @experimental */
4
+ export type EntangleTransform = (value: unknown) => unknown;
5
+ /** @beta @experimental */
6
+ export interface PhasePredicateContext {
7
+ flags: Record<string, unknown>;
8
+ nodeId?: string;
9
+ }
10
+ /** @beta @experimental */
11
+ export type PhasePredicate = (ctx: PhasePredicateContext) => boolean;
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/quantum/types.ts"],"names":[],"mappings":"AAGA,0BAA0B;AAC1B,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,0BAA0B;AAC1B,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAE5D,0BAA0B;AAC1B,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,qBAAqB,KAAK,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // Experimental helper types for quantum primitives
3
+ // These are opt-in and may change.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/quantum/types.ts"],"names":[],"mappings":";AAAA,mDAAmD;AACnD,mCAAmC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateStoryData.d.ts","sourceRoot":"","sources":["../../src/schemas/validateStoryData.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAGnE"}
1
+ {"version":3,"file":"validateStoryData.d.ts","sourceRoot":"","sources":["../../src/schemas/validateStoryData.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,WAAW,EAAyC,MAAM,KAAK,CAAC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAUhD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAInE"}
@@ -8,9 +8,15 @@ exports.validateStoryData = validateStoryData;
8
8
  const ajv_1 = __importDefault(require("ajv"));
9
9
  const story_data_schema_json_1 = __importDefault(require("./story-data.schema.json"));
10
10
  const ajv = new ajv_1.default({ allErrors: true });
11
- const validateFn = ajv.compile(story_data_schema_json_1.default);
11
+ const _validateFn = ajv.compile(story_data_schema_json_1.default);
12
+ const validateFn = ((data) => _validateFn(data));
13
+ // Attach errors getter compatibility
14
+ Object.defineProperty(validateFn, 'errors', {
15
+ get: () => _validateFn.errors,
16
+ });
12
17
  function validateStoryData(data) {
13
18
  const valid = validateFn(data);
14
- return { valid, errors: valid ? undefined : (validateFn.errors || undefined) };
19
+ const errs = validateFn.errors;
20
+ return { valid, errors: valid ? undefined : (errs || undefined) };
15
21
  }
16
22
  //# sourceMappingURL=validateStoryData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateStoryData.js","sourceRoot":"","sources":["../../src/schemas/validateStoryData.ts"],"names":[],"mappings":";;;;;AAaA,8CAGC;AAhBD,sDAAsD;AACtD,8CAAuC;AACvC,sFAA8C;AAG9C,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAS,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,gCAAa,CAAC,CAAC;AAO9C,SAAgB,iBAAiB,CAAC,IAAe;IAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAY,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC;AACjF,CAAC"}
1
+ {"version":3,"file":"validateStoryData.js","sourceRoot":"","sources":["../../src/schemas/validateStoryData.ts"],"names":[],"mappings":";;;;;AAkBA,8CAIC;AAtBD,sDAAsD;AACtD,8CAA8E;AAC9E,sFAA8C;AAG9C,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,gCAA8B,CAAgC,CAAC;AAC/F,MAAM,UAAU,GAAG,CAAC,CAAC,IAAe,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAY,CAA8D,CAAC;AACpI,qCAAqC;AACrC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE;IAC1C,GAAG,EAAE,GAAG,EAAE,CAAE,WAAW,CAAC,MAA+C;CACxE,CAAC,CAAC;AAOH,SAAgB,iBAAiB,CAAC,IAAe;IAC/C,MAAM,KAAK,GAAY,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAI,UAAoD,CAAC,MAAM,CAAC;IAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { QEvent, Telemetry, TelemetryAdapter, TelemetryOptions } from './types.js';
2
+ /** Simple fixed-size ring buffer used by telemetry queue */
3
+ /** @beta @experimental */
4
+ export declare class RingBuffer<T> {
5
+ private capacity;
6
+ private buf;
7
+ private head;
8
+ private tail;
9
+ private _size;
10
+ constructor(capacity: number);
11
+ get size(): number;
12
+ get isFull(): boolean;
13
+ get isEmpty(): boolean;
14
+ push(item: T): boolean;
15
+ pop(): T | undefined;
16
+ drain(max: number): T[];
17
+ }
18
+ /** Internal telemetry implementation */
19
+ /** @beta @experimental */
20
+ export declare class TelemetryImpl implements Telemetry {
21
+ private opts;
22
+ private adapter;
23
+ private queue;
24
+ private dropped;
25
+ private sent;
26
+ private lastFlushTs;
27
+ private timer;
28
+ private prng;
29
+ private seq;
30
+ private latencies;
31
+ constructor(options: TelemetryOptions);
32
+ configure(opts: Partial<TelemetryOptions>): void;
33
+ emit<T extends string, P>(event: QEvent<T, P>): void;
34
+ flush(): Promise<void>;
35
+ private percentile;
36
+ stats(): {
37
+ queued: number;
38
+ dropped: number;
39
+ sent: number;
40
+ lastFlushTs: number | null;
41
+ p50: number | undefined;
42
+ p95: number | undefined;
43
+ };
44
+ private startTimer;
45
+ private restartTimer;
46
+ dispose(): Promise<void>;
47
+ }
48
+ /**
49
+ * Built-in console adapter (dev-friendly pretty print)
50
+ * @beta
51
+ * @experimental
52
+ */
53
+ export declare class ConsoleAdapter implements TelemetryAdapter {
54
+ configure(): void;
55
+ send(batch: QEvent[]): Promise<void>;
56
+ }
57
+ export interface FileAdapterOptions {
58
+ path: string;
59
+ rotateBytes?: number;
60
+ }
61
+ /**
62
+ * File adapter writing newline-delimited JSON events
63
+ * @beta
64
+ * @experimental
65
+ */
66
+ export declare class FileAdapter implements TelemetryAdapter {
67
+ private opts;
68
+ private stream;
69
+ constructor(opts: FileAdapterOptions);
70
+ send(batch: QEvent[]): Promise<void>;
71
+ flush(): Promise<void>;
72
+ dispose(): Promise<void>;
73
+ }
74
+ /**
75
+ * Factory for built-in telemetry adapters
76
+ * @beta
77
+ * @experimental
78
+ */
79
+ export declare function createTelemetryAdapter(kind: 'console' | 'file', opts?: {
80
+ path?: string;
81
+ }): TelemetryAdapter;
82
+ /**
83
+ * Create a telemetry instance; pass adapter + options
84
+ * @beta
85
+ * @experimental
86
+ */
87
+ export declare function createTelemetry(options: TelemetryOptions): Telemetry;
88
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/telemetry/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAanF,4DAA4D;AAC5D,0BAA0B;AAC1B,qBAAa,UAAU,CAAC,CAAC;IAKX,OAAO,CAAC,QAAQ;IAJ5B,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;gBACE,QAAQ,EAAE,MAAM;IAIpC,IAAI,IAAI,IAAI,MAAM,CAAuB;IACzC,IAAI,MAAM,IAAI,OAAO,CAAyC;IAC9D,IAAI,OAAO,IAAI,OAAO,CAA6B;IACnD,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAOtB,GAAG,IAAI,CAAC,GAAG,SAAS;IAQpB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;CAQxB;AAED,wCAAwC;AACxC,0BAA0B;AAC1B,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,IAAI,CAA6O;IACzP,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,SAAS,CAAgB;gBAErB,OAAO,EAAE,gBAAgB;IAuBrC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAkBhD,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAyC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B,OAAO,CAAC,UAAU;IAOlB,KAAK;;;;;;;;IAWL,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,YAAY;IAMd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B;AAGD;;;;GAIG;AACH,qBAAa,cAAe,YAAW,gBAAgB;IACrD,SAAS,IAAI,IAAI;IACX,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3C;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AACD;;;;GAIG;AACH,qBAAa,WAAY,YAAW,gBAAgB;IAEtC,OAAO,CAAC,IAAI;IADxB,OAAO,CAAC,MAAM,CAAc;gBACR,IAAI,EAAE,kBAAkB;IAGtC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CAM3G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAEpE"}