Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@tko/computed

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tko/computed - npm Package Compare versions

Comparing version
4.0.0-beta1.3
to
4.0.0
+71
-39
dist/computed.js

@@ -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": "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",
"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"]
}

@@ -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 @@ });

@@ -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": []
}

@@ -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": []
}

@@ -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": []
}

@@ -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" });

{
"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": []
}
{
"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"
}
}
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