@tko/observable 4.0.0-beta1.0 → 4.0.0

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,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../index.ts", "../../utils/dist/array.js", "../../utils/dist/options.js", "../../utils/dist/error.js", "../../utils/dist/async.js", "../../utils/dist/ie.js", "../../utils/dist/object.js", "../../utils/dist/function.js", "../../utils/dist/jquery.js", "../../utils/dist/dom/info.js", "../../utils/dist/dom/data.js", "../../utils/dist/dom/disposal.js", "../../utils/dist/dom/event.js", "../../utils/dist/dom/virtualElements.js", "../../utils/dist/dom/html.js", "../../utils/dist/dom/selectExtensions.js", "../../utils/dist/tasks.js", "../src/dependencyDetection.ts", "../src/subscribableSymbol.ts", "../src/defer.ts", "../src/Subscription.ts", "../src/extenders.ts", "../src/subscribable.ts", "../src/observable.ts", "../src/observableArray.changeTracking.ts", "../src/observableArray.ts", "../src/mappingHelpers.ts"],
4
- "sourcesContent": ["export * from './src'\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nconst { isArray } = Array;\nexport function arrayForEach(array, action, thisArg) {\n if (arguments.length > 2) {\n action = action.bind(thisArg);\n }\n for (let i = 0, j = array.length; i < j; ++i) {\n action(array[i], i, array);\n }\n}\nexport function arrayIndexOf(array, item) {\n return (isArray(array) ? array : [...array]).indexOf(item);\n}\nexport function arrayFirst(array, predicate, predicateOwner) {\n return (isArray(array) ? array : [...array]).find(predicate, predicateOwner);\n}\nexport function arrayMap(array = [], mapping, thisArg) {\n if (arguments.length > 2) {\n mapping = mapping.bind(thisArg);\n }\n return array === null ? [] : Array.from(array, mapping);\n}\nexport function arrayRemoveItem(array, itemToRemove) {\n var index = arrayIndexOf(array, itemToRemove);\n if (index > 0) {\n array.splice(index, 1);\n } else if (index === 0) {\n array.shift();\n }\n}\nexport function arrayGetDistinctValues(array = []) {\n const seen = /* @__PURE__ */ new Set();\n if (array === null) {\n return [];\n }\n return (isArray(array) ? array : [...array]).filter((item) => seen.has(item) ? false : seen.add(item));\n}\nexport function arrayFilter(array, predicate, thisArg) {\n if (arguments.length > 2) {\n predicate = predicate.bind(thisArg);\n }\n return array === null ? [] : (isArray(array) ? array : [...array]).filter(predicate);\n}\nexport function arrayPushAll(array, valuesToPush) {\n if (isArray(valuesToPush)) {\n array.push.apply(array, valuesToPush);\n } else {\n for (var i = 0, j = valuesToPush.length; i < j; i++) {\n array.push(valuesToPush[i]);\n }\n }\n return array;\n}\nexport function addOrRemoveItem(array, value, included) {\n var existingEntryIndex = arrayIndexOf(typeof array.peek === \"function\" ? array.peek() : array, value);\n if (existingEntryIndex < 0) {\n if (included) {\n array.push(value);\n }\n } else {\n if (!included) {\n array.splice(existingEntryIndex, 1);\n }\n }\n}\nexport function makeArray(arrayLikeObject) {\n return Array.from(arrayLikeObject);\n}\nexport function range(min, max) {\n min = typeof min === \"function\" ? min() : min;\n max = typeof max === \"function\" ? max() : max;\n var result = [];\n for (var i = min; i <= max; i++) {\n result.push(i);\n }\n return result;\n}\nexport function findMovesInArrayComparison(left, right, limitFailedCompares) {\n if (left.length && right.length) {\n var failedCompares, l, r, leftItem, rightItem;\n for (failedCompares = l = 0; (!limitFailedCompares || failedCompares < limitFailedCompares) && (leftItem = left[l]); ++l) {\n for (r = 0; rightItem = right[r]; ++r) {\n if (leftItem.value === rightItem.value) {\n leftItem.moved = rightItem.index;\n rightItem.moved = leftItem.index;\n right.splice(r, 1);\n failedCompares = r = 0;\n break;\n }\n }\n failedCompares += r;\n }\n }\n}\nconst statusNotInOld = \"added\";\nconst statusNotInNew = \"deleted\";\nexport function compareArrays(oldArray, newArray, options) {\n options = typeof options === \"boolean\" ? { dontLimitMoves: options } : options || {};\n oldArray = oldArray || [];\n newArray = newArray || [];\n if (oldArray.length < newArray.length) {\n return compareSmallArrayToBigArray(oldArray, newArray, statusNotInOld, statusNotInNew, options);\n } else {\n return compareSmallArrayToBigArray(newArray, oldArray, statusNotInNew, statusNotInOld, options);\n }\n}\nfunction compareSmallArrayToBigArray(smlArray, bigArray, statusNotInSml, statusNotInBig, options) {\n 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;\n for (smlIndex = 0; smlIndex <= smlIndexMax; smlIndex++) {\n lastRow = thisRow;\n editDistanceMatrix.push(thisRow = []);\n bigIndexMaxForRow = myMin(bigIndexMax, smlIndex + compareRange);\n bigIndexMinForRow = myMax(0, smlIndex - 1);\n for (bigIndex = bigIndexMinForRow; bigIndex <= bigIndexMaxForRow; bigIndex++) {\n if (!bigIndex) {\n thisRow[bigIndex] = smlIndex + 1;\n } else if (!smlIndex) {\n thisRow[bigIndex] = bigIndex + 1;\n } else if (smlArray[smlIndex - 1] === bigArray[bigIndex - 1]) {\n thisRow[bigIndex] = lastRow[bigIndex - 1];\n } else {\n var northDistance = lastRow[bigIndex] || maxDistance;\n var westDistance = thisRow[bigIndex - 1] || maxDistance;\n thisRow[bigIndex] = myMin(northDistance, westDistance) + 1;\n }\n }\n }\n var editScript = [], meMinusOne, notInSml = [], notInBig = [];\n for (smlIndex = smlIndexMax, bigIndex = bigIndexMax; smlIndex || bigIndex; ) {\n meMinusOne = editDistanceMatrix[smlIndex][bigIndex] - 1;\n if (bigIndex && meMinusOne === editDistanceMatrix[smlIndex][bigIndex - 1]) {\n notInSml.push(editScript[editScript.length] = {\n \"status\": statusNotInSml,\n \"value\": bigArray[--bigIndex],\n \"index\": bigIndex\n });\n } else if (smlIndex && meMinusOne === editDistanceMatrix[smlIndex - 1][bigIndex]) {\n notInBig.push(editScript[editScript.length] = {\n \"status\": statusNotInBig,\n \"value\": smlArray[--smlIndex],\n \"index\": smlIndex\n });\n } else {\n --bigIndex;\n --smlIndex;\n if (!options.sparse) {\n editScript.push({\n \"status\": \"retained\",\n \"value\": bigArray[bigIndex]\n });\n }\n }\n }\n findMovesInArrayComparison(notInBig, notInSml, !options.dontLimitMoves && smlIndexMax * 10);\n return editScript.reverse();\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nconst options = {\n deferUpdates: false,\n useOnlyNativeEvents: false,\n protoProperty: \"__ko_proto__\",\n defaultBindingAttribute: \"data-bind\",\n allowVirtualElements: true,\n bindingGlobals: /* @__PURE__ */ Object.create(null),\n bindingProviderInstance: null,\n createChildContextWithAs: false,\n jQuery: globalThis.jQuery,\n Promise: globalThis.Promise,\n taskScheduler: null,\n debug: false,\n global: globalThis,\n document: globalThis.document,\n filters: {},\n includeDestroyed: false,\n foreachHidesDestroyed: false,\n onError: function(e) {\n throw e;\n },\n set: function(name, value) {\n options[name] = value;\n },\n getBindingHandler() {\n },\n cleanExternalData() {\n }\n};\nObject.defineProperty(options, \"$\", {\n get: function() {\n return options.jQuery;\n }\n});\nexport default options;\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport options from \"./options\";\nexport function catchFunctionErrors(delegate) {\n if (!options.onError) {\n return delegate;\n }\n return (...args) => {\n try {\n return delegate(...args);\n } catch (err) {\n options.onError(err);\n }\n };\n}\nexport function deferError(error) {\n safeSetTimeout(function() {\n throw error;\n }, 0);\n}\nexport function safeSetTimeout(handler, timeout) {\n return setTimeout(catchFunctionErrors(handler), timeout);\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport { safeSetTimeout } from \"./error\";\nexport function throttle(callback, timeout) {\n var timeoutInstance;\n return function(...args) {\n if (!timeoutInstance) {\n timeoutInstance = safeSetTimeout(function() {\n timeoutInstance = void 0;\n callback(...args);\n }, timeout);\n }\n };\n}\nexport function debounce(callback, timeout) {\n var timeoutInstance;\n return function(...args) {\n clearTimeout(timeoutInstance);\n timeoutInstance = safeSetTimeout(() => callback(...args), timeout);\n };\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport options from \"./options\";\nconst ieVersion = options.document && function() {\n var version = 3, div = options.document.createElement(\"div\"), iElems = div.getElementsByTagName(\"i\");\n while (div.innerHTML = \"<!--[if gt IE \" + ++version + \"]><i></i><![endif]-->\", iElems[0]) {\n }\n if (!version) {\n const userAgent = window.navigator.userAgent;\n return ua.match(/MSIE ([^ ]+)/) || ua.match(/rv:([^ )]+)/);\n }\n return version > 4 ? version : void 0;\n}();\nconst isIe6 = ieVersion === 6;\nconst isIe7 = ieVersion === 7;\nexport { ieVersion, isIe6, isIe7 };\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nexport function hasOwnProperty(obj, propName) {\n return Object.prototype.hasOwnProperty.call(obj, propName);\n}\nexport function isObjectLike(obj) {\n if (obj === null) {\n return false;\n }\n return typeof obj === \"object\" || typeof obj === \"function\";\n}\nexport function extend(target, source) {\n if (source) {\n for (var prop in source) {\n if (hasOwnProperty(source, prop)) {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n}\nexport function objectForEach(obj, action) {\n for (var prop in obj) {\n if (hasOwnProperty(obj, prop)) {\n action(prop, obj[prop]);\n }\n }\n}\nexport function objectMap(source, mapping, thisArg) {\n if (!source) {\n return source;\n }\n if (arguments.length > 2) {\n mapping = mapping.bind(thisArg);\n }\n var target = {};\n for (var prop in source) {\n if (hasOwnProperty(source, prop)) {\n target[prop] = mapping(source[prop], prop, source);\n }\n }\n return target;\n}\nexport function getObjectOwnProperty(obj, propName) {\n return hasOwnProperty(obj, propName) ? obj[propName] : void 0;\n}\nexport function clonePlainObjectDeep(obj, seen) {\n if (!seen) {\n seen = [];\n }\n if (!obj || typeof obj !== \"object\" || obj.constructor !== Object || seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n var result = {};\n for (var prop in obj) {\n if (hasOwnProperty(obj, prop)) {\n result[prop] = clonePlainObjectDeep(obj[prop], seen);\n }\n }\n return result;\n}\nexport function safeStringify(value) {\n const seen = /* @__PURE__ */ new Set();\n return JSON.stringify(value, (k, v) => {\n if (seen.has(v)) {\n return \"...\";\n }\n if (typeof v === \"object\") {\n seen.add(v);\n }\n return v;\n });\n}\nexport function isThenable(object) {\n return isObjectLike(object) && typeof object.then === \"function\";\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nfunction testOverwrite() {\n try {\n Object.defineProperty(function x() {\n }, \"length\", {});\n return true;\n } catch (e) {\n return false;\n }\n}\nexport const functionSupportsLengthOverwrite = testOverwrite();\nexport function overwriteLengthPropertyIfSupported(fn, descriptor) {\n if (functionSupportsLengthOverwrite) {\n Object.defineProperty(fn, \"length\", descriptor);\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport options from \"./options\";\nexport var jQueryInstance = options.global && options.global.jQuery;\nexport function jQuerySetInstance(jquery) {\n options.jQuery = jQueryInstance = jquery;\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport { arrayFirst } from \"../array\";\nexport function domNodeIsContainedBy(node, containedByNode) {\n if (node === containedByNode) {\n return true;\n }\n if (node.nodeType === 11) {\n return false;\n }\n if (containedByNode.contains) {\n return containedByNode.contains(node.nodeType !== 1 ? node.parentNode : node);\n }\n if (containedByNode.compareDocumentPosition) {\n return (containedByNode.compareDocumentPosition(node) & 16) == 16;\n }\n while (node && node != containedByNode) {\n node = node.parentNode;\n }\n return !!node;\n}\nexport function domNodeIsAttachedToDocument(node) {\n return domNodeIsContainedBy(node, node.ownerDocument.documentElement);\n}\nexport function anyDomNodeIsAttachedToDocument(nodes) {\n return !!arrayFirst(nodes, domNodeIsAttachedToDocument);\n}\nexport function tagNameLower(element) {\n return element && element.tagName && element.tagName.toLowerCase();\n}\nexport function isDomElement(obj) {\n if (window.HTMLElement) {\n return obj instanceof HTMLElement;\n } else {\n return obj && obj.tagName && obj.nodeType === 1;\n }\n}\nexport function isDocumentFragment(obj) {\n if (window.DocumentFragment) {\n return obj instanceof DocumentFragment;\n } else {\n return obj && obj.nodeType === 11;\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport { ieVersion } from \"../ie\";\nconst datastoreTime = new Date().getTime();\nconst dataStoreKeyExpandoPropertyName = `__ko__${datastoreTime}`;\nconst dataStoreSymbol = Symbol(\"Knockout data\");\nvar dataStore;\nlet uniqueId = 0;\nconst modern = {\n getDataForNode(node, createIfNotFound) {\n let dataForNode = node[dataStoreSymbol];\n if (!dataForNode && createIfNotFound) {\n dataForNode = node[dataStoreSymbol] = {};\n }\n return dataForNode;\n },\n clear(node) {\n if (node[dataStoreSymbol]) {\n delete node[dataStoreSymbol];\n return true;\n }\n return false;\n }\n};\nconst IE = {\n getDataforNode(node, createIfNotFound) {\n let dataStoreKey = node[dataStoreKeyExpandoPropertyName];\n const hasExistingDataStore = dataStoreKey && dataStoreKey !== \"null\" && dataStore[dataStoreKey];\n if (!hasExistingDataStore) {\n if (!createIfNotFound) {\n return void 0;\n }\n dataStoreKey = node[dataStoreKeyExpandoPropertyName] = \"ko\" + uniqueId++;\n dataStore[dataStoreKey] = {};\n }\n return dataStore[dataStoreKey];\n },\n clear(node) {\n const dataStoreKey = node[dataStoreKeyExpandoPropertyName];\n if (dataStoreKey) {\n delete dataStore[dataStoreKey];\n node[dataStoreKeyExpandoPropertyName] = null;\n return true;\n }\n return false;\n }\n};\nconst { getDataForNode, clear } = ieVersion ? IE : modern;\nexport function nextKey() {\n return uniqueId++ + dataStoreKeyExpandoPropertyName;\n}\nfunction get(node, key) {\n const dataForNode = getDataForNode(node, false);\n return dataForNode && dataForNode[key];\n}\nfunction set(node, key, value) {\n var dataForNode = getDataForNode(node, value !== void 0);\n dataForNode && (dataForNode[key] = value);\n}\nfunction getOrSet(node, key, value) {\n const dataForNode = getDataForNode(node, true);\n return dataForNode[key] || (dataForNode[key] = value);\n}\nexport { get, set, getOrSet, clear };\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport * as domData from \"./data\";\nimport { default as options } from \"../options\";\nimport { arrayRemoveItem, arrayIndexOf } from \"../array\";\nimport { jQueryInstance } from \"../jquery\";\nvar domDataKey = domData.nextKey();\nvar cleanableNodeTypes = { 1: true, 8: true, 9: true };\nvar cleanableNodeTypesWithDescendants = { 1: true, 9: true };\nfunction getDisposeCallbacksCollection(node, createIfNotFound) {\n var allDisposeCallbacks = domData.get(node, domDataKey);\n if (allDisposeCallbacks === void 0 && createIfNotFound) {\n allDisposeCallbacks = [];\n domData.set(node, domDataKey, allDisposeCallbacks);\n }\n return allDisposeCallbacks;\n}\nfunction destroyCallbacksCollection(node) {\n domData.set(node, domDataKey, void 0);\n}\nfunction cleanSingleNode(node) {\n var callbacks = getDisposeCallbacksCollection(node, false);\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i](node);\n }\n }\n domData.clear(node);\n for (let i = 0, j = otherNodeCleanerFunctions.length; i < j; ++i) {\n otherNodeCleanerFunctions[i](node);\n }\n if (options.cleanExternalData) {\n options.cleanExternalData(node);\n }\n if (cleanableNodeTypesWithDescendants[node.nodeType]) {\n cleanNodesInList(node.childNodes, true);\n }\n}\nfunction cleanNodesInList(nodeList, onlyComments) {\n const cleanedNodes = [];\n let lastCleanedNode;\n for (var i = 0; i < nodeList.length; i++) {\n if (!onlyComments || nodeList[i].nodeType === 8) {\n cleanSingleNode(cleanedNodes[cleanedNodes.length] = lastCleanedNode = nodeList[i]);\n if (nodeList[i] !== lastCleanedNode) {\n while (i-- && arrayIndexOf(cleanedNodes, nodeList[i]) === -1) {\n }\n }\n }\n }\n}\nexport function addDisposeCallback(node, callback) {\n if (typeof callback !== \"function\") {\n throw new Error(\"Callback must be a function\");\n }\n getDisposeCallbacksCollection(node, true).push(callback);\n}\nexport function removeDisposeCallback(node, callback) {\n var callbacksCollection = getDisposeCallbacksCollection(node, false);\n if (callbacksCollection) {\n arrayRemoveItem(callbacksCollection, callback);\n if (callbacksCollection.length === 0) {\n destroyCallbacksCollection(node);\n }\n }\n}\nexport function cleanNode(node) {\n if (cleanableNodeTypes[node.nodeType]) {\n cleanSingleNode(node);\n if (cleanableNodeTypesWithDescendants[node.nodeType]) {\n cleanNodesInList(node.getElementsByTagName(\"*\"));\n }\n }\n return node;\n}\nexport function removeNode(node) {\n cleanNode(node);\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nexport const otherNodeCleanerFunctions = [];\nexport function addCleaner(fn) {\n otherNodeCleanerFunctions.push(fn);\n}\nexport function removeCleaner(fn) {\n const fnIndex = otherNodeCleanerFunctions.indexOf(fn);\n if (fnIndex >= 0) {\n otherNodeCleanerFunctions.splice(fnIndex, 1);\n }\n}\nexport function cleanjQueryData(node) {\n var jQueryCleanNodeFn = jQueryInstance ? jQueryInstance.cleanData : null;\n if (jQueryCleanNodeFn) {\n jQueryCleanNodeFn([node]);\n }\n}\notherNodeCleanerFunctions.push(cleanjQueryData);\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport { objectForEach } from \"../object\";\nimport { jQueryInstance } from \"../jquery\";\nimport { ieVersion } from \"../ie\";\nimport { catchFunctionErrors } from \"../error\";\nimport { tagNameLower } from \"./info\";\nimport { addDisposeCallback } from \"./disposal\";\nimport options from \"../options\";\nvar knownEvents = {}, knownEventTypesByEventName = {};\nvar keyEventTypeName = options.global.navigator && /Firefox\\/2/i.test(options.global.navigator.userAgent) ? \"KeyboardEvent\" : \"UIEvents\";\nknownEvents[keyEventTypeName] = [\"keyup\", \"keydown\", \"keypress\"];\nknownEvents[\"MouseEvents\"] = [\n \"click\",\n \"dblclick\",\n \"mousedown\",\n \"mouseup\",\n \"mousemove\",\n \"mouseover\",\n \"mouseout\",\n \"mouseenter\",\n \"mouseleave\"\n];\nobjectForEach(knownEvents, function(eventType, knownEventsForType) {\n if (knownEventsForType.length) {\n for (var i = 0, j = knownEventsForType.length; i < j; i++) {\n knownEventTypesByEventName[knownEventsForType[i]] = eventType;\n }\n }\n});\nfunction isClickOnCheckableElement(element, eventType) {\n if (tagNameLower(element) !== \"input\" || !element.type)\n return false;\n if (eventType.toLowerCase() != \"click\")\n return false;\n var inputType = element.type;\n return inputType == \"checkbox\" || inputType == \"radio\";\n}\nvar eventsThatMustBeRegisteredUsingAttachEvent = { \"propertychange\": true };\nlet jQueryEventAttachName;\nexport function registerEventHandler(element, eventType, handler, eventOptions = false) {\n const wrappedHandler = catchFunctionErrors(handler);\n const mustUseAttachEvent = ieVersion && eventsThatMustBeRegisteredUsingAttachEvent[eventType];\n const mustUseNative = Boolean(eventOptions);\n if (!options.useOnlyNativeEvents && !mustUseAttachEvent && !mustUseNative && jQueryInstance) {\n if (!jQueryEventAttachName) {\n jQueryEventAttachName = typeof jQueryInstance(element).on === \"function\" ? \"on\" : \"bind\";\n }\n jQueryInstance(element)[jQueryEventAttachName](eventType, wrappedHandler);\n } else if (!mustUseAttachEvent && typeof element.addEventListener === \"function\") {\n element.addEventListener(eventType, wrappedHandler, eventOptions);\n } else if (typeof element.attachEvent !== \"undefined\") {\n const attachEventHandler = function(event) {\n wrappedHandler.call(element, event);\n };\n const attachEventName = \"on\" + eventType;\n element.attachEvent(attachEventName, attachEventHandler);\n addDisposeCallback(element, function() {\n element.detachEvent(attachEventName, attachEventHandler);\n });\n } else {\n throw new Error(\"Browser doesn't support addEventListener or attachEvent\");\n }\n}\nexport function triggerEvent(element, eventType) {\n if (!(element && element.nodeType)) {\n throw new Error(\"element must be a DOM node when calling triggerEvent\");\n }\n var useClickWorkaround = isClickOnCheckableElement(element, eventType);\n if (!options.useOnlyNativeEvents && jQueryInstance && !useClickWorkaround) {\n jQueryInstance(element).trigger(eventType);\n } else if (typeof document.createEvent === \"function\") {\n if (typeof element.dispatchEvent === \"function\") {\n var eventCategory = knownEventTypesByEventName[eventType] || \"HTMLEvents\";\n var event = document.createEvent(eventCategory);\n event.initEvent(eventType, true, true, options.global, 0, 0, 0, 0, 0, false, false, false, false, 0, element);\n element.dispatchEvent(event);\n } else {\n throw new Error(\"The supplied element doesn't support dispatchEvent\");\n }\n } else if (useClickWorkaround && element.click) {\n element.click();\n } else if (typeof element.fireEvent !== \"undefined\") {\n element.fireEvent(\"on\" + eventType);\n } else {\n throw new Error(\"Browser doesn't support triggering events\");\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport { emptyDomNode, setDomNodeChildren as setRegularDomNodeChildren } from \"./manipulation\";\nimport { removeNode } from \"./disposal\";\nimport { tagNameLower } from \"./info\";\nimport * as domData from \"./data\";\nimport options from \"../options\";\nvar commentNodesHaveTextProperty = options.document && options.document.createComment(\"test\").text === \"<!--test-->\";\nexport var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\\s*ko(?:\\s+([\\s\\S]+))?\\s*-->$/ : /^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/;\nexport var endCommentRegex = commentNodesHaveTextProperty ? /^<!--\\s*\\/ko\\s*-->$/ : /^\\s*\\/ko\\s*$/;\nvar htmlTagsWithOptionallyClosingChildren = { \"ul\": true, \"ol\": true };\nexport function isStartComment(node) {\n return node.nodeType == 8 && startCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue);\n}\nexport function isEndComment(node) {\n return node.nodeType == 8 && endCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue);\n}\nfunction isUnmatchedEndComment(node) {\n return isEndComment(node) && !domData.get(node, matchedEndCommentDataKey);\n}\nconst matchedEndCommentDataKey = \"__ko_matchedEndComment__\";\nexport function getVirtualChildren(startComment, allowUnbalanced) {\n var currentNode = startComment;\n var depth = 1;\n var children = [];\n while (currentNode = currentNode.nextSibling) {\n if (isEndComment(currentNode)) {\n domData.set(currentNode, matchedEndCommentDataKey, true);\n depth--;\n if (depth === 0) {\n return children;\n }\n }\n children.push(currentNode);\n if (isStartComment(currentNode)) {\n depth++;\n }\n }\n if (!allowUnbalanced) {\n throw new Error(\"Cannot find closing comment tag to match: \" + startComment.nodeValue);\n }\n return null;\n}\nfunction getMatchingEndComment(startComment, allowUnbalanced) {\n var allVirtualChildren = getVirtualChildren(startComment, allowUnbalanced);\n if (allVirtualChildren) {\n if (allVirtualChildren.length > 0) {\n return allVirtualChildren[allVirtualChildren.length - 1].nextSibling;\n }\n return startComment.nextSibling;\n } else {\n return null;\n }\n}\nfunction getUnbalancedChildTags(node) {\n var childNode = node.firstChild, captureRemaining = null;\n if (childNode) {\n do {\n if (captureRemaining) {\n captureRemaining.push(childNode);\n } else if (isStartComment(childNode)) {\n var matchingEndComment = getMatchingEndComment(childNode, true);\n if (matchingEndComment) {\n childNode = matchingEndComment;\n } else {\n captureRemaining = [childNode];\n }\n } else if (isEndComment(childNode)) {\n captureRemaining = [childNode];\n }\n } while (childNode = childNode.nextSibling);\n }\n return captureRemaining;\n}\nexport var allowedBindings = {};\nexport var hasBindingValue = isStartComment;\nexport function childNodes(node) {\n return isStartComment(node) ? getVirtualChildren(node) : node.childNodes;\n}\nexport function emptyNode(node) {\n if (!isStartComment(node)) {\n emptyDomNode(node);\n } else {\n var virtualChildren = childNodes(node);\n for (var i = 0, j = virtualChildren.length; i < j; i++) {\n removeNode(virtualChildren[i]);\n }\n }\n}\nexport function setDomNodeChildren(node, childNodes2) {\n if (!isStartComment(node)) {\n setRegularDomNodeChildren(node, childNodes2);\n } else {\n emptyNode(node);\n const endCommentNode = node.nextSibling;\n const parentNode = endCommentNode.parentNode;\n for (var i = 0, j = childNodes2.length; i < j; ++i) {\n parentNode.insertBefore(childNodes2[i], endCommentNode);\n }\n }\n}\nexport function prepend(containerNode, nodeToPrepend) {\n if (!isStartComment(containerNode)) {\n if (containerNode.firstChild) {\n containerNode.insertBefore(nodeToPrepend, containerNode.firstChild);\n } else {\n containerNode.appendChild(nodeToPrepend);\n }\n } else {\n containerNode.parentNode.insertBefore(nodeToPrepend, containerNode.nextSibling);\n }\n}\nexport function insertAfter(containerNode, nodeToInsert, insertAfterNode) {\n if (!insertAfterNode) {\n prepend(containerNode, nodeToInsert);\n } else if (!isStartComment(containerNode)) {\n if (insertAfterNode.nextSibling) {\n containerNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);\n } else {\n containerNode.appendChild(nodeToInsert);\n }\n } else {\n containerNode.parentNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling);\n }\n}\nexport function firstChild(node) {\n if (!isStartComment(node)) {\n if (node.firstChild && isEndComment(node.firstChild)) {\n throw new Error(\"Found invalid end comment, as the first child of \" + node.outerHTML);\n }\n return node.firstChild;\n }\n if (!node.nextSibling || isEndComment(node.nextSibling)) {\n return null;\n }\n return node.nextSibling;\n}\nexport function lastChild(node) {\n let nextChild = firstChild(node);\n let lastChildNode;\n do {\n lastChildNode = nextChild;\n } while (nextChild = nextSibling(nextChild));\n return lastChildNode;\n}\nexport function nextSibling(node) {\n if (isStartComment(node)) {\n node = getMatchingEndComment(node);\n }\n if (node.nextSibling && isEndComment(node.nextSibling)) {\n if (isUnmatchedEndComment(node.nextSibling)) {\n throw Error(\"Found end comment without a matching opening comment, as next sibling of \" + node.outerHTML);\n }\n return null;\n } else {\n return node.nextSibling;\n }\n}\nexport function previousSibling(node) {\n var depth = 0;\n do {\n if (node.nodeType === 8) {\n if (isStartComment(node)) {\n if (--depth === 0) {\n return node;\n }\n } else if (isEndComment(node)) {\n depth++;\n }\n } else {\n if (depth === 0) {\n return node;\n }\n }\n } while (node = node.previousSibling);\n}\nexport function virtualNodeBindingValue(node) {\n var regexMatch = (commentNodesHaveTextProperty ? node.text : node.nodeValue).match(startCommentRegex);\n return regexMatch ? regexMatch[1] : null;\n}\nexport function normaliseVirtualElementDomStructure(elementVerified) {\n if (!htmlTagsWithOptionallyClosingChildren[tagNameLower(elementVerified)]) {\n return;\n }\n var childNode = elementVerified.firstChild;\n if (childNode) {\n do {\n if (childNode.nodeType === 1) {\n var unbalancedTags = getUnbalancedChildTags(childNode);\n if (unbalancedTags) {\n var nodeToInsertBefore = childNode.nextSibling;\n for (var i = 0; i < unbalancedTags.length; i++) {\n if (nodeToInsertBefore) {\n elementVerified.insertBefore(unbalancedTags[i], nodeToInsertBefore);\n } else {\n elementVerified.appendChild(unbalancedTags[i]);\n }\n }\n }\n }\n } while (childNode = childNode.nextSibling);\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport { stringTrim } from \"../string\";\nimport { makeArray } from \"../array\";\nimport { emptyDomNode, moveCleanedNodesToContainerElement } from \"./manipulation\";\nimport { jQueryInstance } from \"../jquery\";\nimport { forceRefresh } from \"./fixes\";\nimport * as virtualElements from \"./virtualElements\";\nimport options from \"../options\";\nvar none = [0, \"\", \"\"], table = [1, \"<table>\", \"</table>\"], tbody = [2, \"<table><tbody>\", \"</tbody></table>\"], colgroup = [2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\"], tr = [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"], select = [1, \"<select multiple='multiple'>\", \"</select>\"], fieldset = [1, \"<fieldset>\", \"</fieldset>\"], map = [1, \"<map>\", \"</map>\"], object = [1, \"<object>\", \"</object>\"], lookup = {\n \"area\": map,\n \"col\": colgroup,\n \"colgroup\": table,\n \"caption\": table,\n \"legend\": fieldset,\n \"thead\": table,\n \"tbody\": table,\n \"tfoot\": table,\n \"tr\": tbody,\n \"td\": tr,\n \"th\": tr,\n \"option\": select,\n \"optgroup\": select,\n \"param\": object\n}, supportsTemplateTag = options.document && \"content\" in options.document.createElement(\"template\");\nfunction getWrap(tags) {\n const m = tags.match(/^(?:<!--.*?-->\\s*?)*?<([a-z]+)[\\s>]/);\n return m && lookup[m[1]] || none;\n}\nfunction simpleHtmlParse(html, documentContext) {\n documentContext || (documentContext = document);\n var windowContext = documentContext[\"parentWindow\"] || documentContext[\"defaultView\"] || window;\n var tags = stringTrim(html).toLowerCase(), div = documentContext.createElement(\"div\"), wrap = getWrap(tags), depth = wrap[0];\n var markup = \"ignored<div>\" + wrap[1] + html + wrap[2] + \"</div>\";\n if (typeof windowContext[\"innerShiv\"] === \"function\") {\n div.appendChild(windowContext[\"innerShiv\"](markup));\n } else {\n div.innerHTML = markup;\n }\n while (depth--) {\n div = div.lastChild;\n }\n return makeArray(div.lastChild.childNodes);\n}\nfunction templateHtmlParse(html, documentContext) {\n if (!documentContext) {\n documentContext = document;\n }\n var template = documentContext.createElement(\"template\");\n template.innerHTML = html;\n return makeArray(template.content.childNodes);\n}\nfunction jQueryHtmlParse(html, documentContext) {\n if (jQueryInstance.parseHTML) {\n return jQueryInstance.parseHTML(html, documentContext) || [];\n } else {\n var elems = jQueryInstance.clean([html], documentContext);\n if (elems && elems[0]) {\n var elem = elems[0];\n while (elem.parentNode && elem.parentNode.nodeType !== 11) {\n elem = elem.parentNode;\n }\n if (elem.parentNode) {\n elem.parentNode.removeChild(elem);\n }\n }\n return elems;\n }\n}\nexport function parseHtmlFragment(html, documentContext) {\n return supportsTemplateTag ? templateHtmlParse(html, documentContext) : jQueryInstance ? jQueryHtmlParse(html, documentContext) : simpleHtmlParse(html, documentContext);\n}\nexport function parseHtmlForTemplateNodes(html, documentContext) {\n const nodes = parseHtmlFragment(html, documentContext);\n return nodes.length && nodes[0].parentElement || moveCleanedNodesToContainerElement(nodes);\n}\nexport function setHtml(node, html) {\n emptyDomNode(node);\n if (typeof html === \"function\") {\n html = html();\n }\n if (html !== null && html !== void 0) {\n if (typeof html !== \"string\") {\n html = html.toString();\n }\n if (jQueryInstance && !supportsTemplateTag) {\n jQueryInstance(node).html(html);\n } else {\n var parsedNodes = parseHtmlFragment(html, node.ownerDocument);\n if (node.nodeType === 8) {\n if (html === null) {\n virtualElements.emptyNode(node);\n } else {\n virtualElements.setDomNodeChildren(node, parsedNodes);\n }\n } else {\n for (var i = 0; i < parsedNodes.length; i++) {\n node.appendChild(parsedNodes[i]);\n }\n }\n }\n }\n}\nexport function setTextContent(element, textContent) {\n var value = typeof textContent === \"function\" ? textContent() : textContent;\n if (value === null || value === void 0) {\n value = \"\";\n }\n var innerTextNode = virtualElements.firstChild(element);\n if (!innerTextNode || innerTextNode.nodeType != 3 || virtualElements.nextSibling(innerTextNode)) {\n virtualElements.setDomNodeChildren(element, [element.ownerDocument.createTextNode(value)]);\n } else {\n innerTextNode.data = value;\n }\n forceRefresh(element);\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport { tagNameLower } from \"./info\";\nimport * as domData from \"./data\";\nvar hasDomDataExpandoProperty = Symbol(\"Knockout selectExtensions hasDomDataProperty\");\nexport var selectExtensions = {\n optionValueDomDataKey: domData.nextKey(),\n readValue: function(element) {\n switch (tagNameLower(element)) {\n case \"option\":\n if (element[hasDomDataExpandoProperty] === true) {\n return domData.get(element, selectExtensions.optionValueDomDataKey);\n }\n return element.value;\n case \"select\":\n return element.selectedIndex >= 0 ? selectExtensions.readValue(element.options[element.selectedIndex]) : void 0;\n default:\n return element.value;\n }\n },\n writeValue: function(element, value, allowUnset) {\n switch (tagNameLower(element)) {\n case \"option\":\n if (typeof value === \"string\") {\n domData.set(element, selectExtensions.optionValueDomDataKey, void 0);\n if (hasDomDataExpandoProperty in element) {\n delete element[hasDomDataExpandoProperty];\n }\n element.value = value;\n } else {\n domData.set(element, selectExtensions.optionValueDomDataKey, value);\n element[hasDomDataExpandoProperty] = true;\n element.value = typeof value === \"number\" ? value : \"\";\n }\n break;\n case \"select\":\n if (value === \"\" || value === null) {\n value = void 0;\n }\n var selection = -1;\n for (let i = 0, n = element.options.length, optionValue; i < n; ++i) {\n optionValue = selectExtensions.readValue(element.options[i]);\n const strictEqual = optionValue === value;\n const blankEqual = optionValue === \"\" && value === void 0;\n const numericEqual = typeof value === \"number\" && Number(optionValue) === value;\n if (strictEqual || blankEqual || numericEqual) {\n selection = i;\n break;\n }\n }\n if (allowUnset || selection >= 0 || value === void 0 && element.size > 1) {\n element.selectedIndex = selection;\n }\n break;\n default:\n if (value === null || value === void 0) {\n value = \"\";\n }\n element.value = value;\n break;\n }\n }\n};\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.0 ESM\nimport options from \"./options\";\nimport { deferError } from \"./error\";\nvar taskQueue = [], taskQueueLength = 0, nextHandle = 1, nextIndexToProcess = 0, w = options.global;\nif (w && w.MutationObserver && !(w.navigator && w.navigator.standalone)) {\n options.taskScheduler = function(callback) {\n var div = w.document.createElement(\"div\");\n new w.MutationObserver(callback).observe(div, { attributes: true });\n return function() {\n div.classList.toggle(\"foo\");\n };\n }(scheduledProcess);\n} else if (w && w.document && \"onreadystatechange\" in w.document.createElement(\"script\")) {\n options.taskScheduler = function(callback) {\n var script = document.createElement(\"script\");\n script.onreadystatechange = function() {\n script.onreadystatechange = null;\n document.documentElement.removeChild(script);\n script = null;\n callback();\n };\n document.documentElement.appendChild(script);\n };\n} else {\n options.taskScheduler = function(callback) {\n setTimeout(callback, 0);\n };\n}\nfunction processTasks() {\n if (taskQueueLength) {\n var mark = taskQueueLength, countMarks = 0;\n for (var task; nextIndexToProcess < taskQueueLength; ) {\n if (task = taskQueue[nextIndexToProcess++]) {\n if (nextIndexToProcess > mark) {\n if (++countMarks >= 5e3) {\n nextIndexToProcess = taskQueueLength;\n deferError(Error(\"'Too much recursion' after processing \" + countMarks + \" task groups.\"));\n break;\n }\n mark = taskQueueLength;\n }\n try {\n task();\n } catch (ex) {\n deferError(ex);\n }\n }\n }\n }\n}\nfunction scheduledProcess() {\n processTasks();\n nextIndexToProcess = taskQueueLength = taskQueue.length = 0;\n}\nfunction scheduleTaskProcessing() {\n options.taskScheduler(scheduledProcess);\n}\nexport function schedule(func) {\n if (!taskQueueLength) {\n scheduleTaskProcessing();\n }\n taskQueue[taskQueueLength++] = func;\n return nextHandle++;\n}\nexport function cancel(handle) {\n var index = handle - (nextHandle - taskQueueLength);\n if (index >= nextIndexToProcess && index < taskQueueLength) {\n taskQueue[index] = null;\n }\n}\nexport function resetForTesting() {\n var length = taskQueueLength - nextIndexToProcess;\n nextIndexToProcess = taskQueueLength = taskQueue.length = 0;\n return length;\n}\nexport { processTasks as runEarly };\n", "//\n// dependencyDetection\n// ---\n//\n// In KO 3.x, dependencyDetection was also known as computedContext.\n//\nimport { isSubscribable } from './subscribableSymbol'\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 * 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// 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'\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'\nimport * as dependencyDetection from './dependencyDetection'\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\n\nif (!Symbol.observable) {\n Symbol.observable = Symbol.for('@tko/Symbol.observable')\n}\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'\nimport { deferUpdates } from './defer'\nimport { subscribable, defaultEvent, LATEST_VALUE } from './subscribable'\nimport { valuesArePrimitiveAndEqual } from './extenders'\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'\nimport { extenders } from './extenders'\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'\n\nimport { trackArrayChanges } from './observableArray.changeTracking'\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//\n\nimport { isObservable } from './observable'\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 = new Map()) {\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.set(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"],
5
- "mappings": "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",
6
- "names": []
3
+ "sources": ["../index.ts", "../../utils/dist/array.js", "../../utils/dist/options.js", "../../utils/dist/error.js", "../../utils/dist/async.js", "../../utils/dist/object.js", "../../utils/dist/function.js", "../../utils/dist/dom/info.js", "../../utils/dist/dom/event.js", "../../utils/dist/dom/data.js", "../../utils/dist/dom/disposal.js", "../../utils/dist/dom/html.js", "../../utils/dist/dom/selectExtensions.js", "../../utils/dist/tasks.js", "../src/dependencyDetection.ts", "../src/subscribableSymbol.ts", "../src/defer.ts", "../src/Subscription.ts", "../src/extenders.ts", "../src/subscribable.ts", "../src/observable.ts", "../src/observableArray.changeTracking.ts", "../src/observableArray.ts", "../src/mappingHelpers.ts"],
4
+ "sourcesContent": ["export * from './src'\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nconst { isArray } = Array;\nexport function arrayForEach(array, action, actionOwner) {\n if (arguments.length > 2) {\n action = action.bind(actionOwner);\n }\n for (let i = 0, j = array.length; i < j; ++i) {\n action(array[i], i, array);\n }\n}\nexport function arrayIndexOf(array, item) {\n return (isArray(array) ? array : [...array]).indexOf(item);\n}\nexport function arrayFirst(array, predicate, predicateOwner) {\n return (isArray(array) ? array : [...array]).find(predicate, predicateOwner);\n}\nexport function arrayMap(array, mapping, thisArg) {\n if (arguments.length > 2) {\n mapping = mapping.bind(thisArg);\n }\n return array === null ? [] : Array.from(array, mapping);\n}\nexport function arrayRemoveItem(array, itemToRemove) {\n const index = arrayIndexOf(array, itemToRemove);\n if (index > 0) {\n array.splice(index, 1);\n } else if (index === 0) {\n array.shift();\n }\n}\nexport function arrayGetDistinctValues(array) {\n const seen = /* @__PURE__ */ new Set();\n if (array === null) {\n return [];\n }\n return (isArray(array) ? array : [...array]).filter((item) => seen.has(item) ? false : seen.add(item));\n}\nexport function arrayFilter(array, predicate, predicateOwner) {\n if (arguments.length > 2) {\n predicate = predicate.bind(predicateOwner);\n }\n return array === null ? [] : (isArray(array) ? array : [...array]).filter(predicate);\n}\nexport function arrayPushAll(array, valuesToPush) {\n if (isArray(valuesToPush)) {\n array.push.apply(array, valuesToPush);\n } else {\n for (let i = 0, j = valuesToPush.length; i < j; i++) {\n array.push(valuesToPush[i]);\n }\n }\n return array;\n}\nexport function addOrRemoveItem(array, value, included) {\n const existingEntryIndex = arrayIndexOf(typeof array.peek === \"function\" ? array.peek() : array, value);\n if (existingEntryIndex < 0) {\n if (included) {\n array.push(value);\n }\n } else {\n if (!included) {\n array.splice(existingEntryIndex, 1);\n }\n }\n}\nexport function makeArray(arrayLikeObject) {\n return Array.from(arrayLikeObject);\n}\nexport function range(min, max) {\n const minimum = typeof min === \"function\" ? min() : min;\n const maximum = typeof max === \"function\" ? max() : max;\n const result = [];\n for (let i = minimum; i <= maximum; i++) {\n result.push(i);\n }\n return result;\n}\nexport function findMovesInArrayComparison(left, right, limitFailedCompares) {\n if (left.length && right.length) {\n let failedCompares, l, r, leftItem, rightItem;\n for (failedCompares = l = 0; (!limitFailedCompares || failedCompares < limitFailedCompares) && (leftItem = left[l]); ++l) {\n for (r = 0; rightItem = right[r]; ++r) {\n if (leftItem.value === rightItem.value) {\n leftItem.moved = rightItem.index;\n rightItem.moved = leftItem.index;\n right.splice(r, 1);\n failedCompares = r = 0;\n break;\n }\n }\n failedCompares += r;\n }\n }\n}\nconst statusNotInOld = \"added\";\nconst statusNotInNew = \"deleted\";\nexport function compareArrays(oldArray, newArray, options) {\n options = typeof options === \"boolean\" ? { dontLimitMoves: options } : options || {};\n oldArray = oldArray || [];\n newArray = newArray || [];\n if (oldArray.length < newArray.length) {\n return compareSmallArrayToBigArray(oldArray, newArray, statusNotInOld, statusNotInNew, options);\n } else {\n return compareSmallArrayToBigArray(newArray, oldArray, statusNotInNew, statusNotInOld, options);\n }\n}\nfunction compareSmallArrayToBigArray(smlArray, bigArray, statusNotInSml, statusNotInBig, options) {\n 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;\n for (smlIndex = 0; smlIndex <= smlIndexMax; smlIndex++) {\n lastRow = thisRow;\n editDistanceMatrix.push(thisRow = new Array());\n bigIndexMaxForRow = myMin(bigIndexMax, smlIndex + compareRange);\n bigIndexMinForRow = myMax(0, smlIndex - 1);\n for (bigIndex = bigIndexMinForRow; bigIndex <= bigIndexMaxForRow; bigIndex++) {\n if (!bigIndex) {\n thisRow[bigIndex] = smlIndex + 1;\n } else if (!smlIndex) {\n thisRow[bigIndex] = bigIndex + 1;\n } else if (smlArray[smlIndex - 1] === bigArray[bigIndex - 1]) {\n thisRow[bigIndex] = lastRow[bigIndex - 1];\n } else {\n const northDistance = lastRow[bigIndex] || maxDistance;\n const westDistance = thisRow[bigIndex - 1] || maxDistance;\n thisRow[bigIndex] = myMin(northDistance, westDistance) + 1;\n }\n }\n }\n let editScript = new Array(), meMinusOne, notInSml = new Array(), notInBig = new Array();\n for (smlIndex = smlIndexMax, bigIndex = bigIndexMax; smlIndex || bigIndex; ) {\n meMinusOne = editDistanceMatrix[smlIndex][bigIndex] - 1;\n if (bigIndex && meMinusOne === editDistanceMatrix[smlIndex][bigIndex - 1]) {\n notInSml.push(\n editScript[editScript.length] = {\n // added\n status: statusNotInSml,\n value: bigArray[--bigIndex],\n index: bigIndex\n }\n );\n } else if (smlIndex && meMinusOne === editDistanceMatrix[smlIndex - 1][bigIndex]) {\n notInBig.push(\n editScript[editScript.length] = {\n // deleted\n status: statusNotInBig,\n value: smlArray[--smlIndex],\n index: smlIndex\n }\n );\n } else {\n --bigIndex;\n --smlIndex;\n if (!options?.sparse) {\n editScript.push({ status: \"retained\", value: bigArray[bigIndex] });\n }\n }\n }\n findMovesInArrayComparison(notInBig, notInSml, !options.dontLimitMoves && smlIndexMax * 10);\n return editScript.reverse();\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nexport class Options {\n constructor() {\n // The following options can be set on ko.options to make a function rewriting or something similar.\n this.bindingStringPreparsers = [];\n // Reference to the own knockout instance\n this.knockoutInstance = null;\n this.deferUpdates = false;\n // Don't set this false, with jquery 3.7+\n this.useOnlyNativeEvents = true;\n // Use HTML5 <template> tags if is supported\n this.useTemplateTag = true;\n this.protoProperty = \"__ko_proto__\";\n // Modify the default attribute from `data-bind`.\n this.defaultBindingAttribute = \"data-bind\";\n // Enable/disable <!-- ko binding: ... -> style bindings\n this.allowVirtualElements = true;\n // Global variables that can be accessed from bindings.\n this.bindingGlobals = /* @__PURE__ */ Object.create(null);\n // Whether the `with` binding creates a child context when used with `as`.\n this.createChildContextWithAs = false;\n // jQuery will be automatically set to globalThis.jQuery in applyBindings\n // if it is (strictly equal to) undefined. Set it to true to\n // disable automatically setting jQuery.\n this.disableJQueryUsage = false;\n this.Promise = globalThis.Promise;\n this.taskScheduler = null;\n this.debug = false;\n /**\n * The maximum size of template to parse.\n * Set to 0 to disable the limit.\n */\n this.templateSizeLimit = 4096;\n /**\n * Whether or not to allow script tags in templates.\n * If false, an error will be thrown if a script tag is detected in the template.\n * It is not recommended to set this to true.\n */\n this.allowScriptTagsInTemplates = false;\n this._sanitizeWarningLogged = false;\n this.global = globalThis;\n this.document = globalThis.document;\n // Filters for bindings\n // data-bind=\"expression | filter_1 | filter_2\"\n this.filters = {};\n // Used by the template binding.\n this.includeDestroyed = false;\n this.foreachHidesDestroyed = false;\n }\n get jQuery() {\n if (this.disableJQueryUsage) return;\n return this._jQuery ?? globalThis.jQuery;\n }\n /**\n * Set jQuery manuall to be used by TKO.\n * @param jQuery If jQuery set to undefined, TKO will not use jQuery and this.disableJQueryUsage to true.\n */\n set jQuery(jQuery) {\n if (!jQuery) {\n this.disableJQueryUsage = true;\n this._jQuery = void 0;\n } else {\n this._jQuery = jQuery;\n this.disableJQueryUsage = false;\n }\n }\n /**\n * Sanitize HTML templates before parsing them. Default is a no-op.\n * Please configure something like DOMPurify or validator.js for your environment.\n * @param html HTML string to be sanitized\n * @returns Sanitized HTML string\n */\n sanitizeHtmlTemplate(html) {\n if (!this._sanitizeWarningLogged) {\n console.warn(\n \"WARNING -- You don't have a HTML sanitizer configured. Please configure options.sanitizeHtmlTemplate to avoid XSS vulnerabilities.\"\n );\n this._sanitizeWarningLogged = true;\n }\n return html;\n }\n onError(e, throws = true) {\n if (throws) throw e;\n return e;\n }\n set(name, value) {\n this[name] = value;\n }\n // Overload getBindingHandler to have a custom lookup function.\n getBindingHandler(key) {\n return null;\n }\n cleanExternalData(node, callback) {\n }\n}\nconst options = new Options();\nexport default options;\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport options from \"./options\";\nexport function catchFunctionErrors(delegate) {\n if (!options.onError) {\n return delegate;\n }\n return (...args) => {\n try {\n return delegate(...args);\n } catch (err) {\n options.onError(err);\n }\n };\n}\nexport function deferError(error) {\n safeSetTimeout(function() {\n throw error;\n }, 0);\n}\nexport function safeSetTimeout(handler, timeout) {\n return setTimeout(catchFunctionErrors(handler), timeout);\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport { safeSetTimeout } from \"./error\";\nexport function throttle(callback, timeout) {\n let timeoutInstance;\n return function(...args) {\n if (!timeoutInstance) {\n timeoutInstance = safeSetTimeout(function() {\n timeoutInstance = void 0;\n callback(...args);\n }, timeout);\n }\n };\n}\nexport function debounce(callback, timeout) {\n let timeoutInstance;\n return function(...args) {\n clearTimeout(timeoutInstance);\n timeoutInstance = safeSetTimeout(() => callback(...args), timeout);\n };\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nexport function hasOwnProperty(obj, propName) {\n return Object.prototype.hasOwnProperty.call(obj, propName);\n}\nexport function isObjectLike(obj) {\n if (obj === null) {\n return false;\n }\n return typeof obj === \"object\" || typeof obj === \"function\";\n}\nexport function extend(target, source) {\n if (source) {\n for (const prop of Object.keys(source)) {\n if (hasOwnProperty(source, prop)) {\n ;\n target[prop] = source[prop];\n }\n }\n }\n return target;\n}\nexport function objectForEach(obj, action) {\n for (const prop in obj) {\n if (hasOwnProperty(obj, prop)) {\n action(prop, obj[prop]);\n }\n }\n}\nexport function objectMap(source, mapping, thisArg) {\n if (!source) {\n return source;\n }\n if (arguments.length > 2) {\n mapping = mapping.bind(thisArg);\n }\n const target = {};\n for (const prop in source) {\n if (hasOwnProperty(source, prop)) {\n target[prop] = mapping(source[prop], prop, source);\n }\n }\n return target;\n}\nexport function getObjectOwnProperty(obj, propName) {\n return hasOwnProperty(obj, propName) ? obj[propName] : void 0;\n}\nexport function clonePlainObjectDeep(obj, seen) {\n if (!seen) {\n seen = new Array();\n }\n if (!obj || typeof obj !== \"object\" || obj.constructor !== Object || seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n const result = {};\n for (const prop in obj) {\n if (hasOwnProperty(obj, prop)) {\n result[prop] = clonePlainObjectDeep(obj[prop], seen);\n }\n }\n return result;\n}\nexport function safeStringify(value) {\n const seen = /* @__PURE__ */ new Set();\n return JSON.stringify(value, (k, v) => {\n if (seen.has(v)) {\n return \"...\";\n }\n if (typeof v === \"object\") {\n seen.add(v);\n }\n return v;\n });\n}\nexport function isThenable(object) {\n return isObjectLike(object) && typeof object.then === \"function\";\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nfunction testOverwrite() {\n try {\n Object.defineProperty(function x() {\n }, \"length\", {});\n return true;\n } catch (e) {\n return false;\n }\n}\nexport const functionSupportsLengthOverwrite = testOverwrite();\nexport function overwriteLengthPropertyIfSupported(fn, descriptor) {\n if (functionSupportsLengthOverwrite) {\n Object.defineProperty(fn, \"length\", descriptor);\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport { arrayFirst } from \"../array\";\nexport function domNodeIsContainedBy(node, containedByNode) {\n if (node === containedByNode) {\n return true;\n }\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n return false;\n }\n if (containedByNode.contains) {\n return containedByNode.contains(node.nodeType !== Node.ELEMENT_NODE ? node.parentNode : node);\n }\n if (containedByNode.compareDocumentPosition) {\n return (containedByNode.compareDocumentPosition(node) & 16) == 16;\n }\n let parentNode = node;\n while (parentNode && parentNode != containedByNode) {\n parentNode = parentNode.parentNode;\n }\n return !!parentNode;\n}\nexport function domNodeIsAttachedToDocument(node) {\n return domNodeIsContainedBy(node, node.ownerDocument.documentElement);\n}\nexport function anyDomNodeIsAttachedToDocument(nodes) {\n return !!arrayFirst(nodes, domNodeIsAttachedToDocument);\n}\nexport function tagNameLower(element) {\n return element && element.tagName && element.tagName.toLowerCase();\n}\nexport function isDomElement(obj) {\n if (window.HTMLElement) {\n return obj instanceof HTMLElement;\n } else {\n return obj && obj.tagName && obj.nodeType === Node.ELEMENT_NODE;\n }\n}\nexport function isDocumentFragment(obj) {\n if (window.DocumentFragment) {\n return obj instanceof DocumentFragment;\n } else {\n return obj && obj.nodeType === Node.DOCUMENT_FRAGMENT_NODE;\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport { objectForEach } from \"../object\";\nimport { catchFunctionErrors } from \"../error\";\nimport { tagNameLower } from \"./info\";\nimport options from \"../options\";\nconst knownEvents = {}, knownEventTypesByEventName = {};\nknownEvents[\"UIEvents\"] = [\"keyup\", \"keydown\", \"keypress\"];\nknownEvents[\"MouseEvents\"] = [\n \"click\",\n \"dblclick\",\n \"mousedown\",\n \"mouseup\",\n \"mousemove\",\n \"mouseover\",\n \"mouseout\",\n \"mouseenter\",\n \"mouseleave\"\n];\nobjectForEach(knownEvents, function(eventType, knownEventsForType) {\n if (knownEventsForType.length) {\n for (let i = 0, j = knownEventsForType.length; i < j; i++) {\n knownEventTypesByEventName[knownEventsForType[i]] = eventType;\n }\n }\n});\nfunction isClickOnCheckableElement(element, eventType) {\n if (tagNameLower(element) !== \"input\" || !element.type) return false;\n if (eventType.toLowerCase() != \"click\") return false;\n const inputType = element.type;\n return inputType == \"checkbox\" || inputType == \"radio\";\n}\nexport function registerEventHandler(element, eventType, handler, eventOptions = false) {\n const wrappedHandler = catchFunctionErrors(handler);\n const mustUseNative = Boolean(eventOptions);\n const jQuery = options.jQuery;\n if (!options.useOnlyNativeEvents && !mustUseNative && jQuery) {\n jQuery(element).on(eventType, wrappedHandler);\n } else if (typeof element.addEventListener === \"function\") {\n element.addEventListener(eventType, wrappedHandler, eventOptions);\n } else {\n throw new Error(\"Browser doesn't support addEventListener\");\n }\n}\nfunction hasClick(element) {\n return typeof element.click === \"function\";\n}\nexport function triggerEvent(element, eventType) {\n if (!(element && element.nodeType)) {\n throw new Error(\"element must be a DOM node when calling triggerEvent\");\n }\n const useClickWorkaround = isClickOnCheckableElement(element, eventType);\n if (!options.useOnlyNativeEvents && options.jQuery && !useClickWorkaround) {\n options.jQuery(element).trigger(eventType);\n } else if (typeof document.createEvent === \"function\") {\n if (typeof element.dispatchEvent === \"function\") {\n const eventCategory = knownEventTypesByEventName[eventType] || \"HTMLEvents\";\n const event = document.createEvent(eventCategory);\n event.initEvent(\n eventType,\n true,\n true,\n options.global,\n 0,\n 0,\n 0,\n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n element\n );\n element.dispatchEvent(event);\n } else {\n throw new Error(\"The supplied element doesn't support dispatchEvent\");\n }\n } else if (useClickWorkaround && hasClick(element)) {\n element.click();\n } else {\n throw new Error(\"Browser doesn't support triggering events\");\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nconst datastoreTime = (/* @__PURE__ */ new Date()).getTime();\nconst dataStoreKeyExpandoPropertyName = `__ko__${datastoreTime}`;\nconst dataStoreSymbol = /* @__PURE__ */ Symbol(\"Knockout data\");\nconst dataStore = {};\nlet uniqueId = 0;\nfunction isSafeKey(key) {\n return key !== \"__proto__\" && key !== \"constructor\" && key !== \"prototype\";\n}\nfunction getDataForNode(node, createIfNotFound) {\n let dataForNode = node[dataStoreSymbol];\n if (!dataForNode && createIfNotFound) {\n dataForNode = node[dataStoreSymbol] = {};\n }\n return dataForNode;\n}\nfunction clear(node) {\n if (node[dataStoreSymbol]) {\n delete node[dataStoreSymbol];\n return true;\n }\n return false;\n}\nexport function nextKey() {\n return uniqueId++ + dataStoreKeyExpandoPropertyName;\n}\nfunction get(node, key) {\n if (!isSafeKey(key)) throw new Error(\"Unsafe key for DOM data: \" + key);\n const dataForNode = getDataForNode(node, false);\n return dataForNode && dataForNode[key];\n}\nfunction set(node, key, value) {\n if (!isSafeKey(key)) throw new Error(\"Unsafe key for DOM data: \" + key);\n const dataForNode = getDataForNode(\n node,\n value !== void 0\n /* createIfNotFound */\n );\n if (dataForNode) {\n dataForNode[key] = value;\n }\n}\nfunction getOrSet(node, key, value) {\n if (!isSafeKey(key)) throw new Error(\"Unsafe key for DOM data: \" + key);\n const dataForNode = getDataForNode(\n node,\n true\n /* createIfNotFound */\n );\n return dataForNode[key] || (dataForNode[key] = value);\n}\nexport { get, set, getOrSet, clear };\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport * as domData from \"./data\";\nimport { default as options } from \"../options\";\nimport { arrayRemoveItem, arrayIndexOf } from \"../array\";\nconst domDataKey = domData.nextKey();\nconst cleanableNodeTypes = { 1: true, 8: true, 9: true };\nconst cleanableNodeTypesWithDescendants = { 1: true, 9: true };\nfunction getDisposeCallbacksCollection(node, createIfNotFound) {\n let allDisposeCallbacks = domData.get(node, domDataKey);\n if (allDisposeCallbacks === void 0 && createIfNotFound) {\n allDisposeCallbacks = new Array();\n domData.set(node, domDataKey, allDisposeCallbacks);\n }\n return allDisposeCallbacks;\n}\nfunction destroyCallbacksCollection(node) {\n domData.set(node, domDataKey, void 0);\n}\nfunction cleanSingleNode(node) {\n let callbacks = getDisposeCallbacksCollection(node, false);\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i](node);\n }\n }\n domData.clear(node);\n for (let i = 0, j = otherNodeCleanerFunctions.length; i < j; ++i) {\n otherNodeCleanerFunctions[i](node);\n }\n if (options.cleanExternalData) {\n options.cleanExternalData(node);\n }\n if (cleanableNodeTypesWithDescendants[node.nodeType]) {\n cleanNodesInList(\n node.childNodes,\n true\n /* onlyComments */\n );\n }\n}\nfunction cleanNodesInList(nodeList, onlyComments) {\n const cleanedNodes = new Array();\n let lastCleanedNode;\n for (let i = 0; i < nodeList.length; i++) {\n if (!onlyComments || nodeList[i].nodeType === Node.COMMENT_NODE) {\n cleanSingleNode(cleanedNodes[cleanedNodes.length] = lastCleanedNode = nodeList[i]);\n if (nodeList[i] !== lastCleanedNode) {\n while (i-- && arrayIndexOf(cleanedNodes, nodeList[i]) === -1) {\n }\n }\n }\n }\n}\nexport function addDisposeCallback(node, callback) {\n if (typeof callback !== \"function\") {\n throw new Error(\"Callback must be a function\");\n }\n getDisposeCallbacksCollection(node, true).push(callback);\n}\nexport function removeDisposeCallback(node, callback) {\n const callbacksCollection = getDisposeCallbacksCollection(node, false);\n if (callbacksCollection) {\n arrayRemoveItem(callbacksCollection, callback);\n if (callbacksCollection.length === 0) {\n destroyCallbacksCollection(node);\n }\n }\n}\nexport function cleanNode(node) {\n if (cleanableNodeTypes[node.nodeType]) {\n cleanSingleNode(node);\n if (cleanableNodeTypesWithDescendants[node.nodeType] && node instanceof Element) {\n cleanNodesInList(node.getElementsByTagName(\"*\"));\n }\n }\n return node;\n}\nexport function removeNode(node) {\n if (!node) {\n return;\n }\n cleanNode(node);\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nexport const otherNodeCleanerFunctions = new Array();\nexport function addCleaner(fn) {\n otherNodeCleanerFunctions.push(fn);\n}\nexport function removeCleaner(fn) {\n const fnIndex = otherNodeCleanerFunctions.indexOf(fn);\n if (fnIndex >= 0) {\n otherNodeCleanerFunctions.splice(fnIndex, 1);\n }\n}\nexport function cleanjQueryData(node) {\n const jQueryCleanNodeFn = options.jQuery ? options.jQuery.cleanData : null;\n if (jQueryCleanNodeFn) {\n jQueryCleanNodeFn([node]);\n }\n}\notherNodeCleanerFunctions.push(cleanjQueryData);\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport { makeArray } from \"../array\";\nimport { emptyDomNode, moveCleanedNodesToContainerElement } from \"./manipulation\";\nimport * as virtualElements from \"./virtualElements\";\nimport options from \"../options\";\nconst supportsTemplateTag = options.useTemplateTag && options.document && \"content\" in options.document.createElement(\"template\");\nfunction simpleHtmlParse(html, documentContext) {\n if (!documentContext) {\n documentContext = document;\n }\n const div = documentContext.createElement(\"div\");\n div.innerHTML = html;\n return makeArray(div.childNodes);\n}\nfunction templateHtmlParse(html, documentContext) {\n if (!documentContext) {\n documentContext = document;\n }\n const template = documentContext.createElement(\"template\");\n template.innerHTML = html;\n return makeArray(template.content.childNodes);\n}\nfunction jQueryHtmlParse(html, documentContext) {\n const jQuery = options.jQuery;\n if (jQuery) {\n return jQuery.parseHTML(html, documentContext) || [];\n }\n return [];\n}\nexport function parseHtmlFragment(html, documentContext) {\n const saferHtml = validateHTMLInput(html);\n if (supportsTemplateTag) return templateHtmlParse(saferHtml, documentContext);\n if (options.jQuery) {\n return jQueryHtmlParse(saferHtml, documentContext);\n }\n return simpleHtmlParse(saferHtml, documentContext);\n}\nconst scriptTagPattern = /<script\\b[^>]*>([\\s\\S]*?)<\\/script[^>]*>/i;\nfunction validateHTMLInput(html) {\n if (!html) return \"\";\n if (options.templateSizeLimit > 0 && html.length > options.templateSizeLimit) {\n throw new Error(\"Template is too long. Please configure the 'templateSizeLimit'\");\n }\n if (!options.allowScriptTagsInTemplates && scriptTagPattern.test(html)) {\n throw new Error(\"Script-tag in template detected.\");\n }\n return options.sanitizeHtmlTemplate(html);\n}\nexport function parseHtmlForTemplateNodes(html, documentContext) {\n const nodes = parseHtmlFragment(html, documentContext);\n return nodes.length && nodes[0].parentElement || moveCleanedNodesToContainerElement(nodes);\n}\nexport function setHtml(node, html) {\n emptyDomNode(node);\n if (typeof html === \"function\") {\n html = html();\n }\n if (html !== null && html !== void 0) {\n if (typeof html !== \"string\") {\n html = html.toString();\n }\n const jQuery = options.jQuery;\n if (jQuery && !supportsTemplateTag) {\n const saferHtml = validateHTMLInput(html);\n jQuery(node).html(saferHtml);\n } else {\n let parsedNodes;\n if (node.ownerDocument) {\n parsedNodes = parseHtmlFragment(html, node.ownerDocument);\n } else {\n parsedNodes = parseHtmlFragment(html);\n }\n if (node.nodeType === Node.COMMENT_NODE) {\n if (html === null) {\n virtualElements.emptyNode(node);\n } else {\n virtualElements.setDomNodeChildren(node, parsedNodes);\n }\n } else {\n for (let i = 0; i < parsedNodes.length; i++) {\n node.appendChild(parsedNodes[i]);\n }\n }\n }\n }\n}\nexport function setTextContent(element, textContent) {\n let value = typeof textContent === \"function\" ? textContent() : textContent;\n if (value === null || value === void 0) {\n value = \"\";\n }\n const innerTextNode = virtualElements.firstChild(element);\n if (!innerTextNode || innerTextNode.nodeType !== Node.TEXT_NODE || virtualElements.nextSibling(innerTextNode)) {\n virtualElements.setDomNodeChildren(element, [element.ownerDocument.createTextNode(value)]);\n } else {\n ;\n innerTextNode.data = value;\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport { tagNameLower } from \"./info\";\nimport * as domData from \"./data\";\nconst hasDomDataExpandoProperty = /* @__PURE__ */ Symbol(\"Knockout selectExtensions hasDomDataProperty\");\nexport const selectExtensions = {\n optionValueDomDataKey: domData.nextKey(),\n readValue: function(element) {\n switch (tagNameLower(element)) {\n case \"option\": {\n if (element[hasDomDataExpandoProperty] === true) {\n return domData.get(element, selectExtensions.optionValueDomDataKey);\n }\n return element.value;\n }\n case \"select\": {\n const selectElement = element;\n return selectElement.selectedIndex >= 0 ? selectExtensions.readValue(selectElement.options[selectElement.selectedIndex]) : void 0;\n }\n default:\n return element.value;\n }\n },\n writeValue: function(element, value, allowUnset) {\n switch (tagNameLower(element)) {\n case \"option\":\n if (typeof value === \"string\") {\n domData.set(element, selectExtensions.optionValueDomDataKey, void 0);\n if (hasDomDataExpandoProperty in element) {\n delete element[hasDomDataExpandoProperty];\n }\n ;\n element.value = value;\n } else {\n const el = element;\n domData.set(element, selectExtensions.optionValueDomDataKey, value);\n el[hasDomDataExpandoProperty] = true;\n el.value = typeof value === \"number\" ? value : \"\";\n }\n break;\n case \"select\":\n {\n if (value === \"\" || value === null) {\n value = void 0;\n }\n let selection = -1;\n const selectElement = element;\n for (let i = 0, n = selectElement.options.length, optionValue; i < n; ++i) {\n optionValue = selectExtensions.readValue(selectElement.options[i]);\n const strictEqual = optionValue === value;\n const blankEqual = optionValue === \"\" && value === void 0;\n const numericEqual = typeof value === \"number\" && Number(optionValue) === value;\n if (strictEqual || blankEqual || numericEqual) {\n selection = i;\n break;\n }\n }\n if (allowUnset || selection >= 0 || value === void 0 && selectElement.size > 1) {\n selectElement.selectedIndex = selection;\n }\n }\n break;\n default:\n if (value === null || value === void 0) {\n value = \"\";\n }\n ;\n element.value = value;\n break;\n }\n }\n};\n", "// @tko/utils \uD83E\uDD4A 4.0.0 ESM\n\"use strict\";\nimport options from \"./options\";\nimport { deferError } from \"./error\";\nlet taskQueue = new Array(), taskQueueLength = 0, nextHandle = 1, nextIndexToProcess = 0, w = options.global;\nif (w && w.MutationObserver && !(w.navigator && w.navigator.standalone)) {\n options.taskScheduler = (function(callback) {\n const div = w.document.createElement(\"div\");\n new w.MutationObserver(callback).observe(div, { attributes: true });\n return function() {\n div.classList.toggle(\"foo\");\n };\n })(scheduledProcess);\n} else {\n options.taskScheduler = function(callback) {\n setTimeout(callback, 0);\n };\n}\nfunction processTasks() {\n if (taskQueueLength) {\n let mark = taskQueueLength, countMarks = 0;\n for (let task; nextIndexToProcess < taskQueueLength; ) {\n if (task = taskQueue[nextIndexToProcess++]) {\n if (nextIndexToProcess > mark) {\n if (++countMarks >= 5e3) {\n nextIndexToProcess = taskQueueLength;\n deferError(Error(\"'Too much recursion' after processing \" + countMarks + \" task groups.\"));\n break;\n }\n mark = taskQueueLength;\n }\n try {\n task();\n } catch (ex) {\n deferError(ex);\n }\n }\n }\n }\n}\nfunction scheduledProcess() {\n processTasks();\n nextIndexToProcess = taskQueueLength = taskQueue.length = 0;\n}\nfunction scheduleTaskProcessing() {\n options.taskScheduler(scheduledProcess);\n}\nexport function schedule(func) {\n if (!taskQueueLength) {\n scheduleTaskProcessing();\n }\n taskQueue[taskQueueLength++] = func;\n return nextHandle++;\n}\nexport function cancel(handle) {\n const index = handle - (nextHandle - taskQueueLength);\n if (index >= nextIndexToProcess && index < taskQueueLength) {\n taskQueue[index] = null;\n }\n}\nexport function resetForTesting() {\n const length = taskQueueLength - nextIndexToProcess;\n nextIndexToProcess = taskQueueLength = taskQueue.length = 0;\n return length;\n}\nexport { processTasks as runEarly };\n", "//\n// dependencyDetection\n// ---\n//\n// In KO 3.x, dependencyDetection was also known as computedContext.\n//\nimport type { Subscribable } from './subscribable'\nimport { isSubscribable } from './subscribableSymbol'\n\nconst outerFrames = new Array()\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): void {\n if (currentFrame) {\n if (!isSubscribable(subscribable)) {\n throw new Error('Only subscribable things can act as dependencies')\n }\n currentFrame.callback.call(\n currentFrame.callbackTarget,\n subscribable,\n subscribable._id || (subscribable._id = getId())\n )\n }\n}\n\nexport function ignore(callback: Function, callbackTarget?: any, callbackArgs?: any[]): any {\n try {\n begin()\n return callback.apply(callbackTarget, callbackArgs || [])\n } finally {\n end()\n }\n}\n\nexport function getDependenciesCount(): number | undefined {\n if (currentFrame) {\n return currentFrame.computed.getDependenciesCount()\n }\n return undefined\n}\n\nexport function getDependencies(): Subscribable[] | undefined {\n if (currentFrame) {\n return currentFrame.computed.getDependencies()\n }\n return undefined\n}\n\nexport function isInitial(): boolean | undefined {\n if (currentFrame) {\n return currentFrame.isInitial\n }\n return undefined\n}\n\nexport { ignore as ignoreDependencies }\n", "import type { Subscribable } from './subscribable'\n\n/**\n * Create a subscribable symbol that's used to identify subscribables.\n */\nexport const SUBSCRIBABLE_SYM = Symbol('Knockout Subscribable')\n\nexport function isSubscribable<T = any>(instance: any): instance is Subscribable<T> {\n return (instance && instance[SUBSCRIBABLE_SYM]) || false\n}\n", "//\n// Defer Updates\n// ===\n//\nimport { tasks } from '@tko/utils'\n\nexport function deferUpdates(target: any) {\n if (target._deferUpdates) {\n return\n }\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", "import { removeDisposeCallback, addDisposeCallback } from '@tko/utils'\n\n//TODO default?\nexport default class Subscription {\n private _disposeCallback: any\n private _target: any\n private _callback: any\n private _isDisposed: boolean\n private _domNodeDisposalCallback: ((node: Node) => void) | null\n private _node: Node\n\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(): void {\n if (this._domNodeDisposalCallback) {\n removeDisposeCallback(this._node, this._domNodeDisposalCallback)\n }\n this._isDisposed = true\n this._disposeCallback()\n }\n\n disposeWhenNodeIsRemoved(node: Node): void {\n this._node = node\n addDisposeCallback(node, (this._domNodeDisposalCallback = this.dispose.bind(this)))\n }\n\n // TC39 Observable API\n unsubscribe() {\n this.dispose()\n }\n get closed() {\n return this._isDisposed\n }\n}\n", "//\n// Observable extenders\n// ---\n//\nimport { options, objectForEach, throttle as throttleFn, debounce as debounceFn } from '@tko/utils'\n\nimport type { CompareArraysOptions } from '@tko/utils'\nimport type { ObservableArray } from '@tko/observable'\n\nimport { deferUpdates } from './defer'\n\nconst primitiveTypes = { undefined: 1, boolean: 1, number: 1, string: 1 }\n\nexport function valuesArePrimitiveAndEqual(a, b) {\n const oldValueIsPrimitive = a === null || (typeof a) in primitiveTypes\n return oldValueIsPrimitive ? a === b : false\n}\n\nexport function applyExtenders(requestedExtenders?) {\n let target = this\n if (requestedExtenders) {\n objectForEach(requestedExtenders, function (key, value) {\n const 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: any, notifyWhen: string) {\n target.equalityComparer =\n notifyWhen == 'always'\n ? null // null equalityComparer means to always notify\n : valuesArePrimitiveAndEqual\n}\n\nexport function deferred(target: any, option: boolean) {\n if (option !== true) {\n throw new Error(\n \"The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.\"\n )\n }\n deferUpdates(target)\n}\n\nexport function rateLimit(target: any, options: string | any) {\n let 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 interface BaseExtendersType {\n notify(target: any, notifyWhen: string): void\n deferred(target: any, option: boolean): void\n rateLimit(target: any, options: string | any): void\n trackArrayChanges?(target: ObservableArray, options?: CompareArraysOptions): void\n throttle?(target: any, timout: number): void\n}\n\nexport const extenders: BaseExtendersType = { notify: notify, deferred: deferred, rateLimit: rateLimit }\n", "/* eslint no-cond-assign: 0 */\nimport { arrayRemoveItem, objectForEach, options } from '@tko/utils'\n\nimport Subscription from './Subscription'\nimport { SUBSCRIBABLE_SYM } from './subscribableSymbol'\nimport { applyExtenders } from './extenders'\nimport * as dependencyDetection from './dependencyDetection'\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\nif (!Symbol.observable) {\n Symbol.observable = Symbol.for('@tko/Symbol.observable')\n}\n\nexport type SubscriptionCallback<T = any, TTarget = void> = (this: TTarget, val: T) => void\nexport type MaybeSubscribable<T = any> = T | Subscribable<T>\n\n// Some types remain here because refactoring leads to invasive changes.\n// Change prototype-chains of the TKO base classes to js/ts classes can be later steps.\nexport interface SubscribableFunctions<T = any> {\n [symbol: symbol]: boolean\n init(instance: any): void\n\n notifySubscribers(valueToWrite?: T, event?: string): void\n\n subscribe<TTarget = void>(\n callback: SubscriptionCallback<T, TTarget> | any,\n callbackTarget?: TTarget,\n event?: string\n ): Subscription\n extend(requestedExtenders: any): this\n extend<S extends Subscribable<T>>(requestedExtenders: any): S\n\n getSubscriptionsCount(event?: string): number\n getVersion(): number\n hasChanged(versionToCheck: number): boolean\n updateVersion(): void\n hasSubscriptionsForEvent(event: string): boolean\n isDifferent<T>(oldValue?: T, newValue?: T): boolean\n once(cb: Function): void\n when(test, returnValue?)\n yet(test: Function | any, args: any[]): void\n next(): Promise<unknown>\n toString(): string\n\n // From pureComputedOverrides in computed.ts\n beforeSubscriptionAdd?: (event: string) => void\n afterSubscriptionRemove?: (event: string) => void\n}\n\nexport interface Subscribable<T = any> extends SubscribableFunctions<T> {\n _subscriptions: any\n _versionNumber: number\n _id: number\n}\n\n// This interface is for the JS-Factory-Method 'subscribable' to returns a typed Subscribable\nexport interface subscribable {\n new <T = any>(): Subscribable<T>\n fn: SubscribableFunctions\n}\n\n// https://stackoverflow.com/questions/75658736/is-there-any-way-to-create-object-using-function-in-typescript-like-javascript\n// TODO need help for refactoring to typescript-class without breaking the api\nexport const subscribable = function subscribableFactory() {\n Object.setPrototypeOf(this, ko_subscribable_fn)\n ko_subscribable_fn.init(this)\n} as unknown as subscribable\n\nexport const defaultEvent = 'change'\n\nconst ko_subscribable_fn: SubscribableFunctions = {\n [SUBSCRIBABLE_SYM]: true,\n [Symbol.observable as any]() {\n return this\n },\n\n init(instance) {\n instance._subscriptions = { change: [] }\n instance._versionNumber = 1\n },\n\n subscribe(callback, callbackTarget, event): Subscription {\n // TC39 proposed standard Observable { next: () => ... }\n const isTC39Callback = typeof callback === 'object' && (callback as any).next\n\n event = event || defaultEvent\n const observer = isTC39Callback ? callback : { next: callbackTarget ? callback.bind(callbackTarget) : callback }\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] = new Array()\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) || [...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(): number {\n return this._versionNumber\n },\n\n hasChanged(versionToCheck): boolean {\n return this.getVersion() !== versionToCheck\n },\n\n updateVersion() {\n ++this._versionNumber\n },\n\n hasSubscriptionsForEvent(event): boolean {\n return this._subscriptions[event] && this._subscriptions[event].length\n },\n\n getSubscriptionsCount(event?: string): number {\n if (event) {\n return (this._subscriptions[event] && this._subscriptions[event].length) || 0\n } else {\n let 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): boolean {\n return !this.equalityComparer || !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: any, returnValue: unknown) {\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() {\n return new Promise(resolve => this.once(resolve))\n },\n\n toString(): string {\n return '[object Object]'\n },\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 { options, overwriteLengthPropertyIfSupported } from '@tko/utils'\n\nimport * as dependencyDetection from './dependencyDetection'\nimport { deferUpdates } from './defer'\nimport { subscribable, defaultEvent, LATEST_VALUE } from './subscribable'\nimport { valuesArePrimitiveAndEqual } from './extenders'\nimport type { Subscribable, MaybeSubscribable } from './subscribable'\n\n/**\n * Represents a value that can be either a plain value or an observable.\n */\nexport type MaybeObservable<T = any> = T | Observable<T>\n\n/**\n * Defines the functions available on an observable.\n */\nexport interface ObservableFunctions<T = any> extends Subscribable<T> {\n /**\n * Compares two values for equality.\n * @param a The first value.\n * @param b The second value.\n * @returns True if the values are equal, otherwise false.\n */\n equalityComparer(a: T, b: T): boolean\n\n /**\n * Returns the current value of the observable without creating a dependency.\n * @returns The current value.\n */\n peek(): T\n\n /**\n * Notifies subscribers that the value has changed.\n */\n valueHasMutated(): void\n\n /**\n * Notifies subscribers that the value is about to change.\n */\n valueWillMutate(): void\n\n /**\n * Modifies the value of the observable using a function.\n * @param fn The function to modify the value.\n * @param peek Whether to use the current value without creating a dependency.\n */\n modify(fn: (v: T) => T, peek?: boolean)\n\n /**\n * Some observables may not always be writeable, notably computeds.\n */\n isWriteable: boolean\n}\n\n/**\n * Represents an observable value.\n */\nexport interface Observable<T = any> extends ObservableFunctions<T> {\n /**\n * The latest value of the observable.\n */\n [LATEST_VALUE]: any;\n\n /**\n * Gets the current value of the observable.\n * @returns The current value.\n */\n (): T\n\n /**\n * Sets the value of the observable.\n * @param value The new value.\n * @returns The observable.\n */\n (value: T): any\n}\n\n/**\n * Creates an observable object.\n * @param initialValue The initial value of the observable.\n * @returns The observable object.\n */\nexport function observable<T = any>(initialValue?: T): Observable {\n function Observable() {\n if (arguments.length > 0) {\n // Write\n // Ignore writes if the value hasn't changed\n // inherits from interface SubscribableFunctions\n if ((Observable as any).isDifferent(Observable[LATEST_VALUE], arguments[0])) {\n ;(Observable as any).valueWillMutate()\n Observable[LATEST_VALUE] = arguments[0]\n ;(Observable as any).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 as any, { 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 // through setPrototypeOf we can cast to Observable\n return Observable as unknown as Observable\n}\n\n/**\n * Defines prototype for observables.\n */\nobservable.fn = {\n /**\n * Compares two values for equality.\n * @param a The first value.\n * @param b The second value.\n * @returns True if the values are equal, otherwise false.\n */\n equalityComparer: valuesArePrimitiveAndEqual,\n\n /**\n * Returns the current value of the observable without creating a dependency.\n * @returns The current value.\n */\n peek() {\n return this[LATEST_VALUE]\n },\n\n /**\n * Notifies subscribers that the value has changed.\n */\n valueHasMutated() {\n this.notifySubscribers(this[LATEST_VALUE], 'spectate')\n this.notifySubscribers(this[LATEST_VALUE])\n },\n\n /**\n * Notifies subscribers that the value is about to change.\n */\n valueWillMutate() {\n this.notifySubscribers(this[LATEST_VALUE], 'beforeChange')\n },\n\n /**\n * Modifies the value of the observable using a function.\n * @param fn The function to modify the value.\n * @param peek Whether to use the current value without creating a dependency.\n * @returns The modified observable.\n */\n modify<T = any>(fn: (v: T) => T, peek = true) {\n this(fn(peek ? this.peek() : this()))\n },\n\n // Some observables may not always be writeable, notably computeds.\n isWriteable: true\n}\n\n/**\n * Limits the notifications to subscribers.\n * @param value The value to notify.\n * @param event The event type.\n */\nfunction limitNotifySubscribers(value, event?: string) {\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/**\n * Adds a limit function to the subscribable prototype.\n * @param limitFunction The function to limit notifications.\n */\n;(subscribable.fn as any).limit = function limit(limitFunction) {\n const self = this\n const selfIsObservable = isObservable(self)\n const beforeChange = 'beforeChange'\n let ignoreBeforeChange: boolean, notifyNextChange: boolean, previousValue: any, pendingValue: any, didUpdate: boolean\n\n if (!self._origNotifySubscribers) {\n // Moved out of \"limit\" to avoid the extra closure\n self._origNotifySubscribers = self.notifySubscribers\n self.notifySubscribers = limitNotifySubscribers\n }\n\n const 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 //TODO This cast is a downcast to \"Computed\" that should be revisited\n pendingValue = (self as any)._evalIfChanged ? (self as any)._evalIfChanged() : self()\n }\n const shouldNotify = notifyNextChange || (didUpdate && self.isDifferent(previousValue, pendingValue))\n self._notifyNextChange = didUpdate = ignoreBeforeChange = false\n if (shouldNotify) {\n self._origNotifySubscribers((previousValue = pendingValue))\n }\n })\n\n Object.assign(self, {\n _limitChange(value: any, isDirty: boolean) {\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: any) {\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\nconst 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\n/**\n * Checks if an instance is an observable.\n * @param instance The instance to check.\n * @returns True if the instance is an observable, otherwise false.\n */\nexport function isObservable<T = any>(instance: any): instance is Observable<T> {\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\n/**\n * Unwraps the value if it is an observable.\n * @param value The value to unwrap.\n * @returns The unwrapped value.\n */\nexport function unwrap<T = any>(value: MaybeObservable<T>): T {\n return isObservable<T>(value) ? value() : (value as T)\n}\n\n/**\n * Peeks at the value of a MaybeSubscribable without creating a dependency.\n * @param value The value to peek at.\n * @returns The peeked value.\n */\nexport function peek<T = any>(value: MaybeSubscribable<T>): T {\n return isObservable<T>(value) ? value.peek() : (value as T)\n}\n\n/**\n * Checks if an instance is a writeable observable.\n * @param instance The instance to check.\n * @returns True if the instance is a writeable observable, otherwise false.\n */\nexport function isWriteableObservable<T = any>(instance: any): instance is Observable<T> {\n return isObservable<T>(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 { extend, compareArrays, findMovesInArrayComparison } from '@tko/utils'\n\nimport type { CompareArraysOptions } from '@tko/utils'\n\nimport { defaultEvent } from './subscribable'\nimport { extenders } from './extenders'\nimport type { ObservableArray } from './observableArray'\n\nexport const arrayChangeEventName = 'arrayChange'\n\nexport function trackArrayChanges(target: ObservableArray, options?: CompareArraysOptions) {\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: any | null = null\n let arrayChangeSubscription\n let pendingNotifications = 0\n let underlyingNotifySubscribersFunction\n const underlyingBeforeSubscriptionAddFunction = target.beforeSubscriptionAdd\n const 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 let previousContents = new Array().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 = new Array().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 let diff = new Array(),\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 {\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 const 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 = new Array(),\n deletions = new Array()\n for (let index = startIndex, argsIndex = 2; index < endIndex; ++index, ++argsIndex) {\n if (index < endDeleteIndex) {\n deletions.push(pushDiff('deleted', rawArray[index], index))\n }\n if (index < endAddIndex) {\n additions.push(pushDiff('added', args[argsIndex], index))\n }\n }\n findMovesInArrayComparison(deletions, additions)\n }\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 { arrayIndexOf, arrayForEach, overwriteLengthPropertyIfSupported } from '@tko/utils'\n\nimport type { CompareArraysOptions } from '@tko/utils'\n\nimport { observable, isObservable } from './observable'\n\nimport { trackArrayChanges } from './observableArray.changeTracking'\n\nimport type { Observable, ObservableFunctions } from './observable'\n\nexport type MaybeObservableArray<T = any> = T[] | ObservableArray<T>\n\nexport interface ObservableArrayFunctions<T = any> extends ObservableFunctions<T[]> {\n /**\n * Returns the index of the first occurrence of a value in an array.\n * @param searchElement The value to locate in the array.\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n */\n indexOf(searchElement: T, fromIndex?: number): number\n\n /**\n * Returns a section of an array.\n * @param start The beginning of the specified portion of the array.\n * @param end The end of the specified portion of the array. If omitted, all items after start are included\n */\n slice(start: number, end?: number): T[]\n\n /**\n * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove. Defaults to removing everything after `start`\n * @param items Elements to insert into the array in place of the deleted elements.\n */\n splice(start: number, deleteCount?: number, ...items: T[]): T[]\n\n /**\n * Removes the last value from the array and returns it.\n */\n pop(): T\n /**\n * Adds a new item to the end of array.\n * @param items Items to be added\n */\n push(...items: T[]): number\n /**\n * Removes the first value from the array and returns it.\n */\n shift(): T\n /**\n * Inserts a new item at the beginning of the array.\n * @param items Items to be added\n */\n unshift(...items: T[]): number\n\n /**\n * Reverses the order of the array and returns the observableArray.\n * Modifies the underlying array.\n */\n reverse(): this\n\n /**\n * Sorts the array contents and returns the observableArray.\n * Modifies the underlying array.\n */\n sort(compareFunction?: (left: T, right: T) => number): this\n\n /**\n * Returns a reversed copy of the array.\n * Does not modify the underlying array.\n */\n reversed(): T[]\n\n /**\n * Returns a reversed copy of the array.\n * Does not modify the underlying array.\n */\n sorted(compareFunction?: (left: T, right: T) => number): T[]\n /**\n * Replaces the first value that equals oldItem with newItem\n * @param oldItem Item to be replaced\n * @param newItem Replacing item\n */\n replace(oldItem: T, newItem: T): void\n\n /**\n * Removes all values that equal item and returns them as an array.\n * @param item The item to be removed\n */\n remove(item: T): T[]\n /**\n * Removes all values and returns them as an array.\n * @param removeFunction A function used to determine true if item should be removed and fasle otherwise\n */\n remove(removeFunction: (item: T) => boolean): T[]\n\n /**\n * Removes all values and returns them as an array.\n */\n removeAll(): T[]\n /**\n * Removes all values that equal any of the supplied items\n * @param items Items to be removed\n */\n removeAll(items: T[]): T[]\n\n // Ko specific Usually relevant to Ruby on Rails developers only\n /**\n * Finds any objects in the array that equal someItem and gives them a special property called _destroy with value true.\n * Usually only relevant to Ruby on Rails development\n * @param item Items to be marked with the property.\n */\n destroy(item: T): void\n /**\n * Finds any objects in the array filtered by a function and gives them a special property called _destroy with value true.\n * Usually only relevant to Ruby on Rails development\n * @param destroyFunction A function used to determine which items should be marked with the property.\n */\n destroy(destroyFunction: (item: T) => boolean): void\n\n /**\n * Gives a special property called _destroy with value true to all objects in the array.\n * Usually only relevant to Ruby on Rails development\n */\n destroyAll(): void\n /**\n * Finds any objects in the array that equal supplied items and gives them a special property called _destroy with value true.\n * Usually only relevant to Ruby on Rails development\n * @param items\n */\n destroyAll(items: T[]): void\n}\n\nexport interface ObservableArray<T = any> extends Observable<T[]>, ObservableArrayFunctions<T> {\n (value: T[] | null | undefined): this\n compareArrayOptions?: CompareArraysOptions\n cacheDiffForKnownOperation?: (rawArray: any[], operationName: string, args: any[]) => void\n}\n\nexport function observableArray<T = any>(initialValues?: T[]): ObservableArray<T> {\n initialValues = initialValues || []\n\n if (typeof initialValues !== 'object' || !('length' in initialValues)) {\n throw new Error(\n 'The argument passed when initializing an observable array must be an array, or null, or undefined.'\n )\n }\n\n const result = Object.setPrototypeOf(observable(initialValues), observableArray.fn) as ObservableArray<T>\n trackArrayChanges(result)\n // ^== result.extend({ trackArrayChanges: true })\n overwriteLengthPropertyIfSupported(result, { get: () => result()?.length })\n return result\n}\n\nexport function isObservableArray(instance: { remove: any; push: any }) {\n return isObservable(instance) && typeof instance.remove === 'function' && typeof instance.push === 'function'\n}\n\nobservableArray.fn = {\n remove(valueOrPredicate: any): any[] {\n const underlyingArray = this.peek()\n const removedValues = new Array()\n const predicate =\n typeof valueOrPredicate === 'function' && !isObservable(valueOrPredicate)\n ? valueOrPredicate\n : function (value: any) {\n return value === valueOrPredicate\n }\n for (let i = 0; i < underlyingArray.length; i++) {\n const 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: undefined): any {\n // If you passed zero args, we remove everything\n if (arrayOfValues === undefined) {\n const underlyingArray = this.peek()\n const 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: any) {\n return arrayIndexOf(arrayOfValues, value) >= 0\n })\n },\n\n destroy(valueOrPredicate: any): void {\n const underlyingArray = this.peek()\n const predicate =\n typeof valueOrPredicate === 'function' && !isObservable(valueOrPredicate)\n ? valueOrPredicate\n : function (value: any) {\n return value === valueOrPredicate\n }\n this.valueWillMutate()\n for (let i = underlyingArray.length - 1; i >= 0; i--) {\n const value = underlyingArray[i]\n if (predicate(value)) {\n value['_destroy'] = true\n }\n }\n this.valueHasMutated()\n },\n\n destroyAll(arrayOfValues: undefined): any {\n // If you passed zero args, we destroy everything\n if (arrayOfValues === undefined) {\n return this.destroy(function () {\n return true\n })\n }\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: any) {\n return arrayIndexOf(arrayOfValues, value) >= 0\n })\n },\n\n indexOf(item: any): number {\n return arrayIndexOf(this(), item)\n },\n\n replace(oldItem: any, newItem: any): void {\n const 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: ((a: any, b: any) => number) | undefined): any[] {\n return [...this()].sort(compareFn)\n },\n\n reversed(): any[] {\n return [...this()].reverse()\n },\n\n [Symbol.iterator]: function* (): Generator<any, void, any> {\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: string | number) {\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 const underlyingArray = this.peek()\n this.valueWillMutate()\n this.cacheDiffForKnownOperation(underlyingArray, methodName, arguments)\n const 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: string | number) {\n observableArray.fn[methodName] = function () {\n const 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//\n\nimport { isObservable } from './observable'\n\nconst maxNestedObservableDepth: number = 10 // Escape the (unlikely) pathological case where an observable's current value is itself (or similar reference cycle)\n\nexport function toJS<T = any>(rootObject: T): T {\n if (arguments.length == 0) {\n throw new Error('When calling ko.toJS, pass the object you want to convert.')\n }\n\n // We just unwrap everything at every level in the object graph\n return mapJsObjectGraph(rootObject, function (valueToMap: any) {\n // Loop because an observable's value might in turn be another observable wrapper\n for (let i = 0; isObservable(valueToMap) && i < maxNestedObservableDepth; i++) {\n valueToMap = valueToMap()\n }\n return valueToMap\n })\n}\n\nexport function toJSON<T = any>(\n rootObject: T,\n replacer?: (key: string, value: any) => any,\n space?: string | number\n): string {\n // replacer and space are optional\n const plainJavaScriptObject = toJS(rootObject)\n return JSON.stringify(plainJavaScriptObject, replacer, space)\n}\n\nfunction mapJsObjectGraph<T = any>(\n rootObject: T | undefined,\n mapInputCallback: (value: any) => any,\n visitedObjects = new Map()\n): any {\n rootObject = mapInputCallback(rootObject)\n const canHaveProperties =\n typeof rootObject === 'object'\n && rootObject !== null\n && rootObject !== undefined\n && !(rootObject instanceof RegExp)\n && !(rootObject instanceof Date)\n && !(rootObject instanceof String)\n && !(rootObject instanceof Number)\n && !(rootObject instanceof Boolean)\n if (!canHaveProperties) {\n return rootObject\n }\n\n const outputProperties: any = rootObject instanceof Array ? [] : {}\n visitedObjects.set(rootObject, outputProperties)\n\n visitPropertiesOrArrayEntries(rootObject, function (indexer: any) {\n const 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 {\n const previouslyMappedValue = visitedObjects.get(propertyValue)\n outputProperties[indexer] =\n previouslyMappedValue !== undefined\n ? previouslyMappedValue\n : mapJsObjectGraph(propertyValue, mapInputCallback, visitedObjects)\n }\n break\n }\n })\n\n return outputProperties\n}\n\nfunction visitPropertiesOrArrayEntries<T = any>(rootObject: T, visitorCallback: (indexer: any) => void): void {\n if (rootObject instanceof Array) {\n for (let i = 0; i < rootObject.length; i++) {\n visitorCallback(i)\n }\n\n // For arrays, also respect toJSON property for custom mappings (fixes #278)\n if (typeof rootObject['toJSON'] === 'function') {\n visitorCallback('toJSON')\n }\n } else {\n for (const propertyName in rootObject) {\n visitorCallback(propertyName)\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["options", "options", "subscribable", "options", "peek", "options"]
7
7
  }
