@expressive/mvc 1.0.0-beta.39 → 1.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +11 -3
- package/lib/index.esm.js +25 -17
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +25 -17
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/issues.ts","../src/util.ts","../src/dispatch.ts","../src/controller.ts","../src/subscriber.ts","../src/compute.ts","../src/model.ts","../src/instruction/apply.ts","../src/instruction/act.ts","../src/suspense.ts","../src/instruction/from.ts","../src/instruction/ref.ts","../src/instruction/set.ts","../src/instruction/parent.ts","../src/instruction/use.ts","../src/register.ts","../src/react/useInContext.ts","../src/react/tap.ts","../src/react/hooks.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 { issues } from './issues';\nimport { Model } from './model';\nimport { Callback } from './types';\n\nexport const Oops = issues({\n BadEffectCallback: () =>\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 define(\n target: {}, key: string | symbol, value: any){\n\n defineProperty(target, key, { value })\n}\n\nexport function defineLazy<T>(\n object: T, \n property: string | symbol, \n init: (this: T) => any){\n\n defineProperty(object, property, { \n configurable: true,\n get(){\n const value = init!.call(this);\n defineProperty(this, property, { value });\n return value;\n }\n });\n}\n\nexport function setAlias<T extends Function>(\n func: T, displayName: string){\n\n assign(func, { displayName });\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.BadEffectCallback()\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.BadEffectCallback()\n }\n}","export const UPDATE = new WeakMap<{}, readonly string[]>();\n\nexport function applyUpdate(\n subject: {}, keys: readonly string[]){\n\n UPDATE.set(subject, keys);\n\n return () => {\n setTimeout(() => {\n UPDATE.delete(subject);\n }, 0);\n }\n}","import * as Computed from './compute';\nimport { applyUpdate } from './dispatch';\nimport { Pending } from './instruction/apply';\nimport { issues } from './issues';\nimport { CONTROL, LOCAL, Model, Stateful } from './model';\nimport { Callback, RequestCallback } from './types';\nimport { define, defineProperty, getOwnPropertyDescriptor, setAlias } from './util';\n\nexport const Oops = issues({\n StrictUpdate: (expected) => \n `Strict update() did ${expected ? \"not \" : \"\"}find pending updates.`,\n\n NoChaining: () =>\n `Then called with undefined; update promise will never catch nor supports chaining.`\n});\n\ndeclare namespace Controller {\n type OnEvent<T = any> = (key: Model.Event<T>, source: Controller) => RequestCallback | void;\n \n // TODO: implement value type\n type OnValue<T = any, S = Model.Values<T>> = (this: T, value: any, state: S) => boolean | void;\n}\n\nconst READY = new WeakSet<Controller>();\n\nclass Controller<T extends Stateful = any> {\n public proxy: Model.Entries<T>;\n public state = {} as Model.Values<T>;\n public frame = new Set<string>();\n public waiting = new Set<RequestCallback>();\n public onDestroy = new Set<Callback>();\n\n protected followers = new Set<Controller.OnEvent>();\n\n constructor(public subject: T){\n this.proxy = Object.create(subject);\n }\n\n start(){\n for(const key in this.subject)\n this.manage(key as unknown as Model.Field<T>);\n\n this.emit([]);\n }\n\n stop(){\n this.followers.clear();\n this.onDestroy.forEach(x => x());\n }\n\n private manage(key: Model.Field<T>){\n const { proxy, state, subject } = this;\n const { value: entry } = getOwnPropertyDescriptor(subject, key)!;\n\n if(typeof entry == \"function\")\n return;\n\n let onGet: any;\n let onSet: any;\n let enumerable: any;\n\n const instruction = Pending.get(entry);\n\n if(instruction){\n Pending.delete(entry);\n delete subject[key];\n const desc = instruction.call(this, key, this);\n\n if(desc === false)\n return;\n\n if(typeof desc == \"object\"){\n if(\"value\" in desc)\n state[key] = desc.value as any;\n\n onSet = desc.set;\n onGet = desc.get;\n enumerable = desc.enumerable;\n }\n }\n else\n state[key] = entry;\n\n const set =\n onSet !== false\n ? this.ref(key, onSet)\n : undefined;\n\n function get(this: Stateful){\n const local = this[LOCAL];\n const value = state[key];\n\n if(local && !local.watch[key])\n local.watch[key] = true;\n\n return onGet ? onGet(value, local) : value;\n }\n\n setAlias(get, `tap ${key}`);\n\n defineProperty(subject, key, {\n enumerable,\n set,\n get: onGet\n ? () => onGet!(state[key])\n : () => state[key]\n });\n\n defineProperty(proxy, key, {\n enumerable,\n set,\n get\n });\n }\n\n ref(key: Model.Field<T>, handler?: Controller.OnValue<T>){\n const { state, subject } = this;\n\n return (value: any) => {\n if(state[key] == value)\n return;\n\n if(handler)\n switch(handler.call(subject, value, state)){\n case true:\n this.update(key);\n case false:\n return;\n }\n\n this.update(key, value);\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 emit(keys: readonly Model.Event<T>[]){\n const waiting = [ ...this.waiting ];\n\n this.waiting.clear();\n applyUpdate(this.subject, keys)();\n\n for(const callback of waiting)\n try {\n callback(keys)\n }\n catch(err){\n console.error(err);\n }\n }\n\n update(key: Model.Event<T>, value?: any){\n if(1 in arguments)\n this.state[key as Model.Field<T>] = value;\n\n if(this.frame.has(key))\n return;\n\n if(!this.frame.size)\n setTimeout(() => {\n Computed.flush(this);\n\n const keys = Object.freeze([ ...this.frame ]);\n\n this.frame.clear();\n this.emit(keys);\n }, 0);\n\n this.frame.add(key);\n\n for(const callback of this.followers){\n const event = callback(key, this);\n\n if(typeof event == \"function\")\n this.waiting.add(event);\n }\n }\n\n requestUpdate(): PromiseLike<readonly Model.Event<T>[] | false>;\n requestUpdate(strict: true): Promise<readonly Model.Event<T>[]>;\n requestUpdate(strict: false): Promise<false>;\n requestUpdate(strict: boolean): Promise<readonly Model.Event<T>[] | false>;\n requestUpdate(callback: (keys: readonly Model.Event<T>[]) => void): void;\n requestUpdate(arg?: boolean | RequestCallback): any {\n if(typeof arg == \"function\"){\n this.waiting.add(arg);\n return;\n }\n\n if(typeof arg == \"boolean\" && arg !== this.frame.size > 0)\n return Promise.reject(Oops.StrictUpdate(arg));\n\n return <PromiseLike<readonly Model.Event<T>[] | false>> {\n then: (callback) => {\n if(callback)\n if(this.frame.size)\n this.waiting.add(callback);\n else\n callback(false);\n else\n throw Oops.NoChaining();\n }\n }\n }\n}\n\ntype EnsureCallback<T extends Stateful> = (control: Controller<T>) => Callback | void;\n\nfunction control<T extends Stateful>(subject: T): Controller<T>;\nfunction control<T extends Stateful>(subject: T, cb: EnsureCallback<T>): Callback;\n\n/** Initialize controller even if not a stateful object. */\nfunction control<T extends {}>(subject: T): Controller<T & Stateful>;\n\nfunction control<T extends Stateful>(subject: T, cb?: EnsureCallback<T>){\n let control = subject[CONTROL];\n const ready = READY.has(control);\n\n if(!control){\n control = new Controller(subject as unknown as Stateful);\n define(subject, CONTROL, control);\n }\n\n if(!cb){\n if(!ready){\n READY.add(control);\n control.start();\n }\n\n return control;\n }\n\n if(!ready){\n let done: Callback | void;\n\n control.requestUpdate(() => {\n done = cb(control);\n });\n\n return () => done && done();\n }\n\n return cb(control);\n}\n\nexport { Controller, control }","import { control, Controller } from './controller';\nimport { applyUpdate } from './dispatch';\nimport { LOCAL, Model, Stateful } from './model';\nimport { Callback, RequestCallback } from './types';\nimport { create, define, defineProperty } from './util';\n\ntype Listener = {\n commit(): void;\n release(): void;\n}\n\nexport class Subscriber <T extends Stateful = any> {\n public proxy!: T;\n public release!: Callback;\n public commit: () => () => void;\n\n public active = false;\n public dependant = new Set<Listener>();\n public watch = {} as {\n [key in Model.Event<T>]: Callback | true;\n }\n\n constructor(\n target: Controller<T> | T,\n public onUpdate: Controller.OnEvent){\n\n const parent = target instanceof Controller\n ? target : control(target);\n\n const proxy = create(parent.proxy);\n\n let reset: Callback | undefined;\n\n define(proxy, LOCAL, this);\n defineProperty(this, \"proxy\", {\n configurable: true,\n get(){\n if(reset)\n setTimeout(reset, 0);\n\n return proxy;\n }\n })\n\n const release = parent.addListener(key => {\n const handler = this.watch[key];\n\n if(!handler || !this.active)\n return;\n\n if(typeof handler == \"function\")\n handler();\n\n const notify = this.onUpdate(key, parent);\n const getWhy: RequestCallback = (keys) => {\n reset = applyUpdate(proxy, keys.filter(k => k in this.watch));\n }\n\n if(notify){\n parent.requestUpdate(getWhy);\n parent.requestUpdate(notify);\n }\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 { Controller } from './controller';\nimport { issues } from './issues';\nimport { Subscriber } from './subscriber';\nimport { RequestCallback } from './types';\nimport { defineProperty, getOwnPropertyDescriptor, setAlias } from './util';\n\nexport const Oops = issues({\n ComputeFailed: (parent, property, initial) =>\n `An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} [${parent}.${property}].`,\n\n ComputedEarly: (property) => \n `Note: Computed values don't run until accessed, except when subscribed to. '${property}' getter may have run earlier than intended.`\n})\n\ntype GetterInfo = {\n key: string;\n parent: Controller;\n priority: number;\n}\n\nconst INIT = new WeakSet<Function>();\nconst INFO = new WeakMap<Function, GetterInfo>();\nconst USED = new WeakMap<Controller, Map<string, GetterInfo>>();\nconst KEYS = new WeakMap<Controller, RequestCallback[]>();\n\nexport function prepare(\n parent: Controller,\n key: string,\n source: () => Controller,\n setter: (on?: any) => any,\n getter?: (on: Controller, key: string) => any){\n\n let sub: Subscriber;\n\n const { state, subject } = parent;\n const info: GetterInfo = { key, parent, priority: 1 };\n\n let register = USED.get(parent)!;\n\n if(!register){\n register = new Map<string, GetterInfo>();\n USED.set(parent, register);\n }\n\n register.set(key, info);\n\n function compute(initial?: boolean){\n try {\n return setter.call(sub.proxy, sub.proxy);\n }\n catch(err){\n Oops.ComputeFailed(subject, key, !!initial).warn();\n throw err;\n }\n }\n\n function update(){\n let value;\n\n try {\n value = compute(false);\n }\n catch(e){\n console.error(e);\n }\n finally {\n if(state[key] !== value){\n parent.update(key, value);\n return value;\n }\n }\n }\n\n function defer(_key: string, from: Controller){\n let pending = KEYS.get(from);\n\n if(!pending)\n KEYS.set(from, pending = []);\n\n if(info.parent !== from)\n update();\n else {\n const after = pending.findIndex(peer => (\n info.priority > INFO.get(peer)!.priority\n ));\n\n pending.splice(after + 1, 0, update);\n }\n }\n\n function create(early?: boolean){\n sub = new Subscriber(source(), defer);\n\n defineProperty(state, key, {\n value: undefined,\n writable: true\n })\n\n try {\n return state[key] = compute(true);\n }\n catch(e){\n if(early)\n Oops.ComputedEarly(key).warn();\n\n throw e;\n }\n finally {\n sub.commit();\n\n for(const key in sub.watch){\n const peer = register.get(key);\n \n if(peer && peer.priority >= info.priority)\n info.priority = peer.priority + 1;\n }\n }\n }\n\n setAlias(update, `try ${key}`);\n setAlias(create, `new ${key}`);\n setAlias(setter, `run ${key}`);\n\n INIT.add(create);\n INFO.set(update, info);\n\n defineProperty(state, key, {\n get: create,\n configurable: true,\n enumerable: true\n })\n\n if(getter)\n return () => getter(parent, key);\n}\n\nexport function ensure(\n on: Controller, keys: string[]){\n\n type Initial = (early?: boolean) => void;\n\n for(const key of keys){\n const desc = getOwnPropertyDescriptor(on.state, key);\n const getter = desc && desc.get;\n \n if(INIT.has(getter!))\n (getter as Initial)(true);\n }\n}\n\nexport function flush(on: Controller){\n const handled = on.frame;\n const pending = KEYS.get(on);\n\n if(!pending)\n return;\n\n while(pending.length){\n const why = [ ...handled ];\n const compute = pending.shift()!;\n const { key } = INFO.get(compute)!;\n\n if(!handled.has(key))\n compute(why);\n }\n\n KEYS.delete(on);\n}","import * as Computed from './compute';\nimport { control, Controller } from './controller';\nimport { UPDATE } from './dispatch';\nimport { Subscriber } from './subscriber';\nimport { Callback, Class, InstanceOf, RequestCallback } from './types';\nimport { createEffect, define, defineLazy, getOwnPropertyNames } from './util';\n\nexport const CONTROL = Symbol(\"CONTROL\");\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]?: 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 /**\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 get: this;\n\n /**\n * Circular reference to `this` controller.\n * \n * Shortcut is mainly to update values, while having destructured already.\n */\n set: this;\n}\n\nclass Model {\n static [CONTROL]: Controller;\n static [WHY]: readonly string[];\n\n constructor(){\n define(this, CONTROL, new Controller(this));\n define(this, \"get\", this);\n define(this, \"set\", this);\n }\n\n get [STATE]() {\n return this[CONTROL].state as this;\n }\n\n get [WHY](){\n return UPDATE.get(this);\n }\n\n on <P = Model.Event<this>> (event: (key: P) => RequestCallback | void): Callback;\n\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\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) => RequestCallback | void),\n handler?: Function,\n squash?: boolean,\n once?: boolean){\n\n return control(this, control => {\n if(typeof select == \"function\")\n return control.addListener(select);\n\n const keys = \n typeof select == \"string\" ? [select] :\n !select.length ? getOwnPropertyNames(control.state) :\n select;\n\n Computed.ensure(control, keys);\n\n const callback: RequestCallback = squash\n ? handler!.bind(this)\n : frame => frame\n .filter(k => keys.includes(k))\n .forEach(k => handler!.call(this, control.state[k as Model.Field<this>], k))\n\n const trigger: RequestCallback = once\n ? frame => { remove(); callback(frame) }\n : callback;\n\n const remove = control.addListener(key => {\n if(keys.includes(key))\n return trigger;\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\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[]): Promise<P[]>;\n\n once <P extends Model.Event<this>> (\n select: P | P[],\n callback?: Model.OnUpdate<any, any>,\n squash?: boolean){\n\n if(callback)\n return this.on(select, callback, squash, true);\n\n return new Promise<P[]>(resolve => {\n this.on(select, resolve, true, true);\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 effect(callback: Model.Effect<this>, select?: Model.Event<this>[]){\n const effect = createEffect(callback);\n\n return control(this, control => {\n if(!select){\n const sub = new Subscriber(control, () => invoke);\n const invoke = () => {\n const x = sub.proxy;\n effect.call(x, x);\n }\n\n invoke();\n\n return sub.commit();\n }\n\n const invoke = () => {\n effect.call(this.get, this.get);\n }\n\n invoke();\n\n if(!select.length){\n control.onDestroy.add(invoke);\n return () => {\n control.onDestroy.delete(invoke);\n }\n }\n\n return control.addListener(key => {\n 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 } = control(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 } = control(this);\n const output = {} as Model.Values<this, P>;\n \n if(!subset)\n subset = getOwnPropertyNames(state) as P[];\n\n for(const key of subset)\n output[key] = state[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\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 = control(this);\n\n if(typeof arg == \"string\"){\n target.update(arg);\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 return target.requestUpdate(arg);\n }\n\n /** \n * Mark this instance for garbage-collection and send `willDestroy` event to all listeners.\n */\n destroy(){\n control(this).stop();\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: any[]): InstanceOf<T> {\n\n const instance = \n new (this as any)(...args);\n\n control(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 }\n\ndefineLazy(Model, CONTROL, function(){\n return new Controller(this);\n})","import { Controller } from '../controller';\nimport { CONTROL, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { defineProperty } from '../util';\nimport { Instruction } from './types';\n\nexport const Pending = new Map<symbol, Instruction.Runner<any>>();\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 let output = fn.call(this, key, this);\n\n if(typeof output == \"function\")\n return { get: output };\n\n if(typeof output !== \"object\")\n return output || undefined;\n\n if(\"explicit\" in output && output.explicit){\n defineProperty(this.subject, key, output);\n return false;\n }\n\n if(\"recursive\" in output)\n output = {\n ...output,\n get: recursive(this, key)\n }\n\n return output;\n }\n\n Pending.set(placeholder, setup);\n\n return placeholder as unknown as T;\n}\n\nfunction recursive(source: Controller, key: string){\n const context = new WeakMap<Subscriber, any>();\n\n const subscribe = (parent: Subscriber) => {\n let child: Subscriber | undefined;\n\n const init = () => {\n if(child){\n child.release();\n parent.dependant.delete(child);\n context.set(parent, undefined);\n child = undefined;\n }\n\n const value = source.state[key];\n\n if(value && CONTROL in value){\n child = new Subscriber(value as Stateful, parent.onUpdate);\n \n if(parent.active)\n child.commit();\n \n parent.dependant.add(child);\n context.set(parent, child.proxy);\n }\n }\n\n init();\n parent.watch[key] = init;\n }\n\n return (value: any, local: Subscriber | undefined) => {\n if(!local)\n return value;\n\n if(!context.has(local))\n subscribe(local);\n\n return context.get(local);\n }\n\n}\n\nexport { apply }","import { issues } from '../issues';\nimport { defineProperty, setAlias } from '../util';\nimport { apply } from './apply';\n\ntype Async<T = any> = (...args: any[]) => Promise<T>;\n\nexport const Oops = issues({\n DuplicateAction: (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 = (...args: any[]) => {\n if(pending)\n return Promise.reject(\n Oops.DuplicateAction(key)\n )\n\n pending = true;\n this.update(key);\n\n return new Promise(res => {\n res(task.apply(this.subject, args));\n }).finally(() => {\n pending = false;\n this.update(key);\n })\n }\n\n this.state[key] = undefined;\n\n setAlias(invoke, `run ${key}`);\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 { issues } from './issues';\n\nexport const Oops = issues({\n ValueNotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`\n})\n\n/**\n * Get value, suspend instead if undefined.\n * \n * Throws suspense promise also interpretable as an error.\n * React could handle it but other contexts probably not.\n */\nexport function pendingValue<T = any>(\n via: Controller, key: string): T {\n\n const value = via.state[key];\n\n if(value === undefined)\n throw suspend(via, key);\n\n return value;\n}\n\nexport function pendingFactory(\n via: Controller,\n key: string,\n fn: (key: string, subject: unknown) => any){\n\n const { subject, state } = via;\n let waiting: Promise<any> | undefined;\n let error: any;\n\n return () => {\n if(waiting)\n throw waiting;\n\n if(error)\n throw error;\n\n if(key in state)\n return state[key];\n\n let output;\n\n try {\n output = fn.call(subject, key, subject);\n }\n catch(err){\n throw error = err;\n }\n\n if(output instanceof Promise){\n const issue =\n Oops.ValueNotReady(subject, key);\n\n output\n .catch(err => error = err)\n .then(out => state[key] = out)\n .finally(() => waiting = undefined)\n\n throw waiting = Object.assign(output, {\n message: issue.message,\n stack: issue.stack\n });\n }\n else {\n return state[key] = output;\n }\n }\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.ValueNotReady(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[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}","import * as Computed from '../compute';\nimport { control, Controller } from '../controller';\nimport { issues } from '../issues';\nimport { Stateful } from '../model';\nimport { pendingValue } from '../suspense';\nimport { apply } from './apply';\n\nexport const Oops = issues({\n BadComputedSource: (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\ndeclare namespace from {\n type Function<T, O=any> = (this: O, on: O) => T;\n type Factory<T, O=any> = (key: string) => Function<T, O>;\n type Getter = (controller: Controller, key: string) => any;\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 from <R, T> (source: T, compute: (this: T, on: T) => R, suspend: true): Exclude<R, undefined>;\nfunction from <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 from <R, T> (compute: (property: string) => (this: T, state: T) => R, suspend: true): Exclude<R, undefined>;\nfunction from <R, T> (compute: (property: string) => (this: T, state: T) => R, suspend?: boolean): R;\n\nfunction from<R, T>(\n source: from.Factory<T> | Stateful,\n setter?: from.Function<T> | boolean,\n arg?: boolean): R {\n\n return apply(\n function from(key){\n const { subject } = this;\n\n let getSource: () => Controller;\n let getter: from.Getter | undefined;\n\n if(arg === true || setter === true)\n getter = pendingValue;\n\n if(typeof setter == \"boolean\")\n setter = undefined;\n\n // Easy mistake, using a peer, will always be unresolved.\n if(typeof source == \"symbol\")\n throw Oops.PeerNotAllowed(subject, key);\n\n // replace source controller in-case it is different\n if(typeof source == \"object\")\n getSource = () => control(source);\n\n // specifically an arrow function (getter factory)\n else if(!source.prototype){\n setter = source.call(subject, key);\n getSource = () => this;\n }\n\n // Regular function is too ambiguous so not allowed.\n else\n throw Oops.BadComputedSource(subject, key, source);\n\n return Computed.prepare(this, key, getSource, setter!, getter);\n }\n )\n}\n\nexport { from }","import { control, Controller } from '../controller';\nimport { Model } from '../model';\nimport { createValueEffect, defineLazy, 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> = { [P in Model.Field<T>]: Model.Ref<T[P]> };\n}\n\n/**\n * Creates an object with references to all managed values.\n * Each property will 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 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>(arg?: ref.Callback<T> | Model){\n return apply(\n function ref(key){\n let value: ref.Object | ref.Proxy<any> = {};\n\n if(typeof arg == \"object\"){\n const source = control(arg);\n \n for(const key in source.state)\n defineLazy(value, key, createRef.bind(source, key));\n }\n else \n value = createRef.call(this, key, arg);\n\n return { value, explicit: true };\n }\n )\n}\n\nexport { ref }\n\nfunction createRef(\n this: Controller,\n key: string,\n cb?: ref.Callback<any>){\n\n const refObjectFunction =\n this.ref(key, cb && createValueEffect(cb));\n\n defineProperty(refObjectFunction, \"current\", {\n set: refObjectFunction,\n get: () => this.state[key]\n })\n\n return refObjectFunction as ref.Object;\n}","import { apply } from './apply';\nimport { issues } from '../issues';\nimport { pendingFactory, pendingValue } from '../suspense';\nimport { createValueEffect } from '../util';\n\nexport const Oops = issues({\n NonOptional: (Parent, key) => \n `Property ${Parent}.${key} is marked as required.`,\n\n BadFactory: () =>\n `Set instruction can only accept a factory or undefined.`,\n\n FactoryFailed: (model, key) =>\n `Generating initial value for ${model}.${key} failed.`\n})\n\ndeclare namespace set {\n type Factory<T, S = unknown> = (this: S, key: string, subject: S) => T;\n\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\n /**\n * Set property with starting value `undefined`.\n * \n * If required and accessed while still empty, React Suspense will be thrown.\n * Property will reject any assignment of undefined.\n * \n * @param value - Starting value of host property (undefined).\n * @param required - Property will suspend callee if undefined at time of access.\n */\nfunction set <T> (value: undefined, required: false): T | undefined;\nfunction set <T> (value: undefined, required?: boolean): T;\n \nfunction set <T> (value: undefined, onUpdate: set.Callback<T>): T | undefined;\nfunction set <T, S> (value: undefined, onUpdate: set.Callback<T, S>): T | undefined;\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 set <T>(factory: set.Factory<Promise<T>>, required: false): T | undefined;\nfunction set <T, S>(factory: set.Factory<Promise<T>, S>, required: false): T | undefined;\n \nfunction set <T>(factory: set.Factory<Promise<T>>, required?: boolean): T;\nfunction set <T, S>(factory: set.Factory<Promise<T>, S>, required?: boolean): T;\n \nfunction set <T> (value: set.Factory<Promise<T>>, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: set.Factory<Promise<T>, S>, onUpdate: set.Callback<T, S>): 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 set <T>(factory: set.Factory<T>, required: false): T | undefined;\nfunction set <T, S>(factory: set.Factory<T, S>, required: false): T | undefined;\n \nfunction set <T>(factory: set.Factory<T>, required?: boolean): T;\nfunction set <T, S>(factory: set.Factory<T, S>, required?: boolean): T;\n \nfunction set <T> (value: set.Factory<T>, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: set.Factory<T, S>, onUpdate: set.Callback<T, S>): T;\n\nfunction set(\n factory?: (key: string, subject: unknown) => any,\n argument?: set.Callback<any> | boolean): any { \n\n return apply(\n function set(key){\n let set;\n let get: () => void;\n\n const required =\n argument === true || argument === undefined;\n\n if(factory === undefined)\n get = () => pendingValue(this, key);\n\n else if(typeof factory !== \"function\")\n throw Oops.BadFactory();\n\n else {\n get = pendingFactory(this, key, factory);\n\n if(required)\n try {\n get();\n }\n catch(err){\n if(err instanceof Promise)\n void 0;\n else {\n Oops.FactoryFailed(this.subject, key).warn();\n throw err;\n }\n }\n }\n\n if(typeof argument == \"function\")\n set = createValueEffect(argument);\n else\n set = (value: any) => {\n if(value === undefined && required)\n throw Oops.NonOptional(this.subject, key);\n }\n \n return { set, get }\n }\n )\n}\n\nexport { set }","import { issues } from '../issues';\nimport { Model } from '../model';\nimport { InstanceOf } from '../types';\nimport { apply } from './apply';\n\nexport const Parent = new WeakMap<{}, {}>();\n\nexport const Oops = issues({\n ParentRequired: (expects, child) => \n `New ${child} created standalone but requires parent of type ${expects}. Did you remember to create via use(${child})?`,\n\n UnexpectedParent: (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 parent <T extends typeof Model> (Expects: T, required: false): InstanceOf<T> | undefined;\nfunction parent <T extends typeof Model> (Expects: T, required?: true): InstanceOf<T>;\n \nfunction parent<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.ParentRequired(expected, child);\n }\n else if(!(value instanceof Expects))\n throw Oops.UnexpectedParent(expected, child, value);\n \n return { value };\n }\n );\n }\n \n export { parent }","import { control } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { apply } from './apply';\nimport { Parent } from './parent';\n\nexport const Oops = issues({\n BadArgument: (type) =>\n `Instruction \\`use\\` cannot accept argument type of ${type}.`,\n})\n\n/**\n * Create a placeholder for specified Model type.\n */\nfunction use <T extends Model> (): T | undefined;\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: () => 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 typeof Model>(\n input?: T | (() => InstanceOf<T>),\n argument?: (i: InstanceOf<T> | undefined) => void){\n\n return apply(\n function use(key){\n const { subject } = this;\n \n const onUpdate = (next: {} | undefined) => {\n this.state[key] = next;\n\n if(next){\n Parent.set(next, subject);\n control(next);\n }\n \n if(typeof argument == \"function\")\n argument(next as InstanceOf<T>);\n\n return true;\n }\n \n if(input){\n const value =\n Model.isTypeof(input)\n ? new input() :\n typeof input === \"object\"\n ? input :\n typeof input === \"function\"\n ? input()\n : null;\n\n if(value === null)\n throw Oops.BadArgument(typeof input);\n\n if(value)\n onUpdate(value);\n }\n \n return {\n set: onUpdate,\n recursive: true\n };\n }\n )\n}\n\nexport { use }","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 from 'react';\n\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Lookup } from '../register';\nimport { InstanceOf } from '../types';\n\nexport const LookupContext = React.createContext(new Lookup());\nexport const useLookup = () => React.useContext(LookupContext);\n\nexport const Oops = issues({\n NothingInContext: (name) =>\n `Couldn't find ${name} in context; did you forget to use a Provider?`\n})\n\nexport function useInContext<T extends typeof Model>(\n Type: T, arg?: boolean | string) {\n\n const instance = useLookup().get(Type);\n\n if (!instance && arg !== false)\n throw Oops.NothingInContext(Type.name);\n\n return typeof arg == \"string\" ?\n (instance as any)[arg] :\n instance as InstanceOf<T>;\n}\n","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 './useInContext';\n\nexport const Oops = issues({\n CantAttachGlobal: (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 this.state[key] = type.get();\n\n else {\n const { subject } = this;\n\n if(\"set\" in subject.constructor)\n throw Oops.CantAttachGlobal(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.update(key, instance);\n })\n }\n\n return {\n recursive: 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 { control } from '../controller';\nimport { Model, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { Class, InstanceOf } from '../types';\nimport { getOwnPropertyNames } from '../util';\nimport { use } from './hooks';\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 control(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 new Subscriber(instance, () => 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 { Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { Callback, RequestCallback } from '../types';\nimport { defineProperty } from '../util';\nimport { use } from './hooks';\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 = new Subscriber(target, () => update);\n const spy = sub.proxy;\n\n let value = compute.call(spy, spy);\n let update: RequestCallback | 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\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';\nimport { control } from '../controller';\n\nimport { Model, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { suspend } from '../suspense';\nimport { defineProperty } from '../util';\nimport { use } from './hooks';\nimport { useFrom } from './useFrom';\nimport { useInContext } from './useInContext';\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 () => useInContext(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 const parent = control(instance);\n const sub = new Subscriber(parent, () => refresh);\n\n if(typeof path == \"string\"){\n const source = sub.proxy;\n\n defineProperty(sub, \"proxy\", {\n get() {\n const value = source[path];\n\n if (value === undefined && expect)\n throw suspend(parent, path);\n\n return value;\n }\n });\n }\n\n return sub;\n });\n\n React.useLayoutEffect(local.commit, []);\n \n return local.proxy;\n}\n\nexport { useTap }","/* istanbul ignore file */\n\nimport { Controller } from '../controller';\nimport { CONTROL, Model } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { usePeerContext } from './tap';\nimport { useInContext } from './useInContext';\nimport { useModel } from './useModel';\nimport { useTap } from './useTap';\n\nclass MVC extends Model {\n static [CONTROL]: Controller;\n\n /** Attaches this controller to a component. */\n tap(): this;\n\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\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\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 - If false, may return undefined.\n */\n static get <T extends Class> (this: T, required?: true): InstanceOf<T>;\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> | 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 static get <T extends typeof MVC> (this: T, required?: boolean){\n return useInContext(this, required);\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\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\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\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> (this: T, callback?: (instance: InstanceOf<T>) => void){\n return useModel(this, [], callback);\n }\n\n static use <T extends Class, I extends InstanceOf<T>> (this: T, watch: Model.Field<I>[], callback?: (instance: I) => void): I;\n static use <T extends Class, I extends InstanceOf<T>> (this: T, callback?: (instance: I) => void): I;\n\n static use <T extends typeof MVC> (this: T, arg: any, callback?: (instance: InstanceOf<T>) => void){\n const instance = useModel(this, arg, callback);\n usePeerContext(instance.get); \n return instance;\n }\n\n static uses <T extends typeof MVC, I extends InstanceOf<T>, D extends Partial<I>> (\n this: T, data: D, only?: (keyof D & string)[]){\n\n return this.use(instance => {\n instance.import(data, only);\n })\n }\n\n static using <T extends typeof MVC, I extends InstanceOf<T>, D extends Partial<I>> (\n this: T, data: D, only?: (keyof D & string)[]){\n\n const instance = this.use();\n instance.import(data, only);\n return instance;\n }\n\n static meta <T extends Class>(this: T): T;\n\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\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\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 { useInContext } from './useInContext';\nimport { useTap } from './useTap';\n\nexport const Oops = issues({\n BadConsumerProps: () =>\n `Provider expects either a render function, 'get' or 'has' props.`\n})\n\ndeclare namespace Consumer {\n type HasProps<E extends Class> = {\n /** Type of controller to fetch from context. */\n of: E;\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 /** Type of controller to fetch from context. */\n of: E;\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 /** Type of controller to fetch from context. */\n of: E;\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, of: Control } = props as any;\n\n if(typeof children == \"function\")\n return children(useTap(Control));\n\n const callback = has || get;\n\n if(typeof callback == \"function\")\n callback(useInContext(Control, !!has));\n else\n throw Oops.BadConsumerProps()\n\n return null;\n}\n\nexport { Consumer };","import React from 'react';\n\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 { use } from './hooks';\nimport { getPending } from './tap';\nimport { LookupContext, useLookup } from './useInContext';\n\nexport const Oops = issues({\n NoProviderType: () =>\n `Provider 'of' prop must be Model, typeof Model or a collection of them.`\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 & { of: E, children: React.ReactNode | ((instance: I) => React.ReactNode) }\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 & { of: Collection<T>, children?: React.ReactNode | (() => React.ReactNode) }\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 const context = useNewContext(props.of);\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.NoProviderType();\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(key != \"of\" && key != \"children\")\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 new Subscriber(targets[0], () => 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 { issues } from '../issues';\nimport { Class, InstanceOf } from '../types';\nimport { MVC } from './mvc';\n\nexport const Oops = issues({\n GlobalDoesNotExist: (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 GlobalExists: (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<typeof Global, Global>();\n\nexport class Global extends MVC {\n static create<T extends Class>(\n this: T, ...args: any[]){\n\n const Type: typeof Global = this as any;\n\n if(Active.has(Type))\n throw Oops.GlobalExists(this.name);\n\n const instance = super.create(...args);\n\n Active.set(Type, 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.create();\n instance.import(updates);\n return instance.update();\n }\n\n static get(arg?: boolean | string){\n const instance = Active.get(this);\n\n if(!instance && arg !== false)\n throw Oops.GlobalDoesNotExist(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","Computed.flush","Computed.ensure","Computed.prepare","use"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/issues.ts","../src/util.ts","../src/dispatch.ts","../src/controller.ts","../src/subscriber.ts","../src/compute.ts","../src/model.ts","../src/instruction/apply.ts","../src/instruction/act.ts","../src/suspense.ts","../src/instruction/from.ts","../src/instruction/ref.ts","../src/instruction/set.ts","../src/instruction/parent.ts","../src/instruction/use.ts","../src/register.ts","../src/react/useInContext.ts","../src/react/tap.ts","../src/react/hooks.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 { issues } from './issues';\nimport { Model } from './model';\nimport { Callback } from './types';\n\nexport const Oops = issues({\n BadEffectCallback: () =>\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 define(\n target: {}, key: string | symbol, value: any){\n\n defineProperty(target, key, { value })\n}\n\nexport function defineLazy<T>(\n object: T, \n property: string | symbol, \n init: (this: T) => any){\n\n defineProperty(object, property, { \n configurable: true,\n get(){\n const value = init!.call(this);\n defineProperty(this, property, { value });\n return value;\n }\n });\n}\n\nexport function setAlias<T extends Function>(\n func: T, displayName: string){\n\n assign(func, { displayName });\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.BadEffectCallback()\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.BadEffectCallback()\n }\n}","export const UPDATE = new WeakMap<{}, readonly string[]>();\n\nexport function applyUpdate(\n subject: {}, keys: readonly string[]){\n\n UPDATE.set(subject, keys);\n\n return () => {\n setTimeout(() => {\n UPDATE.delete(subject);\n }, 0);\n }\n}","import * as Computed from './compute';\nimport { applyUpdate } from './dispatch';\nimport { Pending } from './instruction/apply';\nimport { issues } from './issues';\nimport { CONTROL, LOCAL, Model, Stateful } from './model';\nimport { Callback, RequestCallback } from './types';\nimport { define, defineProperty, getOwnPropertyDescriptor, setAlias } from './util';\n\nexport const Oops = issues({\n StrictUpdate: (expected) => \n `Strict update() did ${expected ? \"not \" : \"\"}find pending updates.`,\n\n NoChaining: () =>\n `Then called with undefined; update promise will never catch nor supports chaining.`\n});\n\ndeclare namespace Controller {\n type OnEvent<T = any> = (key: Model.Event<T>, source: Controller) => RequestCallback | void;\n \n // TODO: implement value type\n type OnValue<T = any, S = Model.Values<T>> = (this: T, value: any, state: S) => boolean | void;\n}\n\nconst READY = new WeakSet<Controller>();\n\nclass Controller<T extends Stateful = any> {\n public proxy: Model.Entries<T>;\n public state = {} as Model.Values<T>;\n public frame = new Set<string>();\n public waiting = new Set<RequestCallback>();\n public onDestroy = new Set<Callback>();\n\n protected followers = new Set<Controller.OnEvent>();\n\n constructor(public subject: T){\n this.proxy = Object.create(subject);\n }\n\n start(){\n for(const key in this.subject)\n this.manage(key as unknown as Model.Field<T>);\n\n this.emit([]);\n }\n\n stop(){\n this.followers.clear();\n this.onDestroy.forEach(x => x());\n }\n\n private manage(key: Model.Field<T>){\n const { proxy, state, subject } = this;\n const { value: entry } = getOwnPropertyDescriptor(subject, key)!;\n\n if(typeof entry == \"function\")\n return;\n\n let onGet: any;\n let onSet: any;\n let enumerable: any;\n\n const instruction = Pending.get(entry);\n\n if(instruction){\n Pending.delete(entry);\n delete subject[key];\n const desc = instruction.call(this, key, this);\n\n if(desc === false)\n return;\n\n if(typeof desc == \"object\"){\n if(\"value\" in desc)\n state[key] = desc.value as any;\n\n onSet = desc.set;\n onGet = desc.get;\n enumerable = desc.enumerable;\n }\n }\n else\n state[key] = entry;\n\n const set =\n onSet !== false\n ? this.ref(key, onSet)\n : undefined;\n\n function get(this: Stateful){\n const local = this[LOCAL];\n const value = state[key];\n\n if(local && !local.watch[key])\n local.watch[key] = true;\n\n return onGet ? onGet(value, local) : value;\n }\n\n setAlias(get, `tap ${key}`);\n\n defineProperty(subject, key, {\n enumerable,\n set,\n get: onGet\n ? () => onGet!(state[key])\n : () => state[key]\n });\n\n defineProperty(proxy, key, {\n enumerable,\n set,\n get\n });\n }\n\n ref(key: Model.Field<T>, handler?: Controller.OnValue<T>){\n const { state, subject } = this;\n\n return (value: any) => {\n if(state[key] == value)\n return;\n\n if(handler)\n switch(handler.call(subject, value, state)){\n case true:\n this.update(key);\n case false:\n return;\n }\n\n this.update(key, value);\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 emit(keys: readonly Model.Event<T>[]){\n const waiting = [ ...this.waiting ];\n\n this.waiting.clear();\n applyUpdate(this.subject, keys)();\n\n for(const callback of waiting)\n try {\n callback(keys)\n }\n catch(err){\n console.error(err);\n }\n }\n\n update(key: Model.Event<T>, value?: any){\n if(1 in arguments)\n this.state[key as Model.Field<T>] = value;\n\n if(this.frame.has(key))\n return;\n\n if(!this.frame.size)\n setTimeout(() => {\n Computed.flush(this);\n\n const keys = Object.freeze([ ...this.frame ]);\n\n this.frame.clear();\n this.emit(keys);\n }, 0);\n\n this.frame.add(key);\n\n for(const callback of this.followers){\n const event = callback(key, this);\n\n if(typeof event == \"function\")\n this.waiting.add(event);\n }\n }\n\n requestUpdate(): PromiseLike<readonly Model.Event<T>[] | false>;\n requestUpdate(strict: true): Promise<readonly Model.Event<T>[]>;\n requestUpdate(strict: false): Promise<false>;\n requestUpdate(strict: boolean): Promise<readonly Model.Event<T>[] | false>;\n requestUpdate(callback: (keys: readonly Model.Event<T>[]) => void): void;\n requestUpdate(arg?: boolean | RequestCallback): any {\n if(typeof arg == \"function\"){\n this.waiting.add(arg);\n return;\n }\n\n if(typeof arg == \"boolean\" && arg !== this.frame.size > 0)\n return Promise.reject(Oops.StrictUpdate(arg));\n\n return <PromiseLike<readonly Model.Event<T>[] | false>> {\n then: (callback) => {\n if(callback)\n if(this.frame.size)\n this.waiting.add(callback);\n else\n callback(false);\n else\n throw Oops.NoChaining();\n }\n }\n }\n}\n\ntype EnsureCallback<T extends Stateful> = (control: Controller<T>) => Callback | void;\n\nfunction control<T extends Stateful>(subject: T): Controller<T>;\nfunction control<T extends Stateful>(subject: T, cb: EnsureCallback<T>): Callback;\n\n/** Initialize controller even if not a stateful object. */\nfunction control<T extends {}>(subject: T): Controller<T & Stateful>;\n\nfunction control<T extends Stateful>(subject: T, cb?: EnsureCallback<T>){\n let control = subject[CONTROL];\n const ready = READY.has(control);\n\n if(!control){\n control = new Controller(subject as unknown as Stateful);\n define(subject, CONTROL, control);\n }\n\n if(!cb){\n if(!ready){\n READY.add(control);\n control.start();\n }\n\n return control;\n }\n\n if(!ready){\n let done: Callback | void;\n\n control.requestUpdate(() => {\n done = cb(control);\n });\n\n return () => done && done();\n }\n\n return cb(control);\n}\n\nexport { Controller, control }","import { control, Controller } from './controller';\nimport { applyUpdate } from './dispatch';\nimport { LOCAL, Model, Stateful } from './model';\nimport { Callback, RequestCallback } from './types';\nimport { create, define, defineProperty } from './util';\n\ntype Listener = {\n commit(): void;\n release(): void;\n}\n\nexport class Subscriber <T extends Stateful = any> {\n public proxy!: T;\n public release!: Callback;\n public commit: () => () => void;\n\n public active = false;\n public dependant = new Set<Listener>();\n public watch = {} as {\n [key in Model.Event<T>]: Callback | true;\n }\n\n constructor(\n target: Controller<T> | T,\n public onUpdate: Controller.OnEvent){\n\n const parent = target instanceof Controller\n ? target : control(target);\n\n const proxy = create(parent.proxy);\n\n let reset: Callback | undefined;\n\n define(proxy, LOCAL, this);\n defineProperty(this, \"proxy\", {\n configurable: true,\n get(){\n if(reset)\n setTimeout(reset, 0);\n\n return proxy;\n }\n })\n\n const release = parent.addListener(key => {\n const handler = this.watch[key];\n\n if(!handler || !this.active)\n return;\n\n if(typeof handler == \"function\")\n handler();\n\n const notify = this.onUpdate(key, parent);\n const getWhy: RequestCallback = (keys) => {\n reset = applyUpdate(proxy, keys.filter(k => k in this.watch));\n }\n\n if(notify){\n parent.requestUpdate(getWhy);\n parent.requestUpdate(notify);\n }\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 { Controller } from './controller';\nimport { issues } from './issues';\nimport { Subscriber } from './subscriber';\nimport { RequestCallback } from './types';\nimport { defineProperty, getOwnPropertyDescriptor, setAlias } from './util';\n\nexport const Oops = issues({\n ComputeFailed: (parent, property, initial) =>\n `An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} [${parent}.${property}].`,\n\n ComputedEarly: (property) => \n `Note: Computed values don't run until accessed, except when subscribed to. '${property}' getter may have run earlier than intended.`\n})\n\ntype GetterInfo = {\n key: string;\n parent: Controller;\n priority: number;\n}\n\nconst INIT = new WeakSet<Function>();\nconst INFO = new WeakMap<Function, GetterInfo>();\nconst USED = new WeakMap<Controller, Map<string, GetterInfo>>();\nconst KEYS = new WeakMap<Controller, RequestCallback[]>();\n\nexport function prepare(\n parent: Controller,\n key: string,\n source: () => Controller,\n setter: (on?: any) => any,\n getter?: (on: Controller, key: string) => any){\n\n let sub: Subscriber;\n\n const { state, subject } = parent;\n const info: GetterInfo = { key, parent, priority: 1 };\n\n let register = USED.get(parent)!;\n\n if(!register){\n register = new Map<string, GetterInfo>();\n USED.set(parent, register);\n }\n\n register.set(key, info);\n\n function compute(initial?: boolean){\n try {\n return setter.call(sub.proxy, sub.proxy);\n }\n catch(err){\n Oops.ComputeFailed(subject, key, !!initial).warn();\n throw err;\n }\n }\n\n function update(){\n let value;\n\n try {\n value = compute(false);\n }\n catch(e){\n console.error(e);\n }\n finally {\n if(state[key] !== value){\n parent.update(key, value);\n return value;\n }\n }\n }\n\n function defer(_key: string, from: Controller){\n let pending = KEYS.get(from);\n\n if(!pending)\n KEYS.set(from, pending = []);\n\n if(info.parent !== from)\n update();\n else {\n const after = pending.findIndex(peer => (\n info.priority > INFO.get(peer)!.priority\n ));\n\n pending.splice(after + 1, 0, update);\n }\n }\n\n function create(early?: boolean){\n sub = new Subscriber(source(), defer);\n\n defineProperty(state, key, {\n value: undefined,\n writable: true\n })\n\n try {\n return state[key] = compute(true);\n }\n catch(e){\n if(early)\n Oops.ComputedEarly(key).warn();\n\n throw e;\n }\n finally {\n sub.commit();\n\n for(const key in sub.watch){\n const peer = register.get(key);\n \n if(peer && peer.priority >= info.priority)\n info.priority = peer.priority + 1;\n }\n }\n }\n\n setAlias(update, `try ${key}`);\n setAlias(create, `new ${key}`);\n setAlias(setter, `run ${key}`);\n\n INIT.add(create);\n INFO.set(update, info);\n\n defineProperty(state, key, {\n get: create,\n configurable: true,\n enumerable: true\n })\n\n if(getter)\n return () => getter(parent, key);\n}\n\nexport function ensure(\n on: Controller, keys: string[]){\n\n type Initial = (early?: boolean) => void;\n\n for(const key of keys){\n const desc = getOwnPropertyDescriptor(on.state, key);\n const getter = desc && desc.get;\n \n if(INIT.has(getter!))\n (getter as Initial)(true);\n }\n}\n\nexport function flush(on: Controller){\n const handled = on.frame;\n const pending = KEYS.get(on);\n\n if(!pending)\n return;\n\n while(pending.length){\n const why = [ ...handled ];\n const compute = pending.shift()!;\n const { key } = INFO.get(compute)!;\n\n if(!handled.has(key))\n compute(why);\n }\n\n KEYS.delete(on);\n}","import * as Computed from './compute';\nimport { control, Controller } from './controller';\nimport { UPDATE } from './dispatch';\nimport { Subscriber } from './subscriber';\nimport { Callback, Class, InstanceOf, RequestCallback } from './types';\nimport { createEffect, define, defineLazy, getOwnPropertyNames } from './util';\n\nexport const CONTROL = Symbol(\"CONTROL\");\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]?: 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 /**\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 get: this;\n\n /**\n * Circular reference to `this` controller.\n * \n * Shortcut is mainly to update values, while having destructured already.\n */\n set: this;\n}\n\nclass Model {\n static [CONTROL]: Controller;\n static [WHY]: readonly string[];\n\n constructor(){\n define(this, CONTROL, new Controller(this));\n define(this, \"get\", this);\n define(this, \"set\", this);\n }\n\n get [STATE]() {\n return this[CONTROL].state as this;\n }\n\n get [WHY](){\n return UPDATE.get(this);\n }\n\n on <P = Model.Event<this>> (event: (key: P) => RequestCallback | void): Callback;\n\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\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) => RequestCallback | void),\n handler?: Function,\n squash?: boolean,\n once?: boolean){\n\n return control(this, control => {\n if(typeof select == \"function\")\n return control.addListener(select);\n\n const keys = \n typeof select == \"string\" ? [select] :\n !select.length ? getOwnPropertyNames(control.state) :\n select;\n\n Computed.ensure(control, keys);\n\n const callback: RequestCallback = squash\n ? handler!.bind(this)\n : frame => frame\n .filter(k => keys.includes(k))\n .forEach(k => handler!.call(this, control.state[k as Model.Field<this>], k))\n\n const trigger: RequestCallback = once\n ? frame => { remove(); callback(frame) }\n : callback;\n\n const remove = control.addListener(key => {\n if(keys.includes(key))\n return trigger;\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\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[]): Promise<P[]>;\n\n once <P extends Model.Event<this>> (\n select: P | P[],\n callback?: Model.OnUpdate<any, any>,\n squash?: boolean){\n\n if(callback)\n return this.on(select, callback, squash, true);\n\n return new Promise<P[]>(resolve => {\n this.on(select, resolve, true, true);\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 effect(callback: Model.Effect<this>, select?: Model.Event<this>[]){\n const effect = createEffect(callback);\n\n return control(this, control => {\n if(!select){\n const sub = new Subscriber(control, () => invoke);\n const invoke = () => {\n const x = sub.proxy;\n effect.call(x, x);\n }\n\n invoke();\n\n return sub.commit();\n }\n\n const invoke = () => {\n effect.call(this.get, this.get);\n }\n\n invoke();\n\n if(!select.length){\n control.onDestroy.add(invoke);\n return () => {\n control.onDestroy.delete(invoke);\n }\n }\n\n return control.addListener(key => {\n 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 } = control(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 } = control(this);\n const output = {} as Model.Values<this, P>;\n \n if(!subset)\n subset = getOwnPropertyNames(state) as P[];\n\n for(const key of subset)\n output[key] = state[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\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 = control(this);\n\n if(typeof arg == \"string\"){\n target.update(arg);\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 return target.requestUpdate(arg);\n }\n\n /** \n * Mark this instance for garbage-collection and send `willDestroy` event to all listeners.\n */\n destroy(){\n control(this).stop();\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: any[]): InstanceOf<T> {\n\n const instance = \n new (this as any)(...args);\n\n control(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 }\n\ndefineLazy(Model, CONTROL, function(){\n return new Controller(this);\n})","import { Controller } from '../controller';\nimport { CONTROL, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { defineProperty } from '../util';\nimport { Instruction } from './types';\n\nexport const Pending = new Map<symbol, Instruction.Runner<any>>();\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 let output = fn.call(this, key, this);\n\n if(typeof output == \"function\")\n return { get: output };\n\n if(typeof output !== \"object\")\n return output || undefined;\n\n if(\"explicit\" in output && output.explicit){\n defineProperty(this.subject, key, output);\n return false;\n }\n\n if(\"recursive\" in output)\n output = {\n ...output,\n get: recursive(this, key)\n }\n\n return output;\n }\n\n Pending.set(placeholder, setup);\n\n return placeholder as unknown as T;\n}\n\nfunction recursive(source: Controller, key: string){\n const context = new WeakMap<Subscriber, any>();\n\n const subscribe = (parent: Subscriber) => {\n let child: Subscriber | undefined;\n\n const init = () => {\n if(child){\n child.release();\n parent.dependant.delete(child);\n context.set(parent, undefined);\n child = undefined;\n }\n\n const value = source.state[key];\n\n if(value && CONTROL in value){\n child = new Subscriber(value as Stateful, parent.onUpdate);\n \n if(parent.active)\n child.commit();\n \n parent.dependant.add(child);\n context.set(parent, child.proxy);\n }\n }\n\n init();\n parent.watch[key] = init;\n }\n\n return (value: any, local: Subscriber | undefined) => {\n if(!local)\n return value;\n\n if(!context.has(local))\n subscribe(local);\n\n return context.get(local);\n }\n\n}\n\nexport { apply }","import { issues } from '../issues';\nimport { defineProperty, setAlias } from '../util';\nimport { apply } from './apply';\n\ntype Async<T = any> = (...args: any[]) => Promise<T>;\n\nexport const Oops = issues({\n DuplicateAction: (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 = (...args: any[]) => {\n if(pending)\n return Promise.reject(\n Oops.DuplicateAction(key)\n )\n\n pending = true;\n this.update(key);\n\n return new Promise(res => {\n res(task.apply(this.subject, args));\n }).finally(() => {\n pending = false;\n this.update(key);\n })\n }\n\n this.state[key] = undefined;\n\n setAlias(invoke, `run ${key}`);\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 { issues } from './issues';\n\nexport const Oops = issues({\n ValueNotReady: (model, key) =>\n `Value ${model}.${key} value is not yet available.`\n})\n\n/**\n * Get value, suspend instead if undefined.\n * \n * Throws suspense promise also interpretable as an error.\n * React could handle it but other contexts probably not.\n */\nexport function pendingValue<T = any>(\n via: Controller, key: string): T {\n\n const value = via.state[key];\n\n if(value === undefined)\n throw suspend(via, key);\n\n return value;\n}\n\nexport function pendingFactory(\n via: Controller,\n key: string,\n fn: (key: string, subject: unknown) => any){\n\n const { subject, state } = via;\n let waiting: Promise<any> | undefined;\n let error: any;\n\n return () => {\n if(waiting)\n throw waiting;\n\n if(error)\n throw error;\n\n if(key in state)\n return state[key];\n\n let output;\n\n try {\n output = fn.call(subject, key, subject);\n }\n catch(err){\n throw error = err;\n }\n\n if(output instanceof Promise){\n const issue =\n Oops.ValueNotReady(subject, key);\n\n output\n .catch(err => error = err)\n .then(out => state[key] = out)\n .finally(() => waiting = undefined)\n\n throw waiting = Object.assign(output, {\n message: issue.message,\n stack: issue.stack\n });\n }\n else {\n return state[key] = output;\n }\n }\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.ValueNotReady(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[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}","import * as Computed from '../compute';\nimport { control, Controller } from '../controller';\nimport { issues } from '../issues';\nimport { Stateful } from '../model';\nimport { pendingValue } from '../suspense';\nimport { apply } from './apply';\n\nexport const Oops = issues({\n BadComputedSource: (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\ndeclare namespace from {\n type Function<T, O=any> = (this: O, on: O) => T;\n type Factory<T, O=any> = (key: string) => Function<T, O>;\n type Getter = (controller: Controller, key: string) => any;\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 from <R, T> (source: T, compute: (this: T, on: T) => R, suspend: true): Exclude<R, undefined>;\nfunction from <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 from <R, T> (compute: (property: string) => (this: T, state: T) => R, suspend: true): Exclude<R, undefined>;\nfunction from <R, T> (compute: (property: string) => (this: T, state: T) => R, suspend?: boolean): R;\n\nfunction from<R, T>(\n source: from.Factory<T> | Stateful,\n setter?: from.Function<T> | boolean,\n arg?: boolean): R {\n\n return apply(\n function from(key){\n const { subject } = this;\n\n let getSource: () => Controller;\n let getter: from.Getter | undefined;\n\n if(arg === true || setter === true)\n getter = pendingValue;\n\n if(typeof setter == \"boolean\")\n setter = undefined;\n\n // Easy mistake, using a peer, will always be unresolved.\n if(typeof source == \"symbol\")\n throw Oops.PeerNotAllowed(subject, key);\n\n // replace source controller in-case it is different\n if(typeof source == \"object\")\n getSource = () => control(source);\n\n // specifically an arrow function (getter factory)\n else if(!source.prototype){\n setter = source.call(subject, key);\n getSource = () => this;\n }\n\n // Regular function is too ambiguous so not allowed.\n else\n throw Oops.BadComputedSource(subject, key, source);\n\n return Computed.prepare(this, key, getSource, setter!, getter);\n }\n )\n}\n\nexport { from }","import { control, Controller } from '../controller';\nimport { Model } from '../model';\nimport { createValueEffect, defineLazy, 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> = { [P in Model.Field<T>]: Model.Ref<T[P]> };\n}\n\n/**\n * Creates an object with references to all managed values.\n * Each property will 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 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>(arg?: ref.Callback<T> | Model){\n return apply(\n function ref(key){\n let value: ref.Object | ref.Proxy<any> = {};\n\n if(typeof arg == \"object\"){\n const source = control(arg);\n \n for(const key in source.state)\n defineLazy(value, key, createRef.bind(source, key));\n }\n else \n value = createRef.call(this, key, arg);\n\n return { value, explicit: true };\n }\n )\n}\n\nexport { ref }\n\nfunction createRef(\n this: Controller,\n key: string,\n cb?: ref.Callback<any>){\n\n const refObjectFunction =\n this.ref(key, cb && createValueEffect(cb));\n\n defineProperty(refObjectFunction, \"current\", {\n set: refObjectFunction,\n get: () => this.state[key]\n })\n\n return refObjectFunction as ref.Object;\n}","import { apply } from './apply';\nimport { issues } from '../issues';\nimport { pendingFactory, pendingValue } from '../suspense';\nimport { createValueEffect } from '../util';\n\nexport const Oops = issues({\n NonOptional: (Parent, key) => \n `Property ${Parent}.${key} is marked as required.`,\n\n BadFactory: () =>\n `Set instruction can only accept a factory or undefined.`,\n\n FactoryFailed: (model, key) =>\n `Generating initial value for ${model}.${key} failed.`\n})\n\ndeclare namespace set {\n type Factory<T, S = unknown> = (this: S, key: string, subject: S) => T;\n\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\n /**\n * Set property with starting value `undefined`.\n * \n * If required and accessed while still empty, React Suspense will be thrown.\n * Property will reject any assignment of undefined.\n * \n * @param value - Starting value of host property (undefined).\n * @param required - Property will suspend callee if undefined at time of access.\n */\nfunction set <T> (value: undefined, required: false): T | undefined;\nfunction set <T> (value: undefined, required?: boolean): T;\n \nfunction set <T> (value: undefined, onUpdate: set.Callback<T>): T | undefined;\nfunction set <T, S> (value: undefined, onUpdate: set.Callback<T, S>): T | undefined;\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 set <T>(factory: set.Factory<Promise<T>>, required: false): T | undefined;\nfunction set <T, S>(factory: set.Factory<Promise<T>, S>, required: false): T | undefined;\n \nfunction set <T>(factory: set.Factory<Promise<T>>, required?: boolean): T;\nfunction set <T, S>(factory: set.Factory<Promise<T>, S>, required?: boolean): T;\n \nfunction set <T> (value: set.Factory<Promise<T>>, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: set.Factory<Promise<T>, S>, onUpdate: set.Callback<T, S>): 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 set <T>(factory: set.Factory<T>, required: false): T | undefined;\nfunction set <T, S>(factory: set.Factory<T, S>, required: false): T | undefined;\n \nfunction set <T>(factory: set.Factory<T>, required?: boolean): T;\nfunction set <T, S>(factory: set.Factory<T, S>, required?: boolean): T;\n \nfunction set <T> (value: set.Factory<T>, onUpdate: set.Callback<T>): T;\nfunction set <T, S> (value: set.Factory<T, S>, onUpdate: set.Callback<T, S>): T;\n\nfunction set(\n factory?: (key: string, subject: unknown) => any,\n argument?: set.Callback<any> | boolean): any { \n\n return apply(\n function set(key){\n let set;\n let get: () => void;\n\n const required =\n argument === true || argument === undefined;\n\n if(factory === undefined)\n get = () => pendingValue(this, key);\n\n else if(typeof factory !== \"function\")\n throw Oops.BadFactory();\n\n else {\n get = pendingFactory(this, key, factory);\n\n if(required)\n try {\n get();\n }\n catch(err){\n if(err instanceof Promise)\n void 0;\n else {\n Oops.FactoryFailed(this.subject, key).warn();\n throw err;\n }\n }\n }\n\n if(typeof argument == \"function\")\n set = createValueEffect(argument);\n else\n set = (value: any) => {\n if(value === undefined && required)\n throw Oops.NonOptional(this.subject, key);\n }\n \n return { set, get }\n }\n )\n}\n\nexport { set }","import { issues } from '../issues';\nimport { Model } from '../model';\nimport { InstanceOf } from '../types';\nimport { apply } from './apply';\n\nexport const Parent = new WeakMap<{}, {}>();\n\nexport const Oops = issues({\n ParentRequired: (expects, child) => \n `New ${child} created standalone but requires parent of type ${expects}. Did you remember to create via use(${child})?`,\n\n UnexpectedParent: (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 parent <T extends typeof Model> (Expects: T, required: false): InstanceOf<T> | undefined;\nfunction parent <T extends typeof Model> (Expects: T, required?: true): InstanceOf<T>;\n \nfunction parent<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.ParentRequired(expected, child);\n }\n else if(!(value instanceof Expects))\n throw Oops.UnexpectedParent(expected, child, value);\n \n return { value };\n }\n );\n }\n \n export { parent }","import { control } from '../controller';\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { apply } from './apply';\nimport { Parent } from './parent';\n\nexport const Oops = issues({\n BadArgument: (type) =>\n `Instruction \\`use\\` cannot accept argument type of ${type}.`,\n})\n\n/**\n * Create a placeholder for specified Model type.\n */\nfunction use <T extends Model> (): T | undefined;\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: () => 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 typeof Model>(\n input?: T | (() => InstanceOf<T>),\n argument?: (i: InstanceOf<T> | undefined) => void){\n\n return apply(\n function use(key){\n const { subject } = this;\n \n const onUpdate = (next: {} | undefined) => {\n this.state[key] = next;\n\n if(next){\n Parent.set(next, subject);\n control(next);\n }\n \n if(typeof argument == \"function\")\n argument(next as InstanceOf<T>);\n\n return true;\n }\n \n if(input){\n const value =\n Model.isTypeof(input)\n ? new input() :\n typeof input === \"object\"\n ? input :\n typeof input === \"function\"\n ? input()\n : null;\n\n if(value === null)\n throw Oops.BadArgument(typeof input);\n\n if(value)\n onUpdate(value);\n }\n \n return {\n set: onUpdate,\n recursive: true\n };\n }\n )\n}\n\nexport { use }","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 from 'react';\n\nimport { issues } from '../issues';\nimport { Model } from '../model';\nimport { Lookup } from '../register';\nimport { InstanceOf } from '../types';\n\nexport const LookupContext = React.createContext(new Lookup());\nexport const useLookup = () => React.useContext(LookupContext);\n\nexport const Oops = issues({\n NothingInContext: (name) =>\n `Couldn't find ${name} in context; did you forget to use a Provider?`\n})\n\nexport function useInContext<T extends typeof Model>(\n Type: T, arg?: boolean | string) {\n\n const instance = useLookup().get(Type);\n\n if (!instance && arg !== false)\n throw Oops.NothingInContext(Type.name);\n\n return typeof arg == \"string\" ?\n (instance as any)[arg] :\n instance as InstanceOf<T>;\n}\n","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 './useInContext';\n\nexport const Oops = issues({\n CantAttachGlobal: (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 this.state[key] = type.get();\n\n else {\n const { subject } = this;\n\n if(\"set\" in subject.constructor)\n throw Oops.CantAttachGlobal(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.update(key, instance);\n })\n }\n\n return {\n recursive: 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 { control } from '../controller';\nimport { Model, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { Class, InstanceOf } from '../types';\nimport { getOwnPropertyNames } from '../util';\nimport { use } from './hooks';\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 control(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 new Subscriber(instance, () => 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 { Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { Callback, RequestCallback } from '../types';\nimport { defineProperty } from '../util';\nimport { use } from './hooks';\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 = new Subscriber(target, () => update);\n const spy = sub.proxy;\n\n let value = compute.call(spy, spy);\n let update: RequestCallback | 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\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';\nimport { control } from '../controller';\n\nimport { Model, Stateful } from '../model';\nimport { Subscriber } from '../subscriber';\nimport { suspend } from '../suspense';\nimport { defineProperty } from '../util';\nimport { use } from './hooks';\nimport { useFrom } from './useFrom';\nimport { useInContext } from './useInContext';\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 () => useInContext(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 const parent = control(instance);\n const sub = new Subscriber(parent, () => refresh);\n\n if(typeof path == \"string\"){\n const source = sub.proxy;\n\n defineProperty(sub, \"proxy\", {\n get() {\n const value = source[path];\n\n if (value === undefined && expect)\n throw suspend(parent, path);\n\n return value;\n }\n });\n }\n\n return sub;\n });\n\n React.useLayoutEffect(local.commit, []);\n \n return local.proxy;\n}\n\nexport { useTap }","/* istanbul ignore file */\nimport React from 'react';\n\nimport { control, Controller } from '../controller';\nimport { CONTROL, Model } from '../model';\nimport { Class, InstanceOf } from '../types';\nimport { getOwnPropertyNames } from '../util';\nimport { usePeerContext } from './tap';\nimport { useInContext } from './useInContext';\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\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\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\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 - If false, may return undefined.\n */\n static get <T extends Class> (this: T, required?: true): InstanceOf<T>;\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> | 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 static get <T extends typeof MVC> (this: T, required?: boolean){\n return useInContext(this, required);\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\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\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\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 return React.useMemo(() => {\n const instance: I = new this();\n \n control(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\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.get); \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\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\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\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 { useInContext } from './useInContext';\nimport { useTap } from './useTap';\n\nexport const Oops = issues({\n BadConsumerProps: () =>\n `Provider expects either a render function, 'get' or 'has' props.`\n})\n\ndeclare namespace Consumer {\n type HasProps<E extends Class> = {\n /** Type of controller to fetch from context. */\n of: E;\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 /** Type of controller to fetch from context. */\n of: E;\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 /** Type of controller to fetch from context. */\n of: E;\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, of: Control } = props as any;\n\n if(typeof children == \"function\")\n return children(useTap(Control));\n\n const callback = has || get;\n\n if(typeof callback == \"function\")\n callback(useInContext(Control, !!has));\n else\n throw Oops.BadConsumerProps()\n\n return null;\n}\n\nexport { Consumer };","import React from 'react';\n\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 { use } from './hooks';\nimport { getPending } from './tap';\nimport { LookupContext, useLookup } from './useInContext';\n\nexport const Oops = issues({\n NoProviderType: () =>\n `Provider 'of' prop must be Model, typeof Model or a collection of them.`\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 & { of: E, children: React.ReactNode | ((instance: I) => React.ReactNode) }\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 & { of: Collection<T>, children?: React.ReactNode | (() => React.ReactNode) }\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 const context = useNewContext(props.of);\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.NoProviderType();\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(key != \"of\" && key != \"children\")\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 new Subscriber(targets[0], () => 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 { issues } from '../issues';\nimport { Class, InstanceOf } from '../types';\nimport { MVC } from './mvc';\n\nexport const Oops = issues({\n GlobalDoesNotExist: (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 GlobalExists: (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<typeof Global, Global>();\n\nexport class Global extends MVC {\n static create<T extends Class>(\n this: T, ...args: any[]){\n\n const Type: typeof Global = this as any;\n\n if(Active.has(Type))\n throw Oops.GlobalExists(this.name);\n\n const instance = super.create(...args);\n\n Active.set(Type, 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.create();\n instance.import(updates);\n return instance.update();\n }\n\n static get(arg?: boolean | string){\n const instance = Active.get(this);\n\n if(!instance && arg !== false)\n throw Oops.GlobalDoesNotExist(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","Computed.flush","Computed.ensure","Computed.prepare","use"],"mappings":"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"}
|