@tko/observable 4.0.0-alpha7.4 → 4.0.0-beta1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"observable.es6.js","sources":["../src/subscribableSymbol.js","../src/dependencyDetection.js","../src/defer.js","../src/Subscription.js","../src/extenders.js","../src/subscribable.js","../src/observable.js","../src/observableArray.changeTracking.js","../src/observableArray.js","../src/mappingHelpers.js","../src/index.js"],"sourcesContent":["/**\n * Create a subscribable symbol that's used to identify subscribables.\n */\nexport const SUBSCRIBABLE_SYM = Symbol('Knockout Subscribable')\n\nexport function isSubscribable (instance) {\n return (instance && instance[SUBSCRIBABLE_SYM]) || false\n}\n","//\n// dependencyDetection\n// ---\n//\n// In KO 3.x, dependencyDetection was also known as computedContext.\n//\nimport { isSubscribable } from './subscribableSymbol.js'\n\nconst outerFrames = []\nlet currentFrame\nlet lastId = 0\n\n// Return a unique ID that can be assigned to an observable for dependency tracking.\n// Theoretically, you could eventually overflow the number storage size, resulting\n// in duplicate IDs. But in JavaScript, the largest exact integral value is 2^53\n// or 9,007,199,254,740,992. If you created 1,000,000 IDs per second, it would\n// take over 285 years to reach that number.\n// Reference http://blog.vjeux.com/2010/javascript/javascript-max_int-number-limits.html\nfunction getId () {\n return ++lastId\n}\n\nexport function begin (options) {\n outerFrames.push(currentFrame)\n currentFrame = options\n}\n\nexport function end () {\n currentFrame = outerFrames.pop()\n}\n\nexport function registerDependency (subscribable) {\n if (currentFrame) {\n if (!isSubscribable(subscribable)) { throw new Error('Only subscribable things can act as dependencies') }\n currentFrame.callback.call(currentFrame.callbackTarget, subscribable, subscribable._id || (subscribable._id = getId()))\n }\n}\n\nexport function ignore (callback, callbackTarget, callbackArgs) {\n try {\n begin()\n return callback.apply(callbackTarget, callbackArgs || [])\n } finally {\n end()\n }\n}\n\nexport function getDependenciesCount () {\n if (currentFrame) { return currentFrame.computed.getDependenciesCount() }\n}\n\nexport function getDependencies () {\n if (currentFrame) { return currentFrame.computed.getDependencies() }\n}\n\nexport function isInitial () {\n if (currentFrame) { return currentFrame.isInitial }\n}\n\nexport { ignore as ignoreDependencies }\n","//\n// Defer Updates\n// ===\n//\nimport { tasks } from '@tko/utils'\n\nexport function deferUpdates (target) {\n if (target._deferUpdates) { return }\n target._deferUpdates = true\n target.limit(function (callback) {\n let handle\n let ignoreUpdates = false\n return function () {\n if (!ignoreUpdates) {\n tasks.cancel(handle)\n handle = tasks.schedule(callback)\n try {\n ignoreUpdates = true\n target.notifySubscribers(undefined, 'dirty')\n } finally {\n ignoreUpdates = false\n }\n }\n }\n })\n}\n","\nimport {\n removeDisposeCallback, addDisposeCallback\n} from '@tko/utils'\n\n\nexport default class Subscription {\n constructor (target, observer, disposeCallback) {\n this._target = target\n this._callback = observer.next\n this._disposeCallback = disposeCallback\n this._isDisposed = false\n this._domNodeDisposalCallback = null\n }\n\n dispose () {\n if (this._domNodeDisposalCallback) {\n removeDisposeCallback(this._node, this._domNodeDisposalCallback)\n }\n this._isDisposed = true\n this._disposeCallback()\n }\n\n disposeWhenNodeIsRemoved (node) {\n this._node = node\n addDisposeCallback(node, this._domNodeDisposalCallback = this.dispose.bind(this))\n }\n\n // TC39 Observable API\n unsubscribe () { this.dispose() }\n get closed () { return this._isDisposed }\n}\n","//\n// Observable extenders\n// ---\n//\nimport {\n options, objectForEach,\n throttle as throttleFn, debounce as debounceFn\n} from '@tko/utils'\n\nimport { deferUpdates } from './defer.js'\n\nvar primitiveTypes = {\n 'undefined': 1, 'boolean': 1, 'number': 1, 'string': 1\n}\n\nexport function valuesArePrimitiveAndEqual (a, b) {\n var oldValueIsPrimitive = (a === null) || (typeof (a) in primitiveTypes)\n return oldValueIsPrimitive ? (a === b) : false\n}\n\nexport function applyExtenders (requestedExtenders) {\n var target = this\n if (requestedExtenders) {\n objectForEach(requestedExtenders, function (key, value) {\n var extenderHandler = extenders[key]\n if (typeof extenderHandler === 'function') {\n target = extenderHandler(target, value) || target\n } else {\n options.onError(new Error('Extender not found: ' + key))\n }\n })\n }\n return target\n}\n\n/*\n --- DEFAULT EXTENDERS ---\n */\n\n// Change when notifications are published.\nexport function notify (target, notifyWhen) {\n target.equalityComparer = notifyWhen == 'always'\n ? null // null equalityComparer means to always notify\n : valuesArePrimitiveAndEqual\n}\n\nexport function deferred (target, option) {\n if (option !== true) {\n throw new Error('The \\'deferred\\' extender only accepts the value \\'true\\', because it is not supported to turn deferral off once enabled.')\n }\n deferUpdates(target)\n}\n\nexport function rateLimit (target, options) {\n var timeout, method, limitFunction\n\n if (typeof options === 'number') {\n timeout = options\n } else {\n timeout = options.timeout\n method = options.method\n }\n\n // rateLimit supersedes deferred updates\n target._deferUpdates = false\n\n limitFunction = method === 'notifyWhenChangesStop' ? debounceFn : throttleFn\n\n target.limit(function (callback) {\n return limitFunction(callback, timeout)\n })\n}\n\nexport var extenders = {\n notify: notify,\n deferred: deferred,\n rateLimit: rateLimit\n}\n","/* eslint no-cond-assign: 0 */\nimport {\n arrayRemoveItem, objectForEach, options\n} from '@tko/utils'\n\nimport Subscription from './Subscription'\nimport { SUBSCRIBABLE_SYM } from './subscribableSymbol'\nimport { applyExtenders } from './extenders.js'\nimport * as dependencyDetection from './dependencyDetection.js'\nexport { isSubscribable } from './subscribableSymbol'\n\n// Descendants may have a LATEST_VALUE, which if present\n// causes TC39 subscriptions to emit the latest value when\n// subscribed.\nexport const LATEST_VALUE = Symbol('Knockout latest value')\n\nexport function subscribable () {\n Object.setPrototypeOf(this, ko_subscribable_fn)\n ko_subscribable_fn.init(this)\n}\n\nexport var defaultEvent = 'change'\n\nvar ko_subscribable_fn = {\n [SUBSCRIBABLE_SYM]: true,\n [Symbol.observable] () { return this },\n\n init (instance) {\n instance._subscriptions = { change: [] }\n instance._versionNumber = 1\n },\n\n subscribe (callback, callbackTarget, event) {\n // TC39 proposed standard Observable { next: () => ... }\n const isTC39Callback = typeof callback === 'object' && callback.next\n\n event = event || defaultEvent\n const observer = isTC39Callback ? callback : {\n next: callbackTarget ? callback.bind(callbackTarget) : callback\n }\n\n const subscriptionInstance = new Subscription(this, observer, () => {\n arrayRemoveItem(this._subscriptions[event], subscriptionInstance)\n if (this.afterSubscriptionRemove) {\n this.afterSubscriptionRemove(event)\n }\n })\n\n if (this.beforeSubscriptionAdd) {\n this.beforeSubscriptionAdd(event)\n }\n\n if (!this._subscriptions[event]) {\n this._subscriptions[event] = []\n }\n this._subscriptions[event].push(subscriptionInstance)\n\n // Have TC39 `subscribe` immediately emit.\n // https://github.com/tc39/proposal-observable/issues/190\n\n if (isTC39Callback && LATEST_VALUE in this) {\n observer.next(this[LATEST_VALUE])\n }\n\n return subscriptionInstance\n },\n\n notifySubscribers (valueToNotify, event) {\n event = event || defaultEvent\n if (event === defaultEvent) {\n this.updateVersion()\n }\n if (this.hasSubscriptionsForEvent(event)) {\n const subs = event === defaultEvent && this._changeSubscriptions\n || [...this._subscriptions[event]]\n\n try {\n dependencyDetection.begin() // Begin suppressing dependency detection (by setting the top frame to undefined)\n for (let i = 0, subscriptionInstance; subscriptionInstance = subs[i]; ++i) {\n // In case a subscription was disposed during the arrayForEach cycle, check\n // for isDisposed on each subscription before invoking its callback\n if (!subscriptionInstance._isDisposed) {\n subscriptionInstance._callback(valueToNotify)\n }\n }\n } finally {\n dependencyDetection.end() // End suppressing dependency detection\n }\n }\n },\n\n getVersion () {\n return this._versionNumber\n },\n\n hasChanged (versionToCheck) {\n return this.getVersion() !== versionToCheck\n },\n\n updateVersion () {\n ++this._versionNumber\n },\n\n hasSubscriptionsForEvent (event) {\n return this._subscriptions[event] && this._subscriptions[event].length\n },\n\n getSubscriptionsCount (event) {\n if (event) {\n return this._subscriptions[event] && this._subscriptions[event].length || 0\n } else {\n var total = 0\n objectForEach(this._subscriptions, function (eventName, subscriptions) {\n if (eventName !== 'dirty') {\n total += subscriptions.length\n }\n })\n return total\n }\n },\n\n isDifferent (oldValue, newValue) {\n return !this.equalityComparer ||\n !this.equalityComparer(oldValue, newValue)\n },\n\n once (cb) {\n const subs = this.subscribe((nv) => {\n subs.dispose()\n cb(nv)\n })\n },\n\n when (test, returnValue) {\n const current = this.peek()\n const givenRv = arguments.length > 1\n const testFn = typeof test === 'function' ? test : v => v === test\n if (testFn(current)) {\n return options.Promise.resolve(givenRv ? returnValue : current)\n }\n return new options.Promise((resolve, reject) => {\n const subs = this.subscribe(newValue => {\n if (testFn(newValue)) {\n subs.dispose()\n resolve(givenRv ? returnValue : newValue)\n }\n })\n })\n },\n\n yet (test, ...args) {\n const testFn = typeof test === 'function' ? test : v => v === test\n const negated = v => !testFn(v)\n return this.when(negated, ...args)\n },\n\n next () { return new Promise(resolve => this.once(resolve)) },\n\n toString () { return '[object Object]' },\n\n extend: applyExtenders\n}\n\n// For browsers that support proto assignment, we overwrite the prototype of each\n// observable instance. Since observables are functions, we need Function.prototype\n// to still be in the prototype chain.\nObject.setPrototypeOf(ko_subscribable_fn, Function.prototype)\n\nsubscribable.fn = ko_subscribable_fn\n","//\n// Observable values\n// ---\n//\nimport {\n options, overwriteLengthPropertyIfSupported\n} from '@tko/utils'\n\nimport * as dependencyDetection from './dependencyDetection.js'\nimport { deferUpdates } from './defer.js'\nimport { subscribable, defaultEvent, LATEST_VALUE } from './subscribable.js'\nimport { valuesArePrimitiveAndEqual } from './extenders.js'\n\nexport function observable (initialValue) {\n function Observable () {\n if (arguments.length > 0) {\n // Write\n // Ignore writes if the value hasn't changed\n if (Observable.isDifferent(Observable[LATEST_VALUE], arguments[0])) {\n Observable.valueWillMutate()\n Observable[LATEST_VALUE] = arguments[0]\n Observable.valueHasMutated()\n }\n return this // Permits chained assignments\n } else {\n // Read\n dependencyDetection.registerDependency(Observable) // The caller only needs to be notified of changes if they did a \"read\" operation\n return Observable[LATEST_VALUE]\n }\n }\n\n overwriteLengthPropertyIfSupported(Observable, { value: undefined })\n\n Observable[LATEST_VALUE] = initialValue\n\n subscribable.fn.init(Observable)\n\n // Inherit from 'observable'\n Object.setPrototypeOf(Observable, observable.fn)\n\n if (options.deferUpdates) {\n deferUpdates(Observable)\n }\n\n return Observable\n}\n\n// Define prototype for observables\nobservable.fn = {\n equalityComparer: valuesArePrimitiveAndEqual,\n peek () { return this[LATEST_VALUE] },\n valueHasMutated () {\n this.notifySubscribers(this[LATEST_VALUE], 'spectate')\n this.notifySubscribers(this[LATEST_VALUE])\n },\n valueWillMutate () {\n this.notifySubscribers(this[LATEST_VALUE], 'beforeChange')\n },\n\n modify (fn, peek = true) {\n return this(fn(peek ? this.peek() : this()))\n },\n\n // Some observables may not always be writeable, notably computeds.\n isWriteable: true\n}\n\n// Moved out of \"limit\" to avoid the extra closure\nfunction limitNotifySubscribers (value, event) {\n if (!event || event === defaultEvent) {\n this._limitChange(value)\n } else if (event === 'beforeChange') {\n this._limitBeforeChange(value)\n } else {\n this._origNotifySubscribers(value, event)\n }\n}\n\n// Add `limit` function to the subscribable prototype\nsubscribable.fn.limit = function limit (limitFunction) {\n var self = this\n var selfIsObservable = isObservable(self)\n var beforeChange = 'beforeChange'\n var ignoreBeforeChange, notifyNextChange, previousValue, pendingValue, didUpdate\n\n if (!self._origNotifySubscribers) {\n self._origNotifySubscribers = self.notifySubscribers\n self.notifySubscribers = limitNotifySubscribers\n }\n\n var finish = limitFunction(function () {\n self._notificationIsPending = false\n\n // If an observable provided a reference to itself, access it to get the latest value.\n // This allows computed observables to delay calculating their value until needed.\n if (selfIsObservable && pendingValue === self) {\n pendingValue = self._evalIfChanged ? self._evalIfChanged() : self()\n }\n const shouldNotify = notifyNextChange || (\n didUpdate && self.isDifferent(previousValue, pendingValue)\n )\n self._notifyNextChange = didUpdate = ignoreBeforeChange = false\n if (shouldNotify) {\n self._origNotifySubscribers(previousValue = pendingValue)\n }\n })\n\n Object.assign(self, {\n _limitChange (value, isDirty) {\n if (!isDirty || !self._notificationIsPending) {\n didUpdate = !isDirty\n }\n self._changeSubscriptions = [...self._subscriptions[defaultEvent]]\n self._notificationIsPending = ignoreBeforeChange = true\n pendingValue = value\n finish()\n },\n\n _limitBeforeChange (value) {\n if (!ignoreBeforeChange) {\n previousValue = value\n self._origNotifySubscribers(value, beforeChange)\n }\n },\n\n _notifyNextChangeIfValueIsDifferent () {\n if (self.isDifferent(previousValue, self.peek(true /* evaluate */))) {\n notifyNextChange = true\n }\n },\n\n _recordUpdate () {\n didUpdate = true\n }\n })\n}\n\nObject.setPrototypeOf(observable.fn, subscribable.fn)\n\nvar protoProperty = observable.protoProperty = options.protoProperty\nobservable.fn[protoProperty] = observable\n\n// Subclasses can add themselves to observableProperties so that\n// isObservable will be `true`.\nobservable.observablePrototypes = new Set([observable])\n\nexport function isObservable (instance) {\n const proto = typeof instance === 'function' && instance[protoProperty]\n if (proto && !observable.observablePrototypes.has(proto)) {\n throw Error('Invalid object that looks like an observable; possibly from another Knockout instance')\n }\n return !!proto\n}\n\nexport function unwrap (value) {\n return isObservable(value) ? value() : value\n}\n\nexport function peek (value) {\n return isObservable(value) ? value.peek() : value\n}\n\nexport function isWriteableObservable (instance) {\n return isObservable(instance) && instance.isWriteable\n}\n\nexport { isWriteableObservable as isWritableObservable }\n","//\n// Observable Array - Change Tracking Extender\n// ---\n//\n/* eslint no-fallthrough: 0 */\n\nimport {\n extend, compareArrays, findMovesInArrayComparison\n} from '@tko/utils'\n\nimport { defaultEvent } from './subscribable.js'\nimport { extenders } from './extenders.js'\n\nexport var arrayChangeEventName = 'arrayChange'\n\nexport function trackArrayChanges (target, options) {\n // Use the provided options--each call to trackArrayChanges overwrites the previously set options\n target.compareArrayOptions = {}\n if (options && typeof options === 'object') {\n extend(target.compareArrayOptions, options)\n }\n target.compareArrayOptions.sparse = true\n\n // Only modify the target observable once\n if (target.cacheDiffForKnownOperation) {\n return\n }\n let trackingChanges = false\n let cachedDiff = null\n let arrayChangeSubscription\n let pendingNotifications = 0\n let underlyingNotifySubscribersFunction\n let underlyingBeforeSubscriptionAddFunction = target.beforeSubscriptionAdd\n let underlyingAfterSubscriptionRemoveFunction = target.afterSubscriptionRemove\n\n // Watch \"subscribe\" calls, and for array change events, ensure change tracking is enabled\n target.beforeSubscriptionAdd = function (event) {\n if (underlyingBeforeSubscriptionAddFunction) {\n underlyingBeforeSubscriptionAddFunction.call(target, event)\n }\n if (event === arrayChangeEventName) {\n trackChanges()\n }\n }\n\n // Watch \"dispose\" calls, and for array change events, ensure change tracking is disabled when all are disposed\n target.afterSubscriptionRemove = function (event) {\n if (underlyingAfterSubscriptionRemoveFunction) {\n underlyingAfterSubscriptionRemoveFunction.call(target, event)\n }\n if (event === arrayChangeEventName && !target.hasSubscriptionsForEvent(arrayChangeEventName)) {\n if (underlyingNotifySubscribersFunction) {\n target.notifySubscribers = underlyingNotifySubscribersFunction\n underlyingNotifySubscribersFunction = undefined\n }\n if (arrayChangeSubscription) {\n arrayChangeSubscription.dispose()\n }\n arrayChangeSubscription = null\n trackingChanges = false\n }\n }\n\n function trackChanges () {\n // Calling 'trackChanges' multiple times is the same as calling it once\n if (trackingChanges) {\n return\n }\n\n trackingChanges = true\n\n // Intercept \"notifySubscribers\" to track how many times it was called.\n underlyingNotifySubscribersFunction = target['notifySubscribers']\n target.notifySubscribers = function (valueToNotify, event) {\n if (!event || event === defaultEvent) {\n ++pendingNotifications\n }\n return underlyingNotifySubscribersFunction.apply(this, arguments)\n }\n\n // Each time the array changes value, capture a clone so that on the next\n // change it's possible to produce a diff\n var previousContents = [].concat(target.peek() === undefined ? [] : target.peek())\n cachedDiff = null\n arrayChangeSubscription = target.subscribe(function (currentContents) {\n let changes\n // Make a copy of the current contents and ensure it's an array\n currentContents = [].concat(currentContents || [])\n\n // Compute the diff and issue notifications, but only if someone is listening\n if (target.hasSubscriptionsForEvent(arrayChangeEventName)) {\n changes = getChanges(previousContents, currentContents)\n }\n\n // Eliminate references to the old, removed items, so they can be GCed\n previousContents = currentContents\n cachedDiff = null\n pendingNotifications = 0\n\n if (changes && changes.length) {\n target.notifySubscribers(changes, arrayChangeEventName)\n }\n })\n }\n\n function getChanges (previousContents, currentContents) {\n // We try to re-use cached diffs.\n // The scenarios where pendingNotifications > 1 are when using rate-limiting or the Deferred Updates\n // plugin, which without this check would not be compatible with arrayChange notifications. Normally,\n // notifications are issued immediately so we wouldn't be queueing up more than one.\n if (!cachedDiff || pendingNotifications > 1) {\n cachedDiff = trackArrayChanges.compareArrays(previousContents, currentContents, target.compareArrayOptions)\n }\n\n return cachedDiff\n }\n\n target.cacheDiffForKnownOperation = function (rawArray, operationName, args) {\n // Only run if we're currently tracking changes for this observable array\n // and there aren't any pending deferred notifications.\n if (!trackingChanges || pendingNotifications) {\n return\n }\n var diff = [],\n arrayLength = rawArray.length,\n argsLength = args.length,\n offset = 0\n\n function pushDiff (status, value, index) {\n return diff[diff.length] = { 'status': status, 'value': value, 'index': index }\n }\n switch (operationName) {\n case 'push':\n offset = arrayLength\n case 'unshift':\n for (let index = 0; index < argsLength; index++) {\n pushDiff('added', args[index], offset + index)\n }\n break\n\n case 'pop':\n offset = arrayLength - 1\n case 'shift':\n if (arrayLength) {\n pushDiff('deleted', rawArray[offset], offset)\n }\n break\n\n case 'splice':\n // Negative start index means 'from end of array'. After that we clamp to [0...arrayLength].\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n var startIndex = Math.min(Math.max(0, args[0] < 0 ? arrayLength + args[0] : args[0]), arrayLength),\n endDeleteIndex = argsLength === 1 ? arrayLength : Math.min(startIndex + (args[1] || 0), arrayLength),\n endAddIndex = startIndex + argsLength - 2,\n endIndex = Math.max(endDeleteIndex, endAddIndex),\n additions = [], deletions = []\n for (let index = startIndex, argsIndex = 2; index < endIndex; ++index, ++argsIndex) {\n if (index < endDeleteIndex) { deletions.push(pushDiff('deleted', rawArray[index], index)) }\n if (index < endAddIndex) { additions.push(pushDiff('added', args[argsIndex], index)) }\n }\n findMovesInArrayComparison(deletions, additions)\n break\n\n default:\n return\n }\n cachedDiff = diff\n }\n}\n\n// Expose compareArrays for testing.\ntrackArrayChanges.compareArrays = compareArrays\n\n// Add the trackArrayChanges extender so we can use\n// obs.extend({ trackArrayChanges: true })\nextenders.trackArrayChanges = trackArrayChanges\n","//\n// Observable Arrays\n// ===\n//\nimport {\n arrayIndexOf, arrayForEach, overwriteLengthPropertyIfSupported\n} from '@tko/utils'\n\nimport { observable, isObservable } from './observable.js'\n\nimport { trackArrayChanges } from './observableArray.changeTracking.js'\n\nexport function observableArray (initialValues) {\n initialValues = initialValues || []\n\n 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.') }\n\n var result = observable(initialValues)\n Object.setPrototypeOf(result, observableArray.fn)\n trackArrayChanges(result)\n // ^== result.extend({ trackArrayChanges: true })\n overwriteLengthPropertyIfSupported(result, { get: () => result().length })\n return result\n}\n\nexport function isObservableArray (instance) {\n return isObservable(instance) && typeof instance.remove === 'function' && typeof instance.push === 'function'\n}\n\nobservableArray.fn = {\n remove (valueOrPredicate) {\n var underlyingArray = this.peek()\n var removedValues = []\n var predicate = typeof valueOrPredicate === 'function' && !isObservable(valueOrPredicate) ? valueOrPredicate : function (value) { return value === valueOrPredicate }\n for (var i = 0; i < underlyingArray.length; i++) {\n var value = underlyingArray[i]\n if (predicate(value)) {\n if (removedValues.length === 0) {\n this.valueWillMutate()\n }\n if (underlyingArray[i] !== value) {\n throw Error(\"Array modified during remove; cannot remove item\")\n }\n removedValues.push(value)\n underlyingArray.splice(i, 1)\n i--\n }\n }\n if (removedValues.length) {\n this.valueHasMutated()\n }\n return removedValues\n },\n\n removeAll (arrayOfValues) {\n // If you passed zero args, we remove everything\n if (arrayOfValues === undefined) {\n var underlyingArray = this.peek()\n var allValues = underlyingArray.slice(0)\n this.valueWillMutate()\n underlyingArray.splice(0, underlyingArray.length)\n this.valueHasMutated()\n return allValues\n }\n // If you passed an arg, we interpret it as an array of entries to remove\n if (!arrayOfValues) {\n return []\n }\n return this['remove'](function (value) {\n return arrayIndexOf(arrayOfValues, value) >= 0\n })\n },\n\n destroy (valueOrPredicate) {\n var underlyingArray = this.peek()\n var predicate = typeof valueOrPredicate === 'function' && !isObservable(valueOrPredicate) ? valueOrPredicate : function (value) { return value === valueOrPredicate }\n this.valueWillMutate()\n for (var i = underlyingArray.length - 1; i >= 0; i--) {\n var value = underlyingArray[i]\n if (predicate(value)) {\n value['_destroy'] = true\n }\n }\n this.valueHasMutated()\n },\n\n destroyAll (arrayOfValues) {\n // If you passed zero args, we destroy everything\n if (arrayOfValues === undefined) { return this.destroy(function () { return true }) }\n\n // If you passed an arg, we interpret it as an array of entries to destroy\n if (!arrayOfValues) {\n return []\n }\n return this.destroy(function (value) {\n return arrayIndexOf(arrayOfValues, value) >= 0\n })\n },\n\n indexOf (item) {\n return arrayIndexOf(this(), item)\n },\n\n replace (oldItem, newItem) {\n var index = this.indexOf(oldItem)\n if (index >= 0) {\n this.valueWillMutate()\n this.peek()[index] = newItem\n this.valueHasMutated()\n }\n },\n\n sorted (compareFn) {\n return [...this()].sort(compareFn)\n },\n\n reversed () {\n return [...this()].reverse()\n },\n\n [Symbol.iterator]: function * () {\n yield * this()\n }\n}\n\nObject.setPrototypeOf(observableArray.fn, observable.fn)\n\n// Populate ko.observableArray.fn with read/write functions from native arrays\n// Important: Do not add any additional functions here that may reasonably be used to *read* data from the array\n// because we'll eval them without causing subscriptions, so ko.computed output could end up getting stale\narrayForEach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function (methodName) {\n observableArray.fn[methodName] = function () {\n // Use \"peek\" to avoid creating a subscription in any computed that we're executing in the context of\n // (for consistency with mutating regular observables)\n var underlyingArray = this.peek()\n this.valueWillMutate()\n this.cacheDiffForKnownOperation(underlyingArray, methodName, arguments)\n var methodCallResult = underlyingArray[methodName].apply(underlyingArray, arguments)\n this.valueHasMutated()\n // The native sort and reverse methods return a reference to the array, but it makes more sense to return the observable array instead.\n return methodCallResult === underlyingArray ? this : methodCallResult\n }\n})\n\n// Populate ko.observableArray.fn with read-only functions from native arrays\narrayForEach(['slice'], function (methodName) {\n observableArray.fn[methodName] = function () {\n var underlyingArray = this()\n return underlyingArray[methodName].apply(underlyingArray, arguments)\n }\n})\n\n// Expose for testing.\nobservableArray.trackArrayChanges = trackArrayChanges\n","//\n// Helpers\n// ---\n// toJS & toJSON\n//\nimport {\n arrayIndexOf\n} from '@tko/utils'\n\nimport { isObservable } from './observable.js'\n\nvar maxNestedObservableDepth = 10 // Escape the (unlikely) pathological case where an observable's current value is itself (or similar reference cycle)\n\nexport function toJS (rootObject) {\n if (arguments.length == 0) { throw new Error('When calling ko.toJS, pass the object you want to convert.') }\n\n // We just unwrap everything at every level in the object graph\n return mapJsObjectGraph(rootObject, function (valueToMap) {\n // Loop because an observable's value might in turn be another observable wrapper\n for (var i = 0; isObservable(valueToMap) && (i < maxNestedObservableDepth); i++) { valueToMap = valueToMap() }\n return valueToMap\n })\n}\n\nexport function toJSON (rootObject, replacer, space) { // replacer and space are optional\n var plainJavaScriptObject = toJS(rootObject)\n return JSON.stringify(plainJavaScriptObject, replacer, space)\n}\n\nfunction mapJsObjectGraph (rootObject, mapInputCallback, visitedObjects) {\n visitedObjects = visitedObjects || new objectLookup()\n\n rootObject = mapInputCallback(rootObject)\n var canHaveProperties = (typeof rootObject === 'object') && (rootObject !== null) && (rootObject !== undefined) && (!(rootObject instanceof RegExp)) && (!(rootObject instanceof Date)) && (!(rootObject instanceof String)) && (!(rootObject instanceof Number)) && (!(rootObject instanceof Boolean))\n if (!canHaveProperties) { return rootObject }\n\n var outputProperties = rootObject instanceof Array ? [] : {}\n visitedObjects.save(rootObject, outputProperties)\n\n visitPropertiesOrArrayEntries(rootObject, function (indexer) {\n var propertyValue = mapInputCallback(rootObject[indexer])\n\n switch (typeof propertyValue) {\n case 'boolean':\n case 'number':\n case 'string':\n case 'function':\n outputProperties[indexer] = propertyValue\n break\n case 'object':\n case 'undefined':\n var previouslyMappedValue = visitedObjects.get(propertyValue)\n outputProperties[indexer] = (previouslyMappedValue !== undefined)\n ? previouslyMappedValue\n : mapJsObjectGraph(propertyValue, mapInputCallback, visitedObjects)\n break\n }\n })\n\n return outputProperties\n}\n\nfunction visitPropertiesOrArrayEntries (rootObject, visitorCallback) {\n if (rootObject instanceof Array) {\n for (var i = 0; i < rootObject.length; i++) { visitorCallback(i) }\n\n // For arrays, also respect toJSON property for custom mappings (fixes #278)\n if (typeof rootObject['toJSON'] === 'function') { visitorCallback('toJSON') }\n } else {\n for (var propertyName in rootObject) {\n visitorCallback(propertyName)\n }\n }\n}\n\nfunction objectLookup () {\n this.keys = []\n this.values = []\n}\n\nobjectLookup.prototype = {\n constructor: objectLookup,\n save: function (key, value) {\n var existingIndex = arrayIndexOf(this.keys, key)\n if (existingIndex >= 0) { this.values[existingIndex] = value } else {\n this.keys.push(key)\n this.values.push(value)\n }\n },\n get: function (key) {\n var existingIndex = arrayIndexOf(this.keys, key)\n return (existingIndex >= 0) ? this.values[existingIndex] : undefined\n }\n}\n","//\n// Observables.\n// ---\n//\n// The following are added to the root `[t]ko` object.\n//\n\nexport {\n observable, isObservable, unwrap, peek,\n isWriteableObservable, isWritableObservable\n} from './observable'\nexport { isSubscribable, subscribable, LATEST_VALUE } from './subscribable'\nexport { observableArray, isObservableArray } from './observableArray'\nexport { trackArrayChanges, arrayChangeEventName } from './observableArray.changeTracking'\nexport { toJS, toJSON } from './mappingHelpers'\nexport { deferUpdates } from './defer.js'\n\nexport { valuesArePrimitiveAndEqual, applyExtenders, extenders } from './extenders'\n\nimport * as dependencyDetection from './dependencyDetection'\n\nexport { dependencyDetection }\n"],"names":["options","debounceFn","throttleFn","dependencyDetection.begin","dependencyDetection.end","dependencyDetection.registerDependency"],"mappings":"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"}