{ "version": 3, "sources": ["../../../app/app_context.ts", "../../../utils/asserts.ts", "../../../data/react_context.ts", "../../../utils/disposable.ts", "../../../utils/events/signal_impl.ts", "../../../utils/events/dispatcher.ts", "../../../data/data_provider.ts", "../../../app/routing_context.ts"], "sourcesContent": ["import { createContext } from \"preact\";\nimport { AssetManager } from \"../asset_manager/asset_manager\";\nimport { AppErrorType } from \"./app_error\";\n\nexport interface AppContext {\n assetManager: AssetManager;\n navigate(path: string): void;\n reportAppError(errorType: AppErrorType): void;\n}\n\nexport const AppContext = createContext(null);\n", "export function assert(condition: T, message?: string): asserts condition {\n if (!condition) {\n throw new Error(\"Assert failure\" + (message ? \": \" + message : \".\"));\n }\n}\n", "import { createContext } from \"preact\";\nimport { DataProvider } from \"./data_provider\";\n\nexport interface DataContext {\n provider: DataProvider;\n}\n\nexport const DataContext = createContext(undefined);\n", "export interface IDisposableHandler {\n callOnDispose(callback: () => void): void;\n readonly isDisposed: boolean;\n}\n\nexport interface IDisposable {\n dispose(): void;\n}\n\nexport class Disposable implements IDisposable, IDisposableHandler {\n private callbacks: Array<() => void> = [];\n private isDisposed_ = false;\n\n callOnDispose(callback: () => void) {\n this.callbacks.push(callback);\n }\n\n dispose() {\n this.isDisposed_ = true;\n for (const cb of this.callbacks) {\n // handle errors?\n cb();\n }\n }\n\n get isDisposed() {\n return this.isDisposed_;\n }\n}\n", "import { assert } from \"../asserts\";\nimport { Disposable, IDisposableHandler } from \"../disposable\";\nimport { CachingSignal } from \"./caching_signal\";\nimport { Dispatcher } from \"./dispatcher\";\nimport { Signal, SignalCallback } from \"./signal\";\n\nexport class SignalImpl implements Signal, CachingSignal {\n private readonly listeners: Set> = new Set();\n\n lastValue: undefined | T;\n hasValue: boolean = false;\n\n constructor(readonly dispatcher: Dispatcher, private readonly caching = false) {}\n\n attach(callback: (data: T) => void, disposable?: IDisposableHandler) {\n if (disposable && disposable.isDisposed) {\n return;\n }\n\n const listener = (data: T) => {\n callback(data);\n };\n\n this.listeners.add(listener);\n if (disposable) {\n disposable.callOnDispose(() => {\n this.listeners.delete(listener);\n });\n }\n }\n\n attachOnce(callback: (data: T) => void) {\n const disposable = new Disposable();\n this.attach((data) => {\n disposable.dispose();\n callback(data);\n });\n }\n\n attachImmediate(callback: (data: T) => void, disposable?: IDisposableHandler) {\n assert(this.caching);\n\n if (this.hasValue) {\n callback(this.lastValue!);\n }\n\n this.attach(callback, disposable);\n }\n\n next(): Promise {\n return new Promise((resolve) => {\n this.attachOnce((value) => resolve(value));\n });\n }\n\n async value(): Promise {\n if (this.hasValue) return this.lastValue!;\n return await this.next();\n }\n\n // todo: fix up type\n fire(data?: T) {\n if (this.caching) {\n this.hasValue = true;\n this.lastValue = data;\n }\n\n const listeners = Array.from(this.listeners);\n setTimeout(() => {\n for (const listener of listeners) {\n listener(data!);\n }\n });\n }\n}\n\nexport function isSignalImpl(signal: Signal): signal is SignalImpl {\n if (signal instanceof SignalImpl) {\n return true;\n }\n\n return false;\n}\n", "import { IDisposableHandler } from \"../disposable\";\nimport { CachingSignal } from \"./caching_signal\";\nimport { Signal } from \"./signal\";\nimport { isSignalImpl, SignalImpl } from \"./signal_impl\";\n\nexport class Dispatcher {\n constructor(private readonly disposable: IDisposableHandler | null = null) {}\n\n signal(): Signal {\n const signal = new SignalImpl(this);\n return signal;\n }\n\n cachingSignal(): CachingSignal {\n const signal = new SignalImpl(this, true);\n return signal;\n }\n\n emit(signal: Signal): void;\n emit(signal: Signal, data: T): void;\n emit(signal: Signal, data?: T) {\n if (this.disposable && this.disposable.isDisposed) return;\n\n if (!isSignalImpl(signal) || signal.dispatcher !== this) {\n throw new Error(\"Signal not owned by this dispatcher.\");\n }\n\n signal.fire(data);\n }\n}\n", "import { CachingSignal } from \"../utils/events/caching_signal\";\n\nexport const NON_EXISTING = Symbol();\n\nexport interface DataProvider {\n get(id: string[]): DataProviderQueryResult;\n}\n\nexport interface DataProviderQueryResult {\n onUpdate: CachingSignal;\n}\n", "import { createContext } from \"preact\";\n\nexport interface RoutingContext {\n push(path: string, state?: any): void;\n replace(path: string, state?: any): void;\n}\n\nclass DefaultRoutingContextImpl implements RoutingContext {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n push() {}\n replace() {}\n}\n\nexport const RoutingContext = createContext(new DefaultRoutingContextImpl());\n"], "mappings": "4CAUO,GAAM,GAAa,EAAiC,MCVpD,WAAmB,EAAc,EAAqC,CAC3E,GAAI,CAAC,EACH,KAAM,IAAI,OAAM,iBAAoB,GAAU,KAAO,EAAU,MCK5D,GAAM,GAAc,EAAuC,QCE3D,WAA4D,CACzD,UAA+B,GAC/B,YAAc,GAEtB,cAAc,EAAsB,CAClC,KAAK,UAAU,KAAK,GAGtB,SAAU,CACR,KAAK,YAAc,GACnB,OAAW,KAAM,MAAK,UAEpB,OAIA,aAAa,CACf,MAAO,MAAK,cCpBT,WAA2D,CAMhE,YAAqB,EAAyC,EAAU,GAAO,CAA1D,kBAAyC,eAL7C,UAAoC,GAAI,KAEzD,UACA,SAAoB,GAIpB,OAAO,EAA6B,EAAiC,CACnE,GAAI,GAAc,EAAW,WAC3B,OAGF,GAAM,GAAW,AAAC,GAAY,CAC5B,EAAS,IAGX,KAAK,UAAU,IAAI,GACf,GACF,EAAW,cAAc,IAAM,CAC7B,KAAK,UAAU,OAAO,KAK5B,WAAW,EAA6B,CACtC,GAAM,GAAa,GAAI,GACvB,KAAK,OAAO,AAAC,GAAS,CACpB,EAAW,UACX,EAAS,KAIb,gBAAgB,EAA6B,EAAiC,CAC5E,EAAO,KAAK,SAER,KAAK,UACP,EAAS,KAAK,WAGhB,KAAK,OAAO,EAAU,GAGxB,MAAmB,CACjB,MAAO,IAAI,SAAQ,AAAC,GAAY,CAC9B,KAAK,WAAW,AAAC,GAAU,EAAQ,WAIjC,QAAoB,CACxB,MAAI,MAAK,SAAiB,KAAK,UACxB,KAAM,MAAK,OAIpB,KAAK,EAAU,CACb,AAAI,KAAK,SACP,MAAK,SAAW,GAChB,KAAK,UAAY,GAGnB,GAAM,GAAY,MAAM,KAAK,KAAK,WAClC,WAAW,IAAM,CACf,OAAW,KAAY,GACrB,EAAS,OAMV,WAAyB,EAA4C,CAC1E,MAAI,aAAkB,GCxEjB,WAAiB,CACtB,YAA6B,EAAwC,KAAM,CAA9C,kBAE7B,QAA8B,CAE5B,MADe,IAAI,GAAc,MAInC,eAA4C,CAE1C,MADe,IAAI,GAAc,KAAM,IAMzC,KAAQ,EAAmB,EAAU,CACnC,GAAI,OAAK,YAAc,KAAK,WAAW,YAEvC,IAAI,CAAC,EAAa,IAAW,EAAO,aAAe,KACjD,KAAM,IAAI,OAAM,wCAGlB,EAAO,KAAK,MCzBT,GAAM,GAAe,SCK5B,WAA0D,CAExD,MAAO,EACP,SAAU,IAGC,EAAiB,EAA8B,GAAI", "names": [] }