{"version":3,"file":"mmuscat-angular-phalanx.mjs","sources":["../../../packages/store/src/utils.ts","../../../packages/store/src/providers.ts","../../../packages/store/src/command.ts","../../../packages/store/src/query.ts","../../../packages/store/src/effect.ts","../../../packages/store/src/interfaces.ts","../../../packages/store/src/store.ts","../../../packages/store/src/mmuscat-angular-phalanx.ts"],"sourcesContent":["import { Emitter, Value, ValueToken } from \"@mmuscat/angular-composition-api\"\nimport { Dispatch, Dispatcher, StoreEvent } from \"./interfaces\"\nimport { MonoTypeOperatorFunction, Observable } from \"rxjs\"\nimport { tap } from \"rxjs/operators\"\nimport { StoreContext } from \"./providers\"\n\nfunction defaultAction<T>(action: Emitter<T>): Emitter<T> {\n   return action\n}\n\nexport function action<T>(): (action: Emitter<T>) => Emitter<T> {\n   return defaultAction\n}\n\nexport function getTokenName(token: ValueToken<any>) {\n   return token.toString().replace(/^InjectionToken /, \"\")\n}\n\nfunction sendEvent(\n   target: number,\n   events: Emitter<StoreEvent>,\n   name: string,\n   dispatch: string,\n) {\n   events.next({\n      target,\n      kind: \"N\",\n      name,\n      data: {\n         dispatch,\n      },\n   })\n}\n\nexport function createDispatcher(\n   name: string,\n   { injector, events, id }: StoreContext,\n): Dispatcher {\n   return function dispatch<T, U>(\n      token: ValueToken<Value<T>> | Dispatch<T>,\n      selector?: (value: T) => U,\n   ): MonoTypeOperatorFunction<T> | void {\n      if (\"__ng_value_token\" in token) {\n         const valueToken = token as ValueToken<any>\n         const value = injector.get(valueToken.Token)\n         const tokenName = getTokenName(valueToken)\n         return (source: Observable<T>) => {\n            return source.pipe(\n               tap((val) => {\n                  const nextValue = selector ? selector(val) : val\n                  sendEvent(id, events, name, tokenName)\n                  value(nextValue)\n               }),\n            )\n         }\n      } else {\n         const dispatch = token as Dispatch<T>\n         sendEvent(id, events, name, getTokenName(dispatch.type))\n      }\n   } as Dispatcher\n}\n","import {\n   Emitter,\n   inject,\n   select,\n   use,\n   ValueToken,\n} from \"@mmuscat/angular-composition-api\"\nimport { Dispatcher, NextEvent, StoreEvent } from \"./interfaces\"\nimport { getTokenName } from \"./utils\"\nimport { filter, map } from \"rxjs/operators\"\nimport { merge, Subject } from \"rxjs\"\nimport { Inject, Injectable, InjectFlags, Injector } from \"@angular/core\"\n\n@Injectable()\nexport abstract class StoreContext {\n   abstract id: number\n   abstract name: string\n   abstract dispatch: Dispatcher\n\n   event(token: ValueToken<any>) {\n      const tokenName = getTokenName(token)\n      return this.events.pipe(\n         filter(\n            (event): event is NextEvent =>\n               event.kind === \"N\" && event.name === tokenName,\n         ),\n         map((event) => event.data),\n      )\n   }\n\n   protected constructor(\n      public injector: Injector,\n      @Inject(StoreEvents) public events: Emitter<StoreEvent>,\n   ) {\n      this.event = this.event.bind(this)\n   }\n}\n\nexport const StoreEvents: ValueToken<Emitter<StoreEvent>> = new ValueToken(\n   \"StoreEvents\",\n   {\n      factory() {\n         const parent = inject(StoreEvents, null, InjectFlags.SkipSelf)\n         const emitter = use(Function)\n         if (parent) {\n            return select(\n               {\n                  next: emitter,\n                  value: merge(parent, emitter),\n               },\n               { behavior: false, subject: new Subject() },\n            )\n         }\n         return emitter\n      },\n   },\n)\n","import {\n   Accessor,\n   Emitter,\n   inject,\n   isEmitter,\n   noCheck,\n   select,\n   Service,\n   use,\n   ValueToken,\n} from \"@mmuscat/angular-composition-api\"\nimport { Observable, Subject } from \"rxjs\"\nimport { Action } from \"./interfaces\"\nimport { StoreContext } from \"./providers\"\nimport { createDispatcher } from \"./utils\"\n\nconst tokens = new WeakSet()\n\nexport function isCommandToken(token: any) {\n   return tokens.has(token)\n}\n\nexport function action<T, U>(accessor: Accessor<T, U>): Action<T, U>\nexport function action(source: Accessor<any, any>): unknown {\n   const emitter = select(source, {\n      immediate: false,\n      subject: new Subject(),\n   })\n   return noCheck(emitter)\n}\n\nfunction command(\n   name: string,\n   factory: (emitter: Emitter<any>, context: StoreContext) => any,\n) {\n   const context = Object.create(inject(StoreContext))\n   context.dispatch = createDispatcher(name, context)\n   const emitter = use(Function)\n   const value = factory(emitter, context)\n   if (isEmitter(value)) {\n      return value\n   }\n   return action({\n      next: emitter,\n      value,\n   })\n}\n\nfunction createCommand<TName extends string, TArgs, TValue>(\n   name: TName,\n   factory?: (emitter: Emitter<TArgs>, context: StoreContext) => TValue,\n): ValueToken<Command<TName, Action<TValue, TArgs>>> {\n   const service = new Service(command, {\n      providedIn: null,\n      name,\n      arguments: [name, factory],\n   })\n   const token = new ValueToken(name, {\n      providedIn: null,\n      factory() {\n         return inject(service)\n      },\n   })\n   token.Provider.push(service)\n   tokens.add(token)\n   return token\n}\n\nexport type Command<TName, TEmitter> = TEmitter & {\n   readonly __command: TName\n}\n\nexport interface CommandStatic {\n   new <TName extends string, TArgs, TValue>(\n      name: TName,\n      factory: (\n         emitter: Emitter<TArgs>,\n         context: StoreContext,\n      ) => Observable<TValue>,\n   ): ValueToken<Command<TName, Action<TValue, TArgs>>>\n}\n\nexport const Command: CommandStatic = createCommand as any\n","import {\n   inject,\n   isValue,\n   Service,\n   use,\n   ValueToken,\n} from \"@mmuscat/angular-composition-api\"\nimport { InferValue } from \"./interfaces\"\nimport { StoreContext } from \"./providers\"\nimport { createDispatcher } from \"./utils\"\n\nconst tokens = new WeakSet()\n\nexport function isQueryToken(token: any) {\n   return tokens.has(token)\n}\n\nfunction query(name: string, factory: (context: StoreContext) => any) {\n   const context = Object.create(inject(StoreContext))\n   context.dispatch = createDispatcher(name, context)\n   return factory(context)\n}\n\nfunction createQuery<TName extends string, TValue>(\n   name: TName,\n   factory: (context: StoreContext) => TValue,\n): ValueToken<TValue> {\n   const service = new Service(query, {\n      providedIn: null,\n      name,\n      arguments: [name, factory],\n   })\n   const token = new ValueToken(name, {\n      providedIn: null,\n      factory() {\n         const result = inject(service)\n         return isValue(result) ? result : use(result)\n      },\n   })\n   token.Provider.push(service)\n   tokens.add(token)\n   return token\n}\n\nexport type Query<TName extends string, TValue> = TValue & {\n   readonly __query: TName\n}\n\nexport interface QueryStatic {\n   new <TName extends string, TValue>(\n      name: TName,\n      factory: (context: StoreContext) => TValue,\n   ): ValueToken<Query<TName, InferValue<TValue>>>\n}\n\nexport const Query: QueryStatic = createQuery as any\n","import { inject, Service, ValueToken } from \"@mmuscat/angular-composition-api\"\nimport { StoreContext } from \"./providers\"\nimport { createDispatcher } from \"./utils\"\n\nconst tokens = new WeakSet()\n\nexport function isEffectToken(token: any) {\n   return tokens.has(token)\n}\n\nfunction effect(name: string, factory: (store: StoreContext) => any) {\n   const context = Object.create(inject(StoreContext))\n   context.dispatch = createDispatcher(name, context)\n   return factory(context)\n}\n\nfunction createEffect<TName extends string, TValue>(\n   name: TName,\n   factory: (store: StoreContext) => TValue,\n): ValueToken<TValue> {\n   const service = new Service(effect, {\n      providedIn: null,\n      name,\n      arguments: [name, factory],\n   })\n   const token = new ValueToken(name, {\n      factory() {\n         return inject(service)\n      },\n   })\n   token.Provider.push(service)\n   tokens.add(token)\n   return token\n}\n\nexport interface EffectStatic {\n   new <TName extends string, TValue>(\n      name: TName,\n      factory: (params: StoreContext) => TValue,\n   ): ValueToken<TValue>\n}\n\nexport const Effect: EffectStatic = createEffect as any\n","import {\n   DeferredValue,\n   Emitter,\n   ReadonlyValue,\n   Value,\n   ValueToken,\n} from \"@mmuscat/angular-composition-api\"\nimport { MonoTypeOperatorFunction, Observable } from \"rxjs\"\nimport { InjectionToken, Injector, ProviderToken } from \"@angular/core\"\nimport { StoreContext } from \"./providers\"\n\nexport interface NextEvent {\n   target: number\n   name: string\n   kind: \"N\"\n   data: unknown\n}\n\nexport interface ErrorEvent {\n   target: number\n   name: string\n   kind: \"E\"\n   error: unknown\n}\n\nexport interface CompleteEvent {\n   target: number\n   name: string\n   kind: \"C\"\n}\n\nexport type StoreEvent = NextEvent | ErrorEvent | CompleteEvent\n\nexport interface StoreLike {\n   id: number\n   name: string\n   events: Emitter<StoreEvent>\n   command: Record<string, Emitter<any>>\n   query: Record<string, Value<any>>\n   state: Value<any>\n   plugins: ProviderToken<StorePlugin>[]\n   tokens: ValueToken<any>[]\n   dispatch: Dispatcher\n   injector: Injector\n}\n\nexport interface StorePlugin {\n   onStoreCreate?(store: StoreContext): void\n   onStoreInit?(store: StoreLike): void\n   onStoreDestroy?(store: StoreLike): void\n}\n\nexport interface StorePluginOptions {\n   for: string\n   plugin: ProviderToken<StorePlugin>\n}\n\nexport const StorePlugin = new InjectionToken<StorePluginOptions[]>(\n   \"StorePlugin\",\n)\n\nexport interface StoreConfig<T extends ValueToken<any>[]> {\n   tokens: T\n}\n\nexport interface Action<T, U> extends Observable<T> {\n   (value: U): void\n   next(value: U): void\n}\n\nexport type InferValue<TValue> = TValue extends ReadonlyValue<any>\n   ? TValue\n   : DeferredValue<TValue extends Observable<infer R> ? R : never>\n\nexport type Dispatch<T> = T extends Observable<infer R>\n   ? R extends void\n      ? {\n           type: ValueToken<T>\n           payload?: void\n        }\n      : {\n           type: ValueToken<T>\n           payload: R\n        }\n   : never\n\nexport interface Dispatcher {\n   <T>(token: Dispatch<T>): void\n   <T>(token: ValueToken<Value<T>>): MonoTypeOperatorFunction<T>\n   <T, U>(\n      token: ValueToken<Value<U>>,\n      selector: (value: T) => U,\n   ): MonoTypeOperatorFunction<T>\n}\n","import { isQueryToken, Query } from \"./query\"\nimport { isCommandToken } from \"./command\"\nimport {\n   AccessorValue,\n   combine,\n   Emitter,\n   inject,\n   isValue,\n   onDestroy,\n   onError,\n   ReadonlyValue,\n   Service,\n   subscribe,\n   use,\n   ValueToken,\n} from \"@mmuscat/angular-composition-api\"\nimport {\n   ErrorHandler,\n   InjectFlags,\n   INJECTOR,\n   ProviderToken,\n   Type,\n} from \"@angular/core\"\nimport { isEffectToken } from \"./effect\"\nimport { StoreConfig, StoreEvent, StoreLike, StorePlugin } from \"./interfaces\"\nimport { isObservable, of } from \"rxjs\"\nimport { createDispatcher, getTokenName } from \"./utils\"\nimport { StoreContext, StoreEvents } from \"./providers\"\n\nclass EventObserver {\n   next(value: any) {\n      this.events.emit({\n         target: this.id,\n         kind: \"N\",\n         name: this.name,\n         data: value,\n      })\n   }\n   error(error: unknown) {\n      this.events.emit({\n         target: this.id,\n         kind: \"E\",\n         name: this.name,\n         error,\n      })\n      this.errorHandler.handleError(error)\n   }\n   complete() {\n      this.events.emit({\n         target: this.id,\n         kind: \"C\",\n         name: this.name,\n      })\n   }\n   constructor(\n      private id: number,\n      private errorHandler: ErrorHandler,\n      private name: string,\n      private events: Emitter<StoreEvent>,\n   ) {}\n}\nlet uid = 0\n\nfunction extractTokens(acc: ValueToken<any>[], next: ValueToken<any>) {\n   if (isStoreToken(next)) {\n      const tokens = next.Provider[next.Provider.length - 1] as any[]\n      tokens.reduce(extractTokens, acc)\n   } else {\n      acc.push(next)\n   }\n   return acc\n}\n\nfunction handleError(\n   value: any,\n   events: Emitter<StoreEvent>,\n   target: number,\n   name: string,\n) {\n   if (isValue(value)) {\n      onError(value, (error) => {\n         events.next({\n            target,\n            name,\n            kind: \"E\",\n            error: error,\n         })\n         return of(true)\n      })\n   }\n}\n\nfunction store(name: string, tokens: ValueToken<any>[]) {\n   const id = uid++\n   const plugins = inject(StorePlugin, [])\n      .filter((option) => option.for === name)\n      .map((option) => option.plugin)\n   const events = inject(StoreEvents, void 0, InjectFlags.Self)\n   const context = inject(StoreContext)\n   const dispatch = createDispatcher(name, context)\n   const errorHandler = inject(ErrorHandler)\n   const injector = inject(INJECTOR)\n   const query = {} as any\n   const command = {} as any\n   tokens = tokens.reduce(extractTokens, [])\n   context.name = name\n   context.dispatch = dispatch\n   context.id = id\n   for (const plugin of plugins) {\n      injector.get(plugin).onStoreCreate?.(context)\n   }\n   for (const token of tokens) {\n      const value = injector.get(token.Token)\n      const tokenName = getTokenName(token)\n      const type = isQueryToken(token) ? 0 : isCommandToken(token) ? 1 : 2\n      if (type < 2) {\n         subscribe(\n            value,\n            new EventObserver(id, errorHandler, tokenName, events),\n         )\n      }\n      if (type === 0) {\n         query[tokenName] = value\n      }\n      if (type === 1) {\n         command[tokenName] = value\n         handleError(value, events, id, tokenName)\n      }\n   }\n   const state = combine(query)\n   const store: StoreLike = {\n      id,\n      name,\n      events,\n      command,\n      query,\n      state,\n      tokens,\n      plugins,\n      injector,\n      dispatch,\n   }\n   for (const token of tokens) {\n      if (isEffectToken(token)) {\n         const tokenName = getTokenName(token)\n         let value = injector.get(token.Token)\n         if (isObservable(value)) {\n            value = isValue(value) ? value : use(value)\n            handleError(value, events, id, tokenName)\n            subscribe(value)\n         }\n      }\n   }\n   for (const plugin of plugins) {\n      injector.get(plugin).onStoreInit?.(store)\n   }\n   onDestroy(() => {\n      for (const plugin of plugins) {\n         injector.get(plugin).onStoreDestroy?.(store)\n      }\n   })\n   return store\n}\n\nconst storeTokens = new Set()\n\nfunction isStoreToken(token: any): token is ValueToken<StoreLike> {\n   return storeTokens.has(token)\n}\n\nfunction createStore<TName extends string>(\n   name: TName,\n   { tokens }: StoreConfig<ValueToken<any>[]>,\n) {\n   const StoreService = new Service(store, {\n      providedIn: null,\n      name,\n      arguments: [name, tokens],\n   })\n   const Token = new ValueToken(name, {\n      providedIn: null,\n      factory() {\n         return inject(StoreService)\n      },\n   })\n   Token.Provider.push(\n      StoreService,\n      StoreEvents.Provider,\n      StoreContext as Type<StoreContext>,\n      tokens.map((Token) => Token.Provider),\n   )\n   storeTokens.add(Token)\n   return Token\n}\n\ntype Snapshot<T> = {\n   [key in keyof T]: T[key] extends Query<any, ReadonlyValue<infer R>>\n      ? R\n      : never\n}\n\ntype ExtractQueries<T> = Exclude<\n   {\n      [key in keyof T as T[key] extends ValueToken<infer R>\n         ? \"__query\" extends keyof R\n            ? R[\"__query\"]\n            : never\n         : never]: T[key] extends ValueToken<infer R> ? R : never\n   },\n   any[]\n>\n\ntype Union<T> = {\n   [key in keyof T]: T[key]\n}[keyof T]\n\ntype ExtractStores<\n   T,\n   U extends string,\n   TResult = Union<\n      {\n         [key in keyof T as T[key] extends ValueToken<infer R>\n            ? U extends keyof R\n               ? key\n               : never\n            : never]: T[key] extends ValueToken<infer R>\n            ? U extends keyof R\n               ? R[U]\n               : never\n            : never\n      }\n   >,\n> = [TResult] extends [never] ? {} : TResult\n\ntype Queries<T> = ExtractQueries<T>\n\ntype ExtractCommands<T> = Exclude<\n   {\n      [key in keyof T as T[key] extends ValueToken<infer R>\n         ? \"__command\" extends keyof R\n            ? R[\"__command\"]\n            : never\n         : never]: T[key] extends ValueToken<infer R> ? R : never\n   },\n   any[]\n>\n\ntype Commands<T> = ExtractCommands<T> & ExtractStores<T, \"command\">\n\nexport interface Store<TName extends string, TTokens extends readonly any[]> {\n   name: TName\n   query: Queries<TTokens>\n   command: Commands<TTokens>\n   event: Emitter<StoreEvent>\n   state: AccessorValue<\n      Snapshot<Queries<TTokens>>,\n      Partial<Snapshot<Queries<TTokens>>>\n   >\n   <T>(token: ValueToken<T>, injectFlags?: InjectFlags): T\n   <T>(token: ValueToken<T>, injectFlags?: InjectFlags): T\n}\n\nexport interface StoreStatic {\n   new <\n      TName extends string,\n      TTokens extends [ValueToken<any>, ...ValueToken<any>[]],\n   >(\n      name: TName,\n      config: StoreConfig<TTokens>,\n   ): ValueToken<Store<TName, TTokens>>\n}\n\nexport const Store: StoreStatic = createStore as any\n\nexport function withPlugins(\n   store: ValueToken<StoreLike>,\n   plugins: ProviderToken<StorePlugin>[],\n) {\n   const name = getTokenName(store)\n   return [\n      store.Provider,\n      plugins.map((plugin) => ({\n         provide: StorePlugin,\n         useValue: {\n            for: name,\n            plugin,\n         },\n         multi: true,\n      })),\n   ]\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["action","tokens"],"mappings":"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"}