package/dist/index.js CHANGED
@@ -1,12 +1,6 @@
1
- // @tko/observable 🥊 4.0.0-beta1.0 ESM
2
- export {
3
- observable,
4
- isObservable,
5
- unwrap,
6
- peek,
7
- isWriteableObservable,
8
- isWritableObservable
9
- } from "./observable";
1
+ // @tko/observable 🥊 4.0.0 ESM
2
+ "use strict";
3
+ export { observable, isObservable, unwrap, peek, isWriteableObservable, isWritableObservable } from "./observable";
10
4
  export { isSubscribable, subscribable, LATEST_VALUE } from "./subscribable";
11
5
  export { observableArray, isObservableArray } from "./observableArray";
12
6
  export { trackArrayChanges, arrayChangeEventName } from "./observableArray.changeTracking";
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["//\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'\n\nexport { valuesArePrimitiveAndEqual, applyExtenders, extenders } from './extenders'\n\nimport * as dependencyDetection from './dependencyDetection'\n\nexport { dependencyDetection }\n"],
5
- "mappings": ";AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;",
4
+ "sourcesContent": ["//\n// Observables.\n// ---\n//\n// The following are added to the root `[t]ko` object.\n//\n\nexport { observable, isObservable, unwrap, peek, isWriteableObservable, isWritableObservable } 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'\nexport type { ObservableArray } from './observableArray'\nexport type { Observable } from './observable'\nexport type { MaybeSubscribable, Subscribable, SubscriptionCallback } from './subscribable'\n\nexport { valuesArePrimitiveAndEqual, applyExtenders, extenders } from './extenders'\n\nimport * as dependencyDetection from './dependencyDetection'\n\nexport { dependencyDetection }\n"],
5
+ "mappings": ";;AAOA,SAAS,YAAY,cAAc,QAAQ,MAAM,uBAAuB,4BAA4B;AACpG,SAAS,gBAAgB,cAAc,oBAAoB;AAC3D,SAAS,iBAAiB,yBAAyB;AACnD,SAAS,mBAAmB,4BAA4B;AACxD,SAAS,MAAM,cAAc;AAC7B,SAAS,oBAAoB;AAK7B,SAAS,4BAA4B,gBAAgB,iBAAiB;AAEtE,YAAY,yBAAyB;AAErC,SAAS;",
6
6
  "names": []
