@expressive/mvc 0.7.1 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/issues.ts","../src/suspense.ts","../src/instruction/get.compute.ts","../src/util.ts","../src/model.ts","../src/subscriber.ts","../src/controller.ts","../src/instruction/apply.ts","../src/instruction/act.ts","../src/instruction/get.factory.ts","../src/instruction/get.ts","../src/instruction/ref.ts","../src/instruction/set.ts","../src/instruction/use.keyed.ts","../src/instruction/use.ts","../src/instruction/has.ts","../src/register.ts","../src/react/useLocal.ts","../src/react/tap.ts","../src/react/use.ts","../src/react/useModel.ts","../src/react/useFrom.ts","../src/react/useTap.ts","../src/react/mvc.ts","../src/react/consumer.ts","../src/react/provider.ts","../src/react/global.ts"],"sourcesContent":["declare namespace Issue {\n export type Variable = {} | string | number | boolean | null;\n export type Variables<T> = T extends (...args: infer T) => any ? T : never;\n\n export type Messages = {\n [named: string]: (...args: Variable[]) => string;\n }\n\n export type Output<M extends Messages> = {\n readonly [P in keyof M]: (...args: Variables<M[P]>) => Issue;\n }\n}\n\nexport class Issue extends Error {\n // drop first line (error factory) in stack trace.\n stack = this.stack.replace(/\\n.+/, \"\") as string;\n\n warn(){\n console.warn(this.message);\n }\n}\n\nexport function issues<M extends Issue.Messages>(register: M){\n const Library = {} as any;\n\n for(const name in register)\n Library[name] = (...args: Issue.Variable[]) => \n new Issue(register[name].apply(null, args));\n\n return Library as Issue.Output<M>;\n}","import { Controller } from './controller';\nimport { issues } from './issues';\n\nexport const Oops = issues({\n NotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`,\n})\n\ntype Suspense<T = any> = Promise<T> & Error;\n\nexport function suspend(\n source: Controller, key: string): Suspense {\n\n const error =\n Oops.NotReady(source.subject, key);\n\n const promise = new Promise<void>(resolve => {\n const release = source.addListener(forKey => {\n if(forKey == key)\n return () => {\n if(source.state.get(key) !== undefined){\n release();\n resolve();\n }\n }\n });\n });\n\n return Object.assign(promise, {\n toString: () => String(error),\n name: \"Suspense\",\n message: error.message,\n stack: error.stack\n });\n}\n\nexport function mayRetry(fn: () => any): any {\n const retry = (err: unknown) => {\n if(err instanceof Promise)\n return err.then(compute);\n else\n throw err;\n }\n\n const compute = (): any => {\n try {\n const output = fn();\n\n return output instanceof Promise\n ? output.catch(retry)\n : output;\n }\n catch(err){\n return retry(err);\n }\n }\n\n return compute();\n}","import { Controller } from '../controller';\nimport { issues } from '../issues';\nimport { Subscriber } from '../subscriber';\nimport { suspend } from '../suspense';\nimport { Callback } from '../types';\n\nimport type { get } from './get';\n\nexport const Oops = issues({\n Failed: (parent, property, initial) =>\n `An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} [${parent}.${property}].`\n});\n\nconst INFO = new WeakMap<Function, string>();\nconst KEYS = new WeakMap<Controller, Callback[]>();\nconst ORDER = new WeakMap<Controller, Callback[]>();\n\nexport function computeMode(\n self: Controller,\n source: Controller,\n setter: get.Function<any, any>,\n key: string,\n required: boolean\n){\n const { subject, state } = self;\n\n let sub: Subscriber;\n let order = ORDER.get(self)!;\n\n if(!order)\n ORDER.set(self, order = []);\n\n const compute = (initial: boolean) => {\n try {\n return setter.call(sub.proxy, sub.proxy);\n }\n catch(err){\n Oops.Failed(subject, key, initial).warn();\n throw err;\n }\n }\n\n const refresh = () => {\n let value;\n\n try {\n value = compute(false);\n }\n catch(e){\n console.error(e);\n }\n finally {\n if(state.get(key) !== value){\n state.set(key, value);\n self.update(key);\n return value;\n }\n }\n }\n\n const update = (_key: any, source: Controller) => {\n if(source !== self){\n refresh();\n return;\n }\n\n let pending = KEYS.get(self);\n\n if(!pending)\n KEYS.set(self, pending = []);\n\n pending.push(refresh);\n }\n\n const create = () => {\n sub = source.subscribe(update);\n\n try {\n const value = compute(true);\n state.set(key, value);\n return value;\n }\n catch(e){\n throw e;\n }\n finally {\n sub.commit();\n order.push(refresh);\n }\n }\n\n INFO.set(refresh, key);\n\n return () => {\n const value = sub ? state.get(key) : create();\n\n if(value === undefined && required)\n throw suspend(self, key);\n\n return value;\n }\n}\n\nexport function flush(control: Controller){\n const pending = KEYS.get(control);\n\n if(!pending)\n return;\n\n const list = ORDER.get(control)!;\n\n while(pending.length){\n const compute = pending\n .sort((a, b) => list.indexOf(b) - list.indexOf(a))\n .pop()!\n\n const key = INFO.get(compute)!;\n\n if(!control.frame.has(key))\n compute();\n }\n\n KEYS.delete(control);\n}","import { issues } from './issues';\nimport { Model } from './model';\n\nimport type { Callback } from './types';\n\nexport const Oops = issues({\n BadCallback: () =>\n `Callback for effect-callback may only return a function.`\n})\n\nconst {\n assign,\n create,\n defineProperty,\n entries,\n getPrototypeOf,\n getOwnPropertyNames,\n getOwnPropertyDescriptor,\n getOwnPropertySymbols,\n values\n} = Object;\n\nexport {\n assign,\n create,\n defineProperty,\n entries,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n getOwnPropertyNames,\n getOwnPropertySymbols,\n values\n}\n\nexport function createEffect(\n callback: Model.Effect<any>){\n\n let unSet: Callback | Promise<any> | void;\n\n return function(this: any, value: any){\n if(typeof unSet == \"function\")\n unSet();\n\n unSet = callback.call(this, value);\n\n if(unSet instanceof Promise)\n unSet = undefined;\n\n if(unSet && typeof unSet !== \"function\")\n throw Oops.BadCallback()\n }\n}\n\nexport type AssignCallback<T> =\n (this: any, argument: T, thisArg: any) =>\n ((next: T) => void) | Promise<any> | void | boolean;\n\nexport function createValueEffect<T = any>(\n callback: AssignCallback<T>){\n\n let unSet: ((next: T) => void) | undefined;\n\n return function(this: any, value: any){\n if(typeof unSet == \"function\")\n unSet(value);\n\n const out = callback.call(this, value, this);\n\n if(typeof out == \"boolean\")\n return out;\n\n if(!out || out instanceof Promise)\n return;\n\n if(typeof out == \"function\")\n unSet = out;\n else\n throw Oops.BadCallback()\n }\n}","import { CONTROL, Controller, ensure, getUpdate, UPDATE } from './controller';\nimport { issues } from './issues';\nimport { Subscriber } from './subscriber';\nimport { mayRetry } from './suspense';\nimport { createEffect, defineProperty, getOwnPropertyNames } from './util';\n\nimport type { Callback, Class, InstanceOf } from './types';\n\nexport const Oops = issues({\n Timeout: (keys, timeout) => \n `No update for [${keys}] within ${timeout}.`,\n\n StrictUpdate: () => \n `Strict update() did not find pending updates.`,\n\n NoChaining: () =>\n `Then called with undefined; update promise will never catch nor supports chaining.`\n});\n\nexport const WHY = Symbol(\"UPDATE\");\nexport const LOCAL = Symbol(\"LOCAL\");\nexport const STATE = Symbol(\"STATE\");\n\nexport interface Stateful {\n /** Controller for this instance. */\n [CONTROL]?: Controller;\n\n /** Current subscriber (if present) while used in a live context (e.g. hook or effect). */\n [LOCAL]?: Subscriber;\n\n /** Current state of this instance. */\n [STATE]?: Model.Values<this>;\n\n /**\n * Last update causing a refresh to subscribers.\n * \n * If accessed directly, will contain all keys from last push.\n * If within a subscribed function, will contain only keys which explicitly caused a refresh.\n */\n [WHY]?: readonly Model.Event<this>[];\n};\n\ndeclare namespace Model {\n /** Including but not limited to T. */\n type Extends<T> = T | (string & Record<never, never>);\n\n export { Controller };\n export { Subscriber };\n\n export type OnUpdate<T, P> = (this: T, value: ValueOf<keyof T, P>, changed: P) => void;\n\n export type Effect<T> = (this: T, argument: T) => Callback | Promise<any> | void;\n\n /** Exotic value, actual value is contained. */\n export interface Ref<T = any> {\n (next: T): void;\n current: T | null;\n }\n\n /** Properties of T, of which are methods. */\n export type Methods<T> = {\n [K in keyof T]:\n T[K] extends Ref ? never :\n T[K] extends Function ? K :\n never;\n }[keyof T];\n /**\n * Subset of `keyof T` which are not methods or defined by base Model U.\n * \n * **Note**: This excludes all keys which are not of type `string` (only those are managed).\n **/\n // TODO: Should exclude methods\n export type Field<T, U extends Model = Model> = Exclude<keyof T & string, keyof U>;\n\n /**\n * Including but not limited to `keyof T` which are not methods or defined by base Model.\n **/\n export type Event<T, U extends Model = Model> = Extends<Field<T, U>>;\n\n /** Object containing managed entries found in T. */\n export type Entries<T, U extends Model = Model> = Pick<T, Field<T, U>>;\n\n /** Object comperable to data found in T. */\n export type Compat<T, U extends Model = Model> = Partial<Entries<T, U>>;\n\n /** Actual value stored in state. */\n export type Value<R> = R extends Ref<infer T> ? T : R;\n\n /** Actual value belonging to a managed property. */\n export type ValueOf<T extends {}, K> = K extends keyof T ? Value<T[K]> : undefined;\n\n /**\n * Values from current state of given controller.\n * \n * Differs from `Entries` as values here will drill into \"real\" values held by exotics like ref.\n */\n export type Values<T, K extends Field<T, Model> = Field<T, Model>> = {\n [P in K]: Value<T[P]>;\n }\n}\n\ninterface Model extends Stateful {\n /**\n * Circular reference to `this` controller.\n * \n * Useful to obtain full reference where one has already destructured.\n */\n is: this;\n}\n\nclass Model {\n static [WHY]: readonly string[];\n\n constructor(){\n defineProperty(this, CONTROL, {\n value: new Controller(this)\n });\n defineProperty(this, \"is\", {\n value: this\n });\n }\n\n get [STATE]() {\n return this.export();\n }\n\n get [WHY](){\n return UPDATE.get(this);\n }\n\n on <P = Model.Event<this>> (event: (key: P) => Callback | void): Callback;\n on <P = Model.Event<this>> (keys: [], listener: Model.OnUpdate<this, P>, squash?: boolean, once?: boolean): Callback;\n on <P = Model.Event<this>> (keys: [], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n on (keys: [], listener: unknown, squash: boolean, once?: boolean): Callback;\n on <P extends Model.Event<this>> (key: P | P[], listener: Model.OnUpdate<this, P>, squash?: boolean, once?: boolean): Callback;\n on <P extends Model.Event<this>> (key: P | P[], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n on <P extends Model.Event<this>> (key: P | P[], listener: unknown, squash: boolean, once?: boolean): Callback;\n\n on <P extends Model.Event<this>> (\n select: P | P[] | ((key: any) => Callback | void),\n handler?: Function,\n squash?: boolean,\n once?: boolean){\n\n return ensure(this, control => {\n if(typeof select == \"function\")\n return control.addListener(select);\n\n const keys = \n typeof select == \"string\" ? [ select ] :\n select.length ? select : [ ...control.state.keys() ];\n\n for(const key of keys)\n try { void (this as any)[key] }\n catch(e){}\n\n const callback = squash\n ? () => {\n handler!.call(this, getUpdate(this))\n }\n : () => {\n getUpdate(this)\n .filter(k => keys.includes(k as any))\n .forEach(k => {\n handler!.call(this, control.state.get(k), k)\n })\n }\n\n const onEvent = once\n ? () => {\n remove();\n callback();\n }\n : callback;\n\n const remove = control.addListener(key => {\n if(keys.includes(key as any))\n return onEvent;\n });\n\n return remove;\n });\n }\n\n once <P = Model.Event<this>> (keys: [], listener: Model.OnUpdate<this, P>, squash?: false, once?: boolean): Callback;\n once <P = Model.Event<this>> (keys: [], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n once <P = Model.Event<this>> (keys: [], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n once (keys: [], listener: unknown, squash: boolean, once?: boolean): Callback;\n once <P extends Model.Event<this>> (key: P | P[], listener: Model.OnUpdate<this, P>, squash?: false): Callback;\n once <P extends Model.Event<this>> (key: P | P[], listener: (keys: P[]) => void, squash: true): Callback;\n once <P extends Model.Event<this>> (key: P | P[], listener: unknown, squash: boolean): Callback;\n once <P extends Model.Event<this>> (key: P | P[], timeout?: number): Promise<void>;\n\n once <P extends Model.Event<this>> (\n select: P | P[],\n argument?: Model.OnUpdate<any, any> | number,\n squash?: boolean){\n\n if(typeof argument == \"function\")\n return this.on(select, argument, squash, true);\n\n if(typeof select == \"string\")\n select = [ select ];\n\n return new Promise<void>((resolve, reject) => {\n const invoke = (key?: string | null) => {\n if(!key){\n clear();\n reject(\n Oops.Timeout(select,\n typeof argument == \"number\"\n ? `${argument}ms`\n : `lifetime of ${this}`\n )\n );\n }\n else if((select as string[]).includes(key)){\n clear();\n return resolve;\n }\n }\n\n const clear = ensure(this, x => {\n for(const key of select)\n try { void (this as any)[key] }\n catch(e){}\n\n return x.addListener(invoke);\n })\n\n if(typeof argument == \"number\")\n setTimeout(invoke, argument);\n });\n }\n\n effect(callback: Model.Effect<this>): Callback;\n effect(callback: Model.Effect<this>, select: []): Callback;\n effect(callback: Model.Effect<this>, select: Model.Event<this>[]): Callback;\n\n effect(callback: Model.Effect<this>, select?: Model.Event<this>[]){\n const effect = createEffect(callback);\n\n return ensure(this, control => {\n let busy = false;\n let inject = this.is;\n\n const invoke = () => {\n if(busy)\n return;\n\n const output = mayRetry(() => {\n effect.call(inject, inject);\n })\n\n if(output instanceof Promise){\n output.finally(() => busy = false);\n busy = true;\n }\n }\n\n if(!select){\n const sub = control.subscribe(() => invoke);\n\n inject = sub.proxy;\n invoke();\n\n return sub.commit();\n }\n\n invoke();\n\n return control.addListener(key => {\n if(key === null){\n if(!select.length)\n invoke();\n }\n else if(select.includes(key))\n return invoke;\n });\n })\n }\n\n // TODO: account for exotic properties\n import <O extends Model.Compat<this>> (source: O, select?: (keyof O)[]){\n const { subject } = ensure(this);\n\n if(!select)\n select = getOwnPropertyNames(subject) as (keyof O)[];\n\n for(const key of select)\n if(key in source)\n (this as any)[key] = source[key];\n }\n\n export(): Model.Values<this>;\n export <P extends Model.Field<this>> (select: P[]): Model.Values<this, P>;\n\n export <P extends Model.Field<this>> (subset?: Set<P> | P[]){\n const { state } = ensure(this);\n const output = {} as Model.Values<this, P>;\n const keys = subset || state.keys();\n\n for(const key of keys)\n (output as any)[key] = state.get(key);\n\n return output;\n }\n\n update(): PromiseLike<readonly Model.Event<this>[] | false>;\n update(strict: true): Promise<readonly Model.Event<this>[]>;\n update(strict: false): Promise<false>;\n update(strict: boolean): Promise<readonly Model.Event<this>[] | false>;\n update(keys: Model.Event<this>): PromiseLike<readonly Model.Event<this>[]>;\n update(keys: Model.Event<this>, callMethod: boolean): PromiseLike<readonly Model.Event<this>[]>;\n update<T>(keys: Model.Event<this>, argument: T): PromiseLike<readonly Model.Event<this>[]>;\n\n update(arg?: any, tag?: any): any {\n const target = ensure(this);\n const { frame, waiting } = target;\n\n if(typeof arg == \"string\"){\n target.update(arg as Model.Field<this>);\n\n if(1 in arguments && arg in this){\n const method = (this as any)[arg];\n\n if(typeof method == \"function\")\n if(typeof tag != \"boolean\")\n method.call(this, tag);\n else if(tag)\n method.call(this);\n }\n\n arg = undefined;\n }\n\n if(!frame.size && arg === true)\n return Promise.reject(Oops.StrictUpdate());\n\n return <PromiseLike<readonly Model.Event<this>[] | false>> {\n then: (callback) => {\n if(!callback)\n throw Oops.NoChaining();\n\n if(frame.size || arg !== false)\n waiting.add(() => {\n callback(getUpdate(this));\n });\n else\n callback(false);\n }\n }\n }\n\n /** \n * Mark this instance for garbage-collection and send `willDestroy` event to all listeners.\n */\n destroy(){\n ensure(this).clear();\n }\n\n toString(){\n return this.constructor.name;\n }\n\n /**\n * Creates a new instance of this controller.\n * \n * Beyond `new this(...)`, method will activate managed-state.\n * \n * @param args - arguments sent to constructor\n */\n static create<T extends Class>(\n this: T, ...args: ConstructorParameters<T>): InstanceOf<T> {\n\n const instance = new this(...args);\n\n ensure(instance);\n\n return instance;\n }\n\n /**\n * Static equivalent of `x instanceof this`.\n * \n * Will determine if provided class is a subtype of this one. \n */\n static isTypeof<T extends new () => Model>(\n this: T, maybe: any): maybe is T {\n\n return (\n typeof maybe == \"function\" &&\n maybe.prototype instanceof this\n )\n }\n}\n\nexport { Model }","import { getUpdate, Controller, UPDATE, LISTEN } from './controller';\nimport { LOCAL, Stateful } from './model';\nimport { create, defineProperty } from './util';\n\nimport type { Callback } from './types';\n\ntype Listener = {\n commit(): void;\n release(): void;\n}\n\nexport class Subscriber <T extends Stateful = any> {\n public proxy!: T;\n public commit: () => Callback;\n public release!: Callback;\n\n public active = false;\n public dependant = new Set<Listener>();\n public add: (key: any, value?: boolean | Callback) => void;\n\n constructor(\n parent: Controller<T>,\n public onUpdate: Controller.OnEvent){\n\n const proxy = create(parent.subject);\n const using = new Map<any, boolean | (() => true | void)>();\n\n const listen = this.add = (\n key: any,\n value?: boolean | Callback) => {\n \n if(value !== undefined)\n using.set(key, value);\n else if(!using.has(key))\n using.set(key, true);\n }\n\n LISTEN.set(proxy, listen);\n \n defineProperty(proxy, LOCAL, { value: this });\n defineProperty(this, \"proxy\", {\n configurable: true,\n get(){\n if(UPDATE.has(proxy))\n setTimeout(() => UPDATE.delete(proxy), 0);\n\n return proxy;\n }\n })\n\n const release = parent.addListener(key => {\n if(!this.active)\n return;\n\n const handler = using.get(key);\n let notify: void | Callback;\n\n if(typeof handler == \"function\"){\n const callback = handler();\n\n if(callback === true)\n notify = this.onUpdate(key, parent);\n }\n else if(handler === true)\n notify = this.onUpdate(key, parent);\n\n if(!notify)\n return;\n\n const notate = () => {\n UPDATE.set(proxy, \n getUpdate(parent.subject).filter(k => using.has(k))\n );\n }\n\n parent.waiting.add(notate);\n parent.waiting.add(notify);\n });\n\n this.commit = () => {\n this.active = true;\n this.dependant.forEach(x => x.commit());\n\n return this.release;\n }\n\n this.release = () => {\n this.dependant.forEach(x => x.release());\n release();\n }\n }\n}","import { PENDING } from './instruction/apply';\nimport { flush } from './instruction/get.compute';\nimport { Model, Stateful } from './model';\nimport { Subscriber } from './subscriber';\nimport { defineProperty, getOwnPropertyDescriptor } from './util';\n\nimport type { Callback } from './types';\n\ntype ListenToKey = <T = any>(key: T, callback?: boolean | Callback) => void;\n\nconst UPDATE = new WeakMap<{}, readonly string[]>();\nconst LISTEN = new WeakMap<{}, ListenToKey>();\nconst CONTROL = Symbol(\"CONTROL\");\n\nfunction getUpdate<T extends {}>(subject: T){\n return UPDATE.get(subject) as readonly Model.Field<T>[];\n}\n\ndeclare namespace Controller {\n // TODO: implement value type\n type OnValue<T = any> = (this: T, value: any) => boolean | void;\n type OnEvent<T = any> = (key: Model.Event<T> | null, source: Controller) => Callback | void;\n}\n\nclass Controller<T extends Stateful = any> {\n public state!: Map<any, any>;\n public frame = new Set<string>();\n public waiting = new Set<Callback>();\n public followers = new Set<Controller.OnEvent>();\n\n constructor(public subject: T){}\n\n subscribe(callback: Controller.OnEvent<T>){\n return new Subscriber<T>(this, callback);\n }\n\n add(key: keyof T & string){\n const { subject, state } = this;\n const { value } = getOwnPropertyDescriptor(subject, key)!;\n\n if(typeof value == \"function\")\n return;\n\n if(typeof value == \"symbol\"){\n const instruction = PENDING.get(value);\n\n if(instruction){\n delete subject[key];\n PENDING.delete(value);\n instruction.call(this, key, this);\n }\n\n return;\n }\n\n state.set(key, value);\n\n defineProperty(subject, key, {\n enumerable: false,\n set: this.ref(key as any),\n get(){\n const listen = LISTEN.get(this);\n\n if(listen)\n listen(key);\n\n return state.get(key);\n }\n });\n }\n\n addListener(listener: Controller.OnEvent<T>){\n this.followers.add(listener);\n return () => {\n this.followers.delete(listener)\n }\n }\n\n ref(\n key: Model.Field<T>,\n handler?: Controller.OnValue<T>){\n \n const { subject, state } = this;\n \n return (value: any) => {\n if(state.get(key) == value)\n return;\n \n if(handler)\n switch(handler.call(subject, value)){\n case true:\n this.update(key);\n case false:\n return;\n }\n \n state.set(key, value);\n this.update(key);\n }\n }\n\n update(key: Model.Field<T>){\n const { followers, frame, subject, waiting } = this;\n \n if(frame.has(key))\n return;\n \n else if(!frame.size)\n setTimeout(() => {\n flush(this);\n \n UPDATE.set(subject, Array.from(frame));\n\n setTimeout(() => {\n UPDATE.delete(subject);\n }, 0);\n \n frame.clear();\n \n for(const notify of waiting)\n try {\n waiting.delete(notify);\n notify();\n }\n catch(err){\n console.error(err);\n }\n }, 0);\n \n frame.add(key);\n \n for(const callback of followers){\n const event = callback(key, this);\n \n if(typeof event == \"function\")\n waiting.add(event);\n }\n }\n\n clear(){\n const listeners = [ ...this.followers ];\n\n this.followers.clear();\n listeners.forEach(x => x(null, this));\n }\n}\n\ntype EnsureCallback<T extends Stateful> = (control: Controller<T>) => Callback | void;\n\nfunction ensure<T extends Stateful>(subject: T): Controller<T>;\nfunction ensure<T extends Stateful>(subject: T, cb: EnsureCallback<T>): Callback;\nfunction ensure<T extends {}>(subject: T): Controller<T & Stateful>;\n\nfunction ensure<T extends Stateful>(subject: T, cb?: EnsureCallback<T>){\n let control = subject[CONTROL]!;\n\n if(!control)\n defineProperty(subject, CONTROL, {\n value: control =\n new Controller(subject as unknown as Stateful)\n });\n\n if(!control.state){\n const { waiting } = control;\n\n if(cb){\n let done: Callback | void;\n\n waiting.add(() => {\n done = cb(control);\n });\n\n return () => done && done();\n }\n\n control.state = new Map();\n\n for(const key in subject)\n control.add(key);\n\n const callback = Array.from(waiting);\n\n waiting.clear();\n \n for(const cb of callback)\n cb();\n }\n\n return cb ? cb(control) : control;\n}\n\nexport {\n ensure,\n Controller,\n getUpdate,\n UPDATE,\n LISTEN,\n CONTROL\n}","import { Controller, CONTROL, ensure, LISTEN } from '../controller';\nimport { LOCAL, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { suspend } from '../suspense';\nimport { Callback } from '../types';\nimport { defineProperty } from '../util';\n\nconst PENDING = new Map<symbol, Instruction.Runner<any>>();\n\n/**\n * Property initializer, will run upon instance creation.\n * Optional returned callback will run when once upon first access.\n */\ntype Instruction<T> = (this: Controller, key: string, thisArg: Controller) =>\n | Instruction.Getter<T> \n | Instruction.ExplicitDescriptor\n | Instruction.Descriptor<T>\n | Instruction.RecursiveDescriptor<T>\n | boolean\n | void;\n\ndeclare namespace Instruction {\n type Getter<T> = (within?: Subscriber) => T;\n type Setter<T> = (value: T) => boolean | void;\n\n type Runner<T> = (this: Controller, key: string, on: Controller) =>\n Instruction.Descriptor<T> | boolean | undefined;\n\n interface Descriptor<T> {\n configurable?: boolean;\n enumerable?: boolean;\n value?: T;\n writable?: boolean;\n get?: Getter<T>;\n set?: Setter<T> | false;\n suspense?: boolean;\n destroy?: () => void;\n }\n\n interface ExplicitDescriptor extends PropertyDescriptor {\n explicit: true;\n }\n\n interface RecursiveDescriptor<T> {\n recursive: true;\n enumerable?: boolean;\n value?: T;\n set?: Setter<T> | false;\n suspense?: boolean;\n }\n}\n\n/**\n * Run instruction as controller sets itself up.\n * This will specialize the behavior of a given property.\n */\nfunction apply <T = any> (instruction: Instruction<T>, name?: string): T;\n\nfunction apply<T = any>(\n fn: Instruction<any>, label?: string){\n\n const name = label || fn.name || \"pending\";\n const placeholder = Symbol(`${name} instruction`);\n\n function setup(this: Controller, key: string){\n const { subject, state } = this;\n\n let output = fn.call(this, key, this);\n\n if(typeof output == \"function\")\n output = { get: output };\n\n if(typeof output != \"object\")\n return;\n\n if(\"explicit\" in output && output.explicit){\n defineProperty(subject, key, output);\n return false;\n }\n\n let {\n get: onGet,\n set: onSet,\n suspense\n } = output as Instruction.Descriptor<any>;\n\n if(\"value\" in output)\n state.set(key, output.value);\n\n if(\"recursive\" in output && output.recursive)\n onGet = getRecursive(key, this);\n\n if(\"destroy\" in output){\n const { destroy } = output;\n\n if(destroy)\n this.addListener((key) => {\n if(key == null)\n destroy();\n })\n }\n\n const control = this;\n\n defineProperty(subject, key, {\n enumerable: output.enumerable,\n set: onSet !== false\n ? this.ref(key, onSet)\n : undefined,\n\n get(this: Stateful){\n if(!state.has(key) && suspense)\n throw suspend(control, key);\n \n const listen = LISTEN.get(this);\n const local = this[LOCAL];\n \n if(listen)\n listen(key);\n \n return onGet\n ? onGet(local)\n : state.get(key);\n }\n });\n }\n\n PENDING.set(placeholder, setup);\n\n return placeholder as unknown as T;\n}\n\nexport function getRecursive(key: string, from: Controller){\n const context = new WeakMap<Subscriber, Stateful | undefined>();\n\n return (local: Subscriber | undefined) => {\n if(!local)\n return from.state.get(key);\n\n if(!context.has(local)){\n let reset: Callback | undefined;\n\n const init = () => {\n if(reset)\n reset();\n\n const value = from.state.get(key);\n \n if(value && CONTROL in value){\n const child = ensure(value).subscribe(local.onUpdate);\n \n if(local.active)\n child.commit();\n \n local.dependant.add(child);\n context.set(local, child.proxy);\n\n reset = () => {\n child.release();\n local.dependant.delete(child);\n context.set(local, undefined);\n reset = undefined;\n }\n }\n\n return true;\n }\n \n local.add(key, init);\n init();\n }\n\n return context.get(local);\n }\n}\n\nexport { apply, Instruction, PENDING }","import { issues } from '../issues';\nimport { mayRetry } from '../suspense';\nimport { defineProperty } from '../util';\nimport { apply } from './apply';\n\ntype Async<T = any> = (...args: any[]) => Promise<T>;\n\nexport const Oops = issues({\n DuplicatePending: (key) =>\n `Invoked action ${key} but one is already active.`\n})\n\n/**\n * Sets an exotic method with managed ready-state. Property accepts an async function.\n *\n * When an act-method is invoked, its `active` property to true for duration of call.\n * This is emitted as an update to property, both when called and after returns (or throws).\n *\n * **Note:** Subsequent calls will immediately throw if one is still pending.\n *\n * @param action - Action to fire when resulting property is invoked.\n */\nfunction act (action: Async): typeof action & { active: boolean };\nfunction act <S> (action: Async<S>): typeof action & { active: boolean };\n\nfunction act<T extends Async>(task: T){\n return apply<T>(\n function act(key){\n let pending = false;\n\n const invoke = async (...args: any[]) => {\n if(pending)\n return Promise.reject(\n Oops.DuplicatePending(key)\n )\n\n pending = true;\n this.update(key);\n\n try {\n return await mayRetry(() => (\n task.apply(this.subject, args)\n ))\n }\n finally {\n pending = false;\n this.update(key);\n }\n }\n\n this.state.set(key, undefined);\n\n defineProperty(invoke, \"active\", {\n get: () => pending\n })\n\n return {\n value: invoke as T,\n set: false\n };\n }\n )\n}\n\nexport { act }","import { Controller } from \"../controller\";\nimport { Oops } from \"./get\";\n\nexport function factoryMode<T>(\n self: Controller,\n output: Promise<T> | T,\n key: string,\n required: boolean\n){\n const { subject, state } = self;\n\n let pending: Promise<any> | undefined;\n let error: any;\n\n if(output instanceof Promise){\n state.set(key, undefined);\n\n pending = output\n .catch(err => error = err)\n .then(val => {\n state.set(key, val);\n return val;\n })\n .finally(() => {\n pending = undefined;\n self.update(key);\n })\n }\n\n state.set(key, output);\n\n const suspend = () => {\n if(required === false)\n return undefined;\n\n const issue =\n Oops.NotReady(subject, key);\n\n Object.assign(pending!, {\n message: issue.message,\n stack: issue.stack\n });\n\n throw pending;\n }\n \n return (): T | undefined => {\n if(error)\n throw error;\n\n if(pending)\n return suspend();\n\n if(state.has(key))\n return state.get(key);\n }\n}","import { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Stateful } from '../model';\nimport { mayRetry } from '../suspense';\nimport { apply } from './apply';\nimport { computeMode } from './get.compute';\nimport { factoryMode } from './get.factory';\n\nexport const Oops = issues({\n // BadSource: (model, property, got) =>\n // `Bad from-instruction provided to ${model}.${property}. Expects an arrow-function or a Model as source. Got ${got}.`,\n\n PeerNotAllowed: (model, property) =>\n `Attempted to use an instruction result (probably use or tap) as computed source for ${model}.${property}. This is not possible.`,\n\n ComputeFailed: (model, key) =>\n `Generating initial value for ${model}.${key} failed.`,\n\n NotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`,\n\n FactoryFailed: (model, key) =>\n `Generating initial value for ${model}.${key} failed.`,\n\n Failed: (parent, property, initial) =>\n `An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} [${parent}.${property}].`\n});\n\ndeclare namespace get {\n type Function<T, S = any> = (this: S, on: S) => T;\n type Factory<T, S = unknown> = (this: S, key: string, thisArg: S) => T;\n}\n\n/**\n * Implement a computed value; output will be generated by provided function.\n *\n * @param source - Source model from which computed value will be a subscriber.\n * @param compute - Compute function. Bound to a subscriber-proxy of source, returns output value. Will update automatically as input values change.\n * @param suspend - Value will throw suspense when evaulating to undefined.\n */\nfunction get <R, T> (source: T, compute: (this: T, on: T) => R, suspend: true): Exclude<R, undefined>;\nfunction get <R, T> (source: T, compute: (this: T, on: T) => R, suspend?: boolean): R;\n\n/**\n * Implement a computed value; output is returned by function from provided factory.\n *\n * @param compute - Factory function to generate a getter to subscribe dependancies.\n * @param suspend - Value will throw suspense when evaulating to undefined.\n */\nfunction get <R, T> (compute: (property: string, on: T) => (this: T, state: T) => R, suspend: true): Exclude<R, undefined>;\nfunction get <R, T> (compute: (property: string, on: T) => (this: T, state: T) => R, suspend?: boolean): R;\n\n/**\n * Set property with an async function.\n *\n * Property cannot be accessed until factory resolves, yeilding a result.\n * If accessed while processing, React Suspense will be thrown.\n *\n * - `required: true` (default) -\n * Run factory immediately upon creation of model instance.\n * - `required: false` -\n * Run factory only if/when accessed.\n * Value will always throw suspense at least once - use with caution.\n *\n * @param factory - Callback run to derrive property value.\n * @param required - (default: true) Run factory immediately on creation, otherwise on access.\n */\nfunction get <T> (factory: get.Factory<Promise<T>>, required: false): T | undefined;\nfunction get <T, S> (factory: get.Factory<Promise<T>, S>, required: false): T | undefined;\n\nfunction get <T> (factory: get.Factory<Promise<T>>, required?: boolean): T;\nfunction get <T, S> (factory: get.Factory<Promise<T>, S>, required?: boolean): T;\n\n/**\n * Set property with a factory function.\n *\n * - `required: true` (default) -\n * Run factory immediately upon creation of model instance.\n * - `required: false` -\n * Run factory only if/when accessed.\n * Value will always throw suspense at least once - use with caution.\n *\n * @param factory - Callback run to derrive property value.\n * @param required - (default: true) Run factory immediately on creation, otherwise on access.\n */\nfunction get <T>(factory: get.Factory<T>, required: false): T | undefined;\nfunction get <T, S>(factory: get.Factory<T, S>, required: false): T | undefined;\n\nfunction get <T>(factory: get.Factory<T>, required?: boolean): T;\nfunction get <T, S>(factory: get.Factory<T, S>, required?: boolean): T;\n\n/**\n * Assign a property with result of a promise.\n */\nfunction get <T> (factory: Promise<T>, required: false): T | undefined;\nfunction get <T> (factory: Promise<T>, required?: boolean): T;\n \nfunction get<R, T>(\n arg0: ((this: T, key: string, thisArg: T) => get.Function<R, T> | T) | Promise<R> | Stateful,\n arg1?: get.Function<T> | boolean,\n arg2?: boolean): R {\n\n return apply(\n function get(key){\n const { subject } = this;\n const computeRequired = arg1 === true || arg2 === true;\n const factoryRequired = arg1 !== false && arg2 !== false;\n\n let getter: () => any;\n\n // Easy mistake, using a peer, will always be unresolved.\n if(typeof arg0 == \"symbol\")\n throw Oops.PeerNotAllowed(subject, key);\n\n // if(typeof arg0 == \"function\" && /^[A-Z]/.test(arg0.name))\n // throw Oops.BadSource(subject, key, arg0);\n\n this.state.set(key, undefined);\n\n const init = (): any => {\n let source = this;\n let setter: get.Function<T, any>;\n \n if(typeof arg0 == \"function\"){\n const result = mayRetry(() => arg0.call(subject, key, subject));\n \n if(typeof result == \"function\")\n setter = result;\n else {\n getter = factoryMode(this, result, key, factoryRequired);\n return;\n }\n }\n else if(arg0 instanceof Promise){\n getter = factoryMode(this, arg0, key, factoryRequired);\n return;\n }\n else if(typeof arg1 == \"function\"){\n // replace source controller in-case it is different\n source = ensure(arg0);\n setter = arg1;\n }\n else\n throw new Error(`Factory argument cannot be ${arg1}`);\n\n getter = computeMode(this, source, setter, key, computeRequired);\n }\n\n if(typeof arg0 == \"function\" && computeRequired)\n try {\n init();\n }\n catch(err){\n Oops.ComputeFailed(subject, key).warn();\n throw err;\n }\n\n return () => {\n if(!getter)\n init();\n\n return getter();\n }\n }\n )\n}\n\nexport { get }","import { Controller, ensure } from '../controller';\nimport { Model } from '../model';\nimport { createValueEffect, defineProperty } from '../util';\nimport { apply } from './apply';\n\ndeclare namespace ref {\n type Callback<T, S = any> = (this: S, argument: T) =>\n ((next: T) => void) | Promise<void> | void | boolean;\n\n interface Object<T = any> {\n (next: T): void;\n current: T | null;\n }\n\n /** Object with references to all managed values of `T`. */\n type Proxy<T extends Model> = {\n [P in Model.Field<T>]-?: Model.Ref<T[P]>\n };\n\n type CustomProxy<T extends Model, R> = {\n [P in Model.Field<T>]-?: R;\n }\n}\n\n/**\n * Creates an object with references to all managed values.\n * Each property is a function to set value in state when invoked.\n *\n * *Properties are simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param target - Source model from which to reference values.\n */\nfunction ref <T extends Model> (target: T): ref.Proxy<T>;\n\n/**\n * Creates an object with values based on managed values.\n * Each property will invoke mapper function on first access supply\n * the its return value going forward.\n *\n * @param target - Source model from which to reference values.\n * @param mapper - Function producing the placeholder value for any given property.\n */\nfunction ref <O extends Model, R>\n (target: O, mapper: (key: Model.Field<O>) => R): ref.CustomProxy<O, R>;\n\n/**\n * Creates a ref-compatible property.\n * Will persist value, and updates to this are made part of controller event-stream.\n *\n * *Output is simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param callback - Optional callback to synchronously fire when reference is first set or does update.\n */\nfunction ref <T = HTMLElement> (callback?: ref.Callback<T>): ref.Object<T>;\nfunction ref <T, S> (callback?: ref.Callback<T, S>): ref.Object<T>;\n\nfunction ref<T>(\n arg?: ref.Callback<T> | Model,\n mapper?: (key: string) => any){\n\n return apply(\n function ref(key){\n let value: ref.Object | ref.Proxy<any> = {};\n\n if(typeof arg != \"object\")\n value = createRef(this, key, arg);\n else\n ensure(arg).state.forEach((_val, key) => {\n defineProperty(value, key,\n mapper ? {\n configurable: true,\n get(){\n const out = mapper(key);\n defineProperty(value, key, { value: out });\n return out;\n }\n } : {\n value: createRef(this, key)\n })\n })\n\n return { value, explicit: true };\n }\n )\n}\n\nexport { ref }\n\nfunction createRef(\n src: Controller,\n key: string,\n cb?: ref.Callback<any>){\n\n const refObjectFunction =\n src.ref(key, cb && createValueEffect(cb));\n\n defineProperty(refObjectFunction, \"current\", {\n set: refObjectFunction,\n get: () => src.state.get(key)\n })\n\n return refObjectFunction as ref.Object;\n}","import { createValueEffect } from '../util';\nimport { apply } from './apply';\n\ndeclare namespace set {\n type Callback<T, S = any> = (this: S, argument: T) =>\n ((next: T) => void) | Promise<any> | void | boolean;\n}\n\n/**\n * Set property with a placeholder.\n * \n * Property cannot be accessed until it is defined. If accessed while undefined, a hybrid\n * `Promise`/`Error` (ala: [Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html)) will be thrown.\n */\nfunction set <T = any>(): T;\n\nfunction set <T> (onUpdate: set.Callback<T>): T;\nfunction set <T, S> (onUpdate: set.Callback<T, S>): T;\n\nfunction set <T> (value: undefined, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: undefined, onUpdate: set.Callback<T, S>): T;\n\nfunction set <T> (value: T, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: T, onUpdate: set.Callback<T, S>): T;\n\nfunction set(\n value?: any,\n argument?: set.Callback<any> | boolean): any {\n\n if(!(1 in arguments)){\n argument = value;\n value = undefined;\n }\n\n return apply(\n function set(key){\n if(value !== undefined)\n this.state.set(key, value);\n\n return {\n suspense: true,\n set: typeof argument == \"function\"\n ? createValueEffect(argument)\n : undefined\n }\n }\n )\n}\n\nexport { set }","import { Controller } from '../controller';\nimport { Subscriber } from '../subscriber';\nimport { assign, create, defineProperty } from '../util';\nimport { Instruction } from './apply';\n\ntype MapFunction<T, R> =\n T extends Map<infer K, infer V> ?\n (value: V, key: K, map: T) => R | void :\n T extends Set<infer K> ?\n (value: K, key: K, set: T) => R | void :\n never;\n\ntype Managed<T> = Exclude<T, \"forEach\"> & {\n from?: T;\n\n forEach<R>(\n mapFunction: MapFunction<T, R>,\n thisArg?: any\n ): Exclude<R, undefined>[] | void;\n}\n\nconst ANY = Symbol(\"any\");\n\ntype Keyed<K = unknown> = Set<K> | Map<K, unknown>;\n\nfunction keyed<T extends Keyed>(\n control: Controller,\n property: any,\n initial: T\n): Instruction.Descriptor<T> {\n type K = typeof ANY | (\n T extends Set<infer U> ? U :\n T extends Map<infer U, any> ? U :\n never\n );\n\n const init = createProxy(emit, watch);\n const frozen = new Set<Subscriber>();\n const context = new Map<Subscriber, T>();\n const users = new Map<Subscriber, Set<K>>();\n const watched = new WeakMap<T, Set<K>>();\n const update = new Set<(key: K) => void>();\n\n let managed: T = init(initial);\n\n function watch(on: any, key: K){\n const include = watched.get(on);\n\n if(include)\n include.add(key);\n }\n\n function emit(key: K){\n control.update(property);\n control.waiting.add(() => frozen.clear());\n update.forEach(notify => notify(key));\n }\n\n function subscribe(local: Subscriber){\n const proxy = create(managed);\n let watch = users.get(local);\n\n if(!watch){\n const using = watch = new Set<K>();\n users.set(local, using);\n \n function onEvent(key: K){\n if(frozen.has(local))\n return;\n \n if(key === ANY || using.has(key) || using.has(ANY)){\n const refresh = local.onUpdate(property, control);\n \n if(refresh){\n frozen.add(local);\n refresh()\n }\n }\n }\n \n local.add(property, false);\n local.dependant.add({\n commit(){\n if(using.size === 0)\n using.add(ANY);\n \n update.add(onEvent);\n },\n release(){\n update.delete(onEvent);\n }\n })\n }\n\n watched.set(proxy, watch);\n context.set(local, proxy);\n\n return proxy;\n }\n\n return {\n value: initial,\n get(local){\n return local ?\n context.get(local) || subscribe(local) :\n managed;\n },\n set(next){\n control.state.set(property, next);\n managed = init(next);\n context.clear();\n emit(ANY);\n },\n destroy(){\n update.clear();\n context.clear();\n }\n }\n}\n\nfunction createProxy(\n emit: (key: any) => void,\n watch: (self: any, key: any) => void){\n\n return <T extends Keyed<any>>(from: T) => {\n const proxy = create(from) as T;\n\n assign(proxy,\n {\n from,\n delete(key: any){\n emit(key);\n return from.delete(key);\n },\n clear(){\n emit(ANY);\n from.clear();\n },\n has(key: any){\n watch(this, key);\n return from.has(key);\n },\n keys(){\n watch(this, ANY);\n return from.keys();\n },\n values(){\n watch(this, ANY);\n return from.values();\n },\n entries(){\n watch(this, ANY);\n return from.entries();\n },\n forEach(\n callbackfn: (a: any, b: any, c: any) => any,\n thisArg: any){\n\n const acc = [] as any[];\n\n from.forEach((a, b, c) => {\n const result = callbackfn.call(thisArg, a, b, c);\n\n if(result !== undefined)\n acc.push(result);\n });\n\n watch(this, ANY);\n\n return acc;\n },\n [Symbol.iterator](){\n watch(this, ANY);\n return from[Symbol.iterator]();\n },\n },\n from instanceof Set\n ? {\n add(key: any){\n from.add(key);\n emit(key);\n return this;\n }\n }\n : {\n get(key: any){\n watch(this, ANY);\n return from.get(key);\n },\n set(key: any, value: any){\n from.set(key, value);\n emit(key);\n return this;\n }\n }\n )\n\n defineProperty(proxy, \"size\", {\n get(){\n watch(this, ANY);\n return from.size;\n }\n })\n \n return proxy;\n }\n}\n\nexport { keyed, Managed };","import { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { mayRetry } from '../suspense';\nimport { Class, InstanceOf } from '../types';\nimport { apply, getRecursive } from './apply';\nimport { keyed, Managed } from './use.keyed';\n\nexport const Parent = new WeakMap<{}, {}>();\n\nexport const Oops = issues({\n BadArgument: (type) =>\n `Instruction \\`use\\` cannot accept argument type of ${type}.`,\n\n NotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`\n})\n\nfunction use <K = any> (initial: SetConstructor): Managed<Set<K>>;\nfunction use <K = any, V = any> (initial: MapConstructor): Managed<Map<K, V>>;\n\nfunction use (initial: Set<unknown>): Managed<Set<any>>;\nfunction use (initial: Map<unknown, unknown>): Managed<Map<any, any>>;\n\nfunction use (from: () => Set<unknown>): Managed<Set<any>>;\nfunction use (from: () => Map<unknown, unknown>): Managed<Map<any, any>>;\n\nfunction use <T extends Set<any> | Map<any, any>> (initial: T): Managed<T>;\nfunction use <T extends Set<any> | Map<any, any>> (from: () => T): Managed<T>;\n\n/**\n * Create a placeholder for specified Model type.\n */\nfunction use <T extends Model> (): T | undefined;\nfunction use <T extends Model> (from: () => T, required: false): T | undefined;\nfunction use <T extends Model> (from: () => T, required: boolean): T;\n\n /**\n * Create a new child instance of model.\n */\nfunction use <T extends Class> (Type: T, callback?: (i: InstanceOf<T>) => void): InstanceOf<T>;\n\n /**\n * Create a managed child from factory function.\n */\nfunction use <T extends {}> (from: () => Promise<T>, required: false): T | undefined;\nfunction use <T extends {}> (from: () => Promise<T>, required: boolean): T;\nfunction use <T extends {}> (from: () => Promise<T>, callback?: (i: T) => void): T;\nfunction use <T extends {}> (from: () => T, callback?: (i: T) => void): T;\n\n /**\n * Create child-instance relationship with provided model.\n *\n * Note: If `peer` is not already initialized before parent is\n * (created with `new` as opposed to create method), that model will\n * attach this via `parent()` instruction. It will not, however, if\n * already active.\n */\nfunction use <T extends {}> (peer: T, callback?: (i: T) => void): T;\n\nfunction use<T extends Class>(\n input?: any,\n argument?: boolean | ((i: InstanceOf<T> | undefined) => void)){\n\n return apply(\n function use(key){\n const { state, subject } = this;\n const required = argument !== false;\n\n let pending: Promise<any> | undefined;\n let error: any;\n let get: (local: Subscriber | undefined) => any =\n (_local: Subscriber | undefined) => state.get(key);\n\n if(typeof input === \"function\"){\n if(\"prototype\" in input &&\n input === input.prototype.constructor)\n input = new input();\n }\n\n else if(input && typeof input !== \"object\")\n throw Oops.BadArgument(typeof input);\n\n if(input instanceof Map || input instanceof Set)\n return keyed(this, key, input);\n\n const onUpdate = (next: {} | undefined) => {\n state.set(key, next);\n\n if(next){\n get = getRecursive(key, this);\n Parent.set(next, subject);\n ensure(next);\n }\n\n if(typeof argument == \"function\")\n argument(next as InstanceOf<T>);\n\n return true;\n }\n\n const suspend = () => {\n if(required === false)\n return;\n\n const issue =\n Oops.NotReady(subject, key);\n\n Object.assign(pending!, {\n message: issue.message,\n stack: issue.stack\n });\n\n throw pending;\n }\n\n const initialize = () => {\n const output = typeof input == \"function\" ?\n mayRetry(() => input.call(subject, subject)) :\n input;\n\n if(output instanceof Promise){\n pending = output\n .catch(err => error = err)\n .then(val => {\n onUpdate(val);\n return val;\n })\n .finally(() => {\n pending = undefined;\n this.update(key);\n })\n\n return;\n }\n\n onUpdate(output);\n }\n\n if(input !== undefined && required)\n initialize();\n\n return {\n set: onUpdate,\n get(local){\n if(pending)\n return suspend();\n \n if(error)\n throw error;\n\n if(!state.has(key))\n initialize();\n \n if(pending)\n return suspend();\n \n return get(local);\n }\n };\n }\n )\n}\n\nexport { use }","import { issues } from '../issues';\nimport { Model } from '../model';\nimport { InstanceOf } from '../types';\nimport { apply } from './apply';\nimport { Parent } from './use';\n\nexport const Oops = issues({\n Required: (expects, child) => \n `New ${child} created standalone but requires parent of type ${expects}. Did you remember to create via use(${child})?`,\n\n Unexpected: (expects, child, got) =>\n `New ${child} created as child of ${got}, but must be instanceof ${expects}.`,\n})\n\n/**\n * Fetches and assigns the controller which spawned this host.\n * When parent assigns an instance via `use()` directive, it\n * will be made available to child upon this request.\n *\n * @param Expects - Type of controller compatible with this class. \n * @param required - Throw if controller is created independantly.\n */\nfunction has <T extends typeof Model> (Expects: T, required: false): InstanceOf<T> | undefined;\nfunction has <T extends typeof Model> (Expects: T, required?: true): InstanceOf<T>;\n\nfunction has<T extends typeof Model>(\n Expects: T, required?: boolean){\n\n return apply(\n function parent(){\n const child = this.subject;\n const value = Parent.get(child) as InstanceOf<T>;\n const expected = Expects.name;\n\n if(!value){\n if(required !== false)\n throw Oops.Required(expected, child);\n }\n else if(!(value instanceof Expects))\n throw Oops.Unexpected(expected, child, value);\n\n return { value };\n }\n );\n }\n\n export { has }","import { Model } from './model';\nimport { create, defineProperty, getOwnPropertyDescriptor, getOwnPropertySymbols, getPrototypeOf, values } from './util';\n\nexport type Collection =\n | Array<Model | typeof Model>\n | { [anything: string]: Model | typeof Model };\n\nexport class Lookup {\n private table = new Map<typeof Model, symbol>();\n\n public get local(){\n return [\n ...new Set(getOwnPropertySymbols(this).map(\n symbol => (this as any)[symbol] as Model\n ))\n ]\n }\n\n private key(T: typeof Model){\n let key = this.table.get(T);\n\n if(!key){\n key = Symbol(T.name);\n this.table.set(T, key);\n }\n\n return key;\n }\n\n public get(T: typeof Model){\n return (this as any)[this.key(T)];\n }\n\n public push(I: Model | typeof Model | Collection){\n const next = create(this) as this;\n\n if(I instanceof Model || typeof I == \"function\")\n next.register(I);\n else\n for(const i of values(I))\n next.register(i);\n\n return next;\n }\n\n public register(I: Model | typeof Model){\n let writable = true;\n let T: typeof Model;\n\n if(I instanceof Model){\n T = I.constructor as any;\n writable = false;\n }\n else {\n T = I;\n I = I.create();\n }\n\n do {\n const key = this.key(T);\n const conflict = this.hasOwnProperty(key);\n\n defineProperty(this, key, {\n value: conflict ? null : I,\n configurable: true,\n writable\n });\n\n T = getPrototypeOf(T);\n }\n while(T !== Model);\n\n return I;\n }\n\n public pop(){\n for(const key of getOwnPropertySymbols(this)){\n const entry = getOwnPropertyDescriptor(this, key)!;\n\n if(entry.writable && entry.value)\n entry.value.destroy();\n }\n }\n}","import React, { useLayoutEffect } from 'react';\n\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Lookup } from '../register';\n\nimport type { Callback, InstanceOf } from '../types';\n\nexport const LookupContext = React.createContext(new Lookup());\nexport const useLookup = () => React.useContext(LookupContext);\n\nexport const Oops = issues({\n NotFound: (name) =>\n `Couldn't find ${name} in context; did you forget to use a Provider?`\n})\n\nfunction useLocal <T extends typeof Model> (Type: T, required: false): InstanceOf<T> | undefined;\nfunction useLocal <T extends typeof Model> (Type: T, arg?: boolean): InstanceOf<T>;\nfunction useLocal <T extends typeof Model, I extends InstanceOf<T>> (Type: T, effect: (found: I) => Callback | void): I;\nfunction useLocal <T extends typeof Model, I extends InstanceOf<T>, K extends Model.Field<I>> (Type: T, key: K): I[K];\n\nfunction useLocal<T extends typeof Model>(\n Type: T, arg?: boolean | string | ((found: InstanceOf<T>) => Callback | void)) {\n\n const instance = useLookup().get(Type);\n\n if(!instance && arg !== false)\n throw Oops.NotFound(Type.name);\n\n switch(typeof arg){\n case \"string\":\n return (instance as any)[arg];\n\n case \"function\":\n useLayoutEffect(() => arg(instance), []);\n\n default:\n return instance;\n }\n}\n\nexport { useLocal }","import { apply } from '../instruction/apply';\nimport { issues } from '../issues';\nimport { Model, Stateful } from '../model';\nimport { Lookup } from '../register';\nimport { Class, InstanceOf } from '../types';\nimport { Global } from './global';\nimport { useLookup } from './useLocal';\n\nexport const Oops = issues({\n NotAllowed: (parent, child) =>\n `Global '${parent}' attempted to attach '${child}' but it is not also a singleton.`,\n\n AmbientRequired: (requested, requester, key) =>\n `Attempted to find an instance of ${requested} in context. It is required for [${requester}.${key}], but one could not be found.`\n})\n\nexport type Peer = typeof Model | typeof Global;\nexport type ApplyPeer = (context: Lookup) => void;\nexport type PeerCallback<T extends Peer> = (instance: InstanceOf<T> | undefined) => void | boolean;\n\nconst PendingContext = new WeakMap<Stateful, ApplyPeer[]>();\nconst ContextWasUsed = new WeakMap<Model, boolean>();\n\n/**\n * Find and attach most applicable instance of Model via context.\n * \n * Host controller will search element-hierarchy relative to where it spawned.\n * \n * @param Type - Type of model to find from context\n * @param callback -\n * - Invoked after context is scanned, is passed result - either found or undefined.\n * - If argument is inadequate, but required, your implemention should simply throw.\n * - If inadequate and not required, conditionally return false.\n */\nfunction tap <T extends Class> (Type: T, callback?: (instance?: InstanceOf<T>) => void | true): InstanceOf<T>;\nfunction tap <T extends Class> (Type: T, callback?: (instance?: InstanceOf<T>) => void | boolean): InstanceOf<T> | undefined;\n\n/**\n * Find and attach most applicable instance of Model via context.\n *\n * Expects a `<Provider>` of target controller to exist. \n * Host controller will search element-hierarchy relative to where it spawned.\n *\n * @param Type - Type of controller to attach to property. \n * @param required - Throw if instance of Type cannot be found.\n */\nfunction tap <T extends Class> (Type: T, required: true): InstanceOf<T>;\nfunction tap <T extends Class> (Type: T, required?: boolean): InstanceOf<T> | undefined;\n\nfunction tap<T extends Peer>(\n type: T, argument?: boolean | PeerCallback<T>){\n\n return apply(\n function tap(key){\n if(\"set\" in type)\n return {\n recursive: true,\n value: type.get()\n }\n\n const { subject } = this;\n\n if(\"set\" in subject.constructor)\n throw Oops.NotAllowed(subject, type.name);\n\n getPending(subject).push(context => {\n let instance = context.get(type);\n\n if(typeof argument == \"function\"){\n if(argument(instance) === false)\n instance = undefined;\n }\n\n else if(!instance && argument)\n throw Oops.AmbientRequired(type.name, subject, key);\n\n this.state.set(key, instance);\n this.update(key);\n })\n\n return {\n recursive: true,\n suspense: true\n }\n }\n )\n};\n\nfunction usePeerContext(subject: Model){\n if(ContextWasUsed.has(subject)){\n if(ContextWasUsed.get(subject))\n useLookup();\n\n return;\n }\n\n const pending = PendingContext.get(subject);\n\n if(pending){\n const local = useLookup();\n\n for(const init of pending)\n init(local);\n\n PendingContext.delete(subject);\n }\n\n ContextWasUsed.set(subject, !!pending);\n}\n\nfunction getPending(subject: Stateful){\n let pending = PendingContext.get(subject);\n\n if(!pending)\n PendingContext.set(subject, pending = []);\n\n return pending;\n}\n\nexport { tap, usePeerContext, getPending }","import React from 'react';\nimport { Callback } from '../types';\n\nexport function use<T>(init: (trigger: Callback) => T){\n const [ state, update ] = React.useState((): T[] => [\n init(() => update(state.concat()))\n ]);\n\n return state[0];\n}","import React, { useState } from 'react';\n\nimport { ensure } from '../controller';\nimport { Model, Stateful } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { getOwnPropertyNames } from '../util';\nimport { use } from './use';\n\nfunction useModel <T extends Class, I extends InstanceOf<T>> (\n source: T,\n watch: Model.Field<I>[],\n callback?: (instance: I) => void\n): I;\n\nfunction useModel <T extends Class, I extends InstanceOf<T>> (\n source: T,\n callback?: (instance: I) => void\n): I;\n\nfunction useModel <T extends Class, I extends InstanceOf<T>> (\n source: T,\n apply: Model.Compat<I>,\n keys?: Model.Event<I>[]\n): I;\n\nfunction useModel <T extends Stateful> (\n source: (() => T) | T,\n watch?: Model.Field<T>[],\n callback?: (instance: T) => void\n): T;\n\nfunction useModel <T extends Stateful> (\n source: (() => T) | T,\n callback?: (instance: T) => void\n): T;\n\nfunction useModel <T extends Stateful> (\n source: (() => T) | T,\n apply: Model.Compat<T>,\n keys?: Model.Event<T>[]\n): T;\n\nfunction useModel <T extends Model | Stateful> (\n source: any,\n arg?: ((instance: T) => void) | Model.Event<T>[] | Model.Compat<T>,\n arg2?: ((instance: T) => void) | Model.Field<T>[]){\n\n const instance = React.useMemo(() => {\n const cb = arg2 || arg;\n const instance: T =\n typeof source == \"function\" ?\n source.prototype instanceof Model ?\n new source() :\n source() : \n source;\n\n ensure(instance);\n\n if(typeof cb == \"function\")\n cb(instance);\n\n return instance;\n }, []);\n\n if(Array.isArray(arg)){\n const update = useState(0)[1];\n\n React.useLayoutEffect(() => { \n if(arg.length && instance instanceof Model)\n instance.on(arg, () => update(x => x+1), true);\n\n return () => {\n if(Model.isTypeof(source))\n (instance as Model).destroy();\n }\n }, []);\n\n return instance;\n }\n else {\n const local = use(refresh => (\n ensure(instance).subscribe(() => refresh)\n ));\n\n if(typeof arg == \"object\"){\n local.active = false;\n\n if(typeof arg2 !== \"object\")\n arg2 = getOwnPropertyNames(instance) as Model.Field<T>[];\n\n for(const key of arg2)\n if(key in arg)\n (instance as any)[key] = arg[key];\n\n React.useLayoutEffect(() => {\n local.active = true;\n });\n }\n\n React.useLayoutEffect(() => {\n local.commit();\n\n return () => {\n local.release();\n\n if(Model.isTypeof(source))\n (instance as Model).destroy();\n };\n }, []);\n\n return local.proxy;\n }\n}\n\nexport { useModel }","import React from 'react';\n\nimport { ensure } from '../controller';\nimport { Stateful } from '../model';\nimport { defineProperty } from '../util';\nimport { use } from './use';\n\nimport type { Callback } from '../types';\n\nfunction useFrom <T extends Stateful, R> (\n source: (() => T) | T,\n compute: (this: T, from: T) => R,\n expect: true\n): Exclude<R, undefined>;\n\nfunction useFrom <T extends Stateful, R> (\n source: (() => T) | T,\n compute: (this: T, from: T) => R,\n expect?: boolean\n): R;\n\nfunction useFrom(\n target: Stateful,\n compute: Function,\n suspend?: boolean) {\n\n const local = use(refresh => {\n const sub = ensure(target).subscribe(() => update);\n const spy = sub.proxy;\n\n let value = compute.call(spy, spy);\n let update: Callback | undefined;\n let retry: Callback | undefined;\n\n const set = (next: any) => {\n value = next;\n\n if(retry) {\n retry();\n retry = undefined;\n }\n else\n refresh();\n };\n\n if(value instanceof Promise) {\n value.then(set);\n value = undefined;\n }\n else {\n sub.commit();\n update = () => {\n const next = compute.call(spy, spy);\n\n if(value != next)\n set(next);\n };\n }\n\n defineProperty(sub, \"proxy\", {\n get() {\n if(value === undefined && suspend)\n throw new Promise<void>(res => retry = res);\n\n return value;\n }\n });\n\n return sub;\n });\n\n React.useLayoutEffect(() => local.release, []);\n\n return local.proxy;\n}\n\nexport { useFrom }\n","import React, { useMemo } from 'react';\n\nimport { ensure } from '../controller';\nimport { Model, Stateful } from '../model';\nimport { suspend } from '../suspense';\nimport { use } from './use';\nimport { useFrom } from './useFrom';\nimport { useLocal } from './useLocal';\n\nnamespace useTap {\n export interface Tappable {\n new (): Stateful;\n new (...args: any[]): Stateful;\n get?: () => Stateful;\n }\n}\n\nfunction useTap <T extends Stateful> (source: T | (() => T)): T;\n\nfunction useTap <T extends Stateful, K extends Model.Field<T>> (\n source: T | (() => T) | useTap.Tappable,\n path: K,\n expect: true\n): Exclude<T[K], undefined>;\n\nfunction useTap <T extends Stateful, K extends Model.Field<T>> (\n source: T | (() => T) | useTap.Tappable,\n path: K,\n expect?: boolean\n): T[K];\n\nfunction useTap <T extends Stateful, R> (\n source: T | (() => T) | useTap.Tappable,\n compute: (this: T, from: T) => R,\n expect: true\n): Exclude<R, undefined>;\n\nfunction useTap <T extends Stateful, R> (\n source: T | (() => T) | useTap.Tappable,\n compute: (this: T, from: T) => R,\n expect?: boolean\n): R;\n\nfunction useTap <T extends Stateful> (\n source: T | (() => T) | useTap.Tappable,\n path?: Model.Field<T> | ((this: T, from: T) => any),\n expect?: boolean) {\n\n const instance = useMemo(() => {\n if(typeof source == \"object\")\n return () => source;\n\n if(\"get\" in source)\n return () => source.get!();\n\n if(\"prototype\" in source)\n return () => useLocal(source as any);\n else\n return source;\n }, [])() as T;\n\n if(typeof path == \"function\")\n return useFrom(instance, path, expect);\n\n const local = use(refresh => (\n ensure(instance).subscribe(() => refresh)\n ));\n\n React.useLayoutEffect(local.commit, []);\n \n if(typeof path !== \"undefined\"){\n const value = local.proxy[path];\n\n if(value === undefined && expect)\n throw suspend(ensure(instance), path);\n\n return value;\n }\n\n return local.proxy;\n}\n\nexport { useTap }","/* istanbul ignore file */\nimport React from 'react';\n\nimport { CONTROL, Controller, ensure } from '../controller';\nimport { Model } from '../model';\nimport { Callback, Class, InstanceOf } from '../types';\nimport { getOwnPropertyNames } from '../util';\nimport { usePeerContext } from './tap';\nimport { useLocal } from './useLocal';\nimport { useModel } from './useModel';\nimport { useTap } from './useTap';\n\n\nclass MVC extends Model {\n static [CONTROL]: Controller;\n\n /** Attaches this controller to a component. */\n tap(): this;\n tap <K extends Model.Field<this>> (key: K, expect: true): Exclude<this[K], undefined>;\n tap <K extends Model.Field<this>> (key: K, expect?: boolean): this[K];\n tap <T> (from: (this: this, state: this) => Promise<T>, expect: true): Exclude<T, undefined>;\n tap <T> (from: (this: this, state: this) => Promise<T>, expect?: boolean): T | undefined;\n tap <T> (from: (this: this, state: this) => T, expect: true): Exclude<T, undefined>;\n tap <T> (from: (this: this, state: this) => T, expect?: boolean): T;\n\n tap(path?: string | Function, expect?: boolean){\n return useTap(this, path as any, expect);\n }\n\n /**\n * **React Hook** - Subscribe to instance of controller within a component.\n *\n * @param callback - Run once before subscription begins.\n */\n use(watch: Model.Field<this>[], callback?: (instance: this) => void): this;\n use(callback?: (instance: this) => void): this;\n\n use(arg?: any, callback?: (instance: this) => void) {\n return useModel(this, arg, callback);\n }\n\n /**\n * **React Hook** - Fetch most instance of this controller from context, if it exists.\n * \n * @param required - Unless false, will throw where instance cannot be found.\n */\n static get <T extends Class> (this: T, required?: boolean): InstanceOf<T>;\n\n /**\n * **React Hook** - Fetch most instance of this controller from context.\n * \n * @param required - If false, may return undefined.\n */\n static get <T extends Class> (this: T, required: false): InstanceOf<T> | undefined;\n\n /**\n * **React Hook** - Fetch specific value from instance of this controller in context.\n */\n static get <T extends Class, I extends InstanceOf<T>, K extends Model.Field<I>> (this: T, key: K): I[K];\n\n /**\n * **React Hook** - Fetch instance.\n * \n * Effect callback will run once if found, throw if not found.\n * Returned function is called on unmount.\n */\n static get <T extends Class, I extends InstanceOf<T>> (this: T, effect: (found: I) => Callback | void): I;\n\n static get <T extends typeof MVC> (this: T, arg: any){\n return useLocal(this, arg);\n }\n\n /** \n * **React Hook** - Fetch and subscribe to instance of this controller within ambient component.\n */\n static tap <T extends Class> (this: T): InstanceOf<T>;\n static tap <T extends Class, I extends InstanceOf<T>, K extends Model.Field<I>> (this: T, key: K, expect: true): Exclude<I[K], undefined>;\n static tap <T extends Class, I extends InstanceOf<T>, K extends Model.Field<I>> (this: T, key: K, expect?: boolean): I[K];\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => Promise<T>, expect: true): Exclude<T, undefined>;\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => Promise<T>, expect?: boolean): T;\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => T, expect: true): Exclude<T, undefined>;\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => T, expect?: boolean): T;\n\n static tap (key?: string | Function, expect?: boolean): any {\n return useTap(this, key as any, expect);\n }\n\n /**\n * **React Hook** - Spawn and maintain a controller from within a component.\n * \n * More efficient than `use()` if you don't need hook-based features.\n * \n * @param callback - Run after creation of instance.\n */\n static new <T extends Class, I extends InstanceOf<T>> (this: T, callback?: (instance: I) => void): I;\n static new <T extends Class, I extends InstanceOf<T>> (this: T, apply: Model.Compat<I>): I;\n\n static new <T extends Class, I extends InstanceOf<T>> (this: T, arg?: ((instance: I) => void) | Model.Compat<I>){\n const instance = React.useMemo(() => {\n const instance: I = new this();\n\n ensure(instance);\n\n if(typeof arg == \"function\")\n arg(instance);\n\n else if(arg)\n getOwnPropertyNames(instance).forEach(key => {\n if(key in arg)\n instance[key] = arg[key];\n })\n\n return instance;\n }, []);\n\n usePeerContext(instance.is);\n\n return instance;\n }\n\n static use <T extends Class, I extends InstanceOf<T>> (\n this: T,\n watch: Model.Field<I>[],\n callback?: (instance: I) => void\n ): I;\n\n static use <T extends Class, I extends InstanceOf<T>> (\n this: T,\n callback?: (instance: I) => void\n ): I;\n\n static use <T extends Class, I extends InstanceOf<T>> (\n this: T,\n apply: Model.Compat<I>,\n keys?: Model.Event<I>[]\n ): I;\n\n static use <T extends typeof MVC> (this: T, a: any, b?: any){\n const instance = useModel(this, a, b);\n usePeerContext(instance.is); \n return instance;\n }\n\n /**\n * @deprecated consider doing this manually - not worth minor efficiency gain over using.\n */\n static uses <T extends typeof MVC, I extends InstanceOf<T>, D extends Model.Compat<I>> (\n this: T, apply: D, keys?: (keyof D)[]){\n\n return this.use(instance => {\n instance.import(apply, keys);\n })\n }\n\n /**\n * @deprecated is now replaced by overload of `use` method.\n */\n static using <T extends typeof MVC, I extends InstanceOf<T>> (\n this: T,\n apply: Model.Compat<I>,\n keys?: Model.Event<I>[]){\n\n return this.use(apply, keys);\n }\n\n static meta <T extends Class>(this: T): T;\n static meta <T extends Class, K extends keyof T> (this: T, key: K, expect: true): Exclude<T[K], undefined>;\n static meta <T extends Class, K extends keyof T> (this: T, key: K, expect?: boolean): T[K];\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => Promise<T>, expect: true): Exclude<T, undefined>;\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => Promise<T>, expect?: boolean): T;\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => T, expect: true): Exclude<T, undefined>;\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => T, expect?: boolean): T;\n\n static meta (path?: string | Function, expect?: boolean): any {\n return useTap(() => this, path as any, expect);\n }\n}\n\nexport { MVC };","import React from 'react';\n\nimport { issues } from '../issues';\nimport { Class } from '../types';\nimport { useLocal } from './useLocal';\nimport { useTap } from './useTap';\n\nexport const Oops = issues({\n BadProps: () =>\n `Provider expects either a render function, 'get' or 'has' props.`\n})\n\ndeclare namespace Consumer {\n type HasProps<E extends Class> = {\n /** @deprecated - use for instead */\n of?: never;\n\n /** Type of controller to fetch from context. */\n for: E;\n\n /**\n * Getter function. Is called on every natural render of this component.\n * Will throw if usable instance cannot be found in context.\n */\n has: (value: InstanceType<E>) => void;\n }\n\n type GetProps<E extends Class> = {\n /** @deprecated - use for instead */\n of?: never;\n\n /** Type of controller to fetch from context. */\n for: E;\n\n /** Getter function. Is called on every natural render of this component. */\n get: (value: InstanceType<E> | undefined) => void;\n }\n\n type RenderProps<E extends Class> = {\n /** @deprecated - use for instead */\n of?: never;\n\n /** Type of controller to fetch from context. */\n for: E;\n\n /**\n * Render function, will receive instance of desired controller.\n *\n * Similar to `tap()`, updates to properties accessed in\n * this function will cause a refresh when they change.\n */\n children: (value: InstanceType<E>) => React.ReactElement<any, any> | null;\n }\n\n type Props<T extends Class> = HasProps<T> | GetProps<T> | RenderProps<T>\n}\n\nfunction Consumer<T extends Class>(props: Consumer.Props<T>){\n const { get, has, children, for: type } = props as any;\n\n if(typeof children == \"function\")\n return children(useTap(type));\n\n const callback = has || get;\n\n if(typeof callback == \"function\")\n callback(useLocal(type, !!has));\n else\n throw Oops.BadProps()\n\n return null;\n}\n\nexport { Consumer };","import React from 'react';\n\nimport { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Collection, Lookup } from '../register';\nimport { Subscriber } from '../subscriber';\nimport { Class } from '../types';\nimport { entries } from '../util';\nimport { getPending } from './tap';\nimport { use } from './use';\nimport { LookupContext, useLookup } from './useLocal';\n\nexport const Oops = issues({\n NoType: () =>\n \"Provider 'of' prop must be Model, typeof Model or a collection of them.\",\n\n PropDeprecated: () =>\n \"Provider `of` prop is deprecated, use `for` instead.\"\n})\n\ndeclare namespace Provider {\n type Item = Model | typeof Model;\n type Collection<T extends Item> = T[] | { [key: string]: T };\n type Existent<E> = E extends Class ? InstanceType<E> : E extends Model ? E : never;\n\n type NormalProps<E, I = Existent<E>> =\n & {\n /** @deprecated use for instead. */\n of?: never;\n for: E;\n children: React.ReactNode | ((instance: I) => React.ReactNode);\n }\n & Model.Compat<I>;\n\n // FIX: This fails to exclude properties with same key but different type.\n type MultipleProps<T extends Item> =\n & {\n /** @deprecated use for instead. */\n of?: never;\n for: Collection<T>;\n children?: React.ReactNode | (() => React.ReactNode);\n }\n & Model.Compat<Existent<T>>;\n\n type Props<T extends Item> = MultipleProps<T> | NormalProps<T>;\n}\n\nfunction Provider<T extends Provider.Item>(props: Provider.Props<T>){\n if(\"of\" in props)\n throw Oops.PropDeprecated();\n\n const context = useNewContext(props.for);\n const render = props.children;\n\n useAppliedProps(context, props);\n React.useLayoutEffect(() => () => context.pop(), []);\n\n return React.createElement(LookupContext.Provider, { value: context },\n typeof render == \"function\"\n ? React.createElement(RenderFunction, { context, render })\n : render\n );\n}\n\nexport { Provider };\n\nfunction useNewContext(\n inject?: Model | typeof Model | Collection){\n\n const from = useLookup();\n\n return React.useMemo(() => {\n if(!inject)\n throw Oops.NoType();\n\n const context = from.push(inject);\n\n for(const instance of context.local)\n if(instance)\n for(const apply of getPending(instance))\n apply(context)\n\n return context;\n }, []);\n}\n\nfunction useAppliedProps(within: Lookup, props: {}){\n const update = React.useMemo(() => {\n const targets = within.local;\n\n return function integrate(props: {}){\n for(const [key, value] of entries(props))\n if(![\"of\", \"for\", \"children\"].includes(key))\n for(const into of targets)\n if(into && key in into)\n (into as any)[key] = value;\n };\n }, []);\n\n update(props);\n}\n\ninterface RenderFunctionProps {\n context: Lookup;\n render: Function;\n}\n\nfunction RenderFunction(props: RenderFunctionProps): any {\n const hook = use(refresh => {\n const targets = props.context.local;\n\n if(targets.length == 1)\n return ensure(targets[0]).subscribe(() => refresh);\n\n return {} as Subscriber;\n });\n\n if(hook.commit)\n React.useLayoutEffect(hook.commit, []);\n\n return props.render(hook.proxy);\n}","import { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { MVC } from './mvc';\n\nexport const Oops = issues({\n DoesNotExist: (name) =>\n `Tried to access singleton ${name}, but none exist! Did you forget to initialize?\\nCall ${name}.create() before attempting to access, or consider using ${name}.use() instead.`,\n\n AlreadyExists: (name) =>\n `Shared instance of ${name} already exists! Consider unmounting existing, or use ${name}.reset() to force-delete it.`\n})\n\nconst Active = new WeakMap<Class, Global>();\n\nexport class Global extends MVC {\n static create<T extends Class>(\n this: T, ...args: ConstructorParameters<T>){\n\n if(Active.has(this))\n throw Oops.AlreadyExists(this.name);\n\n const instance = new this(...args);\n\n ensure(instance);\n Active.set(this, instance);\n\n return instance as InstanceOf<T>;\n }\n\n /**\n * Update the active instance of this class.\n * Returns a thenable; resolves after successful update.\n * If instance does not already exist, one will be created. \n */\n static set<T extends typeof Global>(\n this: T, updates: Partial<InstanceOf<T>>){\n\n const instance = Active.get(this) || (this as any).create();\n instance.import(updates);\n return instance.update(false);\n }\n\n /**\n * **React Hook** - Fetch most instance of this controller from context, if it exists.\n * \n * @param required - If false, may return undefined.\n */\n static get <T extends Class> (this: T, required: false): InstanceOf<T> | undefined;\n\n /**\n * **React Hook** - Fetch most instance of this controller from context.\n * \n * @param required - Unless false, will throw where instance cannot be found.\n */\n static get <T extends Class> (this: T, required?: boolean): InstanceOf<T>;\n\n /**\n * **React Hook** - Fetch specific value from instance of this controller in context.\n */\n static get <T extends Class, K extends Model.Field<InstanceOf<T>>> (this: T, key: K): InstanceOf<T>[K];\n\n static get(arg?: boolean | string){\n const instance = Active.get(this);\n\n if(!instance && arg !== false)\n throw Oops.DoesNotExist(this.name);\n\n return (\n typeof arg == \"string\" ?\n (instance as any)[arg] :\n instance\n )\n }\n\n /** Destroy current instance of Global, if it exists. */\n static reset(){\n const current = Active.get(this);\n\n if(current)\n current.destroy();\n }\n\n destroy(){\n super.destroy();\n Active.delete(this.constructor as any);\n }\n}"],"names":["Oops","use"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/issues.ts","../src/suspense.ts","../src/instruction/get.compute.ts","../src/util.ts","../src/model.ts","../src/subscriber.ts","../src/controller.ts","../src/instruction/apply.ts","../src/instruction/act.ts","../src/instruction/get.factory.ts","../src/instruction/get.ts","../src/instruction/ref.ts","../src/instruction/set.ts","../src/instruction/use.keyed.ts","../src/instruction/use.ts","../src/instruction/has.ts","../src/register.ts","../src/react/useLocal.ts","../src/react/tap.ts","../src/react/use.ts","../src/react/useModel.ts","../src/react/useFrom.ts","../src/react/useTap.ts","../src/react/mvc.ts","../src/react/consumer.ts","../src/react/provider.ts","../src/react/global.ts"],"sourcesContent":["declare namespace Issue {\n export type Variable = {} | string | number | boolean | null;\n export type Variables<T> = T extends (...args: infer T) => any ? T : never;\n\n export type Messages = {\n [named: string]: (...args: Variable[]) => string;\n }\n\n export type Output<M extends Messages> = {\n readonly [P in keyof M]: (...args: Variables<M[P]>) => Issue;\n }\n}\n\nexport class Issue extends Error {\n // drop first line (error factory) in stack trace.\n stack = this.stack.replace(/\\n.+/, \"\") as string;\n\n warn(){\n console.warn(this.message);\n }\n}\n\nexport function issues<M extends Issue.Messages>(register: M){\n const Library = {} as any;\n\n for(const name in register)\n Library[name] = (...args: Issue.Variable[]) => \n new Issue(register[name].apply(null, args));\n\n return Library as Issue.Output<M>;\n}","import { Controller } from './controller';\nimport { issues } from './issues';\n\nexport const Oops = issues({\n NotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`,\n})\n\ntype Suspense<T = any> = Promise<T> & Error;\n\nexport function suspend(\n source: Controller, key: string): Suspense {\n\n const error =\n Oops.NotReady(source.subject, key);\n\n const promise = new Promise<void>(resolve => {\n const release = source.addListener(forKey => {\n if(forKey == key)\n return () => {\n if(source.state.get(key) !== undefined){\n release();\n resolve();\n }\n }\n });\n });\n\n return Object.assign(promise, {\n toString: () => String(error),\n name: \"Suspense\",\n message: error.message,\n stack: error.stack\n });\n}\n\nexport function mayRetry(fn: () => any): any {\n const retry = (err: unknown) => {\n if(err instanceof Promise)\n return err.then(compute);\n else\n throw err;\n }\n\n const compute = (): any => {\n try {\n const output = fn();\n\n return output instanceof Promise\n ? output.catch(retry)\n : output;\n }\n catch(err){\n return retry(err);\n }\n }\n\n return compute();\n}","import { Controller } from '../controller';\nimport { issues } from '../issues';\nimport { Subscriber } from '../subscriber';\nimport { suspend } from '../suspense';\nimport { Callback } from '../types';\n\nimport type { get } from './get';\n\nexport const Oops = issues({\n Failed: (parent, property, initial) =>\n `An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} [${parent}.${property}].`\n});\n\nconst INFO = new WeakMap<Function, string>();\nconst KEYS = new WeakMap<Controller, Callback[]>();\nconst ORDER = new WeakMap<Controller, Callback[]>();\n\nexport function computeMode(\n self: Controller,\n source: Controller,\n setter: get.Function<any, any>,\n key: string,\n required: boolean\n){\n const { subject, state } = self;\n\n let sub: Subscriber;\n let order = ORDER.get(self)!;\n\n if(!order)\n ORDER.set(self, order = []);\n\n const compute = (initial: boolean) => {\n try {\n return setter.call(sub.proxy, sub.proxy);\n }\n catch(err){\n Oops.Failed(subject, key, initial).warn();\n throw err;\n }\n }\n\n const refresh = () => {\n let value;\n\n try {\n value = compute(false);\n }\n catch(e){\n console.error(e);\n }\n finally {\n if(state.get(key) !== value){\n state.set(key, value);\n self.update(key);\n return value;\n }\n }\n }\n\n const update = (_key: any, source: Controller) => {\n if(source !== self){\n refresh();\n return;\n }\n\n let pending = KEYS.get(self);\n\n if(!pending)\n KEYS.set(self, pending = []);\n\n pending.push(refresh);\n }\n\n const create = () => {\n sub = source.subscribe(update);\n\n try {\n const value = compute(true);\n state.set(key, value);\n return value;\n }\n catch(e){\n throw e;\n }\n finally {\n sub.commit();\n order.push(refresh);\n }\n }\n\n INFO.set(refresh, key);\n\n return () => {\n const value = sub ? state.get(key) : create();\n\n if(value === undefined && required)\n throw suspend(self, key);\n\n return value;\n }\n}\n\nexport function flush(control: Controller){\n const pending = KEYS.get(control);\n\n if(!pending)\n return;\n\n const list = ORDER.get(control)!;\n\n while(pending.length){\n const compute = pending\n .sort((a, b) => list.indexOf(b) - list.indexOf(a))\n .pop()!\n\n const key = INFO.get(compute)!;\n\n if(!control.frame.has(key))\n compute();\n }\n\n KEYS.delete(control);\n}","import { issues } from './issues';\nimport { Model } from './model';\n\nimport type { Callback } from './types';\n\nexport const Oops = issues({\n BadCallback: () =>\n `Callback for effect-callback may only return a function.`\n})\n\nconst {\n assign,\n create,\n defineProperty,\n entries,\n getPrototypeOf,\n getOwnPropertyNames,\n getOwnPropertyDescriptor,\n getOwnPropertySymbols,\n values\n} = Object;\n\nexport {\n assign,\n create,\n defineProperty,\n entries,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n getOwnPropertyNames,\n getOwnPropertySymbols,\n values\n}\n\nexport function createEffect(\n callback: Model.Effect<any>){\n\n let unSet: Callback | Promise<any> | void;\n\n return function(this: any, value: any){\n if(typeof unSet == \"function\")\n unSet();\n\n unSet = callback.call(this, value);\n\n if(unSet instanceof Promise)\n unSet = undefined;\n\n if(unSet && typeof unSet !== \"function\")\n throw Oops.BadCallback()\n }\n}\n\nexport type AssignCallback<T> =\n (this: any, argument: T, thisArg: any) =>\n ((next: T) => void) | Promise<any> | void | boolean;\n\nexport function createValueEffect<T = any>(\n callback: AssignCallback<T>){\n\n let unSet: ((next: T) => void) | undefined;\n\n return function(this: any, value: any){\n if(typeof unSet == \"function\")\n unSet(value);\n\n const out = callback.call(this, value, this);\n\n if(typeof out == \"boolean\")\n return out;\n\n if(!out || out instanceof Promise)\n return;\n\n if(typeof out == \"function\")\n unSet = out;\n else\n throw Oops.BadCallback()\n }\n}","import { CONTROL, Controller, ensure, getUpdate, UPDATE } from './controller';\nimport { issues } from './issues';\nimport { Subscriber } from './subscriber';\nimport { mayRetry } from './suspense';\nimport { createEffect, defineProperty, getOwnPropertyNames } from './util';\n\nimport type { Callback, Class, InstanceOf } from './types';\n\nexport const Oops = issues({\n Timeout: (keys, timeout) => \n `No update for [${keys}] within ${timeout}.`,\n\n StrictUpdate: () => \n `Strict update() did not find pending updates.`,\n\n NoChaining: () =>\n `Then called with undefined; update promise will never catch nor supports chaining.`\n});\n\nexport const WHY = Symbol(\"UPDATE\");\nexport const LOCAL = Symbol(\"LOCAL\");\nexport const STATE = Symbol(\"STATE\");\n\nexport interface Stateful {\n /** Controller for this instance. */\n [CONTROL]?: Controller;\n\n /** Current subscriber (if present) while used in a live context (e.g. hook or effect). */\n [LOCAL]?: Subscriber;\n\n /** Current state of this instance. */\n [STATE]?: Model.Values<this>;\n\n /**\n * Last update causing a refresh to subscribers.\n * \n * If accessed directly, will contain all keys from last push.\n * If within a subscribed function, will contain only keys which explicitly caused a refresh.\n */\n [WHY]?: readonly Model.Event<this>[];\n};\n\ndeclare namespace Model {\n /** Including but not limited to T. */\n type Extends<T> = T | (string & Record<never, never>);\n\n export { Controller };\n export { Subscriber };\n\n export type OnUpdate<T, P> = (this: T, value: ValueOf<keyof T, P>, changed: P) => void;\n\n export type Effect<T> = (this: T, argument: T) => Callback | Promise<any> | void;\n\n /** Exotic value, actual value is contained. */\n export interface Ref<T = any> {\n (next: T): void;\n current: T | null;\n }\n\n /** Properties of T, of which are methods. */\n export type Methods<T> = {\n [K in keyof T]:\n T[K] extends Ref ? never :\n T[K] extends Function ? K :\n never;\n }[keyof T];\n /**\n * Subset of `keyof T` which are not methods or defined by base Model U.\n * \n * **Note**: This excludes all keys which are not of type `string` (only those are managed).\n **/\n // TODO: Should exclude methods\n export type Field<T, U extends Model = Model> = Exclude<keyof T & string, keyof U>;\n\n /**\n * Including but not limited to `keyof T` which are not methods or defined by base Model.\n **/\n export type Event<T, U extends Model = Model> = Extends<Field<T, U>>;\n\n /** Object containing managed entries found in T. */\n export type Entries<T, U extends Model = Model> = Pick<T, Field<T, U>>;\n\n /** Object comperable to data found in T. */\n export type Compat<T, U extends Model = Model> = Partial<Entries<T, U>>;\n\n /** Actual value stored in state. */\n export type Value<R> = R extends Ref<infer T> ? T : R;\n\n /** Actual value belonging to a managed property. */\n export type ValueOf<T extends {}, K> = K extends keyof T ? Value<T[K]> : undefined;\n\n /**\n * Values from current state of given controller.\n * \n * Differs from `Entries` as values here will drill into \"real\" values held by exotics like ref.\n */\n export type Values<T, K extends Field<T, Model> = Field<T, Model>> = {\n [P in K]: Value<T[P]>;\n }\n}\n\ninterface Model extends Stateful {\n /**\n * Circular reference to `this` controller.\n * \n * Useful to obtain full reference where one has already destructured.\n */\n is: this;\n}\n\nclass Model {\n static [WHY]: readonly string[];\n\n constructor(){\n defineProperty(this, CONTROL, {\n value: new Controller(this)\n });\n defineProperty(this, \"is\", {\n value: this\n });\n }\n\n get [STATE]() {\n return this.export();\n }\n\n get [WHY](){\n return UPDATE.get(this);\n }\n\n on <P = Model.Event<this>> (event: (key: P) => Callback | void): Callback;\n on <P = Model.Event<this>> (keys: [], listener: Model.OnUpdate<this, P>, squash?: boolean, once?: boolean): Callback;\n on <P = Model.Event<this>> (keys: [], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n on (keys: [], listener: unknown, squash: boolean, once?: boolean): Callback;\n on <P extends Model.Event<this>> (key: P | P[], listener: Model.OnUpdate<this, P>, squash?: boolean, once?: boolean): Callback;\n on <P extends Model.Event<this>> (key: P | P[], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n on <P extends Model.Event<this>> (key: P | P[], listener: unknown, squash: boolean, once?: boolean): Callback;\n\n on <P extends Model.Event<this>> (\n select: P | P[] | ((key: any) => Callback | void),\n handler?: Function,\n squash?: boolean,\n once?: boolean){\n\n return ensure(this, control => {\n if(typeof select == \"function\")\n return control.addListener(select);\n\n const keys = \n typeof select == \"string\" ? [ select ] :\n select.length ? select : [ ...control.state.keys() ];\n\n for(const key of keys)\n try { void (this as any)[key] }\n catch(e){}\n\n const callback = squash\n ? () => {\n handler!.call(this, getUpdate(this))\n }\n : () => {\n getUpdate(this)\n .filter(k => keys.includes(k as any))\n .forEach(k => {\n handler!.call(this, control.state.get(k), k)\n })\n }\n\n const onEvent = once\n ? () => {\n remove();\n callback();\n }\n : callback;\n\n const remove = control.addListener(key => {\n if(keys.includes(key as any))\n return onEvent;\n });\n\n return remove;\n });\n }\n\n once <P = Model.Event<this>> (keys: [], listener: Model.OnUpdate<this, P>, squash?: false, once?: boolean): Callback;\n once <P = Model.Event<this>> (keys: [], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n once <P = Model.Event<this>> (keys: [], listener: (keys: P[]) => void, squash: true, once?: boolean): Callback;\n once (keys: [], listener: unknown, squash: boolean, once?: boolean): Callback;\n once <P extends Model.Event<this>> (key: P | P[], listener: Model.OnUpdate<this, P>, squash?: false): Callback;\n once <P extends Model.Event<this>> (key: P | P[], listener: (keys: P[]) => void, squash: true): Callback;\n once <P extends Model.Event<this>> (key: P | P[], listener: unknown, squash: boolean): Callback;\n once <P extends Model.Event<this>> (key: P | P[], timeout?: number): Promise<void>;\n\n once <P extends Model.Event<this>> (\n select: P | P[],\n argument?: Model.OnUpdate<any, any> | number,\n squash?: boolean){\n\n if(typeof argument == \"function\")\n return this.on(select, argument, squash, true);\n\n if(typeof select == \"string\")\n select = [ select ];\n\n return new Promise<void>((resolve, reject) => {\n const invoke = (key?: string | null) => {\n if(!key){\n clear();\n reject(\n Oops.Timeout(select,\n typeof argument == \"number\"\n ? `${argument}ms`\n : `lifetime of ${this}`\n )\n );\n }\n else if((select as string[]).includes(key)){\n clear();\n return resolve;\n }\n }\n\n const clear = ensure(this, x => {\n for(const key of select)\n try { void (this as any)[key] }\n catch(e){}\n\n return x.addListener(invoke);\n })\n\n if(typeof argument == \"number\")\n setTimeout(invoke, argument);\n });\n }\n\n effect(callback: Model.Effect<this>): Callback;\n effect(callback: Model.Effect<this>, select: []): Callback;\n effect(callback: Model.Effect<this>, select: Model.Event<this>[]): Callback;\n\n effect(callback: Model.Effect<this>, select?: Model.Event<this>[]){\n const effect = createEffect(callback);\n\n return ensure(this, control => {\n let busy = false;\n let inject = this.is;\n\n const invoke = () => {\n if(busy)\n return;\n\n const output = mayRetry(() => {\n effect.call(inject, inject);\n })\n\n if(output instanceof Promise){\n output.finally(() => busy = false);\n busy = true;\n }\n }\n\n if(!select){\n const sub = control.subscribe(() => invoke);\n\n inject = sub.proxy;\n invoke();\n\n return sub.commit();\n }\n\n invoke();\n\n return control.addListener(key => {\n if(key === null){\n if(!select.length)\n invoke();\n }\n else if(select.includes(key))\n return invoke;\n });\n })\n }\n\n // TODO: account for exotic properties\n import <O extends Model.Compat<this>> (source: O, select?: (keyof O)[]){\n const { subject } = ensure(this);\n\n if(!select)\n select = getOwnPropertyNames(subject) as (keyof O)[];\n\n for(const key of select)\n if(key in source)\n (this as any)[key] = source[key];\n }\n\n export(): Model.Values<this>;\n export <P extends Model.Field<this>> (select: P[]): Model.Values<this, P>;\n\n export <P extends Model.Field<this>> (subset?: Set<P> | P[]){\n const { state } = ensure(this);\n const output = {} as Model.Values<this, P>;\n const keys = subset || state.keys();\n\n for(const key of keys)\n (output as any)[key] = state.get(key);\n\n return output;\n }\n\n update(): PromiseLike<readonly Model.Event<this>[] | false>;\n update(strict: true): Promise<readonly Model.Event<this>[]>;\n update(strict: false): Promise<false>;\n update(strict: boolean): Promise<readonly Model.Event<this>[] | false>;\n update(keys: Model.Event<this>): PromiseLike<readonly Model.Event<this>[]>;\n update(keys: Model.Event<this>, callMethod: boolean): PromiseLike<readonly Model.Event<this>[]>;\n update<T>(keys: Model.Event<this>, argument: T): PromiseLike<readonly Model.Event<this>[]>;\n\n update(arg?: any, tag?: any): any {\n const target = ensure(this);\n const { frame, waiting } = target;\n\n if(typeof arg == \"string\"){\n target.update(arg as Model.Field<this>);\n\n if(1 in arguments && arg in this){\n const method = (this as any)[arg];\n\n if(typeof method == \"function\")\n if(typeof tag != \"boolean\")\n method.call(this, tag);\n else if(tag)\n method.call(this);\n }\n\n arg = undefined;\n }\n\n if(!frame.size && arg === true)\n return Promise.reject(Oops.StrictUpdate());\n\n return <PromiseLike<readonly Model.Event<this>[] | false>> {\n then: (callback) => {\n if(!callback)\n throw Oops.NoChaining();\n\n if(frame.size || arg !== false)\n waiting.add(() => {\n callback(getUpdate(this));\n });\n else\n callback(false);\n }\n }\n }\n\n /** \n * Mark this instance for garbage-collection and send `willDestroy` event to all listeners.\n */\n destroy(){\n ensure(this).clear();\n }\n\n toString(){\n return this.constructor.name;\n }\n\n /**\n * Creates a new instance of this controller.\n * \n * Beyond `new this(...)`, method will activate managed-state.\n * \n * @param args - arguments sent to constructor\n */\n static create<T extends Class>(\n this: T, ...args: ConstructorParameters<T>): InstanceOf<T> {\n\n const instance = new this(...args);\n\n ensure(instance);\n\n return instance;\n }\n\n /**\n * Static equivalent of `x instanceof this`.\n * \n * Will determine if provided class is a subtype of this one. \n */\n static isTypeof<T extends new () => Model>(\n this: T, maybe: any): maybe is T {\n\n return (\n typeof maybe == \"function\" &&\n maybe.prototype instanceof this\n )\n }\n}\n\nexport { Model }","import { getUpdate, Controller, UPDATE, LISTEN } from './controller';\nimport { LOCAL, Stateful } from './model';\nimport { create, defineProperty } from './util';\n\nimport type { Callback } from './types';\n\ntype Listener = {\n commit(): void;\n release(): void;\n}\n\nexport class Subscriber <T extends Stateful = any> {\n public proxy!: T;\n public commit: () => Callback;\n public release!: Callback;\n\n public active = false;\n public dependant = new Set<Listener>();\n public add: (key: any, value?: boolean | Callback) => void;\n\n constructor(\n parent: Controller<T>,\n public onUpdate: Controller.OnEvent){\n\n const proxy = create(parent.subject);\n const using = new Map<any, boolean | (() => true | void)>();\n\n const listen = this.add = (\n key: any,\n value?: boolean | Callback) => {\n \n if(value !== undefined)\n using.set(key, value);\n else if(!using.has(key))\n using.set(key, true);\n }\n\n LISTEN.set(proxy, listen);\n \n defineProperty(proxy, LOCAL, { value: this });\n defineProperty(this, \"proxy\", {\n configurable: true,\n get(){\n if(UPDATE.has(proxy))\n setTimeout(() => UPDATE.delete(proxy), 0);\n\n return proxy;\n }\n })\n\n const release = parent.addListener(key => {\n if(!this.active)\n return;\n\n const handler = using.get(key);\n let notify: void | Callback;\n\n if(typeof handler == \"function\"){\n const callback = handler();\n\n if(callback === true)\n notify = this.onUpdate(key, parent);\n }\n else if(handler === true)\n notify = this.onUpdate(key, parent);\n\n if(!notify)\n return;\n\n const notate = () => {\n UPDATE.set(proxy, \n getUpdate(parent.subject).filter(k => using.has(k))\n );\n }\n\n parent.waiting.add(notate);\n parent.waiting.add(notify);\n });\n\n this.commit = () => {\n this.active = true;\n this.dependant.forEach(x => x.commit());\n\n return this.release;\n }\n\n this.release = () => {\n this.dependant.forEach(x => x.release());\n release();\n }\n }\n}","import { PENDING } from './instruction/apply';\nimport { flush } from './instruction/get.compute';\nimport { Model, Stateful } from './model';\nimport { Subscriber } from './subscriber';\nimport { defineProperty, getOwnPropertyDescriptor } from './util';\n\nimport type { Callback } from './types';\n\ntype ListenToKey = <T = any>(key: T, callback?: boolean | Callback) => void;\n\nconst UPDATE = new WeakMap<{}, readonly string[]>();\nconst LISTEN = new WeakMap<{}, ListenToKey>();\nconst CONTROL = Symbol(\"CONTROL\");\n\nfunction getUpdate<T extends {}>(subject: T){\n return UPDATE.get(subject) as readonly Model.Field<T>[];\n}\n\ndeclare namespace Controller {\n // TODO: implement value type\n type OnValue<T = any> = (this: T, value: any) => boolean | void;\n type OnEvent<T = any> = (key: Model.Event<T> | null, source: Controller) => Callback | void;\n}\n\nclass Controller<T extends Stateful = any> {\n public state!: Map<any, any>;\n public frame = new Set<string>();\n public waiting = new Set<Callback>();\n public followers = new Set<Controller.OnEvent>();\n\n constructor(public subject: T){}\n\n subscribe(callback: Controller.OnEvent<T>){\n return new Subscriber<T>(this, callback);\n }\n\n add(key: keyof T & string){\n const { subject, state } = this;\n const { value } = getOwnPropertyDescriptor(subject, key)!;\n\n if(typeof value == \"function\")\n return;\n\n if(typeof value == \"symbol\"){\n const instruction = PENDING.get(value);\n\n if(instruction){\n delete subject[key];\n PENDING.delete(value);\n instruction.call(this, key, this);\n }\n\n return;\n }\n\n state.set(key, value);\n\n defineProperty(subject, key, {\n enumerable: false,\n set: this.ref(key as any),\n get(){\n const listen = LISTEN.get(this);\n\n if(listen)\n listen(key);\n\n return state.get(key);\n }\n });\n }\n\n addListener(listener: Controller.OnEvent<T>){\n this.followers.add(listener);\n return () => {\n this.followers.delete(listener)\n }\n }\n\n ref(\n key: Model.Field<T>,\n handler?: Controller.OnValue<T>){\n \n const { subject, state } = this;\n \n return (value: any) => {\n if(state.get(key) == value)\n return;\n \n if(handler)\n switch(handler.call(subject, value)){\n case true:\n this.update(key);\n case false:\n return;\n }\n \n state.set(key, value);\n this.update(key);\n }\n }\n\n update(key: Model.Field<T>){\n const { followers, frame, subject, waiting } = this;\n \n if(frame.has(key))\n return;\n \n else if(!frame.size)\n setTimeout(() => {\n flush(this);\n \n UPDATE.set(subject, Array.from(frame));\n\n setTimeout(() => {\n UPDATE.delete(subject);\n }, 0);\n \n frame.clear();\n \n for(const notify of waiting)\n try {\n waiting.delete(notify);\n notify();\n }\n catch(err){\n console.error(err);\n }\n }, 0);\n \n frame.add(key);\n \n for(const callback of followers){\n const event = callback(key, this);\n \n if(typeof event == \"function\")\n waiting.add(event);\n }\n }\n\n clear(){\n const listeners = [ ...this.followers ];\n\n this.followers.clear();\n listeners.forEach(x => x(null, this));\n }\n}\n\ntype EnsureCallback<T extends Stateful> = (control: Controller<T>) => Callback | void;\n\nfunction ensure<T extends Stateful>(subject: T): Controller<T>;\nfunction ensure<T extends Stateful>(subject: T, cb: EnsureCallback<T>): Callback;\nfunction ensure<T extends {}>(subject: T): Controller<T & Stateful>;\n\nfunction ensure<T extends Stateful>(subject: T, cb?: EnsureCallback<T>){\n let control = subject[CONTROL]!;\n\n if(!control)\n defineProperty(subject, CONTROL, {\n value: control =\n new Controller(subject as unknown as Stateful)\n });\n\n if(!control.state){\n const { waiting } = control;\n\n if(cb){\n let done: Callback | void;\n\n waiting.add(() => {\n done = cb(control);\n });\n\n return () => done && done();\n }\n\n control.state = new Map();\n\n for(const key in subject)\n control.add(key);\n\n const callback = Array.from(waiting);\n\n waiting.clear();\n \n for(const cb of callback)\n cb();\n }\n\n return cb ? cb(control) : control;\n}\n\nexport {\n ensure,\n Controller,\n getUpdate,\n UPDATE,\n LISTEN,\n CONTROL\n}","import { Controller, CONTROL, ensure, LISTEN } from '../controller';\nimport { LOCAL, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { suspend } from '../suspense';\nimport { Callback } from '../types';\nimport { defineProperty } from '../util';\n\nconst PENDING = new Map<symbol, Instruction.Runner<any>>();\n\n/**\n * Property initializer, will run upon instance creation.\n * Optional returned callback will run when once upon first access.\n */\ntype Instruction<T> = (this: Controller, key: string, thisArg: Controller) =>\n | Instruction.Getter<T> \n | Instruction.ExplicitDescriptor\n | Instruction.Descriptor<T>\n | Instruction.RecursiveDescriptor<T>\n | boolean\n | void;\n\ndeclare namespace Instruction {\n type Getter<T> = (within?: Subscriber) => T;\n type Setter<T> = (value: T) => boolean | void;\n\n type Runner<T> = (this: Controller, key: string, on: Controller) =>\n Instruction.Descriptor<T> | boolean | undefined;\n\n interface Descriptor<T> {\n configurable?: boolean;\n enumerable?: boolean;\n value?: T;\n writable?: boolean;\n get?: Getter<T>;\n set?: Setter<T> | false;\n suspense?: boolean;\n destroy?: () => void;\n }\n\n interface ExplicitDescriptor extends PropertyDescriptor {\n explicit: true;\n }\n\n interface RecursiveDescriptor<T> {\n recursive: true;\n enumerable?: boolean;\n value?: T;\n set?: Setter<T> | false;\n suspense?: boolean;\n }\n}\n\n/**\n * Run instruction as controller sets itself up.\n * This will specialize the behavior of a given property.\n */\nfunction apply <T = any> (instruction: Instruction<T>, name?: string): T;\n\nfunction apply<T = any>(\n fn: Instruction<any>, label?: string){\n\n const name = label || fn.name || \"pending\";\n const placeholder = Symbol(`${name} instruction`);\n\n function setup(this: Controller, key: string){\n const { subject, state } = this;\n\n let output = fn.call(this, key, this);\n\n if(typeof output == \"function\")\n output = { get: output };\n\n if(typeof output != \"object\")\n return;\n\n if(\"explicit\" in output && output.explicit){\n defineProperty(subject, key, output);\n return false;\n }\n\n let {\n get: onGet,\n set: onSet,\n suspense\n } = output as Instruction.Descriptor<any>;\n\n if(\"value\" in output)\n state.set(key, output.value);\n\n if(\"recursive\" in output && output.recursive)\n onGet = getRecursive(key, this);\n\n if(\"destroy\" in output){\n const { destroy } = output;\n\n if(destroy)\n this.addListener((key) => {\n if(key == null)\n destroy();\n })\n }\n\n const control = this;\n\n defineProperty(subject, key, {\n enumerable: output.enumerable,\n\n set: onSet !== false\n ? this.ref(key, onSet)\n : undefined,\n\n get(this: Stateful){\n if(!state.has(key) && suspense)\n throw suspend(control, key);\n \n const listen = LISTEN.get(this);\n const local = this[LOCAL];\n \n if(listen)\n listen(key);\n \n return onGet\n ? onGet(local)\n : state.get(key);\n }\n });\n }\n\n PENDING.set(placeholder, setup);\n\n return placeholder as unknown as T;\n}\n\nexport function getRecursive(key: string, from: Controller){\n const context = new WeakMap<Subscriber, Stateful | undefined>();\n\n return (local: Subscriber | undefined) => {\n if(!local)\n return from.state.get(key);\n\n if(!context.has(local)){\n let reset: Callback | undefined;\n\n const init = () => {\n if(reset)\n reset();\n\n const value = from.state.get(key);\n \n if(value && CONTROL in value){\n const child = ensure(value).subscribe(local.onUpdate);\n \n if(local.active)\n child.commit();\n \n local.dependant.add(child);\n context.set(local, child.proxy);\n\n reset = () => {\n child.release();\n local.dependant.delete(child);\n context.set(local, undefined);\n reset = undefined;\n }\n }\n\n return true;\n }\n \n local.add(key, init);\n init();\n }\n\n return context.get(local);\n }\n}\n\nexport { apply, Instruction, PENDING }","import { issues } from '../issues';\nimport { mayRetry } from '../suspense';\nimport { defineProperty } from '../util';\nimport { apply } from './apply';\n\ntype Async<T = any> = (...args: any[]) => Promise<T>;\n\nexport const Oops = issues({\n DuplicatePending: (key) =>\n `Invoked action ${key} but one is already active.`\n})\n\n/**\n * Sets an exotic method with managed ready-state. Property accepts an async function.\n *\n * When an act-method is invoked, its `active` property to true for duration of call.\n * This is emitted as an update to property, both when called and after returns (or throws).\n *\n * **Note:** Subsequent calls will immediately throw if one is still pending.\n *\n * @param action - Action to fire when resulting property is invoked.\n */\nfunction act (action: Async): typeof action & { active: boolean };\nfunction act <S> (action: Async<S>): typeof action & { active: boolean };\n\nfunction act<T extends Async>(task: T){\n return apply<T>(\n function act(key){\n let pending = false;\n\n const invoke = async (...args: any[]) => {\n if(pending)\n return Promise.reject(\n Oops.DuplicatePending(key)\n )\n\n pending = true;\n this.update(key);\n\n try {\n return await mayRetry(() => (\n task.apply(this.subject, args)\n ))\n }\n finally {\n pending = false;\n this.update(key);\n }\n }\n\n this.state.set(key, undefined);\n\n defineProperty(invoke, \"active\", {\n get: () => pending\n })\n\n return {\n value: invoke as T,\n set: false\n };\n }\n )\n}\n\nexport { act }","import { Controller } from \"../controller\";\nimport { Oops } from \"./get\";\n\nexport function factoryMode<T>(\n self: Controller,\n output: Promise<T> | T,\n key: string,\n required: boolean\n){\n const { subject, state } = self;\n\n let pending: Promise<any> | undefined;\n let error: any;\n\n if(output instanceof Promise){\n state.set(key, undefined);\n\n pending = output\n .catch(err => error = err)\n .then(val => {\n state.set(key, val);\n return val;\n })\n .finally(() => {\n pending = undefined;\n self.update(key);\n })\n }\n\n state.set(key, output);\n\n const suspend = () => {\n if(required === false)\n return undefined;\n\n const issue =\n Oops.NotReady(subject, key);\n\n Object.assign(pending!, {\n message: issue.message,\n stack: issue.stack\n });\n\n throw pending;\n }\n \n return (): T | undefined => {\n if(error)\n throw error;\n\n if(pending)\n return suspend();\n\n if(state.has(key))\n return state.get(key);\n }\n}","import { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Stateful } from '../model';\nimport { mayRetry } from '../suspense';\nimport { apply } from './apply';\nimport { computeMode } from './get.compute';\nimport { factoryMode } from './get.factory';\n\nexport const Oops = issues({\n // BadSource: (model, property, got) =>\n // `Bad from-instruction provided to ${model}.${property}. Expects an arrow-function or a Model as source. Got ${got}.`,\n\n PeerNotAllowed: (model, property) =>\n `Attempted to use an instruction result (probably use or tap) as computed source for ${model}.${property}. This is not possible.`,\n\n ComputeFailed: (model, key) =>\n `Generating initial value for ${model}.${key} failed.`,\n\n NotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`,\n\n FactoryFailed: (model, key) =>\n `Generating initial value for ${model}.${key} failed.`,\n\n Failed: (parent, property, initial) =>\n `An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} [${parent}.${property}].`\n});\n\ndeclare namespace get {\n type Function<T, S = any> = (this: S, on: S) => T;\n type Factory<T, S = unknown> = (this: S, key: string, thisArg: S) => T;\n}\n\n/**\n * Implement a computed value; output will be generated by provided function.\n *\n * @param source - Source model from which computed value will be a subscriber.\n * @param compute - Compute function. Bound to a subscriber-proxy of source, returns output value. Will update automatically as input values change.\n * @param suspend - Value will throw suspense when evaulating to undefined.\n */\nfunction get <R, T> (source: T, compute: (this: T, on: T) => R, suspend: true): Exclude<R, undefined>;\nfunction get <R, T> (source: T, compute: (this: T, on: T) => R, suspend?: boolean): R;\n\n/**\n * Implement a computed value; output is returned by function from provided factory.\n *\n * @param compute - Factory function to generate a getter to subscribe dependancies.\n * @param suspend - Value will throw suspense when evaulating to undefined.\n */\nfunction get <R, T> (compute: (property: string, on: T) => (this: T, state: T) => R, suspend: true): Exclude<R, undefined>;\nfunction get <R, T> (compute: (property: string, on: T) => (this: T, state: T) => R, suspend?: boolean): R;\n\n/**\n * Set property with an async function.\n *\n * Property cannot be accessed until factory resolves, yeilding a result.\n * If accessed while processing, React Suspense will be thrown.\n *\n * - `required: true` (default) -\n * Run factory immediately upon creation of model instance.\n * - `required: false` -\n * Run factory only if/when accessed.\n * Value will always throw suspense at least once - use with caution.\n *\n * @param factory - Callback run to derrive property value.\n * @param required - (default: true) Run factory immediately on creation, otherwise on access.\n */\nfunction get <T> (factory: get.Factory<Promise<T>>, required: false): T | undefined;\nfunction get <T, S> (factory: get.Factory<Promise<T>, S>, required: false): T | undefined;\n\nfunction get <T> (factory: get.Factory<Promise<T>>, required?: boolean): T;\nfunction get <T, S> (factory: get.Factory<Promise<T>, S>, required?: boolean): T;\n\n/**\n * Set property with a factory function.\n *\n * - `required: true` (default) -\n * Run factory immediately upon creation of model instance.\n * - `required: false` -\n * Run factory only if/when accessed.\n * Value will always throw suspense at least once - use with caution.\n *\n * @param factory - Callback run to derrive property value.\n * @param required - (default: true) Run factory immediately on creation, otherwise on access.\n */\nfunction get <T>(factory: get.Factory<T>, required: false): T | undefined;\nfunction get <T, S>(factory: get.Factory<T, S>, required: false): T | undefined;\n\nfunction get <T>(factory: get.Factory<T>, required?: boolean): T;\nfunction get <T, S>(factory: get.Factory<T, S>, required?: boolean): T;\n\n/**\n * Assign a property with result of a promise.\n */\nfunction get <T> (factory: Promise<T>, required: false): T | undefined;\nfunction get <T> (factory: Promise<T>, required?: boolean): T;\n \nfunction get<R, T>(\n arg0: ((this: T, key: string, thisArg: T) => get.Function<R, T> | T) | Promise<R> | Stateful,\n arg1?: get.Function<T> | boolean,\n arg2?: boolean): R {\n\n return apply(\n function get(key){\n const { subject } = this;\n const computeRequired = arg1 === true || arg2 === true;\n const factoryRequired = arg1 !== false && arg2 !== false;\n\n let getter: () => any;\n\n // Easy mistake, using a peer, will always be unresolved.\n if(typeof arg0 == \"symbol\")\n throw Oops.PeerNotAllowed(subject, key);\n\n // if(typeof arg0 == \"function\" && /^[A-Z]/.test(arg0.name))\n // throw Oops.BadSource(subject, key, arg0);\n\n this.state.set(key, undefined);\n\n const init = (): any => {\n let source = this;\n let setter: get.Function<T, any>;\n \n if(typeof arg0 == \"function\"){\n const result = mayRetry(() => arg0.call(subject, key, subject));\n \n if(typeof result == \"function\")\n setter = result;\n else {\n getter = factoryMode(this, result, key, factoryRequired);\n return;\n }\n }\n else if(arg0 instanceof Promise){\n getter = factoryMode(this, arg0, key, factoryRequired);\n return;\n }\n else if(typeof arg1 == \"function\"){\n // replace source controller in-case it is different\n source = ensure(arg0);\n setter = arg1;\n }\n else\n throw new Error(`Factory argument cannot be ${arg1}`);\n\n getter = computeMode(this, source, setter, key, computeRequired);\n }\n\n if(typeof arg0 == \"function\" && computeRequired)\n try {\n init();\n }\n catch(err){\n Oops.ComputeFailed(subject, key).warn();\n throw err;\n }\n\n return () => {\n if(!getter)\n init();\n\n return getter();\n }\n }\n )\n}\n\nexport { get }","import { Controller, ensure } from '../controller';\nimport { Model } from '../model';\nimport { createValueEffect, defineProperty } from '../util';\nimport { apply } from './apply';\n\ndeclare namespace ref {\n type Callback<T, S = any> = (this: S, argument: T) =>\n ((next: T) => void) | Promise<void> | void | boolean;\n\n interface Object<T = any> {\n (next: T): void;\n current: T | null;\n }\n\n /** Object with references to all managed values of `T`. */\n type Proxy<T extends Model> = {\n [P in Model.Field<T>]-?: Model.Ref<T[P]>\n };\n\n type CustomProxy<T extends Model, R> = {\n [P in Model.Field<T>]-?: R;\n }\n}\n\n/**\n * Creates an object with references to all managed values.\n * Each property is a function to set value in state when invoked.\n *\n * *Properties are simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param target - Source model from which to reference values.\n */\nfunction ref <T extends Model> (target: T): ref.Proxy<T>;\n\n/**\n * Creates an object with values based on managed values.\n * Each property will invoke mapper function on first access supply\n * the its return value going forward.\n *\n * @param target - Source model from which to reference values.\n * @param mapper - Function producing the placeholder value for any given property.\n */\nfunction ref <O extends Model, R>\n (target: O, mapper: (key: Model.Field<O>) => R): ref.CustomProxy<O, R>;\n\n/**\n * Creates a ref-compatible property.\n * Will persist value, and updates to this are made part of controller event-stream.\n *\n * *Output is simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param callback - Optional callback to synchronously fire when reference is first set or does update.\n */\nfunction ref <T = HTMLElement> (callback?: ref.Callback<T>): ref.Object<T>;\nfunction ref <T, S> (callback?: ref.Callback<T, S>): ref.Object<T>;\n\nfunction ref<T>(\n arg?: ref.Callback<T> | Model,\n mapper?: (key: string) => any){\n\n return apply(\n function ref(key){\n let value: ref.Object | ref.Proxy<any> = {};\n\n if(typeof arg != \"object\")\n value = createRef(this, key, arg);\n else\n ensure(arg).state.forEach((_val, key) => {\n defineProperty(value, key,\n mapper ? {\n configurable: true,\n get(){\n const out = mapper(key);\n defineProperty(value, key, { value: out });\n return out;\n }\n } : {\n value: createRef(this, key)\n })\n })\n\n return { value, explicit: true };\n }\n )\n}\n\nexport { ref }\n\nfunction createRef(\n src: Controller,\n key: string,\n cb?: ref.Callback<any>){\n\n const refObjectFunction =\n src.ref(key, cb && createValueEffect(cb));\n\n defineProperty(refObjectFunction, \"current\", {\n set: refObjectFunction,\n get: () => src.state.get(key)\n })\n\n return refObjectFunction as ref.Object;\n}","import { createValueEffect } from '../util';\nimport { apply } from './apply';\n\ndeclare namespace set {\n type Callback<T, S = any> = (this: S, argument: T) =>\n ((next: T) => void) | Promise<any> | void | boolean;\n}\n\n/**\n * Set property with a placeholder.\n * \n * Property cannot be accessed until it is defined. If accessed while undefined, a hybrid\n * `Promise`/`Error` (ala: [Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html)) will be thrown.\n */\nfunction set <T = any>(): T;\n\nfunction set <T> (onUpdate: set.Callback<T>): T;\nfunction set <T, S> (onUpdate: set.Callback<T, S>): T;\n\nfunction set <T> (value: undefined, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: undefined, onUpdate: set.Callback<T, S>): T;\n\nfunction set <T> (value: T, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: T, onUpdate: set.Callback<T, S>): T;\n\nfunction set(\n value?: any,\n argument?: set.Callback<any> | boolean): any {\n\n if(!(1 in arguments)){\n argument = value;\n value = undefined;\n }\n\n return apply(\n function set(key){\n if(value !== undefined)\n this.state.set(key, value);\n\n return {\n suspense: true,\n set: typeof argument == \"function\"\n ? createValueEffect(argument)\n : undefined\n }\n }\n )\n}\n\nexport { set }","import { Controller } from '../controller';\nimport { Subscriber } from '../subscriber';\nimport { assign, create, defineProperty } from '../util';\nimport { Instruction } from './apply';\n\ntype MapFunction<T, R> =\n T extends Map<infer K, infer V> ?\n (value: V, key: K, map: T) => R | void :\n T extends Set<infer K> ?\n (value: K, key: K, set: T) => R | void :\n never;\n\ntype Managed<T> = Exclude<T, \"forEach\"> & {\n from?: T;\n\n forEach<R>(\n mapFunction: MapFunction<T, R>,\n thisArg?: any\n ): Exclude<R, undefined>[] | void;\n}\n\nconst ANY = Symbol(\"any\");\n\ntype Keyed<K = unknown> = Set<K> | Map<K, unknown>;\n\nfunction keyed<T extends Keyed>(\n control: Controller,\n property: any,\n initial: T\n): Instruction.Descriptor<T> {\n type K = typeof ANY | (\n T extends Set<infer U> ? U :\n T extends Map<infer U, any> ? U :\n never\n );\n\n const init = createProxy(emit, watch);\n const frozen = new Set<Subscriber>();\n const context = new Map<Subscriber, T>();\n const users = new Map<Subscriber, Set<K>>();\n const watched = new WeakMap<T, Set<K>>();\n const update = new Set<(key: K) => void>();\n\n let managed: T = init(initial);\n\n function watch(on: any, key: K){\n const include = watched.get(on);\n\n if(include)\n include.add(key);\n }\n\n function emit(key: K){\n control.update(property);\n control.waiting.add(() => frozen.clear());\n update.forEach(notify => notify(key));\n }\n\n function subscribe(local: Subscriber){\n const proxy = create(managed);\n let watch = users.get(local);\n\n if(!watch){\n const using = watch = new Set<K>();\n users.set(local, using);\n \n function onEvent(key: K){\n if(frozen.has(local))\n return;\n \n if(key === ANY || using.has(key) || using.has(ANY)){\n const refresh = local.onUpdate(property, control);\n \n if(refresh){\n frozen.add(local);\n refresh()\n }\n }\n }\n \n local.add(property, false);\n local.dependant.add({\n commit(){\n if(using.size === 0)\n using.add(ANY);\n \n update.add(onEvent);\n },\n release(){\n update.delete(onEvent);\n }\n })\n }\n\n watched.set(proxy, watch);\n context.set(local, proxy);\n\n return proxy;\n }\n\n return {\n value: initial,\n get(local){\n return local ?\n context.get(local) || subscribe(local) :\n managed;\n },\n set(next){\n control.state.set(property, next);\n managed = init(next);\n context.clear();\n emit(ANY);\n },\n destroy(){\n update.clear();\n context.clear();\n }\n }\n}\n\nfunction createProxy(\n emit: (key: any) => void,\n watch: (self: any, key: any) => void){\n\n return <T extends Keyed<any>>(from: T) => {\n const proxy = create(from) as T;\n\n assign(proxy,\n {\n from,\n delete(key: any){\n // TODO: this commit's fix needs tests.\n // Was not cause by coverage.\n const out = from.delete(key);\n emit(key);\n return out;\n },\n clear(){\n from.clear();\n emit(ANY);\n },\n has(key: any){\n watch(this, key);\n return from.has(key);\n },\n keys(){\n watch(this, ANY);\n return from.keys();\n },\n values(){\n watch(this, ANY);\n return from.values();\n },\n entries(){\n watch(this, ANY);\n return from.entries();\n },\n forEach(\n callbackfn: (a: any, b: any, c: any) => any,\n thisArg: any){\n\n const acc = [] as any[];\n\n from.forEach((a, b, c) => {\n const result = callbackfn.call(thisArg, a, b, c);\n\n if(result !== undefined)\n acc.push(result);\n });\n\n watch(this, ANY);\n\n return acc;\n },\n [Symbol.iterator](){\n watch(this, ANY);\n return from[Symbol.iterator]();\n },\n },\n from instanceof Set\n ? {\n add(key: any){\n from.add(key);\n emit(key);\n return this;\n }\n }\n : {\n get(key: any){\n watch(this, ANY);\n return from.get(key);\n },\n set(key: any, value: any){\n from.set(key, value);\n emit(key);\n return this;\n }\n }\n )\n\n defineProperty(proxy, \"size\", {\n get(){\n watch(this, ANY);\n return from.size;\n }\n })\n \n return proxy;\n }\n}\n\nexport { keyed, Managed };","import { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { mayRetry } from '../suspense';\nimport { Class, InstanceOf } from '../types';\nimport { apply, getRecursive } from './apply';\nimport { keyed, Managed } from './use.keyed';\n\nexport const Parent = new WeakMap<{}, {}>();\n\nexport const Oops = issues({\n BadArgument: (type) =>\n `Instruction \\`use\\` cannot accept argument type of ${type}.`,\n\n NotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`\n})\n\nfunction use <K = any> (initial: SetConstructor): Managed<Set<K>>;\nfunction use <K = any, V = any> (initial: MapConstructor): Managed<Map<K, V>>;\n\nfunction use (initial: Set<unknown>): Managed<Set<any>>;\nfunction use (initial: Map<unknown, unknown>): Managed<Map<any, any>>;\n\nfunction use (from: () => Set<unknown>): Managed<Set<any>>;\nfunction use (from: () => Map<unknown, unknown>): Managed<Map<any, any>>;\n\nfunction use <T extends Set<any> | Map<any, any>> (initial: T): Managed<T>;\nfunction use <T extends Set<any> | Map<any, any>> (from: () => T): Managed<T>;\n\n/**\n * Create a placeholder for specified Model type.\n */\nfunction use <T extends Model> (): T | undefined;\nfunction use <T extends Model> (from: () => T, required: false): T | undefined;\nfunction use <T extends Model> (from: () => T, required: boolean): T;\n\n /**\n * Create a new child instance of model.\n */\nfunction use <T extends Class> (Type: T, callback?: (i: InstanceOf<T>) => void): InstanceOf<T>;\n\n /**\n * Create a managed child from factory function.\n */\nfunction use <T extends {}> (from: () => Promise<T>, required: false): T | undefined;\nfunction use <T extends {}> (from: () => Promise<T>, required: boolean): T;\nfunction use <T extends {}> (from: () => Promise<T>, callback?: (i: T) => void): T;\nfunction use <T extends {}> (from: () => T, callback?: (i: T) => void): T;\n\n /**\n * Create child-instance relationship with provided model.\n *\n * Note: If `peer` is not already initialized before parent is\n * (created with `new` as opposed to create method), that model will\n * attach this via `parent()` instruction. It will not, however, if\n * already active.\n */\nfunction use <T extends {}> (peer: T, callback?: (i: T) => void): T;\n\nfunction use<T extends Class>(\n input?: any,\n argument?: boolean | ((i: InstanceOf<T> | undefined) => void)){\n\n return apply(\n function use(key){\n const { state, subject } = this;\n const required = argument !== false;\n\n let pending: Promise<any> | undefined;\n let error: any;\n let get: (local: Subscriber | undefined) => any =\n (_local: Subscriber | undefined) => state.get(key);\n\n if(typeof input === \"function\"){\n if(\"prototype\" in input &&\n input === input.prototype.constructor)\n input = new input();\n }\n\n else if(input && typeof input !== \"object\")\n throw Oops.BadArgument(typeof input);\n\n if(input instanceof Map || input instanceof Set)\n return keyed(this, key, input);\n\n const onUpdate = (next: {} | undefined) => {\n state.set(key, next);\n\n if(next){\n get = getRecursive(key, this);\n Parent.set(next, subject);\n ensure(next);\n }\n\n if(typeof argument == \"function\")\n argument(next as InstanceOf<T>);\n\n return true;\n }\n\n const suspend = () => {\n if(required === false)\n return;\n\n const issue =\n Oops.NotReady(subject, key);\n\n Object.assign(pending!, {\n message: issue.message,\n stack: issue.stack\n });\n\n throw pending;\n }\n\n const initialize = () => {\n const output = typeof input == \"function\" ?\n mayRetry(() => input.call(subject, subject)) :\n input;\n\n if(output instanceof Promise){\n pending = output\n .catch(err => error = err)\n .then(val => {\n onUpdate(val);\n return val;\n })\n .finally(() => {\n pending = undefined;\n this.update(key);\n })\n\n return;\n }\n\n onUpdate(output);\n }\n\n if(input !== undefined && required)\n initialize();\n\n return {\n set: onUpdate,\n get(local){\n if(pending)\n return suspend();\n \n if(error)\n throw error;\n\n if(!state.has(key))\n initialize();\n \n if(pending)\n return suspend();\n \n return get(local);\n }\n };\n }\n )\n}\n\nexport { use }","import { issues } from '../issues';\nimport { Model } from '../model';\nimport { InstanceOf } from '../types';\nimport { apply } from './apply';\nimport { Parent } from './use';\n\nexport const Oops = issues({\n Required: (expects, child) => \n `New ${child} created standalone but requires parent of type ${expects}. Did you remember to create via use(${child})?`,\n\n Unexpected: (expects, child, got) =>\n `New ${child} created as child of ${got}, but must be instanceof ${expects}.`,\n})\n\n/**\n * Fetches and assigns the controller which spawned this host.\n * When parent assigns an instance via `use()` directive, it\n * will be made available to child upon this request.\n *\n * @param Expects - Type of controller compatible with this class. \n * @param required - Throw if controller is created independantly.\n */\nfunction has <T extends typeof Model> (Expects: T, required: false): InstanceOf<T> | undefined;\nfunction has <T extends typeof Model> (Expects: T, required?: true): InstanceOf<T>;\n\nfunction has<T extends typeof Model>(\n Expects: T, required?: boolean){\n\n return apply(\n function parent(){\n const child = this.subject;\n const value = Parent.get(child) as InstanceOf<T>;\n const expected = Expects.name;\n\n if(!value){\n if(required !== false)\n throw Oops.Required(expected, child);\n }\n else if(!(value instanceof Expects))\n throw Oops.Unexpected(expected, child, value);\n\n return { value };\n }\n );\n }\n\n export { has }","import { Model } from './model';\nimport { create, defineProperty, getOwnPropertyDescriptor, getOwnPropertySymbols, getPrototypeOf } from './util';\n\nexport type Collection =\n | Array<Model | typeof Model>\n | { [anything: string]: Model | typeof Model };\n\nexport class Lookup {\n private table = new Map<typeof Model, symbol>();\n\n public get local(){\n return [\n ...new Set(getOwnPropertySymbols(this).map(\n symbol => (this as any)[symbol] as Model\n ))\n ]\n }\n\n private key(T: typeof Model){\n let key = this.table.get(T);\n\n if(!key){\n key = Symbol(T.name);\n this.table.set(T, key);\n }\n\n return key;\n }\n\n public get(T: typeof Model){\n return (this as any)[this.key(T)];\n }\n\n public push(){\n return create(this) as this;\n }\n\n public inject(\n T: typeof Model,\n I: Model,\n writable?: boolean){\n\n do {\n const key = this.key(T);\n const conflict = this.hasOwnProperty(key);\n\n defineProperty(this, key, {\n value: conflict ? null : I,\n configurable: true,\n writable\n });\n\n T = getPrototypeOf(T);\n }\n while(T !== Model);\n }\n\n public pop(){\n for(const key of getOwnPropertySymbols(this)){\n const entry = getOwnPropertyDescriptor(this, key)!;\n\n if(entry.writable && entry.value)\n entry.value.destroy();\n }\n }\n}","import React, { useLayoutEffect } from 'react';\n\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Lookup } from '../register';\n\nimport type { Callback, InstanceOf } from '../types';\n\nexport const LookupContext = React.createContext(new Lookup());\nexport const useLookup = () => React.useContext(LookupContext);\n\nexport const Oops = issues({\n NotFound: (name) =>\n `Couldn't find ${name} in context; did you forget to use a Provider?`\n})\n\nfunction useLocal <T extends typeof Model> (Type: T, required: false): InstanceOf<T> | undefined;\nfunction useLocal <T extends typeof Model> (Type: T, arg?: boolean): InstanceOf<T>;\nfunction useLocal <T extends typeof Model, I extends InstanceOf<T>> (Type: T, effect: (found: I) => Callback | void): I;\nfunction useLocal <T extends typeof Model, I extends InstanceOf<T>, K extends Model.Field<I>> (Type: T, key: K): I[K];\n\nfunction useLocal<T extends typeof Model>(\n Type: T, arg?: boolean | string | ((found: InstanceOf<T>) => Callback | void)) {\n\n const instance = useLookup().get(Type);\n\n if(!instance && arg !== false)\n throw Oops.NotFound(Type.name);\n\n switch(typeof arg){\n case \"string\":\n return (instance as any)[arg];\n\n case \"function\":\n useLayoutEffect(() => arg(instance), []);\n\n default:\n return instance;\n }\n}\n\nexport { useLocal }","import { apply } from '../instruction/apply';\nimport { issues } from '../issues';\nimport { Model, Stateful } from '../model';\nimport { Lookup } from '../register';\nimport { Class, InstanceOf } from '../types';\nimport { Global } from './global';\nimport { useLookup } from './useLocal';\n\nexport const Oops = issues({\n NotAllowed: (parent, child) =>\n `Global '${parent}' attempted to attach '${child}' but it is not also a singleton.`,\n\n AmbientRequired: (requested, requester, key) =>\n `Attempted to find an instance of ${requested} in context. It is required for [${requester}.${key}], but one could not be found.`\n})\n\nexport type Peer = typeof Model | typeof Global;\nexport type ApplyPeer = (context: Lookup) => void;\nexport type PeerCallback<T extends Peer> = (instance: InstanceOf<T> | undefined) => void | boolean;\n\nconst PendingContext = new WeakMap<Stateful, ApplyPeer[]>();\nconst ContextWasUsed = new WeakMap<Model, boolean>();\n\n/**\n * Find and attach most applicable instance of Model via context.\n * \n * Host controller will search element-hierarchy relative to where it spawned.\n * \n * @param Type - Type of model to find from context\n * @param callback -\n * - Invoked after context is scanned, is passed result - either found or undefined.\n * - If argument is inadequate, but required, your implemention should simply throw.\n * - If inadequate and not required, conditionally return false.\n */\nfunction tap <T extends Class> (Type: T, callback?: (instance?: InstanceOf<T>) => void | true): InstanceOf<T>;\nfunction tap <T extends Class> (Type: T, callback?: (instance?: InstanceOf<T>) => void | boolean): InstanceOf<T> | undefined;\n\n/**\n * Find and attach most applicable instance of Model via context.\n *\n * Expects a `<Provider>` of target controller to exist. \n * Host controller will search element-hierarchy relative to where it spawned.\n *\n * @param Type - Type of controller to attach to property. \n * @param required - Throw if instance of Type cannot be found.\n */\nfunction tap <T extends Class> (Type: T, required: true): InstanceOf<T>;\nfunction tap <T extends Class> (Type: T, required?: boolean): InstanceOf<T> | undefined;\n\nfunction tap<T extends Peer>(\n type: T, argument?: boolean | PeerCallback<T>){\n\n return apply(\n function tap(key){\n if(\"set\" in type)\n return {\n recursive: true,\n value: type.get()\n }\n\n const { subject } = this;\n\n if(\"set\" in subject.constructor)\n throw Oops.NotAllowed(subject, type.name);\n\n getPending(subject).push(context => {\n let instance = context.get(type);\n\n if(typeof argument == \"function\"){\n if(argument(instance) === false)\n instance = undefined;\n }\n\n else if(!instance && argument)\n throw Oops.AmbientRequired(type.name, subject, key);\n\n this.state.set(key, instance);\n this.update(key);\n })\n\n return {\n recursive: true,\n suspense: true\n }\n }\n )\n};\n\nfunction usePeerContext(subject: Model){\n if(ContextWasUsed.has(subject)){\n if(ContextWasUsed.get(subject))\n useLookup();\n\n return;\n }\n\n const pending = PendingContext.get(subject);\n\n if(pending){\n const local = useLookup();\n\n for(const init of pending)\n init(local);\n\n PendingContext.delete(subject);\n }\n\n ContextWasUsed.set(subject, !!pending);\n}\n\nfunction getPending(subject: Stateful){\n let pending = PendingContext.get(subject);\n\n if(!pending)\n PendingContext.set(subject, pending = []);\n\n return pending;\n}\n\nexport { tap, usePeerContext, getPending }","import React from 'react';\nimport { Callback } from '../types';\n\nexport function use<T>(init: (trigger: Callback) => T){\n const [ state, update ] = React.useState((): T[] => [\n init(() => update(state.concat()))\n ]);\n\n return state[0];\n}","import React, { useState } from 'react';\n\nimport { ensure } from '../controller';\nimport { Model, Stateful } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { getOwnPropertyNames } from '../util';\nimport { use } from './use';\n\nfunction useModel <T extends Class, I extends InstanceOf<T>> (\n source: T,\n watch: Model.Field<I>[],\n callback?: (instance: I) => void\n): I;\n\nfunction useModel <T extends Class, I extends InstanceOf<T>> (\n source: T,\n callback?: (instance: I) => void\n): I;\n\nfunction useModel <T extends Class, I extends InstanceOf<T>> (\n source: T,\n apply: Model.Compat<I>,\n keys?: Model.Event<I>[]\n): I;\n\nfunction useModel <T extends Stateful> (\n source: (() => T) | T,\n watch?: Model.Field<T>[],\n callback?: (instance: T) => void\n): T;\n\nfunction useModel <T extends Stateful> (\n source: (() => T) | T,\n callback?: (instance: T) => void\n): T;\n\nfunction useModel <T extends Stateful> (\n source: (() => T) | T,\n apply: Model.Compat<T>,\n keys?: Model.Event<T>[]\n): T;\n\nfunction useModel <T extends Model | Stateful> (\n source: any,\n arg?: ((instance: T) => void) | Model.Event<T>[] | Model.Compat<T>,\n arg2?: ((instance: T) => void) | Model.Field<T>[]){\n\n const instance = React.useMemo(() => {\n const cb = arg2 || arg;\n const instance: T =\n typeof source == \"function\" ?\n source.prototype instanceof Model ?\n new source() :\n source() : \n source;\n\n ensure(instance);\n\n if(typeof cb == \"function\")\n cb(instance);\n\n return instance;\n }, []);\n\n if(Array.isArray(arg)){\n const update = useState(0)[1];\n\n React.useLayoutEffect(() => { \n if(arg.length && instance instanceof Model)\n instance.on(arg, () => update(x => x+1), true);\n\n return () => {\n if(Model.isTypeof(source))\n (instance as Model).destroy();\n }\n }, []);\n\n return instance;\n }\n else {\n const local = use(refresh => (\n ensure(instance).subscribe(() => refresh)\n ));\n\n if(typeof arg == \"object\"){\n local.active = false;\n\n if(typeof arg2 !== \"object\")\n arg2 = getOwnPropertyNames(instance) as Model.Field<T>[];\n\n for(const key of arg2)\n if(key in arg)\n (instance as any)[key] = arg[key];\n\n React.useLayoutEffect(() => {\n local.active = true;\n });\n }\n\n React.useLayoutEffect(() => {\n local.commit();\n\n return () => {\n local.release();\n\n if(Model.isTypeof(source))\n (instance as Model).destroy();\n };\n }, []);\n\n return local.proxy;\n }\n}\n\nexport { useModel }","import React from 'react';\n\nimport { ensure } from '../controller';\nimport { Stateful } from '../model';\nimport { defineProperty } from '../util';\nimport { use } from './use';\n\nimport type { Callback } from '../types';\n\nfunction useFrom <T extends Stateful, R> (\n source: (() => T) | T,\n compute: (this: T, from: T) => R,\n expect: true\n): Exclude<R, undefined>;\n\nfunction useFrom <T extends Stateful, R> (\n source: (() => T) | T,\n compute: (this: T, from: T) => R,\n expect?: boolean\n): R;\n\nfunction useFrom(\n target: Stateful,\n compute: Function,\n suspend?: boolean) {\n\n const local = use(refresh => {\n const sub = ensure(target).subscribe(() => update);\n const spy = sub.proxy;\n\n let value = compute.call(spy, spy);\n let update: Callback | undefined;\n let retry: Callback | undefined;\n\n const set = (next: any) => {\n value = next;\n\n if(retry) {\n retry();\n retry = undefined;\n }\n else\n refresh();\n };\n\n if(value instanceof Promise) {\n value.then(set);\n value = undefined;\n }\n else {\n sub.commit();\n update = () => {\n const next = compute.call(spy, spy);\n\n if(value != next)\n set(next);\n };\n }\n\n defineProperty(sub, \"proxy\", {\n get() {\n if(value === undefined && suspend)\n throw new Promise<void>(res => retry = res);\n\n return value;\n }\n });\n\n return sub;\n });\n\n React.useLayoutEffect(() => local.release, []);\n\n return local.proxy;\n}\n\nexport { useFrom }\n","import React, { useMemo } from 'react';\n\nimport { ensure } from '../controller';\nimport { Model, Stateful } from '../model';\nimport { suspend } from '../suspense';\nimport { use } from './use';\nimport { useFrom } from './useFrom';\nimport { useLocal } from './useLocal';\n\nnamespace useTap {\n export interface Tappable {\n new (): Stateful;\n new (...args: any[]): Stateful;\n get?: () => Stateful;\n }\n}\n\nfunction useTap <T extends Stateful> (source: T | (() => T)): T;\n\nfunction useTap <T extends Stateful, K extends Model.Field<T>> (\n source: T | (() => T) | useTap.Tappable,\n path: K,\n expect: true\n): Exclude<T[K], undefined>;\n\nfunction useTap <T extends Stateful, K extends Model.Field<T>> (\n source: T | (() => T) | useTap.Tappable,\n path: K,\n expect?: boolean\n): T[K];\n\nfunction useTap <T extends Stateful, R> (\n source: T | (() => T) | useTap.Tappable,\n compute: (this: T, from: T) => R,\n expect: true\n): Exclude<R, undefined>;\n\nfunction useTap <T extends Stateful, R> (\n source: T | (() => T) | useTap.Tappable,\n compute: (this: T, from: T) => R,\n expect?: boolean\n): R;\n\nfunction useTap <T extends Stateful> (\n source: T | (() => T) | useTap.Tappable,\n path?: Model.Field<T> | ((this: T, from: T) => any),\n expect?: boolean) {\n\n const instance = useMemo(() => {\n if(typeof source == \"object\")\n return () => source;\n\n if(\"get\" in source)\n return () => source.get!();\n\n if(\"prototype\" in source)\n return () => useLocal(source as any);\n else\n return source;\n }, [])() as T;\n\n if(typeof path == \"function\")\n return useFrom(instance, path, expect);\n\n const local = use(refresh => (\n ensure(instance).subscribe(() => refresh)\n ));\n\n React.useLayoutEffect(local.commit, []);\n \n if(typeof path !== \"undefined\"){\n const value = local.proxy[path];\n\n if(value === undefined && expect)\n throw suspend(ensure(instance), path);\n\n return value;\n }\n\n return local.proxy;\n}\n\nexport { useTap }","/* istanbul ignore file */\nimport React from 'react';\n\nimport { CONTROL, Controller, ensure } from '../controller';\nimport { Model } from '../model';\nimport { Callback, Class, InstanceOf } from '../types';\nimport { getOwnPropertyNames } from '../util';\nimport { usePeerContext } from './tap';\nimport { useLocal } from './useLocal';\nimport { useModel } from './useModel';\nimport { useTap } from './useTap';\n\n\nclass MVC extends Model {\n static [CONTROL]: Controller;\n\n /** Attaches this controller to a component. */\n tap(): this;\n tap <K extends Model.Field<this>> (key: K, expect: true): Exclude<this[K], undefined>;\n tap <K extends Model.Field<this>> (key: K, expect?: boolean): this[K];\n tap <T> (from: (this: this, state: this) => Promise<T>, expect: true): Exclude<T, undefined>;\n tap <T> (from: (this: this, state: this) => Promise<T>, expect?: boolean): T | undefined;\n tap <T> (from: (this: this, state: this) => T, expect: true): Exclude<T, undefined>;\n tap <T> (from: (this: this, state: this) => T, expect?: boolean): T;\n\n tap(path?: string | Function, expect?: boolean){\n return useTap(this, path as any, expect);\n }\n\n /**\n * **React Hook** - Subscribe to instance of controller within a component.\n *\n * @param callback - Run once before subscription begins.\n */\n use(watch: Model.Field<this>[], callback?: (instance: this) => void): this;\n use(callback?: (instance: this) => void): this;\n\n use(arg?: any, callback?: (instance: this) => void) {\n return useModel(this, arg, callback);\n }\n\n /**\n * **React Hook** - Fetch most instance of this controller from context, if it exists.\n * \n * @param required - Unless false, will throw where instance cannot be found.\n */\n static get <T extends Class> (this: T, required?: boolean): InstanceOf<T>;\n\n /**\n * **React Hook** - Fetch most instance of this controller from context.\n * \n * @param required - If false, may return undefined.\n */\n static get <T extends Class> (this: T, required: false): InstanceOf<T> | undefined;\n\n /**\n * **React Hook** - Fetch specific value from instance of this controller in context.\n */\n static get <T extends Class, I extends InstanceOf<T>, K extends Model.Field<I>> (this: T, key: K): I[K];\n\n /**\n * **React Hook** - Fetch instance.\n * \n * Effect callback will run once if found, throw if not found.\n * Returned function is called on unmount.\n */\n static get <T extends Class, I extends InstanceOf<T>> (this: T, effect: (found: I) => Callback | void): I;\n\n static get <T extends typeof MVC> (this: T, arg: any){\n return useLocal(this, arg);\n }\n\n /** \n * **React Hook** - Fetch and subscribe to instance of this controller within ambient component.\n */\n static tap <T extends Class> (this: T): InstanceOf<T>;\n static tap <T extends Class, I extends InstanceOf<T>, K extends Model.Field<I>> (this: T, key: K, expect: true): Exclude<I[K], undefined>;\n static tap <T extends Class, I extends InstanceOf<T>, K extends Model.Field<I>> (this: T, key: K, expect?: boolean): I[K];\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => Promise<T>, expect: true): Exclude<T, undefined>;\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => Promise<T>, expect?: boolean): T;\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => T, expect: true): Exclude<T, undefined>;\n static tap <T, M extends Class, I extends InstanceOf<M>> (this: M, from: (this: I, state: I) => T, expect?: boolean): T;\n\n static tap (key?: string | Function, expect?: boolean): any {\n return useTap(this, key as any, expect);\n }\n\n /**\n * **React Hook** - Spawn and maintain a controller from within a component.\n * \n * More efficient than `use()` if you don't need hook-based features.\n * \n * @param callback - Run after creation of instance.\n */\n static new <T extends Class, I extends InstanceOf<T>> (this: T, callback?: (instance: I) => void): I;\n static new <T extends Class, I extends InstanceOf<T>> (this: T, apply: Model.Compat<I>): I;\n\n static new <T extends Class, I extends InstanceOf<T>> (this: T, arg?: ((instance: I) => void) | Model.Compat<I>){\n const instance = React.useMemo(() => {\n const instance: I = new this();\n\n ensure(instance);\n\n if(typeof arg == \"function\")\n arg(instance);\n\n else if(arg)\n getOwnPropertyNames(instance).forEach(key => {\n if(key in arg)\n instance[key] = arg[key];\n })\n\n return instance;\n }, []);\n\n usePeerContext(instance.is);\n\n return instance;\n }\n\n static use <T extends Class, I extends InstanceOf<T>> (\n this: T,\n watch: Model.Field<I>[],\n callback?: (instance: I) => void\n ): I;\n\n static use <T extends Class, I extends InstanceOf<T>> (\n this: T,\n callback?: (instance: I) => void\n ): I;\n\n static use <T extends Class, I extends InstanceOf<T>> (\n this: T,\n apply: Model.Compat<I>,\n keys?: Model.Event<I>[]\n ): I;\n\n static use <T extends typeof MVC> (this: T, a: any, b?: any){\n const instance = useModel(this, a, b);\n usePeerContext(instance.is); \n return instance;\n }\n\n /**\n * @deprecated consider doing this manually - not worth minor efficiency gain over using.\n */\n static uses <T extends typeof MVC, I extends InstanceOf<T>, D extends Model.Compat<I>> (\n this: T, apply: D, keys?: (keyof D)[]){\n\n return this.use(instance => {\n instance.import(apply, keys);\n })\n }\n\n /**\n * @deprecated is now replaced by overload of `use` method.\n */\n static using <T extends typeof MVC, I extends InstanceOf<T>> (\n this: T,\n apply: Model.Compat<I>,\n keys?: Model.Event<I>[]){\n\n return this.use(apply, keys);\n }\n\n static meta <T extends Class>(this: T): T;\n static meta <T extends Class, K extends keyof T> (this: T, key: K, expect: true): Exclude<T[K], undefined>;\n static meta <T extends Class, K extends keyof T> (this: T, key: K, expect?: boolean): T[K];\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => Promise<T>, expect: true): Exclude<T, undefined>;\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => Promise<T>, expect?: boolean): T;\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => T, expect: true): Exclude<T, undefined>;\n static meta <T, M extends Class> (this: M, from: (this: M, state: M) => T, expect?: boolean): T;\n\n static meta (path?: string | Function, expect?: boolean): any {\n return useTap(() => this, path as any, expect);\n }\n}\n\nexport { MVC };","import React from 'react';\n\nimport { issues } from '../issues';\nimport { Class } from '../types';\nimport { useLocal } from './useLocal';\nimport { useTap } from './useTap';\n\nexport const Oops = issues({\n BadProps: () =>\n `Provider expects either a render function, 'get' or 'has' props.`\n})\n\ndeclare namespace Consumer {\n type HasProps<E extends Class> = {\n /** @deprecated - use for instead */\n of?: never;\n\n /** Type of controller to fetch from context. */\n for: E;\n\n /**\n * Getter function. Is called on every natural render of this component.\n * Will throw if usable instance cannot be found in context.\n */\n has: (value: InstanceType<E>) => void;\n }\n\n type GetProps<E extends Class> = {\n /** @deprecated - use for instead */\n of?: never;\n\n /** Type of controller to fetch from context. */\n for: E;\n\n /** Getter function. Is called on every natural render of this component. */\n get: (value: InstanceType<E> | undefined) => void;\n }\n\n type RenderProps<E extends Class> = {\n /** @deprecated - use for instead */\n of?: never;\n\n /** Type of controller to fetch from context. */\n for: E;\n\n /**\n * Render function, will receive instance of desired controller.\n *\n * Similar to `tap()`, updates to properties accessed in\n * this function will cause a refresh when they change.\n */\n children: (value: InstanceType<E>) => React.ReactElement<any, any> | null;\n }\n\n type Props<T extends Class> = HasProps<T> | GetProps<T> | RenderProps<T>\n}\n\nfunction Consumer<T extends Class>(props: Consumer.Props<T>){\n const { get, has, children, for: type } = props as any;\n\n if(typeof children == \"function\")\n return children(useTap(type));\n\n const callback = has || get;\n\n if(typeof callback == \"function\")\n callback(useLocal(type, !!has));\n else\n throw Oops.BadProps()\n\n return null;\n}\n\nexport { Consumer };","import React from 'react';\n\nimport { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Lookup } from '../register';\nimport { Subscriber } from '../subscriber';\nimport { Class } from '../types';\nimport { entries, values } from '../util';\nimport { getPending } from './tap';\nimport { use } from './use';\nimport { LookupContext, useLookup } from './useLocal';\n\nexport const Oops = issues({\n NoType: () =>\n \"Provider 'of' prop must be Model, typeof Model or a collection of them.\",\n\n PropDeprecated: () =>\n \"Provider `of` prop is deprecated, use `for` instead.\"\n})\n\ndeclare namespace Provider {\n type Item = Model | typeof Model;\n type Collection<T extends Item> = T[] | { [key: string]: T };\n type Existent<E> = E extends Class ? InstanceType<E> : E extends Model ? E : never;\n\n type NormalProps<E, I = Existent<E>> =\n & {\n /** @deprecated use for instead. */\n of?: never;\n for: E;\n children: React.ReactNode | ((instance: I) => React.ReactNode);\n }\n & Model.Compat<I>;\n\n // FIX: This fails to exclude properties with same key but different type.\n type MultipleProps<T extends Item> =\n & {\n /** @deprecated use for instead. */\n of?: never;\n for: Collection<T>;\n children?: React.ReactNode | (() => React.ReactNode);\n }\n & Model.Compat<Existent<T>>;\n\n type Props<T extends Item> = MultipleProps<T> | NormalProps<T>;\n}\n\nfunction Provider<T extends Provider.Item>(props: Provider.Props<T>){\n if(\"of\" in props)\n throw Oops.PropDeprecated();\n\n const from = useLookup();\n\n const context = React.useMemo(() => {\n const I = props.for;\n\n if(!I)\n throw Oops.NoType();\n\n const layer = from.push();\n\n function register(I: Model | typeof Model){\n if(I instanceof Model)\n layer.inject(I.constructor as any, I, false);\n else\n layer.inject(I, I.create(), true);\n }\n\n if(I instanceof Model || typeof I == \"function\")\n register(I);\n else\n values(I).forEach(register);\n\n for(const instance of layer.local)\n if(instance)\n for(const apply of getPending(instance))\n apply(layer)\n\n return layer;\n }, []);\n\n const render = props.children;\n\n useAppliedProps(context, props);\n\n React.useLayoutEffect(() => () => context.pop(), []);\n\n return React.createElement(LookupContext.Provider, { value: context },\n typeof render == \"function\"\n ? React.createElement(RenderFunction, { context, render })\n : render\n );\n}\n\nexport { Provider };\n\nfunction useAppliedProps(within: Lookup, props: {}){\n const update = React.useMemo(() => {\n const targets = within.local;\n\n return function integrate(props: {}){\n for(const [key, value] of entries(props))\n if(![\"of\", \"for\", \"children\"].includes(key))\n for(const into of targets)\n if(into && key in into)\n (into as any)[key] = value;\n };\n }, []);\n\n update(props);\n}\n\ninterface RenderFunctionProps {\n context: Lookup;\n render: Function;\n}\n\nfunction RenderFunction(props: RenderFunctionProps): any {\n const hook = use(refresh => {\n const targets = props.context.local;\n\n if(targets.length == 1)\n return ensure(targets[0]).subscribe(() => refresh);\n\n return {} as Subscriber;\n });\n\n if(hook.commit)\n React.useLayoutEffect(hook.commit, []);\n\n return props.render(hook.proxy);\n}","import { ensure } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { MVC } from './mvc';\n\nexport const Oops = issues({\n DoesNotExist: (name) =>\n `Tried to access singleton ${name}, but none exist! Did you forget to initialize?\\nCall ${name}.create() before attempting to access, or consider using ${name}.use() instead.`,\n\n AlreadyExists: (name) =>\n `Shared instance of ${name} already exists! Consider unmounting existing, or use ${name}.reset() to force-delete it.`\n})\n\nconst Active = new WeakMap<Class, Global>();\n\nexport class Global extends MVC {\n static create<T extends Class>(\n this: T, ...args: ConstructorParameters<T>){\n\n if(Active.has(this))\n throw Oops.AlreadyExists(this.name);\n\n const instance = new this(...args);\n\n ensure(instance);\n Active.set(this, instance);\n\n return instance as InstanceOf<T>;\n }\n\n /**\n * Update the active instance of this class.\n * Returns a thenable; resolves after successful update.\n * If instance does not already exist, one will be created. \n */\n static set<T extends typeof Global>(\n this: T, updates: Partial<InstanceOf<T>>){\n\n const instance = Active.get(this) || (this as any).create();\n instance.import(updates);\n return instance.update(false);\n }\n\n /**\n * **React Hook** - Fetch most instance of this controller from context, if it exists.\n * \n * @param required - If false, may return undefined.\n */\n static get <T extends Class> (this: T, required: false): InstanceOf<T> | undefined;\n\n /**\n * **React Hook** - Fetch most instance of this controller from context.\n * \n * @param required - Unless false, will throw where instance cannot be found.\n */\n static get <T extends Class> (this: T, required?: boolean): InstanceOf<T>;\n\n /**\n * **React Hook** - Fetch specific value from instance of this controller in context.\n */\n static get <T extends Class, K extends Model.Field<InstanceOf<T>>> (this: T, key: K): InstanceOf<T>[K];\n\n static get(arg?: boolean | string){\n const instance = Active.get(this);\n\n if(!instance && arg !== false)\n throw Oops.DoesNotExist(this.name);\n\n return (\n typeof arg == \"string\" ?\n (instance as any)[arg] :\n instance\n )\n }\n\n /** Destroy current instance of Global, if it exists. */\n static reset(){\n const current = Active.get(this);\n\n if(current)\n current.destroy();\n }\n\n destroy(){\n super.destroy();\n Active.delete(this.constructor as any);\n }\n}"],"names":["Oops","use"],"mappings":"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"}