@cosystem/core 0.0.0 → 0.0.2

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/index.d.mts CHANGED
@@ -30,16 +30,16 @@ declare class InjectContextError extends CosystemError {
30
30
  }
31
31
  //#endregion
32
32
  //#region src/types.d.ts
33
- interface Token<_T = unknown> {
33
+ interface Token<_T = any> {
34
34
  readonly id: symbol;
35
35
  readonly description?: string;
36
- readonly __type?: _T;
36
+ readonly __type?: (value: _T) => _T;
37
37
  }
38
38
  type Constructor<T = unknown> = new (...args: any[]) => T;
39
- type ClassToken<T = unknown> = abstract new (...args: any[]) => T;
40
- type InjectionToken<T = unknown> = Token<T> | ClassToken<T> | string | symbol;
39
+ type ClassToken<T = any> = abstract new (...args: any[]) => T;
40
+ type InjectionToken<T = any> = Token<T> | ClassToken<T> | string | symbol;
41
41
  type TokenValue<TToken> = TToken extends InjectionToken<infer TValue> ? TValue : unknown;
42
- type DependencySpec<T = unknown> = InjectionToken<T> | {
42
+ type DependencySpec<T = any> = InjectionToken<T> | {
43
43
  readonly token: InjectionToken<T>;
44
44
  readonly optional?: boolean;
45
45
  readonly many?: boolean;
@@ -172,7 +172,6 @@ interface AppScope {
172
172
  readonly container: Container;
173
173
  }
174
174
  interface App {
175
- readonly container: Container;
176
175
  readonly state: AppState;
177
176
  readonly started: boolean;
178
177
  readonly store: Store<RootState>;
@@ -197,6 +196,7 @@ interface Plugin {
197
196
  onModuleCreated?(event: ModuleCreatedEvent): void;
198
197
  onActionStart?(event: ActionEvent): void;
199
198
  onActionEnd?(event: ActionEvent): void;
199
+ onPatch?(event: PatchEvent): void;
200
200
  onStateChange?(event: StateChangeEvent): void;
201
201
  onError?(error: unknown, context: ErrorContext): void;
202
202
  dispose?(): void | Promise<void>;
@@ -217,6 +217,10 @@ interface ActionEvent {
217
217
  interface StateChangeEvent {
218
218
  readonly state: unknown;
219
219
  }
220
+ interface PatchEvent {
221
+ readonly patches: readonly unknown[];
222
+ readonly inversePatches: readonly unknown[];
223
+ }
220
224
  interface ErrorContext {
221
225
  readonly phase: string;
222
226
  }
@@ -231,6 +235,7 @@ interface TestAppInspector {
231
235
  interface MutableTestInspector extends TestAppInspector {
232
236
  recordAction(event: ActionEvent): void;
233
237
  recordPatch(patch: unknown): void;
238
+ recordState(state: unknown): void;
234
239
  }
235
240
  type RootState = Record<string, Record<PropertyKey, unknown>>;
236
241
  declare function createApp(options?: CreateAppOptions): App;
@@ -256,11 +261,14 @@ interface ModuleMetadata {
256
261
  readonly actions: Set<PropertyKey>;
257
262
  readonly computed: Set<PropertyKey>;
258
263
  }
259
- declare function defineModule<T extends Constructor>(target: T, options?: DefineModuleOptions): T;
264
+ interface MetadataContext {
265
+ readonly metadata?: Record<PropertyKey, unknown> | undefined;
266
+ }
267
+ declare function defineModule<T extends Constructor>(target: T, options?: DefineModuleOptions, context?: MetadataContext): T;
260
268
  declare function getModuleMetadata(target: Function): ModuleMetadata | undefined;
261
269
  //#endregion
262
270
  //#region src/decorators.d.ts
263
- declare function module(options?: ModuleOptions): <T extends Constructor>(target: T, _context?: ClassDecoratorContext<T>) => T;
271
+ declare function module(options?: ModuleOptions): <T extends Constructor>(target: T, context?: ClassDecoratorContext<T>) => T;
264
272
  declare function state<This extends object, Value>(_value: ClassAccessorDecoratorTarget<This, Value>, context: ClassAccessorDecoratorContext<This, Value>): void;
265
273
  declare function action<This extends object, Args extends unknown[], Return>(_value: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>): void;
266
274
  declare function computed<This extends object, Value>(_value: (this: This) => Value, context: ClassGetterDecoratorContext<This, Value>): void;
@@ -268,6 +276,16 @@ declare function computed<This extends object, Value>(_value: (this: This) => Va
268
276
  //#region src/inject.d.ts
269
277
  declare function inject<TToken extends InjectionToken>(token: TToken): TokenValue<TToken>;
270
278
  //#endregion
279
+ //#region src/loggerPlugin.d.ts
280
+ interface LoggerPluginLogger {
281
+ info(message: string, details?: unknown): void;
282
+ error(message: string, details?: unknown): void;
283
+ }
284
+ interface LoggerPluginOptions {
285
+ readonly logger?: LoggerPluginLogger;
286
+ }
287
+ declare function createLoggerPlugin(options?: LoggerPluginOptions): Plugin;
288
+ //#endregion
271
289
  //#region src/provider.d.ts
272
290
  declare function provide<T>(token: InjectionToken<T>, options: ClassProvideOptions<T>): ClassProvider<T>;
273
291
  declare function provide<T>(token: InjectionToken<T>, options: ValueProvideOptions<T>): ValueProvider<T>;
@@ -319,6 +337,8 @@ interface WorkerResultMessage {
319
337
  interface WorkerStateMessage {
320
338
  readonly type: "state";
321
339
  readonly state: unknown;
340
+ readonly patches?: readonly unknown[];
341
+ readonly sync: "patch" | "snapshot";
322
342
  readonly version: number;
323
343
  }
324
344
  interface WorkerReadyMessage {
@@ -354,5 +374,5 @@ declare function createWorkerApp(options: CreateWorkerAppOptions): WorkerAppHost
354
374
  declare function createWorkerClient(options: CreateWorkerClientOptions): WorkerClient;
355
375
  declare function createMemoryWorkerTransportPair(): readonly [WorkerTransport, WorkerTransport];
356
376
  //#endregion
357
- export { type ActionEvent, AmbiguousProviderError, type App, type AppDevOptions, type AppScope, type AppState, type AsyncMethodProxy, AsyncProviderInSyncResolutionError, type AutoStartedTestAppOptions, type BuildOptions, CircularDependencyError, type ClassProvideOptions, type ClassProvider, type ClassToken, type Constructor, type Container, type ContainerOptions, CosystemError, type CreateAppOptions, type CreateWorkerAppOptions, type CreateWorkerClientOptions, type DefineModuleOptions, type DependencySpec, type DependencyValue, DuplicateProviderError, type EngineOptions, type ErrorContext, type ExistingProvideOptions, type ExistingProvider, type FactoryProvideOptions, type FactoryProvider, FrozenContainerError, InjectContextError, type InjectionToken, LifetimeLeakError, type ManualTestAppOptions, MissingProviderError, type ModuleCreatedEvent, type ModuleMetadata, type ModuleOptions, type Plugin, type Provider, type ProviderInput, type ResolvedDeps as ResolvedDependencyTuple, type ResolvedDeps, type Scope, type ScopeOptions, type SerializedWorkerError, type StateChangeEvent, type TestApp, type TestAppInspector, type TestAppOptions, type Token, type TokenValue, type ValueProvideOptions, type ValueProvider, type WatchOptions, type WorkerAppHost, type WorkerClient, type WorkerMessage, type WorkerStateMessage, type WorkerTransport, action, computed, createApp, createContainer, createMemoryWorkerTransportPair, createWorkerApp, createWorkerClient, defineModule, getModuleMetadata, inject, module, provide, state, testApp, token, tokenName };
377
+ export { type ActionEvent, AmbiguousProviderError, type App, type AppDevOptions, type AppScope, type AppState, type AsyncMethodProxy, AsyncProviderInSyncResolutionError, type AutoStartedTestAppOptions, type BuildOptions, CircularDependencyError, type ClassProvideOptions, type ClassProvider, type ClassToken, type Constructor, type Container, type ContainerOptions, CosystemError, type CreateAppOptions, type CreateWorkerAppOptions, type CreateWorkerClientOptions, type DefineModuleOptions, type DependencySpec, type DependencyValue, DuplicateProviderError, type EngineOptions, type ErrorContext, type ExistingProvideOptions, type ExistingProvider, type FactoryProvideOptions, type FactoryProvider, FrozenContainerError, InjectContextError, type InjectionToken, LifetimeLeakError, type LoggerPluginLogger, type LoggerPluginOptions, type ManualTestAppOptions, MissingProviderError, type ModuleCreatedEvent, type ModuleMetadata, type ModuleOptions, type PatchEvent, type Plugin, type Provider, type ProviderInput, type ResolvedDeps as ResolvedDependencyTuple, type ResolvedDeps, type Scope, type ScopeOptions, type SerializedWorkerError, type StateChangeEvent, type TestApp, type TestAppInspector, type TestAppOptions, type Token, type TokenValue, type ValueProvideOptions, type ValueProvider, type WatchOptions, type WorkerAppHost, type WorkerClient, type WorkerMessage, type WorkerStateMessage, type WorkerTransport, action, computed, createApp, createContainer, createLoggerPlugin, createMemoryWorkerTransportPair, createWorkerApp, createWorkerClient, defineModule, getModuleMetadata, inject, module, provide, state, testApp, token, tokenName };
358
378
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors.ts","../src/types.ts","../src/container.ts","../src/app.ts","../src/metadata.ts","../src/decorators.ts","../src/inject.ts","../src/provider.ts","../src/testApp.ts","../src/token.ts","../src/worker.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/errors.ts","../src/types.ts","../src/container.ts","../src/app.ts","../src/metadata.ts","../src/decorators.ts","../src/inject.ts","../src/loggerPlugin.ts","../src/provider.ts","../src/testApp.ts","../src/token.ts","../src/worker.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -348,13 +348,18 @@ var RuntimeContainer = class RuntimeContainer {
348
348
  const records = this.getAllRecords(dep.token);
349
349
  return this.resolveAllRecords(records, context);
350
350
  }
351
- const record = dep.optional === true ? this.getSingleRecord(dep.token, true) : this.getSingleRecord(dep.token, false);
351
+ const record = dep.optional === true ? this.getSingleRecord(dep.token, true) : this.getRequiredRecord(dep.token, context);
352
352
  if (record === void 0) return;
353
353
  return this.resolveRecord(record, context);
354
354
  }
355
- const record = this.getSingleRecord(dep, false);
355
+ const record = this.getRequiredRecord(dep, context);
356
356
  return this.resolveRecord(record, context);
357
357
  }
358
+ getRequiredRecord(token, context) {
359
+ const record = this.getSingleRecord(token, true);
360
+ if (record === void 0) throw new MissingProviderError(tokenName(token), context.stack.map((entry) => entry.tokenName));
361
+ return record;
362
+ }
358
363
  resolveAllRecords(records, context) {
359
364
  const values = records.map((record) => this.resolveRecord(record, context));
360
365
  if (values.some(isPromiseLike)) return Promise.all(values);
@@ -439,16 +444,25 @@ async function disposeValue(value, record) {
439
444
  //#endregion
440
445
  //#region src/metadata.ts
441
446
  const moduleMetadata = /* @__PURE__ */ new WeakMap();
442
- function defineModule(target, options = {}) {
447
+ const moduleMetadataKey = Symbol.for("@cosystem/core/moduleMetadata");
448
+ const symbolMetadataKey = Symbol.metadata;
449
+ function defineModule(target, options = {}, context) {
443
450
  const metadata = ensureModuleMetadata(target);
451
+ mergeModuleMetadata(metadata, readContextMetadata(context));
444
452
  applyModuleOptions(metadata, options);
445
453
  addProperties(metadata.state, options.state);
446
454
  addProperties(metadata.actions, options.actions);
455
+ writeContextMetadata(context, metadata);
447
456
  addProperties(metadata.computed, options.computed);
448
457
  return target;
449
458
  }
450
459
  function getModuleMetadata(target) {
451
- return moduleMetadata.get(target);
460
+ const existing = moduleMetadata.get(target);
461
+ if (existing !== void 0) return existing;
462
+ const metadata = readSymbolMetadata(target);
463
+ if (metadata === void 0) return;
464
+ moduleMetadata.set(target, metadata);
465
+ return metadata;
452
466
  }
453
467
  function addModuleState(target, property) {
454
468
  ensureModuleMetadata(target).state.add(property);
@@ -476,16 +490,59 @@ function ensureModuleMetadata(target) {
476
490
  moduleMetadata.set(target, metadata);
477
491
  return metadata;
478
492
  }
493
+ function ensureContextModuleMetadata(context) {
494
+ if (context?.metadata === void 0) return;
495
+ const existing = readContextMetadata(context);
496
+ if (existing !== void 0) return existing;
497
+ const metadata = createModuleMetadata();
498
+ writeContextMetadata(context, metadata);
499
+ return metadata;
500
+ }
479
501
  function addProperties(target, properties) {
480
502
  for (const property of properties ?? []) target.add(property);
481
503
  }
504
+ function createModuleMetadata() {
505
+ return {
506
+ kind: "module",
507
+ state: /* @__PURE__ */ new Set(),
508
+ actions: /* @__PURE__ */ new Set(),
509
+ computed: /* @__PURE__ */ new Set()
510
+ };
511
+ }
512
+ function readContextMetadata(context) {
513
+ const value = context?.metadata?.[moduleMetadataKey];
514
+ return isModuleMetadata(value) ? value : void 0;
515
+ }
516
+ function writeContextMetadata(context, metadata) {
517
+ if (context?.metadata === void 0) return;
518
+ context.metadata[moduleMetadataKey] = metadata;
519
+ }
520
+ function readSymbolMetadata(target) {
521
+ if (symbolMetadataKey === void 0) return;
522
+ const metadata = target[symbolMetadataKey];
523
+ if (metadata === void 0 || metadata === null || typeof metadata !== "object") return;
524
+ const value = metadata[moduleMetadataKey];
525
+ return isModuleMetadata(value) ? value : void 0;
526
+ }
527
+ function mergeModuleMetadata(target, source) {
528
+ if (source === void 0 || source === target) return;
529
+ applyModuleOptions(target, source);
530
+ addProperties(target.state, [...source.state]);
531
+ addProperties(target.actions, [...source.actions]);
532
+ addProperties(target.computed, [...source.computed]);
533
+ }
534
+ function isModuleMetadata(value) {
535
+ return typeof value === "object" && value !== null && value.kind === "module" && value instanceof Object && value.state instanceof Set && value.actions instanceof Set && value.computed instanceof Set;
536
+ }
482
537
  //#endregion
483
538
  //#region src/app.ts
539
+ const runtimeModuleMetadataKey = Symbol.for("@cosystem/core/runtimeModule");
540
+ const appContainerMap = /* @__PURE__ */ new WeakMap();
484
541
  function createApp(options = {}) {
485
542
  return createAppInternal(options);
486
543
  }
487
544
  function createAppInternal(options = {}) {
488
- const parent = isApp(options.parent) ? options.parent.container : options.parent;
545
+ const parent = isApp(options.parent) ? getAppContainer(options.parent) : options.parent;
489
546
  const container = parent === void 0 ? createContainer() : createContainer({ parent });
490
547
  const moduleTokens = [];
491
548
  for (const provider of options.providers ?? []) {
@@ -496,10 +553,7 @@ function createAppInternal(options = {}) {
496
553
  for (const override of options.overrides ?? []) container.override(normalizeAppProvider(override).provider);
497
554
  container.freeze();
498
555
  const modules = instantiateModules(container, moduleTokens);
499
- const store = create(createRootState(modules), {
500
- name: "cosystem",
501
- sliceMode: "single"
502
- });
556
+ const store = create(createRootState(modules), createStoreOptions(options.engine, shouldEnablePatches(options)));
503
557
  const app = new RuntimeApp({
504
558
  container,
505
559
  devOptions: options.devOptions ?? {},
@@ -510,14 +564,16 @@ function createAppInternal(options = {}) {
510
564
  ...options.testInspector === void 0 ? {} : { testInspector: options.testInspector }
511
565
  });
512
566
  app.bindModules();
567
+ app.attachRuntimeMetadata();
513
568
  app.runModuleCreatedHooks();
514
569
  app.init();
570
+ appContainerMap.set(app, container);
515
571
  return app;
516
572
  }
517
573
  var RuntimeApp = class {
518
- container;
519
574
  state;
520
575
  store;
576
+ #container;
521
577
  devOptions;
522
578
  modules;
523
579
  moduleByToken = /* @__PURE__ */ new Map();
@@ -528,7 +584,7 @@ var RuntimeApp = class {
528
584
  isStarted = false;
529
585
  isDisposed = false;
530
586
  constructor(options) {
531
- this.container = options.container;
587
+ this.#container = options.container;
532
588
  this.devOptions = options.devOptions;
533
589
  this.modules = options.modules;
534
590
  this.plugins = options.plugins;
@@ -539,10 +595,11 @@ var RuntimeApp = class {
539
595
  this.moduleByToken.set(moduleBinding.token, moduleBinding);
540
596
  this.moduleByName.set(moduleBinding.name, moduleBinding);
541
597
  }
598
+ this.wrapStoreSetState();
542
599
  this.store.subscribe(() => {
543
600
  this.state.version += 1;
544
601
  const state = this.store.getPureState();
545
- this.testInspector?.recordPatch(state);
602
+ this.testInspector?.recordState(state);
546
603
  this.emitStateChange({ state });
547
604
  });
548
605
  }
@@ -550,13 +607,13 @@ var RuntimeApp = class {
550
607
  return this.isStarted;
551
608
  }
552
609
  get(token) {
553
- return this.container.get(token);
610
+ return this.#container.get(token);
554
611
  }
555
612
  getAsync(token) {
556
- return this.container.getAsync(token);
613
+ return this.#container.getAsync(token);
557
614
  }
558
615
  getAll(token) {
559
- return this.container.getAll(token);
616
+ return this.#container.getAll(token);
560
617
  }
561
618
  getModule(token) {
562
619
  const value = this.get(token);
@@ -591,25 +648,40 @@ var RuntimeApp = class {
591
648
  async start() {
592
649
  if (this.isStarted) return;
593
650
  await this.initPromise;
594
- await this.runLifecycle("onStart");
595
- this.isStarted = true;
651
+ try {
652
+ await this.runLifecycle("onStart");
653
+ this.isStarted = true;
654
+ } catch (error) {
655
+ this.emitError(error, { phase: "start" });
656
+ throw error;
657
+ }
596
658
  }
597
659
  async stop() {
598
660
  if (!this.isStarted) return;
599
- await this.runLifecycle("onStop", true);
600
- this.isStarted = false;
661
+ try {
662
+ await this.runLifecycle("onStop", true);
663
+ this.isStarted = false;
664
+ } catch (error) {
665
+ this.emitError(error, { phase: "stop" });
666
+ throw error;
667
+ }
601
668
  }
602
669
  async dispose() {
603
670
  if (this.isDisposed) return;
604
671
  await this.stop();
605
- await this.runLifecycle("onDispose", true);
606
- await Promise.all(this.plugins.map((plugin) => plugin.dispose?.()));
607
- await this.container.dispose();
608
- this.store.destroy();
609
- this.isDisposed = true;
672
+ try {
673
+ await this.runLifecycle("onDispose", true);
674
+ await Promise.all(this.plugins.map((plugin) => plugin.dispose?.()));
675
+ await this.#container.dispose();
676
+ this.store.destroy();
677
+ this.isDisposed = true;
678
+ } catch (error) {
679
+ this.emitError(error, { phase: "dispose" });
680
+ throw error;
681
+ }
610
682
  }
611
683
  createScope(options) {
612
- return { container: this.container.createScope(options) };
684
+ return { container: this.#container.createScope(options) };
613
685
  }
614
686
  bindModules() {
615
687
  for (const moduleBinding of this.modules) {
@@ -618,6 +690,17 @@ var RuntimeApp = class {
618
690
  this.bindActions(moduleBinding);
619
691
  }
620
692
  }
693
+ attachRuntimeMetadata() {
694
+ for (const moduleBinding of this.modules) Object.defineProperty(moduleBinding.instance, runtimeModuleMetadataKey, {
695
+ configurable: false,
696
+ enumerable: false,
697
+ value: {
698
+ app: this,
699
+ name: moduleBinding.name,
700
+ token: moduleBinding.token
701
+ }
702
+ });
703
+ }
621
704
  runModuleCreatedHooks() {
622
705
  for (const moduleBinding of this.modules) {
623
706
  const event = {
@@ -630,8 +713,13 @@ var RuntimeApp = class {
630
713
  }
631
714
  init() {
632
715
  this.initPromise = (async () => {
633
- await Promise.all(this.plugins.map((plugin) => plugin.setup?.(this)));
634
- await this.runLifecycle("onInit");
716
+ try {
717
+ await Promise.all(this.plugins.map((plugin) => this.runWithAppInjectContext(() => plugin.setup?.(this))));
718
+ await this.runLifecycle("onInit");
719
+ } catch (error) {
720
+ this.emitError(error, { phase: "init" });
721
+ throw error;
722
+ }
635
723
  })();
636
724
  }
637
725
  bindState(moduleBinding) {
@@ -703,6 +791,7 @@ var RuntimeApp = class {
703
791
  });
704
792
  } catch (caught) {
705
793
  error = caught;
794
+ this.emitError(caught, { phase: "action" });
706
795
  } finally {
707
796
  moduleBinding.actionDepth -= 1;
708
797
  }
@@ -718,7 +807,10 @@ var RuntimeApp = class {
718
807
  }
719
808
  async runLifecycle(method, reverse = false) {
720
809
  const modules = reverse ? this.modules.toReversed() : this.modules;
721
- for (const moduleBinding of modules) await moduleBinding.instance[method]?.();
810
+ for (const moduleBinding of modules) {
811
+ const lifecycle = moduleBinding.instance;
812
+ await this.runWithAppInjectContext(() => lifecycle[method]?.());
813
+ }
722
814
  }
723
815
  emitActionStart(event) {
724
816
  for (const plugin of this.plugins) plugin.onActionStart?.(event);
@@ -729,6 +821,38 @@ var RuntimeApp = class {
729
821
  emitStateChange(event) {
730
822
  for (const plugin of this.plugins) plugin.onStateChange?.(event);
731
823
  }
824
+ emitPatch(event) {
825
+ for (const plugin of this.plugins) plugin.onPatch?.(event);
826
+ }
827
+ emitError(error, context) {
828
+ for (const plugin of this.plugins) plugin.onError?.(error, context);
829
+ }
830
+ runWithAppInjectContext(callback) {
831
+ return runWithInjectContext({
832
+ mode: "sync",
833
+ requestContainer: this.#container,
834
+ resolutionCache: /* @__PURE__ */ new Map(),
835
+ stack: []
836
+ }, callback);
837
+ }
838
+ wrapStoreSetState() {
839
+ const originalSetState = this.store.setState.bind(this.store);
840
+ this.store.setState = ((...args) => {
841
+ const result = originalSetState(...args);
842
+ this.recordMutationResult(result);
843
+ return result;
844
+ });
845
+ }
846
+ recordMutationResult(result) {
847
+ if (!Array.isArray(result) || result.length < 3) return;
848
+ const patches = result[1];
849
+ if (patches.length === 0) return;
850
+ this.testInspector?.recordPatch(patches);
851
+ this.emitPatch({
852
+ inversePatches: result[2],
853
+ patches
854
+ });
855
+ }
732
856
  };
733
857
  function normalizeAppProvider(provider) {
734
858
  if (typeof provider === "function") {
@@ -751,6 +875,18 @@ function normalizeAppProvider(provider) {
751
875
  }
752
876
  return { provider };
753
877
  }
878
+ function createStoreOptions(engine, enablePatches) {
879
+ return {
880
+ name: "cosystem",
881
+ sliceMode: "single",
882
+ enablePatches,
883
+ ...engine?.transport === void 0 ? {} : { transport: engine.transport }
884
+ };
885
+ }
886
+ function shouldEnablePatches(options) {
887
+ if (options.engine?.patches !== void 0) return options.engine.patches;
888
+ return options.testInspector !== void 0 || (options.plugins ?? []).some((plugin) => plugin.onPatch !== void 0);
889
+ }
754
890
  function createModuleClassProviderOptions(useClass, metadata) {
755
891
  return {
756
892
  useClass,
@@ -819,33 +955,62 @@ function getDescriptor(instance, property) {
819
955
  function isApp(value) {
820
956
  return typeof value === "object" && value !== null && "get" in value && "start" in value && "dispose" in value;
821
957
  }
958
+ function getAppContainer(app) {
959
+ const container = appContainerMap.get(app);
960
+ if (container === void 0) throw new CosystemError("Parent app was not created by CoSystem.");
961
+ return container;
962
+ }
822
963
  //#endregion
823
964
  //#region src/decorators.ts
824
965
  function module(options = {}) {
825
- return function moduleDecorator(target, _context) {
826
- defineModule(target, options);
966
+ return function moduleDecorator(target, context) {
967
+ defineModule(target, options, context);
827
968
  return target;
828
969
  };
829
970
  }
830
971
  function state(_value, context) {
831
972
  if (context.kind !== "accessor") throw new TypeError("@state only supports standard accessor decorators.");
973
+ ensureContextModuleMetadata(context)?.state.add(context.name);
832
974
  context.addInitializer(function initializeState() {
833
975
  addModuleState(this.constructor, context.name);
834
976
  });
835
977
  }
836
978
  function action(_value, context) {
837
979
  if (context.kind !== "method") throw new TypeError("@action only supports method decorators.");
980
+ ensureContextModuleMetadata(context)?.actions.add(context.name);
838
981
  context.addInitializer(function initializeAction() {
839
982
  addModuleAction(this.constructor, context.name);
840
983
  });
841
984
  }
842
985
  function computed(_value, context) {
843
986
  if (context.kind !== "getter") throw new TypeError("@computed only supports getter decorators.");
987
+ ensureContextModuleMetadata(context)?.computed.add(context.name);
844
988
  context.addInitializer(function initializeComputed() {
845
989
  addModuleComputed(this.constructor, context.name);
846
990
  });
847
991
  }
848
992
  //#endregion
993
+ //#region src/loggerPlugin.ts
994
+ function createLoggerPlugin(options = {}) {
995
+ const logger = options.logger ?? console;
996
+ return {
997
+ name: "cosystem:logger",
998
+ onActionEnd(event) {
999
+ if (event.error !== void 0) {
1000
+ logger.error(`Action failed: ${event.module}.${event.method}`, event);
1001
+ return;
1002
+ }
1003
+ logger.info(`Action completed: ${event.module}.${event.method}`, event);
1004
+ },
1005
+ onError(error, context) {
1006
+ logger.error(`Runtime error during ${context.phase}`, error);
1007
+ },
1008
+ onModuleCreated(event) {
1009
+ logger.info(`Module created: ${event.name}`, event);
1010
+ }
1011
+ };
1012
+ }
1013
+ //#endregion
849
1014
  //#region src/testApp.ts
850
1015
  function testApp(options = {}) {
851
1016
  const inspector = createTestInspector();
@@ -894,8 +1059,10 @@ function createTestInspector() {
894
1059
  actions.push(event);
895
1060
  },
896
1061
  recordPatch(patch) {
897
- lastState = patch;
898
1062
  patches.push(patch);
1063
+ },
1064
+ recordState(state) {
1065
+ lastState = state;
899
1066
  }
900
1067
  };
901
1068
  }
@@ -903,21 +1070,30 @@ function createTestInspector() {
903
1070
  //#region src/worker.ts
904
1071
  function createWorkerApp(options) {
905
1072
  const { transport, ...appOptions } = options;
906
- const app = createApp(appOptions);
1073
+ const patchPlugin = {
1074
+ name: "cosystem:worker-patches",
1075
+ onPatch(event) {
1076
+ publishState(app, transport, event.patches);
1077
+ }
1078
+ };
1079
+ const app = createApp({
1080
+ ...appOptions,
1081
+ engine: {
1082
+ ...appOptions.engine,
1083
+ patches: true
1084
+ },
1085
+ plugins: [...appOptions.plugins ?? [], patchPlugin]
1086
+ });
907
1087
  const unsubscribeTransport = transport.subscribe((message) => {
908
1088
  if (message.type !== "call") return;
909
1089
  handleCall(app, transport, message);
910
1090
  });
911
- const unsubscribeStore = app.store.subscribe(() => {
912
- publishState(app, transport);
913
- });
914
1091
  transport.post({ type: "ready" });
915
1092
  publishState(app, transport);
916
1093
  return {
917
1094
  app,
918
1095
  async dispose() {
919
1096
  unsubscribeTransport();
920
- unsubscribeStore();
921
1097
  await app.dispose();
922
1098
  }
923
1099
  };
@@ -1013,12 +1189,15 @@ async function handleCall(app, transport, message) {
1013
1189
  });
1014
1190
  }
1015
1191
  }
1016
- function publishState(app, transport) {
1017
- transport.post({
1192
+ function publishState(app, transport, patches = []) {
1193
+ const message = {
1018
1194
  state: app.store.getPureState(),
1195
+ sync: patches.length > 0 ? "patch" : "snapshot",
1019
1196
  type: "state",
1020
- version: app.state.version
1021
- });
1197
+ version: app.state.version,
1198
+ ...patches.length === 0 ? {} : { patches }
1199
+ };
1200
+ transport.post(message);
1022
1201
  }
1023
1202
  function createMemoryWorkerTransport(inbox, outbox) {
1024
1203
  return {
@@ -1051,6 +1230,6 @@ function createRemoteError(error) {
1051
1230
  return remoteError;
1052
1231
  }
1053
1232
  //#endregion
1054
- export { AmbiguousProviderError, AsyncProviderInSyncResolutionError, CircularDependencyError, CosystemError, DuplicateProviderError, FrozenContainerError, InjectContextError, LifetimeLeakError, MissingProviderError, action, computed, createApp, createContainer, createMemoryWorkerTransportPair, createWorkerApp, createWorkerClient, defineModule, getModuleMetadata, inject, module, provide, state, testApp, token, tokenName };
1233
+ export { AmbiguousProviderError, AsyncProviderInSyncResolutionError, CircularDependencyError, CosystemError, DuplicateProviderError, FrozenContainerError, InjectContextError, LifetimeLeakError, MissingProviderError, action, computed, createApp, createContainer, createLoggerPlugin, createMemoryWorkerTransportPair, createWorkerApp, createWorkerClient, defineModule, getModuleMetadata, inject, module, provide, state, testApp, token, tokenName };
1055
1234
 
1056
1235
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["createCoactionStore"],"sources":["../src/errors.ts","../src/token.ts","../src/inject.ts","../src/provider.ts","../src/container.ts","../src/metadata.ts","../src/app.ts","../src/decorators.ts","../src/testApp.ts","../src/worker.ts"],"sourcesContent":["export class CosystemError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CosystemError\";\n }\n}\n\nexport class FrozenContainerError extends CosystemError {\n constructor() {\n super(\"Container provider graph is frozen and can no longer be mutated.\");\n this.name = \"FrozenContainerError\";\n }\n}\n\nexport class MissingProviderError extends CosystemError {\n constructor(token: string, path: readonly string[]) {\n super(\n [\n `Missing provider for ${token}.`,\n path.length > 0 ? \"Resolution path:\" : \"\",\n ...path.map((entry) => ` ${entry}`),\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n );\n this.name = \"MissingProviderError\";\n }\n}\n\nexport class DuplicateProviderError extends CosystemError {\n constructor(token: string) {\n super(`Duplicate non-multi provider for ${token}. Use override() or mark providers as multi.`);\n this.name = \"DuplicateProviderError\";\n }\n}\n\nexport class AmbiguousProviderError extends CosystemError {\n constructor(token: string) {\n super(`Multiple providers registered for ${token}. Use getAll() instead of get().`);\n this.name = \"AmbiguousProviderError\";\n }\n}\n\nexport class CircularDependencyError extends CosystemError {\n constructor(path: readonly string[]) {\n super([\"Circular dependency detected:\", ...path.map((entry) => ` ${entry}`)].join(\"\\n\"));\n this.name = \"CircularDependencyError\";\n }\n}\n\nexport class AsyncProviderInSyncResolutionError extends CosystemError {\n constructor(token: string) {\n super(`Provider for ${token} resolved asynchronously. Use getAsync() instead of get().`);\n this.name = \"AsyncProviderInSyncResolutionError\";\n }\n}\n\nexport class LifetimeLeakError extends CosystemError {\n constructor(parent: string, parentScope: string, child: string, childScope: string) {\n super(`${parent} (${parentScope}) cannot depend on ${child} (${childScope}) without leakSafe.`);\n this.name = \"LifetimeLeakError\";\n }\n}\n\nexport class InjectContextError extends CosystemError {\n constructor(token: string) {\n super(`${token} can only be injected while resolving a provider or running an app hook.`);\n this.name = \"InjectContextError\";\n }\n}\n","import type { InjectionToken, Token } from \"./types.js\";\n\nexport function token<T>(description?: string): Token<T> {\n const id = Symbol(description);\n\n if (description === undefined) {\n return { id };\n }\n\n return { id, description };\n}\n\nexport function tokenName(tokenValue: InjectionToken): string {\n if (typeof tokenValue === \"string\") {\n return tokenValue;\n }\n\n if (typeof tokenValue === \"symbol\") {\n return tokenValue.description ?? tokenValue.toString();\n }\n\n if (typeof tokenValue === \"function\") {\n return tokenValue.name || \"<anonymous class>\";\n }\n\n return tokenValue.description ?? tokenValue.id.description ?? tokenValue.id.toString();\n}\n","import { InjectContextError } from \"./errors.js\";\nimport { tokenName } from \"./token.js\";\nimport type { InjectionToken, ResolutionContext, TokenValue } from \"./types.js\";\n\nlet activeResolutionContext: ResolutionContext | undefined;\n\nexport function inject<TToken extends InjectionToken>(token: TToken): TokenValue<TToken> {\n if (activeResolutionContext === undefined) {\n throw new InjectContextError(tokenName(token));\n }\n\n return activeResolutionContext.requestContainer.get(token) as TokenValue<TToken>;\n}\n\nexport function runWithInjectContext<T>(context: ResolutionContext, callback: () => T): T {\n const previousContext = activeResolutionContext;\n activeResolutionContext = context;\n\n try {\n return callback();\n } finally {\n activeResolutionContext = previousContext;\n }\n}\n","import type {\n ClassProvideOptions,\n ClassProvider,\n DependencySpec,\n ExistingProvideOptions,\n ExistingProvider,\n FactoryProvideOptions,\n FactoryProvider,\n InjectionToken,\n ProviderInput,\n ProviderRecord,\n ResolvedDeps,\n ValueProvideOptions,\n ValueProvider,\n} from \"./types.js\";\nimport { tokenName } from \"./token.js\";\n\nexport function provide<T>(\n token: InjectionToken<T>,\n options: ClassProvideOptions<T>,\n): ClassProvider<T>;\n\nexport function provide<T>(\n token: InjectionToken<T>,\n options: ValueProvideOptions<T>,\n): ValueProvider<T>;\n\nexport function provide<T, const TDeps extends readonly DependencySpec[]>(\n token: InjectionToken<T>,\n options: FactoryProvideOptions<T, TDeps>,\n): FactoryProvider<T, TDeps>;\n\nexport function provide<T>(\n token: InjectionToken<T>,\n options: ExistingProvideOptions<T>,\n): ExistingProvider<T>;\n\nexport function provide<T>(\n providerToken: InjectionToken<T>,\n options:\n | ClassProvideOptions<T>\n | ValueProvideOptions<T>\n | FactoryProvideOptions<T, readonly DependencySpec[]>\n | ExistingProvideOptions<T>,\n): ClassProvider<T> | ValueProvider<T> | FactoryProvider<T> | ExistingProvider<T> {\n return {\n provide: providerToken,\n ...options,\n };\n}\n\nexport function normalizeProvider(input: ProviderInput): ProviderRecord {\n if (typeof input === \"function\") {\n return normalizeProvider({\n provide: input,\n useClass: input,\n });\n }\n\n const token = input.provide;\n const base = {\n token,\n tokenName: tokenName(token),\n multi: input.multi ?? false,\n leakSafe: input.leakSafe ?? false,\n };\n\n if (\"useClass\" in input) {\n return {\n ...base,\n provider: {\n kind: \"class\",\n useClass: input.useClass,\n },\n scope: input.scope ?? \"singleton\",\n deps:\n input.deps ??\n (input.useClass as { readonly inject?: readonly DependencySpec[] }).inject ??\n [],\n eager: input.eager ?? false,\n ...eraseDispose(input.dispose),\n };\n }\n\n if (\"useValue\" in input) {\n return {\n ...base,\n provider: {\n kind: \"value\",\n useValue: input.useValue,\n },\n scope: \"singleton\",\n deps: [],\n eager: true,\n ...eraseDispose(input.dispose),\n };\n }\n\n if (\"useFactory\" in input) {\n return {\n ...base,\n provider: {\n kind: \"factory\",\n useFactory: input.useFactory as (...deps: readonly unknown[]) => unknown,\n },\n scope: input.scope ?? \"singleton\",\n deps: input.deps ?? [],\n eager: input.eager ?? false,\n ...eraseDispose(input.dispose),\n };\n }\n\n return {\n ...base,\n provider: {\n kind: \"existing\",\n useExisting: input.useExisting,\n },\n scope: \"singleton\",\n deps: [input.useExisting],\n eager: false,\n };\n}\n\nexport type { ResolvedDeps };\n\nfunction eraseDispose<T>(dispose: ((value: T) => void | Promise<void>) | undefined): {\n readonly dispose?: (value: unknown) => void | Promise<void>;\n} {\n if (dispose === undefined) {\n return {};\n }\n\n return {\n dispose: dispose as (value: unknown) => void | Promise<void>,\n };\n}\n","import {\n AmbiguousProviderError,\n AsyncProviderInSyncResolutionError,\n CircularDependencyError,\n DuplicateProviderError,\n FrozenContainerError,\n LifetimeLeakError,\n MissingProviderError,\n} from \"./errors.js\";\nimport { runWithInjectContext } from \"./inject.js\";\nimport { normalizeProvider } from \"./provider.js\";\nimport { tokenName } from \"./token.js\";\nimport type {\n BuildOptions,\n Constructor,\n Container,\n ContainerImpl,\n ContainerOptions,\n DependencySpec,\n DisposableInstance,\n InjectionToken,\n ProviderInput,\n ProviderRecord,\n ResolutionContext,\n Scope,\n ScopeOptions,\n} from \"./types.js\";\n\nconst asyncDisposeSymbol: symbol | undefined = Symbol.asyncDispose;\nconst disposeSymbol: symbol | undefined = Symbol.dispose;\n\nexport function createContainer(options: ContainerOptions = {}): Container {\n return new RuntimeContainer(options);\n}\n\nclass RuntimeContainer implements ContainerImpl {\n readonly parent: ContainerImpl | undefined;\n readonly strictScopes: boolean;\n readonly records = new Map<InjectionToken, ProviderRecord[]>();\n readonly scopedCache = new Map<ProviderRecord, unknown>();\n readonly created: DisposableInstance[] = [];\n readonly root: ContainerImpl;\n readonly singletonCache = new Map<ProviderRecord, unknown>();\n frozen = false;\n\n constructor(options: ContainerOptions = {}) {\n this.parent = options.parent as ContainerImpl | undefined;\n this.strictScopes = options.strictScopes ?? this.parent?.strictScopes ?? true;\n this.root = this.parent?.root ?? this;\n }\n\n get<T>(token: InjectionToken<T>): T;\n get<T>(token: InjectionToken<T>, options: { readonly optional: true }): T | undefined;\n get<T>(token: InjectionToken<T>, options?: { readonly optional: true }): T | undefined {\n const record =\n options?.optional === true\n ? this.getSingleRecord(token, true)\n : this.getSingleRecord(token, false);\n\n if (record === undefined) {\n return undefined;\n }\n\n const context = this.createResolutionContext(\"sync\");\n const value = this.resolveRecord(record, context);\n\n if (isPromiseLike(value)) {\n throw new AsyncProviderInSyncResolutionError(record.tokenName);\n }\n\n return value as T;\n }\n\n getAll<T>(token: InjectionToken<T>): T[] {\n const records = this.getAllRecords(token);\n const context = this.createResolutionContext(\"sync\");\n\n return records.map((record) => {\n const value = this.resolveRecord(record, context);\n\n if (isPromiseLike(value)) {\n throw new AsyncProviderInSyncResolutionError(record.tokenName);\n }\n\n return value as T;\n });\n }\n\n async getAsync<T>(token: InjectionToken<T>): Promise<T> {\n const record = this.getSingleRecord(token, false);\n const context = this.createResolutionContext(\"async\");\n return (await this.resolveRecord(record, context)) as T;\n }\n\n has(token: InjectionToken): boolean {\n return this.findRecords(token).length > 0;\n }\n\n provide(provider: ProviderInput): void {\n this.assertMutable();\n const record = normalizeProvider(provider);\n const existing = this.records.get(record.token) ?? [];\n\n if (!record.multi && existing.some((candidate) => !candidate.multi)) {\n throw new DuplicateProviderError(record.tokenName);\n }\n\n this.records.set(record.token, [...existing, record]);\n }\n\n override(provider: ProviderInput): void {\n this.assertMutable();\n const record = normalizeProvider(provider);\n const existing = this.records.get(record.token) ?? [];\n const kept = existing.filter((candidate) => candidate.multi && !record.multi);\n this.records.set(record.token, [...kept, record]);\n }\n\n createScope(options: ScopeOptions = {}): Container {\n return new RuntimeContainer({\n parent: this,\n strictScopes: options.strictScopes ?? this.strictScopes,\n });\n }\n\n build<T>(target: Constructor<T>, options: BuildOptions = {}): T {\n const deps =\n options.deps ?? (target as { readonly inject?: readonly DependencySpec[] }).inject ?? [];\n const context = this.createResolutionContext(\"sync\");\n const values = this.resolveDependencies(deps, context);\n\n if (isPromiseLike(values)) {\n throw new AsyncProviderInSyncResolutionError(target.name);\n }\n\n return Reflect.construct(target, values) as T;\n }\n\n freeze(): void {\n this.frozen = true;\n }\n\n async dispose(): Promise<void> {\n const errors: unknown[] = [];\n\n for (const entry of [...this.created].toReversed()) {\n if (entry.disposed) {\n continue;\n }\n\n entry.disposed = true;\n\n try {\n await disposeValue(entry.value, entry.record);\n } catch (error) {\n errors.push(error);\n }\n }\n\n this.created.length = 0;\n this.scopedCache.clear();\n\n if (this.root === this) {\n this.singletonCache.clear();\n }\n\n if (errors.length > 0) {\n throw new AggregateError(errors, \"One or more providers failed to dispose.\");\n }\n }\n\n private assertMutable(): void {\n if (this.frozen) {\n throw new FrozenContainerError();\n }\n }\n\n private createResolutionContext(mode: \"sync\" | \"async\"): ResolutionContext {\n return {\n stack: [],\n resolutionCache: new Map(),\n mode,\n requestContainer: this,\n };\n }\n\n private getSingleRecord(token: InjectionToken, optional: false): ProviderRecord;\n private getSingleRecord(token: InjectionToken, optional: true): ProviderRecord | undefined;\n private getSingleRecord(token: InjectionToken, optional: boolean): ProviderRecord | undefined {\n const records = this.findRecords(token);\n\n if (records.length === 0) {\n if (optional) {\n return undefined;\n }\n\n throw new MissingProviderError(tokenName(token), []);\n }\n\n const nonMultiRecords = records.filter((record) => !record.multi);\n\n if (nonMultiRecords.length === 1) {\n return nonMultiRecords[0]!;\n }\n\n if (records.length === 1) {\n return records[0]!;\n }\n\n throw new AmbiguousProviderError(tokenName(token));\n }\n\n private getAllRecords(token: InjectionToken): ProviderRecord[] {\n return this.getAllRecordsFromHierarchy(token);\n }\n\n findRecords(token: InjectionToken): ProviderRecord[] {\n const localRecords = this.records.get(token);\n\n if (localRecords !== undefined && localRecords.length > 0) {\n return localRecords;\n }\n\n return this.parent?.findRecords(token) ?? [];\n }\n\n getAllRecordsFromHierarchy(token: InjectionToken): ProviderRecord[] {\n const parentRecords = this.parent?.getAllRecordsFromHierarchy(token) ?? [];\n const localRecords = this.records.get(token) ?? [];\n return [...parentRecords, ...localRecords];\n }\n\n private resolveRecord(\n record: ProviderRecord,\n context: ResolutionContext,\n ): unknown | Promise<unknown> {\n const cached = this.getCached(record, context);\n\n if (cached.found) {\n return cached.value;\n }\n\n this.assertNoCycle(record, context);\n this.assertLifetimeSafe(record, context);\n\n context.stack.push(record);\n\n const finalize = (value: unknown): unknown => {\n context.stack.pop();\n this.setCached(record, value, context);\n return value;\n };\n\n const fail = (error: unknown): never => {\n context.stack.pop();\n throw error;\n };\n\n try {\n const value = this.createValue(record, context);\n\n if (isPromiseLike(value)) {\n if (context.mode === \"sync\") {\n throw new AsyncProviderInSyncResolutionError(record.tokenName);\n }\n\n return Promise.resolve(value).then(finalize, fail);\n }\n\n return finalize(value);\n } catch (error) {\n return fail(error);\n }\n }\n\n private createValue(\n record: ProviderRecord,\n context: ResolutionContext,\n ): unknown | Promise<unknown> {\n switch (record.provider.kind) {\n case \"class\": {\n const provider = record.provider;\n const deps = this.resolveDependencies(record.deps, context);\n\n if (isPromiseLike(deps)) {\n return Promise.resolve(deps).then((values) =>\n Reflect.construct(provider.useClass, values),\n );\n }\n\n return Reflect.construct(provider.useClass, deps);\n }\n\n case \"value\":\n return record.provider.useValue;\n\n case \"factory\": {\n const provider = record.provider;\n const deps = this.resolveDependencies(record.deps, context);\n\n if (isPromiseLike(deps)) {\n return Promise.resolve(deps).then((values) =>\n runWithInjectContext(context, () => provider.useFactory(...values)),\n );\n }\n\n return runWithInjectContext(context, () => provider.useFactory(...deps));\n }\n\n case \"existing\":\n return this.resolveDependency(record.provider.useExisting, context);\n }\n }\n\n private resolveDependencies(\n deps: readonly DependencySpec[],\n context: ResolutionContext,\n ): unknown[] | Promise<unknown[]> {\n const values: unknown[] = Array.from({ length: deps.length });\n const asyncValues: Promise<unknown>[] = [];\n\n for (const [index, dep] of deps.entries()) {\n const value = this.resolveDependency(dep, context);\n\n if (isPromiseLike(value)) {\n asyncValues.push(\n Promise.resolve(value).then((resolved) => {\n values[index] = resolved;\n return resolved;\n }),\n );\n } else {\n values[index] = value;\n }\n }\n\n if (asyncValues.length === 0) {\n return values;\n }\n\n return Promise.all(asyncValues).then(() => values);\n }\n\n private resolveDependency(\n dep: DependencySpec,\n context: ResolutionContext,\n ): unknown | Promise<unknown> {\n if (isDependencyObject(dep)) {\n if (dep.many === true) {\n const records = this.getAllRecords(dep.token);\n return this.resolveAllRecords(records, context);\n }\n\n const record =\n dep.optional === true\n ? this.getSingleRecord(dep.token, true)\n : this.getSingleRecord(dep.token, false);\n\n if (record === undefined) {\n return undefined;\n }\n\n return this.resolveRecord(record, context);\n }\n\n const record = this.getSingleRecord(dep, false);\n return this.resolveRecord(record, context);\n }\n\n private resolveAllRecords(\n records: readonly ProviderRecord[],\n context: ResolutionContext,\n ): unknown[] | Promise<unknown[]> {\n const values = records.map((record) => this.resolveRecord(record, context));\n\n if (values.some(isPromiseLike)) {\n return Promise.all(values);\n }\n\n return values;\n }\n\n private getCached(\n record: ProviderRecord,\n context: ResolutionContext,\n ): { readonly found: boolean; readonly value?: unknown } {\n const cache = this.cacheFor(record, context);\n\n if (cache === undefined || !cache.has(record)) {\n return { found: false };\n }\n\n return { found: true, value: cache.get(record) };\n }\n\n private setCached<T>(record: ProviderRecord, value: T, context: ResolutionContext): void {\n const cache = this.cacheFor(record, context);\n\n if (cache === undefined) {\n this.trackCreated(record, value, context);\n return;\n }\n\n if (!cache.has(record)) {\n cache.set(record, value);\n this.trackCreated(record, value, context);\n }\n }\n\n private cacheFor(\n record: ProviderRecord,\n context: ResolutionContext,\n ): Map<ProviderRecord, unknown> | undefined {\n switch (record.scope) {\n case \"singleton\":\n return this.root.singletonCache;\n case \"scoped\":\n return context.requestContainer.scopedCache;\n case \"resolution\":\n return context.resolutionCache;\n case \"transient\":\n return undefined;\n }\n }\n\n private trackCreated<T>(record: ProviderRecord, value: T, context: ResolutionContext): void {\n if (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) {\n return;\n }\n\n const owner = record.scope === \"singleton\" ? this.root : context.requestContainer;\n owner.created.push({ record, value, disposed: false });\n }\n\n private assertNoCycle(record: ProviderRecord, context: ResolutionContext): void {\n const existingIndex = context.stack.indexOf(record);\n\n if (existingIndex === -1) {\n return;\n }\n\n const cycle = [...context.stack.slice(existingIndex), record].map((entry) => entry.tokenName);\n throw new CircularDependencyError(cycle);\n }\n\n private assertLifetimeSafe(record: ProviderRecord, context: ResolutionContext): void {\n if (!this.strictScopes || record.leakSafe || context.stack.length === 0) {\n return;\n }\n\n const parent = context.stack.at(-1);\n\n if (parent === undefined) {\n return;\n }\n\n if (isLifetimeLeak(parent.scope, record.scope)) {\n throw new LifetimeLeakError(parent.tokenName, parent.scope, record.tokenName, record.scope);\n }\n }\n}\n\nfunction isDependencyObject(dep: DependencySpec): dep is {\n readonly token: InjectionToken;\n readonly optional?: boolean;\n readonly many?: boolean;\n} {\n return typeof dep === \"object\" && dep !== null && \"token\" in dep;\n}\n\nfunction isPromiseLike<T = unknown>(value: unknown): value is PromiseLike<T> {\n return (\n (typeof value === \"object\" || typeof value === \"function\") &&\n value !== null &&\n \"then\" in value &&\n typeof value.then === \"function\"\n );\n}\n\nfunction isLifetimeLeak(parentScope: Scope, childScope: Scope): boolean {\n if (parentScope === \"singleton\") {\n return childScope === \"scoped\" || childScope === \"resolution\" || childScope === \"transient\";\n }\n\n if (parentScope === \"scoped\") {\n return childScope === \"resolution\" || childScope === \"transient\";\n }\n\n return false;\n}\n\nasync function disposeValue(value: unknown, record: ProviderRecord): Promise<void> {\n if (record.dispose !== undefined) {\n await record.dispose(value);\n }\n\n if (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) {\n return;\n }\n\n const maybeDisposable = value as Record<PropertyKey, unknown>;\n\n if (\n asyncDisposeSymbol !== undefined &&\n typeof maybeDisposable[asyncDisposeSymbol] === \"function\"\n ) {\n await (maybeDisposable[asyncDisposeSymbol] as () => Promise<void> | void)();\n return;\n }\n\n if (disposeSymbol !== undefined && typeof maybeDisposable[disposeSymbol] === \"function\") {\n (maybeDisposable[disposeSymbol] as () => void)();\n return;\n }\n\n if (typeof maybeDisposable.dispose === \"function\") {\n await (maybeDisposable.dispose as () => Promise<void> | void)();\n return;\n }\n\n if (typeof maybeDisposable.destroy === \"function\") {\n await (maybeDisposable.destroy as () => Promise<void> | void)();\n }\n}\n","import type { Constructor, DependencySpec, Scope } from \"./types.js\";\n\nexport interface ModuleOptions {\n readonly name?: string;\n readonly deps?: readonly DependencySpec[];\n readonly scope?: Scope;\n}\n\nexport interface DefineModuleOptions extends ModuleOptions {\n readonly state?: readonly PropertyKey[];\n readonly actions?: readonly PropertyKey[];\n readonly computed?: readonly PropertyKey[];\n}\n\nexport interface ModuleMetadata {\n readonly kind: \"module\";\n name?: string;\n deps?: readonly DependencySpec[];\n scope?: Scope;\n readonly state: Set<PropertyKey>;\n readonly actions: Set<PropertyKey>;\n readonly computed: Set<PropertyKey>;\n}\n\nconst moduleMetadata = new WeakMap<Function, ModuleMetadata>();\n\nexport function defineModule<T extends Constructor>(\n target: T,\n options: DefineModuleOptions = {},\n): T {\n const metadata = ensureModuleMetadata(target);\n applyModuleOptions(metadata, options);\n addProperties(metadata.state, options.state);\n addProperties(metadata.actions, options.actions);\n addProperties(metadata.computed, options.computed);\n return target;\n}\n\nexport function getModuleMetadata(target: Function): ModuleMetadata | undefined {\n return moduleMetadata.get(target);\n}\n\nexport function addModuleState(target: Function, property: PropertyKey): void {\n ensureModuleMetadata(target).state.add(property);\n}\n\nexport function addModuleAction(target: Function, property: PropertyKey): void {\n ensureModuleMetadata(target).actions.add(property);\n}\n\nexport function addModuleComputed(target: Function, property: PropertyKey): void {\n ensureModuleMetadata(target).computed.add(property);\n}\n\nexport function applyModuleOptions(metadata: ModuleMetadata, options: ModuleOptions): void {\n if (options.name !== undefined) {\n metadata.name = options.name;\n }\n\n if (options.deps !== undefined) {\n metadata.deps = options.deps;\n }\n\n if (options.scope !== undefined) {\n metadata.scope = options.scope;\n }\n}\n\nexport function ensureModuleMetadata(target: Function): ModuleMetadata {\n let metadata = moduleMetadata.get(target);\n\n if (metadata !== undefined) {\n return metadata;\n }\n\n metadata = {\n kind: \"module\",\n state: new Set(),\n actions: new Set(),\n computed: new Set(),\n };\n moduleMetadata.set(target, metadata);\n return metadata;\n}\n\nfunction addProperties(target: Set<PropertyKey>, properties: readonly PropertyKey[] | undefined) {\n for (const property of properties ?? []) {\n target.add(property);\n }\n}\n","import { create as createCoactionStore, createReactiveTracker, type Store } from \"coaction\";\n\nimport { createContainer } from \"./container.js\";\nimport { CosystemError, DuplicateProviderError } from \"./errors.js\";\nimport { getModuleMetadata, type ModuleMetadata } from \"./metadata.js\";\nimport { provide } from \"./provider.js\";\nimport { tokenName } from \"./token.js\";\nimport type {\n ClassProvideOptions,\n Constructor,\n Container,\n InjectionToken,\n Provider,\n ProviderInput,\n ScopeOptions,\n} from \"./types.js\";\n\nexport interface EngineOptions {\n readonly patches?: boolean;\n readonly devtools?: boolean;\n readonly transport?: unknown;\n}\n\nexport interface AppDevOptions {\n readonly strictActions?: boolean;\n}\n\nexport interface CreateAppOptions {\n readonly providers?: readonly ProviderInput[];\n readonly plugins?: readonly Plugin[];\n readonly parent?: App | Container;\n readonly devOptions?: AppDevOptions;\n readonly engine?: EngineOptions;\n}\n\nexport interface InternalCreateAppOptions extends CreateAppOptions {\n readonly overrides?: readonly ProviderInput[];\n readonly testInspector?: MutableTestInspector;\n}\n\nexport interface AppState {\n readonly version: number;\n}\n\nexport interface AppScope {\n readonly container: Container;\n}\n\nexport interface App {\n readonly container: Container;\n readonly state: AppState;\n readonly started: boolean;\n readonly store: Store<RootState>;\n\n get<T>(token: InjectionToken<T>): T;\n getAsync<T>(token: InjectionToken<T>): Promise<T>;\n getAll<T>(token: InjectionToken<T>): T[];\n getModule<T>(token: InjectionToken<T>): T;\n getModuleByName<T = unknown>(name: string): T;\n watch<T>(\n read: () => T,\n listener: (value: T, previous: T) => void,\n options?: WatchOptions<T>,\n ): () => void;\n start(): Promise<void>;\n stop(): Promise<void>;\n dispose(): Promise<void>;\n createScope(options?: ScopeOptions): AppScope;\n}\n\nexport interface WatchOptions<T> {\n readonly equals?: (value: T, previous: T) => boolean;\n readonly immediate?: boolean;\n}\n\nexport interface Plugin {\n readonly name?: string;\n setup?(app: App): void | Promise<void>;\n onModuleCreated?(event: ModuleCreatedEvent): void;\n onActionStart?(event: ActionEvent): void;\n onActionEnd?(event: ActionEvent): void;\n onStateChange?(event: StateChangeEvent): void;\n onError?(error: unknown, context: ErrorContext): void;\n dispose?(): void | Promise<void>;\n}\n\nexport interface ModuleCreatedEvent {\n readonly name: string;\n readonly token: InjectionToken;\n readonly instance: unknown;\n}\n\nexport interface ActionEvent {\n readonly module: string;\n readonly method: string;\n readonly args: readonly unknown[];\n readonly startedAt: number;\n readonly endedAt?: number;\n readonly error?: unknown;\n}\n\nexport interface StateChangeEvent {\n readonly state: unknown;\n}\n\nexport interface ErrorContext {\n readonly phase: string;\n}\n\nexport interface TestAppInspector {\n getActions(): readonly ActionEvent[];\n getState(): unknown;\n getPatches(): readonly unknown[];\n clearActions(): void;\n clearPatches(): void;\n flushEffects(): Promise<void>;\n}\n\nexport interface MutableTestInspector extends TestAppInspector {\n recordAction(event: ActionEvent): void;\n recordPatch(patch: unknown): void;\n}\n\ntype RootState = Record<string, Record<PropertyKey, unknown>>;\n\ninterface ModuleBinding {\n readonly name: string;\n readonly token: InjectionToken;\n readonly instance: Record<PropertyKey, unknown>;\n readonly metadata: ModuleMetadata;\n readonly originalActions: Map<PropertyKey, (...args: unknown[]) => unknown>;\n readonly originalComputed: Map<PropertyKey, () => unknown>;\n activeDraft: Record<PropertyKey, unknown> | undefined;\n actionDepth: number;\n}\n\ninterface LifecycleModule {\n onInit?(): void | Promise<void>;\n onStart?(): void | Promise<void>;\n onStop?(): void | Promise<void>;\n onDispose?(): void | Promise<void>;\n}\n\nexport function createApp(options: CreateAppOptions = {}): App {\n return createAppInternal(options);\n}\n\nexport function createAppInternal(options: InternalCreateAppOptions = {}): App {\n const parent = isApp(options.parent) ? options.parent.container : options.parent;\n const container = parent === undefined ? createContainer() : createContainer({ parent });\n const moduleTokens: InjectionToken[] = [];\n\n for (const provider of options.providers ?? []) {\n const normalized = normalizeAppProvider(provider);\n container.provide(normalized.provider);\n\n if (normalized.moduleToken !== undefined) {\n moduleTokens.push(normalized.moduleToken);\n }\n }\n\n for (const override of options.overrides ?? []) {\n container.override(normalizeAppProvider(override).provider);\n }\n\n container.freeze();\n\n const modules = instantiateModules(container, moduleTokens);\n const rootState = createRootState(modules);\n const store = createCoactionStore(rootState, {\n name: \"cosystem\",\n sliceMode: \"single\",\n });\n const state: { version: number } = { version: 0 };\n const app = new RuntimeApp({\n container,\n devOptions: options.devOptions ?? {},\n modules,\n plugins: options.plugins ?? [],\n state,\n store,\n ...(options.testInspector === undefined ? {} : { testInspector: options.testInspector }),\n });\n\n app.bindModules();\n app.runModuleCreatedHooks();\n app.init();\n\n return app;\n}\n\nclass RuntimeApp implements App {\n readonly container: Container;\n readonly state: AppState;\n readonly store: Store<RootState>;\n\n private readonly devOptions: AppDevOptions;\n private readonly modules: ModuleBinding[];\n private readonly moduleByToken = new Map<InjectionToken, ModuleBinding>();\n private readonly moduleByName = new Map<string, ModuleBinding>();\n private readonly plugins: readonly Plugin[];\n private readonly testInspector: MutableTestInspector | undefined;\n private initPromise: Promise<void> = Promise.resolve();\n private isStarted = false;\n private isDisposed = false;\n\n constructor(options: {\n readonly container: Container;\n readonly devOptions: AppDevOptions;\n readonly modules: ModuleBinding[];\n readonly plugins: readonly Plugin[];\n readonly state: AppState;\n readonly store: Store<RootState>;\n readonly testInspector?: MutableTestInspector;\n }) {\n this.container = options.container;\n this.devOptions = options.devOptions;\n this.modules = options.modules;\n this.plugins = options.plugins;\n this.state = options.state;\n this.store = options.store;\n this.testInspector = options.testInspector;\n\n for (const moduleBinding of options.modules) {\n this.moduleByToken.set(moduleBinding.token, moduleBinding);\n this.moduleByName.set(moduleBinding.name, moduleBinding);\n }\n\n this.store.subscribe(() => {\n (this.state as { version: number }).version += 1;\n const state = this.store.getPureState();\n this.testInspector?.recordPatch(state);\n this.emitStateChange({ state });\n });\n }\n\n get started(): boolean {\n return this.isStarted;\n }\n\n get<T>(token: InjectionToken<T>): T {\n return this.container.get(token);\n }\n\n getAsync<T>(token: InjectionToken<T>): Promise<T> {\n return this.container.getAsync(token);\n }\n\n getAll<T>(token: InjectionToken<T>): T[] {\n return this.container.getAll(token);\n }\n\n getModule<T>(token: InjectionToken<T>): T {\n const value = this.get(token);\n\n if (!this.moduleByToken.has(token)) {\n throw new CosystemError(`${tokenName(token)} is not a CoSystem module.`);\n }\n\n return value;\n }\n\n getModuleByName<T = unknown>(name: string): T {\n const moduleBinding = this.moduleByName.get(name);\n\n if (moduleBinding === undefined) {\n throw new CosystemError(`${name} is not a CoSystem module.`);\n }\n\n return moduleBinding.instance as T;\n }\n\n watch<T>(\n read: () => T,\n listener: (value: T, previous: T) => void,\n options: WatchOptions<T> = {},\n ): () => void {\n const equals = options.equals ?? Object.is;\n const tracker = createReactiveTracker();\n let previous = tracker.track(read);\n\n if (options.immediate === true) {\n listener(previous, previous);\n }\n\n const publish = () => {\n const next = tracker.track(read);\n\n if (equals(next, previous)) {\n return;\n }\n\n const last = previous;\n previous = next;\n listener(next, last);\n };\n\n const unsubscribeStore = this.store.subscribe(publish);\n const unsubscribeTracker = tracker.subscribe(publish);\n\n return () => {\n unsubscribeStore();\n unsubscribeTracker();\n tracker.dispose();\n };\n }\n\n async start(): Promise<void> {\n if (this.isStarted) {\n return;\n }\n\n await this.initPromise;\n await this.runLifecycle(\"onStart\");\n this.isStarted = true;\n }\n\n async stop(): Promise<void> {\n if (!this.isStarted) {\n return;\n }\n\n await this.runLifecycle(\"onStop\", true);\n this.isStarted = false;\n }\n\n async dispose(): Promise<void> {\n if (this.isDisposed) {\n return;\n }\n\n await this.stop();\n await this.runLifecycle(\"onDispose\", true);\n await Promise.all(this.plugins.map((plugin) => plugin.dispose?.()));\n await this.container.dispose();\n this.store.destroy();\n this.isDisposed = true;\n }\n\n createScope(options?: ScopeOptions): AppScope {\n return {\n container: this.container.createScope(options),\n };\n }\n\n bindModules(): void {\n for (const moduleBinding of this.modules) {\n this.bindState(moduleBinding);\n this.bindComputed(moduleBinding);\n this.bindActions(moduleBinding);\n }\n }\n\n runModuleCreatedHooks(): void {\n for (const moduleBinding of this.modules) {\n const event: ModuleCreatedEvent = {\n name: moduleBinding.name,\n token: moduleBinding.token,\n instance: moduleBinding.instance,\n };\n\n for (const plugin of this.plugins) {\n plugin.onModuleCreated?.(event);\n }\n }\n }\n\n init(): void {\n this.initPromise = (async () => {\n await Promise.all(this.plugins.map((plugin) => plugin.setup?.(this)));\n await this.runLifecycle(\"onInit\");\n })();\n }\n\n private bindState(moduleBinding: ModuleBinding): void {\n for (const property of moduleBinding.metadata.state) {\n Object.defineProperty(moduleBinding.instance, property, {\n configurable: true,\n enumerable: true,\n get: () => this.readModuleState(moduleBinding, property),\n set: (value: unknown) => this.writeModuleState(moduleBinding, property, value),\n });\n }\n }\n\n private bindActions(moduleBinding: ModuleBinding): void {\n for (const property of moduleBinding.metadata.actions) {\n const action = getMethod(moduleBinding.instance, property);\n moduleBinding.originalActions.set(property, action);\n\n Object.defineProperty(moduleBinding.instance, property, {\n configurable: true,\n value: (...args: unknown[]) => this.runAction(moduleBinding, property, args),\n });\n }\n }\n\n private bindComputed(moduleBinding: ModuleBinding): void {\n for (const property of moduleBinding.metadata.computed) {\n const getter = getGetter(moduleBinding.instance, property);\n moduleBinding.originalComputed.set(property, getter);\n\n Object.defineProperty(moduleBinding.instance, property, {\n configurable: true,\n enumerable: true,\n get: () => getter.call(moduleBinding.instance),\n });\n }\n }\n\n private readModuleState(moduleBinding: ModuleBinding, property: PropertyKey): unknown {\n return this.store.getState()[moduleBinding.name]?.[property];\n }\n\n private writeModuleState(\n moduleBinding: ModuleBinding,\n property: PropertyKey,\n value: unknown,\n ): void {\n if (moduleBinding.activeDraft !== undefined) {\n moduleBinding.activeDraft[property] = value;\n return;\n }\n\n if (this.devOptions.strictActions === true && moduleBinding.actionDepth === 0) {\n throw new CosystemError(\n `Cannot write ${moduleBinding.name}.${String(property)} outside an action.`,\n );\n }\n\n this.store.setState((draft) => {\n draft[moduleBinding.name] ??= {};\n draft[moduleBinding.name]![property] = value;\n });\n }\n\n private runAction(\n moduleBinding: ModuleBinding,\n property: PropertyKey,\n args: readonly unknown[],\n ): unknown {\n const action = moduleBinding.originalActions.get(property);\n\n if (action === undefined) {\n throw new CosystemError(`${moduleBinding.name}.${String(property)} is not an action.`);\n }\n\n const event: ActionEvent = {\n args,\n method: String(property),\n module: moduleBinding.name,\n startedAt: Date.now(),\n };\n this.emitActionStart(event);\n\n let result: unknown;\n let error: unknown;\n\n try {\n moduleBinding.actionDepth += 1;\n this.store.setState((draft) => {\n const previousDraft = moduleBinding.activeDraft;\n moduleBinding.activeDraft = draft[moduleBinding.name] ?? {};\n draft[moduleBinding.name] = moduleBinding.activeDraft;\n\n try {\n result = action.apply(moduleBinding.instance, [...args]);\n } finally {\n moduleBinding.activeDraft = previousDraft;\n }\n });\n } catch (caught) {\n error = caught;\n } finally {\n moduleBinding.actionDepth -= 1;\n }\n\n const endedEvent: ActionEvent = {\n ...event,\n endedAt: Date.now(),\n ...(error === undefined ? {} : { error }),\n };\n this.testInspector?.recordAction(endedEvent);\n this.emitActionEnd(endedEvent);\n\n if (error !== undefined) {\n throw error;\n }\n\n return result;\n }\n\n private async runLifecycle(method: keyof LifecycleModule, reverse = false): Promise<void> {\n const modules = reverse ? this.modules.toReversed() : this.modules;\n\n for (const moduleBinding of modules) {\n const lifecycle = moduleBinding.instance as LifecycleModule;\n await lifecycle[method]?.();\n }\n }\n\n private emitActionStart(event: ActionEvent): void {\n for (const plugin of this.plugins) {\n plugin.onActionStart?.(event);\n }\n }\n\n private emitActionEnd(event: ActionEvent): void {\n for (const plugin of this.plugins) {\n plugin.onActionEnd?.(event);\n }\n }\n\n private emitStateChange(event: StateChangeEvent): void {\n for (const plugin of this.plugins) {\n plugin.onStateChange?.(event);\n }\n }\n}\n\nfunction normalizeAppProvider(provider: ProviderInput): {\n readonly provider: ProviderInput;\n readonly moduleToken?: InjectionToken;\n} {\n if (typeof provider === \"function\") {\n const metadata = getModuleMetadata(provider);\n\n if (metadata !== undefined) {\n return {\n provider: provide(provider, createModuleClassProviderOptions(provider, metadata)),\n moduleToken: provider,\n };\n }\n\n return { provider };\n }\n\n if (\"useClass\" in provider) {\n const metadata = getModuleMetadata(provider.useClass);\n\n if (metadata !== undefined) {\n return {\n provider: {\n ...provider,\n ...mergeModuleClassProviderOptions(provider, metadata),\n },\n moduleToken: provider.provide,\n };\n }\n }\n\n return { provider };\n}\n\nfunction createModuleClassProviderOptions<T>(\n useClass: Constructor<T>,\n metadata: ModuleMetadata,\n): ClassProvideOptions<T> {\n return {\n useClass,\n ...(metadata.deps === undefined ? {} : { deps: metadata.deps }),\n ...(metadata.scope === undefined ? {} : { scope: metadata.scope }),\n };\n}\n\nfunction mergeModuleClassProviderOptions<T>(\n provider: Provider<T>,\n metadata: ModuleMetadata,\n): Partial<ClassProvideOptions<T>> {\n return {\n ...(\"deps\" in provider || metadata.deps === undefined ? {} : { deps: metadata.deps }),\n ...(\"scope\" in provider || metadata.scope === undefined ? {} : { scope: metadata.scope }),\n };\n}\n\nfunction instantiateModules(container: Container, moduleTokens: readonly InjectionToken[]) {\n const modules: ModuleBinding[] = [];\n\n for (const moduleToken of moduleTokens) {\n const instance = container.get(moduleToken) as Record<PropertyKey, unknown>;\n const metadata = getModuleMetadata(instance.constructor);\n\n if (metadata === undefined) {\n continue;\n }\n\n const name = metadata.name ?? stableModuleName(moduleToken);\n\n if (modules.some((moduleBinding) => moduleBinding.name === name)) {\n throw new DuplicateProviderError(name);\n }\n\n modules.push({\n actionDepth: 0,\n activeDraft: undefined,\n instance,\n metadata,\n name,\n originalActions: new Map(),\n originalComputed: new Map(),\n token: moduleToken,\n });\n }\n\n return modules;\n}\n\nfunction createRootState(modules: readonly ModuleBinding[]): RootState {\n const rootState: RootState = {};\n\n for (const moduleBinding of modules) {\n const state: Record<PropertyKey, unknown> = {};\n\n for (const property of moduleBinding.metadata.state) {\n state[property] = moduleBinding.instance[property];\n }\n\n rootState[moduleBinding.name] = state;\n }\n\n return rootState;\n}\n\nfunction stableModuleName(token: InjectionToken): string {\n const name = tokenName(token);\n return `${name.slice(0, 1).toLowerCase()}${name.slice(1)}`;\n}\n\nfunction getMethod(\n instance: Record<PropertyKey, unknown>,\n property: PropertyKey,\n): (...args: unknown[]) => unknown {\n const descriptor = getDescriptor(instance, property);\n\n if (descriptor?.value === undefined || typeof descriptor.value !== \"function\") {\n throw new CosystemError(`${String(property)} is not a method.`);\n }\n\n return descriptor.value as (...args: unknown[]) => unknown;\n}\n\nfunction getGetter(instance: Record<PropertyKey, unknown>, property: PropertyKey): () => unknown {\n const descriptor = getDescriptor(instance, property);\n\n if (descriptor?.get === undefined) {\n throw new CosystemError(`${String(property)} is not a getter.`);\n }\n\n return descriptor.get;\n}\n\nfunction getDescriptor(\n instance: Record<PropertyKey, unknown>,\n property: PropertyKey,\n): PropertyDescriptor | undefined {\n let current: object | null = instance;\n\n while (current !== null) {\n const descriptor = Object.getOwnPropertyDescriptor(current, property);\n\n if (descriptor !== undefined) {\n return descriptor;\n }\n\n current = Object.getPrototypeOf(current);\n }\n\n return undefined;\n}\n\nfunction isApp(value: unknown): value is App {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"get\" in value &&\n \"start\" in value &&\n \"dispose\" in value\n );\n}\n","import {\n addModuleAction,\n addModuleComputed,\n addModuleState,\n applyModuleOptions,\n defineModule,\n ensureModuleMetadata,\n type ModuleOptions,\n} from \"./metadata.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport function module(options: ModuleOptions = {}) {\n return function moduleDecorator<T extends Constructor>(\n target: T,\n _context?: ClassDecoratorContext<T>,\n ): T {\n defineModule(target, options);\n return target;\n };\n}\n\nexport function state<This extends object, Value>(\n _value: ClassAccessorDecoratorTarget<This, Value>,\n context: ClassAccessorDecoratorContext<This, Value>,\n): void {\n if (context.kind !== \"accessor\") {\n throw new TypeError(\"@state only supports standard accessor decorators.\");\n }\n\n context.addInitializer(function initializeState(this: This) {\n addModuleState(this.constructor, context.name);\n });\n}\n\nexport function action<This extends object, Args extends unknown[], Return>(\n _value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n): void {\n if (context.kind !== \"method\") {\n throw new TypeError(\"@action only supports method decorators.\");\n }\n\n context.addInitializer(function initializeAction(this: This) {\n addModuleAction(this.constructor, context.name);\n });\n}\n\nexport function computed<This extends object, Value>(\n _value: (this: This) => Value,\n context: ClassGetterDecoratorContext<This, Value>,\n): void {\n if (context.kind !== \"getter\") {\n throw new TypeError(\"@computed only supports getter decorators.\");\n }\n\n context.addInitializer(function initializeComputed(this: This) {\n addModuleComputed(this.constructor, context.name);\n });\n}\n\nexport function effect<This extends object, Args extends unknown[], Return>(\n _value: (this: This, ...args: Args) => Return,\n _context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n): void {\n // Effect scheduling is intentionally deferred until the app runtime has real\n // lifecycle semantics for reactive side effects.\n}\n\nexport function moduleOptions(target: Constructor, options: ModuleOptions): void {\n applyModuleOptions(ensureModuleMetadata(target), options);\n}\n","import { createAppInternal, type MutableTestInspector } from \"./app.js\";\nimport type { ActionEvent, CreateAppOptions, TestAppInspector } from \"./app.js\";\nimport type { ProviderInput } from \"./types.js\";\n\nexport interface TestAppOptions extends Omit<CreateAppOptions, \"providers\"> {\n readonly providers?: readonly ProviderInput[];\n readonly overrides?: readonly ProviderInput[];\n readonly autoStart?: boolean;\n readonly strictActions?: boolean;\n}\n\nexport interface TestApp extends ReturnType<typeof createAppInternal> {\n readonly test: TestAppInspector;\n}\n\nexport interface AutoStartedTestAppOptions extends Omit<TestAppOptions, \"autoStart\"> {\n readonly autoStart: true;\n}\n\nexport interface ManualTestAppOptions extends Omit<TestAppOptions, \"autoStart\"> {\n readonly autoStart?: false;\n}\n\nexport function testApp(options: AutoStartedTestAppOptions): Promise<TestApp>;\nexport function testApp(options?: ManualTestAppOptions): TestApp;\nexport function testApp(options: TestAppOptions = {}): TestApp | Promise<TestApp> {\n const inspector = createTestInspector();\n const { autoStart, overrides, strictActions, ...createOptions } = options;\n const app = createAppInternal({\n ...createOptions,\n devOptions: {\n ...createOptions.devOptions,\n ...(strictActions === undefined ? {} : { strictActions }),\n },\n ...(overrides === undefined ? {} : { overrides }),\n testInspector: inspector,\n }) as TestApp;\n\n Object.defineProperty(app, \"test\", {\n configurable: false,\n enumerable: false,\n value: inspector,\n });\n\n if (autoStart === true) {\n return app.start().then(() => app);\n }\n\n return app;\n}\n\nfunction createTestInspector(): MutableTestInspector {\n const actions: ActionEvent[] = [];\n const patches: unknown[] = [];\n let lastState: unknown;\n\n return {\n clearActions() {\n actions.length = 0;\n },\n clearPatches() {\n patches.length = 0;\n },\n flushEffects() {\n return Promise.resolve();\n },\n getActions() {\n return actions;\n },\n getPatches() {\n return patches;\n },\n getState() {\n return lastState;\n },\n recordAction(event) {\n actions.push(event);\n },\n recordPatch(patch) {\n lastState = patch;\n patches.push(patch);\n },\n };\n}\n","import { CosystemError } from \"./errors.js\";\nimport { createApp, type App, type CreateAppOptions } from \"./app.js\";\n\nexport interface WorkerTransport {\n post(message: WorkerMessage): void;\n subscribe(listener: (message: WorkerMessage) => void): () => void;\n}\n\nexport type WorkerMessage =\n | WorkerCallMessage\n | WorkerResultMessage\n | WorkerStateMessage\n | WorkerReadyMessage;\n\nexport interface WorkerCallMessage {\n readonly id: number;\n readonly type: \"call\";\n readonly module: string;\n readonly method: string;\n readonly args: readonly unknown[];\n}\n\nexport interface WorkerResultMessage {\n readonly id: number;\n readonly type: \"result\";\n readonly value?: unknown;\n readonly error?: SerializedWorkerError;\n}\n\nexport interface WorkerStateMessage {\n readonly type: \"state\";\n readonly state: unknown;\n readonly version: number;\n}\n\nexport interface WorkerReadyMessage {\n readonly type: \"ready\";\n}\n\nexport interface SerializedWorkerError {\n readonly name: string;\n readonly message: string;\n readonly stack?: string;\n}\n\nexport interface CreateWorkerAppOptions extends CreateAppOptions {\n readonly transport: WorkerTransport;\n}\n\nexport interface WorkerAppHost {\n readonly app: App;\n dispose(): Promise<void>;\n}\n\nexport interface CreateWorkerClientOptions {\n readonly transport: WorkerTransport;\n}\n\nexport type AsyncMethodProxy<T extends object> = {\n readonly [Key in keyof T as T[Key] extends (...args: any[]) => unknown\n ? Key\n : never]: T[Key] extends (...args: infer Args) => infer Return\n ? (...args: Args) => Promise<Awaited<Return>>\n : never;\n};\n\nexport interface WorkerClient {\n readonly state: {\n readonly version: number;\n };\n getState(): unknown;\n call(module: string, method: string, ...args: readonly unknown[]): Promise<unknown>;\n module<T extends object>(name: string): AsyncMethodProxy<T>;\n subscribe(listener: (message: WorkerStateMessage) => void): () => void;\n dispose(): void;\n}\n\nexport function createWorkerApp(options: CreateWorkerAppOptions): WorkerAppHost {\n const { transport, ...appOptions } = options;\n const app = createApp(appOptions);\n const unsubscribeTransport = transport.subscribe((message) => {\n if (message.type !== \"call\") {\n return;\n }\n\n void handleCall(app, transport, message);\n });\n const unsubscribeStore = app.store.subscribe(() => {\n publishState(app, transport);\n });\n\n transport.post({ type: \"ready\" });\n publishState(app, transport);\n\n return {\n app,\n async dispose() {\n unsubscribeTransport();\n unsubscribeStore();\n await app.dispose();\n },\n };\n}\n\nexport function createWorkerClient(options: CreateWorkerClientOptions): WorkerClient {\n const { transport } = options;\n const listeners = new Set<(message: WorkerStateMessage) => void>();\n const pending = new Map<\n number,\n {\n readonly resolve: (value: unknown) => void;\n readonly reject: (error: unknown) => void;\n }\n >();\n const state = { version: 0 };\n let nextId = 1;\n let snapshot: unknown;\n\n const unsubscribe = transport.subscribe((message) => {\n if (message.type === \"state\") {\n state.version = message.version;\n snapshot = message.state;\n\n for (const listener of listeners) {\n listener(message);\n }\n\n return;\n }\n\n if (message.type !== \"result\") {\n return;\n }\n\n const entry = pending.get(message.id);\n\n if (entry === undefined) {\n return;\n }\n\n pending.delete(message.id);\n\n if (message.error !== undefined) {\n entry.reject(createRemoteError(message.error));\n return;\n }\n\n entry.resolve(message.value);\n });\n\n const client: WorkerClient = {\n state,\n call(module, method, ...args) {\n const id = nextId;\n nextId += 1;\n\n return new Promise((resolve, reject) => {\n pending.set(id, { reject, resolve });\n transport.post({\n args,\n id,\n method,\n module,\n type: \"call\",\n });\n });\n },\n dispose() {\n unsubscribe();\n\n for (const entry of pending.values()) {\n entry.reject(new CosystemError(\"Worker client disposed before response.\"));\n }\n\n pending.clear();\n listeners.clear();\n },\n getState() {\n return snapshot;\n },\n module<T extends object>(name: string): AsyncMethodProxy<T> {\n return new Proxy(\n {},\n {\n get(_target, property) {\n if (typeof property !== \"string\") {\n return undefined;\n }\n\n return (...args: readonly unknown[]) => client.call(name, property, ...args);\n },\n },\n ) as AsyncMethodProxy<T>;\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n\n return client;\n}\n\nexport function createMemoryWorkerTransportPair(): readonly [WorkerTransport, WorkerTransport] {\n const leftListeners = new Set<(message: WorkerMessage) => void>();\n const rightListeners = new Set<(message: WorkerMessage) => void>();\n\n return [\n createMemoryWorkerTransport(leftListeners, rightListeners),\n createMemoryWorkerTransport(rightListeners, leftListeners),\n ];\n}\n\nasync function handleCall(\n app: App,\n transport: WorkerTransport,\n message: WorkerCallMessage,\n): Promise<void> {\n try {\n const module = app.getModuleByName<Record<string, unknown>>(message.module);\n const method = module[message.method];\n\n if (typeof method !== \"function\") {\n throw new CosystemError(`${message.module}.${message.method} is not callable.`);\n }\n\n const value = await method.apply(module, message.args);\n transport.post({\n id: message.id,\n type: \"result\",\n value,\n });\n } catch (error) {\n transport.post({\n error: serializeError(error),\n id: message.id,\n type: \"result\",\n });\n }\n}\n\nfunction publishState(app: App, transport: WorkerTransport): void {\n transport.post({\n state: app.store.getPureState(),\n type: \"state\",\n version: app.state.version,\n });\n}\n\nfunction createMemoryWorkerTransport(\n inbox: Set<(message: WorkerMessage) => void>,\n outbox: Set<(message: WorkerMessage) => void>,\n): WorkerTransport {\n return {\n post(message) {\n for (const listener of outbox) {\n listener(message);\n }\n },\n subscribe(listener) {\n inbox.add(listener);\n return () => {\n inbox.delete(listener);\n };\n },\n };\n}\n\nfunction serializeError(error: unknown): SerializedWorkerError {\n if (error instanceof Error) {\n return {\n message: error.message,\n name: error.name,\n ...(error.stack === undefined ? {} : { stack: error.stack }),\n };\n }\n\n return {\n message: String(error),\n name: \"Error\",\n };\n}\n\nfunction createRemoteError(error: SerializedWorkerError): CosystemError {\n const remoteError = new CosystemError(`Remote worker error: ${error.message}`);\n remoteError.name = error.name;\n\n if (error.stack !== undefined) {\n remoteError.stack = error.stack;\n }\n\n return remoteError;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["createCoactionStore","#container"],"sources":["../src/errors.ts","../src/token.ts","../src/inject.ts","../src/provider.ts","../src/container.ts","../src/metadata.ts","../src/app.ts","../src/decorators.ts","../src/loggerPlugin.ts","../src/testApp.ts","../src/worker.ts"],"sourcesContent":["export class CosystemError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CosystemError\";\n }\n}\n\nexport class FrozenContainerError extends CosystemError {\n constructor() {\n super(\"Container provider graph is frozen and can no longer be mutated.\");\n this.name = \"FrozenContainerError\";\n }\n}\n\nexport class MissingProviderError extends CosystemError {\n constructor(token: string, path: readonly string[]) {\n super(\n [\n `Missing provider for ${token}.`,\n path.length > 0 ? \"Resolution path:\" : \"\",\n ...path.map((entry) => ` ${entry}`),\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n );\n this.name = \"MissingProviderError\";\n }\n}\n\nexport class DuplicateProviderError extends CosystemError {\n constructor(token: string) {\n super(`Duplicate non-multi provider for ${token}. Use override() or mark providers as multi.`);\n this.name = \"DuplicateProviderError\";\n }\n}\n\nexport class AmbiguousProviderError extends CosystemError {\n constructor(token: string) {\n super(`Multiple providers registered for ${token}. Use getAll() instead of get().`);\n this.name = \"AmbiguousProviderError\";\n }\n}\n\nexport class CircularDependencyError extends CosystemError {\n constructor(path: readonly string[]) {\n super([\"Circular dependency detected:\", ...path.map((entry) => ` ${entry}`)].join(\"\\n\"));\n this.name = \"CircularDependencyError\";\n }\n}\n\nexport class AsyncProviderInSyncResolutionError extends CosystemError {\n constructor(token: string) {\n super(`Provider for ${token} resolved asynchronously. Use getAsync() instead of get().`);\n this.name = \"AsyncProviderInSyncResolutionError\";\n }\n}\n\nexport class LifetimeLeakError extends CosystemError {\n constructor(parent: string, parentScope: string, child: string, childScope: string) {\n super(`${parent} (${parentScope}) cannot depend on ${child} (${childScope}) without leakSafe.`);\n this.name = \"LifetimeLeakError\";\n }\n}\n\nexport class InjectContextError extends CosystemError {\n constructor(token: string) {\n super(`${token} can only be injected while resolving a provider or running an app hook.`);\n this.name = \"InjectContextError\";\n }\n}\n","import type { InjectionToken, Token } from \"./types.js\";\n\nexport function token<T>(description?: string): Token<T> {\n const id = Symbol(description);\n\n if (description === undefined) {\n return { id };\n }\n\n return { id, description };\n}\n\nexport function tokenName(tokenValue: InjectionToken): string {\n if (typeof tokenValue === \"string\") {\n return tokenValue;\n }\n\n if (typeof tokenValue === \"symbol\") {\n return tokenValue.description ?? tokenValue.toString();\n }\n\n if (typeof tokenValue === \"function\") {\n return tokenValue.name || \"<anonymous class>\";\n }\n\n return tokenValue.description ?? tokenValue.id.description ?? tokenValue.id.toString();\n}\n","import { InjectContextError } from \"./errors.js\";\nimport { tokenName } from \"./token.js\";\nimport type { InjectionToken, ResolutionContext, TokenValue } from \"./types.js\";\n\nlet activeResolutionContext: ResolutionContext | undefined;\n\nexport function inject<TToken extends InjectionToken>(token: TToken): TokenValue<TToken> {\n if (activeResolutionContext === undefined) {\n throw new InjectContextError(tokenName(token));\n }\n\n return activeResolutionContext.requestContainer.get(token) as TokenValue<TToken>;\n}\n\nexport function runWithInjectContext<T>(context: ResolutionContext, callback: () => T): T {\n const previousContext = activeResolutionContext;\n activeResolutionContext = context;\n\n try {\n return callback();\n } finally {\n activeResolutionContext = previousContext;\n }\n}\n","import type {\n ClassProvideOptions,\n ClassProvider,\n DependencySpec,\n ExistingProvideOptions,\n ExistingProvider,\n FactoryProvideOptions,\n FactoryProvider,\n InjectionToken,\n ProviderInput,\n ProviderRecord,\n ResolvedDeps,\n ValueProvideOptions,\n ValueProvider,\n} from \"./types.js\";\nimport { tokenName } from \"./token.js\";\n\nexport function provide<T>(\n token: InjectionToken<T>,\n options: ClassProvideOptions<T>,\n): ClassProvider<T>;\n\nexport function provide<T>(\n token: InjectionToken<T>,\n options: ValueProvideOptions<T>,\n): ValueProvider<T>;\n\nexport function provide<T, const TDeps extends readonly DependencySpec[]>(\n token: InjectionToken<T>,\n options: FactoryProvideOptions<T, TDeps>,\n): FactoryProvider<T, TDeps>;\n\nexport function provide<T>(\n token: InjectionToken<T>,\n options: ExistingProvideOptions<T>,\n): ExistingProvider<T>;\n\nexport function provide<T>(\n providerToken: InjectionToken<T>,\n options:\n | ClassProvideOptions<T>\n | ValueProvideOptions<T>\n | FactoryProvideOptions<T, readonly DependencySpec[]>\n | ExistingProvideOptions<T>,\n): ClassProvider<T> | ValueProvider<T> | FactoryProvider<T> | ExistingProvider<T> {\n return {\n provide: providerToken,\n ...options,\n };\n}\n\nexport function normalizeProvider(input: ProviderInput): ProviderRecord {\n if (typeof input === \"function\") {\n return normalizeProvider({\n provide: input,\n useClass: input,\n });\n }\n\n const token = input.provide;\n const base = {\n token,\n tokenName: tokenName(token),\n multi: input.multi ?? false,\n leakSafe: input.leakSafe ?? false,\n };\n\n if (\"useClass\" in input) {\n return {\n ...base,\n provider: {\n kind: \"class\",\n useClass: input.useClass,\n },\n scope: input.scope ?? \"singleton\",\n deps:\n input.deps ??\n (input.useClass as { readonly inject?: readonly DependencySpec[] }).inject ??\n [],\n eager: input.eager ?? false,\n ...eraseDispose(input.dispose),\n };\n }\n\n if (\"useValue\" in input) {\n return {\n ...base,\n provider: {\n kind: \"value\",\n useValue: input.useValue,\n },\n scope: \"singleton\",\n deps: [],\n eager: true,\n ...eraseDispose(input.dispose),\n };\n }\n\n if (\"useFactory\" in input) {\n return {\n ...base,\n provider: {\n kind: \"factory\",\n useFactory: input.useFactory as (...deps: readonly unknown[]) => unknown,\n },\n scope: input.scope ?? \"singleton\",\n deps: input.deps ?? [],\n eager: input.eager ?? false,\n ...eraseDispose(input.dispose),\n };\n }\n\n return {\n ...base,\n provider: {\n kind: \"existing\",\n useExisting: input.useExisting,\n },\n scope: \"singleton\",\n deps: [input.useExisting],\n eager: false,\n };\n}\n\nexport type { ResolvedDeps };\n\nfunction eraseDispose<T>(dispose: ((value: T) => void | Promise<void>) | undefined): {\n readonly dispose?: (value: unknown) => void | Promise<void>;\n} {\n if (dispose === undefined) {\n return {};\n }\n\n return {\n dispose: dispose as (value: unknown) => void | Promise<void>,\n };\n}\n","import {\n AmbiguousProviderError,\n AsyncProviderInSyncResolutionError,\n CircularDependencyError,\n DuplicateProviderError,\n FrozenContainerError,\n LifetimeLeakError,\n MissingProviderError,\n} from \"./errors.js\";\nimport { runWithInjectContext } from \"./inject.js\";\nimport { normalizeProvider } from \"./provider.js\";\nimport { tokenName } from \"./token.js\";\nimport type {\n BuildOptions,\n Constructor,\n Container,\n ContainerImpl,\n ContainerOptions,\n DependencySpec,\n DisposableInstance,\n InjectionToken,\n ProviderInput,\n ProviderRecord,\n ResolutionContext,\n Scope,\n ScopeOptions,\n} from \"./types.js\";\n\nconst asyncDisposeSymbol: symbol | undefined = Symbol.asyncDispose;\nconst disposeSymbol: symbol | undefined = Symbol.dispose;\n\nexport function createContainer(options: ContainerOptions = {}): Container {\n return new RuntimeContainer(options);\n}\n\nclass RuntimeContainer implements ContainerImpl {\n readonly parent: ContainerImpl | undefined;\n readonly strictScopes: boolean;\n readonly records = new Map<InjectionToken, ProviderRecord[]>();\n readonly scopedCache = new Map<ProviderRecord, unknown>();\n readonly created: DisposableInstance[] = [];\n readonly root: ContainerImpl;\n readonly singletonCache = new Map<ProviderRecord, unknown>();\n frozen = false;\n\n constructor(options: ContainerOptions = {}) {\n this.parent = options.parent as ContainerImpl | undefined;\n this.strictScopes = options.strictScopes ?? this.parent?.strictScopes ?? true;\n this.root = this.parent?.root ?? this;\n }\n\n get<T>(token: InjectionToken<T>): T;\n get<T>(token: InjectionToken<T>, options: { readonly optional: true }): T | undefined;\n get<T>(token: InjectionToken<T>, options?: { readonly optional: true }): T | undefined {\n const record =\n options?.optional === true\n ? this.getSingleRecord(token, true)\n : this.getSingleRecord(token, false);\n\n if (record === undefined) {\n return undefined;\n }\n\n const context = this.createResolutionContext(\"sync\");\n const value = this.resolveRecord(record, context);\n\n if (isPromiseLike(value)) {\n throw new AsyncProviderInSyncResolutionError(record.tokenName);\n }\n\n return value as T;\n }\n\n getAll<T>(token: InjectionToken<T>): T[] {\n const records = this.getAllRecords(token);\n const context = this.createResolutionContext(\"sync\");\n\n return records.map((record) => {\n const value = this.resolveRecord(record, context);\n\n if (isPromiseLike(value)) {\n throw new AsyncProviderInSyncResolutionError(record.tokenName);\n }\n\n return value as T;\n });\n }\n\n async getAsync<T>(token: InjectionToken<T>): Promise<T> {\n const record = this.getSingleRecord(token, false);\n const context = this.createResolutionContext(\"async\");\n return (await this.resolveRecord(record, context)) as T;\n }\n\n has(token: InjectionToken): boolean {\n return this.findRecords(token).length > 0;\n }\n\n provide(provider: ProviderInput): void {\n this.assertMutable();\n const record = normalizeProvider(provider);\n const existing = this.records.get(record.token) ?? [];\n\n if (!record.multi && existing.some((candidate) => !candidate.multi)) {\n throw new DuplicateProviderError(record.tokenName);\n }\n\n this.records.set(record.token, [...existing, record]);\n }\n\n override(provider: ProviderInput): void {\n this.assertMutable();\n const record = normalizeProvider(provider);\n const existing = this.records.get(record.token) ?? [];\n const kept = existing.filter((candidate) => candidate.multi && !record.multi);\n this.records.set(record.token, [...kept, record]);\n }\n\n createScope(options: ScopeOptions = {}): Container {\n return new RuntimeContainer({\n parent: this,\n strictScopes: options.strictScopes ?? this.strictScopes,\n });\n }\n\n build<T>(target: Constructor<T>, options: BuildOptions = {}): T {\n const deps =\n options.deps ?? (target as { readonly inject?: readonly DependencySpec[] }).inject ?? [];\n const context = this.createResolutionContext(\"sync\");\n const values = this.resolveDependencies(deps, context);\n\n if (isPromiseLike(values)) {\n throw new AsyncProviderInSyncResolutionError(target.name);\n }\n\n return Reflect.construct(target, values) as T;\n }\n\n freeze(): void {\n this.frozen = true;\n }\n\n async dispose(): Promise<void> {\n const errors: unknown[] = [];\n\n for (const entry of [...this.created].toReversed()) {\n if (entry.disposed) {\n continue;\n }\n\n entry.disposed = true;\n\n try {\n await disposeValue(entry.value, entry.record);\n } catch (error) {\n errors.push(error);\n }\n }\n\n this.created.length = 0;\n this.scopedCache.clear();\n\n if (this.root === this) {\n this.singletonCache.clear();\n }\n\n if (errors.length > 0) {\n throw new AggregateError(errors, \"One or more providers failed to dispose.\");\n }\n }\n\n private assertMutable(): void {\n if (this.frozen) {\n throw new FrozenContainerError();\n }\n }\n\n private createResolutionContext(mode: \"sync\" | \"async\"): ResolutionContext {\n return {\n stack: [],\n resolutionCache: new Map(),\n mode,\n requestContainer: this,\n };\n }\n\n private getSingleRecord(token: InjectionToken, optional: false): ProviderRecord;\n private getSingleRecord(token: InjectionToken, optional: true): ProviderRecord | undefined;\n private getSingleRecord(token: InjectionToken, optional: boolean): ProviderRecord | undefined {\n const records = this.findRecords(token);\n\n if (records.length === 0) {\n if (optional) {\n return undefined;\n }\n\n throw new MissingProviderError(tokenName(token), []);\n }\n\n const nonMultiRecords = records.filter((record) => !record.multi);\n\n if (nonMultiRecords.length === 1) {\n return nonMultiRecords[0]!;\n }\n\n if (records.length === 1) {\n return records[0]!;\n }\n\n throw new AmbiguousProviderError(tokenName(token));\n }\n\n private getAllRecords(token: InjectionToken): ProviderRecord[] {\n return this.getAllRecordsFromHierarchy(token);\n }\n\n findRecords(token: InjectionToken): ProviderRecord[] {\n const localRecords = this.records.get(token);\n\n if (localRecords !== undefined && localRecords.length > 0) {\n return localRecords;\n }\n\n return this.parent?.findRecords(token) ?? [];\n }\n\n getAllRecordsFromHierarchy(token: InjectionToken): ProviderRecord[] {\n const parentRecords = this.parent?.getAllRecordsFromHierarchy(token) ?? [];\n const localRecords = this.records.get(token) ?? [];\n return [...parentRecords, ...localRecords];\n }\n\n private resolveRecord(\n record: ProviderRecord,\n context: ResolutionContext,\n ): unknown | Promise<unknown> {\n const cached = this.getCached(record, context);\n\n if (cached.found) {\n return cached.value;\n }\n\n this.assertNoCycle(record, context);\n this.assertLifetimeSafe(record, context);\n\n context.stack.push(record);\n\n const finalize = (value: unknown): unknown => {\n context.stack.pop();\n this.setCached(record, value, context);\n return value;\n };\n\n const fail = (error: unknown): never => {\n context.stack.pop();\n throw error;\n };\n\n try {\n const value = this.createValue(record, context);\n\n if (isPromiseLike(value)) {\n if (context.mode === \"sync\") {\n throw new AsyncProviderInSyncResolutionError(record.tokenName);\n }\n\n return Promise.resolve(value).then(finalize, fail);\n }\n\n return finalize(value);\n } catch (error) {\n return fail(error);\n }\n }\n\n private createValue(\n record: ProviderRecord,\n context: ResolutionContext,\n ): unknown | Promise<unknown> {\n switch (record.provider.kind) {\n case \"class\": {\n const provider = record.provider;\n const deps = this.resolveDependencies(record.deps, context);\n\n if (isPromiseLike(deps)) {\n return Promise.resolve(deps).then((values) =>\n Reflect.construct(provider.useClass, values),\n );\n }\n\n return Reflect.construct(provider.useClass, deps);\n }\n\n case \"value\":\n return record.provider.useValue;\n\n case \"factory\": {\n const provider = record.provider;\n const deps = this.resolveDependencies(record.deps, context);\n\n if (isPromiseLike(deps)) {\n return Promise.resolve(deps).then((values) =>\n runWithInjectContext(context, () => provider.useFactory(...values)),\n );\n }\n\n return runWithInjectContext(context, () => provider.useFactory(...deps));\n }\n\n case \"existing\":\n return this.resolveDependency(record.provider.useExisting, context);\n }\n }\n\n private resolveDependencies(\n deps: readonly DependencySpec[],\n context: ResolutionContext,\n ): unknown[] | Promise<unknown[]> {\n const values: unknown[] = Array.from({ length: deps.length });\n const asyncValues: Promise<unknown>[] = [];\n\n for (const [index, dep] of deps.entries()) {\n const value = this.resolveDependency(dep, context);\n\n if (isPromiseLike(value)) {\n asyncValues.push(\n Promise.resolve(value).then((resolved) => {\n values[index] = resolved;\n return resolved;\n }),\n );\n } else {\n values[index] = value;\n }\n }\n\n if (asyncValues.length === 0) {\n return values;\n }\n\n return Promise.all(asyncValues).then(() => values);\n }\n\n private resolveDependency(\n dep: DependencySpec,\n context: ResolutionContext,\n ): unknown | Promise<unknown> {\n if (isDependencyObject(dep)) {\n if (dep.many === true) {\n const records = this.getAllRecords(dep.token);\n return this.resolveAllRecords(records, context);\n }\n\n const record =\n dep.optional === true\n ? this.getSingleRecord(dep.token, true)\n : this.getRequiredRecord(dep.token, context);\n\n if (record === undefined) {\n return undefined;\n }\n\n return this.resolveRecord(record, context);\n }\n\n const record = this.getRequiredRecord(dep, context);\n return this.resolveRecord(record, context);\n }\n\n private getRequiredRecord(token: InjectionToken, context: ResolutionContext): ProviderRecord {\n const record = this.getSingleRecord(token, true);\n\n if (record === undefined) {\n throw new MissingProviderError(\n tokenName(token),\n context.stack.map((entry) => entry.tokenName),\n );\n }\n\n return record;\n }\n\n private resolveAllRecords(\n records: readonly ProviderRecord[],\n context: ResolutionContext,\n ): unknown[] | Promise<unknown[]> {\n const values = records.map((record) => this.resolveRecord(record, context));\n\n if (values.some(isPromiseLike)) {\n return Promise.all(values);\n }\n\n return values;\n }\n\n private getCached(\n record: ProviderRecord,\n context: ResolutionContext,\n ): { readonly found: boolean; readonly value?: unknown } {\n const cache = this.cacheFor(record, context);\n\n if (cache === undefined || !cache.has(record)) {\n return { found: false };\n }\n\n return { found: true, value: cache.get(record) };\n }\n\n private setCached<T>(record: ProviderRecord, value: T, context: ResolutionContext): void {\n const cache = this.cacheFor(record, context);\n\n if (cache === undefined) {\n this.trackCreated(record, value, context);\n return;\n }\n\n if (!cache.has(record)) {\n cache.set(record, value);\n this.trackCreated(record, value, context);\n }\n }\n\n private cacheFor(\n record: ProviderRecord,\n context: ResolutionContext,\n ): Map<ProviderRecord, unknown> | undefined {\n switch (record.scope) {\n case \"singleton\":\n return this.root.singletonCache;\n case \"scoped\":\n return context.requestContainer.scopedCache;\n case \"resolution\":\n return context.resolutionCache;\n case \"transient\":\n return undefined;\n }\n }\n\n private trackCreated<T>(record: ProviderRecord, value: T, context: ResolutionContext): void {\n if (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) {\n return;\n }\n\n const owner = record.scope === \"singleton\" ? this.root : context.requestContainer;\n owner.created.push({ record, value, disposed: false });\n }\n\n private assertNoCycle(record: ProviderRecord, context: ResolutionContext): void {\n const existingIndex = context.stack.indexOf(record);\n\n if (existingIndex === -1) {\n return;\n }\n\n const cycle = [...context.stack.slice(existingIndex), record].map((entry) => entry.tokenName);\n throw new CircularDependencyError(cycle);\n }\n\n private assertLifetimeSafe(record: ProviderRecord, context: ResolutionContext): void {\n if (!this.strictScopes || record.leakSafe || context.stack.length === 0) {\n return;\n }\n\n const parent = context.stack.at(-1);\n\n if (parent === undefined) {\n return;\n }\n\n if (isLifetimeLeak(parent.scope, record.scope)) {\n throw new LifetimeLeakError(parent.tokenName, parent.scope, record.tokenName, record.scope);\n }\n }\n}\n\nfunction isDependencyObject(dep: DependencySpec): dep is {\n readonly token: InjectionToken;\n readonly optional?: boolean;\n readonly many?: boolean;\n} {\n return typeof dep === \"object\" && dep !== null && \"token\" in dep;\n}\n\nfunction isPromiseLike<T = unknown>(value: unknown): value is PromiseLike<T> {\n return (\n (typeof value === \"object\" || typeof value === \"function\") &&\n value !== null &&\n \"then\" in value &&\n typeof value.then === \"function\"\n );\n}\n\nfunction isLifetimeLeak(parentScope: Scope, childScope: Scope): boolean {\n if (parentScope === \"singleton\") {\n return childScope === \"scoped\" || childScope === \"resolution\" || childScope === \"transient\";\n }\n\n if (parentScope === \"scoped\") {\n return childScope === \"resolution\" || childScope === \"transient\";\n }\n\n return false;\n}\n\nasync function disposeValue(value: unknown, record: ProviderRecord): Promise<void> {\n if (record.dispose !== undefined) {\n await record.dispose(value);\n }\n\n if (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) {\n return;\n }\n\n const maybeDisposable = value as Record<PropertyKey, unknown>;\n\n if (\n asyncDisposeSymbol !== undefined &&\n typeof maybeDisposable[asyncDisposeSymbol] === \"function\"\n ) {\n await (maybeDisposable[asyncDisposeSymbol] as () => Promise<void> | void)();\n return;\n }\n\n if (disposeSymbol !== undefined && typeof maybeDisposable[disposeSymbol] === \"function\") {\n (maybeDisposable[disposeSymbol] as () => void)();\n return;\n }\n\n if (typeof maybeDisposable.dispose === \"function\") {\n await (maybeDisposable.dispose as () => Promise<void> | void)();\n return;\n }\n\n if (typeof maybeDisposable.destroy === \"function\") {\n await (maybeDisposable.destroy as () => Promise<void> | void)();\n }\n}\n","import type { Constructor, DependencySpec, Scope } from \"./types.js\";\n\nexport interface ModuleOptions {\n readonly name?: string;\n readonly deps?: readonly DependencySpec[];\n readonly scope?: Scope;\n}\n\nexport interface DefineModuleOptions extends ModuleOptions {\n readonly state?: readonly PropertyKey[];\n readonly actions?: readonly PropertyKey[];\n readonly computed?: readonly PropertyKey[];\n}\n\nexport interface ModuleMetadata {\n readonly kind: \"module\";\n name?: string;\n deps?: readonly DependencySpec[];\n scope?: Scope;\n readonly state: Set<PropertyKey>;\n readonly actions: Set<PropertyKey>;\n readonly computed: Set<PropertyKey>;\n}\n\nconst moduleMetadata = new WeakMap<Function, ModuleMetadata>();\nconst moduleMetadataKey = Symbol.for(\"@cosystem/core/moduleMetadata\");\nconst symbolMetadataKey: symbol | undefined = (\n Symbol as SymbolConstructor & { readonly metadata?: symbol }\n).metadata;\n\nexport interface MetadataContext {\n readonly metadata?: Record<PropertyKey, unknown> | undefined;\n}\n\nexport function defineModule<T extends Constructor>(\n target: T,\n options: DefineModuleOptions = {},\n context?: MetadataContext,\n): T {\n const metadata = ensureModuleMetadata(target);\n mergeModuleMetadata(metadata, readContextMetadata(context));\n applyModuleOptions(metadata, options);\n addProperties(metadata.state, options.state);\n addProperties(metadata.actions, options.actions);\n writeContextMetadata(context, metadata);\n addProperties(metadata.computed, options.computed);\n return target;\n}\n\nexport function getModuleMetadata(target: Function): ModuleMetadata | undefined {\n const existing = moduleMetadata.get(target);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const metadata = readSymbolMetadata(target);\n\n if (metadata === undefined) {\n return undefined;\n }\n\n moduleMetadata.set(target, metadata);\n return metadata;\n}\n\nexport function addModuleState(target: Function, property: PropertyKey): void {\n ensureModuleMetadata(target).state.add(property);\n}\n\nexport function addModuleAction(target: Function, property: PropertyKey): void {\n ensureModuleMetadata(target).actions.add(property);\n}\n\nexport function addModuleComputed(target: Function, property: PropertyKey): void {\n ensureModuleMetadata(target).computed.add(property);\n}\n\nexport function applyModuleOptions(metadata: ModuleMetadata, options: ModuleOptions): void {\n if (options.name !== undefined) {\n metadata.name = options.name;\n }\n\n if (options.deps !== undefined) {\n metadata.deps = options.deps;\n }\n\n if (options.scope !== undefined) {\n metadata.scope = options.scope;\n }\n}\n\nexport function ensureModuleMetadata(target: Function): ModuleMetadata {\n let metadata = moduleMetadata.get(target);\n\n if (metadata !== undefined) {\n return metadata;\n }\n\n metadata = {\n kind: \"module\",\n state: new Set(),\n actions: new Set(),\n computed: new Set(),\n };\n moduleMetadata.set(target, metadata);\n return metadata;\n}\n\nexport function ensureContextModuleMetadata(\n context: MetadataContext | undefined,\n): ModuleMetadata | undefined {\n if (context?.metadata === undefined) {\n return undefined;\n }\n\n const existing = readContextMetadata(context);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const metadata = createModuleMetadata();\n writeContextMetadata(context, metadata);\n return metadata;\n}\n\nfunction addProperties(target: Set<PropertyKey>, properties: readonly PropertyKey[] | undefined) {\n for (const property of properties ?? []) {\n target.add(property);\n }\n}\n\nfunction createModuleMetadata(): ModuleMetadata {\n return {\n kind: \"module\",\n state: new Set(),\n actions: new Set(),\n computed: new Set(),\n };\n}\n\nfunction readContextMetadata(context: MetadataContext | undefined): ModuleMetadata | undefined {\n const value = context?.metadata?.[moduleMetadataKey];\n return isModuleMetadata(value) ? value : undefined;\n}\n\nfunction writeContextMetadata(\n context: MetadataContext | undefined,\n metadata: ModuleMetadata,\n): void {\n if (context?.metadata === undefined) {\n return;\n }\n\n context.metadata[moduleMetadataKey] = metadata;\n}\n\nfunction readSymbolMetadata(target: Function): ModuleMetadata | undefined {\n if (symbolMetadataKey === undefined) {\n return undefined;\n }\n\n const metadata = (target as unknown as Record<PropertyKey, unknown>)[symbolMetadataKey];\n\n if (metadata === undefined || metadata === null || typeof metadata !== \"object\") {\n return undefined;\n }\n\n const value = (metadata as Record<PropertyKey, unknown>)[moduleMetadataKey];\n return isModuleMetadata(value) ? value : undefined;\n}\n\nfunction mergeModuleMetadata(target: ModuleMetadata, source: ModuleMetadata | undefined): void {\n if (source === undefined || source === target) {\n return;\n }\n\n applyModuleOptions(target, source);\n addProperties(target.state, [...source.state]);\n addProperties(target.actions, [...source.actions]);\n addProperties(target.computed, [...source.computed]);\n}\n\nfunction isModuleMetadata(value: unknown): value is ModuleMetadata {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as ModuleMetadata).kind === \"module\" &&\n value instanceof Object &&\n (value as ModuleMetadata).state instanceof Set &&\n (value as ModuleMetadata).actions instanceof Set &&\n (value as ModuleMetadata).computed instanceof Set\n );\n}\n","import { create as createCoactionStore, createReactiveTracker, type Store } from \"coaction\";\n\nimport { createContainer } from \"./container.js\";\nimport { CosystemError, DuplicateProviderError } from \"./errors.js\";\nimport { runWithInjectContext } from \"./inject.js\";\nimport { getModuleMetadata, type ModuleMetadata } from \"./metadata.js\";\nimport { provide } from \"./provider.js\";\nimport { tokenName } from \"./token.js\";\nimport type {\n ClassProvideOptions,\n Constructor,\n Container,\n InjectionToken,\n Provider,\n ProviderInput,\n ResolutionContext,\n ScopeOptions,\n} from \"./types.js\";\n\nexport interface EngineOptions {\n readonly patches?: boolean;\n readonly devtools?: boolean;\n readonly transport?: unknown;\n}\n\nexport interface AppDevOptions {\n readonly strictActions?: boolean;\n}\n\nexport interface CreateAppOptions {\n readonly providers?: readonly ProviderInput[];\n readonly plugins?: readonly Plugin[];\n readonly parent?: App | Container;\n readonly devOptions?: AppDevOptions;\n readonly engine?: EngineOptions;\n}\n\nexport interface InternalCreateAppOptions extends CreateAppOptions {\n readonly overrides?: readonly ProviderInput[];\n readonly testInspector?: MutableTestInspector;\n}\n\nexport interface AppState {\n readonly version: number;\n}\n\nexport interface AppScope {\n readonly container: Container;\n}\n\nexport interface App {\n readonly state: AppState;\n readonly started: boolean;\n readonly store: Store<RootState>;\n\n get<T>(token: InjectionToken<T>): T;\n getAsync<T>(token: InjectionToken<T>): Promise<T>;\n getAll<T>(token: InjectionToken<T>): T[];\n getModule<T>(token: InjectionToken<T>): T;\n getModuleByName<T = unknown>(name: string): T;\n watch<T>(\n read: () => T,\n listener: (value: T, previous: T) => void,\n options?: WatchOptions<T>,\n ): () => void;\n start(): Promise<void>;\n stop(): Promise<void>;\n dispose(): Promise<void>;\n createScope(options?: ScopeOptions): AppScope;\n}\n\nexport interface WatchOptions<T> {\n readonly equals?: (value: T, previous: T) => boolean;\n readonly immediate?: boolean;\n}\n\nexport interface Plugin {\n readonly name?: string;\n setup?(app: App): void | Promise<void>;\n onModuleCreated?(event: ModuleCreatedEvent): void;\n onActionStart?(event: ActionEvent): void;\n onActionEnd?(event: ActionEvent): void;\n onPatch?(event: PatchEvent): void;\n onStateChange?(event: StateChangeEvent): void;\n onError?(error: unknown, context: ErrorContext): void;\n dispose?(): void | Promise<void>;\n}\n\nexport interface ModuleCreatedEvent {\n readonly name: string;\n readonly token: InjectionToken;\n readonly instance: unknown;\n}\n\nexport interface ActionEvent {\n readonly module: string;\n readonly method: string;\n readonly args: readonly unknown[];\n readonly startedAt: number;\n readonly endedAt?: number;\n readonly error?: unknown;\n}\n\nexport interface StateChangeEvent {\n readonly state: unknown;\n}\n\nexport interface PatchEvent {\n readonly patches: readonly unknown[];\n readonly inversePatches: readonly unknown[];\n}\n\nexport interface ErrorContext {\n readonly phase: string;\n}\n\nexport interface TestAppInspector {\n getActions(): readonly ActionEvent[];\n getState(): unknown;\n getPatches(): readonly unknown[];\n clearActions(): void;\n clearPatches(): void;\n flushEffects(): Promise<void>;\n}\n\nexport interface MutableTestInspector extends TestAppInspector {\n recordAction(event: ActionEvent): void;\n recordPatch(patch: unknown): void;\n recordState(state: unknown): void;\n}\n\ntype RootState = Record<string, Record<PropertyKey, unknown>>;\ntype StoreSetState = Store<RootState>[\"setState\"];\n\ninterface CoactionStoreOptions {\n readonly name: string;\n readonly sliceMode: \"single\";\n readonly enablePatches?: boolean;\n readonly transport?: unknown;\n}\n\ninterface ModuleBinding {\n readonly name: string;\n readonly token: InjectionToken;\n readonly instance: Record<PropertyKey, unknown>;\n readonly metadata: ModuleMetadata;\n readonly originalActions: Map<PropertyKey, (...args: unknown[]) => unknown>;\n readonly originalComputed: Map<PropertyKey, () => unknown>;\n activeDraft: Record<PropertyKey, unknown> | undefined;\n actionDepth: number;\n}\n\ninterface RuntimeModuleMetadata {\n readonly app: App;\n readonly name: string;\n readonly token: InjectionToken;\n}\n\ninterface LifecycleModule {\n onInit?(): void | Promise<void>;\n onStart?(): void | Promise<void>;\n onStop?(): void | Promise<void>;\n onDispose?(): void | Promise<void>;\n}\n\nconst runtimeModuleMetadataKey = Symbol.for(\"@cosystem/core/runtimeModule\");\nconst appContainerMap = new WeakMap<App, Container>();\n\nexport function createApp(options: CreateAppOptions = {}): App {\n return createAppInternal(options);\n}\n\nexport function createAppInternal(options: InternalCreateAppOptions = {}): App {\n const parent = isApp(options.parent) ? getAppContainer(options.parent) : options.parent;\n const container = parent === undefined ? createContainer() : createContainer({ parent });\n const moduleTokens: InjectionToken[] = [];\n\n for (const provider of options.providers ?? []) {\n const normalized = normalizeAppProvider(provider);\n container.provide(normalized.provider);\n\n if (normalized.moduleToken !== undefined) {\n moduleTokens.push(normalized.moduleToken);\n }\n }\n\n for (const override of options.overrides ?? []) {\n container.override(normalizeAppProvider(override).provider);\n }\n\n container.freeze();\n\n const modules = instantiateModules(container, moduleTokens);\n const rootState = createRootState(modules);\n const store = createCoactionStore(\n rootState,\n createStoreOptions(options.engine, shouldEnablePatches(options)) as never,\n );\n const state: { version: number } = { version: 0 };\n const app = new RuntimeApp({\n container,\n devOptions: options.devOptions ?? {},\n modules,\n plugins: options.plugins ?? [],\n state,\n store,\n ...(options.testInspector === undefined ? {} : { testInspector: options.testInspector }),\n });\n\n app.bindModules();\n app.attachRuntimeMetadata();\n app.runModuleCreatedHooks();\n app.init();\n appContainerMap.set(app, container);\n\n return app;\n}\n\nclass RuntimeApp implements App {\n readonly state: AppState;\n readonly store: Store<RootState>;\n\n readonly #container: Container;\n private readonly devOptions: AppDevOptions;\n private readonly modules: ModuleBinding[];\n private readonly moduleByToken = new Map<InjectionToken, ModuleBinding>();\n private readonly moduleByName = new Map<string, ModuleBinding>();\n private readonly plugins: readonly Plugin[];\n private readonly testInspector: MutableTestInspector | undefined;\n private initPromise: Promise<void> = Promise.resolve();\n private isStarted = false;\n private isDisposed = false;\n\n constructor(options: {\n readonly container: Container;\n readonly devOptions: AppDevOptions;\n readonly modules: ModuleBinding[];\n readonly plugins: readonly Plugin[];\n readonly state: AppState;\n readonly store: Store<RootState>;\n readonly testInspector?: MutableTestInspector;\n }) {\n this.#container = options.container;\n this.devOptions = options.devOptions;\n this.modules = options.modules;\n this.plugins = options.plugins;\n this.state = options.state;\n this.store = options.store;\n this.testInspector = options.testInspector;\n\n for (const moduleBinding of options.modules) {\n this.moduleByToken.set(moduleBinding.token, moduleBinding);\n this.moduleByName.set(moduleBinding.name, moduleBinding);\n }\n\n this.wrapStoreSetState();\n\n this.store.subscribe(() => {\n (this.state as { version: number }).version += 1;\n const state = this.store.getPureState();\n this.testInspector?.recordState(state);\n this.emitStateChange({ state });\n });\n }\n\n get started(): boolean {\n return this.isStarted;\n }\n\n get<T>(token: InjectionToken<T>): T {\n return this.#container.get(token);\n }\n\n getAsync<T>(token: InjectionToken<T>): Promise<T> {\n return this.#container.getAsync(token);\n }\n\n getAll<T>(token: InjectionToken<T>): T[] {\n return this.#container.getAll(token);\n }\n\n getModule<T>(token: InjectionToken<T>): T {\n const value = this.get(token);\n\n if (!this.moduleByToken.has(token)) {\n throw new CosystemError(`${tokenName(token)} is not a CoSystem module.`);\n }\n\n return value;\n }\n\n getModuleByName<T = unknown>(name: string): T {\n const moduleBinding = this.moduleByName.get(name);\n\n if (moduleBinding === undefined) {\n throw new CosystemError(`${name} is not a CoSystem module.`);\n }\n\n return moduleBinding.instance as T;\n }\n\n watch<T>(\n read: () => T,\n listener: (value: T, previous: T) => void,\n options: WatchOptions<T> = {},\n ): () => void {\n const equals = options.equals ?? Object.is;\n const tracker = createReactiveTracker();\n let previous = tracker.track(read);\n\n if (options.immediate === true) {\n listener(previous, previous);\n }\n\n const publish = () => {\n const next = tracker.track(read);\n\n if (equals(next, previous)) {\n return;\n }\n\n const last = previous;\n previous = next;\n listener(next, last);\n };\n\n const unsubscribeStore = this.store.subscribe(publish);\n const unsubscribeTracker = tracker.subscribe(publish);\n\n return () => {\n unsubscribeStore();\n unsubscribeTracker();\n tracker.dispose();\n };\n }\n\n async start(): Promise<void> {\n if (this.isStarted) {\n return;\n }\n\n await this.initPromise;\n\n try {\n await this.runLifecycle(\"onStart\");\n this.isStarted = true;\n } catch (error) {\n this.emitError(error, { phase: \"start\" });\n throw error;\n }\n }\n\n async stop(): Promise<void> {\n if (!this.isStarted) {\n return;\n }\n\n try {\n await this.runLifecycle(\"onStop\", true);\n this.isStarted = false;\n } catch (error) {\n this.emitError(error, { phase: \"stop\" });\n throw error;\n }\n }\n\n async dispose(): Promise<void> {\n if (this.isDisposed) {\n return;\n }\n\n await this.stop();\n\n try {\n await this.runLifecycle(\"onDispose\", true);\n await Promise.all(this.plugins.map((plugin) => plugin.dispose?.()));\n await this.#container.dispose();\n this.store.destroy();\n this.isDisposed = true;\n } catch (error) {\n this.emitError(error, { phase: \"dispose\" });\n throw error;\n }\n }\n\n createScope(options?: ScopeOptions): AppScope {\n return {\n container: this.#container.createScope(options),\n };\n }\n\n bindModules(): void {\n for (const moduleBinding of this.modules) {\n this.bindState(moduleBinding);\n this.bindComputed(moduleBinding);\n this.bindActions(moduleBinding);\n }\n }\n\n attachRuntimeMetadata(): void {\n for (const moduleBinding of this.modules) {\n Object.defineProperty(moduleBinding.instance, runtimeModuleMetadataKey, {\n configurable: false,\n enumerable: false,\n value: {\n app: this,\n name: moduleBinding.name,\n token: moduleBinding.token,\n } satisfies RuntimeModuleMetadata,\n });\n }\n }\n\n runModuleCreatedHooks(): void {\n for (const moduleBinding of this.modules) {\n const event: ModuleCreatedEvent = {\n name: moduleBinding.name,\n token: moduleBinding.token,\n instance: moduleBinding.instance,\n };\n\n for (const plugin of this.plugins) {\n plugin.onModuleCreated?.(event);\n }\n }\n }\n\n init(): void {\n this.initPromise = (async () => {\n try {\n await Promise.all(\n this.plugins.map((plugin) => this.runWithAppInjectContext(() => plugin.setup?.(this))),\n );\n await this.runLifecycle(\"onInit\");\n } catch (error) {\n this.emitError(error, { phase: \"init\" });\n throw error;\n }\n })();\n }\n\n private bindState(moduleBinding: ModuleBinding): void {\n for (const property of moduleBinding.metadata.state) {\n Object.defineProperty(moduleBinding.instance, property, {\n configurable: true,\n enumerable: true,\n get: () => this.readModuleState(moduleBinding, property),\n set: (value: unknown) => this.writeModuleState(moduleBinding, property, value),\n });\n }\n }\n\n private bindActions(moduleBinding: ModuleBinding): void {\n for (const property of moduleBinding.metadata.actions) {\n const action = getMethod(moduleBinding.instance, property);\n moduleBinding.originalActions.set(property, action);\n\n Object.defineProperty(moduleBinding.instance, property, {\n configurable: true,\n value: (...args: unknown[]) => this.runAction(moduleBinding, property, args),\n });\n }\n }\n\n private bindComputed(moduleBinding: ModuleBinding): void {\n for (const property of moduleBinding.metadata.computed) {\n const getter = getGetter(moduleBinding.instance, property);\n moduleBinding.originalComputed.set(property, getter);\n\n Object.defineProperty(moduleBinding.instance, property, {\n configurable: true,\n enumerable: true,\n get: () => getter.call(moduleBinding.instance),\n });\n }\n }\n\n private readModuleState(moduleBinding: ModuleBinding, property: PropertyKey): unknown {\n return this.store.getState()[moduleBinding.name]?.[property];\n }\n\n private writeModuleState(\n moduleBinding: ModuleBinding,\n property: PropertyKey,\n value: unknown,\n ): void {\n if (moduleBinding.activeDraft !== undefined) {\n moduleBinding.activeDraft[property] = value;\n return;\n }\n\n if (this.devOptions.strictActions === true && moduleBinding.actionDepth === 0) {\n throw new CosystemError(\n `Cannot write ${moduleBinding.name}.${String(property)} outside an action.`,\n );\n }\n\n this.store.setState((draft) => {\n draft[moduleBinding.name] ??= {};\n draft[moduleBinding.name]![property] = value;\n });\n }\n\n private runAction(\n moduleBinding: ModuleBinding,\n property: PropertyKey,\n args: readonly unknown[],\n ): unknown {\n const action = moduleBinding.originalActions.get(property);\n\n if (action === undefined) {\n throw new CosystemError(`${moduleBinding.name}.${String(property)} is not an action.`);\n }\n\n const event: ActionEvent = {\n args,\n method: String(property),\n module: moduleBinding.name,\n startedAt: Date.now(),\n };\n this.emitActionStart(event);\n\n let result: unknown;\n let error: unknown;\n\n try {\n moduleBinding.actionDepth += 1;\n this.store.setState((draft) => {\n const previousDraft = moduleBinding.activeDraft;\n moduleBinding.activeDraft = draft[moduleBinding.name] ?? {};\n draft[moduleBinding.name] = moduleBinding.activeDraft;\n\n try {\n result = action.apply(moduleBinding.instance, [...args]);\n } finally {\n moduleBinding.activeDraft = previousDraft;\n }\n });\n } catch (caught) {\n error = caught;\n this.emitError(caught, { phase: \"action\" });\n } finally {\n moduleBinding.actionDepth -= 1;\n }\n\n const endedEvent: ActionEvent = {\n ...event,\n endedAt: Date.now(),\n ...(error === undefined ? {} : { error }),\n };\n this.testInspector?.recordAction(endedEvent);\n this.emitActionEnd(endedEvent);\n\n if (error !== undefined) {\n throw error;\n }\n\n return result;\n }\n\n private async runLifecycle(method: keyof LifecycleModule, reverse = false): Promise<void> {\n const modules = reverse ? this.modules.toReversed() : this.modules;\n\n for (const moduleBinding of modules) {\n const lifecycle = moduleBinding.instance as LifecycleModule;\n await this.runWithAppInjectContext(() => lifecycle[method]?.());\n }\n }\n\n private emitActionStart(event: ActionEvent): void {\n for (const plugin of this.plugins) {\n plugin.onActionStart?.(event);\n }\n }\n\n private emitActionEnd(event: ActionEvent): void {\n for (const plugin of this.plugins) {\n plugin.onActionEnd?.(event);\n }\n }\n\n private emitStateChange(event: StateChangeEvent): void {\n for (const plugin of this.plugins) {\n plugin.onStateChange?.(event);\n }\n }\n\n private emitPatch(event: PatchEvent): void {\n for (const plugin of this.plugins) {\n plugin.onPatch?.(event);\n }\n }\n\n private emitError(error: unknown, context: ErrorContext): void {\n for (const plugin of this.plugins) {\n plugin.onError?.(error, context);\n }\n }\n\n private runWithAppInjectContext<T>(callback: () => T): T {\n return runWithInjectContext(\n {\n mode: \"sync\",\n requestContainer: this.#container as ResolutionContext[\"requestContainer\"],\n resolutionCache: new Map(),\n stack: [],\n },\n callback,\n );\n }\n\n private wrapStoreSetState(): void {\n const originalSetState = this.store.setState.bind(this.store) as (\n ...args: Parameters<StoreSetState>\n ) => unknown;\n\n this.store.setState = ((...args: Parameters<StoreSetState>) => {\n const result = originalSetState(...args);\n this.recordMutationResult(result);\n return result as never;\n }) as StoreSetState;\n }\n\n private recordMutationResult(result: unknown): void {\n if (!Array.isArray(result) || result.length < 3) {\n return;\n }\n\n const patches = result[1] as readonly unknown[];\n\n if (patches.length === 0) {\n return;\n }\n\n this.testInspector?.recordPatch(patches);\n this.emitPatch({\n inversePatches: result[2] as readonly unknown[],\n patches,\n });\n }\n}\n\nfunction normalizeAppProvider(provider: ProviderInput): {\n readonly provider: ProviderInput;\n readonly moduleToken?: InjectionToken;\n} {\n if (typeof provider === \"function\") {\n const metadata = getModuleMetadata(provider);\n\n if (metadata !== undefined) {\n return {\n provider: provide(provider, createModuleClassProviderOptions(provider, metadata)),\n moduleToken: provider,\n };\n }\n\n return { provider };\n }\n\n if (\"useClass\" in provider) {\n const metadata = getModuleMetadata(provider.useClass);\n\n if (metadata !== undefined) {\n return {\n provider: {\n ...provider,\n ...mergeModuleClassProviderOptions(provider, metadata),\n },\n moduleToken: provider.provide,\n };\n }\n }\n\n return { provider };\n}\n\nfunction createStoreOptions(\n engine: EngineOptions | undefined,\n enablePatches: boolean,\n): CoactionStoreOptions {\n return {\n name: \"cosystem\",\n sliceMode: \"single\",\n enablePatches,\n ...(engine?.transport === undefined ? {} : { transport: engine.transport }),\n } as CoactionStoreOptions;\n}\n\nfunction shouldEnablePatches(options: InternalCreateAppOptions): boolean {\n if (options.engine?.patches !== undefined) {\n return options.engine.patches;\n }\n\n return (\n options.testInspector !== undefined ||\n (options.plugins ?? []).some((plugin) => plugin.onPatch !== undefined)\n );\n}\n\nfunction createModuleClassProviderOptions<T>(\n useClass: Constructor<T>,\n metadata: ModuleMetadata,\n): ClassProvideOptions<T> {\n return {\n useClass,\n ...(metadata.deps === undefined ? {} : { deps: metadata.deps }),\n ...(metadata.scope === undefined ? {} : { scope: metadata.scope }),\n };\n}\n\nfunction mergeModuleClassProviderOptions<T>(\n provider: Provider<T>,\n metadata: ModuleMetadata,\n): Partial<ClassProvideOptions<T>> {\n return {\n ...(\"deps\" in provider || metadata.deps === undefined ? {} : { deps: metadata.deps }),\n ...(\"scope\" in provider || metadata.scope === undefined ? {} : { scope: metadata.scope }),\n };\n}\n\nfunction instantiateModules(container: Container, moduleTokens: readonly InjectionToken[]) {\n const modules: ModuleBinding[] = [];\n\n for (const moduleToken of moduleTokens) {\n const instance = container.get(moduleToken) as Record<PropertyKey, unknown>;\n const metadata = getModuleMetadata(instance.constructor);\n\n if (metadata === undefined) {\n continue;\n }\n\n const name = metadata.name ?? stableModuleName(moduleToken);\n\n if (modules.some((moduleBinding) => moduleBinding.name === name)) {\n throw new DuplicateProviderError(name);\n }\n\n modules.push({\n actionDepth: 0,\n activeDraft: undefined,\n instance,\n metadata,\n name,\n originalActions: new Map(),\n originalComputed: new Map(),\n token: moduleToken,\n });\n }\n\n return modules;\n}\n\nfunction createRootState(modules: readonly ModuleBinding[]): RootState {\n const rootState: RootState = {};\n\n for (const moduleBinding of modules) {\n const state: Record<PropertyKey, unknown> = {};\n\n for (const property of moduleBinding.metadata.state) {\n state[property] = moduleBinding.instance[property];\n }\n\n rootState[moduleBinding.name] = state;\n }\n\n return rootState;\n}\n\nfunction stableModuleName(token: InjectionToken): string {\n const name = tokenName(token);\n return `${name.slice(0, 1).toLowerCase()}${name.slice(1)}`;\n}\n\nfunction getMethod(\n instance: Record<PropertyKey, unknown>,\n property: PropertyKey,\n): (...args: unknown[]) => unknown {\n const descriptor = getDescriptor(instance, property);\n\n if (descriptor?.value === undefined || typeof descriptor.value !== \"function\") {\n throw new CosystemError(`${String(property)} is not a method.`);\n }\n\n return descriptor.value as (...args: unknown[]) => unknown;\n}\n\nfunction getGetter(instance: Record<PropertyKey, unknown>, property: PropertyKey): () => unknown {\n const descriptor = getDescriptor(instance, property);\n\n if (descriptor?.get === undefined) {\n throw new CosystemError(`${String(property)} is not a getter.`);\n }\n\n return descriptor.get;\n}\n\nfunction getDescriptor(\n instance: Record<PropertyKey, unknown>,\n property: PropertyKey,\n): PropertyDescriptor | undefined {\n let current: object | null = instance;\n\n while (current !== null) {\n const descriptor = Object.getOwnPropertyDescriptor(current, property);\n\n if (descriptor !== undefined) {\n return descriptor;\n }\n\n current = Object.getPrototypeOf(current);\n }\n\n return undefined;\n}\n\nfunction isApp(value: unknown): value is App {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"get\" in value &&\n \"start\" in value &&\n \"dispose\" in value\n );\n}\n\nfunction getAppContainer(app: App): Container {\n const container = appContainerMap.get(app);\n\n if (container === undefined) {\n throw new CosystemError(\"Parent app was not created by CoSystem.\");\n }\n\n return container;\n}\n","import {\n addModuleAction,\n addModuleComputed,\n addModuleState,\n applyModuleOptions,\n defineModule,\n ensureContextModuleMetadata,\n ensureModuleMetadata,\n type ModuleOptions,\n} from \"./metadata.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport function module(options: ModuleOptions = {}) {\n return function moduleDecorator<T extends Constructor>(\n target: T,\n context?: ClassDecoratorContext<T>,\n ): T {\n defineModule(target, options, context);\n return target;\n };\n}\n\nexport function state<This extends object, Value>(\n _value: ClassAccessorDecoratorTarget<This, Value>,\n context: ClassAccessorDecoratorContext<This, Value>,\n): void {\n if (context.kind !== \"accessor\") {\n throw new TypeError(\"@state only supports standard accessor decorators.\");\n }\n\n ensureContextModuleMetadata(context)?.state.add(context.name);\n\n context.addInitializer(function initializeState(this: This) {\n addModuleState(this.constructor, context.name);\n });\n}\n\nexport function action<This extends object, Args extends unknown[], Return>(\n _value: (this: This, ...args: Args) => Return,\n context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n): void {\n if (context.kind !== \"method\") {\n throw new TypeError(\"@action only supports method decorators.\");\n }\n\n ensureContextModuleMetadata(context)?.actions.add(context.name);\n\n context.addInitializer(function initializeAction(this: This) {\n addModuleAction(this.constructor, context.name);\n });\n}\n\nexport function computed<This extends object, Value>(\n _value: (this: This) => Value,\n context: ClassGetterDecoratorContext<This, Value>,\n): void {\n if (context.kind !== \"getter\") {\n throw new TypeError(\"@computed only supports getter decorators.\");\n }\n\n ensureContextModuleMetadata(context)?.computed.add(context.name);\n\n context.addInitializer(function initializeComputed(this: This) {\n addModuleComputed(this.constructor, context.name);\n });\n}\n\nexport function effect<This extends object, Args extends unknown[], Return>(\n _value: (this: This, ...args: Args) => Return,\n _context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>,\n): void {\n // Effect scheduling is intentionally deferred until the app runtime has real\n // lifecycle semantics for reactive side effects.\n}\n\nexport function moduleOptions(target: Constructor, options: ModuleOptions): void {\n applyModuleOptions(ensureModuleMetadata(target), options);\n}\n","import type { Plugin } from \"./app.js\";\n\nexport interface LoggerPluginLogger {\n info(message: string, details?: unknown): void;\n error(message: string, details?: unknown): void;\n}\n\nexport interface LoggerPluginOptions {\n readonly logger?: LoggerPluginLogger;\n}\n\nexport function createLoggerPlugin(options: LoggerPluginOptions = {}): Plugin {\n const logger = options.logger ?? console;\n\n return {\n name: \"cosystem:logger\",\n onActionEnd(event) {\n if (event.error !== undefined) {\n logger.error(`Action failed: ${event.module}.${event.method}`, event);\n return;\n }\n\n logger.info(`Action completed: ${event.module}.${event.method}`, event);\n },\n onError(error, context) {\n logger.error(`Runtime error during ${context.phase}`, error);\n },\n onModuleCreated(event) {\n logger.info(`Module created: ${event.name}`, event);\n },\n };\n}\n","import { createAppInternal, type MutableTestInspector } from \"./app.js\";\nimport type { ActionEvent, CreateAppOptions, TestAppInspector } from \"./app.js\";\nimport type { ProviderInput } from \"./types.js\";\n\nexport interface TestAppOptions extends Omit<CreateAppOptions, \"providers\"> {\n readonly providers?: readonly ProviderInput[];\n readonly overrides?: readonly ProviderInput[];\n readonly autoStart?: boolean;\n readonly strictActions?: boolean;\n}\n\nexport interface TestApp extends ReturnType<typeof createAppInternal> {\n readonly test: TestAppInspector;\n}\n\nexport interface AutoStartedTestAppOptions extends Omit<TestAppOptions, \"autoStart\"> {\n readonly autoStart: true;\n}\n\nexport interface ManualTestAppOptions extends Omit<TestAppOptions, \"autoStart\"> {\n readonly autoStart?: false;\n}\n\nexport function testApp(options: AutoStartedTestAppOptions): Promise<TestApp>;\nexport function testApp(options?: ManualTestAppOptions): TestApp;\nexport function testApp(options: TestAppOptions = {}): TestApp | Promise<TestApp> {\n const inspector = createTestInspector();\n const { autoStart, overrides, strictActions, ...createOptions } = options;\n const app = createAppInternal({\n ...createOptions,\n devOptions: {\n ...createOptions.devOptions,\n ...(strictActions === undefined ? {} : { strictActions }),\n },\n ...(overrides === undefined ? {} : { overrides }),\n testInspector: inspector,\n }) as TestApp;\n\n Object.defineProperty(app, \"test\", {\n configurable: false,\n enumerable: false,\n value: inspector,\n });\n\n if (autoStart === true) {\n return app.start().then(() => app);\n }\n\n return app;\n}\n\nfunction createTestInspector(): MutableTestInspector {\n const actions: ActionEvent[] = [];\n const patches: unknown[] = [];\n let lastState: unknown;\n\n return {\n clearActions() {\n actions.length = 0;\n },\n clearPatches() {\n patches.length = 0;\n },\n flushEffects() {\n return Promise.resolve();\n },\n getActions() {\n return actions;\n },\n getPatches() {\n return patches;\n },\n getState() {\n return lastState;\n },\n recordAction(event) {\n actions.push(event);\n },\n recordPatch(patch) {\n patches.push(patch);\n },\n recordState(state) {\n lastState = state;\n },\n };\n}\n","import { CosystemError } from \"./errors.js\";\nimport { createApp, type App, type CreateAppOptions, type Plugin } from \"./app.js\";\n\nexport interface WorkerTransport {\n post(message: WorkerMessage): void;\n subscribe(listener: (message: WorkerMessage) => void): () => void;\n}\n\nexport type WorkerMessage =\n | WorkerCallMessage\n | WorkerResultMessage\n | WorkerStateMessage\n | WorkerReadyMessage;\n\nexport interface WorkerCallMessage {\n readonly id: number;\n readonly type: \"call\";\n readonly module: string;\n readonly method: string;\n readonly args: readonly unknown[];\n}\n\nexport interface WorkerResultMessage {\n readonly id: number;\n readonly type: \"result\";\n readonly value?: unknown;\n readonly error?: SerializedWorkerError;\n}\n\nexport interface WorkerStateMessage {\n readonly type: \"state\";\n readonly state: unknown;\n readonly patches?: readonly unknown[];\n readonly sync: \"patch\" | \"snapshot\";\n readonly version: number;\n}\n\nexport interface WorkerReadyMessage {\n readonly type: \"ready\";\n}\n\nexport interface SerializedWorkerError {\n readonly name: string;\n readonly message: string;\n readonly stack?: string;\n}\n\nexport interface CreateWorkerAppOptions extends CreateAppOptions {\n readonly transport: WorkerTransport;\n}\n\nexport interface WorkerAppHost {\n readonly app: App;\n dispose(): Promise<void>;\n}\n\nexport interface CreateWorkerClientOptions {\n readonly transport: WorkerTransport;\n}\n\nexport type AsyncMethodProxy<T extends object> = {\n readonly [Key in keyof T as T[Key] extends (...args: any[]) => unknown\n ? Key\n : never]: T[Key] extends (...args: infer Args) => infer Return\n ? (...args: Args) => Promise<Awaited<Return>>\n : never;\n};\n\nexport interface WorkerClient {\n readonly state: {\n readonly version: number;\n };\n getState(): unknown;\n call(module: string, method: string, ...args: readonly unknown[]): Promise<unknown>;\n module<T extends object>(name: string): AsyncMethodProxy<T>;\n subscribe(listener: (message: WorkerStateMessage) => void): () => void;\n dispose(): void;\n}\n\nexport function createWorkerApp(options: CreateWorkerAppOptions): WorkerAppHost {\n const { transport, ...appOptions } = options;\n const patchPlugin: Plugin = {\n name: \"cosystem:worker-patches\",\n onPatch(event) {\n publishState(app, transport, event.patches);\n },\n };\n const app = createApp({\n ...appOptions,\n engine: {\n ...appOptions.engine,\n patches: true,\n },\n plugins: [...(appOptions.plugins ?? []), patchPlugin],\n });\n const unsubscribeTransport = transport.subscribe((message) => {\n if (message.type !== \"call\") {\n return;\n }\n\n void handleCall(app, transport, message);\n });\n\n transport.post({ type: \"ready\" });\n publishState(app, transport);\n\n return {\n app,\n async dispose() {\n unsubscribeTransport();\n await app.dispose();\n },\n };\n}\n\nexport function createWorkerClient(options: CreateWorkerClientOptions): WorkerClient {\n const { transport } = options;\n const listeners = new Set<(message: WorkerStateMessage) => void>();\n const pending = new Map<\n number,\n {\n readonly resolve: (value: unknown) => void;\n readonly reject: (error: unknown) => void;\n }\n >();\n const state = { version: 0 };\n let nextId = 1;\n let snapshot: unknown;\n\n const unsubscribe = transport.subscribe((message) => {\n if (message.type === \"state\") {\n state.version = message.version;\n snapshot = message.state;\n\n for (const listener of listeners) {\n listener(message);\n }\n\n return;\n }\n\n if (message.type !== \"result\") {\n return;\n }\n\n const entry = pending.get(message.id);\n\n if (entry === undefined) {\n return;\n }\n\n pending.delete(message.id);\n\n if (message.error !== undefined) {\n entry.reject(createRemoteError(message.error));\n return;\n }\n\n entry.resolve(message.value);\n });\n\n const client: WorkerClient = {\n state,\n call(module, method, ...args) {\n const id = nextId;\n nextId += 1;\n\n return new Promise((resolve, reject) => {\n pending.set(id, { reject, resolve });\n transport.post({\n args,\n id,\n method,\n module,\n type: \"call\",\n });\n });\n },\n dispose() {\n unsubscribe();\n\n for (const entry of pending.values()) {\n entry.reject(new CosystemError(\"Worker client disposed before response.\"));\n }\n\n pending.clear();\n listeners.clear();\n },\n getState() {\n return snapshot;\n },\n module<T extends object>(name: string): AsyncMethodProxy<T> {\n return new Proxy(\n {},\n {\n get(_target, property) {\n if (typeof property !== \"string\") {\n return undefined;\n }\n\n return (...args: readonly unknown[]) => client.call(name, property, ...args);\n },\n },\n ) as AsyncMethodProxy<T>;\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n\n return client;\n}\n\nexport function createMemoryWorkerTransportPair(): readonly [WorkerTransport, WorkerTransport] {\n const leftListeners = new Set<(message: WorkerMessage) => void>();\n const rightListeners = new Set<(message: WorkerMessage) => void>();\n\n return [\n createMemoryWorkerTransport(leftListeners, rightListeners),\n createMemoryWorkerTransport(rightListeners, leftListeners),\n ];\n}\n\nasync function handleCall(\n app: App,\n transport: WorkerTransport,\n message: WorkerCallMessage,\n): Promise<void> {\n try {\n const module = app.getModuleByName<Record<string, unknown>>(message.module);\n const method = module[message.method];\n\n if (typeof method !== \"function\") {\n throw new CosystemError(`${message.module}.${message.method} is not callable.`);\n }\n\n const value = await method.apply(module, message.args);\n transport.post({\n id: message.id,\n type: \"result\",\n value,\n });\n } catch (error) {\n transport.post({\n error: serializeError(error),\n id: message.id,\n type: \"result\",\n });\n }\n}\n\nfunction publishState(\n app: App,\n transport: WorkerTransport,\n patches: readonly unknown[] = [],\n): void {\n const message: WorkerStateMessage = {\n state: app.store.getPureState(),\n sync: patches.length > 0 ? \"patch\" : \"snapshot\",\n type: \"state\",\n version: app.state.version,\n ...(patches.length === 0 ? {} : { patches }),\n };\n\n transport.post(message);\n}\n\nfunction createMemoryWorkerTransport(\n inbox: Set<(message: WorkerMessage) => void>,\n outbox: Set<(message: WorkerMessage) => void>,\n): WorkerTransport {\n return {\n post(message) {\n for (const listener of outbox) {\n listener(message);\n }\n },\n subscribe(listener) {\n inbox.add(listener);\n return () => {\n inbox.delete(listener);\n };\n },\n };\n}\n\nfunction serializeError(error: unknown): SerializedWorkerError {\n if (error instanceof Error) {\n return {\n message: error.message,\n name: error.name,\n ...(error.stack === undefined ? {} : { stack: error.stack }),\n };\n }\n\n return {\n message: String(error),\n name: \"Error\",\n };\n}\n\nfunction createRemoteError(error: SerializedWorkerError): CosystemError {\n const remoteError = new CosystemError(`Remote worker error: ${error.message}`);\n remoteError.name = error.name;\n\n if (error.stack !== undefined) {\n remoteError.stack = error.stack;\n }\n\n return remoteError;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosystem/core",
3
- "version": "0.0.0",
3
+ "version": "0.0.2",
4
4
  "description": "Core utilities for CoSystem.",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -26,7 +26,7 @@
26
26
  "tsdown": "0.22.3",
27
27
  "typescript": "6.0.3",
28
28
  "vitest": "4.1.9",
29
- "@cosystem/tsconfig": "0.0.0"
29
+ "@cosystem/tsconfig": "0.0.2"
30
30
  },
31
31
  "scripts": {
32
32
  "build": "tsdown",