7
7
  }
package/dist/index.mjs CHANGED
@@ -1,12 +1,6 @@
1
- // @tko/observable 🥊 4.0.0-beta1.0 MJS
2
- export {
3
- observable,
4
- isObservable,
5
- unwrap,
6
- peek,
7
- isWriteableObservable,
8
- isWritableObservable
9
- } from "./observable";
1
+ // @tko/observable 🥊 4.0.0 MJS
2
+ "use strict";
3
+ export { observable, isObservable, unwrap, peek, isWriteableObservable, isWritableObservable } from "./observable";
10
4
  export { isSubscribable, subscribable, LATEST_VALUE } from "./subscribable";
11
5
  export { observableArray, isObservableArray } from "./observableArray";
12
6
  export { trackArrayChanges, arrayChangeEventName } from "./observableArray.changeTracking";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["//\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'\n\nexport { valuesArePrimitiveAndEqual, applyExtenders, extenders } from './extenders'\n\nimport * as dependencyDetection from './dependencyDetection'\n\nexport { dependencyDetection }\n"],
5
- "mappings": ";AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;",
4
+ "sourcesContent": ["//\n// Observables.\n// ---\n//\n// The following are added to the root `[t]ko` object.\n//\n\nexport { observable, isObservable, unwrap, peek, isWriteableObservable, isWritableObservable } 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'\nexport type { ObservableArray } from './observableArray'\nexport type { Observable } from './observable'\nexport type { MaybeSubscribable, Subscribable, SubscriptionCallback } from './subscribable'\n\nexport { valuesArePrimitiveAndEqual, applyExtenders, extenders } from './extenders'\n\nimport * as dependencyDetection from './dependencyDetection'\n\nexport { dependencyDetection }\n"],
5
+ "mappings": ";;AAOA,SAAS,YAAY,cAAc,QAAQ,MAAM,uBAAuB,4BAA4B;AACpG,SAAS,gBAAgB,cAAc,oBAAoB;AAC3D,SAAS,iBAAiB,yBAAyB;AACnD,SAAS,mBAAmB,4BAA4B;AACxD,SAAS,MAAM,cAAc;AAC7B,SAAS,oBAAoB;AAK7B,SAAS,4BAA4B,gBAAgB,iBAAiB;AAEtE,YAAY,yBAAyB;AAErC,SAAS;",
6
6
  "names": []
7
7
  }