@tko/computed
Advanced tools
+71
-39
@@ -1,2 +0,3 @@ | ||
| // @tko/computed 🥊 4.0.0-beta1.3 ESM | ||
| // @tko/computed 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { | ||
@@ -44,7 +45,7 @@ addDisposeCallback, | ||
| } | ||
| if (typeof options2.read !== "function") { | ||
| if (typeof options2?.read !== "function") { | ||
| throw Error("Pass a function that returns the value of the computed"); | ||
| } | ||
| var writeFunction = options2.write; | ||
| var state = { | ||
| const writeFunction = options2.write; | ||
| const state = { | ||
| latestValue: void 0, | ||
@@ -60,4 +61,4 @@ isStale: true, | ||
| evaluatorFunctionTarget: evaluatorFunctionTarget || options2.owner, | ||
| disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || options2.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options2.disposeWhen || options2.disposeWhen, | ||
| disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options2.disposeWhen, | ||
| domNodeDisposalCallback: null, | ||
@@ -73,3 +74,5 @@ dependencyTracking: {}, | ||
| } else { | ||
| throw new Error("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."); | ||
| throw new Error( | ||
| "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." | ||
| ); | ||
| } | ||
@@ -82,2 +85,3 @@ return this; | ||
| if (state.isDirty || state.isSleeping && computedObservable.haveDependenciesChanged()) { | ||
| ; | ||
| computedObservable.evaluateImmediate(); | ||
@@ -112,8 +116,13 @@ } | ||
| if (!state.isSleeping && !options2.deferEvaluation) { | ||
| ; | ||
| computedObservable.evaluateImmediate(); | ||
| } | ||
| if (state.disposeWhenNodeIsRemoved && computedObservable.isActive()) { | ||
| addDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback = function() { | ||
| computedObservable.dispose(); | ||
| }); | ||
| addDisposeCallback( | ||
| state.disposeWhenNodeIsRemoved, | ||
| state.domNodeDisposalCallback = function() { | ||
| ; | ||
| computedObservable.dispose(); | ||
| } | ||
| ); | ||
| } | ||
@@ -128,3 +137,3 @@ return computedObservable; | ||
| function computedBeginDependencyDetectionCallback(subscribable2, id) { | ||
| var computedObservable = this.computedObservable, state = computedObservable[computedState]; | ||
| const computedObservable = this.computedObservable, state = computedObservable[computedState]; | ||
| if (!state.isDisposed) { | ||
@@ -136,3 +145,7 @@ if (this.disposalCount && this.disposalCandidates[id]) { | ||
| } else if (!state.dependencyTracking[id]) { | ||
| computedObservable.addDependencyTracking(id, subscribable2, state.isSleeping ? { _target: subscribable2 } : computedObservable.subscribeToDependency(subscribable2)); | ||
| computedObservable.addDependencyTracking( | ||
| id, | ||
| subscribable2, | ||
| state.isSleeping ? { _target: subscribable2 } : computedObservable.subscribeToDependency(subscribable2) | ||
| ); | ||
| } | ||
@@ -151,3 +164,3 @@ if (subscribable2._notificationIsPending) { | ||
| const dependencyTracking = this[computedState].dependencyTracking; | ||
| const dependentObservables = []; | ||
| const dependentObservables = new Array(); | ||
| objectForEach(dependencyTracking, function(id, dependency) { | ||
@@ -167,3 +180,3 @@ dependentObservables[dependency._order] = dependency._target; | ||
| haveDependenciesChanged() { | ||
| var id, dependency, dependencyTracking = this[computedState].dependencyTracking; | ||
| let id, dependency, dependencyTracking = this[computedState].dependencyTracking; | ||
| for (id in dependencyTracking) { | ||
@@ -177,6 +190,10 @@ if (hasOwnProperty(dependencyTracking, id)) { | ||
| } | ||
| return false; | ||
| }, | ||
| markDirty() { | ||
| if (this._evalDelayed && !this[computedState].isBeingEvaluated) { | ||
| this._evalDelayed(false); | ||
| this._evalDelayed( | ||
| false | ||
| /* notifyChange */ | ||
| ); | ||
| } | ||
@@ -197,3 +214,3 @@ }, | ||
| if (target._deferUpdates) { | ||
| var dirtySub = target.subscribe(this.markDirty, this, "dirty"), changeSub = target.subscribe(this.respondToChange, this); | ||
| const dirtySub = target.subscribe(this.markDirty, this, "dirty"), changeSub = target.subscribe(this.respondToChange, this); | ||
| return { | ||
@@ -211,16 +228,25 @@ _target: target, | ||
| evaluatePossiblyAsync() { | ||
| var computedObservable = this, throttleEvaluationTimeout = computedObservable.throttleEvaluation; | ||
| const computedObservable = this, throttleEvaluationTimeout = computedObservable.throttleEvaluation; | ||
| if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) { | ||
| clearTimeout(this[computedState].evaluationTimeoutInstance); | ||
| this[computedState].evaluationTimeoutInstance = safeSetTimeout(function() { | ||
| computedObservable.evaluateImmediate(true); | ||
| computedObservable.evaluateImmediate( | ||
| true | ||
| /* notifyChange */ | ||
| ); | ||
| }, throttleEvaluationTimeout); | ||
| } else if (computedObservable._evalDelayed) { | ||
| computedObservable._evalDelayed(true); | ||
| computedObservable._evalDelayed( | ||
| true | ||
| /* notifyChange */ | ||
| ); | ||
| } else { | ||
| computedObservable.evaluateImmediate(true); | ||
| computedObservable.evaluateImmediate( | ||
| true | ||
| /* notifyChange */ | ||
| ); | ||
| } | ||
| }, | ||
| evaluateImmediate(notifyChange) { | ||
| var computedObservable = this, state = computedObservable[computedState], disposeWhen = state.disposeWhen, changed = false; | ||
| let computedObservable = this, state = computedObservable[computedState], disposeWhen = state.disposeWhen, changed = false; | ||
| if (state.isBeingEvaluated) { | ||
@@ -249,4 +275,4 @@ return; | ||
| evaluateImmediate_CallReadWithDependencyDetection(notifyChange) { | ||
| var computedObservable = this, state = computedObservable[computedState], changed = false; | ||
| var isInitial = state.pure ? void 0 : !state.dependenciesCount, dependencyDetectionContext = { | ||
| let computedObservable = this, state = computedObservable[computedState], changed = false; | ||
| const isInitial = state.pure ? void 0 : !state.dependenciesCount, dependencyDetectionContext = { | ||
| computedObservable, | ||
@@ -264,3 +290,3 @@ disposalCandidates: state.dependencyTracking, | ||
| state.dependenciesCount = 0; | ||
| var newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext); | ||
| const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext); | ||
| if (!state.dependenciesCount) { | ||
@@ -297,3 +323,3 @@ computedObservable.dispose(); | ||
| try { | ||
| var readFunction = state.readFunction; | ||
| const readFunction = state.readFunction; | ||
| return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction(); | ||
@@ -338,3 +364,7 @@ } finally { | ||
| } | ||
| this._limitChange(this, !isChange); | ||
| this._limitChange( | ||
| this, | ||
| !isChange | ||
| /* isDirty */ | ||
| ); | ||
| } | ||
@@ -344,3 +374,3 @@ }); | ||
| dispose() { | ||
| var state = this[computedState]; | ||
| const state = this[computedState]; | ||
| if (!state.isSleeping && state.dependencyTracking) { | ||
@@ -359,5 +389,5 @@ objectForEach(state.dependencyTracking, function(id, dependency) { | ||
| }; | ||
| var pureComputedOverrides = { | ||
| const pureComputedOverrides = { | ||
| beforeSubscriptionAdd(event) { | ||
| var computedObservable = this, state = computedObservable[computedState]; | ||
| const computedObservable = this, state = computedObservable[computedState]; | ||
| if (!state.isDisposed && state.isSleeping && event === "change") { | ||
@@ -372,3 +402,3 @@ state.isSleeping = false; | ||
| } else { | ||
| var dependenciesOrder = []; | ||
| const dependenciesOrder = new Array(); | ||
| objectForEach(state.dependencyTracking, function(id, dependency) { | ||
@@ -378,3 +408,3 @@ dependenciesOrder[dependency._order] = id; | ||
| arrayForEach(dependenciesOrder, function(id, order) { | ||
| var dependency = state.dependencyTracking[id], subscription = computedObservable.subscribeToDependency(dependency._target); | ||
| const dependency = state.dependencyTracking[id], subscription = computedObservable.subscribeToDependency(dependency._target); | ||
| subscription._order = order; | ||
@@ -396,3 +426,3 @@ subscription._version = dependency._version; | ||
| afterSubscriptionRemove(event) { | ||
| var state = this[computedState]; | ||
| const state = this[computedState]; | ||
| if (!state.isDisposed && event === "change" && !this.hasSubscriptionsForEvent("change")) { | ||
@@ -414,3 +444,3 @@ objectForEach(state.dependencyTracking, function(id, dependency) { | ||
| getVersion() { | ||
| var state = this[computedState]; | ||
| const state = this[computedState]; | ||
| if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) { | ||
@@ -422,3 +452,3 @@ this.evaluateImmediate(); | ||
| }; | ||
| var deferEvaluationOverrides = { | ||
| const deferEvaluationOverrides = { | ||
| beforeSubscriptionAdd(event) { | ||
@@ -431,3 +461,3 @@ if (event === "change" || event === "beforeChange") { | ||
| Object.setPrototypeOf(computed.fn, subscribable.fn); | ||
| var protoProp = observable.protoProperty; | ||
| const protoProp = observable.protoProperty; | ||
| computed.fn[protoProp] = computed; | ||
@@ -443,8 +473,10 @@ observable.observablePrototypes.add(computed); | ||
| if (typeof evaluatorFunctionOrOptions === "function") { | ||
| return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, { "pure": true }); | ||
| const evaluator = evaluatorFunctionOrOptions; | ||
| return computed(evaluator, evaluatorFunctionTarget, { pure: true }); | ||
| } else { | ||
| evaluatorFunctionOrOptions = extend({}, evaluatorFunctionOrOptions); | ||
| evaluatorFunctionOrOptions.pure = true; | ||
| return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget); | ||
| let options2 = evaluatorFunctionOrOptions; | ||
| options2 = extend({}, options2); | ||
| options2.pure = true; | ||
| return computed(options2, 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\nconst computedState = 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 function computed (evaluatorFunctionOrOptions, evaluatorFunctionTarget, options) {\n if (typeof evaluatorFunctionOrOptions === 'object') {\n // Single-parameter syntax - everything is on this \"options\" param\n options = evaluatorFunctionOrOptions\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 var writeFunction = options.write\n var 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 || options.disposeWhenNodeIsRemoved || null,\n disposeWhen: options.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)\n } else {\n throw new Error(\"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 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.haveDependenciesChanged())) {\n computedObservable.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.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.isActive()) {\n addDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback = function () {\n computedObservable.dispose()\n })\n }\n\n return computedObservable\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 var 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(id, subscribable, state.isSleeping ? { _target: subscribable } : computedObservable.subscribeToDependency(subscribable))\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 () {\n return this[computedState].dependenciesCount\n },\n\n getDependencies () {\n const dependencyTracking = this[computedState].dependencyTracking\n const dependentObservables = []\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 var id, dependency, dependencyTracking = this[computedState].dependencyTracking\n for (id in dependencyTracking) {\n if (hasOwnProperty(dependencyTracking, id)) {\n dependency = dependencyTracking[id]\n if ((this._evalDelayed && dependency._target._notificationIsPending) || dependency._target.hasChanged(dependency._version)) {\n return true\n }\n }\n }\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 var 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 var 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 var computedObservable = this,\n state = computedObservable[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 (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved) || disposeWhen && disposeWhen()) {\n // See comment above about suppressDisposalUntilDisposeWhenReturnsFalse\n if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {\n computedObservable.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 var computedObservable = this,\n state = computedObservable[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 var 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: computedObservable,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n }\n\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: computedObservable,\n isInitial: isInitial\n })\n\n state.dependencyTracking = {}\n state.dependenciesCount = 0\n\n var newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext)\n\n if (!state.dependenciesCount) {\n computedObservable.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 = computedObservable.isDifferent(state.latestValue, newValue)\n }\n\n if (changed) {\n if (!state.isSleeping) {\n computedObservable.notifySubscribers(state.latestValue, 'beforeChange')\n } else {\n computedObservable.updateVersion()\n }\n\n state.latestValue = newValue\n if (options.debug) { computedObservable._latestValue = newValue }\n\n computedObservable.notifySubscribers(state.latestValue, 'spectate')\n\n if (!state.isSleeping && notifyChange) {\n computedObservable.notifySubscribers(state.latestValue)\n }\n\n if (computedObservable._recordUpdate) {\n computedObservable._recordUpdate()\n }\n }\n\n if (isInitial) {\n computedObservable.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 var 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 ((state.isDirty && (forceEvaluate || !state.dependenciesCount)) || (state.isSleeping && this.haveDependenciesChanged())) {\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.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 var 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\nvar pureComputedOverrides = {\n beforeSubscriptionAdd (event) {\n // If asleep, wake up the computed by subscribing to any dependencies.\n var 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 var dependenciesOrder = []\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 var 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) { // test since evaluating could trigger disposal\n computedObservable.notifySubscribers(state.latestValue, 'awake')\n }\n }\n },\n afterSubscriptionRemove (event) {\n var 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 var 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\nvar 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\nvar protoProp = observable.protoProperty // == \"__ko_proto__\"\ncomputed.fn[protoProp] = computed\n\n/* This is used by ko.isObservable */\nobservable.observablePrototypes.add(computed)\n\nexport function isComputed (instance) {\n return (typeof instance === 'function' && instance[protoProp] === computed)\n}\n\nexport function isPureComputed (instance) {\n return isComputed(instance) && instance[computedState] && instance[computedState].pure\n}\n\nexport function pureComputed (evaluatorFunctionOrOptions, evaluatorFunctionTarget) {\n if (typeof evaluatorFunctionOrOptions === 'function') {\n return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, {'pure': true})\n } else {\n evaluatorFunctionOrOptions = extend({}, evaluatorFunctionOrOptions) // make a copy of the parameter object\n evaluatorFunctionOrOptions.pure = true\n return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget)\n }\n}\n"], | ||
| "mappings": ";AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAM,gBAAgB,qBAAqB,QAAQ;AACnD,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;AAEO,yBAAmB,4BAA4B,yBAAyB,UAAS;AACtF,MAAI,OAAO,+BAA+B,UAAU;AAElD,eAAU;AAAA,EACZ,OAAO;AAEL,eAAU,YAAW,CAAC;AACtB,QAAI,4BAA4B;AAC9B,eAAQ,OAAO;AAAA,IACjB;AAAA,EACF;AACA,MAAI,OAAO,SAAQ,SAAS,YAAY;AACtC,UAAM,MAAM,wDAAwD;AAAA,EACtE;AAEA,MAAI,gBAAgB,SAAQ;AAC5B,MAAI,QAAQ;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,8CAA8C;AAAA,IAC9C,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,cAAc,SAAQ;AAAA,IACtB,yBAAyB,2BAA2B,SAAQ;AAAA,IAC5D,0BAA0B,SAAQ,4BAA4B,SAAQ,4BAA4B;AAAA,IAClG,aAAa,SAAQ,eAAe,SAAQ;AAAA,IAC5C,yBAAyB;AAAA,IACzB,oBAAoB,CAAC;AAAA,IACrB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,EAC7B;AAEA,gCAA+B;AAC7B,QAAI,UAAU,SAAS,GAAG;AACxB,UAAI,OAAO,kBAAkB,YAAY;AAEvC,sBAAc,MAAM,MAAM,yBAAyB,SAAS;AAAA,MAC9D,OAAO;AACL,cAAM,IAAI,MAAM,2IAA2I;AAAA,MAC7J;AACA,aAAO;AAAA,IACT,OAAO;AAEL,UAAI,CAAC,MAAM,YAAY;AACrB,4BAAoB,mBAAmB,kBAAkB;AAAA,MAC3D;AACA,UAAI,MAAM,WAAY,MAAM,cAAc,mBAAmB,wBAAwB,GAAI;AACvF,2BAAmB,kBAAkB;AAAA,MACvC;AACA,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,qBAAmB,iBAAiB;AACpC,qBAAmB,cAAc,OAAO,kBAAkB;AAE1D,eAAa,GAAG,KAAK,kBAAkB;AAGvC,SAAO,eAAe,oBAAoB,SAAS,EAAE;AAErD,MAAI,SAAQ,MAAM;AAChB,UAAM,OAAO;AACb,UAAM,aAAa;AACnB,WAAO,oBAAoB,qBAAqB;AAAA,EAClD,WAAW,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,WAAW;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,CAAC,SAAQ,iBAAiB;AACjD,uBAAmB,kBAAkB;AAAA,EACvC;AAIA,MAAI,MAAM,4BAA4B,mBAAmB,SAAS,GAAG;AACnE,uBAAmB,MAAM,0BAA0B,MAAM,0BAA0B,WAAY;AAC7F,yBAAmB,QAAQ;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAGA,2CAA4C,IAAI,gBAAgB;AAC9D,MAAI,mBAAmB,QAAQ,eAAe,SAAS;AACrD,mBAAe,QAAQ;AAAA,EACzB;AACF;AAIA,kDAAmD,eAAc,IAAI;AACnE,MAAI,qBAAqB,KAAK,oBAC5B,QAAQ,mBAAmB;AAC7B,MAAI,CAAC,MAAM,YAAY;AACrB,QAAI,KAAK,iBAAiB,KAAK,mBAAmB,KAAK;AAErD,yBAAmB,sBAAsB,IAAI,eAAc,KAAK,mBAAmB,GAAG;AACtF,WAAK,mBAAmB,MAAM;AAC9B,QAAE,KAAK;AAAA,IACT,WAAW,CAAC,MAAM,mBAAmB,KAAK;AAExC,yBAAmB,sBAAsB,IAAI,eAAc,MAAM,aAAa,EAAE,SAAS,cAAa,IAAI,mBAAmB,sBAAsB,aAAY,CAAC;AAAA,IAClK;AAGA,QAAI,cAAa,wBAAwB;AACvC,oBAAa,oCAAoC;AAAA,IACnD;AAAA,EACF;AACF;AAEA,SAAS,KAAK;AAAA,EACZ,kBAAkB;AAAA,EAClB,uBAAwB;AACtB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,kBAAmB;AACjB,UAAM,qBAAqB,KAAK,eAAe;AAC/C,UAAM,uBAAuB,CAAC;AAE9B,kBAAc,oBAAoB,SAAU,IAAI,YAAY;AAC1D,2BAAqB,WAAW,UAAU,WAAW;AAAA,IACvD,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,sBAAuB,IAAI,QAAQ,aAAa;AAC9C,QAAI,KAAK,eAAe,QAAQ,WAAW,MAAM;AAC/C,YAAM,MAAM,kDAAkD;AAAA,IAChE;AAEA,SAAK,eAAe,mBAAmB,MAAM;AAC7C,gBAAY,SAAS,KAAK,eAAe;AACzC,gBAAY,WAAW,OAAO,WAAW;AAAA,EAC3C;AAAA,EACA,0BAA2B;AACzB,QAAI,IAAI,YAAY,qBAAqB,KAAK,eAAe;AAC7D,SAAK,MAAM,oBAAoB;AAC7B,UAAI,eAAe,oBAAoB,EAAE,GAAG;AAC1C,qBAAa,mBAAmB;AAChC,YAAK,KAAK,gBAAgB,WAAW,QAAQ,0BAA2B,WAAW,QAAQ,WAAW,WAAW,QAAQ,GAAG;AAC1H,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAa;AAEX,QAAI,KAAK,gBAAgB,CAAC,KAAK,eAAe,kBAAkB;AAC9D,WAAK,aAAa,KAAwB;AAAA,IAC5C;AAAA,EACF;AAAA,EACA,WAAY;AACV,UAAM,QAAQ,KAAK;AACnB,WAAO,MAAM,WAAW,MAAM,oBAAoB;AAAA,EACpD;AAAA,EACA,kBAAmB;AAEjB,QAAI,CAAC,KAAK,wBAAwB;AAChC,WAAK,sBAAsB;AAAA,IAC7B,WAAW,KAAK,eAAe,SAAS;AACtC,WAAK,eAAe,UAAU;AAAA,IAChC;AAAA,EACF;AAAA,EACA,sBAAuB,QAAQ;AAC7B,QAAI,OAAO,eAAe;AACxB,UAAI,WAAW,OAAO,UAAU,KAAK,WAAW,MAAM,OAAO,GAC3D,YAAY,OAAO,UAAU,KAAK,iBAAiB,IAAI;AACzD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAW;AACT,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,wBAAyB;AACvB,QAAI,qBAAqB,MACvB,4BAA4B,mBAAmB;AACjD,QAAI,6BAA6B,6BAA6B,GAAG;AAC/D,mBAAa,KAAK,eAAe,yBAAyB;AAC1D,WAAK,eAAe,4BAA4B,eAAe,WAAY;AACzE,2BAAmB,kBAAkB,IAAuB;AAAA,MAC9D,GAAG,yBAAyB;AAAA,IAC9B,WAAW,mBAAmB,cAAc;AAC1C,yBAAmB,aAAa,IAAuB;AAAA,IACzD,OAAO;AACL,yBAAmB,kBAAkB,IAAuB;AAAA,IAC9D;AAAA,EACF;AAAA,EACA,kBAAmB,cAAc;AAC/B,QAAI,qBAAqB,MACvB,QAAQ,mBAAmB,gBAC3B,cAAc,MAAM,aACpB,UAAU;AAEZ,QAAI,MAAM,kBAAkB;AAK1B;AAAA,IACF;AAGA,QAAI,MAAM,YAAY;AACpB;AAAA,IACF;AAEA,QAAI,MAAM,4BAA4B,CAAC,4BAA4B,MAAM,wBAAwB,KAAK,eAAe,YAAY,GAAG;AAElI,UAAI,CAAC,MAAM,8CAA8C;AACvD,2BAAmB,QAAQ;AAC3B;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,kDAAmD,cAAc;AAK/D,QAAI,qBAAqB,MACvB,QAAQ,mBAAmB,gBAC3B,UAAU;AAIZ,QAAI,YAAY,MAAM,OAAO,SAAY,CAAC,MAAM,mBAC9C,6BAA6B;AAAA,MAC3B;AAAA,MACA,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,QAAI,WAAW,KAAK,qDAAqD,OAAO,0BAA0B;AAE1G,QAAI,CAAC,MAAM,mBAAmB;AAC5B,yBAAmB,QAAQ;AAC3B,gBAAU;AAAA,IACZ,OAAO;AACL,gBAAU,mBAAmB,YAAY,MAAM,aAAa,QAAQ;AAAA,IACtE;AAEA,QAAI,SAAS;AACX,UAAI,CAAC,MAAM,YAAY;AACrB,2BAAmB,kBAAkB,MAAM,aAAa,cAAc;AAAA,MACxE,OAAO;AACL,2BAAmB,cAAc;AAAA,MACnC;AAEA,YAAM,cAAc;AACpB,UAAI,QAAQ,OAAO;AAAE,2BAAmB,eAAe;AAAA,MAAS;AAEhE,yBAAmB,kBAAkB,MAAM,aAAa,UAAU;AAElE,UAAI,CAAC,MAAM,cAAc,cAAc;AACrC,2BAAmB,kBAAkB,MAAM,WAAW;AAAA,MACxD;AAEA,UAAI,mBAAmB,eAAe;AACpC,2BAAmB,cAAc;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,WAAW;AACb,yBAAmB,kBAAkB,MAAM,aAAa,OAAO;AAAA,IACjE;AAEA,WAAO;AAAA,EACT;AAAA,EACA,qDAAsD,OAAO,4BAA4B;AAMvF,QAAI;AACF,UAAI,eAAe,MAAM;AACzB,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,KAAM,eAAe;AAGnB,UAAM,QAAQ,KAAK;AACnB,QAAK,MAAM,WAAY,kBAAiB,CAAC,MAAM,sBAAwB,MAAM,cAAc,KAAK,wBAAwB,GAAI;AAC1H,WAAK,kBAAkB;AAAA,IACzB;AACA,WAAO,MAAM;AAAA,EACf;AAAA,OAEK,gBAAiB;AACpB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,MAAO,eAAe;AACpB,UAAM,QAAQ,KAAK;AAEnB,iBAAa,GAAG,MAAM,KAAK,MAAM,aAAa;AAC9C,WAAO,OAAO,MAAM;AAAA,MAClB,iBAAkB;AAChB,YAAI,CAAC,KAAK,eAAe,YAAY;AACnC,cAAI,KAAK,eAAe,SAAS;AAC/B,iBAAK,kBAAkB;AAAA,UACzB,OAAO;AACL,iBAAK,eAAe,UAAU;AAAA,UAChC;AAAA,QACF;AACA,eAAO,MAAM;AAAA,MACf;AAAA,MACA,aAAc,UAAU;AACtB,aAAK,mBAAmB,MAAM,WAAW;AAGzC,cAAM,UAAU;AAChB,YAAI,UAAU;AACZ,gBAAM,UAAU;AAAA,QAClB;AAIA,aAAK,aAAa,MAAM,CAAC,QAAsB;AAAA,MACjD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,UAAW;AACT,QAAI,QAAQ,KAAK;AACjB,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,IAAI,wBAAwB;AAAA,EAC1B,sBAAuB,OAAO;AAE5B,QAAI,qBAAqB,MACvB,QAAQ,mBAAmB;AAC7B,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,YAAI,oBAAoB,CAAC;AACzB,sBAAc,MAAM,oBAAoB,SAAU,IAAI,YAAY;AAChE,4BAAkB,WAAW,UAAU;AAAA,QACzC,CAAC;AAED,qBAAa,mBAAmB,SAAU,IAAI,OAAO;AACnD,cAAI,aAAa,MAAM,mBAAmB,KACxC,eAAe,mBAAmB,sBAAsB,WAAW,OAAO;AAC5E,uBAAa,SAAS;AACtB,uBAAa,WAAW,WAAW;AACnC,gBAAM,mBAAmB,MAAM;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;AACrB,2BAAmB,kBAAkB,MAAM,aAAa,OAAO;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA,EACA,wBAAyB,OAAO;AAC9B,QAAI,QAAQ,KAAK;AACjB,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,MAAM;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,aAAc;AAIZ,QAAI,QAAQ,KAAK;AACjB,QAAI,MAAM,cAAe,OAAM,WAAW,KAAK,wBAAwB,IAAI;AACzE,WAAK,kBAAkB;AAAA,IACzB;AACA,WAAO,aAAa,GAAG,WAAW,KAAK,IAAI;AAAA,EAC7C;AACF;AAEA,IAAI,2BAA2B;AAAA,EAC7B,sBAAuB,OAAO;AAE5B,QAAI,UAAU,YAAY,UAAU,gBAAgB;AAClD,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AACF;AAEA,OAAO,eAAe,SAAS,IAAI,aAAa,EAAE;AAGlD,IAAI,YAAY,WAAW;AAC3B,SAAS,GAAG,aAAa;AAGzB,WAAW,qBAAqB,IAAI,QAAQ;AAErC,2BAAqB,UAAU;AACpC,SAAQ,OAAO,aAAa,cAAc,SAAS,eAAe;AACpE;AAEO,+BAAyB,UAAU;AACxC,SAAO,WAAW,QAAQ,KAAK,SAAS,kBAAkB,SAAS,eAAe;AACpF;AAEO,6BAAuB,4BAA4B,yBAAyB;AACjF,MAAI,OAAO,+BAA+B,YAAY;AACpD,WAAO,SAAS,4BAA4B,yBAAyB,EAAC,QAAQ,KAAI,CAAC;AAAA,EACrF,OAAO;AACL,iCAA6B,OAAO,CAAC,GAAG,0BAA0B;AAClE,+BAA2B,OAAO;AAClC,WAAO,SAAS,4BAA4B,uBAAuB;AAAA,EACrE;AACF;", | ||
| "names": [] | ||
| "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 computedObservable = this,\n state = computedObservable[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 computedObservable.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 computedObservable = this,\n state = computedObservable[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: computedObservable,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n }\n\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: computedObservable,\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 computedObservable.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 = computedObservable.isDifferent(state.latestValue, newValue)\n }\n\n if (changed) {\n if (!state.isSleeping) {\n computedObservable.notifySubscribers(state.latestValue, 'beforeChange')\n } else {\n computedObservable.updateVersion()\n }\n\n state.latestValue = newValue\n if (options.debug) {\n computedObservable._latestValue = newValue\n }\n\n computedObservable.notifySubscribers(state.latestValue, 'spectate')\n\n if (!state.isSleeping && notifyChange) {\n computedObservable.notifySubscribers(state.latestValue)\n }\n\n if (computedObservable._recordUpdate) {\n computedObservable._recordUpdate()\n }\n }\n\n if (isInitial) {\n computedObservable.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": ["options", "subscribable"] | ||
| } |
+413
-315
@@ -1,2 +0,3 @@ | ||
| // @tko/computed 🥊 4.0.0-beta1.3 CommonJS | ||
| // @tko/computed 🥊 4.0.0 CommonJS | ||
| "use strict"; | ||
| var __defProp = Object.defineProperty; | ||
@@ -6,2 +7,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name); | ||
| var __typeError = (msg) => { | ||
| throw TypeError(msg); | ||
| }; | ||
| var __export = (target, all) => { | ||
@@ -20,6 +25,38 @@ for (var name in all) | ||
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
| var __await = function(promise, isYieldStar) { | ||
| this[0] = promise; | ||
| this[1] = isYieldStar; | ||
| }; | ||
| var __yieldStar = (value) => { | ||
| var obj = value[__knownSymbol("asyncIterator")], isAwait = false, method, it = {}; | ||
| if (obj == null) { | ||
| obj = value[__knownSymbol("iterator")](); | ||
| method = (k) => it[k] = (x) => obj[k](x); | ||
| } else { | ||
| obj = obj.call(value); | ||
| method = (k) => it[k] = (v) => { | ||
| if (isAwait) { | ||
| isAwait = false; | ||
| if (k === "throw") throw v; | ||
| return v; | ||
| } | ||
| isAwait = true; | ||
| return { | ||
| done: false, | ||
| value: new __await(new Promise((resolve) => { | ||
| var x = obj[k](v); | ||
| if (!(x instanceof Object)) __typeError("Object expected"); | ||
| resolve(x); | ||
| }), 1) | ||
| }; | ||
| }; | ||
| } | ||
| return it[__knownSymbol("iterator")] = () => it, method("next"), "throw" in obj ? method("throw") : it.throw = (x) => { | ||
| throw x; | ||
| }, "return" in obj && method("return"), it; | ||
| }; | ||
| // index.ts | ||
| var computed_exports = {}; | ||
| __export(computed_exports, { | ||
| var index_exports = {}; | ||
| __export(index_exports, { | ||
| computed: () => computed, | ||
@@ -33,9 +70,9 @@ isComputed: () => isComputed, | ||
| }); | ||
| module.exports = __toCommonJS(computed_exports); | ||
| module.exports = __toCommonJS(index_exports); | ||
| // ../utils/dist/array.js | ||
| var { isArray } = Array; | ||
| function arrayForEach(array, action, thisArg) { | ||
| function arrayForEach(array, action, actionOwner) { | ||
| if (arguments.length > 2) { | ||
| action = action.bind(thisArg); | ||
| action = action.bind(actionOwner); | ||
| } | ||
@@ -50,3 +87,3 @@ for (let i = 0, j = array.length; i < j; ++i) { | ||
| function arrayRemoveItem(array, itemToRemove) { | ||
| var index = arrayIndexOf(array, itemToRemove); | ||
| const index = arrayIndexOf(array, itemToRemove); | ||
| if (index > 0) { | ||
@@ -60,3 +97,3 @@ array.splice(index, 1); | ||
| if (left.length && right.length) { | ||
| var failedCompares, l, r, leftItem, rightItem; | ||
| let failedCompares, l, r, leftItem, rightItem; | ||
| for (failedCompares = l = 0; (!limitFailedCompares || failedCompares < limitFailedCompares) && (leftItem = left[l]); ++l) { | ||
@@ -89,6 +126,6 @@ for (r = 0; rightItem = right[r]; ++r) { | ||
| function compareSmallArrayToBigArray(smlArray, bigArray, statusNotInSml, statusNotInBig, options2) { | ||
| var myMin = Math.min, myMax = Math.max, editDistanceMatrix = [], smlIndex, smlIndexMax = smlArray.length, bigIndex, bigIndexMax = bigArray.length, compareRange = bigIndexMax - smlIndexMax || 1, maxDistance = smlIndexMax + bigIndexMax + 1, thisRow, lastRow, bigIndexMaxForRow, bigIndexMinForRow; | ||
| let myMin = Math.min, myMax = Math.max, editDistanceMatrix = new Array(), smlIndex, smlIndexMax = smlArray.length, bigIndex, bigIndexMax = bigArray.length, compareRange = bigIndexMax - smlIndexMax || 1, maxDistance = smlIndexMax + bigIndexMax + 1, thisRow, lastRow, bigIndexMaxForRow, bigIndexMinForRow; | ||
| for (smlIndex = 0; smlIndex <= smlIndexMax; smlIndex++) { | ||
| lastRow = thisRow; | ||
| editDistanceMatrix.push(thisRow = []); | ||
| editDistanceMatrix.push(thisRow = new Array()); | ||
| bigIndexMaxForRow = myMin(bigIndexMax, smlIndex + compareRange); | ||
@@ -104,4 +141,4 @@ bigIndexMinForRow = myMax(0, smlIndex - 1); | ||
| } else { | ||
| var northDistance = lastRow[bigIndex] || maxDistance; | ||
| var westDistance = thisRow[bigIndex - 1] || maxDistance; | ||
| const northDistance = lastRow[bigIndex] || maxDistance; | ||
| const westDistance = thisRow[bigIndex - 1] || maxDistance; | ||
| thisRow[bigIndex] = myMin(northDistance, westDistance) + 1; | ||
@@ -111,25 +148,28 @@ } | ||
| } | ||
| var editScript = [], meMinusOne, notInSml = [], notInBig = []; | ||
| let editScript = new Array(), meMinusOne, notInSml = new Array(), notInBig = new Array(); | ||
| for (smlIndex = smlIndexMax, bigIndex = bigIndexMax; smlIndex || bigIndex; ) { | ||
| meMinusOne = editDistanceMatrix[smlIndex][bigIndex] - 1; | ||
| if (bigIndex && meMinusOne === editDistanceMatrix[smlIndex][bigIndex - 1]) { | ||
| notInSml.push(editScript[editScript.length] = { | ||
| "status": statusNotInSml, | ||
| "value": bigArray[--bigIndex], | ||
| "index": bigIndex | ||
| }); | ||
| notInSml.push( | ||
| editScript[editScript.length] = { | ||
| // added | ||
| status: statusNotInSml, | ||
| value: bigArray[--bigIndex], | ||
| index: bigIndex | ||
| } | ||
| ); | ||
| } else if (smlIndex && meMinusOne === editDistanceMatrix[smlIndex - 1][bigIndex]) { | ||
| notInBig.push(editScript[editScript.length] = { | ||
| "status": statusNotInBig, | ||
| "value": smlArray[--smlIndex], | ||
| "index": smlIndex | ||
| }); | ||
| notInBig.push( | ||
| editScript[editScript.length] = { | ||
| // deleted | ||
| status: statusNotInBig, | ||
| value: smlArray[--smlIndex], | ||
| index: smlIndex | ||
| } | ||
| ); | ||
| } else { | ||
| --bigIndex; | ||
| --smlIndex; | ||
| if (!options2.sparse) { | ||
| editScript.push({ | ||
| "status": "retained", | ||
| "value": bigArray[bigIndex] | ||
| }); | ||
| if (!(options2 == null ? void 0 : options2.sparse)) { | ||
| editScript.push({ status: "retained", value: bigArray[bigIndex] }); | ||
| } | ||
@@ -143,36 +183,75 @@ } | ||
| // ../utils/dist/options.js | ||
| var options = { | ||
| deferUpdates: false, | ||
| useOnlyNativeEvents: false, | ||
| protoProperty: "__ko_proto__", | ||
| defaultBindingAttribute: "data-bind", | ||
| allowVirtualElements: true, | ||
| bindingGlobals: /* @__PURE__ */ Object.create(null), | ||
| bindingProviderInstance: null, | ||
| createChildContextWithAs: false, | ||
| jQuery: globalThis.jQuery, | ||
| Promise: globalThis.Promise, | ||
| taskScheduler: null, | ||
| debug: false, | ||
| global: globalThis, | ||
| document: globalThis.document, | ||
| filters: {}, | ||
| includeDestroyed: false, | ||
| foreachHidesDestroyed: false, | ||
| onError: function(e) { | ||
| throw e; | ||
| }, | ||
| set: function(name, value) { | ||
| options[name] = value; | ||
| }, | ||
| getBindingHandler() { | ||
| }, | ||
| cleanExternalData() { | ||
| var Options = class { | ||
| constructor() { | ||
| this.bindingStringPreparsers = []; | ||
| this.knockoutInstance = null; | ||
| this.deferUpdates = false; | ||
| this.useOnlyNativeEvents = true; | ||
| this.useTemplateTag = true; | ||
| this.protoProperty = "__ko_proto__"; | ||
| this.defaultBindingAttribute = "data-bind"; | ||
| this.allowVirtualElements = true; | ||
| this.bindingGlobals = /* @__PURE__ */ Object.create(null); | ||
| this.createChildContextWithAs = false; | ||
| this.disableJQueryUsage = false; | ||
| this.Promise = globalThis.Promise; | ||
| this.taskScheduler = null; | ||
| this.debug = false; | ||
| this.templateSizeLimit = 4096; | ||
| this.allowScriptTagsInTemplates = false; | ||
| this._sanitizeWarningLogged = false; | ||
| this.global = globalThis; | ||
| this.document = globalThis.document; | ||
| this.filters = {}; | ||
| this.includeDestroyed = false; | ||
| this.foreachHidesDestroyed = false; | ||
| } | ||
| get jQuery() { | ||
| var _a; | ||
| if (this.disableJQueryUsage) return; | ||
| return (_a = this._jQuery) != null ? _a : globalThis.jQuery; | ||
| } | ||
| /** | ||
| * Set jQuery manuall to be used by TKO. | ||
| * @param jQuery If jQuery set to undefined, TKO will not use jQuery and this.disableJQueryUsage to true. | ||
| */ | ||
| set jQuery(jQuery) { | ||
| if (!jQuery) { | ||
| this.disableJQueryUsage = true; | ||
| this._jQuery = void 0; | ||
| } else { | ||
| this._jQuery = jQuery; | ||
| this.disableJQueryUsage = false; | ||
| } | ||
| } | ||
| /** | ||
| * Sanitize HTML templates before parsing them. Default is a no-op. | ||
| * Please configure something like DOMPurify or validator.js for your environment. | ||
| * @param html HTML string to be sanitized | ||
| * @returns Sanitized HTML string | ||
| */ | ||
| sanitizeHtmlTemplate(html) { | ||
| if (!this._sanitizeWarningLogged) { | ||
| console.warn( | ||
| "WARNING -- You don't have a HTML sanitizer configured. Please configure options.sanitizeHtmlTemplate to avoid XSS vulnerabilities." | ||
| ); | ||
| this._sanitizeWarningLogged = true; | ||
| } | ||
| return html; | ||
| } | ||
| onError(e, throws = true) { | ||
| if (throws) throw e; | ||
| return e; | ||
| } | ||
| set(name, value) { | ||
| this[name] = value; | ||
| } | ||
| // Overload getBindingHandler to have a custom lookup function. | ||
| getBindingHandler(key) { | ||
| return null; | ||
| } | ||
| cleanExternalData(node, callback) { | ||
| } | ||
| }; | ||
| Object.defineProperty(options, "$", { | ||
| get: function() { | ||
| return options.jQuery; | ||
| } | ||
| }); | ||
| var options = new Options(); | ||
| var options_default = options; | ||
@@ -204,3 +283,3 @@ | ||
| function throttle(callback, timeout) { | ||
| var timeoutInstance; | ||
| let timeoutInstance; | ||
| return function(...args) { | ||
@@ -216,3 +295,3 @@ if (!timeoutInstance) { | ||
| function debounce(callback, timeout) { | ||
| var timeoutInstance; | ||
| let timeoutInstance; | ||
| return function(...args) { | ||
@@ -224,14 +303,2 @@ clearTimeout(timeoutInstance); | ||
| // ../utils/dist/ie.js | ||
| var ieVersion = options_default.document && function() { | ||
| var version = 3, div = options_default.document.createElement("div"), iElems = div.getElementsByTagName("i"); | ||
| while (div.innerHTML = "<!--[if gt IE " + ++version + "]><i></i><![endif]-->", iElems[0]) { | ||
| } | ||
| if (!version) { | ||
| const userAgent = window.navigator.userAgent; | ||
| return ua.match(/MSIE ([^ ]+)/) || ua.match(/rv:([^ )]+)/); | ||
| } | ||
| return version > 4 ? version : void 0; | ||
| }(); | ||
| // ../utils/dist/object.js | ||
@@ -243,4 +310,5 @@ function hasOwnProperty(obj, propName) { | ||
| if (source) { | ||
| for (var prop in source) { | ||
| for (const prop of Object.keys(source)) { | ||
| if (hasOwnProperty(source, prop)) { | ||
| ; | ||
| target[prop] = source[prop]; | ||
@@ -253,3 +321,3 @@ } | ||
| function objectForEach(obj, action) { | ||
| for (var prop in obj) { | ||
| for (const prop in obj) { | ||
| if (hasOwnProperty(obj, prop)) { | ||
@@ -284,5 +352,2 @@ action(prop, obj[prop]); | ||
| // ../utils/dist/jquery.js | ||
| var jQueryInstance = options_default.global && options_default.global.jQuery; | ||
| // ../utils/dist/dom/info.js | ||
@@ -293,7 +358,7 @@ function domNodeIsContainedBy(node, containedByNode) { | ||
| } | ||
| if (node.nodeType === 11) { | ||
| if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { | ||
| return false; | ||
| } | ||
| if (containedByNode.contains) { | ||
| return containedByNode.contains(node.nodeType !== 1 ? node.parentNode : node); | ||
| return containedByNode.contains(node.nodeType !== Node.ELEMENT_NODE ? node.parentNode : node); | ||
| } | ||
@@ -303,6 +368,7 @@ if (containedByNode.compareDocumentPosition) { | ||
| } | ||
| while (node && node != containedByNode) { | ||
| node = node.parentNode; | ||
| let parentNode = node; | ||
| while (parentNode && parentNode != containedByNode) { | ||
| parentNode = parentNode.parentNode; | ||
| } | ||
| return !!node; | ||
| return !!parentNode; | ||
| } | ||
@@ -316,48 +382,40 @@ function domNodeIsAttachedToDocument(node) { | ||
| // ../utils/dist/dom/event.js | ||
| var knownEvents = {}; | ||
| var knownEventTypesByEventName = {}; | ||
| knownEvents["UIEvents"] = ["keyup", "keydown", "keypress"]; | ||
| knownEvents["MouseEvents"] = [ | ||
| "click", | ||
| "dblclick", | ||
| "mousedown", | ||
| "mouseup", | ||
| "mousemove", | ||
| "mouseover", | ||
| "mouseout", | ||
| "mouseenter", | ||
| "mouseleave" | ||
| ]; | ||
| objectForEach(knownEvents, function(eventType, knownEventsForType) { | ||
| if (knownEventsForType.length) { | ||
| for (let i = 0, j = knownEventsForType.length; i < j; i++) { | ||
| knownEventTypesByEventName[knownEventsForType[i]] = eventType; | ||
| } | ||
| } | ||
| }); | ||
| // ../utils/dist/dom/data.js | ||
| var datastoreTime = new Date().getTime(); | ||
| var datastoreTime = (/* @__PURE__ */ new Date()).getTime(); | ||
| var dataStoreKeyExpandoPropertyName = `__ko__${datastoreTime}`; | ||
| var dataStoreSymbol = Symbol("Knockout data"); | ||
| var dataStore; | ||
| var dataStoreSymbol = /* @__PURE__ */ Symbol("Knockout data"); | ||
| var uniqueId = 0; | ||
| var modern = { | ||
| getDataForNode(node, createIfNotFound) { | ||
| let dataForNode = node[dataStoreSymbol]; | ||
| if (!dataForNode && createIfNotFound) { | ||
| dataForNode = node[dataStoreSymbol] = {}; | ||
| } | ||
| return dataForNode; | ||
| }, | ||
| clear(node) { | ||
| if (node[dataStoreSymbol]) { | ||
| delete node[dataStoreSymbol]; | ||
| return true; | ||
| } | ||
| return false; | ||
| function isSafeKey(key) { | ||
| return key !== "__proto__" && key !== "constructor" && key !== "prototype"; | ||
| } | ||
| function getDataForNode(node, createIfNotFound) { | ||
| let dataForNode = node[dataStoreSymbol]; | ||
| if (!dataForNode && createIfNotFound) { | ||
| dataForNode = node[dataStoreSymbol] = {}; | ||
| } | ||
| }; | ||
| var IE = { | ||
| getDataforNode(node, createIfNotFound) { | ||
| let dataStoreKey = node[dataStoreKeyExpandoPropertyName]; | ||
| const hasExistingDataStore = dataStoreKey && dataStoreKey !== "null" && dataStore[dataStoreKey]; | ||
| if (!hasExistingDataStore) { | ||
| if (!createIfNotFound) { | ||
| return void 0; | ||
| } | ||
| dataStoreKey = node[dataStoreKeyExpandoPropertyName] = "ko" + uniqueId++; | ||
| dataStore[dataStoreKey] = {}; | ||
| } | ||
| return dataStore[dataStoreKey]; | ||
| }, | ||
| clear(node) { | ||
| const dataStoreKey = node[dataStoreKeyExpandoPropertyName]; | ||
| if (dataStoreKey) { | ||
| delete dataStore[dataStoreKey]; | ||
| node[dataStoreKeyExpandoPropertyName] = null; | ||
| return true; | ||
| } | ||
| return false; | ||
| } | ||
| }; | ||
| var { getDataForNode, clear } = ieVersion ? IE : modern; | ||
| return dataForNode; | ||
| } | ||
| function nextKey() { | ||
@@ -367,2 +425,3 @@ return uniqueId++ + dataStoreKeyExpandoPropertyName; | ||
| function get(node, key) { | ||
| if (!isSafeKey(key)) throw new Error("Unsafe key for DOM data: " + key); | ||
| const dataForNode = getDataForNode(node, false); | ||
@@ -372,4 +431,11 @@ return dataForNode && dataForNode[key]; | ||
| function set(node, key, value) { | ||
| var dataForNode = getDataForNode(node, value !== void 0); | ||
| dataForNode && (dataForNode[key] = value); | ||
| if (!isSafeKey(key)) throw new Error("Unsafe key for DOM data: " + key); | ||
| const dataForNode = getDataForNode( | ||
| node, | ||
| value !== void 0 | ||
| /* createIfNotFound */ | ||
| ); | ||
| if (dataForNode) { | ||
| dataForNode[key] = value; | ||
| } | ||
| } | ||
@@ -380,5 +446,5 @@ | ||
| function getDisposeCallbacksCollection(node, createIfNotFound) { | ||
| var allDisposeCallbacks = get(node, domDataKey); | ||
| let allDisposeCallbacks = get(node, domDataKey); | ||
| if (allDisposeCallbacks === void 0 && createIfNotFound) { | ||
| allDisposeCallbacks = []; | ||
| allDisposeCallbacks = new Array(); | ||
| set(node, domDataKey, allDisposeCallbacks); | ||
@@ -398,3 +464,3 @@ } | ||
| function removeDisposeCallback(node, callback) { | ||
| var callbacksCollection = getDisposeCallbacksCollection(node, false); | ||
| const callbacksCollection = getDisposeCallbacksCollection(node, false); | ||
| if (callbacksCollection) { | ||
@@ -407,5 +473,5 @@ arrayRemoveItem(callbacksCollection, callback); | ||
| } | ||
| var otherNodeCleanerFunctions = []; | ||
| var otherNodeCleanerFunctions = new Array(); | ||
| function cleanjQueryData(node) { | ||
| var jQueryCleanNodeFn = jQueryInstance ? jQueryInstance.cleanData : null; | ||
| const jQueryCleanNodeFn = options_default.jQuery ? options_default.jQuery.cleanData : null; | ||
| if (jQueryCleanNodeFn) { | ||
@@ -417,34 +483,7 @@ jQueryCleanNodeFn([node]); | ||
| // ../utils/dist/dom/event.js | ||
| var knownEvents = {}; | ||
| var knownEventTypesByEventName = {}; | ||
| var keyEventTypeName = options_default.global.navigator && /Firefox\/2/i.test(options_default.global.navigator.userAgent) ? "KeyboardEvent" : "UIEvents"; | ||
| knownEvents[keyEventTypeName] = ["keyup", "keydown", "keypress"]; | ||
| knownEvents["MouseEvents"] = [ | ||
| "click", | ||
| "dblclick", | ||
| "mousedown", | ||
| "mouseup", | ||
| "mousemove", | ||
| "mouseover", | ||
| "mouseout", | ||
| "mouseenter", | ||
| "mouseleave" | ||
| ]; | ||
| objectForEach(knownEvents, function(eventType, knownEventsForType) { | ||
| if (knownEventsForType.length) { | ||
| for (var i = 0, j = knownEventsForType.length; i < j; i++) { | ||
| knownEventTypesByEventName[knownEventsForType[i]] = eventType; | ||
| } | ||
| } | ||
| }); | ||
| // ../utils/dist/dom/virtualElements.js | ||
| var commentNodesHaveTextProperty = options_default.document && options_default.document.createComment("test").text === "<!--test-->"; | ||
| // ../utils/dist/dom/html.js | ||
| var supportsTemplateTag = options_default.document && "content" in options_default.document.createElement("template"); | ||
| var supportsTemplateTag = options_default.useTemplateTag && options_default.document && "content" in options_default.document.createElement("template"); | ||
| // ../utils/dist/dom/selectExtensions.js | ||
| var hasDomDataExpandoProperty = Symbol("Knockout selectExtensions hasDomDataProperty"); | ||
| var hasDomDataExpandoProperty = /* @__PURE__ */ Symbol("Knockout selectExtensions hasDomDataProperty"); | ||
| var selectExtensions = { | ||
@@ -454,3 +493,3 @@ optionValueDomDataKey: nextKey(), | ||
| switch (tagNameLower(element)) { | ||
| case "option": | ||
| case "option": { | ||
| if (element[hasDomDataExpandoProperty] === true) { | ||
@@ -460,4 +499,7 @@ return get(element, selectExtensions.optionValueDomDataKey); | ||
| return element.value; | ||
| case "select": | ||
| return element.selectedIndex >= 0 ? selectExtensions.readValue(element.options[element.selectedIndex]) : void 0; | ||
| } | ||
| case "select": { | ||
| const selectElement = element; | ||
| return selectElement.selectedIndex >= 0 ? selectExtensions.readValue(selectElement.options[selectElement.selectedIndex]) : void 0; | ||
| } | ||
| default: | ||
@@ -475,27 +517,32 @@ return element.value; | ||
| } | ||
| ; | ||
| element.value = value; | ||
| } else { | ||
| const el = element; | ||
| set(element, selectExtensions.optionValueDomDataKey, value); | ||
| element[hasDomDataExpandoProperty] = true; | ||
| element.value = typeof value === "number" ? value : ""; | ||
| el[hasDomDataExpandoProperty] = true; | ||
| el.value = typeof value === "number" ? value : ""; | ||
| } | ||
| break; | ||
| case "select": | ||
| if (value === "" || value === null) { | ||
| value = void 0; | ||
| } | ||
| var selection = -1; | ||
| for (let i = 0, n = element.options.length, optionValue; i < n; ++i) { | ||
| optionValue = selectExtensions.readValue(element.options[i]); | ||
| const strictEqual = optionValue === value; | ||
| const blankEqual = optionValue === "" && value === void 0; | ||
| const numericEqual = typeof value === "number" && Number(optionValue) === value; | ||
| if (strictEqual || blankEqual || numericEqual) { | ||
| selection = i; | ||
| break; | ||
| { | ||
| if (value === "" || value === null) { | ||
| value = void 0; | ||
| } | ||
| let selection = -1; | ||
| const selectElement = element; | ||
| for (let i = 0, n = selectElement.options.length, optionValue; i < n; ++i) { | ||
| optionValue = selectExtensions.readValue(selectElement.options[i]); | ||
| const strictEqual = optionValue === value; | ||
| const blankEqual = optionValue === "" && value === void 0; | ||
| const numericEqual = typeof value === "number" && Number(optionValue) === value; | ||
| if (strictEqual || blankEqual || numericEqual) { | ||
| selection = i; | ||
| break; | ||
| } | ||
| } | ||
| if (allowUnset || selection >= 0 || value === void 0 && selectElement.size > 1) { | ||
| selectElement.selectedIndex = selection; | ||
| } | ||
| } | ||
| if (allowUnset || selection >= 0 || value === void 0 && element.size > 1) { | ||
| element.selectedIndex = selection; | ||
| } | ||
| break; | ||
@@ -506,2 +553,3 @@ default: | ||
| } | ||
| ; | ||
| element.value = value; | ||
@@ -521,3 +569,3 @@ break; | ||
| }); | ||
| var taskQueue = []; | ||
| var taskQueue = new Array(); | ||
| var taskQueueLength = 0; | ||
@@ -528,4 +576,4 @@ var nextHandle = 1; | ||
| if (w && w.MutationObserver && !(w.navigator && w.navigator.standalone)) { | ||
| options_default.taskScheduler = function(callback) { | ||
| var div = w.document.createElement("div"); | ||
| options_default.taskScheduler = (function(callback) { | ||
| const div = w.document.createElement("div"); | ||
| new w.MutationObserver(callback).observe(div, { attributes: true }); | ||
@@ -535,14 +583,3 @@ return function() { | ||
| }; | ||
| }(scheduledProcess); | ||
| } else if (w && w.document && "onreadystatechange" in w.document.createElement("script")) { | ||
| options_default.taskScheduler = function(callback) { | ||
| var script = document.createElement("script"); | ||
| script.onreadystatechange = function() { | ||
| script.onreadystatechange = null; | ||
| document.documentElement.removeChild(script); | ||
| script = null; | ||
| callback(); | ||
| }; | ||
| document.documentElement.appendChild(script); | ||
| }; | ||
| })(scheduledProcess); | ||
| } else { | ||
@@ -555,4 +592,4 @@ options_default.taskScheduler = function(callback) { | ||
| if (taskQueueLength) { | ||
| var mark = taskQueueLength, countMarks = 0; | ||
| for (var task; nextIndexToProcess < taskQueueLength; ) { | ||
| let mark = taskQueueLength, countMarks = 0; | ||
| for (let task; nextIndexToProcess < taskQueueLength; ) { | ||
| if (task = taskQueue[nextIndexToProcess++]) { | ||
@@ -591,3 +628,3 @@ if (nextIndexToProcess > mark) { | ||
| function cancel(handle) { | ||
| var index = handle - (nextHandle - taskQueueLength); | ||
| const index = handle - (nextHandle - taskQueueLength); | ||
| if (index >= nextIndexToProcess && index < taskQueueLength) { | ||
@@ -598,3 +635,3 @@ taskQueue[index] = null; | ||
| function resetForTesting() { | ||
| var length = taskQueueLength - nextIndexToProcess; | ||
| const length = taskQueueLength - nextIndexToProcess; | ||
| nextIndexToProcess = taskQueueLength = taskQueue.length = 0; | ||
@@ -618,3 +655,3 @@ return length; | ||
| // ../observable/dist/subscribableSymbol.js | ||
| var SUBSCRIBABLE_SYM = Symbol("Knockout Subscribable"); | ||
| var SUBSCRIBABLE_SYM = /* @__PURE__ */ Symbol("Knockout Subscribable"); | ||
| function isSubscribable(instance) { | ||
@@ -625,3 +662,3 @@ return instance && instance[SUBSCRIBABLE_SYM] || false; | ||
| // ../observable/dist/dependencyDetection.js | ||
| var outerFrames = []; | ||
| var outerFrames = new Array(); | ||
| var currentFrame; | ||
@@ -644,3 +681,7 @@ var lastId = 0; | ||
| } | ||
| currentFrame.callback.call(currentFrame.callbackTarget, subscribable2, subscribable2._id || (subscribable2._id = getId())); | ||
| currentFrame.callback.call( | ||
| currentFrame.callbackTarget, | ||
| subscribable2, | ||
| subscribable2._id || (subscribable2._id = getId()) | ||
| ); | ||
| } | ||
@@ -660,2 +701,3 @@ } | ||
| } | ||
| return void 0; | ||
| } | ||
@@ -666,2 +708,3 @@ function getDependencies() { | ||
| } | ||
| return void 0; | ||
| } | ||
@@ -672,2 +715,3 @@ function isInitial() { | ||
| } | ||
| return void 0; | ||
| } | ||
@@ -719,2 +763,3 @@ | ||
| } | ||
| // TC39 Observable API | ||
| unsubscribe() { | ||
@@ -729,17 +774,12 @@ this.dispose(); | ||
| // ../observable/dist/extenders.js | ||
| var primitiveTypes = { | ||
| "undefined": 1, | ||
| "boolean": 1, | ||
| "number": 1, | ||
| "string": 1 | ||
| }; | ||
| var primitiveTypes = { undefined: 1, boolean: 1, number: 1, string: 1 }; | ||
| function valuesArePrimitiveAndEqual(a, b) { | ||
| var oldValueIsPrimitive = a === null || typeof a in primitiveTypes; | ||
| const oldValueIsPrimitive = a === null || typeof a in primitiveTypes; | ||
| return oldValueIsPrimitive ? a === b : false; | ||
| } | ||
| function applyExtenders(requestedExtenders) { | ||
| var target = this; | ||
| let target = this; | ||
| if (requestedExtenders) { | ||
| objectForEach(requestedExtenders, function(key, value) { | ||
| var extenderHandler = extenders[key]; | ||
| const extenderHandler = extenders[key]; | ||
| if (typeof extenderHandler === "function") { | ||
@@ -759,3 +799,5 @@ target = extenderHandler(target, value) || target; | ||
| if (option !== true) { | ||
| throw new Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled."); | ||
| throw new Error( | ||
| "The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled." | ||
| ); | ||
| } | ||
@@ -765,3 +807,3 @@ deferUpdates(target); | ||
| function rateLimit(target, options2) { | ||
| var timeout, method, limitFunction; | ||
| let timeout, method, limitFunction; | ||
| if (typeof options2 === "number") { | ||
@@ -779,17 +821,13 @@ timeout = options2; | ||
| } | ||
| var extenders = { | ||
| notify, | ||
| deferred, | ||
| rateLimit | ||
| }; | ||
| var extenders = { notify, deferred, rateLimit }; | ||
| // ../observable/dist/subscribable.js | ||
| var LATEST_VALUE = Symbol("Knockout latest value"); | ||
| var LATEST_VALUE = /* @__PURE__ */ Symbol("Knockout latest value"); | ||
| if (!Symbol.observable) { | ||
| Symbol.observable = Symbol.for("@tko/Symbol.observable"); | ||
| Symbol.observable = /* @__PURE__ */ Symbol.for("@tko/Symbol.observable"); | ||
| } | ||
| function subscribable() { | ||
| var subscribable = function subscribableFactory() { | ||
| Object.setPrototypeOf(this, ko_subscribable_fn); | ||
| ko_subscribable_fn.init(this); | ||
| } | ||
| }; | ||
| var defaultEvent = "change"; | ||
@@ -808,5 +846,3 @@ var ko_subscribable_fn = { | ||
| event = event || defaultEvent; | ||
| const observer = isTC39Callback ? callback : { | ||
| next: callbackTarget ? callback.bind(callbackTarget) : callback | ||
| }; | ||
| const observer = isTC39Callback ? callback : { next: callbackTarget ? callback.bind(callbackTarget) : callback }; | ||
| const subscriptionInstance = new Subscription(this, observer, () => { | ||
@@ -822,3 +858,3 @@ arrayRemoveItem(this._subscriptions[event], subscriptionInstance); | ||
| if (!this._subscriptions[event]) { | ||
| this._subscriptions[event] = []; | ||
| this._subscriptions[event] = new Array(); | ||
| } | ||
@@ -866,3 +902,3 @@ this._subscriptions[event].push(subscriptionInstance); | ||
| } else { | ||
| var total = 0; | ||
| let total = 0; | ||
| objectForEach(this._subscriptions, function(eventName, subscriptions) { | ||
@@ -922,2 +958,3 @@ if (eventName !== "dirty") { | ||
| if (Observable.isDifferent(Observable[LATEST_VALUE], arguments[0])) { | ||
| ; | ||
| Observable.valueWillMutate(); | ||
@@ -943,6 +980,19 @@ Observable[LATEST_VALUE] = arguments[0]; | ||
| observable.fn = { | ||
| /** | ||
| * Compares two values for equality. | ||
| * @param a The first value. | ||
| * @param b The second value. | ||
| * @returns True if the values are equal, otherwise false. | ||
| */ | ||
| equalityComparer: valuesArePrimitiveAndEqual, | ||
| /** | ||
| * Returns the current value of the observable without creating a dependency. | ||
| * @returns The current value. | ||
| */ | ||
| peek() { | ||
| return this[LATEST_VALUE]; | ||
| }, | ||
| /** | ||
| * Notifies subscribers that the value has changed. | ||
| */ | ||
| valueHasMutated() { | ||
@@ -952,8 +1002,18 @@ this.notifySubscribers(this[LATEST_VALUE], "spectate"); | ||
| }, | ||
| /** | ||
| * Notifies subscribers that the value is about to change. | ||
| */ | ||
| valueWillMutate() { | ||
| this.notifySubscribers(this[LATEST_VALUE], "beforeChange"); | ||
| }, | ||
| /** | ||
| * Modifies the value of the observable using a function. | ||
| * @param fn The function to modify the value. | ||
| * @param peek Whether to use the current value without creating a dependency. | ||
| * @returns The modified observable. | ||
| */ | ||
| modify(fn, peek22 = true) { | ||
| return this(fn(peek22 ? this.peek() : this())); | ||
| this(fn(peek22 ? this.peek() : this())); | ||
| }, | ||
| // Some observables may not always be writeable, notably computeds. | ||
| isWriteable: true | ||
@@ -971,6 +1031,6 @@ }; | ||
| subscribable.fn.limit = function limit(limitFunction) { | ||
| var self = this; | ||
| var selfIsObservable = isObservable(self); | ||
| var beforeChange = "beforeChange"; | ||
| var ignoreBeforeChange, notifyNextChange, previousValue, pendingValue, didUpdate; | ||
| const self = this; | ||
| const selfIsObservable = isObservable(self); | ||
| const beforeChange = "beforeChange"; | ||
| let ignoreBeforeChange, notifyNextChange, previousValue, pendingValue, didUpdate; | ||
| if (!self._origNotifySubscribers) { | ||
@@ -980,3 +1040,3 @@ self._origNotifySubscribers = self.notifySubscribers; | ||
| } | ||
| var finish = limitFunction(function() { | ||
| const finish = limitFunction(function() { | ||
| self._notificationIsPending = false; | ||
@@ -1009,3 +1069,6 @@ if (selfIsObservable && pendingValue === self) { | ||
| _notifyNextChangeIfValueIsDifferent() { | ||
| if (self.isDifferent(previousValue, self.peek(true))) { | ||
| if (self.isDifferent(previousValue, self.peek( | ||
| true | ||
| /* evaluate */ | ||
| ))) { | ||
| notifyNextChange = true; | ||
@@ -1050,4 +1113,4 @@ } | ||
| let underlyingNotifySubscribersFunction; | ||
| let underlyingBeforeSubscriptionAddFunction = target.beforeSubscriptionAdd; | ||
| let underlyingAfterSubscriptionRemoveFunction = target.afterSubscriptionRemove; | ||
| const underlyingBeforeSubscriptionAddFunction = target.beforeSubscriptionAdd; | ||
| const underlyingAfterSubscriptionRemoveFunction = target.afterSubscriptionRemove; | ||
| target.beforeSubscriptionAdd = function(event) { | ||
@@ -1089,7 +1152,7 @@ if (underlyingBeforeSubscriptionAddFunction) { | ||
| }; | ||
| var previousContents = [].concat(target.peek() === void 0 ? [] : target.peek()); | ||
| let previousContents = new Array().concat(target.peek() === void 0 ? [] : target.peek()); | ||
| cachedDiff = null; | ||
| arrayChangeSubscription = target.subscribe(function(currentContents) { | ||
| let changes; | ||
| currentContents = [].concat(currentContents || []); | ||
| currentContents = new Array().concat(currentContents || []); | ||
| if (target.hasSubscriptionsForEvent(arrayChangeEventName)) { | ||
@@ -1116,5 +1179,5 @@ changes = getChanges(previousContents, currentContents); | ||
| } | ||
| var diff = [], arrayLength = rawArray.length, argsLength = args.length, offset = 0; | ||
| let diff = new Array(), arrayLength = rawArray.length, argsLength = args.length, offset = 0; | ||
| function pushDiff(status, value, index) { | ||
| return diff[diff.length] = { "status": status, "value": value, "index": index }; | ||
| return diff[diff.length] = { status, value, index }; | ||
| } | ||
@@ -1137,12 +1200,14 @@ switch (operationName) { | ||
| case "splice": | ||
| var startIndex = Math.min(Math.max(0, args[0] < 0 ? arrayLength + args[0] : args[0]), arrayLength), endDeleteIndex = argsLength === 1 ? arrayLength : Math.min(startIndex + (args[1] || 0), arrayLength), endAddIndex = startIndex + argsLength - 2, endIndex = Math.max(endDeleteIndex, endAddIndex), additions = [], deletions = []; | ||
| for (let index = startIndex, argsIndex = 2; index < endIndex; ++index, ++argsIndex) { | ||
| if (index < endDeleteIndex) { | ||
| deletions.push(pushDiff("deleted", rawArray[index], index)); | ||
| { | ||
| const startIndex = Math.min(Math.max(0, args[0] < 0 ? arrayLength + args[0] : args[0]), arrayLength), endDeleteIndex = argsLength === 1 ? arrayLength : Math.min(startIndex + (args[1] || 0), arrayLength), endAddIndex = startIndex + argsLength - 2, endIndex = Math.max(endDeleteIndex, endAddIndex), additions = new Array(), deletions = new Array(); | ||
| for (let index = startIndex, argsIndex = 2; index < endIndex; ++index, ++argsIndex) { | ||
| if (index < endDeleteIndex) { | ||
| deletions.push(pushDiff("deleted", rawArray[index], index)); | ||
| } | ||
| if (index < endAddIndex) { | ||
| additions.push(pushDiff("added", args[argsIndex], index)); | ||
| } | ||
| } | ||
| if (index < endAddIndex) { | ||
| additions.push(pushDiff("added", args[argsIndex], index)); | ||
| } | ||
| findMovesInArrayComparison(deletions, additions); | ||
| } | ||
| findMovesInArrayComparison(deletions, additions); | ||
| break; | ||
@@ -1162,8 +1227,12 @@ default: | ||
| if (typeof initialValues !== "object" || !("length" in initialValues)) { | ||
| throw new Error("The argument passed when initializing an observable array must be an array, or null, or undefined."); | ||
| throw new Error( | ||
| "The argument passed when initializing an observable array must be an array, or null, or undefined." | ||
| ); | ||
| } | ||
| var result = observable(initialValues); | ||
| Object.setPrototypeOf(result, observableArray.fn); | ||
| const result = Object.setPrototypeOf(observable(initialValues), observableArray.fn); | ||
| trackArrayChanges(result); | ||
| overwriteLengthPropertyIfSupported(result, { get: () => result().length }); | ||
| overwriteLengthPropertyIfSupported(result, { get: () => { | ||
| var _a; | ||
| return (_a = result()) == null ? void 0 : _a.length; | ||
| } }); | ||
| return result; | ||
@@ -1173,9 +1242,9 @@ } | ||
| remove(valueOrPredicate) { | ||
| var underlyingArray = this.peek(); | ||
| var removedValues = []; | ||
| var predicate = typeof valueOrPredicate === "function" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value2) { | ||
| return value2 === valueOrPredicate; | ||
| const underlyingArray = this.peek(); | ||
| const removedValues = new Array(); | ||
| const predicate = typeof valueOrPredicate === "function" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value) { | ||
| return value === valueOrPredicate; | ||
| }; | ||
| for (var i = 0; i < underlyingArray.length; i++) { | ||
| var value = underlyingArray[i]; | ||
| for (let i = 0; i < underlyingArray.length; i++) { | ||
| const value = underlyingArray[i]; | ||
| if (predicate(value)) { | ||
@@ -1200,4 +1269,4 @@ if (removedValues.length === 0) { | ||
| if (arrayOfValues === void 0) { | ||
| var underlyingArray = this.peek(); | ||
| var allValues = underlyingArray.slice(0); | ||
| const underlyingArray = this.peek(); | ||
| const allValues = underlyingArray.slice(0); | ||
| this.valueWillMutate(); | ||
@@ -1216,9 +1285,9 @@ underlyingArray.splice(0, underlyingArray.length); | ||
| destroy(valueOrPredicate) { | ||
| var underlyingArray = this.peek(); | ||
| var predicate = typeof valueOrPredicate === "function" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value2) { | ||
| return value2 === valueOrPredicate; | ||
| const underlyingArray = this.peek(); | ||
| const predicate = typeof valueOrPredicate === "function" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value) { | ||
| return value === valueOrPredicate; | ||
| }; | ||
| this.valueWillMutate(); | ||
| for (var i = underlyingArray.length - 1; i >= 0; i--) { | ||
| var value = underlyingArray[i]; | ||
| for (let i = underlyingArray.length - 1; i >= 0; i--) { | ||
| const value = underlyingArray[i]; | ||
| if (predicate(value)) { | ||
@@ -1247,3 +1316,3 @@ value["_destroy"] = true; | ||
| replace(oldItem, newItem) { | ||
| var index = this.indexOf(oldItem); | ||
| const index = this.indexOf(oldItem); | ||
| if (index >= 0) { | ||
@@ -1262,3 +1331,3 @@ this.valueWillMutate(); | ||
| [Symbol.iterator]: function* () { | ||
| yield* this(); | ||
| yield* __yieldStar(this()); | ||
| } | ||
@@ -1269,6 +1338,6 @@ }; | ||
| observableArray.fn[methodName] = function() { | ||
| var underlyingArray = this.peek(); | ||
| const underlyingArray = this.peek(); | ||
| this.valueWillMutate(); | ||
| this.cacheDiffForKnownOperation(underlyingArray, methodName, arguments); | ||
| var methodCallResult = underlyingArray[methodName].apply(underlyingArray, arguments); | ||
| const methodCallResult = underlyingArray[methodName].apply(underlyingArray, arguments); | ||
| this.valueHasMutated(); | ||
@@ -1280,3 +1349,3 @@ return methodCallResult === underlyingArray ? this : methodCallResult; | ||
| observableArray.fn[methodName] = function() { | ||
| var underlyingArray = this(); | ||
| const underlyingArray = this(); | ||
| return underlyingArray[methodName].apply(underlyingArray, arguments); | ||
@@ -1309,7 +1378,7 @@ }; | ||
| } | ||
| if (typeof options2.read !== "function") { | ||
| if (typeof (options2 == null ? void 0 : options2.read) !== "function") { | ||
| throw Error("Pass a function that returns the value of the computed"); | ||
| } | ||
| var writeFunction = options2.write; | ||
| var state = { | ||
| const writeFunction = options2.write; | ||
| const state = { | ||
| latestValue: void 0, | ||
@@ -1325,4 +1394,4 @@ isStale: true, | ||
| evaluatorFunctionTarget: evaluatorFunctionTarget || options2.owner, | ||
| disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || options2.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options2.disposeWhen || options2.disposeWhen, | ||
| disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || null, | ||
| disposeWhen: options2.disposeWhen, | ||
| domNodeDisposalCallback: null, | ||
@@ -1338,3 +1407,5 @@ dependencyTracking: {}, | ||
| } else { | ||
| throw new Error("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."); | ||
| throw new Error( | ||
| "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." | ||
| ); | ||
| } | ||
@@ -1347,2 +1418,3 @@ return this; | ||
| if (state.isDirty || state.isSleeping && computedObservable.haveDependenciesChanged()) { | ||
| ; | ||
| computedObservable.evaluateImmediate(); | ||
@@ -1377,8 +1449,13 @@ } | ||
| if (!state.isSleeping && !options2.deferEvaluation) { | ||
| ; | ||
| computedObservable.evaluateImmediate(); | ||
| } | ||
| if (state.disposeWhenNodeIsRemoved && computedObservable.isActive()) { | ||
| addDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback = function() { | ||
| computedObservable.dispose(); | ||
| }); | ||
| addDisposeCallback( | ||
| state.disposeWhenNodeIsRemoved, | ||
| state.domNodeDisposalCallback = function() { | ||
| ; | ||
| computedObservable.dispose(); | ||
| } | ||
| ); | ||
| } | ||
@@ -1393,3 +1470,3 @@ return computedObservable; | ||
| function computedBeginDependencyDetectionCallback(subscribable2, id) { | ||
| var computedObservable = this.computedObservable, state = computedObservable[computedState]; | ||
| const computedObservable = this.computedObservable, state = computedObservable[computedState]; | ||
| if (!state.isDisposed) { | ||
@@ -1401,3 +1478,7 @@ if (this.disposalCount && this.disposalCandidates[id]) { | ||
| } else if (!state.dependencyTracking[id]) { | ||
| computedObservable.addDependencyTracking(id, subscribable2, state.isSleeping ? { _target: subscribable2 } : computedObservable.subscribeToDependency(subscribable2)); | ||
| computedObservable.addDependencyTracking( | ||
| id, | ||
| subscribable2, | ||
| state.isSleeping ? { _target: subscribable2 } : computedObservable.subscribeToDependency(subscribable2) | ||
| ); | ||
| } | ||
@@ -1416,3 +1497,3 @@ if (subscribable2._notificationIsPending) { | ||
| const dependencyTracking = this[computedState].dependencyTracking; | ||
| const dependentObservables = []; | ||
| const dependentObservables = new Array(); | ||
| objectForEach(dependencyTracking, function(id, dependency) { | ||
@@ -1432,3 +1513,3 @@ dependentObservables[dependency._order] = dependency._target; | ||
| haveDependenciesChanged() { | ||
| var id, dependency, dependencyTracking = this[computedState].dependencyTracking; | ||
| let id, dependency, dependencyTracking = this[computedState].dependencyTracking; | ||
| for (id in dependencyTracking) { | ||
@@ -1442,6 +1523,10 @@ if (hasOwnProperty(dependencyTracking, id)) { | ||
| } | ||
| return false; | ||
| }, | ||
| markDirty() { | ||
| if (this._evalDelayed && !this[computedState].isBeingEvaluated) { | ||
| this._evalDelayed(false); | ||
| this._evalDelayed( | ||
| false | ||
| /* notifyChange */ | ||
| ); | ||
| } | ||
@@ -1462,3 +1547,3 @@ }, | ||
| if (target._deferUpdates) { | ||
| var dirtySub = target.subscribe(this.markDirty, this, "dirty"), changeSub = target.subscribe(this.respondToChange, this); | ||
| const dirtySub = target.subscribe(this.markDirty, this, "dirty"), changeSub = target.subscribe(this.respondToChange, this); | ||
| return { | ||
@@ -1476,16 +1561,25 @@ _target: target, | ||
| evaluatePossiblyAsync() { | ||
| var computedObservable = this, throttleEvaluationTimeout = computedObservable.throttleEvaluation; | ||
| const computedObservable = this, throttleEvaluationTimeout = computedObservable.throttleEvaluation; | ||
| if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) { | ||
| clearTimeout(this[computedState].evaluationTimeoutInstance); | ||
| this[computedState].evaluationTimeoutInstance = safeSetTimeout(function() { | ||
| computedObservable.evaluateImmediate(true); | ||
| computedObservable.evaluateImmediate( | ||
| true | ||
| /* notifyChange */ | ||
| ); | ||
| }, throttleEvaluationTimeout); | ||
| } else if (computedObservable._evalDelayed) { | ||
| computedObservable._evalDelayed(true); | ||
| computedObservable._evalDelayed( | ||
| true | ||
| /* notifyChange */ | ||
| ); | ||
| } else { | ||
| computedObservable.evaluateImmediate(true); | ||
| computedObservable.evaluateImmediate( | ||
| true | ||
| /* notifyChange */ | ||
| ); | ||
| } | ||
| }, | ||
| evaluateImmediate(notifyChange) { | ||
| var computedObservable = this, state = computedObservable[computedState], disposeWhen = state.disposeWhen, changed = false; | ||
| let computedObservable = this, state = computedObservable[computedState], disposeWhen = state.disposeWhen, changed = false; | ||
| if (state.isBeingEvaluated) { | ||
@@ -1514,4 +1608,4 @@ return; | ||
| evaluateImmediate_CallReadWithDependencyDetection(notifyChange) { | ||
| var computedObservable = this, state = computedObservable[computedState], changed = false; | ||
| var isInitial2 = state.pure ? void 0 : !state.dependenciesCount, dependencyDetectionContext = { | ||
| let computedObservable = this, state = computedObservable[computedState], changed = false; | ||
| const isInitial2 = state.pure ? void 0 : !state.dependenciesCount, dependencyDetectionContext = { | ||
| computedObservable, | ||
@@ -1529,3 +1623,3 @@ disposalCandidates: state.dependencyTracking, | ||
| state.dependenciesCount = 0; | ||
| var newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext); | ||
| const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext); | ||
| if (!state.dependenciesCount) { | ||
@@ -1562,3 +1656,3 @@ computedObservable.dispose(); | ||
| try { | ||
| var readFunction = state.readFunction; | ||
| const readFunction = state.readFunction; | ||
| return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction(); | ||
@@ -1603,3 +1697,7 @@ } finally { | ||
| } | ||
| this._limitChange(this, !isChange); | ||
| this._limitChange( | ||
| this, | ||
| !isChange | ||
| /* isDirty */ | ||
| ); | ||
| } | ||
@@ -1609,3 +1707,3 @@ }); | ||
| dispose() { | ||
| var state = this[computedState]; | ||
| const state = this[computedState]; | ||
| if (!state.isSleeping && state.dependencyTracking) { | ||
@@ -1626,3 +1724,3 @@ objectForEach(state.dependencyTracking, function(id, dependency) { | ||
| beforeSubscriptionAdd(event) { | ||
| var computedObservable = this, state = computedObservable[computedState]; | ||
| const computedObservable = this, state = computedObservable[computedState]; | ||
| if (!state.isDisposed && state.isSleeping && event === "change") { | ||
@@ -1637,3 +1735,3 @@ state.isSleeping = false; | ||
| } else { | ||
| var dependenciesOrder = []; | ||
| const dependenciesOrder = new Array(); | ||
| objectForEach(state.dependencyTracking, function(id, dependency) { | ||
@@ -1643,3 +1741,3 @@ dependenciesOrder[dependency._order] = id; | ||
| arrayForEach(dependenciesOrder, function(id, order) { | ||
| var dependency = state.dependencyTracking[id], subscription = computedObservable.subscribeToDependency(dependency._target); | ||
| const dependency = state.dependencyTracking[id], subscription = computedObservable.subscribeToDependency(dependency._target); | ||
| subscription._order = order; | ||
@@ -1661,3 +1759,3 @@ subscription._version = dependency._version; | ||
| afterSubscriptionRemove(event) { | ||
| var state = this[computedState]; | ||
| const state = this[computedState]; | ||
| if (!state.isDisposed && event === "change" && !this.hasSubscriptionsForEvent("change")) { | ||
@@ -1679,3 +1777,3 @@ objectForEach(state.dependencyTracking, function(id, dependency) { | ||
| getVersion() { | ||
| var state = this[computedState]; | ||
| const state = this[computedState]; | ||
| if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) { | ||
@@ -1706,7 +1804,9 @@ this.evaluateImmediate(); | ||
| if (typeof evaluatorFunctionOrOptions === "function") { | ||
| return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, { "pure": true }); | ||
| const evaluator = evaluatorFunctionOrOptions; | ||
| return computed(evaluator, evaluatorFunctionTarget, { pure: true }); | ||
| } else { | ||
| evaluatorFunctionOrOptions = extend({}, evaluatorFunctionOrOptions); | ||
| evaluatorFunctionOrOptions.pure = true; | ||
| return computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget); | ||
| let options2 = evaluatorFunctionOrOptions; | ||
| options2 = extend({}, options2); | ||
| options2.pure = true; | ||
| return computed(options2, evaluatorFunctionTarget); | ||
| } | ||
@@ -1718,3 +1818,3 @@ } | ||
| target.throttleEvaluation = timeout; | ||
| var writeTimeoutInstance = null; | ||
| let writeTimeoutInstance = void 0; | ||
| return computed({ | ||
@@ -1730,7 +1830,8 @@ read: target, | ||
| } | ||
| extenders.throttle = throttleExtender; | ||
| var extenders2 = extenders; | ||
| extenders2.throttle = throttleExtender; | ||
| // src/proxy.ts | ||
| var PROXY_SYM = Symbol("Knockout Proxied Object"); | ||
| var MIRROR_SYM = Symbol("Knockout Proxied Observables"); | ||
| var PROXY_SYM = /* @__PURE__ */ Symbol("Knockout Proxied Object"); | ||
| var MIRROR_SYM = /* @__PURE__ */ Symbol("Knockout Proxied Observables"); | ||
| function makeComputed(proxy2, fn) { | ||
@@ -1802,6 +1903,3 @@ return computed({ | ||
| ownKeys() { | ||
| return [ | ||
| ...Object.getOwnPropertyNames(object), | ||
| ...Object.getOwnPropertySymbols(object) | ||
| ]; | ||
| return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]; | ||
| } | ||
@@ -1808,0 +1906,0 @@ }); |
+6
-16
@@ -1,16 +0,6 @@ | ||
| // @tko/computed 🥊 4.0.0-beta1.3 ESM | ||
| export { | ||
| computed, | ||
| isComputed, | ||
| isPureComputed, | ||
| pureComputed | ||
| } from "./computed"; | ||
| export { | ||
| throttleExtender | ||
| } from "./throttleExtender"; | ||
| export { | ||
| proxy | ||
| } from "./proxy"; | ||
| export { | ||
| when | ||
| } from "./when"; | ||
| // @tko/computed 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| export { computed, isComputed, isPureComputed, pureComputed } from "./computed"; | ||
| export { throttleExtender } from "./throttleExtender"; | ||
| export { proxy } from "./proxy"; | ||
| export { when } from "./when"; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["//\n// tko.computed - Exports\n//\n// knockout -> tko changes:\n// Deprecates `dependentObservable` (use `computed`)\n//\n\nexport {\n computed,\n isComputed,\n isPureComputed,\n pureComputed\n} from './computed'\n\nexport {\n throttleExtender\n} from './throttleExtender'\n\nexport {\n proxy\n} from './proxy'\n\nexport {\n when\n} from './when'\n"], | ||
| "mappings": ";AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA;AAAA;AAAA;", | ||
| "sourcesContent": ["//\n// tko.computed - Exports\n//\n// knockout -> tko changes:\n// Deprecates `dependentObservable` (use `computed`)\n//\n\nexport { computed, isComputed, isPureComputed, pureComputed } from './computed'\n\nexport type { Computed } from './computed'\n\nexport { throttleExtender } from './throttleExtender'\n\nexport { proxy } from './proxy'\n\nexport { when } from './when'\n"], | ||
| "mappings": ";;AAOA,SAAS,UAAU,YAAY,gBAAgB,oBAAoB;AAInE,SAAS,wBAAwB;AAEjC,SAAS,aAAa;AAEtB,SAAS,YAAY;", | ||
| "names": [] | ||
| } |
+6
-16
@@ -1,16 +0,6 @@ | ||
| // @tko/computed 🥊 4.0.0-beta1.3 MJS | ||
| export { | ||
| computed, | ||
| isComputed, | ||
| isPureComputed, | ||
| pureComputed | ||
| } from "./computed"; | ||
| export { | ||
| throttleExtender | ||
| } from "./throttleExtender"; | ||
| export { | ||
| proxy | ||
| } from "./proxy"; | ||
| export { | ||
| when | ||
| } from "./when"; | ||
| // @tko/computed 🥊 4.0.0 MJS | ||
| "use strict"; | ||
| export { computed, isComputed, isPureComputed, pureComputed } from "./computed"; | ||
| export { throttleExtender } from "./throttleExtender"; | ||
| export { proxy } from "./proxy"; | ||
| export { when } from "./when"; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["//\n// tko.computed - Exports\n//\n// knockout -> tko changes:\n// Deprecates `dependentObservable` (use `computed`)\n//\n\nexport {\n computed,\n isComputed,\n isPureComputed,\n pureComputed\n} from './computed'\n\nexport {\n throttleExtender\n} from './throttleExtender'\n\nexport {\n proxy\n} from './proxy'\n\nexport {\n when\n} from './when'\n"], | ||
| "mappings": ";AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA;AAAA;AAAA;", | ||
| "sourcesContent": ["//\n// tko.computed - Exports\n//\n// knockout -> tko changes:\n// Deprecates `dependentObservable` (use `computed`)\n//\n\nexport { computed, isComputed, isPureComputed, pureComputed } from './computed'\n\nexport type { Computed } from './computed'\n\nexport { throttleExtender } from './throttleExtender'\n\nexport { proxy } from './proxy'\n\nexport { when } from './when'\n"], | ||
| "mappings": ";;AAOA,SAAS,UAAU,YAAY,gBAAgB,oBAAoB;AAInE,SAAS,wBAAwB;AAEjC,SAAS,aAAa;AAEtB,SAAS,YAAY;", | ||
| "names": [] | ||
| } |
+7
-15
@@ -1,12 +0,7 @@ | ||
| // @tko/computed 🥊 4.0.0-beta1.3 ESM | ||
| import { | ||
| observable, | ||
| observableArray, | ||
| unwrap | ||
| } from "@tko/observable"; | ||
| import { | ||
| computed | ||
| } from "./computed"; | ||
| const PROXY_SYM = Symbol("Knockout Proxied Object"); | ||
| const MIRROR_SYM = Symbol("Knockout Proxied Observables"); | ||
| // @tko/computed 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { observable, observableArray, unwrap } from "@tko/observable"; | ||
| import { computed } from "./computed"; | ||
| const PROXY_SYM = /* @__PURE__ */ Symbol("Knockout Proxied Object"); | ||
| const MIRROR_SYM = /* @__PURE__ */ Symbol("Knockout Proxied Observables"); | ||
| function makeComputed(proxy2, fn) { | ||
@@ -78,6 +73,3 @@ return computed({ | ||
| ownKeys() { | ||
| return [ | ||
| ...Object.getOwnPropertyNames(object), | ||
| ...Object.getOwnPropertySymbols(object) | ||
| ]; | ||
| return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]; | ||
| } | ||
@@ -84,0 +76,0 @@ }); |
| { | ||
| "version": 3, | ||
| "sources": ["../src/proxy.ts"], | ||
| "sourcesContent": ["/**\n * Create an ES\n */\n\nimport {\n observable, observableArray, unwrap\n} from '@tko/observable'\n\nimport {\n computed\n} 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) ? observableArray\n : typeof value === 'function' ? 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) { return prop in mirror },\n get (target, prop) { return unwrap(mirror[prop]) },\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]\n return delete object[property]\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 () { return Object.getPrototypeOf(object) },\n setPrototypeOf (target, proto) { return Object.setPrototypeOf(object, proto) },\n defineProperty (target, prop, desc) { return Object.defineProperty(object, prop, desc) },\n preventExtensions () { return Object.preventExtensions(object) },\n isExtensible () { return Object.isExtensible(object) },\n ownKeys () {\n return [...Object.getOwnPropertyNames(object),\n ...Object.getOwnPropertySymbols(object)]\n }\n })\n assignOrUpdate(mirror, object, proxy)\n return proxy\n}\n\nexport function getObservable (proxied, prop) { return proxied[MIRROR_SYM][prop] }\nexport function peek (proxied, prop) { return getObservable(proxied, prop).peek() }\nexport function isProxied (proxied) { return PROXY_SYM in proxied }\n\nObject.assign(proxy, { getObservable, peek, isProxied })\n"], | ||
| "mappings": ";AAIA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA,MAAM,YAAY,OAAO,yBAAyB;AAClD,MAAM,aAAa,OAAO,8BAA8B;AAExD,sBAAuB,QAAO,IAAI;AAChC,SAAO,SAAS;AAAA,IACd,OAAO;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,qBAAsB,QAAQ,MAAM,OAAO,QAAO;AAChD,MAAI,CAAC,OAAO,OAAO;AACjB,UAAM,MAAM,MAAM,QAAQ,KAAK,IAAI,kBAC/B,OAAO,UAAU,aAAa,aAAa,KAAK,MAAM,MAAK,IAC3D;AACJ,WAAO,QAAQ,IAAI,KAAK;AAAA,EAC1B,OAAO;AACL,WAAO,MAAM,KAAK;AAAA,EACpB;AACF;AAEA,wBAAwB,QAAQ,QAAQ,QAAO;AAC7C,aAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,gBAAY,QAAQ,KAAK,OAAO,MAAM,MAAK;AAAA,EAC7C;AACA,SAAO;AACT;AAEO,sBAAgB,QAAQ;AAC7B,QAAM,SAAS,GAAG,YAAY,OAAO;AACrC,SAAO,cAAc;AACrB,QAAM,SAAQ,IAAI,MAAM,WAAY;AAAA,EAAC,GAAG;AAAA,IACtC,IAAK,QAAQ,MAAM;AAAE,aAAO,QAAQ;AAAA,IAAO;AAAA,IAC3C,IAAK,QAAQ,MAAM;AAAE,aAAO,OAAO,OAAO,KAAK;AAAA,IAAE;AAAA,IACjD,IAAK,QAAQ,MAAM,OAAO,UAAU;AAClC,kBAAY,QAAQ,MAAM,OAAO,MAAK;AACtC,aAAO,QAAQ;AACf,aAAO;AAAA,IACT;AAAA,IACA,eAAgB,UAAU;AACxB,aAAO,OAAO;AACd,aAAO,OAAO,OAAO;AAAA,IACvB;AAAA,IACA,MAAO,QAAQ,SAAS,CAAC,QAAQ;AAC/B,UAAI,OAAO;AACT,uBAAe,QAAQ,OAAO,MAAK;AACnC,eAAO,OAAO,OAAO,QAAQ,KAAK;AAAA,MACpC;AACA,aAAO;AAAA,IACT;AAAA,IACA,iBAAkB;AAAE,aAAO,OAAO,eAAe,MAAM;AAAA,IAAE;AAAA,IACzD,eAAgB,QAAQ,OAAO;AAAE,aAAO,OAAO,eAAe,QAAQ,KAAK;AAAA,IAAE;AAAA,IAC7E,eAAgB,QAAQ,MAAM,MAAM;AAAE,aAAO,OAAO,eAAe,QAAQ,MAAM,IAAI;AAAA,IAAE;AAAA,IACvF,oBAAqB;AAAE,aAAO,OAAO,kBAAkB,MAAM;AAAA,IAAE;AAAA,IAC/D,eAAgB;AAAE,aAAO,OAAO,aAAa,MAAM;AAAA,IAAE;AAAA,IACrD,UAAW;AACT,aAAO;AAAA,QAAC,GAAG,OAAO,oBAAoB,MAAM;AAAA,QACpC,GAAG,OAAO,sBAAsB,MAAM;AAAA,MAAC;AAAA,IACjD;AAAA,EACF,CAAC;AACD,iBAAe,QAAQ,QAAQ,MAAK;AACpC,SAAO;AACT;AAEO,8BAAwB,SAAS,MAAM;AAAE,SAAO,QAAQ,YAAY;AAAM;AAC1E,qBAAe,SAAS,MAAM;AAAE,SAAO,cAAc,SAAS,IAAI,EAAE,KAAK;AAAE;AAC3E,0BAAoB,SAAS;AAAE,SAAO,aAAa;AAAQ;AAElE,OAAO,OAAO,OAAO,EAAE,eAAe,MAAM,UAAU,CAAC;", | ||
| "names": [] | ||
| "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;", | ||
| "names": ["proxy"] | ||
| } |
@@ -1,11 +0,8 @@ | ||
| // @tko/computed 🥊 4.0.0-beta1.3 ESM | ||
| import { | ||
| extenders | ||
| } from "@tko/observable"; | ||
| import { | ||
| computed | ||
| } from "./computed"; | ||
| // @tko/computed 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { extenders as baseExtenders } from "@tko/observable"; | ||
| import { computed } from "./computed"; | ||
| export function throttleExtender(target, timeout) { | ||
| target.throttleEvaluation = timeout; | ||
| var writeTimeoutInstance = null; | ||
| let writeTimeoutInstance = void 0; | ||
| return computed({ | ||
@@ -21,2 +18,3 @@ read: target, | ||
| } | ||
| const extenders = baseExtenders; | ||
| extenders.throttle = throttleExtender; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/throttleExtender.ts"], | ||
| "sourcesContent": ["import {\n extenders\n} from '@tko/observable'\n\nimport {\n computed\n} from './computed'\n\nexport function throttleExtender (target, timeout) {\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 var writeTimeoutInstance = null\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\nextenders.throttle = throttleExtender\n"], | ||
| "mappings": ";AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIO,iCAA2B,QAAQ,SAAS;AAKjD,SAAO,qBAAqB;AAI5B,MAAI,uBAAuB;AAC3B,SAAO,SAAS;AAAA,IACd,MAAM;AAAA,IACN,OAAO,SAAU,OAAO;AACtB,mBAAa,oBAAoB;AACjC,6BAAuB,WAAW,WAAY;AAC5C,eAAO,KAAK;AAAA,MACd,GAAG,OAAO;AAAA,IACZ;AAAA,EACF,CAAC;AACH;AAEA,UAAU,WAAW;", | ||
| "sourcesContent": ["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 = 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"], | ||
| "mappings": ";;AAAA,SAAS,aAAa,qBAAqB;AAC3C,SAAS,gBAAgB;AAElB,gBAAS,iBAAiB,QAAa,SAAiB;AAK7D,SAAO,qBAAqB;AAI5B,MAAI,uBAAkE;AACtE,SAAO,SAAS;AAAA,IACd,MAAM;AAAA,IACN,OAAO,SAAU,OAAO;AACtB,mBAAa,oBAAoB;AACjC,6BAAuB,WAAW,WAAY;AAC5C,eAAO,KAAK;AAAA,MACd,GAAG,OAAO;AAAA,IACZ;AAAA,EACF,CAAC;AACH;AAEA,MAAM,YAAY;AAElB,UAAU,WAAW;", | ||
| "names": [] | ||
| } |
+3
-4
@@ -1,5 +0,4 @@ | ||
| // @tko/computed 🥊 4.0.0-beta1.3 ESM | ||
| import { | ||
| pureComputed | ||
| } from "./computed"; | ||
| // @tko/computed 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { pureComputed } from "./computed"; | ||
| function kowhen(predicate, context, resolve) { | ||
@@ -6,0 +5,0 @@ const observable = pureComputed(predicate, context).extend({ notify: "always" }); |
+2
-2
| { | ||
| "version": 3, | ||
| "sources": ["../src/when.ts"], | ||
| "sourcesContent": ["\nimport {\n pureComputed\n} 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": ";AACA;AAAA;AAAA;AAIA,gBAAiB,WAAW,SAAS,SAAS;AAC5C,QAAM,aAAa,aAAa,WAAW,OAAO,EAAE,OAAO,EAAC,QAAQ,SAAQ,CAAC;AAC7E,QAAM,eAAe,WAAW,UAAU,WAAS;AACjD,QAAI,OAAO;AACT,mBAAa,QAAQ;AACrB,cAAQ,KAAK;AAAA,IACf;AAAA,EACF,CAAC;AAED,aAAW,kBAAkB,WAAW,KAAK,CAAC;AAC9C,SAAO;AACT;AAEO,qBAAe,WAAW,UAAU,SAAS;AAClD,QAAM,SAAS,OAAO,KAAK,MAAM,WAAW,OAAO;AACnD,SAAO,WAAW,OAAO,SAAS,KAAK,OAAO,CAAC,IAAI,IAAI,QAAQ,MAAM;AACvE;", | ||
| "sourcesContent": ["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": ";;AAAA,SAAS,oBAAoB;AAE7B,SAAS,OAAO,WAAW,SAAS,SAAS;AAC3C,QAAM,aAAa,aAAa,WAAW,OAAO,EAAE,OAAO,EAAE,QAAQ,SAAS,CAAC;AAC/E,QAAM,eAAe,WAAW,UAAU,WAAS;AACjD,QAAI,OAAO;AACT,mBAAa,QAAQ;AACrB,cAAQ,KAAK;AAAA,IACf;AAAA,EACF,CAAC;AAED,aAAW,kBAAkB,WAAW,KAAK,CAAC;AAC9C,SAAO;AACT;AAEO,gBAAS,KAAK,WAAW,UAAU,SAAS;AACjD,QAAM,SAAS,OAAO,KAAK,MAAM,WAAW,OAAO;AACnD,SAAO,WAAW,OAAO,SAAS,KAAK,OAAO,CAAC,IAAI,IAAI,QAAQ,MAAM;AACvE;", | ||
| "names": [] | ||
| } |
+4
-5
| { | ||
| "version": "4.0.0-beta1.3", | ||
| "version": "4.0.0", | ||
| "name": "@tko/computed", | ||
@@ -11,4 +11,4 @@ "description": "TKO Computed Observables", | ||
| "dependencies": { | ||
| "@tko/observable": "^4.0.0-beta1.3", | ||
| "@tko/utils": "^4.0.0-beta1.3", | ||
| "@tko/observable": "^4.0.0", | ||
| "@tko/utils": "^4.0.0", | ||
| "tslib": "^2.2.0" | ||
@@ -47,4 +47,3 @@ }, | ||
| "./helpers/*": "./helpers/*" | ||
| }, | ||
| "gitHead": "a8843acb8ae085915115e53a4e057b30731c635e" | ||
| } | ||
| } |
-22
| The MIT License (MIT) - http://www.opensource.org/licenses/mit-license.php | ||
| Copyright (c) Steven Sanderson, the Knockout.js team, and other contributors | ||
| http://knockoutjs.com/ | ||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
| The above copyright notice and this permission notice shall be included in | ||
| all copies or substantial portions of the Software. | ||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| THE SOFTWARE. |
Sorry, the diff of this file is too big to display
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
242371
1.33%2411
4.42%0
-100%15
-6.25%Updated
Updated