@tko/computed
Advanced tools
| # @tko/computed | ||
| Computed observables and pure computeds | ||
| Part of [TKO](https://tko.io) — modern Knockout.js. [Docs](https://tko.io) · [Source](https://github.com/knockout/tko/tree/main/packages/computed) |
+21
-23
@@ -1,2 +0,2 @@ | ||
| // @tko/computed 🥊 4.0.1 ESM | ||
| // @tko/computed 🥊 4.1.0 ESM | ||
| "use strict"; | ||
@@ -6,6 +6,4 @@ import { | ||
| arrayForEach, | ||
| createSymbolOrString, | ||
| domNodeIsAttachedToDocument, | ||
| extend, | ||
| options, | ||
| hasOwnProperty, | ||
@@ -25,3 +23,3 @@ objectForEach, | ||
| } from "@tko/observable"; | ||
| const computedState = createSymbolOrString("_state"); | ||
| const computedState = /* @__PURE__ */ Symbol("_state"); | ||
| const DISPOSED_STATE = { | ||
@@ -38,15 +36,15 @@ dependencyTracking: null, | ||
| }; | ||
| export function computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, options2) { | ||
| export function computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, options) { | ||
| if (typeof evaluatorFunctionOrOptions === "object") { | ||
| options2 = evaluatorFunctionOrOptions; | ||
| options = evaluatorFunctionOrOptions; | ||
| } else { | ||
| options2 = options2 || {}; | ||
| options = options || {}; | ||
| if (evaluatorFunctionOrOptions) { | ||
| options2.read = evaluatorFunctionOrOptions; | ||
| options.read = evaluatorFunctionOrOptions; | ||
| } | ||
| } | ||
| if (typeof options2?.read !== "function") { | ||
| if (typeof options?.read !== "function") { | ||
| throw Error("Pass a function that returns the value of the computed"); | ||
| } | ||
| const writeFunction = options2.write; | ||
| const writeFunction = options.write; | ||
| const state = { | ||
@@ -61,6 +59,6 @@ latestValue: void 0, | ||
| isSleeping: false, | ||
| readFunction: options2.read, | ||
| evaluatorFunctionTarget: evaluatorFunctionTarget || options2.owner, | ||
| disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options2.disposeWhen, | ||
| readFunction: options.read, | ||
| evaluatorFunctionTarget: evaluatorFunctionTarget || options.owner, | ||
| disposeWhenNodeIsRemoved: options.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options.disposeWhen, | ||
| domNodeDisposalCallback: null, | ||
@@ -96,7 +94,7 @@ dependencyTracking: {}, | ||
| Object.setPrototypeOf(computedObservable, computed.fn); | ||
| if (options2.pure) { | ||
| if (options.pure) { | ||
| state.pure = true; | ||
| state.isSleeping = true; | ||
| extend(computedObservable, pureComputedOverrides); | ||
| } else if (options2.deferEvaluation) { | ||
| } else if (options.deferEvaluation) { | ||
| extend(computedObservable, deferEvaluationOverrides); | ||
@@ -108,3 +106,3 @@ } | ||
| if (koOptions.debug) { | ||
| computedObservable._options = options2; | ||
| computedObservable._options = options; | ||
| } | ||
@@ -117,3 +115,3 @@ if (state.disposeWhenNodeIsRemoved) { | ||
| } | ||
| if (!state.isSleeping && !options2.deferEvaluation) { | ||
| if (!state.isSleeping && !options.deferEvaluation) { | ||
| ; | ||
@@ -298,3 +296,3 @@ computedObservable.evaluateImmediate(); | ||
| state.latestValue = newValue; | ||
| if (options.debug) { | ||
| if (koOptions.debug) { | ||
| this._latestValue = newValue; | ||
@@ -460,7 +458,7 @@ } | ||
| } else { | ||
| let options2 = evaluatorFunctionOrOptions; | ||
| options2 = extend({}, options2); | ||
| options2.pure = true; | ||
| return computed(options2, evaluatorFunctionTarget); | ||
| let options = evaluatorFunctionOrOptions; | ||
| options = extend({}, options); | ||
| options.pure = true; | ||
| return computed(options, evaluatorFunctionTarget); | ||
| } | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../src/computed.ts"], | ||
| "sourcesContent": ["//\n// Computed Observable Values\n//\n// (before tko, `computed` was also known as `dependentObservable`)\n//\nimport {\n addDisposeCallback,\n arrayForEach,\n createSymbolOrString,\n domNodeIsAttachedToDocument,\n extend,\n options,\n hasOwnProperty,\n objectForEach,\n options as koOptions,\n removeDisposeCallback,\n safeSetTimeout\n} from '@tko/utils'\n\nimport {\n dependencyDetection,\n extenders,\n valuesArePrimitiveAndEqual,\n observable,\n subscribable,\n LATEST_VALUE\n} from '@tko/observable'\n\nimport type { Observable, Subscribable } from '@tko/observable'\n\nconst computedState: symbol = createSymbolOrString('_state')\nconst DISPOSED_STATE = {\n dependencyTracking: null,\n dependenciesCount: 0,\n isDisposed: true,\n isStale: false,\n isDirty: false,\n isSleeping: false,\n disposeWhenNodeIsRemoved: null,\n readFunction: null,\n _options: null\n}\n\nexport interface Computed<T = any> extends ComputedFunctions<T> {\n (): T\n (value: T): this\n}\n\nexport interface ComputedFunctions<T = any> extends Subscribable<T> {\n // It's possible for a to be undefined, since the equalityComparer is run on the initial\n // computation with undefined as the first argument. This is user-relevant for deferred computeds.\n equalityComparer(a: T | undefined, b: T): boolean\n peek(): T\n dispose(): void\n isActive(): boolean\n getDependenciesCount(): number\n getDependencies(): Subscribable[]\n}\n\n// used in computed, but empty interface is pointless. Check if it's needed\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PureComputed<T = any> extends Computed<T> {}\n\nexport type ComputedReadFunction<T = any, TTarget = void> =\n | Subscribable<T>\n | Observable<T>\n | Computed<T>\n | ((this: TTarget) => T)\nexport type ComputedWriteFunction<T = any, TTarget = void> = (this: TTarget, val: T) => void\nexport type MaybeComputed<T = any> = T | Computed<T>\n\nexport interface ComputedOptions<T = any, TTarget = void> {\n read?: ComputedReadFunction<T, TTarget>\n write?: ComputedWriteFunction<T, TTarget>\n owner?: TTarget\n pure?: boolean\n deferEvaluation?: boolean\n disposeWhenNodeIsRemoved?: Node\n disposeWhen?: () => boolean\n}\n\ninterface State {\n latestValue?: any\n isStale: boolean\n isDirty: boolean\n isBeingEvaluated: boolean\n suppressDisposalUntilDisposeWhenReturnsFalse: boolean\n isDisposed: boolean\n pure: boolean\n isSleeping: boolean\n readFunction: ComputedReadFunction\n evaluatorFunctionTarget: any\n disposeWhenNodeIsRemoved: Node | null\n disposeWhen?: () => boolean\n domNodeDisposalCallback: (() => void) | null\n dependencyTracking: any\n dependenciesCount: number\n evaluationTimeoutInstance: any\n}\n\nexport function computed(\n evaluatorFunctionOrOptions?: ComputedOptions<any, void> | ComputedReadFunction<any, any>,\n evaluatorFunctionTarget?: any,\n options?: ComputedOptions\n): Computed {\n if (typeof evaluatorFunctionOrOptions === 'object') {\n // Single-parameter syntax - everything is on this \"options\" param\n options = evaluatorFunctionOrOptions as ComputedOptions\n } else {\n // Multi-parameter syntax - construct the options according to the params passed\n options = options || {}\n if (evaluatorFunctionOrOptions) {\n options!.read = evaluatorFunctionOrOptions\n }\n }\n if (typeof options?.read !== 'function') {\n throw Error('Pass a function that returns the value of the computed')\n }\n\n const writeFunction = options.write\n const state: State = {\n latestValue: undefined,\n isStale: true,\n isDirty: true,\n isBeingEvaluated: false,\n suppressDisposalUntilDisposeWhenReturnsFalse: false,\n isDisposed: false,\n pure: false,\n isSleeping: false,\n readFunction: options.read,\n evaluatorFunctionTarget: evaluatorFunctionTarget || options.owner,\n disposeWhenNodeIsRemoved: options.disposeWhenNodeIsRemoved || null,\n disposeWhen: options.disposeWhen,\n domNodeDisposalCallback: null,\n dependencyTracking: {},\n dependenciesCount: 0,\n evaluationTimeoutInstance: null\n }\n\n function computedObservable() {\n if (arguments.length > 0) {\n if (typeof writeFunction === 'function') {\n // Writing a value\n writeFunction.apply(state.evaluatorFunctionTarget, arguments as any)\n } else {\n throw new Error(\n \"Cannot write a value to a computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\"\n )\n }\n return this // Permits chained assignments\n } else {\n // Reading the value\n if (!state.isDisposed) {\n dependencyDetection.registerDependency(computedObservable)\n }\n if (state.isDirty || (state.isSleeping && (computedObservable as any).haveDependenciesChanged())) {\n ;(computedObservable as any).evaluateImmediate()\n }\n return state.latestValue\n }\n }\n\n computedObservable[computedState] = state\n computedObservable.isWriteable = typeof writeFunction === 'function'\n\n subscribable.fn.init(computedObservable)\n\n // Inherit from 'computed'\n Object.setPrototypeOf(computedObservable, computed.fn)\n\n if (options.pure) {\n state.pure = true\n state.isSleeping = true // Starts off sleeping; will awake on the first subscription\n extend(computedObservable, pureComputedOverrides)\n } else if (options.deferEvaluation) {\n extend(computedObservable, deferEvaluationOverrides)\n }\n\n if (koOptions.deferUpdates) {\n extenders.deferred(computedObservable, true)\n }\n\n if (koOptions.debug) {\n // #1731 - Aid debugging by exposing the computed's options\n computedObservable._options = options\n }\n\n if (state.disposeWhenNodeIsRemoved) {\n // Since this computed is associated with a DOM node, and we don't want to dispose the computed\n // until the DOM node is *removed* from the document (as opposed to never having been in the document),\n // we'll prevent disposal until \"disposeWhen\" first returns false.\n state.suppressDisposalUntilDisposeWhenReturnsFalse = true\n\n // disposeWhenNodeIsRemoved: true can be used to opt into the \"only dispose after first false result\"\n // behavior even if there's no specific node to watch. In that case, clear the option so we don't try\n // to watch for a non-node's disposal. This technique is intended for KO's internal use only and shouldn't\n // be documented or used by application code, as it's likely to change in a future version of KO.\n if (!state.disposeWhenNodeIsRemoved.nodeType) {\n state.disposeWhenNodeIsRemoved = null\n }\n }\n\n // Evaluate, unless sleeping or deferEvaluation is true\n if (!state.isSleeping && !options.deferEvaluation) {\n ;(computedObservable as any).evaluateImmediate()\n }\n\n // Attach a DOM node disposal callback so that the computed will be proactively disposed as soon as the node is\n // removed using ko.removeNode. But skip if isActive is false (there will never be any dependencies to dispose).\n if (state.disposeWhenNodeIsRemoved && (computedObservable as any).isActive()) {\n addDisposeCallback(\n state.disposeWhenNodeIsRemoved,\n (state.domNodeDisposalCallback = function () {\n ;(computedObservable as any).dispose()\n })\n )\n }\n\n return computedObservable as unknown as Computed\n}\n\n// Utility function that disposes a given dependencyTracking entry\nfunction computedDisposeDependencyCallback(id, entryToDispose) {\n if (entryToDispose !== null && entryToDispose.dispose) {\n entryToDispose.dispose()\n }\n}\n\n// This function gets called each time a dependency is detected while evaluating a computed.\n// It's factored out as a shared function to avoid creating unnecessary function instances during evaluation.\nfunction computedBeginDependencyDetectionCallback(subscribable, id) {\n const computedObservable = this.computedObservable,\n state = computedObservable[computedState]\n if (!state.isDisposed) {\n if (this.disposalCount && this.disposalCandidates[id]) {\n // Don't want to dispose this subscription, as it's still being used\n computedObservable.addDependencyTracking(id, subscribable, this.disposalCandidates[id])\n this.disposalCandidates[id] = null // No need to actually delete the property - disposalCandidates is a transient object anyway\n --this.disposalCount\n } else if (!state.dependencyTracking[id]) {\n // Brand new subscription - add it\n computedObservable.addDependencyTracking(\n id,\n subscribable,\n state.isSleeping ? { _target: subscribable } : computedObservable.subscribeToDependency(subscribable)\n )\n }\n // If the observable we've accessed has a pending notification, ensure\n // we get notified of the actual final value (bypass equality checks)\n if (subscribable._notificationIsPending) {\n subscribable._notifyNextChangeIfValueIsDifferent()\n }\n }\n}\n\ncomputed.fn = {\n equalityComparer: valuesArePrimitiveAndEqual,\n getDependenciesCount(): number {\n return this[computedState].dependenciesCount\n },\n\n getDependencies() {\n const dependencyTracking = this[computedState].dependencyTracking\n const dependentObservables = new Array()\n\n objectForEach(dependencyTracking, function (id, dependency) {\n dependentObservables[dependency._order] = dependency._target\n })\n\n return dependentObservables\n },\n\n addDependencyTracking(id, target, trackingObj) {\n if (this[computedState].pure && target === this) {\n throw Error(\"A 'pure' computed must not be called recursively\")\n }\n\n this[computedState].dependencyTracking[id] = trackingObj\n trackingObj._order = this[computedState].dependenciesCount++\n trackingObj._version = target.getVersion()\n },\n haveDependenciesChanged() {\n let id,\n dependency,\n dependencyTracking = this[computedState].dependencyTracking\n for (id in dependencyTracking) {\n if (hasOwnProperty(dependencyTracking, id)) {\n dependency = dependencyTracking[id]\n if (\n (this._evalDelayed && dependency._target._notificationIsPending) ||\n dependency._target.hasChanged(dependency._version)\n ) {\n return true\n }\n }\n }\n return false\n },\n markDirty() {\n // Process \"dirty\" events if we can handle delayed notifications\n if (this._evalDelayed && !this[computedState].isBeingEvaluated) {\n this._evalDelayed(false /* notifyChange */)\n }\n },\n isActive() {\n const state = this[computedState]\n return state.isDirty || state.dependenciesCount > 0\n },\n respondToChange() {\n // Ignore \"change\" events if we've already scheduled a delayed notification\n if (!this._notificationIsPending) {\n this.evaluatePossiblyAsync()\n } else if (this[computedState].isDirty) {\n this[computedState].isStale = true\n }\n },\n subscribeToDependency(target) {\n if (target._deferUpdates) {\n const dirtySub = target.subscribe(this.markDirty, this, 'dirty'),\n changeSub = target.subscribe(this.respondToChange, this)\n return {\n _target: target,\n dispose() {\n dirtySub.dispose()\n changeSub.dispose()\n }\n }\n } else {\n return target.subscribe(this.evaluatePossiblyAsync, this)\n }\n },\n evaluatePossiblyAsync() {\n const computedObservable = this,\n throttleEvaluationTimeout = computedObservable.throttleEvaluation\n if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {\n clearTimeout(this[computedState].evaluationTimeoutInstance)\n this[computedState].evaluationTimeoutInstance = safeSetTimeout(function () {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }, throttleEvaluationTimeout)\n } else if (computedObservable._evalDelayed) {\n computedObservable._evalDelayed(true /* notifyChange */)\n } else {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }\n },\n evaluateImmediate(notifyChange) {\n let state = this[computedState],\n disposeWhen = state.disposeWhen,\n changed = false\n\n if (state.isBeingEvaluated) {\n // If the evaluation of a ko.computed causes side effects, it's possible that it will trigger its own re-evaluation.\n // This is not desirable (it's hard for a developer to realise a chain of dependencies might cause this, and they almost\n // certainly didn't intend infinite re-evaluations). So, for predictability, we simply prevent ko.computeds from causing\n // their own re-evaluation. Further discussion at https://github.com/SteveSanderson/knockout/pull/387\n return\n }\n\n // Do not evaluate (and possibly capture new dependencies) if disposed\n if (state.isDisposed) {\n return\n }\n\n if (\n (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved)) ||\n (disposeWhen && disposeWhen())\n ) {\n // See comment above about suppressDisposalUntilDisposeWhenReturnsFalse\n if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {\n this.dispose()\n return\n }\n } else {\n // It just did return false, so we can stop suppressing now\n state.suppressDisposalUntilDisposeWhenReturnsFalse = false\n }\n\n state.isBeingEvaluated = true\n try {\n changed = this.evaluateImmediate_CallReadWithDependencyDetection(notifyChange)\n } finally {\n state.isBeingEvaluated = false\n }\n\n return changed\n },\n evaluateImmediate_CallReadWithDependencyDetection(notifyChange) {\n // This function is really just part of the evaluateImmediate logic. You would never call it from anywhere else.\n // Factoring it out into a separate function means it can be independent of the try/catch block in evaluateImmediate,\n // which contributes to saving about 40% off the CPU overhead of computed evaluation (on V8 at least).\n\n let state = this[computedState],\n changed = false\n\n // Initially, we assume that none of the subscriptions are still being used (i.e., all are candidates for disposal).\n // Then, during evaluation, we cross off any that are in fact still being used.\n const isInitial = state.pure ? undefined : !state.dependenciesCount, // If we're evaluating when there are no previous dependencies, it must be the first time\n dependencyDetectionContext = {\n computedObservable: this,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n }\n\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: this,\n isInitial: isInitial\n })\n\n state.dependencyTracking = {}\n state.dependenciesCount = 0\n\n const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext)\n\n if (!state.dependenciesCount) {\n this.dispose()\n changed = true // When evaluation causes a disposal, make sure all dependent computeds get notified so they'll see the new state\n } else {\n changed = this.isDifferent(state.latestValue, newValue)\n }\n\n if (changed) {\n if (!state.isSleeping) {\n this.notifySubscribers(state.latestValue, 'beforeChange')\n } else {\n this.updateVersion()\n }\n\n state.latestValue = newValue\n if (options.debug) {\n this._latestValue = newValue\n }\n\n this.notifySubscribers(state.latestValue, 'spectate')\n\n if (!state.isSleeping && notifyChange) {\n this.notifySubscribers(state.latestValue)\n }\n\n if (this._recordUpdate) {\n this._recordUpdate()\n }\n }\n\n if (isInitial) {\n this.notifySubscribers(state.latestValue, 'awake')\n }\n\n return changed\n },\n evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext) {\n // This function is really part of the evaluateImmediate_CallReadWithDependencyDetection logic.\n // You'd never call it from anywhere else. Factoring it out means that evaluateImmediate_CallReadWithDependencyDetection\n // can be independent of try/finally blocks, which contributes to saving about 40% off the CPU\n // overhead of computed evaluation (on V8 at least).\n\n try {\n const readFunction = state.readFunction\n return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction()\n } finally {\n dependencyDetection.end()\n\n // For each subscription no longer being used, remove it from the active subscriptions list and dispose it\n if (dependencyDetectionContext.disposalCount && !state.isSleeping) {\n objectForEach(dependencyDetectionContext.disposalCandidates, computedDisposeDependencyCallback)\n }\n\n state.isStale = state.isDirty = false\n }\n },\n peek(forceEvaluate) {\n // Peek won't ordinarily re-evaluate, except while the computed is sleeping\n // or to get the initial value when \"deferEvaluation\" is set.\n const state = this[computedState]\n if (\n (state.isDirty && (forceEvaluate || !state.dependenciesCount)) ||\n (state.isSleeping && this.haveDependenciesChanged())\n ) {\n this.evaluateImmediate()\n }\n return state.latestValue\n },\n\n get [LATEST_VALUE]() {\n return this.peek()\n },\n\n limit(limitFunction) {\n const state = this[computedState]\n // Override the limit function with one that delays evaluation as well\n ;(subscribable.fn as any).limit.call(this, limitFunction)\n Object.assign(this, {\n _evalIfChanged() {\n if (!this[computedState].isSleeping) {\n if (this[computedState].isStale) {\n this.evaluateImmediate()\n } else {\n this[computedState].isDirty = false\n }\n }\n return state.latestValue\n },\n _evalDelayed(isChange) {\n this._limitBeforeChange(state.latestValue)\n\n // Mark as dirty\n state.isDirty = true\n if (isChange) {\n state.isStale = true\n }\n\n // Pass the observable to the \"limit\" code, which will evaluate it when\n // it's time to do the notification.\n this._limitChange(this, !isChange /* isDirty */)\n }\n })\n },\n dispose() {\n const state = this[computedState]\n if (!state.isSleeping && state.dependencyTracking) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n dependency.dispose()\n }\n })\n }\n if (state.disposeWhenNodeIsRemoved && state.domNodeDisposalCallback) {\n removeDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback)\n }\n Object.assign(state, DISPOSED_STATE)\n }\n}\n\nconst pureComputedOverrides = {\n beforeSubscriptionAdd(event: string) {\n // If asleep, wake up the computed by subscribing to any dependencies.\n const computedObservable = this,\n state = computedObservable[computedState]\n if (!state.isDisposed && state.isSleeping && event === 'change') {\n state.isSleeping = false\n if (state.isStale || computedObservable.haveDependenciesChanged()) {\n state.dependencyTracking = null\n state.dependenciesCount = 0\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n } else {\n // First put the dependencies in order\n const dependenciesOrder = new Array()\n objectForEach(state.dependencyTracking, function (id, dependency) {\n dependenciesOrder[dependency._order] = id\n })\n // Next, subscribe to each one\n arrayForEach(dependenciesOrder, function (id, order) {\n const dependency = state.dependencyTracking[id],\n subscription = computedObservable.subscribeToDependency(dependency._target)\n subscription._order = order\n subscription._version = dependency._version\n state.dependencyTracking[id] = subscription\n })\n\n // Waking dependencies may have triggered effects\n if (computedObservable.haveDependenciesChanged()) {\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n }\n }\n\n if (!state.isDisposed) {\n // test since evaluating could trigger disposal\n computedObservable.notifySubscribers(state.latestValue, 'awake')\n }\n }\n },\n afterSubscriptionRemove(event: string) {\n const state = this[computedState]\n if (!state.isDisposed && event === 'change' && !this.hasSubscriptionsForEvent('change')) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n state.dependencyTracking[id] = {\n _target: dependency._target,\n _order: dependency._order,\n _version: dependency._version\n }\n dependency.dispose()\n }\n })\n state.isSleeping = true\n this.notifySubscribers(undefined, 'asleep')\n }\n },\n getVersion() {\n // Because a pure computed is not automatically updated while it is sleeping, we can't\n // simply return the version number. Instead, we check if any of the dependencies have\n // changed and conditionally re-evaluate the computed observable.\n const state = this[computedState]\n if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) {\n this.evaluateImmediate()\n }\n return subscribable.fn.getVersion.call(this)\n }\n}\n\nconst deferEvaluationOverrides = {\n beforeSubscriptionAdd(event) {\n // This will force a computed with deferEvaluation to evaluate when the first subscription is registered.\n if (event === 'change' || event === 'beforeChange') {\n this.peek()\n }\n }\n}\n\nObject.setPrototypeOf(computed.fn, subscribable.fn)\n\n// Set the proto values for ko.computed\nconst protoProp = observable.protoProperty // == \"__ko_proto__\"\ncomputed.fn[protoProp] = computed\n\n/* This is used by ko.isObservable */\nobservable.observablePrototypes.add(computed as any)\n\nexport function isComputed<T = any>(instance: any): instance is Computed<T> {\n return typeof instance === 'function' && instance[protoProp] === computed\n}\n\nexport function isPureComputed<T = any>(instance: any): instance is PureComputed<T> {\n return isComputed(instance) && instance[computedState] && (instance[computedState] as unknown as State).pure\n}\n\nexport function pureComputed<T = any>(\n evaluatorFunctionOrOptions: ComputedOptions | ComputedReadFunction,\n evaluatorFunctionTarget?\n): Computed<T> {\n if (typeof evaluatorFunctionOrOptions === 'function') {\n const evaluator = evaluatorFunctionOrOptions as ComputedReadFunction\n return computed(evaluator, evaluatorFunctionTarget, { pure: true })\n } else {\n let options = evaluatorFunctionOrOptions as ComputedOptions\n options = extend({}, options) // make a copy of the parameter object\n options.pure = true\n return computed(options, evaluatorFunctionTarget)\n }\n}\n"], | ||
| "mappings": ";;AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,MAAM,gBAAwB,qBAAqB,QAAQ;AAC3D,MAAM,iBAAiB;AAAA,EACrB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,0BAA0B;AAAA,EAC1B,cAAc;AAAA,EACd,UAAU;AACZ;AA2DO,gBAAS,SACd,4BACA,yBACAA,UACU;AACV,MAAI,OAAO,+BAA+B,UAAU;AAElD,IAAAA,WAAU;AAAA,EACZ,OAAO;AAEL,IAAAA,WAAUA,YAAW,CAAC;AACtB,QAAI,4BAA4B;AAC9B,MAAAA,SAAS,OAAO;AAAA,IAClB;AAAA,EACF;AACA,MAAI,OAAOA,UAAS,SAAS,YAAY;AACvC,UAAM,MAAM,wDAAwD;AAAA,EACtE;AAEA,QAAM,gBAAgBA,SAAQ;AAC9B,QAAM,QAAe;AAAA,IACnB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,8CAA8C;AAAA,IAC9C,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,cAAcA,SAAQ;AAAA,IACtB,yBAAyB,2BAA2BA,SAAQ;AAAA,IAC5D,0BAA0BA,SAAQ,4BAA4B;AAAA,IAC9D,aAAaA,SAAQ;AAAA,IACrB,yBAAyB;AAAA,IACzB,oBAAoB,CAAC;AAAA,IACrB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,EAC7B;AAEA,WAAS,qBAAqB;AAC5B,QAAI,UAAU,SAAS,GAAG;AACxB,UAAI,OAAO,kBAAkB,YAAY;AAEvC,sBAAc,MAAM,MAAM,yBAAyB,SAAgB;AAAA,MACrE,OAAO;AACL,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,OAAO;AAEL,UAAI,CAAC,MAAM,YAAY;AACrB,4BAAoB,mBAAmB,kBAAkB;AAAA,MAC3D;AACA,UAAI,MAAM,WAAY,MAAM,cAAe,mBAA2B,wBAAwB,GAAI;AAChG;AAAC,QAAC,mBAA2B,kBAAkB;AAAA,MACjD;AACA,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,qBAAmB,aAAa,IAAI;AACpC,qBAAmB,cAAc,OAAO,kBAAkB;AAE1D,eAAa,GAAG,KAAK,kBAAkB;AAGvC,SAAO,eAAe,oBAAoB,SAAS,EAAE;AAErD,MAAIA,SAAQ,MAAM;AAChB,UAAM,OAAO;AACb,UAAM,aAAa;AACnB,WAAO,oBAAoB,qBAAqB;AAAA,EAClD,WAAWA,SAAQ,iBAAiB;AAClC,WAAO,oBAAoB,wBAAwB;AAAA,EACrD;AAEA,MAAI,UAAU,cAAc;AAC1B,cAAU,SAAS,oBAAoB,IAAI;AAAA,EAC7C;AAEA,MAAI,UAAU,OAAO;AAEnB,uBAAmB,WAAWA;AAAA,EAChC;AAEA,MAAI,MAAM,0BAA0B;AAIlC,UAAM,+CAA+C;AAMrD,QAAI,CAAC,MAAM,yBAAyB,UAAU;AAC5C,YAAM,2BAA2B;AAAA,IACnC;AAAA,EACF;AAGA,MAAI,CAAC,MAAM,cAAc,CAACA,SAAQ,iBAAiB;AACjD;AAAC,IAAC,mBAA2B,kBAAkB;AAAA,EACjD;AAIA,MAAI,MAAM,4BAA6B,mBAA2B,SAAS,GAAG;AAC5E;AAAA,MACE,MAAM;AAAA,MACL,MAAM,0BAA0B,WAAY;AAC3C;AAAC,QAAC,mBAA2B,QAAQ;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAGA,SAAS,kCAAkC,IAAI,gBAAgB;AAC7D,MAAI,mBAAmB,QAAQ,eAAe,SAAS;AACrD,mBAAe,QAAQ;AAAA,EACzB;AACF;AAIA,SAAS,yCAAyCC,eAAc,IAAI;AAClE,QAAM,qBAAqB,KAAK,oBAC9B,QAAQ,mBAAmB,aAAa;AAC1C,MAAI,CAAC,MAAM,YAAY;AACrB,QAAI,KAAK,iBAAiB,KAAK,mBAAmB,EAAE,GAAG;AAErD,yBAAmB,sBAAsB,IAAIA,eAAc,KAAK,mBAAmB,EAAE,CAAC;AACtF,WAAK,mBAAmB,EAAE,IAAI;AAC9B,QAAE,KAAK;AAAA,IACT,WAAW,CAAC,MAAM,mBAAmB,EAAE,GAAG;AAExC,yBAAmB;AAAA,QACjB;AAAA,QACAA;AAAA,QACA,MAAM,aAAa,EAAE,SAASA,cAAa,IAAI,mBAAmB,sBAAsBA,aAAY;AAAA,MACtG;AAAA,IACF;AAGA,QAAIA,cAAa,wBAAwB;AACvC,MAAAA,cAAa,oCAAoC;AAAA,IACnD;AAAA,EACF;AACF;AAEA,SAAS,KAAK;AAAA,EACZ,kBAAkB;AAAA,EAClB,uBAA+B;AAC7B,WAAO,KAAK,aAAa,EAAE;AAAA,EAC7B;AAAA,EAEA,kBAAkB;AAChB,UAAM,qBAAqB,KAAK,aAAa,EAAE;AAC/C,UAAM,uBAAuB,IAAI,MAAM;AAEvC,kBAAc,oBAAoB,SAAU,IAAI,YAAY;AAC1D,2BAAqB,WAAW,MAAM,IAAI,WAAW;AAAA,IACvD,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,sBAAsB,IAAI,QAAQ,aAAa;AAC7C,QAAI,KAAK,aAAa,EAAE,QAAQ,WAAW,MAAM;AAC/C,YAAM,MAAM,kDAAkD;AAAA,IAChE;AAEA,SAAK,aAAa,EAAE,mBAAmB,EAAE,IAAI;AAC7C,gBAAY,SAAS,KAAK,aAAa,EAAE;AACzC,gBAAY,WAAW,OAAO,WAAW;AAAA,EAC3C;AAAA,EACA,0BAA0B;AACxB,QAAI,IACF,YACA,qBAAqB,KAAK,aAAa,EAAE;AAC3C,SAAK,MAAM,oBAAoB;AAC7B,UAAI,eAAe,oBAAoB,EAAE,GAAG;AAC1C,qBAAa,mBAAmB,EAAE;AAClC,YACG,KAAK,gBAAgB,WAAW,QAAQ,0BACzC,WAAW,QAAQ,WAAW,WAAW,QAAQ,GACjD;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,YAAY;AAEV,QAAI,KAAK,gBAAgB,CAAC,KAAK,aAAa,EAAE,kBAAkB;AAC9D,WAAK;AAAA,QAAa;AAAA;AAAA,MAAwB;AAAA,IAC5C;AAAA,EACF;AAAA,EACA,WAAW;AACT,UAAM,QAAQ,KAAK,aAAa;AAChC,WAAO,MAAM,WAAW,MAAM,oBAAoB;AAAA,EACpD;AAAA,EACA,kBAAkB;AAEhB,QAAI,CAAC,KAAK,wBAAwB;AAChC,WAAK,sBAAsB;AAAA,IAC7B,WAAW,KAAK,aAAa,EAAE,SAAS;AACtC,WAAK,aAAa,EAAE,UAAU;AAAA,IAChC;AAAA,EACF;AAAA,EACA,sBAAsB,QAAQ;AAC5B,QAAI,OAAO,eAAe;AACxB,YAAM,WAAW,OAAO,UAAU,KAAK,WAAW,MAAM,OAAO,GAC7D,YAAY,OAAO,UAAU,KAAK,iBAAiB,IAAI;AACzD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AACR,mBAAS,QAAQ;AACjB,oBAAU,QAAQ;AAAA,QACpB;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,OAAO,UAAU,KAAK,uBAAuB,IAAI;AAAA,IAC1D;AAAA,EACF;AAAA,EACA,wBAAwB;AACtB,UAAM,qBAAqB,MACzB,4BAA4B,mBAAmB;AACjD,QAAI,6BAA6B,6BAA6B,GAAG;AAC/D,mBAAa,KAAK,aAAa,EAAE,yBAAyB;AAC1D,WAAK,aAAa,EAAE,4BAA4B,eAAe,WAAY;AACzE,2BAAmB;AAAA,UAAkB;AAAA;AAAA,QAAuB;AAAA,MAC9D,GAAG,yBAAyB;AAAA,IAC9B,WAAW,mBAAmB,cAAc;AAC1C,yBAAmB;AAAA,QAAa;AAAA;AAAA,MAAuB;AAAA,IACzD,OAAO;AACL,yBAAmB;AAAA,QAAkB;AAAA;AAAA,MAAuB;AAAA,IAC9D;AAAA,EACF;AAAA,EACA,kBAAkB,cAAc;AAC9B,QAAI,QAAQ,KAAK,aAAa,GAC5B,cAAc,MAAM,aACpB,UAAU;AAEZ,QAAI,MAAM,kBAAkB;AAK1B;AAAA,IACF;AAGA,QAAI,MAAM,YAAY;AACpB;AAAA,IACF;AAEA,QACG,MAAM,4BAA4B,CAAC,4BAA4B,MAAM,wBAAwB,KAC7F,eAAe,YAAY,GAC5B;AAEA,UAAI,CAAC,MAAM,8CAA8C;AACvD,aAAK,QAAQ;AACb;AAAA,MACF;AAAA,IACF,OAAO;AAEL,YAAM,+CAA+C;AAAA,IACvD;AAEA,UAAM,mBAAmB;AACzB,QAAI;AACF,gBAAU,KAAK,kDAAkD,YAAY;AAAA,IAC/E,UAAE;AACA,YAAM,mBAAmB;AAAA,IAC3B;AAEA,WAAO;AAAA,EACT;AAAA,EACA,kDAAkD,cAAc;AAK9D,QAAI,QAAQ,KAAK,aAAa,GAC5B,UAAU;AAIZ,UAAM,YAAY,MAAM,OAAO,SAAY,CAAC,MAAM,mBAChD,6BAA6B;AAAA,MAC3B,oBAAoB;AAAA,MACpB,oBAAoB,MAAM;AAAA,MAC1B,eAAe,MAAM;AAAA,IACvB;AAEF,wBAAoB,MAAM;AAAA,MACxB,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,UAAU;AAAA,MACV;AAAA,IACF,CAAC;AAED,UAAM,qBAAqB,CAAC;AAC5B,UAAM,oBAAoB;AAE1B,UAAM,WAAW,KAAK,qDAAqD,OAAO,0BAA0B;AAE5G,QAAI,CAAC,MAAM,mBAAmB;AAC5B,WAAK,QAAQ;AACb,gBAAU;AAAA,IACZ,OAAO;AACL,gBAAU,KAAK,YAAY,MAAM,aAAa,QAAQ;AAAA,IACxD;AAEA,QAAI,SAAS;AACX,UAAI,CAAC,MAAM,YAAY;AACrB,aAAK,kBAAkB,MAAM,aAAa,cAAc;AAAA,MAC1D,OAAO;AACL,aAAK,cAAc;AAAA,MACrB;AAEA,YAAM,cAAc;AACpB,UAAI,QAAQ,OAAO;AACjB,aAAK,eAAe;AAAA,MACtB;AAEA,WAAK,kBAAkB,MAAM,aAAa,UAAU;AAEpD,UAAI,CAAC,MAAM,cAAc,cAAc;AACrC,aAAK,kBAAkB,MAAM,WAAW;AAAA,MAC1C;AAEA,UAAI,KAAK,eAAe;AACtB,aAAK,cAAc;AAAA,MACrB;AAAA,IACF;AAEA,QAAI,WAAW;AACb,WAAK,kBAAkB,MAAM,aAAa,OAAO;AAAA,IACnD;AAEA,WAAO;AAAA,EACT;AAAA,EACA,qDAAqD,OAAO,4BAA4B;AAMtF,QAAI;AACF,YAAM,eAAe,MAAM;AAC3B,aAAO,MAAM,0BAA0B,aAAa,KAAK,MAAM,uBAAuB,IAAI,aAAa;AAAA,IACzG,UAAE;AACA,0BAAoB,IAAI;AAGxB,UAAI,2BAA2B,iBAAiB,CAAC,MAAM,YAAY;AACjE,sBAAc,2BAA2B,oBAAoB,iCAAiC;AAAA,MAChG;AAEA,YAAM,UAAU,MAAM,UAAU;AAAA,IAClC;AAAA,EACF;AAAA,EACA,KAAK,eAAe;AAGlB,UAAM,QAAQ,KAAK,aAAa;AAChC,QACG,MAAM,YAAY,iBAAiB,CAAC,MAAM,sBAC1C,MAAM,cAAc,KAAK,wBAAwB,GAClD;AACA,WAAK,kBAAkB;AAAA,IACzB;AACA,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,KAAK,YAAY,IAAI;AACnB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,MAAM,eAAe;AACnB,UAAM,QAAQ,KAAK,aAAa;AAE/B,IAAC,aAAa,GAAW,MAAM,KAAK,MAAM,aAAa;AACxD,WAAO,OAAO,MAAM;AAAA,MAClB,iBAAiB;AACf,YAAI,CAAC,KAAK,aAAa,EAAE,YAAY;AACnC,cAAI,KAAK,aAAa,EAAE,SAAS;AAC/B,iBAAK,kBAAkB;AAAA,UACzB,OAAO;AACL,iBAAK,aAAa,EAAE,UAAU;AAAA,UAChC;AAAA,QACF;AACA,eAAO,MAAM;AAAA,MACf;AAAA,MACA,aAAa,UAAU;AACrB,aAAK,mBAAmB,MAAM,WAAW;AAGzC,cAAM,UAAU;AAChB,YAAI,UAAU;AACZ,gBAAM,UAAU;AAAA,QAClB;AAIA,aAAK;AAAA,UAAa;AAAA,UAAM,CAAC;AAAA;AAAA,QAAsB;AAAA,MACjD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,UAAU;AACR,UAAM,QAAQ,KAAK,aAAa;AAChC,QAAI,CAAC,MAAM,cAAc,MAAM,oBAAoB;AACjD,oBAAc,MAAM,oBAAoB,SAAU,IAAI,YAAY;AAChE,YAAI,WAAW,SAAS;AACtB,qBAAW,QAAQ;AAAA,QACrB;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,MAAM,4BAA4B,MAAM,yBAAyB;AACnE,4BAAsB,MAAM,0BAA0B,MAAM,uBAAuB;AAAA,IACrF;AACA,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AACF;AAEA,MAAM,wBAAwB;AAAA,EAC5B,sBAAsB,OAAe;AAEnC,UAAM,qBAAqB,MACzB,QAAQ,mBAAmB,aAAa;AAC1C,QAAI,CAAC,MAAM,cAAc,MAAM,cAAc,UAAU,UAAU;AAC/D,YAAM,aAAa;AACnB,UAAI,MAAM,WAAW,mBAAmB,wBAAwB,GAAG;AACjE,cAAM,qBAAqB;AAC3B,cAAM,oBAAoB;AAC1B,YAAI,mBAAmB,kBAAkB,GAAG;AAC1C,6BAAmB,cAAc;AAAA,QACnC;AAAA,MACF,OAAO;AAEL,cAAM,oBAAoB,IAAI,MAAM;AACpC,sBAAc,MAAM,oBAAoB,SAAU,IAAI,YAAY;AAChE,4BAAkB,WAAW,MAAM,IAAI;AAAA,QACzC,CAAC;AAED,qBAAa,mBAAmB,SAAU,IAAI,OAAO;AACnD,gBAAM,aAAa,MAAM,mBAAmB,EAAE,GAC5C,eAAe,mBAAmB,sBAAsB,WAAW,OAAO;AAC5E,uBAAa,SAAS;AACtB,uBAAa,WAAW,WAAW;AACnC,gBAAM,mBAAmB,EAAE,IAAI;AAAA,QACjC,CAAC;AAGD,YAAI,mBAAmB,wBAAwB,GAAG;AAChD,cAAI,mBAAmB,kBAAkB,GAAG;AAC1C,+BAAmB,cAAc;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,MAAM,YAAY;AAErB,2BAAmB,kBAAkB,MAAM,aAAa,OAAO;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA,EACA,wBAAwB,OAAe;AACrC,UAAM,QAAQ,KAAK,aAAa;AAChC,QAAI,CAAC,MAAM,cAAc,UAAU,YAAY,CAAC,KAAK,yBAAyB,QAAQ,GAAG;AACvF,oBAAc,MAAM,oBAAoB,SAAU,IAAI,YAAY;AAChE,YAAI,WAAW,SAAS;AACtB,gBAAM,mBAAmB,EAAE,IAAI;AAAA,YAC7B,SAAS,WAAW;AAAA,YACpB,QAAQ,WAAW;AAAA,YACnB,UAAU,WAAW;AAAA,UACvB;AACA,qBAAW,QAAQ;AAAA,QACrB;AAAA,MACF,CAAC;AACD,YAAM,aAAa;AACnB,WAAK,kBAAkB,QAAW,QAAQ;AAAA,IAC5C;AAAA,EACF;AAAA,EACA,aAAa;AAIX,UAAM,QAAQ,KAAK,aAAa;AAChC,QAAI,MAAM,eAAe,MAAM,WAAW,KAAK,wBAAwB,IAAI;AACzE,WAAK,kBAAkB;AAAA,IACzB;AACA,WAAO,aAAa,GAAG,WAAW,KAAK,IAAI;AAAA,EAC7C;AACF;AAEA,MAAM,2BAA2B;AAAA,EAC/B,sBAAsB,OAAO;AAE3B,QAAI,UAAU,YAAY,UAAU,gBAAgB;AAClD,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AACF;AAEA,OAAO,eAAe,SAAS,IAAI,aAAa,EAAE;AAGlD,MAAM,YAAY,WAAW;AAC7B,SAAS,GAAG,SAAS,IAAI;AAGzB,WAAW,qBAAqB,IAAI,QAAe;AAE5C,gBAAS,WAAoB,UAAwC;AAC1E,SAAO,OAAO,aAAa,cAAc,SAAS,SAAS,MAAM;AACnE;AAEO,gBAAS,eAAwB,UAA4C;AAClF,SAAO,WAAW,QAAQ,KAAK,SAAS,aAAa,KAAM,SAAS,aAAa,EAAuB;AAC1G;AAEO,gBAAS,aACd,4BACA,yBACa;AACb,MAAI,OAAO,+BAA+B,YAAY;AACpD,UAAM,YAAY;AAClB,WAAO,SAAS,WAAW,yBAAyB,EAAE,MAAM,KAAK,CAAC;AAAA,EACpE,OAAO;AACL,QAAID,WAAU;AACd,IAAAA,WAAU,OAAO,CAAC,GAAGA,QAAO;AAC5B,IAAAA,SAAQ,OAAO;AACf,WAAO,SAASA,UAAS,uBAAuB;AAAA,EAClD;AACF;", | ||
| "names": ["options", "subscribable"] | ||
| "sourcesContent": ["//\n// Computed Observable Values\n//\n// (before tko, `computed` was also known as `dependentObservable`)\n//\nimport {\n addDisposeCallback,\n arrayForEach,\n domNodeIsAttachedToDocument,\n extend,\n hasOwnProperty,\n objectForEach,\n options as koOptions,\n removeDisposeCallback,\n safeSetTimeout\n} from '@tko/utils'\n\nimport {\n dependencyDetection,\n extenders,\n valuesArePrimitiveAndEqual,\n observable,\n subscribable,\n LATEST_VALUE\n} from '@tko/observable'\n\nimport type { Observable, Subscribable } from '@tko/observable'\n\nconst computedState: symbol = Symbol('_state')\nconst DISPOSED_STATE = {\n dependencyTracking: null,\n dependenciesCount: 0,\n isDisposed: true,\n isStale: false,\n isDirty: false,\n isSleeping: false,\n disposeWhenNodeIsRemoved: null,\n readFunction: null,\n _options: null\n}\n\nexport interface Computed<T = any> extends ComputedFunctions<T> {\n (): T\n (value: T): this\n}\n\nexport interface ComputedFunctions<T = any> extends Subscribable<T> {\n // It's possible for a to be undefined, since the equalityComparer is run on the initial\n // computation with undefined as the first argument. This is user-relevant for deferred computeds.\n equalityComparer(a: T | undefined, b: T): boolean\n peek(): T\n dispose(): void\n isActive(): boolean\n getDependenciesCount(): number\n getDependencies(): Subscribable[]\n}\n\n// used in computed, but empty interface is pointless. Check if it's needed\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PureComputed<T = any> extends Computed<T> {}\n\nexport type ComputedReadFunction<T = any, TTarget = void> =\n | Subscribable<T>\n | Observable<T>\n | Computed<T>\n | ((this: TTarget) => T)\nexport type ComputedWriteFunction<T = any, TTarget = void> = (this: TTarget, val: T) => void\nexport type MaybeComputed<T = any> = T | Computed<T>\n\nexport interface ComputedOptions<T = any, TTarget = void> {\n read?: ComputedReadFunction<T, TTarget>\n write?: ComputedWriteFunction<T, TTarget>\n owner?: TTarget\n pure?: boolean\n deferEvaluation?: boolean\n disposeWhenNodeIsRemoved?: Node\n disposeWhen?: () => boolean\n}\n\ninterface State {\n latestValue?: any\n isStale: boolean\n isDirty: boolean\n isBeingEvaluated: boolean\n suppressDisposalUntilDisposeWhenReturnsFalse: boolean\n isDisposed: boolean\n pure: boolean\n isSleeping: boolean\n readFunction: ComputedReadFunction\n evaluatorFunctionTarget: any\n disposeWhenNodeIsRemoved: Node | null\n disposeWhen?: () => boolean\n domNodeDisposalCallback: (() => void) | null\n dependencyTracking: any\n dependenciesCount: number\n evaluationTimeoutInstance: any\n}\n\nexport function computed(\n evaluatorFunctionOrOptions?: ComputedOptions<any, void> | ComputedReadFunction<any, any>,\n evaluatorFunctionTarget?: any,\n options?: ComputedOptions\n): Computed {\n if (typeof evaluatorFunctionOrOptions === 'object') {\n // Single-parameter syntax - everything is on this \"options\" param\n options = evaluatorFunctionOrOptions as ComputedOptions\n } else {\n // Multi-parameter syntax - construct the options according to the params passed\n options = options || {}\n if (evaluatorFunctionOrOptions) {\n options!.read = evaluatorFunctionOrOptions\n }\n }\n if (typeof options?.read !== 'function') {\n throw Error('Pass a function that returns the value of the computed')\n }\n\n const writeFunction = options.write\n const state: State = {\n latestValue: undefined,\n isStale: true,\n isDirty: true,\n isBeingEvaluated: false,\n suppressDisposalUntilDisposeWhenReturnsFalse: false,\n isDisposed: false,\n pure: false,\n isSleeping: false,\n readFunction: options.read,\n evaluatorFunctionTarget: evaluatorFunctionTarget || options.owner,\n disposeWhenNodeIsRemoved: options.disposeWhenNodeIsRemoved || null,\n disposeWhen: options.disposeWhen,\n domNodeDisposalCallback: null,\n dependencyTracking: {},\n dependenciesCount: 0,\n evaluationTimeoutInstance: null\n }\n\n function computedObservable() {\n if (arguments.length > 0) {\n if (typeof writeFunction === 'function') {\n // Writing a value\n writeFunction.apply(state.evaluatorFunctionTarget, arguments as any)\n } else {\n throw new Error(\n \"Cannot write a value to a computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\"\n )\n }\n return this // Permits chained assignments\n } else {\n // Reading the value\n if (!state.isDisposed) {\n dependencyDetection.registerDependency(computedObservable)\n }\n if (state.isDirty || (state.isSleeping && (computedObservable as any).haveDependenciesChanged())) {\n ;(computedObservable as any).evaluateImmediate()\n }\n return state.latestValue\n }\n }\n\n computedObservable[computedState] = state\n computedObservable.isWriteable = typeof writeFunction === 'function'\n\n subscribable.fn.init(computedObservable)\n\n // Inherit from 'computed'\n Object.setPrototypeOf(computedObservable, computed.fn)\n\n if (options.pure) {\n state.pure = true\n state.isSleeping = true // Starts off sleeping; will awake on the first subscription\n extend(computedObservable, pureComputedOverrides)\n } else if (options.deferEvaluation) {\n extend(computedObservable, deferEvaluationOverrides)\n }\n\n if (koOptions.deferUpdates) {\n extenders.deferred(computedObservable, true)\n }\n\n if (koOptions.debug) {\n // #1731 - Aid debugging by exposing the computed's options\n computedObservable._options = options\n }\n\n if (state.disposeWhenNodeIsRemoved) {\n // Since this computed is associated with a DOM node, and we don't want to dispose the computed\n // until the DOM node is *removed* from the document (as opposed to never having been in the document),\n // we'll prevent disposal until \"disposeWhen\" first returns false.\n state.suppressDisposalUntilDisposeWhenReturnsFalse = true\n\n // disposeWhenNodeIsRemoved: true can be used to opt into the \"only dispose after first false result\"\n // behavior even if there's no specific node to watch. In that case, clear the option so we don't try\n // to watch for a non-node's disposal. This technique is intended for KO's internal use only and shouldn't\n // be documented or used by application code, as it's likely to change in a future version of KO.\n if (!state.disposeWhenNodeIsRemoved.nodeType) {\n state.disposeWhenNodeIsRemoved = null\n }\n }\n\n // Evaluate, unless sleeping or deferEvaluation is true\n if (!state.isSleeping && !options.deferEvaluation) {\n ;(computedObservable as any).evaluateImmediate()\n }\n\n // Attach a DOM node disposal callback so that the computed will be proactively disposed as soon as the node is\n // removed using ko.removeNode. But skip if isActive is false (there will never be any dependencies to dispose).\n if (state.disposeWhenNodeIsRemoved && (computedObservable as any).isActive()) {\n addDisposeCallback(\n state.disposeWhenNodeIsRemoved,\n (state.domNodeDisposalCallback = function () {\n ;(computedObservable as any).dispose()\n })\n )\n }\n\n return computedObservable as unknown as Computed\n}\n\n// Utility function that disposes a given dependencyTracking entry\nfunction computedDisposeDependencyCallback(id, entryToDispose) {\n if (entryToDispose !== null && entryToDispose.dispose) {\n entryToDispose.dispose()\n }\n}\n\n// This function gets called each time a dependency is detected while evaluating a computed.\n// It's factored out as a shared function to avoid creating unnecessary function instances during evaluation.\nfunction computedBeginDependencyDetectionCallback(subscribable, id) {\n const computedObservable = this.computedObservable,\n state = computedObservable[computedState]\n if (!state.isDisposed) {\n if (this.disposalCount && this.disposalCandidates[id]) {\n // Don't want to dispose this subscription, as it's still being used\n computedObservable.addDependencyTracking(id, subscribable, this.disposalCandidates[id])\n this.disposalCandidates[id] = null // No need to actually delete the property - disposalCandidates is a transient object anyway\n --this.disposalCount\n } else if (!state.dependencyTracking[id]) {\n // Brand new subscription - add it\n computedObservable.addDependencyTracking(\n id,\n subscribable,\n state.isSleeping ? { _target: subscribable } : computedObservable.subscribeToDependency(subscribable)\n )\n }\n // If the observable we've accessed has a pending notification, ensure\n // we get notified of the actual final value (bypass equality checks)\n if (subscribable._notificationIsPending) {\n subscribable._notifyNextChangeIfValueIsDifferent()\n }\n }\n}\n\ncomputed.fn = {\n equalityComparer: valuesArePrimitiveAndEqual,\n getDependenciesCount(): number {\n return this[computedState].dependenciesCount\n },\n\n getDependencies() {\n const dependencyTracking = this[computedState].dependencyTracking\n const dependentObservables = new Array()\n\n objectForEach(dependencyTracking, function (id, dependency) {\n dependentObservables[dependency._order] = dependency._target\n })\n\n return dependentObservables\n },\n\n addDependencyTracking(id, target, trackingObj) {\n if (this[computedState].pure && target === this) {\n throw Error(\"A 'pure' computed must not be called recursively\")\n }\n\n this[computedState].dependencyTracking[id] = trackingObj\n trackingObj._order = this[computedState].dependenciesCount++\n trackingObj._version = target.getVersion()\n },\n haveDependenciesChanged() {\n let id,\n dependency,\n dependencyTracking = this[computedState].dependencyTracking\n for (id in dependencyTracking) {\n if (hasOwnProperty(dependencyTracking, id)) {\n dependency = dependencyTracking[id]\n if (\n (this._evalDelayed && dependency._target._notificationIsPending) ||\n dependency._target.hasChanged(dependency._version)\n ) {\n return true\n }\n }\n }\n return false\n },\n markDirty() {\n // Process \"dirty\" events if we can handle delayed notifications\n if (this._evalDelayed && !this[computedState].isBeingEvaluated) {\n this._evalDelayed(false /* notifyChange */)\n }\n },\n isActive() {\n const state = this[computedState]\n return state.isDirty || state.dependenciesCount > 0\n },\n respondToChange() {\n // Ignore \"change\" events if we've already scheduled a delayed notification\n if (!this._notificationIsPending) {\n this.evaluatePossiblyAsync()\n } else if (this[computedState].isDirty) {\n this[computedState].isStale = true\n }\n },\n subscribeToDependency(target) {\n if (target._deferUpdates) {\n const dirtySub = target.subscribe(this.markDirty, this, 'dirty'),\n changeSub = target.subscribe(this.respondToChange, this)\n return {\n _target: target,\n dispose() {\n dirtySub.dispose()\n changeSub.dispose()\n }\n }\n } else {\n return target.subscribe(this.evaluatePossiblyAsync, this)\n }\n },\n evaluatePossiblyAsync() {\n const computedObservable = this,\n throttleEvaluationTimeout = computedObservable.throttleEvaluation\n if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {\n clearTimeout(this[computedState].evaluationTimeoutInstance)\n this[computedState].evaluationTimeoutInstance = safeSetTimeout(function () {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }, throttleEvaluationTimeout)\n } else if (computedObservable._evalDelayed) {\n computedObservable._evalDelayed(true /* notifyChange */)\n } else {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }\n },\n evaluateImmediate(notifyChange) {\n let state = this[computedState],\n disposeWhen = state.disposeWhen,\n changed = false\n\n if (state.isBeingEvaluated) {\n // If the evaluation of a ko.computed causes side effects, it's possible that it will trigger its own re-evaluation.\n // This is not desirable (it's hard for a developer to realise a chain of dependencies might cause this, and they almost\n // certainly didn't intend infinite re-evaluations). So, for predictability, we simply prevent ko.computeds from causing\n // their own re-evaluation. Further discussion at https://github.com/SteveSanderson/knockout/pull/387\n return\n }\n\n // Do not evaluate (and possibly capture new dependencies) if disposed\n if (state.isDisposed) {\n return\n }\n\n if (\n (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved)) ||\n (disposeWhen && disposeWhen())\n ) {\n // See comment above about suppressDisposalUntilDisposeWhenReturnsFalse\n if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {\n this.dispose()\n return\n }\n } else {\n // It just did return false, so we can stop suppressing now\n state.suppressDisposalUntilDisposeWhenReturnsFalse = false\n }\n\n state.isBeingEvaluated = true\n try {\n changed = this.evaluateImmediate_CallReadWithDependencyDetection(notifyChange)\n } finally {\n state.isBeingEvaluated = false\n }\n\n return changed\n },\n evaluateImmediate_CallReadWithDependencyDetection(notifyChange) {\n // This function is really just part of the evaluateImmediate logic. You would never call it from anywhere else.\n // Factoring it out into a separate function means it can be independent of the try/catch block in evaluateImmediate,\n // which contributes to saving about 40% off the CPU overhead of computed evaluation (on V8 at least).\n\n let state = this[computedState],\n changed = false\n\n // Initially, we assume that none of the subscriptions are still being used (i.e., all are candidates for disposal).\n // Then, during evaluation, we cross off any that are in fact still being used.\n const isInitial = state.pure ? undefined : !state.dependenciesCount, // If we're evaluating when there are no previous dependencies, it must be the first time\n dependencyDetectionContext = {\n computedObservable: this,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n }\n\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: this,\n isInitial: isInitial\n })\n\n state.dependencyTracking = {}\n state.dependenciesCount = 0\n\n const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext)\n\n if (!state.dependenciesCount) {\n this.dispose()\n changed = true // When evaluation causes a disposal, make sure all dependent computeds get notified so they'll see the new state\n } else {\n changed = this.isDifferent(state.latestValue, newValue)\n }\n\n if (changed) {\n if (!state.isSleeping) {\n this.notifySubscribers(state.latestValue, 'beforeChange')\n } else {\n this.updateVersion()\n }\n\n state.latestValue = newValue\n if (koOptions.debug) {\n this._latestValue = newValue\n }\n\n this.notifySubscribers(state.latestValue, 'spectate')\n\n if (!state.isSleeping && notifyChange) {\n this.notifySubscribers(state.latestValue)\n }\n\n if (this._recordUpdate) {\n this._recordUpdate()\n }\n }\n\n if (isInitial) {\n this.notifySubscribers(state.latestValue, 'awake')\n }\n\n return changed\n },\n evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext) {\n // This function is really part of the evaluateImmediate_CallReadWithDependencyDetection logic.\n // You'd never call it from anywhere else. Factoring it out means that evaluateImmediate_CallReadWithDependencyDetection\n // can be independent of try/finally blocks, which contributes to saving about 40% off the CPU\n // overhead of computed evaluation (on V8 at least).\n\n try {\n const readFunction = state.readFunction\n return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction()\n } finally {\n dependencyDetection.end()\n\n // For each subscription no longer being used, remove it from the active subscriptions list and dispose it\n if (dependencyDetectionContext.disposalCount && !state.isSleeping) {\n objectForEach(dependencyDetectionContext.disposalCandidates, computedDisposeDependencyCallback)\n }\n\n state.isStale = state.isDirty = false\n }\n },\n peek(forceEvaluate) {\n // Peek won't ordinarily re-evaluate, except while the computed is sleeping\n // or to get the initial value when \"deferEvaluation\" is set.\n const state = this[computedState]\n if (\n (state.isDirty && (forceEvaluate || !state.dependenciesCount)) ||\n (state.isSleeping && this.haveDependenciesChanged())\n ) {\n this.evaluateImmediate()\n }\n return state.latestValue\n },\n\n get [LATEST_VALUE]() {\n return this.peek()\n },\n\n limit(limitFunction) {\n const state = this[computedState]\n // Override the limit function with one that delays evaluation as well\n ;(subscribable.fn as any).limit.call(this, limitFunction)\n Object.assign(this, {\n _evalIfChanged() {\n if (!this[computedState].isSleeping) {\n if (this[computedState].isStale) {\n this.evaluateImmediate()\n } else {\n this[computedState].isDirty = false\n }\n }\n return state.latestValue\n },\n _evalDelayed(isChange) {\n this._limitBeforeChange(state.latestValue)\n\n // Mark as dirty\n state.isDirty = true\n if (isChange) {\n state.isStale = true\n }\n\n // Pass the observable to the \"limit\" code, which will evaluate it when\n // it's time to do the notification.\n this._limitChange(this, !isChange /* isDirty */)\n }\n })\n },\n dispose() {\n const state = this[computedState]\n if (!state.isSleeping && state.dependencyTracking) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n dependency.dispose()\n }\n })\n }\n if (state.disposeWhenNodeIsRemoved && state.domNodeDisposalCallback) {\n removeDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback)\n }\n Object.assign(state, DISPOSED_STATE)\n }\n}\n\nconst pureComputedOverrides = {\n beforeSubscriptionAdd(event: string) {\n // If asleep, wake up the computed by subscribing to any dependencies.\n const computedObservable = this,\n state = computedObservable[computedState]\n if (!state.isDisposed && state.isSleeping && event === 'change') {\n state.isSleeping = false\n if (state.isStale || computedObservable.haveDependenciesChanged()) {\n state.dependencyTracking = null\n state.dependenciesCount = 0\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n } else {\n // First put the dependencies in order\n const dependenciesOrder = new Array()\n objectForEach(state.dependencyTracking, function (id, dependency) {\n dependenciesOrder[dependency._order] = id\n })\n // Next, subscribe to each one\n arrayForEach(dependenciesOrder, function (id, order) {\n const dependency = state.dependencyTracking[id],\n subscription = computedObservable.subscribeToDependency(dependency._target)\n subscription._order = order\n subscription._version = dependency._version\n state.dependencyTracking[id] = subscription\n })\n\n // Waking dependencies may have triggered effects\n if (computedObservable.haveDependenciesChanged()) {\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n }\n }\n\n if (!state.isDisposed) {\n // test since evaluating could trigger disposal\n computedObservable.notifySubscribers(state.latestValue, 'awake')\n }\n }\n },\n afterSubscriptionRemove(event: string) {\n const state = this[computedState]\n if (!state.isDisposed && event === 'change' && !this.hasSubscriptionsForEvent('change')) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n state.dependencyTracking[id] = {\n _target: dependency._target,\n _order: dependency._order,\n _version: dependency._version\n }\n dependency.dispose()\n }\n })\n state.isSleeping = true\n this.notifySubscribers(undefined, 'asleep')\n }\n },\n getVersion() {\n // Because a pure computed is not automatically updated while it is sleeping, we can't\n // simply return the version number. Instead, we check if any of the dependencies have\n // changed and conditionally re-evaluate the computed observable.\n const state = this[computedState]\n if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) {\n this.evaluateImmediate()\n }\n return subscribable.fn.getVersion.call(this)\n }\n}\n\nconst deferEvaluationOverrides = {\n beforeSubscriptionAdd(event) {\n // This will force a computed with deferEvaluation to evaluate when the first subscription is registered.\n if (event === 'change' || event === 'beforeChange') {\n this.peek()\n }\n }\n}\n\nObject.setPrototypeOf(computed.fn, subscribable.fn)\n\n// Set the proto values for ko.computed\nconst protoProp = observable.protoProperty // == \"__ko_proto__\"\ncomputed.fn[protoProp] = computed\n\n/* This is used by ko.isObservable */\nobservable.observablePrototypes.add(computed as any)\n\nexport function isComputed<T = any>(instance: any): instance is Computed<T> {\n return typeof instance === 'function' && instance[protoProp] === computed\n}\n\nexport function isPureComputed<T = any>(instance: any): instance is PureComputed<T> {\n return isComputed(instance) && instance[computedState] && (instance[computedState] as unknown as State).pure\n}\n\nexport function pureComputed<T = any>(\n evaluatorFunctionOrOptions: ComputedOptions | ComputedReadFunction,\n evaluatorFunctionTarget?\n): Computed<T> {\n if (typeof evaluatorFunctionOrOptions === 'function') {\n const evaluator = evaluatorFunctionOrOptions as ComputedReadFunction\n return computed(evaluator, evaluatorFunctionTarget, { pure: true })\n } else {\n let options = evaluatorFunctionOrOptions as ComputedOptions\n options = extend({}, options) // make a copy of the parameter object\n options.pure = true\n return computed(options, evaluatorFunctionTarget)\n }\n}\n"], | ||
| "mappings": "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", | ||
| "names": ["subscribable"] | ||
| } |
+21
-21
@@ -1,2 +0,2 @@ | ||
| // @tko/computed 🥊 4.0.1 CommonJS | ||
| // @tko/computed 🥊 4.1.0 CommonJS | ||
| "use strict"; | ||
@@ -37,3 +37,3 @@ var __defProp = Object.defineProperty; | ||
| var import_observable = require("@tko/observable"); | ||
| var computedState = (0, import_utils.createSymbolOrString)("_state"); | ||
| var computedState = /* @__PURE__ */ Symbol("_state"); | ||
| var DISPOSED_STATE = { | ||
@@ -50,15 +50,15 @@ dependencyTracking: null, | ||
| }; | ||
| function computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, options2) { | ||
| function computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, options) { | ||
| if (typeof evaluatorFunctionOrOptions === "object") { | ||
| options2 = evaluatorFunctionOrOptions; | ||
| options = evaluatorFunctionOrOptions; | ||
| } else { | ||
| options2 = options2 || {}; | ||
| options = options || {}; | ||
| if (evaluatorFunctionOrOptions) { | ||
| options2.read = evaluatorFunctionOrOptions; | ||
| options.read = evaluatorFunctionOrOptions; | ||
| } | ||
| } | ||
| if (typeof (options2 == null ? void 0 : options2.read) !== "function") { | ||
| if (typeof (options == null ? void 0 : options.read) !== "function") { | ||
| throw Error("Pass a function that returns the value of the computed"); | ||
| } | ||
| const writeFunction = options2.write; | ||
| const writeFunction = options.write; | ||
| const state = { | ||
@@ -73,6 +73,6 @@ latestValue: void 0, | ||
| isSleeping: false, | ||
| readFunction: options2.read, | ||
| evaluatorFunctionTarget: evaluatorFunctionTarget || options2.owner, | ||
| disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options2.disposeWhen, | ||
| readFunction: options.read, | ||
| evaluatorFunctionTarget: evaluatorFunctionTarget || options.owner, | ||
| disposeWhenNodeIsRemoved: options.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options.disposeWhen, | ||
| domNodeDisposalCallback: null, | ||
@@ -108,7 +108,7 @@ dependencyTracking: {}, | ||
| Object.setPrototypeOf(computedObservable, computed.fn); | ||
| if (options2.pure) { | ||
| if (options.pure) { | ||
| state.pure = true; | ||
| state.isSleeping = true; | ||
| (0, import_utils.extend)(computedObservable, pureComputedOverrides); | ||
| } else if (options2.deferEvaluation) { | ||
| } else if (options.deferEvaluation) { | ||
| (0, import_utils.extend)(computedObservable, deferEvaluationOverrides); | ||
@@ -120,3 +120,3 @@ } | ||
| if (import_utils.options.debug) { | ||
| computedObservable._options = options2; | ||
| computedObservable._options = options; | ||
| } | ||
@@ -129,3 +129,3 @@ if (state.disposeWhenNodeIsRemoved) { | ||
| } | ||
| if (!state.isSleeping && !options2.deferEvaluation) { | ||
| if (!state.isSleeping && !options.deferEvaluation) { | ||
| ; | ||
@@ -471,6 +471,6 @@ computedObservable.evaluateImmediate(); | ||
| } else { | ||
| let options2 = evaluatorFunctionOrOptions; | ||
| options2 = (0, import_utils.extend)({}, options2); | ||
| options2.pure = true; | ||
| return computed(options2, evaluatorFunctionTarget); | ||
| let options = evaluatorFunctionOrOptions; | ||
| options = (0, import_utils.extend)({}, options); | ||
| options.pure = true; | ||
| return computed(options, evaluatorFunctionTarget); | ||
| } | ||
@@ -540,3 +540,3 @@ } | ||
| }, | ||
| deleteProperty(property) { | ||
| deleteProperty(_target, property) { | ||
| delete mirror[property]; | ||
@@ -543,0 +543,0 @@ return delete object[property]; |
| { | ||
| "version": 3, | ||
| "sources": ["../index.ts", "../src/computed.ts", "../src/throttleExtender.ts", "../src/proxy.ts", "../src/when.ts"], | ||
| "sourcesContent": ["export * from './src'\n", "//\n// Computed Observable Values\n//\n// (before tko, `computed` was also known as `dependentObservable`)\n//\nimport {\n addDisposeCallback,\n arrayForEach,\n createSymbolOrString,\n domNodeIsAttachedToDocument,\n extend,\n options,\n hasOwnProperty,\n objectForEach,\n options as koOptions,\n removeDisposeCallback,\n safeSetTimeout\n} from '@tko/utils'\n\nimport {\n dependencyDetection,\n extenders,\n valuesArePrimitiveAndEqual,\n observable,\n subscribable,\n LATEST_VALUE\n} from '@tko/observable'\n\nimport type { Observable, Subscribable } from '@tko/observable'\n\nconst computedState: symbol = createSymbolOrString('_state')\nconst DISPOSED_STATE = {\n dependencyTracking: null,\n dependenciesCount: 0,\n isDisposed: true,\n isStale: false,\n isDirty: false,\n isSleeping: false,\n disposeWhenNodeIsRemoved: null,\n readFunction: null,\n _options: null\n}\n\nexport interface Computed<T = any> extends ComputedFunctions<T> {\n (): T\n (value: T): this\n}\n\nexport interface ComputedFunctions<T = any> extends Subscribable<T> {\n // It's possible for a to be undefined, since the equalityComparer is run on the initial\n // computation with undefined as the first argument. This is user-relevant for deferred computeds.\n equalityComparer(a: T | undefined, b: T): boolean\n peek(): T\n dispose(): void\n isActive(): boolean\n getDependenciesCount(): number\n getDependencies(): Subscribable[]\n}\n\n// used in computed, but empty interface is pointless. Check if it's needed\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PureComputed<T = any> extends Computed<T> {}\n\nexport type ComputedReadFunction<T = any, TTarget = void> =\n | Subscribable<T>\n | Observable<T>\n | Computed<T>\n | ((this: TTarget) => T)\nexport type ComputedWriteFunction<T = any, TTarget = void> = (this: TTarget, val: T) => void\nexport type MaybeComputed<T = any> = T | Computed<T>\n\nexport interface ComputedOptions<T = any, TTarget = void> {\n read?: ComputedReadFunction<T, TTarget>\n write?: ComputedWriteFunction<T, TTarget>\n owner?: TTarget\n pure?: boolean\n deferEvaluation?: boolean\n disposeWhenNodeIsRemoved?: Node\n disposeWhen?: () => boolean\n}\n\ninterface State {\n latestValue?: any\n isStale: boolean\n isDirty: boolean\n isBeingEvaluated: boolean\n suppressDisposalUntilDisposeWhenReturnsFalse: boolean\n isDisposed: boolean\n pure: boolean\n isSleeping: boolean\n readFunction: ComputedReadFunction\n evaluatorFunctionTarget: any\n disposeWhenNodeIsRemoved: Node | null\n disposeWhen?: () => boolean\n domNodeDisposalCallback: (() => void) | null\n dependencyTracking: any\n dependenciesCount: number\n evaluationTimeoutInstance: any\n}\n\nexport function computed(\n evaluatorFunctionOrOptions?: ComputedOptions<any, void> | ComputedReadFunction<any, any>,\n evaluatorFunctionTarget?: any,\n options?: ComputedOptions\n): Computed {\n if (typeof evaluatorFunctionOrOptions === 'object') {\n // Single-parameter syntax - everything is on this \"options\" param\n options = evaluatorFunctionOrOptions as ComputedOptions\n } else {\n // Multi-parameter syntax - construct the options according to the params passed\n options = options || {}\n if (evaluatorFunctionOrOptions) {\n options!.read = evaluatorFunctionOrOptions\n }\n }\n if (typeof options?.read !== 'function') {\n throw Error('Pass a function that returns the value of the computed')\n }\n\n const writeFunction = options.write\n const state: State = {\n latestValue: undefined,\n isStale: true,\n isDirty: true,\n isBeingEvaluated: false,\n suppressDisposalUntilDisposeWhenReturnsFalse: false,\n isDisposed: false,\n pure: false,\n isSleeping: false,\n readFunction: options.read,\n evaluatorFunctionTarget: evaluatorFunctionTarget || options.owner,\n disposeWhenNodeIsRemoved: options.disposeWhenNodeIsRemoved || null,\n disposeWhen: options.disposeWhen,\n domNodeDisposalCallback: null,\n dependencyTracking: {},\n dependenciesCount: 0,\n evaluationTimeoutInstance: null\n }\n\n function computedObservable() {\n if (arguments.length > 0) {\n if (typeof writeFunction === 'function') {\n // Writing a value\n writeFunction.apply(state.evaluatorFunctionTarget, arguments as any)\n } else {\n throw new Error(\n \"Cannot write a value to a computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\"\n )\n }\n return this // Permits chained assignments\n } else {\n // Reading the value\n if (!state.isDisposed) {\n dependencyDetection.registerDependency(computedObservable)\n }\n if (state.isDirty || (state.isSleeping && (computedObservable as any).haveDependenciesChanged())) {\n ;(computedObservable as any).evaluateImmediate()\n }\n return state.latestValue\n }\n }\n\n computedObservable[computedState] = state\n computedObservable.isWriteable = typeof writeFunction === 'function'\n\n subscribable.fn.init(computedObservable)\n\n // Inherit from 'computed'\n Object.setPrototypeOf(computedObservable, computed.fn)\n\n if (options.pure) {\n state.pure = true\n state.isSleeping = true // Starts off sleeping; will awake on the first subscription\n extend(computedObservable, pureComputedOverrides)\n } else if (options.deferEvaluation) {\n extend(computedObservable, deferEvaluationOverrides)\n }\n\n if (koOptions.deferUpdates) {\n extenders.deferred(computedObservable, true)\n }\n\n if (koOptions.debug) {\n // #1731 - Aid debugging by exposing the computed's options\n computedObservable._options = options\n }\n\n if (state.disposeWhenNodeIsRemoved) {\n // Since this computed is associated with a DOM node, and we don't want to dispose the computed\n // until the DOM node is *removed* from the document (as opposed to never having been in the document),\n // we'll prevent disposal until \"disposeWhen\" first returns false.\n state.suppressDisposalUntilDisposeWhenReturnsFalse = true\n\n // disposeWhenNodeIsRemoved: true can be used to opt into the \"only dispose after first false result\"\n // behavior even if there's no specific node to watch. In that case, clear the option so we don't try\n // to watch for a non-node's disposal. This technique is intended for KO's internal use only and shouldn't\n // be documented or used by application code, as it's likely to change in a future version of KO.\n if (!state.disposeWhenNodeIsRemoved.nodeType) {\n state.disposeWhenNodeIsRemoved = null\n }\n }\n\n // Evaluate, unless sleeping or deferEvaluation is true\n if (!state.isSleeping && !options.deferEvaluation) {\n ;(computedObservable as any).evaluateImmediate()\n }\n\n // Attach a DOM node disposal callback so that the computed will be proactively disposed as soon as the node is\n // removed using ko.removeNode. But skip if isActive is false (there will never be any dependencies to dispose).\n if (state.disposeWhenNodeIsRemoved && (computedObservable as any).isActive()) {\n addDisposeCallback(\n state.disposeWhenNodeIsRemoved,\n (state.domNodeDisposalCallback = function () {\n ;(computedObservable as any).dispose()\n })\n )\n }\n\n return computedObservable as unknown as Computed\n}\n\n// Utility function that disposes a given dependencyTracking entry\nfunction computedDisposeDependencyCallback(id, entryToDispose) {\n if (entryToDispose !== null && entryToDispose.dispose) {\n entryToDispose.dispose()\n }\n}\n\n// This function gets called each time a dependency is detected while evaluating a computed.\n// It's factored out as a shared function to avoid creating unnecessary function instances during evaluation.\nfunction computedBeginDependencyDetectionCallback(subscribable, id) {\n const computedObservable = this.computedObservable,\n state = computedObservable[computedState]\n if (!state.isDisposed) {\n if (this.disposalCount && this.disposalCandidates[id]) {\n // Don't want to dispose this subscription, as it's still being used\n computedObservable.addDependencyTracking(id, subscribable, this.disposalCandidates[id])\n this.disposalCandidates[id] = null // No need to actually delete the property - disposalCandidates is a transient object anyway\n --this.disposalCount\n } else if (!state.dependencyTracking[id]) {\n // Brand new subscription - add it\n computedObservable.addDependencyTracking(\n id,\n subscribable,\n state.isSleeping ? { _target: subscribable } : computedObservable.subscribeToDependency(subscribable)\n )\n }\n // If the observable we've accessed has a pending notification, ensure\n // we get notified of the actual final value (bypass equality checks)\n if (subscribable._notificationIsPending) {\n subscribable._notifyNextChangeIfValueIsDifferent()\n }\n }\n}\n\ncomputed.fn = {\n equalityComparer: valuesArePrimitiveAndEqual,\n getDependenciesCount(): number {\n return this[computedState].dependenciesCount\n },\n\n getDependencies() {\n const dependencyTracking = this[computedState].dependencyTracking\n const dependentObservables = new Array()\n\n objectForEach(dependencyTracking, function (id, dependency) {\n dependentObservables[dependency._order] = dependency._target\n })\n\n return dependentObservables\n },\n\n addDependencyTracking(id, target, trackingObj) {\n if (this[computedState].pure && target === this) {\n throw Error(\"A 'pure' computed must not be called recursively\")\n }\n\n this[computedState].dependencyTracking[id] = trackingObj\n trackingObj._order = this[computedState].dependenciesCount++\n trackingObj._version = target.getVersion()\n },\n haveDependenciesChanged() {\n let id,\n dependency,\n dependencyTracking = this[computedState].dependencyTracking\n for (id in dependencyTracking) {\n if (hasOwnProperty(dependencyTracking, id)) {\n dependency = dependencyTracking[id]\n if (\n (this._evalDelayed && dependency._target._notificationIsPending) ||\n dependency._target.hasChanged(dependency._version)\n ) {\n return true\n }\n }\n }\n return false\n },\n markDirty() {\n // Process \"dirty\" events if we can handle delayed notifications\n if (this._evalDelayed && !this[computedState].isBeingEvaluated) {\n this._evalDelayed(false /* notifyChange */)\n }\n },\n isActive() {\n const state = this[computedState]\n return state.isDirty || state.dependenciesCount > 0\n },\n respondToChange() {\n // Ignore \"change\" events if we've already scheduled a delayed notification\n if (!this._notificationIsPending) {\n this.evaluatePossiblyAsync()\n } else if (this[computedState].isDirty) {\n this[computedState].isStale = true\n }\n },\n subscribeToDependency(target) {\n if (target._deferUpdates) {\n const dirtySub = target.subscribe(this.markDirty, this, 'dirty'),\n changeSub = target.subscribe(this.respondToChange, this)\n return {\n _target: target,\n dispose() {\n dirtySub.dispose()\n changeSub.dispose()\n }\n }\n } else {\n return target.subscribe(this.evaluatePossiblyAsync, this)\n }\n },\n evaluatePossiblyAsync() {\n const computedObservable = this,\n throttleEvaluationTimeout = computedObservable.throttleEvaluation\n if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {\n clearTimeout(this[computedState].evaluationTimeoutInstance)\n this[computedState].evaluationTimeoutInstance = safeSetTimeout(function () {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }, throttleEvaluationTimeout)\n } else if (computedObservable._evalDelayed) {\n computedObservable._evalDelayed(true /* notifyChange */)\n } else {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }\n },\n evaluateImmediate(notifyChange) {\n let state = this[computedState],\n disposeWhen = state.disposeWhen,\n changed = false\n\n if (state.isBeingEvaluated) {\n // If the evaluation of a ko.computed causes side effects, it's possible that it will trigger its own re-evaluation.\n // This is not desirable (it's hard for a developer to realise a chain of dependencies might cause this, and they almost\n // certainly didn't intend infinite re-evaluations). So, for predictability, we simply prevent ko.computeds from causing\n // their own re-evaluation. Further discussion at https://github.com/SteveSanderson/knockout/pull/387\n return\n }\n\n // Do not evaluate (and possibly capture new dependencies) if disposed\n if (state.isDisposed) {\n return\n }\n\n if (\n (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved)) ||\n (disposeWhen && disposeWhen())\n ) {\n // See comment above about suppressDisposalUntilDisposeWhenReturnsFalse\n if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {\n this.dispose()\n return\n }\n } else {\n // It just did return false, so we can stop suppressing now\n state.suppressDisposalUntilDisposeWhenReturnsFalse = false\n }\n\n state.isBeingEvaluated = true\n try {\n changed = this.evaluateImmediate_CallReadWithDependencyDetection(notifyChange)\n } finally {\n state.isBeingEvaluated = false\n }\n\n return changed\n },\n evaluateImmediate_CallReadWithDependencyDetection(notifyChange) {\n // This function is really just part of the evaluateImmediate logic. You would never call it from anywhere else.\n // Factoring it out into a separate function means it can be independent of the try/catch block in evaluateImmediate,\n // which contributes to saving about 40% off the CPU overhead of computed evaluation (on V8 at least).\n\n let state = this[computedState],\n changed = false\n\n // Initially, we assume that none of the subscriptions are still being used (i.e., all are candidates for disposal).\n // Then, during evaluation, we cross off any that are in fact still being used.\n const isInitial = state.pure ? undefined : !state.dependenciesCount, // If we're evaluating when there are no previous dependencies, it must be the first time\n dependencyDetectionContext = {\n computedObservable: this,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n }\n\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: this,\n isInitial: isInitial\n })\n\n state.dependencyTracking = {}\n state.dependenciesCount = 0\n\n const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext)\n\n if (!state.dependenciesCount) {\n this.dispose()\n changed = true // When evaluation causes a disposal, make sure all dependent computeds get notified so they'll see the new state\n } else {\n changed = this.isDifferent(state.latestValue, newValue)\n }\n\n if (changed) {\n if (!state.isSleeping) {\n this.notifySubscribers(state.latestValue, 'beforeChange')\n } else {\n this.updateVersion()\n }\n\n state.latestValue = newValue\n if (options.debug) {\n this._latestValue = newValue\n }\n\n this.notifySubscribers(state.latestValue, 'spectate')\n\n if (!state.isSleeping && notifyChange) {\n this.notifySubscribers(state.latestValue)\n }\n\n if (this._recordUpdate) {\n this._recordUpdate()\n }\n }\n\n if (isInitial) {\n this.notifySubscribers(state.latestValue, 'awake')\n }\n\n return changed\n },\n evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext) {\n // This function is really part of the evaluateImmediate_CallReadWithDependencyDetection logic.\n // You'd never call it from anywhere else. Factoring it out means that evaluateImmediate_CallReadWithDependencyDetection\n // can be independent of try/finally blocks, which contributes to saving about 40% off the CPU\n // overhead of computed evaluation (on V8 at least).\n\n try {\n const readFunction = state.readFunction\n return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction()\n } finally {\n dependencyDetection.end()\n\n // For each subscription no longer being used, remove it from the active subscriptions list and dispose it\n if (dependencyDetectionContext.disposalCount && !state.isSleeping) {\n objectForEach(dependencyDetectionContext.disposalCandidates, computedDisposeDependencyCallback)\n }\n\n state.isStale = state.isDirty = false\n }\n },\n peek(forceEvaluate) {\n // Peek won't ordinarily re-evaluate, except while the computed is sleeping\n // or to get the initial value when \"deferEvaluation\" is set.\n const state = this[computedState]\n if (\n (state.isDirty && (forceEvaluate || !state.dependenciesCount)) ||\n (state.isSleeping && this.haveDependenciesChanged())\n ) {\n this.evaluateImmediate()\n }\n return state.latestValue\n },\n\n get [LATEST_VALUE]() {\n return this.peek()\n },\n\n limit(limitFunction) {\n const state = this[computedState]\n // Override the limit function with one that delays evaluation as well\n ;(subscribable.fn as any).limit.call(this, limitFunction)\n Object.assign(this, {\n _evalIfChanged() {\n if (!this[computedState].isSleeping) {\n if (this[computedState].isStale) {\n this.evaluateImmediate()\n } else {\n this[computedState].isDirty = false\n }\n }\n return state.latestValue\n },\n _evalDelayed(isChange) {\n this._limitBeforeChange(state.latestValue)\n\n // Mark as dirty\n state.isDirty = true\n if (isChange) {\n state.isStale = true\n }\n\n // Pass the observable to the \"limit\" code, which will evaluate it when\n // it's time to do the notification.\n this._limitChange(this, !isChange /* isDirty */)\n }\n })\n },\n dispose() {\n const state = this[computedState]\n if (!state.isSleeping && state.dependencyTracking) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n dependency.dispose()\n }\n })\n }\n if (state.disposeWhenNodeIsRemoved && state.domNodeDisposalCallback) {\n removeDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback)\n }\n Object.assign(state, DISPOSED_STATE)\n }\n}\n\nconst pureComputedOverrides = {\n beforeSubscriptionAdd(event: string) {\n // If asleep, wake up the computed by subscribing to any dependencies.\n const computedObservable = this,\n state = computedObservable[computedState]\n if (!state.isDisposed && state.isSleeping && event === 'change') {\n state.isSleeping = false\n if (state.isStale || computedObservable.haveDependenciesChanged()) {\n state.dependencyTracking = null\n state.dependenciesCount = 0\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n } else {\n // First put the dependencies in order\n const dependenciesOrder = new Array()\n objectForEach(state.dependencyTracking, function (id, dependency) {\n dependenciesOrder[dependency._order] = id\n })\n // Next, subscribe to each one\n arrayForEach(dependenciesOrder, function (id, order) {\n const dependency = state.dependencyTracking[id],\n subscription = computedObservable.subscribeToDependency(dependency._target)\n subscription._order = order\n subscription._version = dependency._version\n state.dependencyTracking[id] = subscription\n })\n\n // Waking dependencies may have triggered effects\n if (computedObservable.haveDependenciesChanged()) {\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n }\n }\n\n if (!state.isDisposed) {\n // test since evaluating could trigger disposal\n computedObservable.notifySubscribers(state.latestValue, 'awake')\n }\n }\n },\n afterSubscriptionRemove(event: string) {\n const state = this[computedState]\n if (!state.isDisposed && event === 'change' && !this.hasSubscriptionsForEvent('change')) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n state.dependencyTracking[id] = {\n _target: dependency._target,\n _order: dependency._order,\n _version: dependency._version\n }\n dependency.dispose()\n }\n })\n state.isSleeping = true\n this.notifySubscribers(undefined, 'asleep')\n }\n },\n getVersion() {\n // Because a pure computed is not automatically updated while it is sleeping, we can't\n // simply return the version number. Instead, we check if any of the dependencies have\n // changed and conditionally re-evaluate the computed observable.\n const state = this[computedState]\n if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) {\n this.evaluateImmediate()\n }\n return subscribable.fn.getVersion.call(this)\n }\n}\n\nconst deferEvaluationOverrides = {\n beforeSubscriptionAdd(event) {\n // This will force a computed with deferEvaluation to evaluate when the first subscription is registered.\n if (event === 'change' || event === 'beforeChange') {\n this.peek()\n }\n }\n}\n\nObject.setPrototypeOf(computed.fn, subscribable.fn)\n\n// Set the proto values for ko.computed\nconst protoProp = observable.protoProperty // == \"__ko_proto__\"\ncomputed.fn[protoProp] = computed\n\n/* This is used by ko.isObservable */\nobservable.observablePrototypes.add(computed as any)\n\nexport function isComputed<T = any>(instance: any): instance is Computed<T> {\n return typeof instance === 'function' && instance[protoProp] === computed\n}\n\nexport function isPureComputed<T = any>(instance: any): instance is PureComputed<T> {\n return isComputed(instance) && instance[computedState] && (instance[computedState] as unknown as State).pure\n}\n\nexport function pureComputed<T = any>(\n evaluatorFunctionOrOptions: ComputedOptions | ComputedReadFunction,\n evaluatorFunctionTarget?\n): Computed<T> {\n if (typeof evaluatorFunctionOrOptions === 'function') {\n const evaluator = evaluatorFunctionOrOptions as ComputedReadFunction\n return computed(evaluator, evaluatorFunctionTarget, { pure: true })\n } else {\n let options = evaluatorFunctionOrOptions as ComputedOptions\n options = extend({}, options) // make a copy of the parameter object\n options.pure = true\n return computed(options, evaluatorFunctionTarget)\n }\n}\n", "import { extenders as baseExtenders } from '@tko/observable'\nimport { computed } from './computed'\n\nexport function throttleExtender(target: any, timeout: number) {\n // Throttling means two things:\n\n // (1) For dependent observables, we throttle *evaluations* so that, no matter how fast its dependencies\n // notify updates, the target doesn't re-evaluate (and hence doesn't notify) faster than a certain rate\n target.throttleEvaluation = timeout\n\n // (2) For writable targets (observables, or writable dependent observables), we throttle *writes*\n // so the target cannot change value synchronously or faster than a certain rate\n let writeTimeoutInstance: ReturnType<typeof setTimeout> | undefined\n return computed({\n read: target,\n write: function (value) {\n clearTimeout(writeTimeoutInstance)\n writeTimeoutInstance = setTimeout(function () {\n target(value)\n }, timeout)\n }\n })\n}\n\nconst extenders = baseExtenders\n\nextenders.throttle = throttleExtender\n", "/**\n * Create an ES\n */\n\nimport { observable, observableArray, unwrap } from '@tko/observable'\n\nimport { computed } from './computed'\n\nconst PROXY_SYM = Symbol('Knockout Proxied Object')\nconst MIRROR_SYM = Symbol('Knockout Proxied Observables')\n\nfunction makeComputed(proxy, fn) {\n return computed({\n owner: proxy,\n read: fn,\n write: fn,\n pure: 'pure' in fn ? fn.pure : true,\n deferEvaluation: 'deferEvaluation' in fn ? fn.deferEvaluation : true\n }).extend({ deferred: true })\n}\n\nfunction setOrCreate(mirror, prop, value, proxy) {\n if (!mirror[prop]) {\n const ctr = Array.isArray(value)\n ? observableArray\n : typeof value === 'function'\n ? makeComputed.bind(null, proxy)\n : observable\n mirror[prop] = ctr(value)\n } else {\n mirror[prop](value)\n }\n}\n\nfunction assignOrUpdate(mirror, object, proxy) {\n for (const key of Object.keys(object)) {\n setOrCreate(mirror, key, object[key], proxy)\n }\n return object\n}\n\nexport function proxy(object) {\n const mirror = { [PROXY_SYM]: object }\n mirror[MIRROR_SYM] = mirror\n const proxy = new Proxy(function () {}, {\n has(target, prop) {\n return prop in mirror\n },\n get(target, prop) {\n return unwrap(mirror[prop])\n },\n set(target, prop, value, receiver) {\n setOrCreate(mirror, prop, value, proxy)\n object[prop] = value\n return true\n },\n deleteProperty(property) {\n delete mirror[property as any]\n return delete object[property as any]\n },\n apply(target, thisArg, [props]) {\n if (props) {\n assignOrUpdate(mirror, props, proxy)\n return Object.assign(object, props)\n }\n return object\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(object)\n },\n setPrototypeOf(target, proto) {\n return Object.setPrototypeOf(object, proto)\n },\n defineProperty(target, prop, desc) {\n return Object.defineProperty(object, prop, desc)\n },\n preventExtensions() {\n return Object.preventExtensions(object)\n },\n isExtensible() {\n return Object.isExtensible(object)\n },\n ownKeys() {\n return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]\n }\n })\n assignOrUpdate(mirror, object, proxy)\n return proxy\n}\n\nexport function getObservable(proxied, prop) {\n return proxied[MIRROR_SYM][prop]\n}\nexport function peek(proxied, prop) {\n return getObservable(proxied, prop).peek()\n}\nexport function isProxied(proxied) {\n return PROXY_SYM in proxied\n}\n\nObject.assign(proxy, { getObservable, peek, isProxied })\n", "import { pureComputed } from './computed'\n\nfunction kowhen(predicate, context, resolve) {\n const observable = pureComputed(predicate, context).extend({ notify: 'always' })\n const subscription = observable.subscribe(value => {\n if (value) {\n subscription.dispose()\n resolve(value)\n }\n })\n // In case the initial value is true, process it right away\n observable.notifySubscribers(observable.peek())\n return subscription\n}\n\nexport function when(predicate, callback, context) {\n const whenFn = kowhen.bind(null, predicate, context)\n return callback ? whenFn(callback.bind(context)) : new Promise(whenFn)\n}\n"], | ||
| "mappings": "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", | ||
| "names": ["options", "koOptions", "subscribable", "import_observable", "extenders", "baseExtenders", "import_observable", "proxy", "observable"] | ||
| "sourcesContent": ["export * from './src'\n", "//\n// Computed Observable Values\n//\n// (before tko, `computed` was also known as `dependentObservable`)\n//\nimport {\n addDisposeCallback,\n arrayForEach,\n domNodeIsAttachedToDocument,\n extend,\n hasOwnProperty,\n objectForEach,\n options as koOptions,\n removeDisposeCallback,\n safeSetTimeout\n} from '@tko/utils'\n\nimport {\n dependencyDetection,\n extenders,\n valuesArePrimitiveAndEqual,\n observable,\n subscribable,\n LATEST_VALUE\n} from '@tko/observable'\n\nimport type { Observable, Subscribable } from '@tko/observable'\n\nconst computedState: symbol = Symbol('_state')\nconst DISPOSED_STATE = {\n dependencyTracking: null,\n dependenciesCount: 0,\n isDisposed: true,\n isStale: false,\n isDirty: false,\n isSleeping: false,\n disposeWhenNodeIsRemoved: null,\n readFunction: null,\n _options: null\n}\n\nexport interface Computed<T = any> extends ComputedFunctions<T> {\n (): T\n (value: T): this\n}\n\nexport interface ComputedFunctions<T = any> extends Subscribable<T> {\n // It's possible for a to be undefined, since the equalityComparer is run on the initial\n // computation with undefined as the first argument. This is user-relevant for deferred computeds.\n equalityComparer(a: T | undefined, b: T): boolean\n peek(): T\n dispose(): void\n isActive(): boolean\n getDependenciesCount(): number\n getDependencies(): Subscribable[]\n}\n\n// used in computed, but empty interface is pointless. Check if it's needed\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PureComputed<T = any> extends Computed<T> {}\n\nexport type ComputedReadFunction<T = any, TTarget = void> =\n | Subscribable<T>\n | Observable<T>\n | Computed<T>\n | ((this: TTarget) => T)\nexport type ComputedWriteFunction<T = any, TTarget = void> = (this: TTarget, val: T) => void\nexport type MaybeComputed<T = any> = T | Computed<T>\n\nexport interface ComputedOptions<T = any, TTarget = void> {\n read?: ComputedReadFunction<T, TTarget>\n write?: ComputedWriteFunction<T, TTarget>\n owner?: TTarget\n pure?: boolean\n deferEvaluation?: boolean\n disposeWhenNodeIsRemoved?: Node\n disposeWhen?: () => boolean\n}\n\ninterface State {\n latestValue?: any\n isStale: boolean\n isDirty: boolean\n isBeingEvaluated: boolean\n suppressDisposalUntilDisposeWhenReturnsFalse: boolean\n isDisposed: boolean\n pure: boolean\n isSleeping: boolean\n readFunction: ComputedReadFunction\n evaluatorFunctionTarget: any\n disposeWhenNodeIsRemoved: Node | null\n disposeWhen?: () => boolean\n domNodeDisposalCallback: (() => void) | null\n dependencyTracking: any\n dependenciesCount: number\n evaluationTimeoutInstance: any\n}\n\nexport function computed(\n evaluatorFunctionOrOptions?: ComputedOptions<any, void> | ComputedReadFunction<any, any>,\n evaluatorFunctionTarget?: any,\n options?: ComputedOptions\n): Computed {\n if (typeof evaluatorFunctionOrOptions === 'object') {\n // Single-parameter syntax - everything is on this \"options\" param\n options = evaluatorFunctionOrOptions as ComputedOptions\n } else {\n // Multi-parameter syntax - construct the options according to the params passed\n options = options || {}\n if (evaluatorFunctionOrOptions) {\n options!.read = evaluatorFunctionOrOptions\n }\n }\n if (typeof options?.read !== 'function') {\n throw Error('Pass a function that returns the value of the computed')\n }\n\n const writeFunction = options.write\n const state: State = {\n latestValue: undefined,\n isStale: true,\n isDirty: true,\n isBeingEvaluated: false,\n suppressDisposalUntilDisposeWhenReturnsFalse: false,\n isDisposed: false,\n pure: false,\n isSleeping: false,\n readFunction: options.read,\n evaluatorFunctionTarget: evaluatorFunctionTarget || options.owner,\n disposeWhenNodeIsRemoved: options.disposeWhenNodeIsRemoved || null,\n disposeWhen: options.disposeWhen,\n domNodeDisposalCallback: null,\n dependencyTracking: {},\n dependenciesCount: 0,\n evaluationTimeoutInstance: null\n }\n\n function computedObservable() {\n if (arguments.length > 0) {\n if (typeof writeFunction === 'function') {\n // Writing a value\n writeFunction.apply(state.evaluatorFunctionTarget, arguments as any)\n } else {\n throw new Error(\n \"Cannot write a value to a computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\"\n )\n }\n return this // Permits chained assignments\n } else {\n // Reading the value\n if (!state.isDisposed) {\n dependencyDetection.registerDependency(computedObservable)\n }\n if (state.isDirty || (state.isSleeping && (computedObservable as any).haveDependenciesChanged())) {\n ;(computedObservable as any).evaluateImmediate()\n }\n return state.latestValue\n }\n }\n\n computedObservable[computedState] = state\n computedObservable.isWriteable = typeof writeFunction === 'function'\n\n subscribable.fn.init(computedObservable)\n\n // Inherit from 'computed'\n Object.setPrototypeOf(computedObservable, computed.fn)\n\n if (options.pure) {\n state.pure = true\n state.isSleeping = true // Starts off sleeping; will awake on the first subscription\n extend(computedObservable, pureComputedOverrides)\n } else if (options.deferEvaluation) {\n extend(computedObservable, deferEvaluationOverrides)\n }\n\n if (koOptions.deferUpdates) {\n extenders.deferred(computedObservable, true)\n }\n\n if (koOptions.debug) {\n // #1731 - Aid debugging by exposing the computed's options\n computedObservable._options = options\n }\n\n if (state.disposeWhenNodeIsRemoved) {\n // Since this computed is associated with a DOM node, and we don't want to dispose the computed\n // until the DOM node is *removed* from the document (as opposed to never having been in the document),\n // we'll prevent disposal until \"disposeWhen\" first returns false.\n state.suppressDisposalUntilDisposeWhenReturnsFalse = true\n\n // disposeWhenNodeIsRemoved: true can be used to opt into the \"only dispose after first false result\"\n // behavior even if there's no specific node to watch. In that case, clear the option so we don't try\n // to watch for a non-node's disposal. This technique is intended for KO's internal use only and shouldn't\n // be documented or used by application code, as it's likely to change in a future version of KO.\n if (!state.disposeWhenNodeIsRemoved.nodeType) {\n state.disposeWhenNodeIsRemoved = null\n }\n }\n\n // Evaluate, unless sleeping or deferEvaluation is true\n if (!state.isSleeping && !options.deferEvaluation) {\n ;(computedObservable as any).evaluateImmediate()\n }\n\n // Attach a DOM node disposal callback so that the computed will be proactively disposed as soon as the node is\n // removed using ko.removeNode. But skip if isActive is false (there will never be any dependencies to dispose).\n if (state.disposeWhenNodeIsRemoved && (computedObservable as any).isActive()) {\n addDisposeCallback(\n state.disposeWhenNodeIsRemoved,\n (state.domNodeDisposalCallback = function () {\n ;(computedObservable as any).dispose()\n })\n )\n }\n\n return computedObservable as unknown as Computed\n}\n\n// Utility function that disposes a given dependencyTracking entry\nfunction computedDisposeDependencyCallback(id, entryToDispose) {\n if (entryToDispose !== null && entryToDispose.dispose) {\n entryToDispose.dispose()\n }\n}\n\n// This function gets called each time a dependency is detected while evaluating a computed.\n// It's factored out as a shared function to avoid creating unnecessary function instances during evaluation.\nfunction computedBeginDependencyDetectionCallback(subscribable, id) {\n const computedObservable = this.computedObservable,\n state = computedObservable[computedState]\n if (!state.isDisposed) {\n if (this.disposalCount && this.disposalCandidates[id]) {\n // Don't want to dispose this subscription, as it's still being used\n computedObservable.addDependencyTracking(id, subscribable, this.disposalCandidates[id])\n this.disposalCandidates[id] = null // No need to actually delete the property - disposalCandidates is a transient object anyway\n --this.disposalCount\n } else if (!state.dependencyTracking[id]) {\n // Brand new subscription - add it\n computedObservable.addDependencyTracking(\n id,\n subscribable,\n state.isSleeping ? { _target: subscribable } : computedObservable.subscribeToDependency(subscribable)\n )\n }\n // If the observable we've accessed has a pending notification, ensure\n // we get notified of the actual final value (bypass equality checks)\n if (subscribable._notificationIsPending) {\n subscribable._notifyNextChangeIfValueIsDifferent()\n }\n }\n}\n\ncomputed.fn = {\n equalityComparer: valuesArePrimitiveAndEqual,\n getDependenciesCount(): number {\n return this[computedState].dependenciesCount\n },\n\n getDependencies() {\n const dependencyTracking = this[computedState].dependencyTracking\n const dependentObservables = new Array()\n\n objectForEach(dependencyTracking, function (id, dependency) {\n dependentObservables[dependency._order] = dependency._target\n })\n\n return dependentObservables\n },\n\n addDependencyTracking(id, target, trackingObj) {\n if (this[computedState].pure && target === this) {\n throw Error(\"A 'pure' computed must not be called recursively\")\n }\n\n this[computedState].dependencyTracking[id] = trackingObj\n trackingObj._order = this[computedState].dependenciesCount++\n trackingObj._version = target.getVersion()\n },\n haveDependenciesChanged() {\n let id,\n dependency,\n dependencyTracking = this[computedState].dependencyTracking\n for (id in dependencyTracking) {\n if (hasOwnProperty(dependencyTracking, id)) {\n dependency = dependencyTracking[id]\n if (\n (this._evalDelayed && dependency._target._notificationIsPending) ||\n dependency._target.hasChanged(dependency._version)\n ) {\n return true\n }\n }\n }\n return false\n },\n markDirty() {\n // Process \"dirty\" events if we can handle delayed notifications\n if (this._evalDelayed && !this[computedState].isBeingEvaluated) {\n this._evalDelayed(false /* notifyChange */)\n }\n },\n isActive() {\n const state = this[computedState]\n return state.isDirty || state.dependenciesCount > 0\n },\n respondToChange() {\n // Ignore \"change\" events if we've already scheduled a delayed notification\n if (!this._notificationIsPending) {\n this.evaluatePossiblyAsync()\n } else if (this[computedState].isDirty) {\n this[computedState].isStale = true\n }\n },\n subscribeToDependency(target) {\n if (target._deferUpdates) {\n const dirtySub = target.subscribe(this.markDirty, this, 'dirty'),\n changeSub = target.subscribe(this.respondToChange, this)\n return {\n _target: target,\n dispose() {\n dirtySub.dispose()\n changeSub.dispose()\n }\n }\n } else {\n return target.subscribe(this.evaluatePossiblyAsync, this)\n }\n },\n evaluatePossiblyAsync() {\n const computedObservable = this,\n throttleEvaluationTimeout = computedObservable.throttleEvaluation\n if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {\n clearTimeout(this[computedState].evaluationTimeoutInstance)\n this[computedState].evaluationTimeoutInstance = safeSetTimeout(function () {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }, throttleEvaluationTimeout)\n } else if (computedObservable._evalDelayed) {\n computedObservable._evalDelayed(true /* notifyChange */)\n } else {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }\n },\n evaluateImmediate(notifyChange) {\n let state = this[computedState],\n disposeWhen = state.disposeWhen,\n changed = false\n\n if (state.isBeingEvaluated) {\n // If the evaluation of a ko.computed causes side effects, it's possible that it will trigger its own re-evaluation.\n // This is not desirable (it's hard for a developer to realise a chain of dependencies might cause this, and they almost\n // certainly didn't intend infinite re-evaluations). So, for predictability, we simply prevent ko.computeds from causing\n // their own re-evaluation. Further discussion at https://github.com/SteveSanderson/knockout/pull/387\n return\n }\n\n // Do not evaluate (and possibly capture new dependencies) if disposed\n if (state.isDisposed) {\n return\n }\n\n if (\n (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved)) ||\n (disposeWhen && disposeWhen())\n ) {\n // See comment above about suppressDisposalUntilDisposeWhenReturnsFalse\n if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {\n this.dispose()\n return\n }\n } else {\n // It just did return false, so we can stop suppressing now\n state.suppressDisposalUntilDisposeWhenReturnsFalse = false\n }\n\n state.isBeingEvaluated = true\n try {\n changed = this.evaluateImmediate_CallReadWithDependencyDetection(notifyChange)\n } finally {\n state.isBeingEvaluated = false\n }\n\n return changed\n },\n evaluateImmediate_CallReadWithDependencyDetection(notifyChange) {\n // This function is really just part of the evaluateImmediate logic. You would never call it from anywhere else.\n // Factoring it out into a separate function means it can be independent of the try/catch block in evaluateImmediate,\n // which contributes to saving about 40% off the CPU overhead of computed evaluation (on V8 at least).\n\n let state = this[computedState],\n changed = false\n\n // Initially, we assume that none of the subscriptions are still being used (i.e., all are candidates for disposal).\n // Then, during evaluation, we cross off any that are in fact still being used.\n const isInitial = state.pure ? undefined : !state.dependenciesCount, // If we're evaluating when there are no previous dependencies, it must be the first time\n dependencyDetectionContext = {\n computedObservable: this,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n }\n\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: this,\n isInitial: isInitial\n })\n\n state.dependencyTracking = {}\n state.dependenciesCount = 0\n\n const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext)\n\n if (!state.dependenciesCount) {\n this.dispose()\n changed = true // When evaluation causes a disposal, make sure all dependent computeds get notified so they'll see the new state\n } else {\n changed = this.isDifferent(state.latestValue, newValue)\n }\n\n if (changed) {\n if (!state.isSleeping) {\n this.notifySubscribers(state.latestValue, 'beforeChange')\n } else {\n this.updateVersion()\n }\n\n state.latestValue = newValue\n if (koOptions.debug) {\n this._latestValue = newValue\n }\n\n this.notifySubscribers(state.latestValue, 'spectate')\n\n if (!state.isSleeping && notifyChange) {\n this.notifySubscribers(state.latestValue)\n }\n\n if (this._recordUpdate) {\n this._recordUpdate()\n }\n }\n\n if (isInitial) {\n this.notifySubscribers(state.latestValue, 'awake')\n }\n\n return changed\n },\n evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext) {\n // This function is really part of the evaluateImmediate_CallReadWithDependencyDetection logic.\n // You'd never call it from anywhere else. Factoring it out means that evaluateImmediate_CallReadWithDependencyDetection\n // can be independent of try/finally blocks, which contributes to saving about 40% off the CPU\n // overhead of computed evaluation (on V8 at least).\n\n try {\n const readFunction = state.readFunction\n return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction()\n } finally {\n dependencyDetection.end()\n\n // For each subscription no longer being used, remove it from the active subscriptions list and dispose it\n if (dependencyDetectionContext.disposalCount && !state.isSleeping) {\n objectForEach(dependencyDetectionContext.disposalCandidates, computedDisposeDependencyCallback)\n }\n\n state.isStale = state.isDirty = false\n }\n },\n peek(forceEvaluate) {\n // Peek won't ordinarily re-evaluate, except while the computed is sleeping\n // or to get the initial value when \"deferEvaluation\" is set.\n const state = this[computedState]\n if (\n (state.isDirty && (forceEvaluate || !state.dependenciesCount)) ||\n (state.isSleeping && this.haveDependenciesChanged())\n ) {\n this.evaluateImmediate()\n }\n return state.latestValue\n },\n\n get [LATEST_VALUE]() {\n return this.peek()\n },\n\n limit(limitFunction) {\n const state = this[computedState]\n // Override the limit function with one that delays evaluation as well\n ;(subscribable.fn as any).limit.call(this, limitFunction)\n Object.assign(this, {\n _evalIfChanged() {\n if (!this[computedState].isSleeping) {\n if (this[computedState].isStale) {\n this.evaluateImmediate()\n } else {\n this[computedState].isDirty = false\n }\n }\n return state.latestValue\n },\n _evalDelayed(isChange) {\n this._limitBeforeChange(state.latestValue)\n\n // Mark as dirty\n state.isDirty = true\n if (isChange) {\n state.isStale = true\n }\n\n // Pass the observable to the \"limit\" code, which will evaluate it when\n // it's time to do the notification.\n this._limitChange(this, !isChange /* isDirty */)\n }\n })\n },\n dispose() {\n const state = this[computedState]\n if (!state.isSleeping && state.dependencyTracking) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n dependency.dispose()\n }\n })\n }\n if (state.disposeWhenNodeIsRemoved && state.domNodeDisposalCallback) {\n removeDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback)\n }\n Object.assign(state, DISPOSED_STATE)\n }\n}\n\nconst pureComputedOverrides = {\n beforeSubscriptionAdd(event: string) {\n // If asleep, wake up the computed by subscribing to any dependencies.\n const computedObservable = this,\n state = computedObservable[computedState]\n if (!state.isDisposed && state.isSleeping && event === 'change') {\n state.isSleeping = false\n if (state.isStale || computedObservable.haveDependenciesChanged()) {\n state.dependencyTracking = null\n state.dependenciesCount = 0\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n } else {\n // First put the dependencies in order\n const dependenciesOrder = new Array()\n objectForEach(state.dependencyTracking, function (id, dependency) {\n dependenciesOrder[dependency._order] = id\n })\n // Next, subscribe to each one\n arrayForEach(dependenciesOrder, function (id, order) {\n const dependency = state.dependencyTracking[id],\n subscription = computedObservable.subscribeToDependency(dependency._target)\n subscription._order = order\n subscription._version = dependency._version\n state.dependencyTracking[id] = subscription\n })\n\n // Waking dependencies may have triggered effects\n if (computedObservable.haveDependenciesChanged()) {\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n }\n }\n\n if (!state.isDisposed) {\n // test since evaluating could trigger disposal\n computedObservable.notifySubscribers(state.latestValue, 'awake')\n }\n }\n },\n afterSubscriptionRemove(event: string) {\n const state = this[computedState]\n if (!state.isDisposed && event === 'change' && !this.hasSubscriptionsForEvent('change')) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n state.dependencyTracking[id] = {\n _target: dependency._target,\n _order: dependency._order,\n _version: dependency._version\n }\n dependency.dispose()\n }\n })\n state.isSleeping = true\n this.notifySubscribers(undefined, 'asleep')\n }\n },\n getVersion() {\n // Because a pure computed is not automatically updated while it is sleeping, we can't\n // simply return the version number. Instead, we check if any of the dependencies have\n // changed and conditionally re-evaluate the computed observable.\n const state = this[computedState]\n if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) {\n this.evaluateImmediate()\n }\n return subscribable.fn.getVersion.call(this)\n }\n}\n\nconst deferEvaluationOverrides = {\n beforeSubscriptionAdd(event) {\n // This will force a computed with deferEvaluation to evaluate when the first subscription is registered.\n if (event === 'change' || event === 'beforeChange') {\n this.peek()\n }\n }\n}\n\nObject.setPrototypeOf(computed.fn, subscribable.fn)\n\n// Set the proto values for ko.computed\nconst protoProp = observable.protoProperty // == \"__ko_proto__\"\ncomputed.fn[protoProp] = computed\n\n/* This is used by ko.isObservable */\nobservable.observablePrototypes.add(computed as any)\n\nexport function isComputed<T = any>(instance: any): instance is Computed<T> {\n return typeof instance === 'function' && instance[protoProp] === computed\n}\n\nexport function isPureComputed<T = any>(instance: any): instance is PureComputed<T> {\n return isComputed(instance) && instance[computedState] && (instance[computedState] as unknown as State).pure\n}\n\nexport function pureComputed<T = any>(\n evaluatorFunctionOrOptions: ComputedOptions | ComputedReadFunction,\n evaluatorFunctionTarget?\n): Computed<T> {\n if (typeof evaluatorFunctionOrOptions === 'function') {\n const evaluator = evaluatorFunctionOrOptions as ComputedReadFunction\n return computed(evaluator, evaluatorFunctionTarget, { pure: true })\n } else {\n let options = evaluatorFunctionOrOptions as ComputedOptions\n options = extend({}, options) // make a copy of the parameter object\n options.pure = true\n return computed(options, evaluatorFunctionTarget)\n }\n}\n", "import { extenders as baseExtenders } from '@tko/observable'\nimport { computed } from './computed'\n\nexport function throttleExtender(target: any, timeout: number) {\n // Throttling means two things:\n\n // (1) For dependent observables, we throttle *evaluations* so that, no matter how fast its dependencies\n // notify updates, the target doesn't re-evaluate (and hence doesn't notify) faster than a certain rate\n target.throttleEvaluation = timeout\n\n // (2) For writable targets (observables, or writable dependent observables), we throttle *writes*\n // so the target cannot change value synchronously or faster than a certain rate\n let writeTimeoutInstance: ReturnType<typeof setTimeout> | undefined\n return computed({\n read: target,\n write: function (value) {\n clearTimeout(writeTimeoutInstance)\n writeTimeoutInstance = setTimeout(function () {\n target(value)\n }, timeout)\n }\n })\n}\n\nconst extenders = baseExtenders\n\nextenders.throttle = throttleExtender\n", "/**\n * Create an ES\n */\n\nimport { observable, observableArray, unwrap } from '@tko/observable'\n\nimport { computed } from './computed'\n\nconst PROXY_SYM = Symbol('Knockout Proxied Object')\nconst MIRROR_SYM = Symbol('Knockout Proxied Observables')\n\nfunction makeComputed(proxy, fn) {\n return computed({\n owner: proxy,\n read: fn,\n write: fn,\n pure: 'pure' in fn ? fn.pure : true,\n deferEvaluation: 'deferEvaluation' in fn ? fn.deferEvaluation : true\n }).extend({ deferred: true })\n}\n\nfunction setOrCreate(mirror, prop, value, proxy) {\n if (!mirror[prop]) {\n const ctr = Array.isArray(value)\n ? observableArray\n : typeof value === 'function'\n ? makeComputed.bind(null, proxy)\n : observable\n mirror[prop] = ctr(value)\n } else {\n mirror[prop](value)\n }\n}\n\nfunction assignOrUpdate(mirror, object, proxy) {\n for (const key of Object.keys(object)) {\n setOrCreate(mirror, key, object[key], proxy)\n }\n return object\n}\n\nexport function proxy(object) {\n const mirror = { [PROXY_SYM]: object }\n mirror[MIRROR_SYM] = mirror\n const proxy = new Proxy(function () {}, {\n has(target, prop) {\n return prop in mirror\n },\n get(target, prop) {\n return unwrap(mirror[prop])\n },\n set(target, prop, value, receiver) {\n setOrCreate(mirror, prop, value, proxy)\n object[prop] = value\n return true\n },\n deleteProperty(_target, property) {\n delete mirror[property as any]\n return delete object[property as any]\n },\n apply(target, thisArg, [props]) {\n if (props) {\n assignOrUpdate(mirror, props, proxy)\n return Object.assign(object, props)\n }\n return object\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(object)\n },\n setPrototypeOf(target, proto) {\n return Object.setPrototypeOf(object, proto)\n },\n defineProperty(target, prop, desc) {\n return Object.defineProperty(object, prop, desc)\n },\n preventExtensions() {\n return Object.preventExtensions(object)\n },\n isExtensible() {\n return Object.isExtensible(object)\n },\n ownKeys() {\n return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]\n }\n })\n assignOrUpdate(mirror, object, proxy)\n return proxy\n}\n\nexport function getObservable(proxied, prop) {\n return proxied[MIRROR_SYM][prop]\n}\nexport function peek(proxied, prop) {\n return getObservable(proxied, prop).peek()\n}\nexport function isProxied(proxied) {\n return PROXY_SYM in proxied\n}\n\nObject.assign(proxy, { getObservable, peek, isProxied })\n", "import { pureComputed } from './computed'\n\nfunction kowhen(predicate, context, resolve) {\n const observable = pureComputed(predicate, context).extend({ notify: 'always' })\n const subscription = observable.subscribe(value => {\n if (value) {\n subscription.dispose()\n resolve(value)\n }\n })\n // In case the initial value is true, process it right away\n observable.notifySubscribers(observable.peek())\n return subscription\n}\n\nexport function when(predicate, callback, context) {\n const whenFn = kowhen.bind(null, predicate, context)\n return callback ? whenFn(callback.bind(context)) : new Promise(whenFn)\n}\n"], | ||
| "mappings": "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", | ||
| "names": ["koOptions", "subscribable", "import_observable", "extenders", "baseExtenders", "import_observable", "proxy", "observable"] | ||
| } |
+1
-1
@@ -1,2 +0,2 @@ | ||
| // @tko/computed 🥊 4.0.1 ESM | ||
| // @tko/computed 🥊 4.1.0 ESM | ||
| "use strict"; | ||
@@ -3,0 +3,0 @@ export { computed, isComputed, isPureComputed, pureComputed } from "./computed.js"; |
+1
-1
@@ -1,2 +0,2 @@ | ||
| // @tko/computed 🥊 4.0.1 MJS | ||
| // @tko/computed 🥊 4.1.0 MJS | ||
| "use strict"; | ||
@@ -3,0 +3,0 @@ export { computed, isComputed, isPureComputed, pureComputed } from "./computed.js"; |
+2
-2
@@ -1,2 +0,2 @@ | ||
| // @tko/computed 🥊 4.0.1 ESM | ||
| // @tko/computed 🥊 4.1.0 ESM | ||
| "use strict"; | ||
@@ -46,3 +46,3 @@ import { observable, observableArray, unwrap } from "@tko/observable"; | ||
| }, | ||
| deleteProperty(property) { | ||
| deleteProperty(_target, property) { | ||
| delete mirror[property]; | ||
@@ -49,0 +49,0 @@ return delete object[property]; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/proxy.ts"], | ||
| "sourcesContent": ["/**\n * Create an ES\n */\n\nimport { observable, observableArray, unwrap } from '@tko/observable'\n\nimport { computed } from './computed'\n\nconst PROXY_SYM = Symbol('Knockout Proxied Object')\nconst MIRROR_SYM = Symbol('Knockout Proxied Observables')\n\nfunction makeComputed(proxy, fn) {\n return computed({\n owner: proxy,\n read: fn,\n write: fn,\n pure: 'pure' in fn ? fn.pure : true,\n deferEvaluation: 'deferEvaluation' in fn ? fn.deferEvaluation : true\n }).extend({ deferred: true })\n}\n\nfunction setOrCreate(mirror, prop, value, proxy) {\n if (!mirror[prop]) {\n const ctr = Array.isArray(value)\n ? observableArray\n : typeof value === 'function'\n ? makeComputed.bind(null, proxy)\n : observable\n mirror[prop] = ctr(value)\n } else {\n mirror[prop](value)\n }\n}\n\nfunction assignOrUpdate(mirror, object, proxy) {\n for (const key of Object.keys(object)) {\n setOrCreate(mirror, key, object[key], proxy)\n }\n return object\n}\n\nexport function proxy(object) {\n const mirror = { [PROXY_SYM]: object }\n mirror[MIRROR_SYM] = mirror\n const proxy = new Proxy(function () {}, {\n has(target, prop) {\n return prop in mirror\n },\n get(target, prop) {\n return unwrap(mirror[prop])\n },\n set(target, prop, value, receiver) {\n setOrCreate(mirror, prop, value, proxy)\n object[prop] = value\n return true\n },\n deleteProperty(property) {\n delete mirror[property as any]\n return delete object[property as any]\n },\n apply(target, thisArg, [props]) {\n if (props) {\n assignOrUpdate(mirror, props, proxy)\n return Object.assign(object, props)\n }\n return object\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(object)\n },\n setPrototypeOf(target, proto) {\n return Object.setPrototypeOf(object, proto)\n },\n defineProperty(target, prop, desc) {\n return Object.defineProperty(object, prop, desc)\n },\n preventExtensions() {\n return Object.preventExtensions(object)\n },\n isExtensible() {\n return Object.isExtensible(object)\n },\n ownKeys() {\n return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]\n }\n })\n assignOrUpdate(mirror, object, proxy)\n return proxy\n}\n\nexport function getObservable(proxied, prop) {\n return proxied[MIRROR_SYM][prop]\n}\nexport function peek(proxied, prop) {\n return getObservable(proxied, prop).peek()\n}\nexport function isProxied(proxied) {\n return PROXY_SYM in proxied\n}\n\nObject.assign(proxy, { getObservable, peek, isProxied })\n"], | ||
| "mappings": ";;AAIA,SAAS,YAAY,iBAAiB,cAAc;AAEpD,SAAS,gBAAgB;AAEzB,MAAM,YAAY,uBAAO,yBAAyB;AAClD,MAAM,aAAa,uBAAO,8BAA8B;AAExD,SAAS,aAAaA,QAAO,IAAI;AAC/B,SAAO,SAAS;AAAA,IACd,OAAOA;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,UAAU,KAAK,GAAG,OAAO;AAAA,IAC/B,iBAAiB,qBAAqB,KAAK,GAAG,kBAAkB;AAAA,EAClE,CAAC,EAAE,OAAO,EAAE,UAAU,KAAK,CAAC;AAC9B;AAEA,SAAS,YAAY,QAAQ,MAAM,OAAOA,QAAO;AAC/C,MAAI,CAAC,OAAO,IAAI,GAAG;AACjB,UAAM,MAAM,MAAM,QAAQ,KAAK,IAC3B,kBACA,OAAO,UAAU,aACf,aAAa,KAAK,MAAMA,MAAK,IAC7B;AACN,WAAO,IAAI,IAAI,IAAI,KAAK;AAAA,EAC1B,OAAO;AACL,WAAO,IAAI,EAAE,KAAK;AAAA,EACpB;AACF;AAEA,SAAS,eAAe,QAAQ,QAAQA,QAAO;AAC7C,aAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,gBAAY,QAAQ,KAAK,OAAO,GAAG,GAAGA,MAAK;AAAA,EAC7C;AACA,SAAO;AACT;AAEO,gBAAS,MAAM,QAAQ;AAC5B,QAAM,SAAS,EAAE,CAAC,SAAS,GAAG,OAAO;AACrC,SAAO,UAAU,IAAI;AACrB,QAAMA,SAAQ,IAAI,MAAM,WAAY;AAAA,EAAC,GAAG;AAAA,IACtC,IAAI,QAAQ,MAAM;AAChB,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,IAAI,QAAQ,MAAM;AAChB,aAAO,OAAO,OAAO,IAAI,CAAC;AAAA,IAC5B;AAAA,IACA,IAAI,QAAQ,MAAM,OAAO,UAAU;AACjC,kBAAY,QAAQ,MAAM,OAAOA,MAAK;AACtC,aAAO,IAAI,IAAI;AACf,aAAO;AAAA,IACT;AAAA,IACA,eAAe,UAAU;AACvB,aAAO,OAAO,QAAe;AAC7B,aAAO,OAAO,OAAO,QAAe;AAAA,IACtC;AAAA,IACA,MAAM,QAAQ,SAAS,CAAC,KAAK,GAAG;AAC9B,UAAI,OAAO;AACT,uBAAe,QAAQ,OAAOA,MAAK;AACnC,eAAO,OAAO,OAAO,QAAQ,KAAK;AAAA,MACpC;AACA,aAAO;AAAA,IACT;AAAA,IACA,iBAAiB;AACf,aAAO,OAAO,eAAe,MAAM;AAAA,IACrC;AAAA,IACA,eAAe,QAAQ,OAAO;AAC5B,aAAO,OAAO,eAAe,QAAQ,KAAK;AAAA,IAC5C;AAAA,IACA,eAAe,QAAQ,MAAM,MAAM;AACjC,aAAO,OAAO,eAAe,QAAQ,MAAM,IAAI;AAAA,IACjD;AAAA,IACA,oBAAoB;AAClB,aAAO,OAAO,kBAAkB,MAAM;AAAA,IACxC;AAAA,IACA,eAAe;AACb,aAAO,OAAO,aAAa,MAAM;AAAA,IACnC;AAAA,IACA,UAAU;AACR,aAAO,CAAC,GAAG,OAAO,oBAAoB,MAAM,GAAG,GAAG,OAAO,sBAAsB,MAAM,CAAC;AAAA,IACxF;AAAA,EACF,CAAC;AACD,iBAAe,QAAQ,QAAQA,MAAK;AACpC,SAAOA;AACT;AAEO,gBAAS,cAAc,SAAS,MAAM;AAC3C,SAAO,QAAQ,UAAU,EAAE,IAAI;AACjC;AACO,gBAAS,KAAK,SAAS,MAAM;AAClC,SAAO,cAAc,SAAS,IAAI,EAAE,KAAK;AAC3C;AACO,gBAAS,UAAU,SAAS;AACjC,SAAO,aAAa;AACtB;AAEA,OAAO,OAAO,OAAO,EAAE,eAAe,MAAM,UAAU,CAAC;", | ||
| "sourcesContent": ["/**\n * Create an ES\n */\n\nimport { observable, observableArray, unwrap } from '@tko/observable'\n\nimport { computed } from './computed'\n\nconst PROXY_SYM = Symbol('Knockout Proxied Object')\nconst MIRROR_SYM = Symbol('Knockout Proxied Observables')\n\nfunction makeComputed(proxy, fn) {\n return computed({\n owner: proxy,\n read: fn,\n write: fn,\n pure: 'pure' in fn ? fn.pure : true,\n deferEvaluation: 'deferEvaluation' in fn ? fn.deferEvaluation : true\n }).extend({ deferred: true })\n}\n\nfunction setOrCreate(mirror, prop, value, proxy) {\n if (!mirror[prop]) {\n const ctr = Array.isArray(value)\n ? observableArray\n : typeof value === 'function'\n ? makeComputed.bind(null, proxy)\n : observable\n mirror[prop] = ctr(value)\n } else {\n mirror[prop](value)\n }\n}\n\nfunction assignOrUpdate(mirror, object, proxy) {\n for (const key of Object.keys(object)) {\n setOrCreate(mirror, key, object[key], proxy)\n }\n return object\n}\n\nexport function proxy(object) {\n const mirror = { [PROXY_SYM]: object }\n mirror[MIRROR_SYM] = mirror\n const proxy = new Proxy(function () {}, {\n has(target, prop) {\n return prop in mirror\n },\n get(target, prop) {\n return unwrap(mirror[prop])\n },\n set(target, prop, value, receiver) {\n setOrCreate(mirror, prop, value, proxy)\n object[prop] = value\n return true\n },\n deleteProperty(_target, property) {\n delete mirror[property as any]\n return delete object[property as any]\n },\n apply(target, thisArg, [props]) {\n if (props) {\n assignOrUpdate(mirror, props, proxy)\n return Object.assign(object, props)\n }\n return object\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(object)\n },\n setPrototypeOf(target, proto) {\n return Object.setPrototypeOf(object, proto)\n },\n defineProperty(target, prop, desc) {\n return Object.defineProperty(object, prop, desc)\n },\n preventExtensions() {\n return Object.preventExtensions(object)\n },\n isExtensible() {\n return Object.isExtensible(object)\n },\n ownKeys() {\n return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]\n }\n })\n assignOrUpdate(mirror, object, proxy)\n return proxy\n}\n\nexport function getObservable(proxied, prop) {\n return proxied[MIRROR_SYM][prop]\n}\nexport function peek(proxied, prop) {\n return getObservable(proxied, prop).peek()\n}\nexport function isProxied(proxied) {\n return PROXY_SYM in proxied\n}\n\nObject.assign(proxy, { getObservable, peek, isProxied })\n"], | ||
| "mappings": ";;AAIA,SAAS,YAAY,iBAAiB,cAAc;AAEpD,SAAS,gBAAgB;AAEzB,MAAM,YAAY,uBAAO,yBAAyB;AAClD,MAAM,aAAa,uBAAO,8BAA8B;AAExD,SAAS,aAAaA,QAAO,IAAI;AAC/B,SAAO,SAAS;AAAA,IACd,OAAOA;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,UAAU,KAAK,GAAG,OAAO;AAAA,IAC/B,iBAAiB,qBAAqB,KAAK,GAAG,kBAAkB;AAAA,EAClE,CAAC,EAAE,OAAO,EAAE,UAAU,KAAK,CAAC;AAC9B;AAEA,SAAS,YAAY,QAAQ,MAAM,OAAOA,QAAO;AAC/C,MAAI,CAAC,OAAO,IAAI,GAAG;AACjB,UAAM,MAAM,MAAM,QAAQ,KAAK,IAC3B,kBACA,OAAO,UAAU,aACf,aAAa,KAAK,MAAMA,MAAK,IAC7B;AACN,WAAO,IAAI,IAAI,IAAI,KAAK;AAAA,EAC1B,OAAO;AACL,WAAO,IAAI,EAAE,KAAK;AAAA,EACpB;AACF;AAEA,SAAS,eAAe,QAAQ,QAAQA,QAAO;AAC7C,aAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,gBAAY,QAAQ,KAAK,OAAO,GAAG,GAAGA,MAAK;AAAA,EAC7C;AACA,SAAO;AACT;AAEO,gBAAS,MAAM,QAAQ;AAC5B,QAAM,SAAS,EAAE,CAAC,SAAS,GAAG,OAAO;AACrC,SAAO,UAAU,IAAI;AACrB,QAAMA,SAAQ,IAAI,MAAM,WAAY;AAAA,EAAC,GAAG;AAAA,IACtC,IAAI,QAAQ,MAAM;AAChB,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,IAAI,QAAQ,MAAM;AAChB,aAAO,OAAO,OAAO,IAAI,CAAC;AAAA,IAC5B;AAAA,IACA,IAAI,QAAQ,MAAM,OAAO,UAAU;AACjC,kBAAY,QAAQ,MAAM,OAAOA,MAAK;AACtC,aAAO,IAAI,IAAI;AACf,aAAO;AAAA,IACT;AAAA,IACA,eAAe,SAAS,UAAU;AAChC,aAAO,OAAO,QAAe;AAC7B,aAAO,OAAO,OAAO,QAAe;AAAA,IACtC;AAAA,IACA,MAAM,QAAQ,SAAS,CAAC,KAAK,GAAG;AAC9B,UAAI,OAAO;AACT,uBAAe,QAAQ,OAAOA,MAAK;AACnC,eAAO,OAAO,OAAO,QAAQ,KAAK;AAAA,MACpC;AACA,aAAO;AAAA,IACT;AAAA,IACA,iBAAiB;AACf,aAAO,OAAO,eAAe,MAAM;AAAA,IACrC;AAAA,IACA,eAAe,QAAQ,OAAO;AAC5B,aAAO,OAAO,eAAe,QAAQ,KAAK;AAAA,IAC5C;AAAA,IACA,eAAe,QAAQ,MAAM,MAAM;AACjC,aAAO,OAAO,eAAe,QAAQ,MAAM,IAAI;AAAA,IACjD;AAAA,IACA,oBAAoB;AAClB,aAAO,OAAO,kBAAkB,MAAM;AAAA,IACxC;AAAA,IACA,eAAe;AACb,aAAO,OAAO,aAAa,MAAM;AAAA,IACnC;AAAA,IACA,UAAU;AACR,aAAO,CAAC,GAAG,OAAO,oBAAoB,MAAM,GAAG,GAAG,OAAO,sBAAsB,MAAM,CAAC;AAAA,IACxF;AAAA,EACF,CAAC;AACD,iBAAe,QAAQ,QAAQA,MAAK;AACpC,SAAOA;AACT;AAEO,gBAAS,cAAc,SAAS,MAAM;AAC3C,SAAO,QAAQ,UAAU,EAAE,IAAI;AACjC;AACO,gBAAS,KAAK,SAAS,MAAM;AAClC,SAAO,cAAc,SAAS,IAAI,EAAE,KAAK;AAC3C;AACO,gBAAS,UAAU,SAAS;AACjC,SAAO,aAAa;AACtB;AAEA,OAAO,OAAO,OAAO,EAAE,eAAe,MAAM,UAAU,CAAC;", | ||
| "names": ["proxy"] | ||
| } |
@@ -1,2 +0,2 @@ | ||
| // @tko/computed 🥊 4.0.1 ESM | ||
| // @tko/computed 🥊 4.1.0 ESM | ||
| "use strict"; | ||
@@ -3,0 +3,0 @@ import { extenders as baseExtenders } from "@tko/observable"; |
+1
-1
@@ -1,2 +0,2 @@ | ||
| // @tko/computed 🥊 4.0.1 ESM | ||
| // @tko/computed 🥊 4.1.0 ESM | ||
| "use strict"; | ||
@@ -3,0 +3,0 @@ import { pureComputed } from "./computed.js"; |
+7
-5
| { | ||
| "version": "4.0.1", | ||
| "version": "4.1.0", | ||
| "name": "@tko/computed", | ||
@@ -10,5 +10,4 @@ "description": "TKO Computed Observables", | ||
| "dependencies": { | ||
| "@tko/observable": "^4.0.1", | ||
| "@tko/utils": "^4.0.1", | ||
| "tslib": "^2.2.0" | ||
| "@tko/observable": "^4.1.0", | ||
| "@tko/utils": "^4.1.0" | ||
| }, | ||
@@ -21,3 +20,6 @@ "repository": { | ||
| "knockout", | ||
| "tko" | ||
| "tko", | ||
| "computed", | ||
| "observable", | ||
| "reactive" | ||
| ], | ||
@@ -24,0 +26,0 @@ "author": "The Knockout Team", |
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
2
-33.33%16
6.67%0
-100%6
Infinity%121669
-0.04%1179
-0.17%- Removed
- Removed
- Removed
Updated
Updated