@tko/build.knockout 4.0.0-beta1.7 → 4.0.1
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.
- package/dist/browser.js +455 -281
- package/dist/browser.js.map +4 -4
- package/dist/browser.min.js +9 -9
- package/dist/browser.min.js.map +4 -4
- package/dist/common.js +1 -1
- package/dist/index.cjs +41 -8514
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +6 -15
- package/dist/index.js.map +2 -2
- package/dist/index.mjs +6 -15
- package/dist/index.mjs.map +2 -2
- package/package.json +25 -30
- package/helpers/jasmine.extensions.js +0 -209
package/dist/browser.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../../../packages/utils/
|
|
4
|
-
"sourcesContent": ["import { Builder } from '@tko/builder'\n\nimport { VirtualProvider } from '@tko/provider.virtual'\nimport { DataBindProvider } from '@tko/provider.databind'\nimport { ComponentProvider } from '@tko/provider.component'\nimport { AttributeProvider } from '@tko/provider.attr'\nimport { MultiProvider } from '@tko/provider.multi'\n\nimport { bindings as coreBindings } from '@tko/binding.core'\nimport { bindings as templateBindings } from '@tko/binding.template'\nimport { bindings as ifBindings } from '@tko/binding.if'\nimport { bindings as foreachBindings } from '@tko/binding.foreach'\nimport { bindings as componentBindings } from '@tko/binding.component'\n\nimport { filters } from '@tko/filter.punches'\n\nimport components from '@tko/utils.component'\n\nimport { functionRewrite } from '@tko/utils.functionrewrite'\n\nimport { options as defaultOptions } from '@tko/utils'\n\ndeclare const BUILD_VERSION: string\n\n/**\n * expressionRewriting is deprecated in TKO because we have our own JS\n * parser now. This is here only for legacy compatibility.\n */\nconst dataBindProvider = new DataBindProvider()\nconst expressionRewriting = {\n preProcessBindings: s => dataBindProvider.preProcessBindings(s)\n}\n\nconst provider = new MultiProvider({providers: [\n new ComponentProvider(),\n dataBindProvider,\n new VirtualProvider(),\n new AttributeProvider()\n]})\n\nconst builder = new Builder({\n provider,\n bindings: [\n coreBindings,\n templateBindings,\n ifBindings,\n componentBindings,\n { each: foreachBindings.foreach }\n ],\n extenders: {},\n filters,\n options: {\n bindingGlobals: defaultOptions.global,\n bindingStringPreparsers: [functionRewrite]\n }\n})\n\nconst version = BUILD_VERSION\nexport default builder.create({\n version,\n components,\n Component: components.ComponentABC,\n expressionRewriting\n})\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.3 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-beta1.3 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-beta1.3 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-beta1.3 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-beta1.3 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-beta1.3 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-beta1.3 ESM\n\"use strict\";\nexport function stringTrim(string) {\n return string === null || string === void 0 ? \"\" : string.trim ? string.trim() : string.toString().replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g, \"\");\n}\nexport function stringStartsWith(string, startsWith) {\n string = string || \"\";\n if (startsWith.length > string.length) {\n return false;\n }\n return string.substring(0, startsWith.length) === startsWith;\n}\nexport function parseJson(jsonString) {\n if (typeof jsonString === \"string\") {\n jsonString = stringTrim(jsonString);\n if (jsonString) {\n return JSON.parse(jsonString);\n }\n }\n return null;\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nexport const useSymbols = typeof Symbol === \"function\";\nexport function createSymbolOrString(identifier) {\n return useSymbols ? Symbol(identifier) : identifier;\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { arrayForEach, addOrRemoveItem } from \"./array\";\nconst cssClassNameRegex = /\\S+/g;\nfunction toggleDomNodeCssClass(node, classNames, shouldHaveClass) {\n let addOrRemoveFn;\n if (!classNames) {\n return;\n }\n if (typeof node.classList === \"object\") {\n addOrRemoveFn = node.classList[shouldHaveClass ? \"add\" : \"remove\"];\n arrayForEach(classNames.match(cssClassNameRegex), function(className) {\n addOrRemoveFn.call(node.classList, className);\n });\n } else if (typeof node.className[\"baseVal\"] === \"string\") {\n toggleObjectClassPropertyString(node.className, \"baseVal\", classNames, shouldHaveClass);\n } else {\n toggleObjectClassPropertyString(node, \"className\", classNames, shouldHaveClass);\n }\n}\nfunction toggleObjectClassPropertyString(obj, prop, classNames, shouldHaveClass) {\n const currentClassNames = obj[prop].match(cssClassNameRegex) || [];\n arrayForEach(classNames.match(cssClassNameRegex), function(className) {\n addOrRemoveItem(currentClassNames, className, shouldHaveClass);\n });\n obj[prop] = currentClassNames.join(\" \");\n}\nexport { toggleDomNodeCssClass };\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.3 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-beta1.3 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-beta1.3 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-beta1.3 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-beta1.3 ESM\n\"use strict\";\nimport { makeArray } from \"../array\";\nimport { cleanNode, removeNode } from \"./disposal\";\nexport function moveCleanedNodesToContainerElement(nodes) {\n const nodesArray = makeArray(nodes);\n const templateDocument = nodesArray[0] && nodesArray[0].ownerDocument || document;\n const container = templateDocument.createElement(\"div\");\n for (let i = 0, j = nodesArray.length; i < j; i++) {\n container.appendChild(cleanNode(nodesArray[i]));\n }\n return container;\n}\nexport function cloneNodes(nodesArray, shouldCleanNodes) {\n const newNodesArray = new Array();\n for (let i = 0; i < nodesArray.length; i++) {\n const clonedNode = nodesArray[i].cloneNode(true);\n newNodesArray.push(shouldCleanNodes ? cleanNode(clonedNode) : clonedNode);\n }\n return newNodesArray;\n}\nexport function setDomNodeChildren(domNode, childNodes) {\n emptyDomNode(domNode);\n if (childNodes) {\n for (let i = 0; i < childNodes.length; i++) {\n domNode.appendChild(childNodes[i]);\n }\n }\n}\nexport function replaceDomNodes(nodeToReplaceOrNodeArray, newNodesArray) {\n const nodesToReplaceArray = Array.isArray(nodeToReplaceOrNodeArray) ? nodeToReplaceOrNodeArray : [nodeToReplaceOrNodeArray];\n if (nodesToReplaceArray.length > 0) {\n const insertionPoint = nodesToReplaceArray[0];\n const parent = insertionPoint.parentNode;\n for (let i = 0; i < newNodesArray.length; i++) {\n parent?.insertBefore(newNodesArray[i], insertionPoint);\n }\n for (let i = 0; i < nodesToReplaceArray.length; i++) {\n removeNode(nodesToReplaceArray[i]);\n }\n }\n}\nexport function emptyDomNode(domNode) {\n while (domNode.firstChild) {\n removeNode(domNode.firstChild);\n }\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nexport function fixUpContinuousNodeArray(continuousNodeArray, parentNode) {\n if (continuousNodeArray.length) {\n parentNode = parentNode.nodeType === Node.COMMENT_NODE && parentNode.parentNode || parentNode;\n while (continuousNodeArray.length && continuousNodeArray[0].parentNode !== parentNode) {\n continuousNodeArray.splice(0, 1);\n }\n while (continuousNodeArray.length > 1 && continuousNodeArray[continuousNodeArray.length - 1].parentNode !== parentNode) {\n continuousNodeArray.length--;\n }\n if (continuousNodeArray.length > 1) {\n let current = continuousNodeArray[0], last = continuousNodeArray[continuousNodeArray.length - 1];\n continuousNodeArray.length = 0;\n while (current !== last) {\n continuousNodeArray.push(current);\n current = current.nextSibling;\n }\n continuousNodeArray.push(last);\n }\n }\n return continuousNodeArray;\n}\nexport function setOptionNodeSelectionState(optionNode, isSelected) {\n optionNode.selected = isSelected;\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { emptyDomNode, setDomNodeChildren as setRegularDomNodeChildren } from \"./manipulation\";\nimport { removeNode } from \"./disposal\";\nimport { tagNameLower } from \"./info\";\nimport * as domData from \"./data\";\nexport const startCommentRegex = /^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/;\nexport const endCommentRegex = /^\\s*\\/ko\\s*$/;\nconst htmlTagsWithOptionallyClosingChildren = { ul: true, ol: true };\nexport function isStartComment(node) {\n return node.nodeType === Node.COMMENT_NODE && startCommentRegex.test(node.nodeValue);\n}\nexport function isEndComment(node) {\n return node.nodeType === Node.COMMENT_NODE && endCommentRegex.test(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 let currentNode = startComment;\n let depth = 1;\n const children = new Array();\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 const 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 let childNode = node.firstChild, captureRemaining = null;\n if (childNode) {\n do {\n if (captureRemaining) {\n captureRemaining.push(childNode);\n } else if (isStartComment(childNode)) {\n const matchingEndComment = getMatchingEndComment(\n childNode,\n /* allowUnbalanced: */\n true\n );\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 const allowedBindings = /* @__PURE__ */ Object.create(null);\nexport const 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 const virtualChildren = childNodes(node);\n for (let 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 if (endCommentNode && endCommentNode.parentNode) {\n const parentNode = endCommentNode.parentNode;\n for (let i = 0, j = childNodes2.length; i < j; ++i) {\n parentNode.insertBefore(childNodes2[i], endCommentNode);\n }\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 if (!nextChild) return null;\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(\n \"Found end comment without a matching opening comment, as next sibling of \" + node.outerHTML\n );\n }\n return null;\n } else {\n return node.nextSibling;\n }\n}\nexport function previousSibling(node) {\n let depth = 0;\n do {\n if (node.nodeType === Node.COMMENT_NODE) {\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 const regexMatch = node.nodeValue.match(startCommentRegex);\n return regexMatch ? regexMatch[1] : null;\n}\nexport function normaliseVirtualElementDomStructure(elementVerified) {\n if (!htmlTagsWithOptionallyClosingChildren[tagNameLower(elementVerified)]) {\n return;\n }\n let childNode = elementVerified.firstChild;\n if (childNode) {\n do {\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n const unbalancedTags = getUnbalancedChildTags(childNode);\n if (unbalancedTags) {\n const nodeToInsertBefore = childNode.nextSibling;\n for (let 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.3 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-beta1.3 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-beta1.3 ESM\n\"use strict\";\nimport { arrayPushAll } from \"./array\";\nconst memos = {};\nfunction randomMax8HexChars() {\n return ((1 + Math.random()) * 4294967296 | 0).toString(16).substring(1);\n}\nfunction generateRandomId() {\n return randomMax8HexChars() + randomMax8HexChars();\n}\nfunction findMemoNodes(rootNode, appendToArray) {\n if (!rootNode) {\n return;\n }\n if (rootNode.nodeType === Node.COMMENT_NODE) {\n const comment = rootNode;\n const memoId = parseMemoText(comment.nodeValue);\n if (memoId != null) {\n appendToArray.push({ domNode: rootNode, memoId });\n }\n } else if (rootNode.nodeType === Node.ELEMENT_NODE) {\n for (let i = 0, childNodes = rootNode.childNodes, j = childNodes.length; i < j; i++) {\n findMemoNodes(childNodes[i], appendToArray);\n }\n }\n}\nexport function memoize(callback) {\n if (typeof callback !== \"function\") {\n throw new Error(\"You can only pass a function to memoization.memoize()\");\n }\n const memoId = generateRandomId();\n memos[memoId] = callback;\n return \"<!--[ko_memo:\" + memoId + \"]-->\";\n}\nexport function unmemoize(memoId, callbackParams) {\n const callback = memos[memoId];\n if (callback === void 0) {\n throw new Error(\"Couldn't find any memo with ID \" + memoId + \". Perhaps it's already been unmemoized.\");\n }\n try {\n callback.apply(null, callbackParams || []);\n return true;\n } finally {\n delete memos[memoId];\n }\n}\nexport function unmemoizeDomNodeAndDescendants(domNode, extraCallbackParamsArray) {\n const memos2 = new Array();\n findMemoNodes(domNode, memos2);\n for (let i = 0, j = memos2.length; i < j; i++) {\n const node = memos2[i].domNode;\n const combinedParams = [node];\n if (extraCallbackParamsArray) {\n arrayPushAll(combinedParams, extraCallbackParamsArray);\n }\n unmemoize(memos2[i].memoId, combinedParams);\n node.nodeValue = \"\";\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n}\nexport function parseMemoText(memoText) {\n if (!memoText) {\n return null;\n }\n const match = memoText.match(/^\\[ko_memo\\:(.*?)\\]$/);\n return match ? match[1] : null;\n}\n", "// @tko/utils \uD83E\uDD4A 4.0.0-beta1.3 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", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { isSubscribable } from \"./subscribableSymbol\";\nconst outerFrames = new Array();\nlet currentFrame;\nlet lastId = 0;\nfunction getId() {\n return ++lastId;\n}\nexport function begin(options) {\n outerFrames.push(currentFrame);\n currentFrame = options;\n}\nexport function end() {\n currentFrame = outerFrames.pop();\n}\nexport function registerDependency(subscribable) {\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}\nexport function ignore(callback, callbackTarget, callbackArgs) {\n try {\n begin();\n return callback.apply(callbackTarget, callbackArgs || []);\n } finally {\n end();\n }\n}\nexport function getDependenciesCount() {\n if (currentFrame) {\n return currentFrame.computed.getDependenciesCount();\n }\n return void 0;\n}\nexport function getDependencies() {\n if (currentFrame) {\n return currentFrame.computed.getDependencies();\n }\n return void 0;\n}\nexport function isInitial() {\n if (currentFrame) {\n return currentFrame.isInitial;\n }\n return void 0;\n}\nexport { ignore as ignoreDependencies };\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nexport const SUBSCRIBABLE_SYM = /* @__PURE__ */ Symbol(\"Knockout Subscribable\");\nexport function isSubscribable(instance) {\n return instance && instance[SUBSCRIBABLE_SYM] || false;\n}\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { tasks } from \"@tko/utils\";\nexport function deferUpdates(target) {\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(void 0, \"dirty\");\n } finally {\n ignoreUpdates = false;\n }\n }\n };\n });\n}\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { removeDisposeCallback, addDisposeCallback } from \"@tko/utils\";\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 dispose() {\n if (this._domNodeDisposalCallback) {\n removeDisposeCallback(this._node, this._domNodeDisposalCallback);\n }\n this._isDisposed = true;\n this._disposeCallback();\n }\n disposeWhenNodeIsRemoved(node) {\n this._node = node;\n addDisposeCallback(node, this._domNodeDisposalCallback = this.dispose.bind(this));\n }\n // TC39 Observable API\n unsubscribe() {\n this.dispose();\n }\n get closed() {\n return this._isDisposed;\n }\n}\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { options, objectForEach, throttle as throttleFn, debounce as debounceFn } from \"@tko/utils\";\nimport { deferUpdates } from \"./defer\";\nconst primitiveTypes = { undefined: 1, boolean: 1, number: 1, string: 1 };\nexport function valuesArePrimitiveAndEqual(a, b) {\n const oldValueIsPrimitive = a === null || typeof a in primitiveTypes;\n return oldValueIsPrimitive ? a === b : false;\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}\nexport function notify(target, notifyWhen) {\n target.equalityComparer = notifyWhen == \"always\" ? null : valuesArePrimitiveAndEqual;\n}\nexport function deferred(target, option) {\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}\nexport function rateLimit(target, options2) {\n let timeout, method, limitFunction;\n if (typeof options2 === \"number\") {\n timeout = options2;\n } else {\n timeout = options2.timeout;\n method = options2.method;\n }\n target._deferUpdates = false;\n limitFunction = method === \"notifyWhenChangesStop\" ? debounceFn : throttleFn;\n target.limit(function(callback) {\n return limitFunction(callback, timeout);\n });\n}\nexport const extenders = { notify, deferred, rateLimit };\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { arrayRemoveItem, objectForEach, options } from \"@tko/utils\";\nimport Subscription from \"./Subscription\";\nimport { SUBSCRIBABLE_SYM } from \"./subscribableSymbol\";\nimport { applyExtenders } from \"./extenders\";\nimport * as dependencyDetection from \"./dependencyDetection\";\nexport { isSubscribable } from \"./subscribableSymbol\";\nexport const LATEST_VALUE = /* @__PURE__ */ Symbol(\"Knockout latest value\");\nif (!Symbol.observable) {\n Symbol.observable = /* @__PURE__ */ Symbol.for(\"@tko/Symbol.observable\");\n}\nexport const subscribable = function subscribableFactory() {\n Object.setPrototypeOf(this, ko_subscribable_fn);\n ko_subscribable_fn.init(this);\n};\nexport const defaultEvent = \"change\";\nconst ko_subscribable_fn = {\n [SUBSCRIBABLE_SYM]: true,\n [Symbol.observable]() {\n return this;\n },\n init(instance) {\n instance._subscriptions = { change: [] };\n instance._versionNumber = 1;\n },\n subscribe(callback, callbackTarget, event) {\n const isTC39Callback = typeof callback === \"object\" && callback.next;\n event = event || defaultEvent;\n const observer = isTC39Callback ? callback : { next: callbackTarget ? callback.bind(callbackTarget) : callback };\n const subscriptionInstance = new Subscription(this, observer, () => {\n arrayRemoveItem(this._subscriptions[event], subscriptionInstance);\n if (this.afterSubscriptionRemove) {\n this.afterSubscriptionRemove(event);\n }\n });\n if (this.beforeSubscriptionAdd) {\n this.beforeSubscriptionAdd(event);\n }\n if (!this._subscriptions[event]) {\n this._subscriptions[event] = new Array();\n }\n this._subscriptions[event].push(subscriptionInstance);\n if (isTC39Callback && LATEST_VALUE in this) {\n observer.next(this[LATEST_VALUE]);\n }\n return subscriptionInstance;\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 try {\n dependencyDetection.begin();\n for (let i = 0, subscriptionInstance; subscriptionInstance = subs[i]; ++i) {\n if (!subscriptionInstance._isDisposed) {\n subscriptionInstance._callback(valueToNotify);\n }\n }\n } finally {\n dependencyDetection.end();\n }\n }\n },\n getVersion() {\n return this._versionNumber;\n },\n hasChanged(versionToCheck) {\n return this.getVersion() !== versionToCheck;\n },\n updateVersion() {\n ++this._versionNumber;\n },\n hasSubscriptionsForEvent(event) {\n return this._subscriptions[event] && this._subscriptions[event].length;\n },\n getSubscriptionsCount(event) {\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 isDifferent(oldValue, newValue) {\n return !this.equalityComparer || !this.equalityComparer(oldValue, newValue);\n },\n once(cb) {\n const subs = this.subscribe((nv) => {\n subs.dispose();\n cb(nv);\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 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 next() {\n return new Promise((resolve) => this.once(resolve));\n },\n toString() {\n return \"[object Object]\";\n },\n extend: applyExtenders\n};\nObject.setPrototypeOf(ko_subscribable_fn, Function.prototype);\nsubscribable.fn = ko_subscribable_fn;\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { options, overwriteLengthPropertyIfSupported } from \"@tko/utils\";\nimport * as dependencyDetection from \"./dependencyDetection\";\nimport { deferUpdates } from \"./defer\";\nimport { subscribable, defaultEvent, LATEST_VALUE } from \"./subscribable\";\nimport { valuesArePrimitiveAndEqual } from \"./extenders\";\nexport function observable(initialValue) {\n function Observable() {\n if (arguments.length > 0) {\n if (Observable.isDifferent(Observable[LATEST_VALUE], arguments[0])) {\n ;\n Observable.valueWillMutate();\n Observable[LATEST_VALUE] = arguments[0];\n Observable.valueHasMutated();\n }\n return this;\n } else {\n dependencyDetection.registerDependency(Observable);\n return Observable[LATEST_VALUE];\n }\n }\n overwriteLengthPropertyIfSupported(Observable, { value: void 0 });\n Observable[LATEST_VALUE] = initialValue;\n subscribable.fn.init(Observable);\n Object.setPrototypeOf(Observable, observable.fn);\n if (options.deferUpdates) {\n deferUpdates(Observable);\n }\n return Observable;\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 * 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 * 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 * Notifies subscribers that the value is about to change.\n */\n valueWillMutate() {\n this.notifySubscribers(this[LATEST_VALUE], \"beforeChange\");\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(fn, peek2 = true) {\n this(fn(peek2 ? this.peek() : this()));\n },\n // Some observables may not always be writeable, notably computeds.\n isWriteable: true\n};\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;\nsubscribable.fn.limit = function limit(limitFunction) {\n const self = this;\n const selfIsObservable = isObservable(self);\n const beforeChange = \"beforeChange\";\n let ignoreBeforeChange, notifyNextChange, previousValue, pendingValue, didUpdate;\n if (!self._origNotifySubscribers) {\n self._origNotifySubscribers = self.notifySubscribers;\n self.notifySubscribers = limitNotifySubscribers;\n }\n const finish = limitFunction(function() {\n self._notificationIsPending = false;\n if (selfIsObservable && pendingValue === self) {\n pendingValue = self._evalIfChanged ? self._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 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 _limitBeforeChange(value) {\n if (!ignoreBeforeChange) {\n previousValue = value;\n self._origNotifySubscribers(value, beforeChange);\n }\n },\n _notifyNextChangeIfValueIsDifferent() {\n if (self.isDifferent(previousValue, self.peek(\n true\n /* evaluate */\n ))) {\n notifyNextChange = true;\n }\n },\n _recordUpdate() {\n didUpdate = true;\n }\n });\n};\nObject.setPrototypeOf(observable.fn, subscribable.fn);\nconst protoProperty = observable.protoProperty = options.protoProperty;\nobservable.fn[protoProperty] = observable;\nobservable.observablePrototypes = /* @__PURE__ */ new Set([observable]);\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}\nexport function unwrap(value) {\n return isObservable(value) ? value() : value;\n}\nexport function peek(value) {\n return isObservable(value) ? value.peek() : value;\n}\nexport function isWriteableObservable(instance) {\n return isObservable(instance) && instance.isWriteable;\n}\nexport { isWriteableObservable as isWritableObservable };\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { extend, compareArrays, findMovesInArrayComparison } from \"@tko/utils\";\nimport { defaultEvent } from \"./subscribable\";\nimport { extenders } from \"./extenders\";\nexport const arrayChangeEventName = \"arrayChange\";\nexport function trackArrayChanges(target, options) {\n target.compareArrayOptions = {};\n if (options && typeof options === \"object\") {\n extend(target.compareArrayOptions, options);\n }\n target.compareArrayOptions.sparse = true;\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 const underlyingBeforeSubscriptionAddFunction = target.beforeSubscriptionAdd;\n const underlyingAfterSubscriptionRemoveFunction = target.afterSubscriptionRemove;\n target.beforeSubscriptionAdd = function(event) {\n if (underlyingBeforeSubscriptionAddFunction) {\n underlyingBeforeSubscriptionAddFunction.call(target, event);\n }\n if (event === arrayChangeEventName) {\n trackChanges();\n }\n };\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 = void 0;\n }\n if (arrayChangeSubscription) {\n arrayChangeSubscription.dispose();\n }\n arrayChangeSubscription = null;\n trackingChanges = false;\n }\n };\n function trackChanges() {\n if (trackingChanges) {\n return;\n }\n trackingChanges = true;\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 let previousContents = new Array().concat(target.peek() === void 0 ? [] : target.peek());\n cachedDiff = null;\n arrayChangeSubscription = target.subscribe(function(currentContents) {\n let changes;\n currentContents = new Array().concat(currentContents || []);\n if (target.hasSubscriptionsForEvent(arrayChangeEventName)) {\n changes = getChanges(previousContents, currentContents);\n }\n previousContents = currentContents;\n cachedDiff = null;\n pendingNotifications = 0;\n if (changes && changes.length) {\n target.notifySubscribers(changes, arrayChangeEventName);\n }\n });\n }\n function getChanges(previousContents, currentContents) {\n if (!cachedDiff || pendingNotifications > 1) {\n cachedDiff = trackArrayChanges.compareArrays(previousContents, currentContents, target.compareArrayOptions);\n }\n return cachedDiff;\n }\n target.cacheDiffForKnownOperation = function(rawArray, operationName, args) {\n if (!trackingChanges || pendingNotifications) {\n return;\n }\n let diff = new Array(), arrayLength = rawArray.length, argsLength = args.length, offset = 0;\n function pushDiff(status, value, index) {\n return diff[diff.length] = { status, value, 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 case \"pop\":\n offset = arrayLength - 1;\n case \"shift\":\n if (arrayLength) {\n pushDiff(\"deleted\", rawArray[offset], offset);\n }\n break;\n case \"splice\":\n {\n const startIndex = Math.min(Math.max(0, args[0] < 0 ? arrayLength + args[0] : args[0]), arrayLength), endDeleteIndex = argsLength === 1 ? arrayLength : Math.min(startIndex + (args[1] || 0), arrayLength), endAddIndex = startIndex + argsLength - 2, endIndex = Math.max(endDeleteIndex, endAddIndex), additions = new Array(), deletions = new Array();\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 default:\n return;\n }\n cachedDiff = diff;\n };\n}\ntrackArrayChanges.compareArrays = compareArrays;\nextenders.trackArrayChanges = trackArrayChanges;\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { arrayIndexOf, arrayForEach, overwriteLengthPropertyIfSupported } from \"@tko/utils\";\nimport { observable, isObservable } from \"./observable\";\nimport { trackArrayChanges } from \"./observableArray.changeTracking\";\nexport function observableArray(initialValues) {\n initialValues = initialValues || [];\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 const result = Object.setPrototypeOf(observable(initialValues), observableArray.fn);\n trackArrayChanges(result);\n overwriteLengthPropertyIfSupported(result, { get: () => result()?.length });\n return result;\n}\nexport function isObservableArray(instance) {\n return isObservable(instance) && typeof instance.remove === \"function\" && typeof instance.push === \"function\";\n}\nobservableArray.fn = {\n remove(valueOrPredicate) {\n const underlyingArray = this.peek();\n const removedValues = new Array();\n const predicate = typeof valueOrPredicate === \"function\" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value) {\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 removeAll(arrayOfValues) {\n if (arrayOfValues === void 0) {\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 (!arrayOfValues) {\n return [];\n }\n return this[\"remove\"](function(value) {\n return arrayIndexOf(arrayOfValues, value) >= 0;\n });\n },\n destroy(valueOrPredicate) {\n const underlyingArray = this.peek();\n const predicate = typeof valueOrPredicate === \"function\" && !isObservable(valueOrPredicate) ? valueOrPredicate : function(value) {\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 destroyAll(arrayOfValues) {\n if (arrayOfValues === void 0) {\n return this.destroy(function() {\n return true;\n });\n }\n if (!arrayOfValues) {\n return [];\n }\n return this.destroy(function(value) {\n return arrayIndexOf(arrayOfValues, value) >= 0;\n });\n },\n indexOf(item) {\n return arrayIndexOf(this(), item);\n },\n replace(oldItem, newItem) {\n const index = this.indexOf(oldItem);\n if (index >= 0) {\n this.valueWillMutate();\n this.peek()[index] = newItem;\n this.valueHasMutated();\n }\n },\n sorted(compareFn) {\n return [...this()].sort(compareFn);\n },\n reversed() {\n return [...this()].reverse();\n },\n [Symbol.iterator]: function* () {\n yield* this();\n }\n};\nObject.setPrototypeOf(observableArray.fn, observable.fn);\narrayForEach([\"pop\", \"push\", \"reverse\", \"shift\", \"sort\", \"splice\", \"unshift\"], function(methodName) {\n observableArray.fn[methodName] = function() {\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 return methodCallResult === underlyingArray ? this : methodCallResult;\n };\n});\narrayForEach([\"slice\"], function(methodName) {\n observableArray.fn[methodName] = function() {\n const underlyingArray = this();\n return underlyingArray[methodName].apply(underlyingArray, arguments);\n };\n});\nobservableArray.trackArrayChanges = trackArrayChanges;\n", "// @tko/observable \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { isObservable } from \"./observable\";\nconst maxNestedObservableDepth = 10;\nexport function toJS(rootObject) {\n if (arguments.length == 0) {\n throw new Error(\"When calling ko.toJS, pass the object you want to convert.\");\n }\n return mapJsObjectGraph(rootObject, function(valueToMap) {\n for (let i = 0; isObservable(valueToMap) && i < maxNestedObservableDepth; i++) {\n valueToMap = valueToMap();\n }\n return valueToMap;\n });\n}\nexport function toJSON(rootObject, replacer, space) {\n const plainJavaScriptObject = toJS(rootObject);\n return JSON.stringify(plainJavaScriptObject, replacer, space);\n}\nfunction mapJsObjectGraph(rootObject, mapInputCallback, visitedObjects = /* @__PURE__ */ new Map()) {\n rootObject = mapInputCallback(rootObject);\n const canHaveProperties = typeof rootObject === \"object\" && rootObject !== null && rootObject !== void 0 && !(rootObject instanceof RegExp) && !(rootObject instanceof Date) && !(rootObject instanceof String) && !(rootObject instanceof Number) && !(rootObject instanceof Boolean);\n if (!canHaveProperties) {\n return rootObject;\n }\n const outputProperties = rootObject instanceof Array ? [] : {};\n visitedObjects.set(rootObject, outputProperties);\n visitPropertiesOrArrayEntries(rootObject, function(indexer) {\n const propertyValue = mapInputCallback(rootObject[indexer]);\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] = previouslyMappedValue !== void 0 ? previouslyMappedValue : mapJsObjectGraph(propertyValue, mapInputCallback, visitedObjects);\n }\n break;\n }\n });\n return outputProperties;\n}\nfunction visitPropertiesOrArrayEntries(rootObject, visitorCallback) {\n if (rootObject instanceof Array) {\n for (let i = 0; i < rootObject.length; i++) {\n visitorCallback(i);\n }\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", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { unwrap } from \"@tko/observable\";\nexport function LAMBDA() {\n}\nfunction unwrapOrCall(a, b) {\n while (typeof b === \"function\") {\n b = b();\n }\n return b;\n}\nconst operators = {\n // unary\n \"@\": unwrapOrCall,\n \"#\": (a, b) => () => unwrap(b),\n // Convert to read-only.\n \"=>\": LAMBDA,\n \"!\": function not(a, b) {\n return !b;\n },\n \"!!\": function notnot(a, b) {\n return !!b;\n },\n \"++\": function preinc(a, b) {\n return ++b;\n },\n \"--\": function preinc2(a, b) {\n return --b;\n },\n // exponent\n \"**\": function exp(a, b) {\n return a ** b;\n },\n // mul/div\n \"*\": function mul(a, b) {\n return a * b;\n },\n \"/\": function div(a, b) {\n return a / b;\n },\n \"%\": function mod(a, b) {\n return a % b;\n },\n // sub/add\n \"+\": function add(a, b) {\n return a + b;\n },\n \"-\": function sub(a, b) {\n return (a || 0) - (b || 0);\n },\n \"&-\": function neg(a, b) {\n return -1 * b;\n },\n // unary -\n // relational\n \"<\": function lt(a, b) {\n return a < b;\n },\n \"<=\": function le(a, b) {\n return a <= b;\n },\n \">\": function gt(a, b) {\n return a > b;\n },\n \">=\": function ge(a, b) {\n return a >= b;\n },\n // TODO: 'in': function (a, b) { return a in b; },\n // TODO: 'instanceof': function (a, b) { return a instanceof b; },\n // TODO: 'typeof': function (a, b) { return typeof b; },\n // equality\n \"==\": function equal(a, b) {\n return a == b;\n },\n \"!=\": function ne(a, b) {\n return a != b;\n },\n \"===\": function sequal(a, b) {\n return a === b;\n },\n \"!==\": function sne(a, b) {\n return a !== b;\n },\n // bitwise\n \"&\": function bitAnd(a, b) {\n return a & b;\n },\n \"^\": function xor(a, b) {\n return a ^ b;\n },\n \"|\": function bitOr(a, b) {\n return a | b;\n },\n // logic\n \"&&\": function logicAnd(a, b) {\n return a && b;\n },\n \"||\": function logicOr(a, b) {\n return a || b;\n },\n \"??\": function nullishCoalesce(a, b) {\n return a ?? b;\n },\n // Access\n \".\": function member(a, b) {\n return a?.[b];\n },\n \"?.\": function omember(a, b) {\n return a?.[b];\n },\n \"[\": function bmember(a, b) {\n return a?.[b];\n },\n \",\": function comma(a, b) {\n return b;\n },\n // conditional/ternary\n // '?': ternary See Node.js\n // Function-Call\n call: function callOp(a, b) {\n return a.apply(null, b);\n }\n};\noperators[\"@\"].precedence = 21;\noperators[\"#\"].precedence = 21;\noperators[\".\"].precedence = 19;\noperators[\"[\"].precedence = 19;\noperators[\"?.\"].precedence = 19;\noperators[\"!\"].precedence = 16;\noperators[\"!!\"].precedence = 16;\noperators[\"++\"].precedence = 16;\noperators[\"--\"].precedence = 16;\noperators[\"&-\"].precedence = 16;\noperators[\"**\"].precedence = 15;\noperators[\"%\"].precedence = 14;\noperators[\"*\"].precedence = 14;\noperators[\"/\"].precedence = 14;\noperators[\"+\"].precedence = 13;\noperators[\"-\"].precedence = 13;\noperators[\"|\"].precedence = 12;\noperators[\"^\"].precedence = 11;\noperators[\"&\"].precedence = 10;\noperators[\"<\"].precedence = 11;\noperators[\"<=\"].precedence = 11;\noperators[\">\"].precedence = 11;\noperators[\">=\"].precedence = 11;\noperators[\"==\"].precedence = 10;\noperators[\"!=\"].precedence = 10;\noperators[\"===\"].precedence = 10;\noperators[\"!==\"].precedence = 10;\noperators[\"&&\"].precedence = 6;\noperators[\"||\"].precedence = 5;\noperators[\"??\"].precedence = 5;\noperators[\"&&\"].earlyOut = (a) => !a;\noperators[\"||\"].earlyOut = (a) => a;\noperators[\"??\"].earlyOut = (a) => a;\noperators[\",\"].precedence = 2;\noperators[\"call\"].precedence = 1;\noperators[\"=>\"].precedence = 1;\nexport { operators as default };\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { unwrap } from \"@tko/observable\";\nimport { default as operators, LAMBDA } from \"./operators\";\nconst IS_EXPR_OR_IDENT = /* @__PURE__ */ Symbol(\"Node - Is Expression Or Identifier\");\nexport default class Node {\n constructor(lhs, op, rhs) {\n this.lhs = lhs;\n this.op = op;\n this.rhs = rhs;\n }\n static get operators() {\n return operators;\n }\n get_leaf_value(leaf, context, globals, node) {\n if (typeof leaf === \"function\") {\n return unwrap(leaf());\n }\n if (typeof leaf !== \"object\" || leaf === null) {\n return leaf;\n }\n if (leaf[Node.isExpressionOrIdentifierSymbol]) {\n return unwrap(leaf.get_value(void 0, context, globals, node));\n }\n return leaf;\n }\n /**\n * Return a function that calculates and returns an expression's value\n * when called.\n * @param {array} ops The operations to perform\n * @return {function} The function that calculates the expression.\n *\n * Note that for a lambda, we do not evaluate the RHS expression until\n * the lambda is called.\n */\n get_value(notused, context, globals, node) {\n var node = this;\n if (node.op === LAMBDA) {\n return (...args) => {\n let lambdaContext = context;\n if (node.lhs) {\n lambdaContext = node.lhs.extendContext(context, args);\n }\n return node.get_leaf_value(node.rhs, lambdaContext, globals, node);\n };\n }\n const lhv = node.get_leaf_value(node.lhs, context, globals, node);\n const earlyOut = node.op.earlyOut;\n if (earlyOut && earlyOut(lhv)) {\n return lhv;\n }\n const rhv = node.get_leaf_value(node.rhs, context, globals, node);\n return node.op(lhv, rhv, context, globals);\n }\n //\n // Class variables.\n //\n static get isExpressionOrIdentifierSymbol() {\n return IS_EXPR_OR_IDENT;\n }\n get [IS_EXPR_OR_IDENT]() {\n return true;\n }\n static value_of(item, context, globals, node) {\n if (item && item[Node.isExpressionOrIdentifierSymbol]) {\n return item.get_value(item, context, globals, node);\n }\n return item;\n }\n /**\n * Convert an array of nodes to an executable tree.\n * @return {object} An object with a `lhs`, `rhs` and `op` key, corresponding\n * to the left hand side, right hand side, and\n * operation function.\n */\n static create_root(nodes, debug = false) {\n const out = new Array();\n const ops = new Array();\n for (let i = 0; i < nodes.length; i += 2) {\n out.push(nodes[i]);\n const op = nodes[i + 1];\n const prec = op?.precedence || 0;\n while (ops.length && prec <= ops[ops.length - 1].precedence) {\n const rhs = out.pop();\n const lhs = out.pop();\n out.push(new Node(lhs, ops.pop(), rhs));\n }\n ops.push(op);\n }\n if (out.length !== 1) {\n throw new Error(`unexpected nodes remain in shunting yard output stack: ${out}`);\n }\n return out[0];\n }\n}\noperators[\"?\"] = function ternary(a, b, context, globals, node) {\n return Node.value_of(a ? b.yes : b.no, context, globals, node);\n};\noperators[\"?\"].precedence = 4;\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport Node from \"./Node\";\nexport default class Expression {\n constructor(nodes) {\n this.nodes = nodes;\n this.root = Node.create_root(nodes);\n }\n /**\n * Return the value of `this` Expression instance.\n */\n get_value(parent, context, globals, node) {\n if (!this.root) {\n this.root = Node.create_root(this.nodes);\n }\n return this.root.get_value(parent, context, globals, node);\n }\n}\nExpression.prototype[Node.isExpressionOrIdentifierSymbol] = true;\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport Node from \"./Node\";\nexport default class Arguments {\n constructor(parser, args) {\n this.parser = parser;\n this.args = args;\n }\n get_value(parent, context, globals, node) {\n const deReffedArgs = new Array();\n for (let i = 0, j = this.args.length; i < j; ++i) {\n deReffedArgs.push(Node.value_of(this.args[i], context, globals, node));\n }\n return deReffedArgs;\n }\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true;\n }\n}\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nexport const IDStart = /[\\$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/;\nexport const IDContinue = /[\\$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/;\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport Node from \"./Node\";\nimport Arguments from \"./Arguments\";\nimport { hasOwnProperty, isObjectLike } from \"@tko/utils\";\nimport { isWriteableObservable, isObservable } from \"@tko/observable\";\nimport { IDStart, IDContinue } from \"./identifierExpressions\";\nexport default class Identifier {\n constructor(parser, token, dereferences) {\n this.token = token;\n this.dereferences = dereferences;\n this.parser = parser;\n }\n /**\n * Apply all () and [] functions on the identifier to the lhs value e.g.\n * a()[3] has deref functions that are essentially this:\n * [_deref_call, _deref_this where this=3]\n *\n * @param {mixed} value Should be an object.\n * @return {mixed} The dereferenced value.\n *\n * [1] We want to bind any function that is a method of an object, but not\n * corrupt any values (e.g. computed()s). e.g. Running x.bind(obj) where\n * we're given `data-bind='binding: obj.x'` and x is a computed will\n * break the computed's `this` and it will stop working as expected.\n *\n * The test `!last_value.hasOwnProperty(member)`\n * distinguishes between functions on the prototype chain (prototypal\n * members) and value-members added directly to the object. This may\n * not be the canonical test for this relationship, but it succeeds\n * in the known test cases.\n *\n * See: `this` tests of our dereference function.\n */\n dereference(value, $context, globals, node) {\n let member;\n const refs = this.dereferences || [];\n const $data = $context.$data || {};\n let lastValue;\n let i, n;\n for (i = 0, n = refs.length; i < n; ++i) {\n member = Node.value_of(refs[i], $context, globals, node);\n if (typeof value === \"function\" && refs[i] instanceof Arguments) {\n value = value.apply(lastValue || $data, member);\n lastValue = value;\n } else if (value === null || value === void 0) {\n return value;\n } else {\n lastValue = value;\n value = Node.value_of(value[member], $context, globals, node);\n }\n }\n if (typeof value === \"function\" && n > 0 && lastValue !== value && !hasOwnProperty(lastValue, member)) {\n return value.bind(lastValue);\n }\n return value;\n }\n /**\n * Return the value as one would get it from the top-level i.e.\n * $data.token/$context.token/globals.token; this does not return intermediate\n * values on a chain of members i.e. $data.hello.there -- requesting the\n * Identifier('there').value will return $data/$context/globals.there.\n *\n * This will dereference using () or [arg] member.\n * @param {object | Identifier | Expression} parent\n * @return {mixed} Return the primitive or an accessor.\n */\n get_value(parent, context, globals, node) {\n const intermediate = parent && !(parent instanceof Identifier) ? Node.value_of(parent, context, globals, node)[this.token] : context.lookup(this.token, globals, node);\n return this.dereference(intermediate, context, globals, node);\n }\n assign(object, property, value) {\n if (isWriteableObservable(object[property])) {\n object[property](value);\n } else if (!isObservable(object[property])) {\n object[property] = value;\n }\n }\n /**\n * Set the value of the Identifier.\n *\n * @param {Mixed} new_value The value that Identifier is to be set to.\n */\n set_value(new_value, $context, globals) {\n const $data = $context.$data || {};\n const refs = this.dereferences || [];\n let leaf = this.token;\n let i, n, root;\n if (isObjectLike($data) && leaf in $data) {\n root = $data;\n } else if (leaf in $context) {\n root = $context;\n } else if (leaf in globals) {\n root = globals;\n } else {\n throw new Error(\n \"Identifier::set_value -- The property '\" + leaf + \"' does not exist on the $data, $context, or globals.\"\n );\n }\n n = refs.length;\n if (n === 0) {\n this.assign(root, leaf, new_value);\n return;\n }\n root = root[leaf];\n for (i = 0; i < n - 1; ++i) {\n leaf = refs[i];\n if (leaf instanceof Arguments) {\n root = root();\n } else {\n root = root[Node.value_of(leaf)];\n }\n }\n if (refs[i] === true) {\n throw new Error(\"Cannot assign a value to a function.\");\n }\n if (refs[i]) {\n this.assign(root, Node.value_of(refs[i]), new_value);\n }\n }\n /**\n * Determine if a character is a valid item in an identifier.\n * Note that we do not check whether the first item is a number, nor do we\n * support unicode identifiers here.\n *\n * From: http://stackoverflow.com/a/9337047\n * @param {String} ch The character\n * @return {Boolean} True if this is a valid identifier\n */\n // function is_identifier_char(ch) {\n // return (ch >= 'A' && ch <= 'Z') ||\n // (ch >= 'a' && ch <= 'z') ||\n // (ch >= '0' && ch <= 9) ||\n // ch === '_' || ch === '$';\n // }\n static is_valid_start_char(ch) {\n return IDStart.test(ch);\n }\n static is_valid_continue_char(ch) {\n return IDContinue.test(ch);\n }\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true;\n }\n}\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport operators from \"./operators\";\nimport Node from \"./Node\";\nimport Expression from \"./Expression\";\nimport Identifier from \"./Identifier\";\nexport default class Parameters {\n #names;\n constructor(parser, node) {\n if (node instanceof Expression) {\n node = node.root;\n }\n try {\n this.#names = Parameters.nodeTreeToNames(node);\n } catch (e) {\n parser.error(e);\n }\n }\n extendContext(context, args) {\n if (!this.#names) {\n return context;\n } else {\n const newValues = {};\n this.#names.forEach((name, index) => {\n newValues[name] = args[index];\n });\n return context.extend(newValues);\n }\n }\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true;\n }\n static nodeTreeToNames(node) {\n const names = new Array();\n while (node) {\n if (node instanceof Identifier) {\n names.push(node.token);\n node = null;\n } else if (this.isCommaNode(node)) {\n names.push(node.rhs.token);\n node = node.lhs;\n } else {\n throw new Error(\n `only simple identifiers allowed in lambda parameter list but found ${JSON.stringify(node, null, 2)}`\n );\n }\n }\n names.reverse();\n return names;\n }\n static isCommaNode(node) {\n return node instanceof Node && node.op === operators[\",\"] && node.rhs instanceof Identifier;\n }\n}\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport Node from \"./Node\";\nexport default class Ternary {\n constructor(yes, no) {\n Object.assign(this, { yes, no });\n }\n get_value() {\n return this;\n }\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true;\n }\n}\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { options, objectForEach, clonePlainObjectDeep, extend, hasOwnProperty } from \"@tko/utils\";\nimport { default as Expression } from \"./Expression\";\nimport { default as Identifier } from \"./Identifier\";\nimport { default as Arguments } from \"./Arguments\";\nimport { default as Parameters } from \"./Parameters\";\nimport { default as Ternary } from \"./Ternary\";\nimport { default as Node } from \"./Node\";\nimport { default as operators } from \"./operators\";\nconst escapee = {\n \"'\": \"'\",\n '\"': '\"',\n \"`\": \"`\",\n \"\\\\\": \"\\\\\",\n \"/\": \"/\",\n $: \"$\",\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\t\"\n};\nexport default class Parser {\n white() {\n let ch = this.ch;\n while (ch && ch <= \" \") {\n ch = this.next();\n }\n return this.comment(ch);\n }\n /**\n * Slurp any C or C++ style comments\n */\n comment(ch) {\n if (ch !== \"/\") {\n return ch;\n }\n const p = this.at;\n const second = this.lookahead();\n if (second === \"/\") {\n while (ch) {\n ch = this.next();\n if (ch === \"\\n\" || ch === \"\\r\") {\n break;\n }\n }\n ch = this.next();\n } else if (second === \"*\") {\n while (ch) {\n ch = this.next();\n if (ch === \"*\" && this.lookahead() === \"/\") {\n this.next();\n break;\n }\n }\n if (!ch) {\n this.error(\"Unclosed comment, starting at character \" + p);\n }\n this.next();\n return this.white();\n }\n return ch;\n }\n next(c) {\n if (c && c !== this.ch) {\n this.error(\"Expected '\" + c + \"' but got '\" + this.ch + \"'\");\n }\n this.ch = this.text.charAt(this.at);\n this.at += 1;\n return this.ch;\n }\n lookahead() {\n return this.text[this.at];\n }\n error(m) {\n if (m instanceof Error) {\n throw m;\n }\n throw this.createError(m);\n }\n createError(m) {\n const [name, msg] = m.name ? [m.name, m.message] : [m, \"\"];\n const message = `\n${name} ${msg} of ${this.text}\n` + Array(this.at).join(\" \") + \"_/ \\u{1F525} \\\\_\\n\";\n return new Error(message);\n }\n name() {\n let name = \"\";\n let enclosedBy;\n this.white();\n let ch = this.ch;\n if (ch === \"'\" || ch === '\"') {\n enclosedBy = ch;\n ch = this.next();\n }\n while (ch) {\n if (enclosedBy && ch === enclosedBy) {\n this.white();\n ch = this.next();\n if (ch !== \":\" && ch !== \",\") {\n this.error(\"Object name: \" + name + \" missing closing \" + enclosedBy);\n }\n return name;\n } else if (ch === \":\" || ch <= \" \" || ch === \",\" || ch === \"|\") {\n return name;\n }\n name += ch;\n ch = this.next();\n }\n return name;\n }\n number() {\n let number;\n let string = \"\";\n let ch = this.ch;\n if (ch === \"-\") {\n string = \"-\";\n ch = this.next(\"-\");\n }\n while (ch >= \"0\" && ch <= \"9\") {\n string += ch;\n ch = this.next();\n }\n if (ch === \".\") {\n string += \".\";\n ch = this.next();\n while (ch && ch >= \"0\" && ch <= \"9\") {\n string += ch;\n ch = this.next();\n }\n }\n if (ch === \"e\" || ch === \"E\") {\n string += ch;\n ch = this.next();\n if (ch === \"-\" || ch === \"+\") {\n string += ch;\n ch = this.next();\n }\n while (ch >= \"0\" && ch <= \"9\") {\n string += ch;\n ch = this.next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n options.onError(new Error(\"Bad number: \" + number + \" in \" + string));\n } else {\n return number;\n }\n }\n /**\n * Add a property to 'object' that equals the given value.\n * @param {Object} object The object to add the value to.\n * @param {String} key object[key] is set to the given value.\n * @param {mixed} value The value, may be a primitive or a function. If a\n * function it is unwrapped as a property.\n */\n objectAddValue(object, key, value) {\n if (value && value[Node.isExpressionOrIdentifierSymbol]) {\n Object.defineProperty(object, key, {\n get: () => Node.value_of(value, ...this.currentContextGlobals),\n enumerable: true\n });\n } else if (Array.isArray(value)) {\n Object.defineProperty(object, key, {\n get: () => value.map((v) => Node.value_of(v, ...this.currentContextGlobals)),\n enumerable: true\n });\n } else {\n object[key] = value;\n }\n }\n object() {\n let key;\n const object = {};\n let ch = this.ch;\n if (ch === \"{\") {\n this.next(\"{\");\n ch = this.white();\n if (ch === \"}\") {\n ch = this.next(\"}\");\n return object;\n }\n while (ch) {\n if (ch === '\"' || ch === \"'\" || ch === \"`\") {\n key = this.string();\n } else {\n key = this.name();\n }\n if (hasOwnProperty(object, key)) {\n this.error('Duplicate key \"' + key + '\"');\n }\n if (this.white() === \":\") {\n ch = this.next(\":\");\n this.objectAddValue(object, key, this.singleValueExpression());\n } else {\n const objectKeyIsValue = new Identifier(this, key, []);\n this.objectAddValue(object, key, objectKeyIsValue);\n }\n ch = this.white();\n if (ch === \"}\") {\n ch = this.next(\"}\");\n return object;\n }\n this.next(\",\");\n ch = this.white();\n if (ch === \"}\") {\n ch = this.next(\"}\");\n return object;\n }\n }\n }\n throw this.createError(\"Bad object\");\n }\n /**\n * Read up to delim and return the string\n * @param {string} delim The delimiter, either ' or \"\n * @return {string} The string read.\n */\n readString(delim) {\n let string = \"\";\n const nodes = [\"\"];\n const plusOp = operators[\"+\"];\n let hex;\n let i;\n let uffff;\n const interpolate = delim === \"`\";\n let ch = this.next();\n while (ch) {\n if (ch === delim) {\n ch = this.next();\n if (interpolate) {\n nodes.push(plusOp);\n }\n nodes.push(string);\n return nodes;\n }\n if (ch === \"\\\\\") {\n ch = this.next();\n if (ch === \"u\") {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(ch = this.next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === \"string\") {\n string += escapee[ch];\n } else {\n break;\n }\n } else if (interpolate && ch === \"$\") {\n ch = this.next();\n if (ch === \"{\") {\n this.next(\"{\");\n nodes.push(plusOp);\n nodes.push(string);\n nodes.push(plusOp);\n nodes.push(this.expression());\n string = \"\";\n } else {\n string += \"$\" + ch;\n }\n } else {\n string += ch;\n }\n ch = this.next();\n }\n throw this.createError(\"Bad string\");\n }\n string() {\n const ch = this.ch;\n if (ch === '\"') {\n return this.readString('\"')?.join(\"\");\n } else if (ch === \"'\") {\n return this.readString(\"'\")?.join(\"\");\n } else if (ch === \"`\") {\n return Node.create_root(this.readString(\"`\"));\n }\n this.error(\"Bad string\");\n }\n array() {\n const array = new Array();\n let ch = this.ch;\n if (ch === \"[\") {\n ch = this.next(\"[\");\n this.white();\n if (ch === \"]\") {\n ch = this.next(\"]\");\n return array;\n }\n while (ch) {\n array.push(this.singleValueExpression());\n ch = this.white();\n if (ch === \"]\") {\n ch = this.next(\"]\");\n return array;\n }\n this.next(\",\");\n ch = this.white();\n }\n }\n throw this.createError(\"Bad array\");\n }\n value() {\n this.white();\n const ch = this.ch;\n switch (ch) {\n case \"{\":\n return this.object();\n case \"[\":\n return this.array();\n case '\"':\n case \"'\":\n case \"`\":\n return this.string();\n case \"-\":\n return this.number();\n default:\n return ch >= \"0\" && ch <= \"9\" ? this.number() : this.identifier();\n }\n }\n /**\n * Get the function for the given operator.\n * A `.precedence` value is added to the function, with increasing\n * precedence having a higher number.\n * @return {function} The function that performs the infix operation\n */\n operator(opts) {\n let op = \"\";\n let opFn;\n let ch = this.white();\n let isIdentifierChar = Identifier.is_valid_start_char;\n while (ch) {\n if (isIdentifierChar(ch) || ch <= \" \" || ch === \"\" || ch === '\"' || ch === \"'\" || ch === \"{\" || ch === \"(\" || ch === \"`\" || ch === \")\" || ch <= \"9\" && ch >= \"0\") {\n break;\n }\n if (!opts.not_an_array && ch === \"[\") {\n break;\n }\n op += ch;\n ch = this.next();\n if (ch === \"@\") {\n break;\n }\n isIdentifierChar = Identifier.is_valid_continue_char;\n }\n if (op !== \"\") {\n if (opts.prefix && op === \"-\") {\n op = \"&-\";\n }\n opFn = operators[op];\n if (!opFn) {\n this.error(\"Bad operator: '\" + op + \"'.\");\n }\n }\n return opFn;\n }\n /**\n * Filters\n * Returns what the Node interprets as an \"operator\".\n * e.g.\n * <span data-bind=\"text: name | fit:20 | uppercase\"></span>\n */\n filter() {\n let ch = this.next();\n const args = new Array();\n let nextFilter = function(v) {\n return v;\n };\n const name = this.name();\n if (!options.filters[name]) {\n options.onError(new Error(\"Cannot find filter by the name of: \" + name));\n }\n ch = this.white();\n while (ch) {\n if (ch === \":\") {\n ch = this.next();\n args.push(this.singleValueExpression(\"|\"));\n }\n if (ch === \"|\") {\n nextFilter = this.filter();\n break;\n }\n if (ch === \",\") {\n break;\n }\n ch = this.white();\n }\n function filter(value, ignored, context, globals, node) {\n const argValues = [value];\n for (let i = 0, j = args.length; i < j; ++i) {\n argValues.push(Node.value_of(args[i], context, globals, node));\n }\n return nextFilter(options.filters[name].apply(context, argValues), ignored, context, globals, node);\n }\n filter.precedence = 1;\n return filter;\n }\n /**\n * Parse an expression \u2013 builds an operator tree, in something like\n * Shunting-Yard.\n * See: http://en.wikipedia.org/wiki/Shunting-yard_algorithm\n *\n * @param filterable - Whether the expression can include jinga-style filters.\n * An argument of '|' is used only by the filter() method to parse subsequent\n * filters.\n * @param allowMultipleValues - Whether multiple values separated by commas are\n * allowed in this expression. When true (default), this method consumes\n * subsequent comma-separated values.\n * @see {@link Parser.singleValueExpression}\n *\n * @returns a function that computes the value of the expression\n * when called or a primitive.\n */\n expression(filterable = false, allowMultipleValues = true) {\n let op;\n const nodes = new Array();\n let ch = this.white();\n while (ch) {\n op = this.operator({ prefix: true });\n if (op) {\n nodes.push(void 0);\n nodes.push(op);\n ch = this.white();\n }\n if (ch === \"(\") {\n this.next();\n nodes.push(this.expression());\n this.next(\")\");\n } else {\n nodes.push(this.value());\n }\n ch = this.white();\n if (ch === \":\" || ch === \"}\" || ch === \"]\" || ch === \")\" || ch === \"\" || ch === \"`\" || ch === \"|\" && filterable === \"|\" || ch === \",\" && !allowMultipleValues) {\n break;\n }\n if (ch === \"|\" && this.lookahead() !== \"|\" && filterable) {\n nodes.push(this.filter());\n nodes.push(void 0);\n break;\n }\n op = this.operator({ not_an_array: true });\n if (op === operators[\"?\"]) {\n this.ternary(nodes);\n break;\n } else if (op === operators[\".\"] || op === operators[\"?.\"]) {\n nodes.push(op);\n nodes.push(this.member());\n op = null;\n } else if (op === operators[\"[\"]) {\n nodes.push(op);\n nodes.push(this.expression());\n ch = this.next(\"]\");\n op = null;\n } else if (op === operators[\"=>\"]) {\n nodes[nodes.length - 1] = new Parameters(this, nodes[nodes.length - 1]);\n nodes.push(op);\n } else if (op) {\n nodes.push(op);\n }\n ch = this.white();\n if (ch === \"]\" || !op && ch === \"(\") {\n break;\n }\n }\n if (nodes.length === 0) {\n return void 0;\n }\n const dereferences = this.dereferences();\n if (nodes.length === 1 && !dereferences.length) {\n return nodes[0];\n }\n for (let i = 0, j = dereferences.length; i < j; ++i) {\n const deref = dereferences[i];\n if (deref.constructor === Arguments) {\n nodes.push(operators.call);\n } else {\n nodes.push(operators[\".\"]);\n }\n nodes.push(deref);\n }\n return new Expression(nodes);\n }\n /**\n * Use this method to parse expressions that can be followed by additional markup\n * seperated by a comma, such as in bindings strings.\n *\n * @returns an expression that cannot contain multiple values separated by commas.\n * @see {@link Parser.expression}\n */\n singleValueExpression(filterable = false) {\n return this.expression(filterable, false);\n }\n ternary(nodes) {\n const ternary = new Ternary();\n ternary.yes = this.singleValueExpression();\n this.next(\":\");\n ternary.no = this.singleValueExpression();\n nodes.push(operators[\"?\"]);\n nodes.push(ternary);\n }\n /**\n * Parse the arguments to a function, returning an Array.\n *\n */\n funcArguments() {\n const args = new Array();\n let ch = this.next(\"(\");\n while (ch) {\n ch = this.white();\n if (ch === \")\") {\n this.next(\")\");\n return new Arguments(this, args);\n } else {\n args.push(this.singleValueExpression());\n ch = this.white();\n }\n if (ch !== \")\") {\n this.next(\",\");\n }\n }\n throw this.createError(\"Bad arguments to function\");\n }\n /**\n * The literal string reference `abc` in an `x.abc` expression.\n */\n member() {\n let member = \"\";\n let ch = this.white();\n let isIdentifierChar = Identifier.is_valid_start_char;\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break;\n }\n member += ch;\n ch = this.next();\n isIdentifierChar = Identifier.is_valid_continue_char;\n }\n return member;\n }\n /**\n * A dereference applies to an identifer, being either a function\n * call \"()\" or a membership lookup with square brackets \"[member]\".\n * @return {fn or undefined} Dereference function to be applied to the\n * Identifier\n */\n dereference() {\n let member;\n const ch = this.white();\n while (ch) {\n if (ch === \"(\") {\n return this.funcArguments();\n } else if (ch === \"[\") {\n this.next(\"[\");\n member = this.expression();\n this.white();\n this.next(\"]\");\n return member;\n } else if (ch === \".\") {\n this.next(\".\");\n return this.member();\n } else {\n break;\n }\n }\n }\n dereferences() {\n const ch = this.white();\n const dereferences = new Array();\n let deref;\n while (ch) {\n deref = this.dereference();\n if (deref !== void 0) {\n dereferences.push(deref);\n } else {\n break;\n }\n }\n return dereferences;\n }\n identifier() {\n let token = \"\";\n let isIdentifierChar = Identifier.is_valid_start_char;\n let ch = this.white();\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break;\n }\n token += ch;\n ch = this.next();\n isIdentifierChar = Identifier.is_valid_continue_char;\n }\n switch (token) {\n case \"true\":\n return true;\n case \"false\":\n return false;\n case \"null\":\n return null;\n case \"undefined\":\n return void 0;\n case \"function\":\n throw new Error(\"Knockout: Anonymous functions are no longer supported, but `=>` lambdas are. In: \" + this.text);\n }\n return new Identifier(this, token, this.dereferences());\n }\n readBindings() {\n let key;\n const bindings = {};\n let sep;\n let expr;\n let ch = this.ch;\n while (ch) {\n key = this.name();\n sep = this.white();\n if (!sep || sep === \",\") {\n if (sep) {\n ch = this.next(\",\");\n } else {\n ch = \"\";\n }\n bindings[key] = null;\n } else {\n if (key.indexOf(\".\") !== -1) {\n key = key.split(\".\");\n bindings[key[0]] = bindings[key[0]] || {};\n if (key.length !== 2) {\n options.onError(new Error(\"Binding \" + key + \" should have two parts (a.b).\"));\n } else if (bindings[key[0]].constructor !== Object) {\n options.onError(new Error(\"Binding \" + key[0] + \".\" + key[1] + \" paired with a non-object.\"));\n }\n ch = this.next(\":\");\n this.objectAddValue(bindings[key[0]], key[1], this.singleValueExpression(true));\n } else {\n ch = this.next(\":\");\n if (bindings[key] && typeof bindings[key] === \"object\" && bindings[key].constructor === Object) {\n expr = this.singleValueExpression(true);\n if (typeof expr !== \"object\" || expr.constructor !== Object) {\n options.onError(new Error(\"Expected plain object for \" + key + \" value.\"));\n } else {\n extend(bindings[key], expr);\n }\n } else {\n bindings[key] = this.singleValueExpression(true);\n }\n }\n this.white();\n if (this.ch) {\n ch = this.next(\",\");\n } else {\n ch = \"\";\n }\n }\n }\n return bindings;\n }\n valueAsAccessor(value, context, globals, node) {\n if (!value) {\n return () => value;\n }\n if (typeof value === \"function\") {\n return value;\n }\n if (value[Node.isExpressionOrIdentifierSymbol]) {\n return () => Node.value_of(value, context, globals, node);\n }\n if (Array.isArray(value)) {\n return () => value.map((v) => Node.value_of(v, context, globals, node));\n }\n if (typeof value !== \"function\") {\n return () => clonePlainObjectDeep(value);\n }\n throw new Error(\"Value has cannot be converted to accessor: \" + value);\n }\n /**\n * Convert result[name] from a value to a function (i.e. `valueAccessor()`)\n * @param {object} result [Map of top-level names to values]\n * @return {object} [Map of top-level names to functions]\n *\n * Accessors may be one of (below) constAccessor, identifierAccessor,\n * expressionAccessor, or nodeAccessor.\n */\n convertToAccessors(result, context, globals, node) {\n objectForEach(result, (name, value) => {\n if (value instanceof Identifier) {\n Object.defineProperty(result, name, {\n value: function(optionalValue, options2) {\n const currentValue = value.get_value(void 0, context, globals, node);\n if (arguments.length === 0) {\n return currentValue;\n }\n const unchanged = optionalValue === currentValue;\n if (options2 && options2.onlyIfChanged && unchanged) {\n return;\n }\n return value.set_value(optionalValue, context, globals);\n }\n });\n } else {\n result[name] = this.valueAsAccessor(value, context, globals, node);\n }\n });\n return result;\n }\n preparse(source = \"\") {\n const preparsers = options.bindingStringPreparsers || [];\n return preparsers.reduce((acc, fn) => fn(acc), source.trim());\n }\n runParse(source, fn) {\n this.text = this.preparse(source);\n this.at = 0;\n this.ch = \" \";\n try {\n const result = fn();\n this.white();\n if (this.ch) {\n this.error(\"Syntax Error\");\n }\n return result;\n } catch (e) {\n options.onError(e);\n }\n }\n /**\n * Get the bindings as name: accessor()\n * @param {string} source The binding string to parse.\n * @return {object} Map of name to accessor function.\n */\n parse(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => null;\n }\n this.currentContextGlobals = [context, globals, node];\n const parseFn = () => this.readBindings();\n const bindingAccessors = this.runParse(source, parseFn);\n return this.convertToAccessors(bindingAccessors, context, globals, node);\n }\n /**\n * Return a function that evaluates and returns the result of the expression.\n */\n parseExpression(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => \"\";\n }\n this.currentContextGlobals = [context, globals, node];\n const parseFn = () => this.singleValueExpression(true);\n const bindingAccessors = this.runParse(source, parseFn);\n return this.valueAsAccessor(bindingAccessors, context, globals, node);\n }\n}\n", "// @tko/utils.parser \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { stringTrim } from \"@tko/utils\";\nconst specials = \",\\\"'`{}()/:[\\\\]\";\nconst bindingToken = RegExp(\n [\n // These match strings, either with double quotes, single quotes, or backticks\n '\"(?:\\\\\\\\.|[^\"])*\"',\n \"'(?:\\\\\\\\.|[^'])*'\",\n \"`(?:\\\\\\\\.|[^`])*`\",\n // Match C style comments\n \"/\\\\*(?:[^*]|\\\\*+[^*/])*\\\\*+/\",\n // Match C++ style comments\n \"//.*\\n\",\n // Match a regular expression (text enclosed by slashes), but will also match sets of divisions\n // as a regular expression (this is handled by the parsing loop below).\n \"/(?:\\\\\\\\.|[^/])+/\\\\w*\",\n // Match text (at least two characters) that does not contain any of the above special characters,\n // although some of the special characters are allowed to start it (all but the colon and comma).\n // The text can contain spaces, but leading or trailing spaces are skipped.\n \"[^\\\\s:,/][^\" + specials + \"]*[^\\\\s\" + specials + \"]\",\n // Match any non-space character not matched already. This will match colons and commas, since they're\n // not matched by \"everyThingElse\", but will also match any other single character that wasn't already\n // matched (for example: in \"a: 1, b: 2\", each of the non-space characters will be matched by oneNotSpace).\n \"[^\\\\s]\"\n ].join(\"|\"),\n \"g\"\n);\nconst divisionLookBehind = /[\\])\"'A-Za-z0-9_$]+$/;\nconst keywordRegexLookBehind = { in: 1, return: 1, typeof: 1 };\nexport default function parseObjectLiteral(objectLiteralString) {\n let str = stringTrim(objectLiteralString);\n if (str.charCodeAt(0) === 123) str = str.slice(1, -1);\n str += \"\\n,\";\n const result = new Array();\n let toks = str.match(bindingToken);\n let key;\n let values = new Array();\n let depth = 0;\n if (toks.length <= 1) {\n return [];\n }\n for (let i = 0, tok; tok = toks[i]; ++i) {\n const c = tok.charCodeAt(0);\n if (c === 44) {\n if (depth <= 0) {\n result.push(key && values.length ? { key, value: values.join(\"\") } : { unknown: key || values.join(\"\") });\n key = depth = 0;\n values = new Array();\n continue;\n }\n } else if (c === 58) {\n if (!depth && !key && values.length === 1) {\n key = values.pop();\n continue;\n }\n } else if (c === 47 && tok.length > 1 && (tok.charCodeAt(1) === 47 || tok.charCodeAt(1) === 42)) {\n continue;\n } else if (c === 47 && i && tok.length > 1) {\n const match = toks[i - 1].match(divisionLookBehind);\n if (match && !keywordRegexLookBehind[match[0]]) {\n str = str.substr(str.indexOf(tok) + 1);\n toks = str.match(bindingToken);\n i = -1;\n tok = \"/\";\n }\n } else if (c === 40 || c === 123 || c === 91) {\n ++depth;\n } else if (c === 41 || c === 125 || c === 93) {\n --depth;\n } else if (!key && !values.length && (c === 34 || c === 39)) {\n tok = tok.slice(1, -1);\n }\n values.push(tok);\n }\n return result;\n}\n", "// @tko/computed \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n addDisposeCallback,\n arrayForEach,\n createSymbolOrString,\n domNodeIsAttachedToDocument,\n extend,\n options,\n hasOwnProperty,\n objectForEach,\n options as koOptions,\n removeDisposeCallback,\n safeSetTimeout\n} from \"@tko/utils\";\nimport {\n dependencyDetection,\n extenders,\n valuesArePrimitiveAndEqual,\n observable,\n subscribable,\n LATEST_VALUE\n} from \"@tko/observable\";\nconst computedState = createSymbolOrString(\"_state\");\nconst DISPOSED_STATE = {\n dependencyTracking: null,\n dependenciesCount: 0,\n isDisposed: true,\n isStale: false,\n isDirty: false,\n isSleeping: false,\n disposeWhenNodeIsRemoved: null,\n readFunction: null,\n _options: null\n};\nexport function computed(evaluatorFunctionOrOptions, evaluatorFunctionTarget, options2) {\n if (typeof evaluatorFunctionOrOptions === \"object\") {\n options2 = evaluatorFunctionOrOptions;\n } else {\n options2 = options2 || {};\n if (evaluatorFunctionOrOptions) {\n options2.read = evaluatorFunctionOrOptions;\n }\n }\n if (typeof options2?.read !== \"function\") {\n throw Error(\"Pass a function that returns the value of the computed\");\n }\n const writeFunction = options2.write;\n const state = {\n latestValue: void 0,\n isStale: true,\n isDirty: true,\n isBeingEvaluated: false,\n suppressDisposalUntilDisposeWhenReturnsFalse: false,\n isDisposed: false,\n pure: false,\n isSleeping: false,\n readFunction: options2.read,\n evaluatorFunctionTarget: evaluatorFunctionTarget || options2.owner,\n disposeWhenNodeIsRemoved: options2.disposeWhenNodeIsRemoved || null,\n disposeWhen: options2.disposeWhen,\n domNodeDisposalCallback: null,\n dependencyTracking: {},\n dependenciesCount: 0,\n evaluationTimeoutInstance: null\n };\n function computedObservable() {\n if (arguments.length > 0) {\n if (typeof writeFunction === \"function\") {\n writeFunction.apply(state.evaluatorFunctionTarget, arguments);\n } else {\n throw new Error(\n \"Cannot write a value to a computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\"\n );\n }\n return this;\n } else {\n if (!state.isDisposed) {\n dependencyDetection.registerDependency(computedObservable);\n }\n if (state.isDirty || state.isSleeping && computedObservable.haveDependenciesChanged()) {\n ;\n computedObservable.evaluateImmediate();\n }\n return state.latestValue;\n }\n }\n computedObservable[computedState] = state;\n computedObservable.isWriteable = typeof writeFunction === \"function\";\n subscribable.fn.init(computedObservable);\n Object.setPrototypeOf(computedObservable, computed.fn);\n if (options2.pure) {\n state.pure = true;\n state.isSleeping = true;\n extend(computedObservable, pureComputedOverrides);\n } else if (options2.deferEvaluation) {\n extend(computedObservable, deferEvaluationOverrides);\n }\n if (koOptions.deferUpdates) {\n extenders.deferred(computedObservable, true);\n }\n if (koOptions.debug) {\n computedObservable._options = options2;\n }\n if (state.disposeWhenNodeIsRemoved) {\n state.suppressDisposalUntilDisposeWhenReturnsFalse = true;\n if (!state.disposeWhenNodeIsRemoved.nodeType) {\n state.disposeWhenNodeIsRemoved = null;\n }\n }\n if (!state.isSleeping && !options2.deferEvaluation) {\n ;\n computedObservable.evaluateImmediate();\n }\n if (state.disposeWhenNodeIsRemoved && computedObservable.isActive()) {\n addDisposeCallback(\n state.disposeWhenNodeIsRemoved,\n state.domNodeDisposalCallback = function() {\n ;\n computedObservable.dispose();\n }\n );\n }\n return computedObservable;\n}\nfunction computedDisposeDependencyCallback(id, entryToDispose) {\n if (entryToDispose !== null && entryToDispose.dispose) {\n entryToDispose.dispose();\n }\n}\nfunction computedBeginDependencyDetectionCallback(subscribable2, id) {\n const computedObservable = this.computedObservable, state = computedObservable[computedState];\n if (!state.isDisposed) {\n if (this.disposalCount && this.disposalCandidates[id]) {\n computedObservable.addDependencyTracking(id, subscribable2, this.disposalCandidates[id]);\n this.disposalCandidates[id] = null;\n --this.disposalCount;\n } else if (!state.dependencyTracking[id]) {\n computedObservable.addDependencyTracking(\n id,\n subscribable2,\n state.isSleeping ? { _target: subscribable2 } : computedObservable.subscribeToDependency(subscribable2)\n );\n }\n if (subscribable2._notificationIsPending) {\n subscribable2._notifyNextChangeIfValueIsDifferent();\n }\n }\n}\ncomputed.fn = {\n equalityComparer: valuesArePrimitiveAndEqual,\n getDependenciesCount() {\n return this[computedState].dependenciesCount;\n },\n getDependencies() {\n const dependencyTracking = this[computedState].dependencyTracking;\n const dependentObservables = new Array();\n objectForEach(dependencyTracking, function(id, dependency) {\n dependentObservables[dependency._order] = dependency._target;\n });\n return dependentObservables;\n },\n addDependencyTracking(id, target, trackingObj) {\n if (this[computedState].pure && target === this) {\n throw Error(\"A 'pure' computed must not be called recursively\");\n }\n this[computedState].dependencyTracking[id] = trackingObj;\n trackingObj._order = this[computedState].dependenciesCount++;\n trackingObj._version = target.getVersion();\n },\n haveDependenciesChanged() {\n let id, dependency, dependencyTracking = this[computedState].dependencyTracking;\n for (id in dependencyTracking) {\n if (hasOwnProperty(dependencyTracking, id)) {\n dependency = dependencyTracking[id];\n if (this._evalDelayed && dependency._target._notificationIsPending || dependency._target.hasChanged(dependency._version)) {\n return true;\n }\n }\n }\n return false;\n },\n markDirty() {\n if (this._evalDelayed && !this[computedState].isBeingEvaluated) {\n this._evalDelayed(\n false\n /* notifyChange */\n );\n }\n },\n isActive() {\n const state = this[computedState];\n return state.isDirty || state.dependenciesCount > 0;\n },\n respondToChange() {\n if (!this._notificationIsPending) {\n this.evaluatePossiblyAsync();\n } else if (this[computedState].isDirty) {\n this[computedState].isStale = true;\n }\n },\n subscribeToDependency(target) {\n if (target._deferUpdates) {\n const dirtySub = target.subscribe(this.markDirty, this, \"dirty\"), changeSub = target.subscribe(this.respondToChange, this);\n return {\n _target: target,\n dispose() {\n dirtySub.dispose();\n changeSub.dispose();\n }\n };\n } else {\n return target.subscribe(this.evaluatePossiblyAsync, this);\n }\n },\n evaluatePossiblyAsync() {\n const computedObservable = this, throttleEvaluationTimeout = computedObservable.throttleEvaluation;\n if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {\n clearTimeout(this[computedState].evaluationTimeoutInstance);\n this[computedState].evaluationTimeoutInstance = safeSetTimeout(function() {\n computedObservable.evaluateImmediate(\n true\n /* notifyChange */\n );\n }, throttleEvaluationTimeout);\n } else if (computedObservable._evalDelayed) {\n computedObservable._evalDelayed(\n true\n /* notifyChange */\n );\n } else {\n computedObservable.evaluateImmediate(\n true\n /* notifyChange */\n );\n }\n },\n evaluateImmediate(notifyChange) {\n let computedObservable = this, state = computedObservable[computedState], disposeWhen = state.disposeWhen, changed = false;\n if (state.isBeingEvaluated) {\n return;\n }\n if (state.isDisposed) {\n return;\n }\n if (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved) || disposeWhen && disposeWhen()) {\n if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {\n computedObservable.dispose();\n return;\n }\n } else {\n state.suppressDisposalUntilDisposeWhenReturnsFalse = false;\n }\n state.isBeingEvaluated = true;\n try {\n changed = this.evaluateImmediate_CallReadWithDependencyDetection(notifyChange);\n } finally {\n state.isBeingEvaluated = false;\n }\n return changed;\n },\n evaluateImmediate_CallReadWithDependencyDetection(notifyChange) {\n let computedObservable = this, state = computedObservable[computedState], changed = false;\n const isInitial = state.pure ? void 0 : !state.dependenciesCount, dependencyDetectionContext = {\n computedObservable,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n };\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: computedObservable,\n isInitial\n });\n state.dependencyTracking = {};\n state.dependenciesCount = 0;\n const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext);\n if (!state.dependenciesCount) {\n computedObservable.dispose();\n changed = true;\n } else {\n changed = computedObservable.isDifferent(state.latestValue, newValue);\n }\n if (changed) {\n if (!state.isSleeping) {\n computedObservable.notifySubscribers(state.latestValue, \"beforeChange\");\n } else {\n computedObservable.updateVersion();\n }\n state.latestValue = newValue;\n if (options.debug) {\n computedObservable._latestValue = newValue;\n }\n computedObservable.notifySubscribers(state.latestValue, \"spectate\");\n if (!state.isSleeping && notifyChange) {\n computedObservable.notifySubscribers(state.latestValue);\n }\n if (computedObservable._recordUpdate) {\n computedObservable._recordUpdate();\n }\n }\n if (isInitial) {\n computedObservable.notifySubscribers(state.latestValue, \"awake\");\n }\n return changed;\n },\n evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext) {\n try {\n const readFunction = state.readFunction;\n return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction();\n } finally {\n dependencyDetection.end();\n if (dependencyDetectionContext.disposalCount && !state.isSleeping) {\n objectForEach(dependencyDetectionContext.disposalCandidates, computedDisposeDependencyCallback);\n }\n state.isStale = state.isDirty = false;\n }\n },\n peek(forceEvaluate) {\n const state = this[computedState];\n if (state.isDirty && (forceEvaluate || !state.dependenciesCount) || state.isSleeping && this.haveDependenciesChanged()) {\n this.evaluateImmediate();\n }\n return state.latestValue;\n },\n get [LATEST_VALUE]() {\n return this.peek();\n },\n limit(limitFunction) {\n const state = this[computedState];\n subscribable.fn.limit.call(this, limitFunction);\n Object.assign(this, {\n _evalIfChanged() {\n if (!this[computedState].isSleeping) {\n if (this[computedState].isStale) {\n this.evaluateImmediate();\n } else {\n this[computedState].isDirty = false;\n }\n }\n return state.latestValue;\n },\n _evalDelayed(isChange) {\n this._limitBeforeChange(state.latestValue);\n state.isDirty = true;\n if (isChange) {\n state.isStale = true;\n }\n this._limitChange(\n this,\n !isChange\n /* isDirty */\n );\n }\n });\n },\n dispose() {\n const state = this[computedState];\n if (!state.isSleeping && state.dependencyTracking) {\n objectForEach(state.dependencyTracking, function(id, dependency) {\n if (dependency.dispose) {\n dependency.dispose();\n }\n });\n }\n if (state.disposeWhenNodeIsRemoved && state.domNodeDisposalCallback) {\n removeDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback);\n }\n Object.assign(state, DISPOSED_STATE);\n }\n};\nconst pureComputedOverrides = {\n beforeSubscriptionAdd(event) {\n const computedObservable = this, state = computedObservable[computedState];\n if (!state.isDisposed && state.isSleeping && event === \"change\") {\n state.isSleeping = false;\n if (state.isStale || computedObservable.haveDependenciesChanged()) {\n state.dependencyTracking = null;\n state.dependenciesCount = 0;\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion();\n }\n } else {\n const dependenciesOrder = new Array();\n objectForEach(state.dependencyTracking, function(id, dependency) {\n dependenciesOrder[dependency._order] = id;\n });\n arrayForEach(dependenciesOrder, function(id, order) {\n const dependency = state.dependencyTracking[id], subscription = computedObservable.subscribeToDependency(dependency._target);\n subscription._order = order;\n subscription._version = dependency._version;\n state.dependencyTracking[id] = subscription;\n });\n if (computedObservable.haveDependenciesChanged()) {\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion();\n }\n }\n }\n if (!state.isDisposed) {\n computedObservable.notifySubscribers(state.latestValue, \"awake\");\n }\n }\n },\n afterSubscriptionRemove(event) {\n const state = this[computedState];\n if (!state.isDisposed && event === \"change\" && !this.hasSubscriptionsForEvent(\"change\")) {\n objectForEach(state.dependencyTracking, function(id, dependency) {\n if (dependency.dispose) {\n state.dependencyTracking[id] = {\n _target: dependency._target,\n _order: dependency._order,\n _version: dependency._version\n };\n dependency.dispose();\n }\n });\n state.isSleeping = true;\n this.notifySubscribers(void 0, \"asleep\");\n }\n },\n getVersion() {\n const state = this[computedState];\n if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) {\n this.evaluateImmediate();\n }\n return subscribable.fn.getVersion.call(this);\n }\n};\nconst deferEvaluationOverrides = {\n beforeSubscriptionAdd(event) {\n if (event === \"change\" || event === \"beforeChange\") {\n this.peek();\n }\n }\n};\nObject.setPrototypeOf(computed.fn, subscribable.fn);\nconst protoProp = observable.protoProperty;\ncomputed.fn[protoProp] = computed;\nobservable.observablePrototypes.add(computed);\nexport function isComputed(instance) {\n return typeof instance === \"function\" && instance[protoProp] === computed;\n}\nexport function isPureComputed(instance) {\n return isComputed(instance) && instance[computedState] && instance[computedState].pure;\n}\nexport function pureComputed(evaluatorFunctionOrOptions, evaluatorFunctionTarget) {\n if (typeof evaluatorFunctionOrOptions === \"function\") {\n const evaluator = evaluatorFunctionOrOptions;\n return computed(evaluator, evaluatorFunctionTarget, { pure: true });\n } else {\n let options2 = evaluatorFunctionOrOptions;\n options2 = extend({}, options2);\n options2.pure = true;\n return computed(options2, evaluatorFunctionTarget);\n }\n}\n", "// @tko/computed \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { extenders as baseExtenders } from \"@tko/observable\";\nimport { computed } from \"./computed\";\nexport function throttleExtender(target, timeout) {\n target.throttleEvaluation = timeout;\n let writeTimeoutInstance = void 0;\n return computed({\n read: target,\n write: function(value) {\n clearTimeout(writeTimeoutInstance);\n writeTimeoutInstance = setTimeout(function() {\n target(value);\n }, timeout);\n }\n });\n}\nconst extenders = baseExtenders;\nextenders.throttle = throttleExtender;\n", "// @tko/computed \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { observable, observableArray, unwrap } from \"@tko/observable\";\nimport { computed } from \"./computed\";\nconst PROXY_SYM = /* @__PURE__ */ Symbol(\"Knockout Proxied Object\");\nconst MIRROR_SYM = /* @__PURE__ */ Symbol(\"Knockout Proxied Observables\");\nfunction makeComputed(proxy2, fn) {\n return computed({\n owner: proxy2,\n read: fn,\n write: fn,\n pure: \"pure\" in fn ? fn.pure : true,\n deferEvaluation: \"deferEvaluation\" in fn ? fn.deferEvaluation : true\n }).extend({ deferred: true });\n}\nfunction setOrCreate(mirror, prop, value, proxy2) {\n if (!mirror[prop]) {\n const ctr = Array.isArray(value) ? observableArray : typeof value === \"function\" ? makeComputed.bind(null, proxy2) : observable;\n mirror[prop] = ctr(value);\n } else {\n mirror[prop](value);\n }\n}\nfunction assignOrUpdate(mirror, object, proxy2) {\n for (const key of Object.keys(object)) {\n setOrCreate(mirror, key, object[key], proxy2);\n }\n return object;\n}\nexport function proxy(object) {\n const mirror = { [PROXY_SYM]: object };\n mirror[MIRROR_SYM] = mirror;\n const proxy2 = new Proxy(function() {\n }, {\n has(target, prop) {\n return prop in mirror;\n },\n get(target, prop) {\n return unwrap(mirror[prop]);\n },\n set(target, prop, value, receiver) {\n setOrCreate(mirror, prop, value, proxy2);\n object[prop] = value;\n return true;\n },\n deleteProperty(property) {\n delete mirror[property];\n return delete object[property];\n },\n apply(target, thisArg, [props]) {\n if (props) {\n assignOrUpdate(mirror, props, proxy2);\n return Object.assign(object, props);\n }\n return object;\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(object);\n },\n setPrototypeOf(target, proto) {\n return Object.setPrototypeOf(object, proto);\n },\n defineProperty(target, prop, desc) {\n return Object.defineProperty(object, prop, desc);\n },\n preventExtensions() {\n return Object.preventExtensions(object);\n },\n isExtensible() {\n return Object.isExtensible(object);\n },\n ownKeys() {\n return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n });\n assignOrUpdate(mirror, object, proxy2);\n return proxy2;\n}\nexport function getObservable(proxied, prop) {\n return proxied[MIRROR_SYM][prop];\n}\nexport function peek(proxied, prop) {\n return getObservable(proxied, prop).peek();\n}\nexport function isProxied(proxied) {\n return PROXY_SYM in proxied;\n}\nObject.assign(proxy, { getObservable, peek, isProxied });\n", "// @tko/computed \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { pureComputed } from \"./computed\";\nfunction kowhen(predicate, context, resolve) {\n const observable = pureComputed(predicate, context).extend({ notify: \"always\" });\n const subscription = observable.subscribe((value) => {\n if (value) {\n subscription.dispose();\n resolve(value);\n }\n });\n observable.notifySubscribers(observable.peek());\n return subscription;\n}\nexport function when(predicate, callback, context) {\n const whenFn = kowhen.bind(null, predicate, context);\n return callback ? whenFn(callback.bind(context)) : new Promise(whenFn);\n}\n", "// @tko/lifecycle \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { addDisposeCallback, createSymbolOrString } from \"@tko/utils\";\nimport { computed } from \"@tko/computed\";\nconst SUBSCRIPTIONS = createSymbolOrString(\"LifeCycle Subscriptions List\");\nconst ANCHOR_NODE = createSymbolOrString(\"LifeCycle Anchor Node\");\nexport default class LifeCycle {\n // NOTE: For more advanced integration as an ES6 mixin, see e.g.:\n // http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n /**\n * Copy the properties of the LifeCycle class to the target (or its prototype)\n *\n * NOTE: getOwnPropertyNames is needed to copy the non-enumerable properties.\n */\n static mixInto(Constructor) {\n const target = Constructor.prototype || Constructor;\n const mixin = LifeCycle.prototype;\n for (const prop of Object.getOwnPropertyNames(mixin)) {\n target[prop] = mixin[prop];\n }\n }\n subscribe(observable, action, subscriptionType) {\n if (typeof action === \"string\") {\n action = this[action];\n }\n this.addDisposable(observable.subscribe(action, this, subscriptionType));\n }\n computed(params) {\n if (typeof params === \"string\") {\n params = { read: this[params], write: this[params] };\n }\n if (typeof params === \"object\") {\n params = Object.assign({ owner: this }, params);\n } else if (typeof params === \"function\") {\n const proto = Object.getPrototypeOf(this);\n if (proto && proto[params.name] === params) {\n params = params.bind(this);\n }\n params = { read: params, write: params };\n } else {\n throw new Error(\"LifeCycle::computed not given a valid type.\");\n }\n params.disposeWhenNodeIsRemoved = this[ANCHOR_NODE];\n return this.addDisposable(computed(params));\n }\n /**\n * Add an event listener for the given or anchored node.\n * @param {node} [node] (optional) The target node (otherwise the anchored node)\n * @param {string} [type] Event type\n * @param {function|string} [action] Either call the given function or `this[action]`\n * @param {object} [options] (optional) Passed as `options` to `node.addEventListener`\n */\n addEventListener(...args) {\n const node = args[0].nodeType ? args.shift() : this[ANCHOR_NODE];\n const [type, act, options] = args;\n const handler = typeof act === \"string\" ? this[act].bind(this) : act;\n this.__addEventListener(node, type, handler, options);\n }\n __addEventListener(node, eventType, handler, options) {\n node.addEventListener(eventType, handler, options);\n function dispose() {\n node.removeEventListener(eventType, handler);\n }\n addDisposeCallback(node, dispose);\n this.addDisposable({ dispose });\n }\n anchorTo(nodeOrLifeCycle) {\n if (\"addDisposable\" in nodeOrLifeCycle) {\n nodeOrLifeCycle.addDisposable(this);\n this[ANCHOR_NODE] = null;\n } else {\n this[ANCHOR_NODE] = nodeOrLifeCycle;\n addDisposeCallback(nodeOrLifeCycle, () => this[ANCHOR_NODE] === nodeOrLifeCycle && this.dispose());\n }\n }\n dispose() {\n const subscriptions = this[SUBSCRIPTIONS] || [];\n subscriptions.forEach((s) => s.dispose());\n this[SUBSCRIPTIONS] = new Array();\n this[ANCHOR_NODE] = null;\n }\n addDisposable(subscription) {\n const subscriptions = this[SUBSCRIPTIONS] || [];\n if (!this[SUBSCRIPTIONS]) {\n this[SUBSCRIPTIONS] = subscriptions;\n }\n if (typeof subscription.dispose !== \"function\") {\n throw new Error(\"Lifecycle::addDisposable argument missing `dispose`.\");\n }\n subscriptions.push(subscription);\n return subscription;\n }\n}\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { domData } from \"@tko/utils\";\nimport { subscribable } from \"@tko/observable\";\nexport const contextAncestorBindingInfo = /* @__PURE__ */ Symbol(\"_ancestorBindingInfo\");\nconst boundElementDomDataKey = domData.nextKey();\nexport const bindingEvent = {\n //TODO better: String-Enum \"BindingEventEnum\"\n childrenComplete: \"childrenComplete\",\n descendantsComplete: \"descendantsComplete\",\n subscribe(node, event, callback, callbackContext) {\n const bindingInfo = domData.getOrSet(node, boundElementDomDataKey, {});\n if (!bindingInfo.eventSubscribable) {\n bindingInfo.eventSubscribable = new subscribable();\n }\n return bindingInfo.eventSubscribable.subscribe(callback, callbackContext, event);\n },\n notify(node, event) {\n const bindingInfo = domData.get(node, boundElementDomDataKey);\n if (bindingInfo) {\n if (bindingInfo.eventSubscribable) {\n ;\n bindingInfo.eventSubscribable.notifySubscribers(node, event);\n }\n }\n }\n};\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { extend, options, domData, isObjectLike } from \"@tko/utils\";\nimport { pureComputed } from \"@tko/computed\";\nimport { unwrap, isObservable } from \"@tko/observable\";\nimport { contextAncestorBindingInfo } from \"./bindingEvent\";\nexport const boundElementDomDataKey = domData.nextKey();\nexport const contextSubscribeSymbol = /* @__PURE__ */ Symbol(\"Knockout Context Subscription\");\nconst inheritParentIndicator = /* @__PURE__ */ Symbol(\"Knockout Parent Indicator\");\nexport const bindingContext = function bindingContextFactory(dataItemOrAccessor, parentContext, dataItemAlias, extendCallback, settings) {\n const self = this;\n const shouldInheritData = dataItemOrAccessor === inheritParentIndicator;\n const realDataItemOrAccessor = shouldInheritData ? void 0 : dataItemOrAccessor;\n const isFunc = typeof realDataItemOrAccessor === \"function\" && !isObservable(realDataItemOrAccessor);\n self.ko = options.knockoutInstance;\n let subscribable;\n function updateContext() {\n const dataItemOrObservable = isFunc ? realDataItemOrAccessor() : realDataItemOrAccessor;\n let dataItem = unwrap(dataItemOrObservable);\n if (parentContext) {\n if (parentContext[contextSubscribeSymbol]) {\n parentContext[contextSubscribeSymbol]();\n }\n extend(self, parentContext);\n if (contextAncestorBindingInfo in parentContext) {\n self[contextAncestorBindingInfo] = parentContext[contextAncestorBindingInfo];\n }\n } else {\n self.$parents = new Array();\n self.$root = dataItem;\n }\n self[contextSubscribeSymbol] = subscribable;\n if (shouldInheritData) {\n dataItem = self.$data;\n } else {\n self.$rawData = dataItemOrObservable;\n self.$data = dataItem;\n }\n if (dataItemAlias) {\n self[dataItemAlias] = dataItem;\n }\n if (extendCallback) {\n extendCallback(self, parentContext, dataItem);\n }\n return self.$data;\n }\n if (settings && settings.exportDependencies) {\n updateContext();\n } else {\n subscribable = pureComputed(updateContext);\n subscribable.peek();\n if (subscribable.isActive()) {\n self[contextSubscribeSymbol] = subscribable;\n subscribable[\"equalityComparer\"] = null;\n } else {\n self[contextSubscribeSymbol] = void 0;\n }\n }\n};\nObject.assign(bindingContext.prototype, {\n lookup(token, globals, node) {\n switch (token) {\n case \"$element\":\n return node;\n case \"$context\":\n return this;\n case \"this\":\n case \"$data\":\n return this.$data;\n }\n const $data = this.$data;\n if (isObjectLike($data) && token in $data) {\n return $data[token];\n }\n if (token in this) {\n return this[token];\n }\n if (token in globals) {\n return globals[token];\n }\n throw new Error(`The variable \"${token}\" was not found on $data, $context, or globals.`);\n },\n // Extend the binding context hierarchy with a new view model object. If the parent context is watching\n // any observables, the new child context will automatically get a dependency on the parent context.\n // But this does not mean that the $data value of the child context will also get updated. If the child\n // view model also depends on the parent view model, you must provide a function that returns the correct\n // view model on each update.\n createChildContext(dataItemOrAccessor, dataItemAlias, extendCallback, settings) {\n return new bindingContext(\n dataItemOrAccessor,\n this,\n dataItemAlias,\n function(self, parentContext) {\n self.$parentContext = parentContext;\n self.$parent = parentContext?.$data;\n self.$parents = (parentContext?.$parents ?? []).slice(0);\n self.$parents.unshift(self.$parent);\n if (extendCallback) {\n extendCallback(self);\n }\n },\n settings\n );\n },\n // Extend the binding context with new custom properties. This doesn't change the context hierarchy.\n // Similarly to \"child\" contexts, provide a function here to make sure that the correct values are set\n // when an observable view model is updated.\n extend(properties) {\n return new bindingContext(inheritParentIndicator, this, void 0, function(self, parentContext) {\n extend(self, typeof properties === \"function\" ? properties.call(self) : properties);\n });\n },\n createStaticChildContext(dataItemOrAccessor, dataItemAlias) {\n return this.createChildContext(dataItemOrAccessor, dataItemAlias, null, { exportDependencies: true });\n }\n});\nexport function storedBindingContextForNode(node) {\n const bindingInfo = domData.get(node, boundElementDomDataKey);\n return bindingInfo && bindingInfo.context;\n}\nexport function contextFor(node) {\n if (node && (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE)) {\n return storedBindingContextForNode(node);\n }\n}\nexport function dataFor(node) {\n const context = contextFor(node);\n return context ? context.$data : void 0;\n}\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nexport class BindingResult {\n constructor({ asyncBindingsApplied, rootNode, bindingContext }) {\n this.rootNode = rootNode;\n this.bindingContext = bindingContext;\n this.isSync = asyncBindingsApplied.size === 0;\n this.isComplete = this.isSync;\n if (!this.isSync) {\n this.completionPromise = this.completeWhenBindingsFinish(asyncBindingsApplied);\n }\n }\n async completeWhenBindingsFinish(asyncBindingsApplied) {\n await Promise.all(asyncBindingsApplied);\n this.isComplete = true;\n return this;\n }\n}\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { options } from \"@tko/utils\";\nimport { isWriteableObservable } from \"@tko/observable\";\nimport { LifeCycle } from \"@tko/lifecycle\";\nexport class BindingHandler extends LifeCycle {\n constructor(params) {\n super();\n const { $element, valueAccessor, allBindings, $context } = params;\n this.$element = $element;\n this.valueAccessor = valueAccessor;\n this.allBindings = allBindings;\n this.$context = $context;\n this.$data = $context.$data;\n this.anchorTo($element);\n }\n get value() {\n return this.valueAccessor();\n }\n set value(v) {\n const va = this.valueAccessor();\n if (isWriteableObservable(va)) {\n va(v);\n } else {\n this.valueAccessor(v);\n }\n }\n get controlsDescendants() {\n return false;\n }\n static get allowVirtualElements() {\n return false;\n }\n static get isBindingHandlerClass() {\n return true;\n }\n /* Overload this for asynchronous bindings or bindings that recursively\n apply bindings (e.g. components, foreach, template).\n \n A binding should be complete when it has run through once, notably\n in server-side bindings for pre-rendering.\n */\n get bindingCompleted() {\n return true;\n }\n static registerAs(name, provider = options.bindingProviderInstance) {\n provider.bindingHandlers.set(name, this);\n }\n static registerBindingHandler(handler, name, provider = options.bindingProviderInstance) {\n provider.bindingHandlers.set(name, handler);\n }\n}\nconst ResolveSymbol = /* @__PURE__ */ Symbol(\"Async Binding Resolved\");\nexport class AsyncBindingHandler extends BindingHandler {\n constructor(params) {\n super(params);\n this.bindingCompletion = new Promise((resolve) => {\n this[ResolveSymbol] = resolve;\n });\n this.completeBinding = (bindingResult) => this[ResolveSymbol](bindingResult);\n }\n get bindingCompleted() {\n return this.bindingCompletion;\n }\n}\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { virtualElements, options } from \"@tko/utils\";\nimport { BindingHandler } from \"./BindingHandler\";\nconst PossibleWeakMap = options.global.WeakMap || Map;\nconst legacyBindingMap = new PossibleWeakMap();\nexport class LegacyBindingHandler extends BindingHandler {\n get handler() {\n return void 0;\n }\n constructor(params) {\n super(params);\n const handler = this.handler;\n this.onError = params.onError;\n if (typeof handler.dispose === \"function\") {\n this.addDisposable(handler);\n }\n try {\n this.initReturn = handler.init && handler.init(...this.legacyArgs);\n } catch (e) {\n params.onError(\"init\", e);\n }\n }\n onValueChange() {\n const handler = this.handler;\n if (typeof handler.update !== \"function\") {\n return;\n }\n try {\n handler.update(...this.legacyArgs);\n } catch (e) {\n this.onError(\"update\", e);\n }\n }\n get legacyArgs() {\n return [this.$element, this.valueAccessor, this.allBindings, this.$data, this.$context];\n }\n get controlsDescendants() {\n const objectToTest = this.initReturn || this.handler || {};\n return objectToTest.controlsDescendantBindings;\n }\n /**\n * Create a handler instance from the `origin`, which may be:\n *\n * 1. an object (becomes LegacyBindingHandler)\n * 2. a function (becomes LegacyBindingHandler with `init: function`)\n *\n * If given an object (the only kind supported in knockout 3.x and before), it\n * shall draw the `init`, `update`, and `allowVirtualElements` properties\n */\n static getOrCreateFor(key, handler) {\n if (legacyBindingMap.has(handler)) {\n return legacyBindingMap.get(handler);\n }\n const newLegacyHandler = this.createFor(key, handler);\n legacyBindingMap.set(handler, newLegacyHandler);\n return newLegacyHandler;\n }\n static createFor(key, handler) {\n if (typeof handler === \"function\") {\n const [initFn, disposeFn] = [handler, handler.dispose];\n return class extends LegacyBindingHandler {\n get handler() {\n const init = initFn.bind(this);\n const dispose = disposeFn ? disposeFn.bind(this) : null;\n return { init, dispose };\n }\n static get after() {\n return handler.after;\n }\n static get allowVirtualElements() {\n return handler.allowVirtualElements || virtualElements.allowedBindings[key];\n }\n };\n }\n if (typeof handler === \"object\") {\n return class extends LegacyBindingHandler {\n get handler() {\n return handler;\n }\n static get after() {\n return handler.after;\n }\n static get allowVirtualElements() {\n return handler.allowVirtualElements || virtualElements.allowedBindings[key];\n }\n };\n }\n throw new Error(\"The given handler is not an appropriate type.\");\n }\n}\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n extend,\n objectMap,\n virtualElements,\n tagNameLower,\n domData,\n objectForEach,\n arrayIndexOf,\n arrayForEach,\n options\n} from \"@tko/utils\";\nimport { dependencyDetection } from \"@tko/observable\";\nimport { computed } from \"@tko/computed\";\nimport { dataFor, bindingContext, boundElementDomDataKey, contextSubscribeSymbol } from \"./bindingContext\";\nimport { bindingEvent } from \"./bindingEvent\";\nimport { BindingResult } from \"./BindingResult\";\nimport { LegacyBindingHandler } from \"./LegacyBindingHandler\";\nconst bindingDoesNotRecurseIntoElementTypes = {\n // Don't want bindings that operate on text nodes to mutate <script> and <textarea> contents,\n // because it's unexpected and a potential XSS issue.\n // Also bindings should not operate on <template> elements since this breaks in Internet Explorer\n // and because such elements' contents are always intended to be bound in a different context\n // from where they appear in the document.\n script: true,\n textarea: true,\n template: true\n};\nfunction getBindingProvider() {\n return options.bindingProviderInstance.instance || options.bindingProviderInstance;\n}\nfunction isProviderForNode(provider, node) {\n const nodeTypes = provider.FOR_NODE_TYPES || [Node.ELEMENT_NODE, Node.TEXT_NODE, Node.COMMENT_NODE];\n return nodeTypes.includes(node.nodeType);\n}\nfunction asProperHandlerClass(handler, bindingKey) {\n if (!handler) {\n return;\n }\n return handler.isBindingHandlerClass ? handler : LegacyBindingHandler.getOrCreateFor(bindingKey, handler);\n}\nfunction getBindingHandlerFromComponent(bindingKey, $component) {\n if (!$component || typeof $component.getBindingHandler !== \"function\") {\n return;\n }\n return asProperHandlerClass($component.getBindingHandler(bindingKey));\n}\nexport function getBindingHandler(bindingKey) {\n const bindingDefinition = options.getBindingHandler(bindingKey) || getBindingProvider().bindingHandlers.get(bindingKey);\n return asProperHandlerClass(bindingDefinition, bindingKey);\n}\nfunction evaluateValueAccessor(valueAccessor) {\n return valueAccessor();\n}\nfunction applyBindingsToDescendantsInternal(bindingContext2, elementOrVirtualElement, asyncBindingsApplied) {\n let nextInQueue = virtualElements.firstChild(elementOrVirtualElement);\n if (!nextInQueue) {\n return;\n }\n let currentChild;\n const provider = getBindingProvider();\n const preprocessNode = provider.preprocessNode;\n if (preprocessNode) {\n while (currentChild = nextInQueue) {\n nextInQueue = virtualElements.nextSibling(currentChild);\n preprocessNode.call(provider, currentChild);\n }\n nextInQueue = virtualElements.firstChild(elementOrVirtualElement);\n }\n while (currentChild = nextInQueue) {\n nextInQueue = virtualElements.nextSibling(currentChild);\n applyBindingsToNodeAndDescendantsInternal(bindingContext2, currentChild, asyncBindingsApplied);\n }\n bindingEvent.notify(elementOrVirtualElement, bindingEvent.childrenComplete);\n}\nfunction hasBindings(node) {\n const provider = getBindingProvider();\n return isProviderForNode(provider, node) && provider.nodeHasBindings(node);\n}\nfunction nodeOrChildHasBindings(node) {\n return hasBindings(node) || [...node.childNodes].some((c) => nodeOrChildHasBindings(c));\n}\nfunction applyBindingsToNodeAndDescendantsInternal(bindingContext2, nodeVerified, asyncBindingsApplied) {\n const isElement = nodeVerified.nodeType === Node.ELEMENT_NODE;\n if (isElement) {\n virtualElements.normaliseVirtualElementDomStructure(nodeVerified);\n }\n const shouldApplyBindings = isElement || hasBindings(nodeVerified);\n const { shouldBindDescendants } = shouldApplyBindings ? applyBindingsToNodeInternal(nodeVerified, null, bindingContext2, asyncBindingsApplied) : { shouldBindDescendants: true };\n if (shouldBindDescendants && !bindingDoesNotRecurseIntoElementTypes[tagNameLower(nodeVerified)]) {\n applyBindingsToDescendantsInternal(bindingContext2, nodeVerified, asyncBindingsApplied);\n }\n}\nfunction* topologicalSortBindings(bindings, $component) {\n const results = [];\n const bindingsConsidered = {};\n const cyclicDependencyStack = new Array();\n objectForEach(bindings, function pushBinding(bindingKey) {\n if (!bindingsConsidered[bindingKey]) {\n const binding = getBindingHandlerFromComponent(bindingKey, $component) || getBindingHandler(bindingKey);\n if (!binding) {\n return;\n }\n if (binding.after) {\n cyclicDependencyStack.push(bindingKey);\n arrayForEach(binding.after, function(bindingDependencyKey) {\n if (!bindings[bindingDependencyKey]) {\n return;\n }\n if (arrayIndexOf(cyclicDependencyStack, bindingDependencyKey) !== -1) {\n throw Error(\n \"Cannot combine the following bindings, because they have a cyclic dependency: \" + cyclicDependencyStack.join(\", \")\n );\n } else {\n pushBinding(bindingDependencyKey);\n }\n });\n cyclicDependencyStack.length--;\n }\n results.push([bindingKey, binding]);\n }\n bindingsConsidered[bindingKey] = true;\n });\n for (const result of results) {\n yield result;\n }\n}\nfunction applyBindingsToNodeInternal(node, sourceBindings, bindingContext2, asyncBindingsApplied) {\n const bindingInfo = domData.getOrSet(node, boundElementDomDataKey, {});\n const alreadyBound = bindingInfo.alreadyBound;\n if (!sourceBindings) {\n if (alreadyBound) {\n if (!nodeOrChildHasBindings(node)) {\n return false;\n }\n onBindingError({\n during: \"apply\",\n errorCaptured: new Error(\"You cannot apply bindings multiple times to the same element.\"),\n element: node,\n bindingContext: bindingContext2\n });\n return false;\n }\n bindingInfo.alreadyBound = true;\n }\n if (!alreadyBound) {\n bindingInfo.context = bindingContext2;\n }\n let bindings = null;\n let bindingsUpdater = null;\n if (sourceBindings && typeof sourceBindings !== \"function\") {\n bindings = sourceBindings;\n } else {\n const provider = getBindingProvider();\n const getBindings = provider.getBindingAccessors;\n if (isProviderForNode(provider, node)) {\n bindingsUpdater = computed(\n function() {\n bindings = sourceBindings ? sourceBindings(bindingContext2, node) : getBindings.call(provider, node, bindingContext2);\n if (bindings && bindingContext2[contextSubscribeSymbol]) {\n bindingContext2[contextSubscribeSymbol]();\n }\n return bindings;\n },\n null,\n { disposeWhenNodeIsRemoved: node }\n );\n if (!bindings || !bindingsUpdater.isActive()) {\n bindingsUpdater = null;\n }\n }\n }\n let bindingHandlerThatControlsDescendantBindings;\n if (bindings) {\n const $component = bindingContext2.$component || {};\n const allBindingHandlers = {};\n domData.set(node, \"bindingHandlers\", allBindingHandlers);\n const getValueAccessor = bindingsUpdater ? (bindingKey) => function(optionalValue) {\n const valueAccessor = bindingsUpdater()[bindingKey];\n if (arguments.length === 0) {\n return evaluateValueAccessor(valueAccessor);\n } else {\n return valueAccessor(optionalValue);\n }\n } : (bindingKey) => bindings[bindingKey];\n const allBindings = function() {\n return objectMap(bindingsUpdater ? bindingsUpdater() : bindings, evaluateValueAccessor);\n };\n allBindings.has = (key) => key in bindings;\n allBindings.get = (key) => bindings[key] && evaluateValueAccessor(getValueAccessor(key));\n if (bindingEvent.childrenComplete in bindings) {\n bindingEvent.subscribe(\n node,\n bindingEvent.childrenComplete,\n () => {\n const callback = evaluateValueAccessor(bindings[bindingEvent.childrenComplete]);\n if (!callback) {\n return;\n }\n const nodes = virtualElements.childNodes(node);\n if (nodes.length) {\n callback(nodes, dataFor(nodes[0]));\n }\n },\n null\n );\n }\n const bindingsGenerated = topologicalSortBindings(bindings, $component);\n const nodeAsyncBindingPromises = /* @__PURE__ */ new Set();\n for (const [key, BindingHandlerClass] of bindingsGenerated) {\n const reportBindingError = function(during, errorCaptured) {\n onBindingError({\n during,\n errorCaptured,\n bindings,\n allBindings,\n bindingKey: key,\n bindingContext: bindingContext2,\n element: node,\n valueAccessor: getValueAccessor(key)\n });\n };\n if (node.nodeType === Node.COMMENT_NODE && !BindingHandlerClass.allowVirtualElements) {\n throw new Error(`The binding '${key}' cannot be used with virtual elements`);\n }\n try {\n const bindingHandler = dependencyDetection.ignore(\n () => new BindingHandlerClass({\n allBindings,\n $element: node,\n $context: bindingContext2,\n onError: reportBindingError,\n valueAccessor(...v) {\n return getValueAccessor(key)(...v);\n }\n })\n );\n if (bindingHandler.onValueChange) {\n dependencyDetection.ignore(() => bindingHandler.computed(\"onValueChange\"));\n }\n allBindingHandlers[key] = bindingHandler;\n if (bindingHandler.controlsDescendants) {\n if (bindingHandlerThatControlsDescendantBindings !== void 0) {\n throw new Error(\n \"Multiple bindings (\" + bindingHandlerThatControlsDescendantBindings + \" and \" + key + \") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.\"\n );\n }\n bindingHandlerThatControlsDescendantBindings = key;\n }\n if (bindingHandler.bindingCompleted instanceof Promise) {\n asyncBindingsApplied.add(bindingHandler.bindingCompleted);\n nodeAsyncBindingPromises.add(bindingHandler.bindingCompleted);\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n reportBindingError(\"creation\", error);\n }\n }\n triggerDescendantsComplete(node, bindings, nodeAsyncBindingPromises);\n }\n const shouldBindDescendants = bindingHandlerThatControlsDescendantBindings === void 0;\n return { shouldBindDescendants };\n}\nfunction triggerDescendantsComplete(node, bindings, nodeAsyncBindingPromises) {\n const hasBindingHandler = bindingEvent.descendantsComplete in bindings;\n const hasFirstChild = virtualElements.firstChild(node);\n const accessor = hasBindingHandler && evaluateValueAccessor(bindings[bindingEvent.descendantsComplete]);\n const callback = () => {\n bindingEvent.notify(node, bindingEvent.descendantsComplete);\n if (accessor && hasFirstChild) {\n accessor(node);\n }\n };\n if (nodeAsyncBindingPromises.size) {\n Promise.all(nodeAsyncBindingPromises).then(callback);\n } else {\n callback();\n }\n}\nfunction getBindingContext(viewModelOrBindingContext, extendContextCallback) {\n return viewModelOrBindingContext && viewModelOrBindingContext instanceof bindingContext ? viewModelOrBindingContext : new bindingContext(viewModelOrBindingContext, void 0, void 0, extendContextCallback);\n}\nexport function applyBindingAccessorsToNode(node, bindings, viewModelOrBindingContext, asyncBindingsApplied) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n virtualElements.normaliseVirtualElementDomStructure(node);\n }\n return applyBindingsToNodeInternal(\n node,\n bindings,\n getBindingContext(viewModelOrBindingContext),\n asyncBindingsApplied\n );\n}\nexport function applyBindingsToNode(node, bindings, viewModelOrBindingContext) {\n const asyncBindingsApplied = /* @__PURE__ */ new Set();\n const bindingContext2 = getBindingContext(viewModelOrBindingContext);\n const bindingAccessors = getBindingProvider().makeBindingAccessors(bindings, bindingContext2, node);\n applyBindingAccessorsToNode(node, bindingAccessors, bindingContext2, asyncBindingsApplied);\n return new BindingResult({ asyncBindingsApplied, rootNode: node, bindingContext: bindingContext2 });\n}\nexport function applyBindingsToDescendants(viewModelOrBindingContext, rootNode) {\n const asyncBindingsApplied = /* @__PURE__ */ new Set();\n const bindingContext2 = getBindingContext(viewModelOrBindingContext);\n if (rootNode.nodeType === Node.ELEMENT_NODE || rootNode.nodeType === Node.COMMENT_NODE) {\n applyBindingsToDescendantsInternal(bindingContext2, rootNode, asyncBindingsApplied);\n return new BindingResult({ asyncBindingsApplied, rootNode, bindingContext: bindingContext2 });\n }\n return new BindingResult({ asyncBindingsApplied, rootNode, bindingContext: bindingContext2 });\n}\nexport function applyBindings(viewModelOrBindingContext, rootNode, extendContextCallback) {\n const asyncBindingsApplied = /* @__PURE__ */ new Set();\n if (!rootNode) {\n rootNode = window.document.body;\n if (!rootNode) {\n throw Error(\"ko.applyBindings: could not find window.document.body; has the document been loaded?\");\n }\n } else if (rootNode.nodeType !== Node.ELEMENT_NODE && rootNode.nodeType !== Node.COMMENT_NODE) {\n throw Error(\"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node\");\n }\n const rootContext = getBindingContext(viewModelOrBindingContext, extendContextCallback);\n applyBindingsToNodeAndDescendantsInternal(rootContext, rootNode, asyncBindingsApplied);\n return Promise.all(asyncBindingsApplied);\n}\nfunction onBindingError(spec) {\n let error;\n if (spec.bindingKey) {\n error = spec.errorCaptured;\n spec.message = 'Unable to process binding \"' + spec.bindingKey + '\" in binding \"' + spec.bindingKey + '\"\\nMessage: ' + (error.message ? error.message : error);\n } else {\n error = spec.errorCaptured;\n }\n try {\n extend(error, spec);\n } catch (e) {\n spec.stack = error.stack;\n const message = error.message || String(error);\n const originalName = error.name;\n error = new Error(message);\n if (originalName && originalName !== \"Error\") {\n error.name = originalName;\n }\n extend(error, spec);\n }\n options.onError(error);\n}\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n fixUpContinuousNodeArray,\n replaceDomNodes,\n arrayPushAll,\n anyDomNodeIsAttachedToDocument,\n domData,\n arrayMap,\n arrayForEach,\n virtualElements,\n extend,\n cleanNode,\n removeNode,\n compareArrays\n} from \"@tko/utils\";\nimport { dependencyDetection, observable } from \"@tko/observable\";\nimport { computed } from \"@tko/computed\";\nfunction mapNodeAndRefreshWhenChanged(containerNode, mapping, valueToMap, callbackAfterAddingNodes, index) {\n const mappedNodes = [];\n const dependentObservable = computed(\n function() {\n const newMappedNodes = mapping(valueToMap, index, fixUpContinuousNodeArray(mappedNodes, containerNode)) || [];\n if (mappedNodes.length > 0) {\n replaceDomNodes(mappedNodes, newMappedNodes);\n if (callbackAfterAddingNodes) {\n dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index]);\n }\n }\n mappedNodes.length = 0;\n arrayPushAll(mappedNodes, newMappedNodes);\n },\n null,\n {\n disposeWhenNodeIsRemoved: containerNode,\n disposeWhen: function() {\n return !anyDomNodeIsAttachedToDocument(mappedNodes);\n }\n }\n );\n return {\n mappedNodes,\n dependentObservable: dependentObservable.isActive() ? dependentObservable : void 0\n };\n}\nconst lastMappingResultDomDataKey = domData.nextKey();\nconst deletedItemDummyValue = domData.nextKey();\nexport function setDomNodeChildrenFromArrayMapping(domNode, array, mapping, options, callbackAfterAddingNodes, editScript) {\n array = array || [];\n if (typeof array.length === \"undefined\") {\n array = [array];\n }\n options = options || {};\n const lastMappingResult = domData.get(domNode, lastMappingResultDomDataKey);\n const isFirstExecution = !lastMappingResult;\n const newMappingResult = new Array();\n let lastMappingResultIndex = 0;\n let newMappingResultIndex = 0;\n const nodesToDelete = [];\n const itemsToProcess = [];\n const itemsForBeforeRemoveCallbacks = [];\n const itemsForMoveCallbacks = [];\n const itemsForAfterAddCallbacks = [];\n let mapData;\n let countWaitingForRemove = 0;\n function itemAdded(value) {\n mapData = { arrayEntry: value, indexObservable: observable(newMappingResultIndex++) };\n newMappingResult.push(mapData);\n itemsToProcess.push(mapData);\n if (!isFirstExecution) {\n itemsForAfterAddCallbacks.push(mapData);\n }\n }\n function itemMovedOrRetained(oldPosition) {\n mapData = lastMappingResult[oldPosition];\n if (newMappingResultIndex !== oldPosition) {\n itemsForMoveCallbacks.push(mapData);\n }\n mapData.indexObservable(newMappingResultIndex++);\n fixUpContinuousNodeArray(mapData.mappedNodes, domNode);\n newMappingResult.push(mapData);\n itemsToProcess.push(mapData);\n }\n function callCallback(callback, items) {\n if (callback) {\n for (let i = 0, n = items.length; i < n; i++) {\n arrayForEach(items[i].mappedNodes, function(node) {\n callback(node, i, items[i].arrayEntry);\n });\n }\n }\n }\n if (isFirstExecution) {\n arrayForEach(array, itemAdded);\n } else {\n if (!editScript || lastMappingResult && lastMappingResult[\"_countWaitingForRemove\"]) {\n const lastArray = arrayMap(lastMappingResult, function(x) {\n return x.arrayEntry;\n });\n const compareOptions = { dontLimitMoves: options.dontLimitMoves, sparse: true };\n editScript = compareArrays(lastArray, array, compareOptions);\n }\n for (let i = 0, editScriptItem, movedIndex, itemIndex; editScriptItem = editScript[i]; i++) {\n movedIndex = editScriptItem[\"moved\"];\n itemIndex = editScriptItem[\"index\"];\n switch (editScriptItem[\"status\"]) {\n case \"deleted\":\n while (lastMappingResultIndex < itemIndex) {\n itemMovedOrRetained(lastMappingResultIndex++);\n }\n if (movedIndex === void 0) {\n mapData = lastMappingResult[lastMappingResultIndex];\n if (mapData.dependentObservable) {\n mapData.dependentObservable.dispose();\n mapData.dependentObservable = void 0;\n }\n if (fixUpContinuousNodeArray(mapData.mappedNodes, domNode).length) {\n if (options.beforeRemove) {\n newMappingResult.push(mapData);\n itemsToProcess.push(mapData);\n countWaitingForRemove++;\n if (mapData.arrayEntry === deletedItemDummyValue) {\n mapData = null;\n } else {\n itemsForBeforeRemoveCallbacks.push(mapData);\n }\n }\n if (mapData?.mappedNodes) {\n nodesToDelete.push.apply(nodesToDelete, mapData.mappedNodes);\n }\n }\n }\n lastMappingResultIndex++;\n break;\n case \"added\":\n while (newMappingResultIndex < itemIndex) {\n itemMovedOrRetained(lastMappingResultIndex++);\n }\n if (movedIndex !== void 0) {\n itemMovedOrRetained(movedIndex);\n } else {\n itemAdded(editScriptItem[\"value\"]);\n }\n break;\n }\n }\n while (newMappingResultIndex < array.length) {\n itemMovedOrRetained(lastMappingResultIndex++);\n }\n newMappingResult[\"_countWaitingForRemove\"] = countWaitingForRemove;\n }\n domData.set(domNode, lastMappingResultDomDataKey, newMappingResult);\n callCallback(options.beforeMove, itemsForMoveCallbacks);\n arrayForEach(nodesToDelete, options.beforeRemove ? cleanNode : removeNode);\n for (let k = 0, nextNode = virtualElements.firstChild(domNode), lastNode, node; mapData = itemsToProcess[k]; k++) {\n if (!mapData.mappedNodes) {\n extend(\n mapData,\n mapNodeAndRefreshWhenChanged(\n domNode,\n mapping,\n mapData.arrayEntry,\n callbackAfterAddingNodes,\n mapData.indexObservable\n )\n );\n }\n for (let j = 0; node = mapData.mappedNodes[j]; nextNode = node.nextSibling, lastNode = node, j++) {\n if (node !== nextNode) {\n virtualElements.insertAfter(domNode, node, lastNode);\n }\n }\n if (!mapData.initialized && callbackAfterAddingNodes) {\n callbackAfterAddingNodes(mapData.arrayEntry, mapData.mappedNodes, mapData.indexObservable);\n mapData.initialized = true;\n }\n }\n callCallback(options.beforeRemove, itemsForBeforeRemoveCallbacks);\n for (let x = 0; x < itemsForBeforeRemoveCallbacks.length; ++x) {\n itemsForBeforeRemoveCallbacks[x].arrayEntry = deletedItemDummyValue;\n }\n callCallback(options.afterMove, itemsForMoveCallbacks);\n callCallback(options.afterAdd, itemsForAfterAddCallbacks);\n}\n", "// @tko/bind \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { applyBindingsToDescendants } from \"./applyBindings\";\nimport { AsyncBindingHandler } from \"./BindingHandler\";\nexport class DescendantBindingHandler extends AsyncBindingHandler {\n get controlsDescendants() {\n return true;\n }\n async applyBindingsToDescendants(childContext, callback) {\n const bindingResult = applyBindingsToDescendants(childContext, this.$element);\n if (bindingResult.isSync) {\n this.bindingCompletion = bindingResult;\n } else {\n await bindingResult.completionPromise;\n }\n if (callback) {\n callback(bindingResult);\n }\n this.completeBinding(bindingResult);\n }\n}\n", "// @tko/binding.template \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { tagNameLower as tagNameLowerFn, setHtml, domData, parseHtmlForTemplateNodes } from \"@tko/utils\";\nconst templateScript = 1, templateTextArea = 2, templateTemplate = 3, templateElement = 4, templateAnonymous = 5;\nconst dataDomDataPrefix = domData.nextKey() + \"_\";\nconst templatesDomDataKey = domData.nextKey();\nfunction getTemplateDomData(element) {\n return domData.get(element, templatesDomDataKey) || {};\n}\nfunction setTemplateDomData(element, data) {\n domData.set(element, templatesDomDataKey, data);\n}\nexport class domElement {\n constructor(element) {\n this.domElement = element;\n if (element.nodeType === Node.COMMENT_NODE) {\n this.templateType = templateElement;\n } else {\n const tagNameLower = tagNameLowerFn(this.domElement);\n this.templateType = tagNameLower === \"script\" ? templateScript : tagNameLower === \"textarea\" ? templateTextArea : (\n // For browsers with proper <template> element support, where the .content property gives a document fragment\n tagNameLower == \"template\" && element.content && element.content.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? templateTemplate : templateElement\n );\n }\n }\n text(valueToWrite) {\n const elemContentsProperty = this.templateType === templateScript ? \"text\" : this.templateType === templateTextArea ? \"value\" : \"innerHTML\";\n if (arguments.length == 0) {\n return this.domElement[elemContentsProperty];\n } else {\n if (elemContentsProperty === \"innerHTML\") {\n setHtml(this.domElement, valueToWrite);\n } else {\n this.domElement[elemContentsProperty] = valueToWrite;\n }\n }\n }\n data(key, valueToWrite) {\n if (arguments.length === 1) {\n return domData.get(this.domElement, dataDomDataPrefix + key);\n } else {\n domData.set(this.domElement, dataDomDataPrefix + key, valueToWrite);\n }\n }\n nodes(valueToWrite) {\n const element = this.domElement;\n if (arguments.length == 0) {\n const templateData = getTemplateDomData(element);\n let nodes = templateData.containerData || (this.templateType === templateTemplate ? element.content : this.templateType === templateElement ? element : void 0);\n if (!nodes || templateData.alwaysCheckText) {\n const text = this.text();\n if (text) {\n nodes = parseHtmlForTemplateNodes(text, element.ownerDocument);\n this.text(\"\");\n setTemplateDomData(element, { containerData: nodes, alwaysCheckText: true });\n }\n }\n return nodes;\n } else {\n setTemplateDomData(element, { containerData: valueToWrite });\n }\n return void 0;\n }\n}\nexport class anonymousTemplate extends domElement {\n constructor(element) {\n super(element);\n this.templateType = templateAnonymous;\n }\n text(valueToWrite) {\n if (arguments.length == 0) {\n const templateData = getTemplateDomData(this.domElement);\n if (templateData.textData === void 0 && templateData.containerData) {\n templateData.textData = templateData.containerData.innerHTML;\n }\n return templateData.textData;\n } else {\n setTemplateDomData(this.domElement, { textData: valueToWrite });\n }\n }\n}\n", "// @tko/binding.template \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { extend, options } from \"@tko/utils\";\nimport { domElement, anonymousTemplate } from \"./templateSources\";\nexport function templateEngine() {\n}\nextend(templateEngine.prototype, {\n renderTemplateSource(templateSource, bindingContext, options2, templateDocument) {\n options2.onError(\"Override renderTemplateSource\");\n },\n createJavaScriptEvaluatorBlock(script) {\n options.onError(new Error(\"Override createJavaScriptEvaluatorBlock\"));\n },\n makeTemplateSource(template, templateDocument) {\n if (typeof template === \"string\") {\n templateDocument = templateDocument || document;\n const elem = templateDocument.getElementById(template);\n if (!elem) {\n throw options.onError(new Error(\"Cannot find template with ID \" + template), false);\n }\n return new domElement(elem);\n } else if (template.nodeType === Node.ELEMENT_NODE) {\n return new anonymousTemplate(template);\n } else if (template.nodeType === Node.COMMENT_NODE) {\n return new anonymousTemplate(template);\n } else {\n throw options.onError(new Error(\"Unknown template type: \" + template), false);\n }\n },\n renderTemplate(template, bindingContext, options2, templateDocument) {\n const templateSource = this.makeTemplateSource(template, templateDocument);\n return this.renderTemplateSource(templateSource, bindingContext, options2, templateDocument);\n }\n});\n", "// @tko/binding.template \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n virtualElements,\n fixUpContinuousNodeArray,\n replaceDomNodes,\n memoization,\n domNodeIsAttachedToDocument,\n moveCleanedNodesToContainerElement,\n arrayFilter,\n domData,\n options as koOptions\n} from \"@tko/utils\";\nimport {\n applyBindings,\n setDomNodeChildrenFromArrayMapping,\n AsyncBindingHandler,\n bindingEvent,\n bindingContext as BindingContextConstructor\n} from \"@tko/bind\";\nimport { computed } from \"@tko/computed\";\nimport { isObservable, dependencyDetection, unwrap, observable, isObservableArray } from \"@tko/observable\";\nimport { templateEngine } from \"./templateEngine\";\nimport { anonymousTemplate as AnonymousTemplate } from \"./templateSources\";\nlet _templateEngine;\nconst cleanContainerDomDataKey = domData.nextKey();\nexport function setTemplateEngine(tEngine) {\n if (tEngine !== void 0 && !(tEngine instanceof templateEngine)) {\n throw new Error(\"templateEngine must inherit from ko.templateEngine\");\n }\n _templateEngine = tEngine;\n}\nfunction invokeForEachNodeInContinuousRange(firstNode, lastNode, action) {\n let node;\n let nextInQueue = firstNode;\n const firstOutOfRangeNode = virtualElements.nextSibling(lastNode);\n while (nextInQueue && (node = nextInQueue) !== firstOutOfRangeNode) {\n nextInQueue = virtualElements.nextSibling(node);\n action(node, nextInQueue);\n }\n}\nfunction activateBindingsOnContinuousNodeArray(continuousNodeArray, bindingContext, afterBindingCallback) {\n if (continuousNodeArray.length) {\n let firstNode = continuousNodeArray[0];\n let lastNode = continuousNodeArray[continuousNodeArray.length - 1];\n const parentNode = firstNode.parentNode;\n const provider = koOptions.bindingProviderInstance;\n const preprocessNode = provider.preprocessNode;\n if (preprocessNode) {\n invokeForEachNodeInContinuousRange(firstNode, lastNode, function(node, nextNodeInRange) {\n const nodePreviousSibling = node.previousSibling;\n const newNodes = preprocessNode.call(provider, node);\n if (newNodes) {\n if (node === firstNode) {\n firstNode = newNodes[0] || nextNodeInRange;\n }\n if (node === lastNode) {\n lastNode = newNodes[newNodes.length - 1] || nodePreviousSibling;\n }\n }\n });\n continuousNodeArray.length = 0;\n if (!firstNode) {\n return;\n }\n if (firstNode === lastNode) {\n continuousNodeArray.push(firstNode);\n } else {\n continuousNodeArray.push(firstNode, lastNode);\n fixUpContinuousNodeArray(continuousNodeArray, parentNode);\n }\n }\n invokeForEachNodeInContinuousRange(firstNode, lastNode, function(node) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE) {\n applyBindings(bindingContext, node).then(afterBindingCallback);\n }\n });\n invokeForEachNodeInContinuousRange(firstNode, lastNode, function(node) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE) {\n memoization.unmemoizeDomNodeAndDescendants(node, [bindingContext]);\n }\n });\n fixUpContinuousNodeArray(continuousNodeArray, parentNode);\n }\n}\nfunction getFirstNodeFromPossibleArray(nodeOrNodeArray) {\n return nodeOrNodeArray.nodeType ? nodeOrNodeArray : nodeOrNodeArray.length > 0 ? nodeOrNodeArray[0] : null;\n}\nfunction executeTemplate(targetNodeOrNodeArray, renderMode, template, bindingContext, options, afterBindingCallback) {\n options = options || {};\n const firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray);\n const templateDocument = (firstTargetNode || template || {}).ownerDocument;\n const templateEngineToUse = options.templateEngine || _templateEngine;\n const renderedNodesArray = templateEngineToUse.renderTemplate(template, bindingContext, options, templateDocument);\n if (typeof renderedNodesArray.length !== \"number\" || renderedNodesArray.length > 0 && typeof renderedNodesArray[0].nodeType !== \"number\") {\n throw new Error(\"Template engine must return an array of DOM nodes\");\n }\n let haveAddedNodesToParent = false;\n switch (renderMode) {\n case \"replaceChildren\":\n virtualElements.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray);\n haveAddedNodesToParent = true;\n break;\n case \"replaceNode\":\n replaceDomNodes(targetNodeOrNodeArray, renderedNodesArray);\n haveAddedNodesToParent = true;\n break;\n case \"ignoreTargetNode\":\n break;\n default:\n throw new Error(\"Unknown renderMode: \" + renderMode);\n }\n if (haveAddedNodesToParent) {\n activateBindingsOnContinuousNodeArray(renderedNodesArray, bindingContext, afterBindingCallback);\n if (options.afterRender) {\n dependencyDetection.ignore(options.afterRender, null, [renderedNodesArray, bindingContext[\"$data\"]]);\n }\n if (renderMode === \"replaceChildren\") {\n bindingEvent.notify(targetNodeOrNodeArray, bindingEvent.childrenComplete);\n }\n }\n return renderedNodesArray;\n}\nfunction resolveTemplateName(template, data, context) {\n if (isObservable(template)) {\n return template();\n } else if (typeof template === \"function\") {\n return template(data, context);\n } else {\n return template;\n }\n}\nexport function renderTemplate(template, dataOrBindingContext, options, targetNodeOrNodeArray, renderMode, afterBindingCallback) {\n options = options || {};\n if ((options.templateEngine || _templateEngine) === void 0) {\n throw new Error(\"Set a template engine before calling renderTemplate\");\n }\n renderMode = renderMode || \"replaceChildren\";\n if (targetNodeOrNodeArray) {\n let firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);\n const whenToDispose = function() {\n return !firstTargetNode || !domNodeIsAttachedToDocument(firstTargetNode);\n };\n const activelyDisposeWhenNodeIsRemoved = firstTargetNode && renderMode === \"replaceNode\" ? firstTargetNode.parentNode : firstTargetNode;\n return computed(\n // So the DOM is automatically updated when any dependency changes\n function() {\n const bindingContext = dataOrBindingContext && dataOrBindingContext instanceof BindingContextConstructor ? dataOrBindingContext : new BindingContextConstructor(dataOrBindingContext, void 0, void 0, void 0, {\n exportDependencies: true\n });\n const templateName = resolveTemplateName(template, bindingContext.$data, bindingContext);\n const renderedNodesArray = executeTemplate(\n targetNodeOrNodeArray,\n renderMode,\n templateName,\n bindingContext,\n options,\n afterBindingCallback\n );\n if (renderMode === \"replaceNode\") {\n targetNodeOrNodeArray = renderedNodesArray;\n firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);\n }\n },\n null,\n { disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: activelyDisposeWhenNodeIsRemoved }\n );\n } else {\n return memoization.memoize(function(domNode) {\n renderTemplate(template, dataOrBindingContext, options, domNode, \"replaceNode\");\n });\n }\n}\nexport default function renderTemplateForEach(template, arrayOrObservableArray, options, targetNode, parentBindingContext, afterBindingCallback) {\n let arrayItemContext;\n function executeTemplateForArrayItem(arrayValue, index) {\n if (options.as) {\n if (koOptions.createChildContextWithAs) {\n arrayItemContext = parentBindingContext.createChildContext(arrayValue, options.as, (context) => {\n context.$index = index;\n });\n } else {\n arrayItemContext = parentBindingContext.extend({ [options.as]: arrayValue, $index: index });\n }\n } else {\n arrayItemContext = parentBindingContext.createChildContext(arrayValue, options.as, (context) => {\n context.$index = index;\n });\n }\n const templateName = resolveTemplateName(template, arrayValue, arrayItemContext);\n return executeTemplate(\n targetNode,\n \"ignoreTargetNode\",\n templateName,\n arrayItemContext,\n options,\n afterBindingCallback\n );\n }\n const activateBindingsCallback = function(arrayValue, addedNodesArray) {\n activateBindingsOnContinuousNodeArray(addedNodesArray, arrayItemContext, afterBindingCallback);\n if (options.afterRender) {\n options.afterRender(addedNodesArray, arrayValue);\n }\n arrayItemContext = null;\n };\n function localSetDomNodeChildrenFromArrayMapping(newArray, changeList) {\n dependencyDetection.ignore(setDomNodeChildrenFromArrayMapping, null, [\n targetNode,\n newArray,\n executeTemplateForArrayItem,\n options,\n activateBindingsCallback,\n changeList\n ]);\n bindingEvent.notify(targetNode, bindingEvent.childrenComplete);\n }\n const shouldHideDestroyed = options.includeDestroyed === false || koOptions.foreachHidesDestroyed && !options.includeDestroyed;\n if (!shouldHideDestroyed && !options.beforeRemove && isObservableArray(arrayOrObservableArray)) {\n localSetDomNodeChildrenFromArrayMapping(arrayOrObservableArray.peek());\n const subscription = arrayOrObservableArray.subscribe(\n function(changeList) {\n localSetDomNodeChildrenFromArrayMapping(arrayOrObservableArray(), changeList);\n },\n null,\n \"arrayChange\"\n );\n subscription.disposeWhenNodeIsRemoved(targetNode);\n return subscription;\n } else {\n return computed(\n function() {\n let unwrappedArray = unwrap(arrayOrObservableArray) || [];\n const unwrappedIsIterable = Symbol.iterator in unwrappedArray;\n if (!unwrappedIsIterable) {\n unwrappedArray = [unwrappedArray];\n }\n if (shouldHideDestroyed) {\n unwrappedArray = arrayFilter(unwrappedArray, function(item) {\n return item === void 0 || item === null || !unwrap(item._destroy);\n });\n }\n localSetDomNodeChildrenFromArrayMapping(unwrappedArray);\n },\n null,\n { disposeWhenNodeIsRemoved: targetNode }\n );\n }\n}\nconst templateComputedDomDataKey = domData.nextKey();\nexport class TemplateBindingHandler extends AsyncBindingHandler {\n constructor(params) {\n super(params);\n const element = this.$element;\n const bindingValue = unwrap(this.value);\n domData.set(element, \"conditional\", { elseChainSatisfied: observable(true) });\n if (typeof bindingValue === \"string\" || bindingValue.name) {\n this.bindNamedTemplate();\n } else if (\"nodes\" in bindingValue) {\n this.bindNodeTemplate(bindingValue.nodes || []);\n } else {\n this.bindAnonymousTemplate();\n }\n }\n bindNamedTemplate() {\n virtualElements.emptyNode(this.$element);\n }\n // We've been given an array of DOM nodes. Save them as the template source.\n // There is no known use case for the node array being an observable array (if the output\n // varies, put that behavior *into* your template - that's what templates are for), and\n // the implementation would be a mess, so assert that it's not observable.\n bindNodeTemplate(nodes) {\n if (isObservable(nodes)) {\n throw new Error('The \"nodes\" option must be a plain, non-observable array.');\n }\n let container = nodes[0] && nodes[0].parentNode;\n if (!container || !domData.get(container, cleanContainerDomDataKey)) {\n container = moveCleanedNodesToContainerElement(nodes);\n domData.set(container, cleanContainerDomDataKey, true);\n }\n new AnonymousTemplate(this.$element).nodes(container);\n }\n bindAnonymousTemplate() {\n const templateNodes = virtualElements.childNodes(this.$element);\n if (templateNodes.length === 0) {\n throw new Error(\"Anonymous template defined, but no template content was provided.\");\n }\n const container = moveCleanedNodesToContainerElement(templateNodes);\n new AnonymousTemplate(this.$element).nodes(container);\n }\n onValueChange() {\n const element = this.$element;\n const bindingContext = this.$context;\n const value = this.value;\n let options = unwrap(value);\n let shouldDisplay = true;\n let templateComputed = null;\n const elseChainSatisfied = domData.get(element, \"conditional\").elseChainSatisfied;\n let templateName;\n if (typeof options === \"string\") {\n templateName = value;\n options = {};\n } else {\n templateName = options.name;\n if (\"if\" in options) {\n shouldDisplay = unwrap(options.if);\n }\n if (shouldDisplay && \"ifnot\" in options) {\n shouldDisplay = !unwrap(options.ifnot);\n }\n }\n if (\"foreach\" in options) {\n const dataArray = shouldDisplay && options.foreach || [];\n templateComputed = renderTemplateForEach(\n templateName || element,\n dataArray,\n options,\n element,\n bindingContext,\n this.completeBinding\n );\n elseChainSatisfied((unwrap(dataArray) || []).length !== 0);\n } else if (shouldDisplay) {\n const innerBindingContext = \"data\" in options ? bindingContext.createStaticChildContext(options.data, options.as) : bindingContext;\n templateComputed = renderTemplate(\n templateName || element,\n innerBindingContext,\n options,\n element,\n void 0,\n this.completeBinding\n );\n elseChainSatisfied(true);\n } else {\n virtualElements.emptyNode(element);\n elseChainSatisfied(false);\n }\n this.disposeOldComputedAndStoreNewOne(element, templateComputed);\n }\n disposeOldComputedAndStoreNewOne(element, newComputed) {\n const oldComputed = domData.get(element, templateComputedDomDataKey);\n if (oldComputed && typeof oldComputed.dispose === \"function\") {\n oldComputed.dispose();\n }\n domData.set(\n element,\n templateComputedDomDataKey,\n newComputed && (!newComputed.isActive || newComputed.isActive()) ? newComputed : void 0\n );\n }\n get controlsDescendants() {\n return true;\n }\n static get allowVirtualElements() {\n return true;\n }\n}\n", "// @tko/binding.template \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { makeArray, parseHtmlFragment } from \"@tko/utils\";\nimport { templateEngine } from \"./templateEngine\";\nimport { setTemplateEngine } from \"./templating\";\nexport function nativeTemplateEngine() {\n}\nnativeTemplateEngine.prototype = new templateEngine();\nnativeTemplateEngine.prototype.constructor = nativeTemplateEngine;\nnativeTemplateEngine.prototype.renderTemplateSource = function(templateSource, bindingContext, options, templateDocument) {\n const templateNodes = templateSource.nodes ? templateSource.nodes() : null;\n if (templateNodes) {\n return makeArray(templateNodes.cloneNode(true).childNodes);\n } else {\n const templateText = templateSource.text();\n return parseHtmlFragment(templateText, templateDocument);\n }\n};\nnativeTemplateEngine.instance = new nativeTemplateEngine();\nsetTemplateEngine(nativeTemplateEngine.instance);\n", "// @tko/binding.template \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { unwrap, peek } from \"@tko/observable\";\nimport { nativeTemplateEngine } from \"./nativeTemplateEngine\";\nimport { TemplateBindingHandler } from \"./templating\";\nexport class TemplateForEachBindingHandler extends TemplateBindingHandler {\n get value() {\n const modelValue = this.valueAccessor();\n const unwrappedValue = peek(modelValue);\n if (!unwrappedValue || typeof unwrappedValue.length === \"number\") {\n return { foreach: modelValue, templateEngine: nativeTemplateEngine.instance };\n }\n unwrap(modelValue);\n return {\n foreach: unwrappedValue.data,\n as: unwrappedValue.as,\n includeDestroyed: unwrappedValue.includeDestroyed,\n afterAdd: unwrappedValue.afterAdd,\n beforeRemove: unwrappedValue.beforeRemove,\n afterRender: unwrappedValue.afterRender,\n beforeMove: unwrappedValue.beforeMove,\n afterMove: unwrappedValue.afterMove,\n templateEngine: nativeTemplateEngine.instance\n };\n }\n}\n", "// @tko/binding.template \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { TemplateForEachBindingHandler } from \"./foreach\";\nimport { TemplateBindingHandler } from \"./templating\";\nexport const bindings = { foreach: TemplateForEachBindingHandler, template: TemplateBindingHandler };\nexport * from \"./nativeTemplateEngine\";\nexport * from \"./templateEngine\";\nexport * from \"./templating\";\nexport * from \"./templateSources\";\n", "// @tko/builder \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport {\n addDisposeCallback,\n addOrRemoveItem,\n arrayFilter,\n arrayFirst,\n arrayForEach,\n arrayGetDistinctValues,\n arrayIndexOf,\n arrayMap,\n arrayPushAll,\n arrayRemoveItem,\n addCleaner,\n cleanNode,\n cloneNodes,\n compareArrays,\n createSymbolOrString,\n domData,\n extend,\n memoization,\n objectForEach,\n objectMap,\n options,\n parseHtmlFragment,\n parseJson,\n range,\n registerEventHandler,\n removeCleaner,\n removeDisposeCallback,\n removeNode,\n selectExtensions,\n setHtml,\n setTextContent,\n tasks,\n toggleDomNodeCssClass,\n triggerEvent,\n virtualElements\n} from \"@tko/utils\";\nimport { parseObjectLiteral } from \"@tko/utils.parser\";\nimport { LifeCycle } from \"@tko/lifecycle\";\nimport {\n dependencyDetection,\n extenders as defaultExtenders,\n isObservable,\n isSubscribable,\n isWriteableObservable,\n observable,\n observableArray,\n isObservableArray,\n peek,\n subscribable,\n toJS,\n toJSON,\n unwrap\n} from \"@tko/observable\";\nimport { computed, isComputed, isPureComputed, proxy, pureComputed, when } from \"@tko/computed\";\nimport {\n applyBindingAccessorsToNode,\n applyBindings,\n applyBindingsToDescendants,\n applyBindingsToNode,\n contextFor,\n dataFor,\n bindingEvent,\n BindingHandler,\n AsyncBindingHandler,\n setDomNodeChildrenFromArrayMapping\n} from \"@tko/bind\";\nimport {\n anonymousTemplate,\n domElement,\n nativeTemplateEngine,\n renderTemplate,\n setTemplateEngine,\n templateEngine\n} from \"@tko/binding.template\";\nconst domNodeDisposal = {\n addDisposeCallback,\n removeDisposeCallback,\n removeNode,\n addCleaner,\n removeCleaner,\n get cleanExternalData() {\n return options.cleanExternalData;\n },\n set cleanExternalData(cleanerFn) {\n options.set(\"cleanExternalData\", cleanerFn);\n }\n};\nconst utils = {\n addOrRemoveItem,\n arrayFilter,\n arrayFirst,\n arrayForEach,\n arrayGetDistinctValues,\n arrayIndexOf,\n arrayMap,\n arrayPushAll,\n arrayRemoveItem,\n cloneNodes,\n compareArrays,\n createSymbolOrString,\n domData,\n domNodeDisposal,\n extend,\n filters: options.filters,\n objectForEach,\n objectMap,\n parseHtmlFragment,\n parseJson,\n parseObjectLiteral,\n peekObservable: peek,\n range,\n registerEventHandler,\n setDomNodeChildrenFromArrayMapping,\n setHtml,\n setTextContent,\n toggleDomNodeCssClass,\n triggerEvent,\n unwrapObservable: unwrap\n};\nconst knockout = {\n // --- Utilities ---\n cleanNode,\n dependencyDetection,\n computedContext: dependencyDetection,\n filters: options.filters,\n ignoreDependencies: dependencyDetection.ignore,\n memoization,\n options,\n removeNode,\n selectExtensions,\n tasks,\n utils,\n LifeCycle,\n // -- Observable ---\n isObservable,\n isSubscribable,\n isWriteableObservable,\n isWritableObservable: isWriteableObservable,\n observable,\n observableArray,\n isObservableArray,\n peek,\n subscribable,\n unwrap,\n toJS,\n toJSON,\n proxy,\n // ... Computed ...\n computed,\n dependentObservable: computed,\n isComputed,\n isPureComputed,\n pureComputed,\n when,\n // --- Templates ---\n nativeTemplateEngine,\n renderTemplate,\n setTemplateEngine,\n templateEngine,\n templateSources: { domElement, anonymousTemplate },\n // --- Binding ---\n applyBindingAccessorsToNode,\n applyBindings,\n applyBindingsToDescendants,\n applyBindingsToNode,\n contextFor,\n dataFor,\n BindingHandler,\n AsyncBindingHandler,\n virtualElements,\n domNodeDisposal,\n bindingEvent\n};\nexport class Builder {\n constructor({ provider, bindings, extenders, filters, options: options2 }) {\n Object.assign(knockout.options, options2, { filters, bindingProviderInstance: provider });\n provider.setGlobals(knockout.options.bindingGlobals);\n if (Array.isArray(bindings)) {\n for (const bindingsObject of bindings) {\n provider.bindingHandlers.set(bindingsObject);\n }\n } else {\n provider.bindingHandlers.set(bindings);\n }\n this.providedProperties = {\n extenders: Object.assign(defaultExtenders, extenders),\n bindingHandlers: provider.bindingHandlers,\n bindingProvider: provider\n };\n }\n /**\n * @return {KnockoutInstance} An instance of Knockout.\n */\n create(...additionalProperties) {\n const instance = Object.assign(\n {\n get getBindingHandler() {\n return options.getBindingHandler;\n },\n set getBindingHandler(fn) {\n options.set(\"getBindingHandler\", fn);\n }\n },\n knockout,\n //never change the order of these\n this.providedProperties,\n ...additionalProperties\n );\n instance.options.knockoutInstance = instance;\n return instance;\n }\n}\n", "// @tko/provider \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { options } from \"@tko/utils\";\nexport default class BindingHandlerObject {\n set(nameOrObject, value) {\n if (typeof nameOrObject === \"string\") {\n this[nameOrObject] = value;\n } else if (typeof nameOrObject === \"object\") {\n if (value !== void 0) {\n options.onError(\n new Error(\n \"Given extraneous `value` parameter (first param should be a string, but it was an object).\" + nameOrObject\n )\n );\n }\n Object.assign(this, nameOrObject);\n } else {\n options.onError(new Error(\"Given a bad binding handler type: \" + nameOrObject));\n }\n }\n /**\n * The handler may have a `.` in it, e.g. `attr.title`, in which case the\n * handler is `attr`. Otherwise it's the name given\n */\n get(nameOrDotted) {\n const [name] = nameOrDotted.split(\".\");\n return this[name];\n }\n}\n", "// @tko/provider \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { objectMap } from \"@tko/utils\";\nimport { dependencyDetection } from \"@tko/observable\";\nimport BindingHandlerObject from \"./BindingHandlerObject\";\nexport default class Provider {\n constructor(params) {\n if (this.constructor === Provider) {\n throw new Error(\"Provider is an abstract base class.\");\n }\n if (!(\"FOR_NODE_TYPES\" in this)) {\n throw new Error(\"Providers must have FOR_NODE_TYPES property\");\n }\n this.bindingHandlers = params?.bindingHandlers || new BindingHandlerObject();\n this.globals = params?.globals || {};\n }\n get FOR_NODE_TYPES() {\n throw new Error(\"Providers must override FOR_NODE_TYPES property\");\n }\n setGlobals(globals) {\n this.globals = globals;\n }\n get preemptive() {\n return false;\n }\n nodeHasBindings(node, context) {\n return false;\n }\n getBindingAccessors(node, context) {\n return /* @__PURE__ */ Object.create(null);\n }\n /**\n * Preprocess a given node.\n * @param {Node} node\n * @returns {[Node]|null}\n */\n preprocessNode(node) {\n return [node];\n }\n postProcess() {\n }\n /** For legacy binding provider assignments to\n * ko.bindingProvider.instance = ... */\n get instance() {\n return this._overloadInstance || this;\n }\n set instance(provider) {\n if (!provider || provider === this) {\n this._overloadInstance = void 0;\n } else {\n this._overloadInstance = new LegacyProvider(provider, this);\n }\n }\n // Given a function that returns bindings, create and return a new object that contains\n // binding value-accessors functions. Each accessor function calls the original function\n // so that it always gets the latest value and all dependencies are captured. This is used\n // by ko.applyBindingsToNode and getBindingsAndMakeAccessors.\n makeAccessorsFromFunction(callback) {\n return objectMap(dependencyDetection.ignore(callback), (value, key) => () => callback()[key]);\n }\n // Returns the valueAccessor function for a binding value\n makeValueAccessor(value) {\n return () => value;\n }\n // Given a bindings function or object, create and return a new object that contains\n // binding value-accessors functions. This is used by ko.applyBindingsToNode.\n makeBindingAccessors(bindings, context, node) {\n if (typeof bindings === \"function\") {\n return this.makeAccessorsFromFunction(bindings.bind(null, context, node));\n } else {\n return objectMap(bindings, this.makeValueAccessor);\n }\n }\n}\nclass LegacyProvider extends Provider {\n get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE, Node.TEXT_NODE, Node.COMMENT_NODE];\n }\n constructor(providerObject, parentProvider) {\n super();\n Object.assign(this, { providerObject });\n this.bindingHandlers = providerObject.bindingHandlers || parentProvider.bindingHandlers;\n }\n // This function is used if the binding provider doesn't include a getBindingAccessors function.\n // It must be called with 'this' set to the provider instance.\n getBindingsAndMakeAccessors(node, context) {\n const bindingsFn = this.providerObject.getBindings.bind(this.providerObject, node, context);\n return this.makeAccessorsFromFunction(bindingsFn);\n }\n getBindingAccessors(node, context) {\n return this.providerObject.getBindingAccessors ? this.providerObject.getBindingAccessors(node, context) : this.getBindingsAndMakeAccessors(node, context);\n }\n nodeHasBindings(node) {\n return this.providerObject.nodeHasBindings(node);\n }\n preprocessNode(node) {\n if (this.providerObject.preprocessNode) {\n return this.providerObject.preprocessNode(node);\n }\n return null;\n }\n}\n", "// @tko/provider.bindingstring \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { Parser, parseObjectLiteral } from \"@tko/utils.parser\";\nimport { Provider } from \"@tko/provider\";\nexport default class BindingStringProvider extends Provider {\n /** Call bindingHandler.preprocess on each respective binding string.\n *\n * The `preprocess` property of bindingHandler must be a static\n * function (i.e. on the object or constructor).\n */\n *processBinding(key, value) {\n const [handlerName, property] = key.split(\".\");\n const handler = this.bindingHandlers.get(handlerName);\n if (handler && handler.preprocess) {\n const bindingsAddedByHandler = new Array();\n const chainFn = (...args) => bindingsAddedByHandler.push(args);\n value = handler.preprocess(value, key, chainFn);\n for (const [key2, value2] of bindingsAddedByHandler) {\n yield* this.processBinding(key2, value2);\n }\n } else if (property) {\n value = `{${property}:${value}}`;\n }\n yield `'${handlerName}':${value}`;\n }\n *generateBindingString(bindingStringOrObjects) {\n const bindingObjectsArray = typeof bindingStringOrObjects === \"string\" ? parseObjectLiteral(bindingStringOrObjects) : bindingStringOrObjects;\n for (const { key, unknown, value } of bindingObjectsArray) {\n yield* this.processBinding(key || unknown, value);\n }\n }\n preProcessBindings(bindingStringOrObjects) {\n return Array.from(this.generateBindingString(bindingStringOrObjects)).join(\",\");\n }\n getBindingAccessors(node, context) {\n const bindingString = node && this.getBindingString(node);\n if (!bindingString) {\n return;\n }\n const processed = this.preProcessBindings(bindingString);\n return new Parser().parse(processed, context, this.globals, node);\n }\n getBindingString(node) {\n throw new Error(\"Overload getBindingString.\");\n }\n}\n", "// @tko/provider.virtual \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { virtualElements } from \"@tko/utils\";\nimport { BindingStringProvider } from \"@tko/provider.bindingstring\";\nexport default class VirtualProvider extends BindingStringProvider {\n get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE, Node.COMMENT_NODE];\n }\n /**\n * Convert <ko binding='...'> into <!-- ko binding: ... -->\n * @param {Node} node\n */\n preprocessNode(node) {\n if (node instanceof Element && node.tagName === \"KO\") {\n const parent = node.parentNode;\n const childNodes = [...node.childNodes];\n const virtualBindingString = [...this.genElementBindingStrings(node)].join(\",\");\n const openNode = document.createComment(\"ko \" + virtualBindingString);\n const closeNode = document.createComment(\"/ko\");\n parent?.insertBefore(openNode, node);\n for (const child of childNodes) {\n parent?.insertBefore(child, node);\n }\n parent?.insertBefore(closeNode, node);\n node.remove();\n return [openNode, ...childNodes, closeNode];\n }\n return null;\n }\n *genElementBindingStrings(node) {\n for (const { name, value } of node.attributes) {\n yield `${name.replace(/^ko-/, \"\")}: ${value}`;\n }\n }\n getBindingString(node) {\n if (node.nodeType === Node.COMMENT_NODE) {\n return virtualElements.virtualNodeBindingValue(node);\n }\n return null;\n }\n nodeHasBindings(node, context) {\n if (node.nodeType === Node.COMMENT_NODE) {\n return virtualElements.isStartComment(node);\n }\n return false;\n }\n}\n", "// @tko/provider.databind \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { BindingStringProvider } from \"@tko/provider.bindingstring\";\nexport default class DataBindProvider extends BindingStringProvider {\n get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE];\n }\n get BIND_ATTRIBUTE() {\n return \"data-bind\";\n }\n getBindingString(node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return node.getAttribute(this.BIND_ATTRIBUTE);\n }\n return null;\n }\n nodeHasBindings(node, context) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return node.hasAttribute(this.BIND_ATTRIBUTE);\n }\n return false;\n }\n}\n", "// @tko/utils.component \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { subscribable, dependencyDetection } from \"@tko/observable\";\nimport { getObjectOwnProperty, tasks } from \"@tko/utils\";\nconst loadingSubscribablesCache = {}, loadedDefinitionsCache = {};\nfunction loadComponentAndNotify(componentName, callback) {\n let _subscribable = getObjectOwnProperty(loadingSubscribablesCache, componentName), completedAsync;\n if (!_subscribable) {\n _subscribable = loadingSubscribablesCache[componentName] = new subscribable();\n _subscribable.subscribe(callback);\n beginLoadingComponent(componentName, function(definition, config) {\n const isSynchronousComponent = !!(config && config.synchronous);\n loadedDefinitionsCache[componentName] = { definition, isSynchronousComponent };\n delete loadingSubscribablesCache[componentName];\n if (completedAsync || isSynchronousComponent) {\n _subscribable.notifySubscribers(definition);\n } else {\n tasks.schedule(function() {\n _subscribable.notifySubscribers(definition);\n });\n }\n });\n completedAsync = true;\n } else {\n _subscribable.subscribe(callback);\n }\n}\nfunction beginLoadingComponent(componentName, callback) {\n getFirstResultFromLoaders(\"getConfig\", [componentName], function(config) {\n if (config) {\n getFirstResultFromLoaders(\"loadComponent\", [componentName, config], function(definition) {\n callback(definition, config);\n });\n } else {\n callback(null, null);\n }\n });\n}\nfunction getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders) {\n if (!candidateLoaders) {\n candidateLoaders = registry.loaders.slice(0);\n }\n const currentCandidateLoader = candidateLoaders.shift();\n if (currentCandidateLoader) {\n const methodInstance = currentCandidateLoader[methodName];\n if (methodInstance) {\n let wasAborted = false, synchronousReturnValue = methodInstance.apply(\n currentCandidateLoader,\n argsExceptCallback.concat(function(result) {\n if (wasAborted) {\n callback(null);\n } else if (result !== null) {\n callback(result);\n } else {\n getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders);\n }\n })\n );\n if (synchronousReturnValue !== void 0) {\n wasAborted = true;\n if (!currentCandidateLoader.suppressLoaderExceptions) {\n throw new Error(\n \"Component loaders must supply values by invoking the callback, not by returning values synchronously.\"\n );\n }\n }\n } else {\n getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders);\n }\n } else {\n callback(null);\n }\n}\nexport const registry = {\n get(componentName, callback) {\n const cachedDefinition = getObjectOwnProperty(loadedDefinitionsCache, componentName);\n if (cachedDefinition) {\n if (cachedDefinition.isSynchronousComponent) {\n dependencyDetection.ignore(function() {\n callback(cachedDefinition.definition);\n });\n } else {\n tasks.schedule(function() {\n callback(cachedDefinition.definition);\n });\n }\n } else {\n loadComponentAndNotify(componentName, callback);\n }\n },\n clearCachedDefinition(componentName) {\n delete loadedDefinitionsCache[componentName];\n },\n _getFirstResultFromLoaders: getFirstResultFromLoaders,\n loaders: new Array()\n};\n", "// @tko/utils.component \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n isDomElement,\n isDocumentFragment,\n tagNameLower,\n parseHtmlFragment,\n makeArray,\n cloneNodes,\n hasOwnProperty\n} from \"@tko/utils\";\nimport { registry } from \"./registry\";\nexport const defaultConfigRegistry = {};\nexport const VIEW_MODEL_FACTORY = /* @__PURE__ */ Symbol(\"Knockout View Model ViewModel factory\");\nexport function register(componentName, config) {\n if (!config) {\n throw new Error(\"Invalid configuration for \" + componentName);\n }\n if (isRegistered(componentName)) {\n throw new Error(\"Component \" + componentName + \" is already registered\");\n }\n const ceok = componentName.includes(\"-\") && componentName.toLowerCase() === componentName;\n if (!config.ignoreCustomElementWarning && !ceok) {\n console.log(`\n\\u{1F94A} Knockout warning: components for custom elements must be lowercase and contain a dash. To ignore this warning, add to the 'config' of .register(componentName, config):\n\n ignoreCustomElementWarning: true\n `);\n }\n defaultConfigRegistry[componentName] = config;\n}\nexport function isRegistered(componentName) {\n return hasOwnProperty(defaultConfigRegistry, componentName);\n}\nexport function unregister(componentName) {\n delete defaultConfigRegistry[componentName];\n registry.clearCachedDefinition(componentName);\n}\nexport const defaultLoader = {\n getConfig(componentName, callback) {\n const result = hasOwnProperty(defaultConfigRegistry, componentName) ? defaultConfigRegistry[componentName] : null;\n callback(result);\n },\n loadComponent(componentName, config, callback) {\n const errorCallback = makeErrorCallback(componentName);\n possiblyGetConfigFromAmd(errorCallback, config, function(loadedConfig) {\n resolveConfig(componentName, errorCallback, loadedConfig, callback);\n });\n },\n loadTemplate(componentName, templateConfig, callback) {\n resolveTemplate(makeErrorCallback(componentName), templateConfig, callback);\n },\n loadViewModel(componentName, viewModelConfig, callback) {\n resolveViewModel(makeErrorCallback(componentName), viewModelConfig, callback);\n }\n};\nconst createViewModelKey = \"createViewModel\";\nfunction resolveConfig(componentName, errorCallback, config, callback) {\n const result = {}, tryIssueCallback = function() {\n if (--makeCallBackWhenZero === 0) {\n callback(result);\n }\n }, templateConfig = config[\"template\"], viewModelConfig = config[\"viewModel\"];\n let makeCallBackWhenZero = 2;\n if (templateConfig) {\n possiblyGetConfigFromAmd(errorCallback, templateConfig, function(loadedConfig) {\n registry._getFirstResultFromLoaders(\"loadTemplate\", [componentName, loadedConfig], function(resolvedTemplate) {\n result[\"template\"] = resolvedTemplate;\n tryIssueCallback();\n });\n });\n } else {\n tryIssueCallback();\n }\n if (viewModelConfig) {\n possiblyGetConfigFromAmd(errorCallback, viewModelConfig, function(loadedConfig) {\n registry._getFirstResultFromLoaders(\"loadViewModel\", [componentName, loadedConfig], function(resolvedViewModel) {\n result[createViewModelKey] = resolvedViewModel;\n tryIssueCallback();\n });\n });\n } else {\n tryIssueCallback();\n }\n}\nfunction resolveTemplate(errorCallback, templateConfig, callback) {\n if (typeof templateConfig === \"string\") {\n callback(parseHtmlFragment(templateConfig));\n } else if (templateConfig instanceof Array) {\n callback(templateConfig);\n } else if (isDocumentFragment(templateConfig)) {\n callback(makeArray(templateConfig.childNodes));\n } else if (templateConfig.element) {\n const element = templateConfig.element;\n if (isDomElement(element)) {\n callback(cloneNodesFromTemplateSourceElement(element));\n } else if (typeof element === \"string\") {\n const elemInstance = document.getElementById(element);\n if (elemInstance) {\n callback(cloneNodesFromTemplateSourceElement(elemInstance));\n } else {\n errorCallback(\"Cannot find element with ID \" + element);\n }\n } else {\n errorCallback(\"Unknown element type: \" + element);\n }\n } else if (templateConfig.elementName) {\n callback(templateConfig);\n } else {\n errorCallback(\"Unknown template value: \" + templateConfig);\n }\n}\nfunction resolveViewModel(errorCallback, viewModelConfig, callback) {\n if (viewModelConfig[VIEW_MODEL_FACTORY]) {\n callback((...args) => viewModelConfig[VIEW_MODEL_FACTORY](...args));\n } else if (typeof viewModelConfig === \"function\") {\n callback(function(params) {\n return new viewModelConfig(params);\n });\n } else if (typeof viewModelConfig[createViewModelKey] === \"function\") {\n callback(viewModelConfig[createViewModelKey]);\n } else if (\"instance\" in viewModelConfig) {\n const fixedInstance = viewModelConfig[\"instance\"];\n callback(function() {\n return fixedInstance;\n });\n } else if (\"viewModel\" in viewModelConfig) {\n resolveViewModel(errorCallback, viewModelConfig[\"viewModel\"], callback);\n } else {\n errorCallback(\"Unknown viewModel value: \" + viewModelConfig);\n }\n}\nfunction cloneNodesFromTemplateSourceElement(elemInstance) {\n switch (tagNameLower(elemInstance)) {\n case \"script\":\n return parseHtmlFragment(elemInstance.text);\n case \"textarea\":\n return parseHtmlFragment(elemInstance.value);\n case \"template\":\n if (isDocumentFragment(elemInstance.content)) {\n return cloneNodes(elemInstance.content.childNodes);\n }\n }\n return cloneNodes(elemInstance.childNodes);\n}\nfunction possiblyGetConfigFromAmd(errorCallback, config, callback) {\n if (typeof config.require === \"string\") {\n if (window.amdRequire || window.require) {\n ;\n (window.amdRequire || window.require)([config.require], callback);\n } else {\n errorCallback(\"Uses require, but no AMD loader is present\");\n }\n } else {\n callback(config);\n }\n}\nfunction makeErrorCallback(componentName) {\n return function(message) {\n throw new Error(\"Component '\" + componentName + \"': \" + message);\n };\n}\nregistry.loaders.push(defaultLoader);\n", "// @tko/utils.component \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { LifeCycle } from \"@tko/lifecycle\";\nimport { register, VIEW_MODEL_FACTORY } from \"./loaders\";\nexport class ComponentABC extends LifeCycle {\n /**\n * The tag name of the custom element. For example 'my-component'.\n * By default converts the class name from camel case to kebab case.\n * @return {string} The custom node name of this component.\n */\n static get customElementName() {\n return this.name.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n }\n /**\n * Overload this to return:\n * 1. A string of markup\n * 2. An array of DOM nodes\n * 3. A document fragment\n * 4. An AMD module (with `{require: 'some/template'}`)\n * @return {mixed} One of the accepted template types for the ComponentBinding.\n */\n static get template() {\n if (\"template\" in this.prototype) {\n return;\n }\n return { element: this.element };\n }\n /**\n * This is called by the default `template`. Overload this to return:\n * 1. The element ID\n * 2. A DOM node itself\n * @return {string|HTMLElement} either the element ID or actual element.\n */\n static get element() {\n throw new Error(\"[ComponentABC] `element` must be overloaded.\");\n }\n /**\n * @return {bool} True if the component shall load synchronously\n */\n static get sync() {\n return true;\n }\n /**\n * Construct a new instance of the model. When using ComponentABC as a\n * base class, we do pass in the $element and $componentTemplateNodes.\n * @param {Object} params\n * @param {{element: HTMLElement, templateNodes: [HTMLElement]}} componentInfo\n */\n static [VIEW_MODEL_FACTORY](params, componentInfo) {\n return new this(params, componentInfo);\n }\n static register(name = this.customElementName) {\n const viewModel = this;\n const { template } = this;\n const synchronous = this.sync;\n register(name, { viewModel, template, synchronous });\n }\n}\n", "// @tko/utils.component \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { registry } from \"./registry\";\nimport { ComponentABC } from \"./ComponentABC\";\nimport { register, isRegistered, unregister, defaultLoader, defaultConfigRegistry } from \"./loaders\";\nexport { ComponentABC };\nexport default {\n ComponentABC,\n // -- Registry --\n get: registry.get,\n clearCachedDefinition: registry.clearCachedDefinition,\n // -- Loader --\n register,\n isRegistered,\n unregister,\n defaultLoader,\n // \"Privately\" expose the underlying config registry for use in old-IE shim\n _allRegisteredComponents: defaultConfigRegistry,\n get loaders() {\n return registry.loaders;\n },\n set loaders(loaders) {\n registry.loaders = loaders;\n }\n};\n", "// @tko/provider.component \uD83E\uDD4A 4.0.0-beta1.6 ESM\n\"use strict\";\nimport { tagNameLower, objectMap } from \"@tko/utils\";\nimport registry from \"@tko/utils.component\";\nimport { unwrap, isWriteableObservable } from \"@tko/observable\";\nimport { computed } from \"@tko/computed\";\nimport { Provider } from \"@tko/provider\";\nimport { Parser } from \"@tko/utils.parser\";\nexport default class ComponentProvider extends Provider {\n get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE];\n }\n /**\n * Convert <slot name='X'> to <!-- ko slot: 'X' --><!-- /ko -->\n * @param {Node} node\n */\n preprocessNode(node) {\n if (node instanceof Element && node.tagName === \"SLOT\") {\n const parent = node.parentNode;\n const slotName = node.getAttribute(\"name\") || \"\";\n const openNode = document.createComment(`ko slot: \"${slotName}\"`);\n const closeNode = document.createComment(\"/ko\");\n if (!parent) {\n throw Error(\"Missing parent node\");\n }\n parent.insertBefore(openNode, node);\n parent.insertBefore(closeNode, node);\n parent.removeChild(node);\n return [openNode, closeNode];\n }\n return null;\n }\n nodeHasBindings(node) {\n return Boolean(this.getComponentNameForNode(node));\n }\n getBindingAccessors(node, context) {\n const componentName = this.getComponentNameForNode(node);\n if (!componentName) {\n return /* @__PURE__ */ Object.create(null);\n }\n const component = () => ({ name: componentName, params: this.getComponentParams(node, context) });\n return { component };\n }\n getComponentNameForNode(node) {\n if (!(node instanceof Element) || node.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n const tagName = tagNameLower(node);\n if (registry.isRegistered(tagName)) {\n const hasDash = tagName.includes(\"-\");\n const isUnknownEntity = \"\" + node === \"[object HTMLUnknownElement]\";\n if (hasDash || isUnknownEntity) {\n return tagName;\n }\n }\n return null;\n }\n getComponentParams(node, context) {\n if (!(node instanceof Element)) {\n return { $raw: {} };\n }\n const parser = new Parser(node, context, this.globals);\n const paramsString = (node.getAttribute(\"params\") || \"\").trim();\n const accessors = parser.parse(paramsString, context, void 0, node);\n if (!accessors || Object.keys(accessors).length === 0) {\n return { $raw: {} };\n }\n const $raw = objectMap(accessors, (value) => computed(value, null, { disposeWhenNodeIsRemoved: node }));\n const params = objectMap($raw, (v) => this.makeParamValue(node, v));\n return Object.assign({ $raw }, params);\n }\n makeParamValue(node, paramValueComputed) {\n const paramValue = paramValueComputed.peek();\n if (!paramValueComputed.isActive()) {\n return paramValue;\n }\n const isWriteable = isWriteableObservable(paramValue);\n return computed({\n read: () => unwrap(paramValueComputed()),\n write: isWriteable ? (v) => paramValueComputed()(v) : void 0,\n disposeWhenNodeIsRemoved: node\n });\n }\n}\n", "// @tko/provider.attr \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { Provider } from \"@tko/provider\";\nexport default class AttrProvider extends Provider {\n get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE];\n }\n get PREFIX() {\n return \"ko-\";\n }\n getBindingAttributesList(node) {\n if (!(node instanceof Element)) {\n return [];\n }\n if (!node.hasAttributes()) {\n return [];\n }\n return Array.from(node.attributes).filter((attr) => attr.name.startsWith(this.PREFIX));\n }\n nodeHasBindings(node) {\n return this.getBindingAttributesList(node).length > 0;\n }\n getBindingAccessors(node, context) {\n return Object.assign({}, ...this.handlersFromAttributes(node, context));\n }\n *handlersFromAttributes(node, context) {\n for (const attr of this.getBindingAttributesList(node)) {\n const name = attr.name.substring(this.PREFIX.length);\n yield { [name]: () => this.getValue(attr.value, context, node) };\n }\n }\n getValue(token, $context, node) {\n if (!token) {\n return;\n }\n const $data = $context.$data;\n switch (token) {\n case \"$element\":\n return node;\n case \"$context\":\n return $context;\n case \"this\":\n case \"$data\":\n return $context.$data;\n }\n if ($data instanceof Object && token in $data) {\n return $data[token];\n }\n if (token in $context) {\n return $context[token];\n }\n if (token in this.globals) {\n return this.globals[token];\n }\n throw new Error(`The variable '${token} not found.`);\n }\n}\n", "// @tko/provider.multi \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { Provider } from \"@tko/provider\";\nexport default class MultiProvider extends Provider {\n get FOR_NODE_TYPES() {\n return this.nodeTypes;\n }\n constructor(params) {\n super(params);\n const providers = params?.providers || [];\n this.nodeTypeMap = {};\n this.nodeTypes = [];\n this.providers = [];\n providers.forEach((p) => this.addProvider(p));\n }\n setGlobals(globals) {\n ;\n [this, ...this.providers].forEach((p) => p.globals = globals);\n }\n addProvider(provider) {\n this.providers.push(provider);\n provider.bindingHandlers = this.bindingHandlers;\n provider.globals = this.globals;\n const nodeTypeMap = this.nodeTypeMap;\n for (const nodeType of provider.FOR_NODE_TYPES) {\n if (!nodeTypeMap[nodeType]) {\n nodeTypeMap[nodeType] = new Array();\n }\n nodeTypeMap[nodeType].push(provider);\n }\n this.nodeTypes = Object.keys(this.nodeTypeMap).map((k) => parseInt(k, 10));\n }\n providersFor(node) {\n return this.nodeTypeMap[node.nodeType] || [];\n }\n nodeHasBindings(node, context) {\n return this.providersFor(node).some((p) => p.nodeHasBindings(node));\n }\n preprocessNode(node) {\n for (const provider of this.providersFor(node)) {\n const newNodes = provider.preprocessNode(node);\n if (newNodes) {\n return newNodes;\n }\n }\n return null;\n }\n *enumerateProviderBindings(node, context) {\n for (const provider of this.providersFor(node)) {\n const bindings = provider.getBindingAccessors(node, context);\n if (!bindings) {\n continue;\n }\n yield* Object.entries(bindings || {});\n if (provider.preemptive) {\n return;\n }\n }\n }\n getBindingAccessors(node, context) {\n const bindings = {};\n for (const [key, accessor] of this.enumerateProviderBindings(node, context)) {\n if (key in bindings) {\n throw new Error(`The binding \"${key}\" is duplicated by multiple providers`);\n }\n bindings[key] = accessor;\n }\n return bindings;\n }\n}\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { objectForEach } from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nexport const attr = {\n update: function(element, valueAccessor, _allBindings) {\n const value = unwrap(valueAccessor()) || {};\n objectForEach(value, function(attrName, attrValue) {\n attrValue = unwrap(attrValue);\n const prefixLen = attrName.indexOf(\":\");\n const namespace = prefixLen > 0 && element.lookupNamespaceURI(attrName.substr(0, prefixLen));\n const toRemove = attrValue === false || attrValue === null || attrValue === void 0;\n if (toRemove) {\n if (namespace) {\n element.removeAttributeNS(namespace, attrName);\n } else {\n element.removeAttribute(attrName);\n }\n } else {\n attrValue = attrValue.toString();\n if (namespace) {\n element.setAttributeNS(namespace, attrName, attrValue);\n } else {\n element.setAttribute(attrName, attrValue);\n }\n }\n if (attrName === \"name\") {\n element.name = toRemove ? \"\" : attrValue;\n }\n });\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { registerEventHandler, arrayIndexOf, addOrRemoveItem } from \"@tko/utils\";\nimport { unwrap, dependencyDetection, isWriteableObservable } from \"@tko/observable\";\nimport { computed, pureComputed } from \"@tko/computed\";\nexport const checked = {\n after: [\"value\", \"attr\"],\n init: function(element, valueAccessor, allBindings) {\n const checkedValue2 = pureComputed(function() {\n if (allBindings.has(\"checkedValue\")) {\n return unwrap(allBindings.get(\"checkedValue\"));\n } else if (useElementValue) {\n if (allBindings.has(\"value\")) {\n return unwrap(allBindings.get(\"value\"));\n } else {\n return element.value;\n }\n }\n });\n function updateModel() {\n let isChecked = element.checked, elemValue = checkedValue2();\n if (dependencyDetection.isInitial()) {\n return;\n }\n if (!isChecked && (isRadio || dependencyDetection.getDependenciesCount())) {\n return;\n }\n const modelValue = dependencyDetection.ignore(valueAccessor);\n if (valueIsArray) {\n const writableValue = rawValueIsNonArrayObservable ? modelValue.peek() : modelValue, saveOldValue = oldElemValue;\n oldElemValue = elemValue;\n if (saveOldValue !== elemValue) {\n if (isChecked) {\n addOrRemoveItem(writableValue, elemValue, true);\n addOrRemoveItem(writableValue, saveOldValue, false);\n }\n oldElemValue = elemValue;\n } else {\n addOrRemoveItem(writableValue, elemValue, isChecked);\n }\n if (rawValueIsNonArrayObservable && isWriteableObservable(modelValue)) {\n modelValue(writableValue);\n }\n } else {\n if (isCheckbox) {\n if (elemValue === void 0) {\n elemValue = isChecked;\n } else if (!isChecked) {\n elemValue = void 0;\n }\n }\n const modelValue2 = valueAccessor(elemValue, { onlyIfChanged: true });\n if (isWriteableObservable(modelValue2) && modelValue2.peek() !== elemValue) {\n modelValue2(elemValue);\n }\n }\n }\n function updateView() {\n const modelValue = unwrap(valueAccessor());\n const elemValue = checkedValue2();\n if (valueIsArray) {\n element.checked = arrayIndexOf(modelValue, elemValue) >= 0;\n oldElemValue = elemValue;\n } else if (isCheckbox && elemValue === void 0) {\n element.checked = !!modelValue;\n } else {\n element.checked = checkedValue2() === modelValue;\n }\n }\n const isCheckbox = element.type == \"checkbox\", isRadio = element.type == \"radio\";\n if (!isCheckbox && !isRadio) {\n return;\n }\n let rawValue = valueAccessor(), valueIsArray = isCheckbox && unwrap(rawValue) instanceof Array, rawValueIsNonArrayObservable = !(valueIsArray && rawValue.push && rawValue.splice), useElementValue = isRadio || valueIsArray, oldElemValue = valueIsArray ? checkedValue2() : void 0;\n computed(updateModel, null, { disposeWhenNodeIsRemoved: element });\n registerEventHandler(element, \"click\", updateModel);\n computed(updateView, null, { disposeWhenNodeIsRemoved: element });\n rawValue = void 0;\n }\n};\nexport const checkedValue = {\n update: function(element, valueAccessor) {\n element.value = unwrap(valueAccessor());\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n objectForEach,\n registerEventHandler,\n throttle as throttleFn,\n debounce as debounceFn\n} from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nexport function makeEventHandlerShortcut(eventName) {\n return {\n init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {\n const newValueAccessor = function() {\n const result = {};\n result[eventName] = valueAccessor();\n return result;\n };\n eventHandler.init.call(this, element, newValueAccessor, allBindings, viewModel, bindingContext);\n }\n };\n}\nfunction makeDescriptor(handlerOrObject) {\n return typeof handlerOrObject === \"function\" ? { handler: handlerOrObject } : handlerOrObject || {};\n}\nexport const eventHandler = {\n init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {\n const eventsToHandle = valueAccessor() || {};\n objectForEach(eventsToHandle, function(eventName, descriptor) {\n const { passive, capture, once, debounce, throttle } = makeDescriptor(descriptor);\n const eventOptions = (capture || passive || once) && { capture, passive, once };\n let eventHandlerFn = (event, ...more) => {\n let handlerReturnValue;\n const { handler, passive: passive2, bubble, preventDefault } = makeDescriptor(valueAccessor()[eventName]);\n try {\n if (handler) {\n const possiblyUpdatedViewModel = bindingContext.$data;\n const argsForHandler = [possiblyUpdatedViewModel, event, ...more];\n handlerReturnValue = handler.apply(possiblyUpdatedViewModel, argsForHandler);\n }\n } finally {\n if (preventDefault !== void 0) {\n if (unwrap(preventDefault)) {\n event.preventDefault();\n }\n } else if (handlerReturnValue !== true) {\n if (!passive2) {\n event.preventDefault();\n }\n }\n }\n const bubbleMark = allBindings.get(eventName + \"Bubble\") !== false;\n if (bubble === false || !bubbleMark) {\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n };\n if (debounce) {\n eventHandlerFn = debounceFn(eventHandlerFn, debounce);\n }\n if (throttle) {\n eventHandlerFn = throttleFn(eventHandlerFn, throttle);\n }\n registerEventHandler(element, eventName, eventHandlerFn, eventOptions || false);\n });\n }\n};\nexport const onHandler = {\n init: eventHandler.init,\n preprocess: function(value, key, addBinding) {\n addBinding(key.replace(\"on.\", \"\"), \"=>\" + value);\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { makeEventHandlerShortcut } from \"./event\";\nexport const click = makeEventHandlerShortcut(\"click\");\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { createSymbolOrString, toggleDomNodeCssClass, objectForEach, stringTrim } from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nexport const css = {\n aliases: [\"class\"],\n update: function(element, valueAccessor) {\n let value = unwrap(valueAccessor());\n if (value !== null && typeof value === \"object\") {\n objectForEach(value, function(className, shouldHaveClass) {\n shouldHaveClass = unwrap(shouldHaveClass);\n toggleDomNodeCssClass(element, className, shouldHaveClass);\n });\n } else {\n value = stringTrim(String(value || \"\"));\n toggleDomNodeCssClass(element, element[css.classesWrittenByBindingKey], false);\n element[css.classesWrittenByBindingKey] = value;\n toggleDomNodeCssClass(element, value, true);\n }\n },\n classesWrittenByBindingKey: createSymbolOrString(\"__ko__cssValue\")\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { BindingHandler } from \"@tko/bind\";\nexport default class DescendantsCompleteHandler extends BindingHandler {\n onDescendantsComplete() {\n if (typeof this.value === \"function\") {\n this.value(this.$element);\n }\n }\n static get allowVirtualElements() {\n return true;\n }\n}\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { unwrap } from \"@tko/observable\";\nexport const enable = {\n update: function(element, valueAccessor) {\n const value = unwrap(valueAccessor());\n if (value && element.disabled) {\n element.removeAttribute(\"disabled\");\n } else if (!value && !element.disabled) {\n element.disabled = true;\n }\n }\n};\nexport const disable = {\n update: function(element, valueAccessor) {\n enable.update(element, function() {\n return !unwrap(valueAccessor());\n });\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { createSymbolOrString, triggerEvent, registerEventHandler } from \"@tko/utils\";\nimport { unwrap, dependencyDetection, isWriteableObservable } from \"@tko/observable\";\nconst hasfocusUpdatingProperty = createSymbolOrString(\"__ko_hasfocusUpdating\");\nconst hasfocusLastValue = createSymbolOrString(\"__ko_hasfocusLastValue\");\nexport const hasfocus = {\n init: function(element, valueAccessor, _allBindings) {\n const handleElementFocusChange = function(isFocused) {\n element[hasfocusUpdatingProperty] = true;\n const ownerDoc = element.ownerDocument;\n if (\"activeElement\" in ownerDoc) {\n let active;\n try {\n active = ownerDoc.activeElement;\n } catch (e) {\n active = ownerDoc.body;\n }\n isFocused = active === element;\n }\n const modelValue = valueAccessor(isFocused, { onlyIfChanged: true });\n if (isWriteableObservable(modelValue) && modelValue.peek() !== isFocused) {\n modelValue(isFocused);\n }\n element[hasfocusLastValue] = isFocused;\n element[hasfocusUpdatingProperty] = false;\n };\n const handleElementFocusIn = handleElementFocusChange.bind(null, true);\n const handleElementFocusOut = handleElementFocusChange.bind(null, false);\n registerEventHandler(element, \"focus\", handleElementFocusIn);\n registerEventHandler(element, \"focusin\", handleElementFocusIn);\n registerEventHandler(element, \"blur\", handleElementFocusOut);\n registerEventHandler(element, \"focusout\", handleElementFocusOut);\n },\n update: function(element, valueAccessor) {\n const value = !!unwrap(valueAccessor());\n if (!element[hasfocusUpdatingProperty] && element[hasfocusLastValue] !== value) {\n if (value) {\n element.focus();\n } else {\n element.blur();\n }\n if (!value && element[hasfocusLastValue]) {\n element.ownerDocument.body.focus();\n }\n dependencyDetection.ignore(triggerEvent, null, [element, value ? \"focusin\" : \"focusout\"]);\n }\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { setHtml } from \"@tko/utils\";\nexport const html = {\n init: function() {\n return { controlsDescendantBindings: true };\n },\n //\n // Modify internal, per ko.punches and :\n // http://stackoverflow.com/a/15348139\n update: function(element, valueAccessor) {\n setHtml(element, valueAccessor());\n },\n allowVirtualElements: true\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { applyBindingsToDescendants } from \"@tko/bind\";\nexport default {\n init: function(element, valueAccessor, _allBindings, _viewModel, bindingContext) {\n const innerContext = bindingContext[\"extend\"](valueAccessor);\n applyBindingsToDescendants(innerContext, element);\n return { controlsDescendantBindings: true };\n },\n allowVirtualElements: true\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n tagNameLower,\n arrayFilter,\n arrayMap,\n setTextContent,\n arrayIndexOf,\n setOptionNodeSelectionState,\n triggerEvent,\n selectExtensions\n} from \"@tko/utils\";\nimport { unwrap, dependencyDetection } from \"@tko/observable\";\nimport { setDomNodeChildrenFromArrayMapping } from \"@tko/bind\";\nconst captionPlaceholder = {};\nexport const options = {\n init: function(element) {\n if (tagNameLower(element) !== \"select\") {\n throw new Error(\"options binding applies only to SELECT elements\");\n }\n while (element.length > 0) {\n element.remove(0);\n }\n return { controlsDescendantBindings: true };\n },\n update: function(element, valueAccessor, allBindings) {\n function selectedOptions() {\n return arrayFilter(element.options, function(node) {\n return node.selected;\n });\n }\n let selectWasPreviouslyEmpty = element.length == 0, multiple = element.multiple, previousScrollTop = !selectWasPreviouslyEmpty && multiple ? element.scrollTop : null, unwrappedArray = unwrap(valueAccessor()), valueAllowUnset = allBindings.get(\"valueAllowUnset\") && allBindings[\"has\"](\"value\"), includeDestroyed = allBindings.get(\"optionsIncludeDestroyed\"), arrayToDomNodeChildrenOptions = {}, captionValue, filteredArray, previousSelectedValues = new Array();\n if (!valueAllowUnset) {\n if (multiple) {\n previousSelectedValues = arrayMap(selectedOptions(), selectExtensions.readValue);\n } else if (element.selectedIndex >= 0) {\n previousSelectedValues.push(selectExtensions.readValue(element.options[element.selectedIndex]));\n }\n }\n if (unwrappedArray) {\n if (typeof unwrappedArray.length === \"undefined\") {\n unwrappedArray = [unwrappedArray];\n }\n filteredArray = arrayFilter(unwrappedArray, function(item) {\n return includeDestroyed || item === void 0 || item === null || !unwrap(item[\"_destroy\"]);\n });\n if (allBindings[\"has\"](\"optionsCaption\")) {\n captionValue = unwrap(allBindings.get(\"optionsCaption\"));\n if (captionValue !== null && captionValue !== void 0) {\n filteredArray.unshift(captionPlaceholder);\n }\n }\n } else {\n }\n function applyToObject(object, predicate, defaultValue) {\n const predicateType = typeof predicate;\n if (predicateType === \"function\") {\n return predicate(object);\n } else if (predicateType == \"string\") {\n return object[predicate];\n } else {\n return defaultValue;\n }\n }\n let itemUpdate = false;\n function optionForArrayItem(arrayEntry, index, oldOptions) {\n if (oldOptions.length) {\n previousSelectedValues = !valueAllowUnset && oldOptions[0].selected ? [selectExtensions.readValue(oldOptions[0])] : [];\n itemUpdate = true;\n }\n const option = element.ownerDocument.createElement(\"option\");\n if (arrayEntry === captionPlaceholder) {\n setTextContent(option, allBindings.get(\"optionsCaption\"));\n selectExtensions.writeValue(option, void 0);\n } else {\n const optionValue = applyToObject(arrayEntry, allBindings.get(\"optionsValue\"), arrayEntry);\n selectExtensions.writeValue(option, unwrap(optionValue));\n const optionText = applyToObject(arrayEntry, allBindings.get(\"optionsText\"), optionValue);\n setTextContent(option, optionText);\n }\n return [option];\n }\n arrayToDomNodeChildrenOptions[\"beforeRemove\"] = function(option) {\n element.removeChild(option);\n };\n function setSelectionCallback(arrayEntry, newOptions) {\n if (itemUpdate && valueAllowUnset) {\n selectExtensions.writeValue(\n element,\n unwrap(allBindings.get(\"value\")),\n true\n /* allowUnset */\n );\n } else if (previousSelectedValues.length) {\n const isSelected = arrayIndexOf(previousSelectedValues, selectExtensions.readValue(newOptions[0])) >= 0;\n setOptionNodeSelectionState(newOptions[0], isSelected);\n if (itemUpdate && !isSelected) {\n dependencyDetection.ignore(triggerEvent, null, [element, \"change\"]);\n }\n }\n }\n let callback = setSelectionCallback;\n if (allBindings[\"has\"](\"optionsAfterRender\") && typeof allBindings.get(\"optionsAfterRender\") === \"function\") {\n callback = function(arrayEntry, newOptions) {\n setSelectionCallback(arrayEntry, newOptions);\n dependencyDetection.ignore(allBindings.get(\"optionsAfterRender\"), null, [\n newOptions[0],\n arrayEntry !== captionPlaceholder ? arrayEntry : void 0\n ]);\n };\n }\n setDomNodeChildrenFromArrayMapping(\n element,\n filteredArray,\n optionForArrayItem,\n arrayToDomNodeChildrenOptions,\n callback\n );\n dependencyDetection.ignore(function() {\n if (valueAllowUnset) {\n selectExtensions.writeValue(\n element,\n unwrap(allBindings.get(\"value\")),\n true\n /* allowUnset */\n );\n } else {\n let selectionChanged;\n if (multiple) {\n selectionChanged = previousSelectedValues.length && selectedOptions().length < previousSelectedValues.length;\n } else {\n selectionChanged = previousSelectedValues.length && element.selectedIndex >= 0 ? selectExtensions.readValue(element.options[element.selectedIndex]) !== previousSelectedValues[0] : previousSelectedValues.length || element.selectedIndex >= 0;\n }\n if (selectionChanged) {\n triggerEvent(element, \"change\");\n }\n }\n });\n if (previousScrollTop && Math.abs(previousScrollTop - element.scrollTop) > 20) {\n element.scrollTop = previousScrollTop;\n }\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n arrayForEach,\n setOptionNodeSelectionState,\n arrayIndexOf,\n registerEventHandler,\n tagNameLower,\n selectExtensions\n} from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nexport const selectedOptions = {\n after: [\"options\", \"foreach\"],\n init: function(element, valueAccessor, _allBindings) {\n registerEventHandler(element, \"change\", function() {\n const value = valueAccessor(), valueToWrite = new Array();\n arrayForEach(element.getElementsByTagName(\"option\"), function(node) {\n if (node.selected) {\n valueToWrite.push(selectExtensions.readValue(node));\n }\n });\n valueAccessor(valueToWrite);\n });\n },\n update: function(element, valueAccessor) {\n if (tagNameLower(element) != \"select\") {\n throw new Error(\"values binding applies only to SELECT elements\");\n }\n const newValue = unwrap(valueAccessor()), previousScrollTop = element.scrollTop;\n if (newValue && typeof newValue.length === \"number\") {\n arrayForEach(element.getElementsByTagName(\"option\"), function(node) {\n const isSelected = arrayIndexOf(newValue, selectExtensions.readValue(node)) >= 0;\n if (node.selected != isSelected) {\n setOptionNodeSelectionState(node, isSelected);\n }\n });\n }\n element.scrollTop = previousScrollTop;\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { objectForEach, options } from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nexport const style = {\n update: function(element, valueAccessor) {\n const value = unwrap(valueAccessor() || {});\n objectForEach(value, function(styleName, styleValue) {\n styleValue = unwrap(styleValue);\n if (styleValue === null || styleValue === void 0 || styleValue === false) {\n styleValue = \"\";\n }\n if (options.jQuery) {\n jQuery(element).css(styleName, styleValue);\n } else {\n styleName = styleName.replace(/-(\\w)/g, (all, letter) => letter.toUpperCase());\n const previousStyle = element.style[styleName];\n element.style[styleName] = styleValue;\n if (styleValue !== previousStyle && element.style[styleName] === previousStyle && !isNaN(styleValue)) {\n element.style[styleName] = styleValue + \"px\";\n }\n }\n });\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { registerEventHandler } from \"@tko/utils\";\nexport const submit = {\n init: function(element, valueAccessor, _allBindings, _viewModel, bindingContext) {\n if (typeof valueAccessor() !== \"function\") {\n throw new Error(\"The value for a submit binding must be a function\");\n }\n registerEventHandler(element, \"submit\", function(event) {\n let handlerReturnValue;\n const value = valueAccessor();\n try {\n handlerReturnValue = value.call(bindingContext[\"$data\"], element);\n } finally {\n if (handlerReturnValue !== true) {\n if (event.preventDefault) {\n event.preventDefault();\n } else {\n event.returnValue = false;\n }\n }\n }\n });\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { setTextContent } from \"@tko/utils\";\nexport const text = {\n init: function() {\n return { controlsDescendantBindings: true };\n },\n update: function(element, valueAccessor) {\n setTextContent(element, valueAccessor());\n },\n allowVirtualElements: true\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { safeSetTimeout, options, arrayForEach } from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nimport { BindingHandler } from \"@tko/bind\";\nexport const MSIE_REGEX = /MSIE ([^ ;]+)|rv:([^ )]+)/;\nlet operaVersion, safariVersion, firefoxVersion, ieVersion;\nclass TextInput extends BindingHandler {\n get aliases() {\n return \"textinput\";\n }\n constructor(...args) {\n super(...args);\n this.previousElementValue = this.$element.value;\n if (options.debug && this.constructor._forceUpdateOn) {\n arrayForEach(this.constructor._forceUpdateOn, (eventName) => {\n if (eventName.slice(0, 5) === \"after\") {\n this.addEventListener(eventName.slice(5), \"deferUpdateModel\");\n } else {\n this.addEventListener(eventName, \"updateModel\");\n }\n });\n }\n for (const eventName of this.eventsIndicatingSyncValueChange()) {\n this.addEventListener(eventName, \"updateModel\");\n }\n for (const eventName of this.eventsIndicatingDeferValueChange()) {\n this.addEventListener(eventName, \"deferUpdateModel\");\n }\n this.computed(\"updateView\");\n }\n eventsIndicatingSyncValueChange() {\n return [\"input\", \"change\", \"blur\"];\n }\n eventsIndicatingDeferValueChange() {\n return [];\n }\n updateModel(event) {\n const element = this.$element;\n clearTimeout(this.timeoutHandle);\n this.elementValueBeforeEvent = this.timeoutHandle = void 0;\n const elementValue = element.value;\n if (this.previousElementValue !== elementValue) {\n if (options.debug && event) {\n ;\n element._ko_textInputProcessedEvent = event.type;\n }\n this.previousElementValue = elementValue;\n this.value = elementValue;\n }\n }\n deferUpdateModel(event) {\n const element = this.$element;\n if (!this.timeoutHandle) {\n this.elementValueBeforeEvent = element.value;\n const handler = options.debug ? this.updateModel.bind(this, { type: event.type }) : this.updateModel;\n this.timeoutHandle = safeSetTimeout(handler, 4);\n }\n }\n updateView() {\n let modelValue = unwrap(this.value);\n if (modelValue === null || modelValue === void 0) {\n modelValue = \"\";\n }\n if (this.elementValueBeforeEvent !== void 0 && modelValue === this.elementValueBeforeEvent) {\n setTimeout(this.updateView.bind(this), 4);\n } else if (this.$element.value !== modelValue) {\n this.previousElementValue = modelValue;\n this.$element.value = modelValue;\n this.previousElementValue = this.$element.value;\n }\n }\n}\nclass TextInputIE extends TextInput {\n eventsIndicatingSyncValueChange() {\n return [...super.eventsIndicatingSyncValueChange(), \"keypress\"];\n }\n}\nclass TextInputLegacySafari extends TextInput {\n eventsIndicatingDeferValueChange() {\n return [\"keydown\", \"paste\", \"cut\"];\n }\n}\nclass TextInputLegacyOpera extends TextInput {\n eventsIndicatingDeferValueChange() {\n return [\"keydown\"];\n }\n}\nclass TextInputLegacyFirefox extends TextInput {\n eventsIndicatingValueChange() {\n return [\n ...super.eventsIndicatingSyncValueChange(),\n // Firefox <= 3.6 doesn't fire the 'input' event when text is filled in through autocomplete\n \"DOMAutoComplete\",\n // Firefox <=3.5 doesn't fire the 'input' event when text is dropped into the input.\n \"dragdrop\",\n // < 3.5\n \"drop\"\n // 3.5\n ];\n }\n}\nconst w = options.global;\nif (w.navigator) {\n const parseVersion = (matches) => matches && parseFloat(matches[1]);\n const userAgent = w.navigator.userAgent;\n const isChrome = userAgent.match(/Chrome\\/([^ ]+)/);\n if (!isChrome) {\n operaVersion = w.opera && w.opera.version && parseInt(w.opera.version());\n safariVersion = parseVersion(userAgent.match(/Version\\/([^ ]+) Safari/));\n firefoxVersion = parseVersion(userAgent.match(/Firefox\\/([^ ]*)/));\n const ieMatch = userAgent.match(MSIE_REGEX);\n ieVersion = ieMatch && (parseFloat(ieMatch[1]) || parseFloat(ieMatch[2]));\n }\n}\nexport const textInput = ieVersion && ieVersion <= 11 ? TextInputIE : safariVersion && safariVersion < 5 ? TextInputLegacySafari : operaVersion && operaVersion < 11 ? TextInputLegacyOpera : firefoxVersion && firefoxVersion < 4 ? TextInputLegacyFirefox : TextInput;\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nexport const uniqueName = {\n init: function(element, valueAccessor) {\n if (valueAccessor()) {\n const name = \"ko_unique_\" + ++uniqueName.currentIndex;\n element.name = name;\n }\n },\n currentIndex: 0\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { stringStartsWith, safeSetTimeout, tagNameLower, arrayForEach, selectExtensions } from \"@tko/utils\";\nimport { unwrap, dependencyDetection } from \"@tko/observable\";\nimport { applyBindingAccessorsToNode, BindingHandler } from \"@tko/bind\";\nimport { MSIE_REGEX } from \"./textInput\";\nexport class value extends BindingHandler {\n static get after() {\n return [\"options\", \"foreach\", \"template\"];\n }\n constructor(...args) {\n super(...args);\n if (this.isCheckboxOrRadio) {\n applyBindingAccessorsToNode(this.$element, { checkedValue: this.valueAccessor });\n return;\n }\n this.propertyChangedFired = false;\n this.elementValueBeforeEvent = null;\n if (this.ieAutoCompleteHackNeeded) {\n this.addEventListener(\"propertyChange\", () => this.propertyChangedFired = true);\n this.addEventListener(\"focus\", () => this.propertyChangedFired = false);\n this.addEventListener(\"blur\", () => this.propertyChangeFired && this.valueUpdateHandler());\n }\n arrayForEach(this.eventsToCatch, (eventName) => this.registerEvent(eventName));\n if (this.isInput && this.$element.type === \"file\") {\n this.updateFromModel = this.updateFromModelForFile;\n } else {\n this.updateFromModel = this.updateFromModelForValue;\n }\n this.computed(\"updateFromModel\");\n }\n get eventsToCatch() {\n const requestedEventsToCatch = this.allBindings.get(\"valueUpdate\");\n const requestedEventsArray = typeof requestedEventsToCatch === \"string\" ? [requestedEventsToCatch] : requestedEventsToCatch || [];\n return [.../* @__PURE__ */ new Set([\"change\", ...requestedEventsArray])];\n }\n get isInput() {\n return tagNameLower(this.$element) === \"input\";\n }\n get isCheckboxOrRadio() {\n const e = this.$element;\n return this.isInput && (e.type == \"checkbox\" || e.type == \"radio\");\n }\n // Workaround for https://github.com/SteveSanderson/knockout/issues/122\n // IE doesn't fire \"change\" events on textboxes if the user selects a value from its autocomplete list\n get ieAutoCompleteHackNeeded() {\n return this.isInput && this.$element.type == \"text\" && this.$element.autocomplete != \"off\" && (!this.$element.form || this.$element.form.autocomplete != \"off\") && MSIE_REGEX.test(window.navigator.userAgent);\n }\n valueUpdateHandler() {\n this.elementValueBeforeEvent = null;\n this.propertyChangedFired = false;\n this.value = selectExtensions.readValue(this.$element);\n }\n registerEvent(eventName) {\n let handler = this.valueUpdateHandler.bind(this);\n if (stringStartsWith(eventName, \"after\")) {\n handler = () => {\n this.elementValueBeforeEvent = selectExtensions.readValue(this.$element);\n safeSetTimeout(this.valueUpdateHandler.bind(this), 0);\n };\n eventName = eventName.substring(\n 5\n /* 'after'.length */\n );\n }\n this.addEventListener(eventName, handler);\n }\n updateFromModelForFile() {\n const newValue = unwrap(this.value);\n if (newValue === null || newValue === void 0 || newValue === \"\") {\n this.$element.value = \"\";\n } else {\n dependencyDetection.ignore(this.valueUpdateHandler, this);\n }\n }\n updateFromModelForValue() {\n const element = this.$element;\n const newValue = unwrap(this.value);\n const elementValue = selectExtensions.readValue(element);\n if (this.elementValueBeforeEvent !== null && newValue === this.elementValueBeforeEvent) {\n safeSetTimeout(this.updateFromModel.bind(this), 0);\n return;\n }\n if (newValue === elementValue && elementValue !== void 0) {\n return;\n }\n if (tagNameLower(element) === \"select\") {\n const allowUnset = this.allBindings.get(\"valueAllowUnset\");\n selectExtensions.writeValue(element, newValue, allowUnset);\n if (!allowUnset && newValue !== selectExtensions.readValue(element)) {\n dependencyDetection.ignore(this.valueUpdateHandler, this);\n }\n } else {\n selectExtensions.writeValue(element, newValue);\n }\n }\n}\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { unwrap } from \"@tko/observable\";\nexport const visible = {\n update: function(element, valueAccessor) {\n const value = unwrap(valueAccessor());\n const isCurrentlyVisible = !(element.style.display === \"none\");\n if (value && !isCurrentlyVisible) {\n element.style.display = \"\";\n } else if (!value && isCurrentlyVisible) {\n element.style.display = \"none\";\n }\n }\n};\nexport const hidden = {\n update: function(element, valueAccessor) {\n visible.update.call(this, element, () => !unwrap(valueAccessor()));\n }\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { applyBindingsToDescendants } from \"@tko/bind\";\nexport const using = {\n init: function(element, valueAccessor, _allBindings, _viewModel, bindingContext) {\n const innerContext = bindingContext.createChildContext(valueAccessor);\n applyBindingsToDescendants(innerContext, element);\n return { controlsDescendantBindings: true };\n },\n allowVirtualElements: true\n};\n", "// @tko/binding.core \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { attr } from \"./attr\";\nimport { checked, checkedValue } from \"./checked\";\nimport { click } from \"./click\";\nimport { css } from \"./css\";\nimport descendantsComplete from \"./descendantsComplete\";\nimport { enable, disable } from \"./enableDisable\";\nimport { eventHandler, onHandler } from \"./event\";\nimport { hasfocus } from \"./hasfocus\";\nimport { html } from \"./html\";\nimport $let from \"./let\";\nimport { options } from \"./options\";\nimport { selectedOptions } from \"./selectedOptions\";\nimport { style } from \"./style\";\nimport { submit } from \"./submit\";\nimport { text } from \"./text\";\nimport { textInput } from \"./textInput\";\nimport { uniqueName } from \"./uniqueName\";\nimport { value } from \"./value\";\nimport { visible, hidden } from \"./visible\";\nimport { using } from \"./using\";\nexport const bindings = {\n attr,\n checked,\n checkedValue,\n click,\n css,\n class: css,\n descendantsComplete,\n enable,\n event: eventHandler,\n disable,\n hasfocus,\n hasFocus: hasfocus,\n hidden,\n html,\n let: $let,\n on: onHandler,\n options,\n selectedOptions,\n style,\n submit,\n text,\n textInput,\n textinput: textInput,\n uniqueName,\n using,\n value,\n visible\n};\n", "// @tko/binding.if \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { cloneNodes, virtualElements, cleanNode, domData } from \"@tko/utils\";\nimport { dependencyDetection, observable } from \"@tko/observable\";\nimport { applyBindingsToDescendants, AsyncBindingHandler } from \"@tko/bind\";\nexport default class ConditionalBindingHandler extends AsyncBindingHandler {\n get bindingContext() {\n throw new Error(\"bindingContext() must be implemented in the child class\");\n }\n constructor(params) {\n super(params);\n this.hasElse = this.detectElse(this.$element);\n const elseChainSatisfied = this.completesElseChain = observable();\n domData.set(this.$element, \"conditional\", { elseChainSatisfied });\n }\n getIfElseNodes() {\n if (this.ifElseNodes) {\n return this.ifElseNodes;\n }\n if (dependencyDetection.getDependenciesCount() || this.hasElse) {\n return this.cloneIfElseNodes(this.$element, this.hasElse);\n }\n }\n renderStatus() {\n throw new Error(\"renderStatus() must be implemented in the child class\");\n }\n render() {\n const isFirstRender = !this.ifElseNodes;\n const { shouldDisplay } = this.renderStatus();\n this.ifElseNodes = this.getIfElseNodes() || {};\n if (shouldDisplay) {\n const useOriginalNodes = isFirstRender && !this.hasElse;\n this.renderAndApplyBindings(this.ifElseNodes.ifNodes, useOriginalNodes);\n } else if (this.hasElse) {\n this.renderAndApplyBindings(this.ifElseNodes.elseNodes);\n } else {\n virtualElements.emptyNode(this.$element);\n }\n }\n async renderAndApplyBindings(nodes, useOriginalNodes) {\n if (!useOriginalNodes) {\n virtualElements.setDomNodeChildren(this.$element, cloneNodes(nodes));\n }\n const bound = await applyBindingsToDescendants(this.bindingContext, this.$element);\n this.completeBinding(bound);\n }\n /**\n * This may be truthy for the `else` binding.\n */\n get elseChainIsAlreadySatisfied() {\n return false;\n }\n /**\n * Test a node for whether it represents an 'else' condition.\n * @param {HTMLElement} node to be tested\n * @return {Boolean} true when\n *\n * Matches <!-- else -->\n */\n isElseNode(node) {\n return node.nodeType === Node.COMMENT_NODE && node.nodeValue.trim().toLowerCase() === \"else\";\n }\n detectElse(element) {\n const children = virtualElements.childNodes(element);\n for (let i = 0, j = children.length; i < j; ++i) {\n if (this.isElseNode(children[i])) {\n return true;\n }\n }\n return false;\n }\n /**\n * Clone the nodes, returning `ifNodes`, `elseNodes`\n * @param {HTMLElement} element The nodes to be cloned\n * @param {boolean} hasElse short-circuit to speed up the inner-loop.\n * @return {object} Containing the cloned nodes.\n */\n cloneIfElseNodes(element, hasElse) {\n const children = virtualElements.childNodes(element);\n const ifNodes = new Array();\n const elseNodes = new Array();\n let target = ifNodes;\n for (let i = 0, j = children.length; i < j; ++i) {\n if (hasElse && this.isElseNode(children[i])) {\n target = elseNodes;\n hasElse = false;\n } else {\n target.push(cleanNode(children[i].cloneNode(true)));\n }\n }\n return { ifNodes, elseNodes };\n }\n get controlsDescendants() {\n return true;\n }\n static get allowVirtualElements() {\n return true;\n }\n}\n", "// @tko/binding.if \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { unwrap } from \"@tko/observable\";\nimport ConditionalBindingHandler from \"./ConditionalBindingHandler\";\nexport class IfBindingHandler extends ConditionalBindingHandler {\n constructor(...args) {\n super(...args);\n this.ifCondition = this.computed(() => !!unwrap(this.value));\n this.computed(\"render\");\n }\n shouldDisplayIf() {\n return this.ifCondition();\n }\n get bindingContext() {\n return this.ifCondition.isActive() ? this.$context.extend(() => {\n this.ifCondition();\n return null;\n }) : this.$context;\n }\n renderStatus() {\n let shouldDisplay = this.shouldDisplayIf();\n if (this.elseChainIsAlreadySatisfied) {\n shouldDisplay = false;\n this.completesElseChain(true);\n } else {\n this.completesElseChain(shouldDisplay);\n }\n return { shouldDisplay };\n }\n}\nexport class UnlessBindingHandler extends IfBindingHandler {\n shouldDisplayIf() {\n return !super.shouldDisplayIf();\n }\n}\n", "// @tko/binding.if \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { options } from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nimport ConditionalBindingHandler from \"./ConditionalBindingHandler\";\nexport class WithBindingHandler extends ConditionalBindingHandler {\n constructor(...args) {\n super(...args);\n this.asOption = this.allBindings.get(\"as\");\n const conditionalFn = this.asOption && !options.createChildContextWithAs ? () => Boolean(unwrap(this.value)) : () => unwrap(this.value);\n this.conditional = this.computed(conditionalFn);\n this.computed(\"render\");\n }\n get bindingContext() {\n if (!this.asOption) {\n return this.$context.createChildContext(this.valueAccessor);\n }\n return options.createChildContextWithAs ? this.$context.createChildContext(this.value, this.asOption) : this.$context.extend({ [this.asOption]: this.value });\n }\n renderStatus() {\n const shouldDisplay = Boolean(this.conditional());\n return { shouldDisplay };\n }\n}\n", "// @tko/binding.if \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { virtualElements, domData } from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nimport { IfBindingHandler } from \"./ifUnless\";\nexport class ElseBindingHandler extends IfBindingHandler {\n shouldDisplayIf() {\n return super.shouldDisplayIf() || this.value === void 0;\n }\n /**\n * Return any conditional that precedes the given node.\n * @return {object} { elseChainSatisfied: observable }\n */\n get elseChainIsAlreadySatisfied() {\n if (!this._elseChain) {\n this._elseChain = this.readElseChain();\n }\n return unwrap(this._elseChain.elseChainSatisfied);\n }\n readElseChain() {\n let node = this.$element;\n do {\n node = node.previousSibling;\n } while (node && node.nodeType !== Node.ELEMENT_NODE && node.nodeType !== Node.COMMENT_NODE);\n if (!node) {\n return false;\n }\n if (node.nodeType === Node.COMMENT_NODE) {\n node = virtualElements.previousSibling(node);\n }\n return domData.get(node, \"conditional\") || {};\n }\n}\n", "// @tko/binding.if \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { IfBindingHandler, UnlessBindingHandler } from \"./ifUnless\";\nimport { WithBindingHandler } from \"./with\";\nimport { ElseBindingHandler } from \"./else\";\nexport const bindings = {\n if: IfBindingHandler,\n with: WithBindingHandler,\n ifnot: UnlessBindingHandler,\n unless: UnlessBindingHandler,\n else: ElseBindingHandler,\n elseif: ElseBindingHandler\n};\n", "// @tko/binding.foreach \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport {\n arrayForEach,\n cleanNode,\n options,\n virtualElements,\n createSymbolOrString,\n domData,\n domNodeIsContainedBy\n} from \"@tko/utils\";\nimport { isObservable, unwrap, observable } from \"@tko/observable\";\nimport { contextFor, applyBindingsToDescendants, AsyncBindingHandler } from \"@tko/bind\";\nconst MAX_LIST_SIZE = 9007199254740991;\nfunction isPlainObject(o) {\n return !!o && typeof o === \"object\" && o.constructor === Object;\n}\nconst supportsDocumentFragment = options.document && typeof options.document.createDocumentFragment === \"function\";\nfunction makeTemplateNode(sourceNode) {\n const container = document.createElement(\"div\");\n let parentNode;\n if (sourceNode.content) {\n parentNode = sourceNode.content;\n } else if (sourceNode.tagName === \"SCRIPT\") {\n parentNode = document.createElement(\"div\");\n parentNode.innerHTML = sourceNode.text;\n } else {\n parentNode = sourceNode;\n }\n arrayForEach(virtualElements.childNodes(parentNode), function(child) {\n if (child) {\n container.insertBefore(child.cloneNode(true), null);\n }\n });\n return container;\n}\nfunction valueToChangeAddItem(value, index) {\n return { status: \"added\", value, index };\n}\nconst PENDING_DELETE_INDEX_SYM = createSymbolOrString(\"_ko_ffe_pending_delete_index\");\nexport class ForEachBinding extends AsyncBindingHandler {\n constructor(params) {\n super(params);\n const settings = {};\n if (isPlainObject(this.value)) {\n Object.assign(settings, this.value);\n }\n this.as = settings.as || this.allBindings.get(\"as\");\n this.data = settings.data || (unwrap(this.$context.$rawData) === this.value ? this.$context.$rawData : this.value);\n this.container = virtualElements.isStartComment(this.$element) ? this.$element.parentNode : this.$element;\n this.generateContext = this.createContextGenerator(this.as);\n this.$indexHasBeenRequested = false;\n this.templateNode = makeTemplateNode(\n settings.templateNode || (settings.name ? document.getElementById(settings.name)?.cloneNode(true) : this.$element)\n );\n [\"afterAdd\", \"beforeRemove\", \"afterQueueFlush\", \"beforeQueueFlush\"].forEach((p) => {\n this[p] = settings[p] || this.allBindings.get(p);\n });\n this.changeQueue = new Array();\n this.firstLastNodesList = new Array();\n this.indexesToDelete = new Array();\n this.rendering_queued = false;\n this.pendingDeletes = new Array();\n this.isNotEmpty = observable(Boolean(unwrap(this.data).length));\n domData.set(this.$element, \"conditional\", { elseChainSatisfied: this.isNotEmpty });\n virtualElements.emptyNode(this.$element);\n const primeData = unwrap(this.data);\n if (primeData && primeData.map) {\n this.onArrayChange(primeData.map(valueToChangeAddItem), true);\n } else {\n this.completeBinding();\n }\n if (isObservable(this.data)) {\n if (!this.data.indexOf) {\n this.data = this.data.extend({ trackArrayChanges: true });\n }\n this.changeSubs = this.data.subscribe(this.onArrayChange, this, \"arrayChange\");\n }\n }\n dispose() {\n if (this.changeSubs) {\n this.changeSubs.dispose();\n }\n this.flushPendingDeletes();\n }\n // If the array changes we register the change.\n onArrayChange(changeSet, isInitial) {\n const changeMap = { added: [], deleted: [] };\n for (let i = 0, len = changeSet.length; i < len; i++) {\n if (changeMap.added.length && changeSet[i].status === \"added\") {\n let lastAdd = changeMap.added[changeMap.added.length - 1];\n const lastIndex = lastAdd.isBatch ? lastAdd.index + lastAdd.values.length - 1 : lastAdd.index;\n if (lastIndex + 1 === changeSet[i].index) {\n if (!lastAdd.isBatch) {\n lastAdd = { isBatch: true, status: \"added\", index: lastAdd.index, values: [lastAdd.value] };\n changeMap.added.splice(changeMap.added.length - 1, 1, lastAdd);\n }\n lastAdd.values.push(changeSet[i].value);\n continue;\n }\n }\n changeMap[changeSet[i].status].push(changeSet[i]);\n }\n if (changeMap.deleted.length > 0) {\n this.changeQueue.push.apply(this.changeQueue, changeMap.deleted);\n this.changeQueue.push({ status: \"clearDeletedIndexes\" });\n }\n this.changeQueue.push.apply(this.changeQueue, changeMap.added);\n if (this.changeQueue.length > 0 && !this.rendering_queued) {\n this.rendering_queued = true;\n if (isInitial) {\n this.processQueue();\n } else {\n ForEachBinding.animateFrame.call(window, () => this.processQueue());\n }\n }\n }\n startQueueFlush() {\n if (typeof this.beforeQueueFlush === \"function\") {\n this.beforeQueueFlush(this.changeQueue);\n }\n }\n endQueueFlush() {\n if (typeof this.afterQueueFlush === \"function\") {\n this.afterQueueFlush(this.changeQueue);\n }\n }\n // Reflect all the changes in the queue in the DOM, then wipe the queue.\n processQueue() {\n const isEmpty = !unwrap(this.data).length;\n let lowestIndexChanged = MAX_LIST_SIZE;\n this.startQueueFlush();\n arrayForEach(this.changeQueue, (changeItem) => {\n if (typeof changeItem.index === \"number\") {\n lowestIndexChanged = Math.min(lowestIndexChanged, changeItem.index);\n }\n this[changeItem.status](changeItem);\n });\n this.flushPendingDeletes();\n this.rendering_queued = false;\n if (this.$indexHasBeenRequested) {\n this.updateIndexes(lowestIndexChanged);\n }\n this.endQueueFlush();\n this.changeQueue = new Array();\n if (isEmpty !== !this.isNotEmpty()) {\n this.isNotEmpty(!isEmpty);\n }\n }\n /**\n * Once the $index has been asked for once, start calculating it.\n * Note that this significantly degrades performance, from O(1) to O(n)\n * for arbitrary changes to the list.\n */\n _first$indexRequest(ctx$indexRequestedFrom) {\n this.$indexHasBeenRequested = true;\n for (let i = 0, len = this.firstLastNodesList.length; i < len; ++i) {\n const ctx = this.getContextStartingFrom(this.firstLastNodesList[i].first);\n if (ctx) {\n ctx.$index = observable(i);\n }\n }\n return ctx$indexRequestedFrom.$index();\n }\n _contextExtensions($ctx) {\n Object.assign($ctx, { $list: this.data });\n if (this.$indexHasBeenRequested) {\n $ctx.$index = $ctx.$index || observable();\n } else {\n Object.defineProperty($ctx, \"$index\", {\n value: () => this._first$indexRequest($ctx),\n configurable: true,\n writable: true\n });\n }\n return $ctx;\n }\n /**\n * Return a function that generates the context for a given node.\n *\n * We generate a single function that reduces our inner-loop calculations,\n * which has a good chance of being optimized by the browser.\n *\n * @param {string} as The name given to each item in the list\n * @param {bool} index Whether to calculate indexes\n * @return {function} A function(dataValue) that returns the context\n */\n createContextGenerator(as) {\n const $ctx = this.$context;\n if (as) {\n return (v) => this._contextExtensions($ctx.extend({ [as]: v }));\n } else {\n return (v) => $ctx.createChildContext(v, void 0, (ctx) => this._contextExtensions(ctx));\n }\n }\n updateFirstLastNodesList(index, children) {\n const first = children[0];\n const last = children[children.length - 1];\n this.firstLastNodesList.splice(index, 0, { first, last });\n }\n // Process a changeItem with {status: 'added', ...}\n added(changeItem) {\n const index = changeItem.index;\n const valuesToAdd = changeItem.isBatch ? changeItem.values : [changeItem.value];\n const referenceElement = this.getLastNodeBeforeIndex(index);\n const allChildNodes = [];\n const asyncBindingResults = new Array();\n let children;\n for (let i = 0, len = valuesToAdd.length; i < len; ++i) {\n const pendingDelete = this.getPendingDeleteFor(valuesToAdd[i]);\n if (pendingDelete && pendingDelete.nodesets.length) {\n children = pendingDelete.nodesets.pop();\n this.updateFirstLastNodesList(index + i, children);\n } else {\n const templateClone = this.templateNode.cloneNode(true);\n children = virtualElements.childNodes(templateClone);\n this.updateFirstLastNodesList(index + i, children);\n const bindingResult = applyBindingsToDescendants(this.generateContext(valuesToAdd[i]), templateClone);\n asyncBindingResults.push(bindingResult);\n }\n allChildNodes.push(...children);\n }\n if (typeof this.afterAdd === \"function\") {\n this.afterAdd({\n nodeOrArrayInserted: this.insertAllAfter(allChildNodes, referenceElement),\n foreachInstance: this\n });\n } else {\n this.insertAllAfter(allChildNodes, referenceElement);\n }\n this.completeBinding(Promise.all(asyncBindingResults));\n }\n getNodesForIndex(index) {\n const result = new Array();\n let ptr = this.firstLastNodesList[index].first;\n const last = this.firstLastNodesList[index].last;\n result.push(ptr);\n while (ptr && ptr !== last) {\n ptr = ptr.nextSibling;\n result.push(ptr);\n }\n return result;\n }\n getLastNodeBeforeIndex(index) {\n if (index < 1 || index - 1 >= this.firstLastNodesList.length) {\n return null;\n }\n return this.firstLastNodesList[index - 1].last;\n }\n /**\n * Get the active (focused) node, if it's a child of the given node.\n */\n activeChildElement(node) {\n const active = document.activeElement;\n if (domNodeIsContainedBy(active, node)) {\n return active;\n }\n return null;\n }\n insertAllAfter(nodeOrNodeArrayToInsert, insertAfterNode) {\n let frag;\n let len;\n let i;\n let active = null;\n const containerNode = this.$element;\n if (nodeOrNodeArrayToInsert.nodeType === void 0 && nodeOrNodeArrayToInsert.length === void 0) {\n throw new Error(\"Expected a single node or a node array\");\n }\n if (nodeOrNodeArrayToInsert.nodeType !== void 0) {\n active = this.activeChildElement(nodeOrNodeArrayToInsert);\n virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode);\n return [nodeOrNodeArrayToInsert];\n } else if (nodeOrNodeArrayToInsert.length === 1) {\n active = this.activeChildElement(nodeOrNodeArrayToInsert[0]);\n virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert[0], insertAfterNode);\n } else if (supportsDocumentFragment) {\n frag = document.createDocumentFragment();\n for (i = 0, len = nodeOrNodeArrayToInsert.length; i !== len; ++i) {\n active = active || this.activeChildElement(nodeOrNodeArrayToInsert[i]);\n frag.appendChild(nodeOrNodeArrayToInsert[i]);\n }\n virtualElements.insertAfter(containerNode, frag, insertAfterNode);\n } else {\n for (i = nodeOrNodeArrayToInsert.length - 1; i >= 0; --i) {\n active = active || this.activeChildElement(nodeOrNodeArrayToInsert[i]);\n const child = nodeOrNodeArrayToInsert[i];\n if (!child) {\n break;\n }\n virtualElements.insertAfter(containerNode, child, insertAfterNode);\n }\n }\n if (active) {\n active.focus();\n }\n return nodeOrNodeArrayToInsert;\n }\n // checks if the deleted data item should be handled with delay for a possible reuse at additions\n shouldDelayDeletion(data) {\n return data && (typeof data === \"object\" || typeof data === \"function\");\n }\n // gets the pending deletion info for this data item\n getPendingDeleteFor(data) {\n const index = data && data[PENDING_DELETE_INDEX_SYM];\n if (index === void 0) return null;\n return this.pendingDeletes[index];\n }\n // tries to find the existing pending delete info for this data item, and if it can't, it registeres one\n getOrCreatePendingDeleteFor(data) {\n let pd = this.getPendingDeleteFor(data);\n if (pd) {\n return pd;\n }\n pd = { data, nodesets: [] };\n data[PENDING_DELETE_INDEX_SYM] = this.pendingDeletes.length;\n this.pendingDeletes.push(pd);\n return pd;\n }\n // Process a changeItem with {status: 'deleted', ...}\n deleted(changeItem) {\n if (this.shouldDelayDeletion(changeItem.value)) {\n const pd = this.getOrCreatePendingDeleteFor(changeItem.value);\n pd.nodesets.push(this.getNodesForIndex(changeItem.index));\n } else {\n this.removeNodes(this.getNodesForIndex(changeItem.index));\n }\n this.indexesToDelete.push(changeItem.index);\n }\n // removes a set of nodes from the DOM\n removeNodes(nodes) {\n if (!nodes.length) {\n return;\n }\n function removeFn() {\n const parent = nodes[0].parentNode;\n for (let i = nodes.length - 1; i >= 0; --i) {\n cleanNode(nodes[i]);\n parent.removeChild(nodes[i]);\n }\n }\n if (this.beforeRemove) {\n const beforeRemoveReturn = this.beforeRemove({ nodesToRemove: nodes, foreachInstance: this }) || {};\n if (typeof beforeRemoveReturn.then === \"function\") {\n beforeRemoveReturn.then(removeFn, options.onError);\n }\n } else {\n removeFn();\n }\n }\n // flushes the pending delete info store\n // this should be called after queue processing has finished, so that data items and remaining (not reused) nodesets get cleaned up\n // we also call it on dispose not to leave any mess\n flushPendingDeletes() {\n for (let i = 0, len = this.pendingDeletes.length; i !== len; ++i) {\n const pd = this.pendingDeletes[i];\n while (pd.nodesets.length) {\n this.removeNodes(pd.nodesets.pop());\n }\n if (pd.data && pd.data[PENDING_DELETE_INDEX_SYM] !== void 0) {\n delete pd.data[PENDING_DELETE_INDEX_SYM];\n }\n }\n this.pendingDeletes = new Array();\n }\n // We batch our deletion of item indexes in our parallel array.\n // See brianmhunt/knockout-fast-foreach#6/#8\n clearDeletedIndexes() {\n for (let i = this.indexesToDelete.length - 1; i >= 0; --i) {\n this.firstLastNodesList.splice(this.indexesToDelete[i], 1);\n }\n this.indexesToDelete = new Array();\n }\n updateIndexes(fromIndex) {\n let ctx;\n for (let i = fromIndex, len = this.firstLastNodesList.length; i < len; ++i) {\n ctx = this.getContextStartingFrom(this.firstLastNodesList[i].first);\n if (ctx) {\n ctx.$index(i);\n }\n }\n }\n getContextStartingFrom(node) {\n let ctx;\n while (node) {\n ctx = contextFor(node);\n if (ctx) {\n return ctx;\n }\n node = node.nextSibling;\n }\n }\n /**\n * Set whether the binding is always synchronous.\n * Useful during testing.\n */\n static setSync(toggle) {\n const w = options.global;\n if (toggle) {\n ForEachBinding.animateFrame = function(frame) {\n frame();\n };\n } else {\n ForEachBinding.animateFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.mozRequestAnimationFrame || w.msRequestAnimationFrame || function(cb) {\n return w.setTimeout(cb, 1e3 / 60);\n };\n }\n }\n get controlsDescendants() {\n return true;\n }\n static get allowVirtualElements() {\n return true;\n }\n /* TODO: Remove; for legacy/testing */\n static get ForEach() {\n return this;\n }\n static get PENDING_DELETE_INDEX_SYM() {\n return PENDING_DELETE_INDEX_SYM;\n }\n}\n", "// @tko/binding.foreach \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { ForEachBinding } from \"./foreach\";\nexport const bindings = { foreach: ForEachBinding };\nForEachBinding.setSync(false);\n", "// @tko/provider.native \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { isObservable } from \"@tko/observable\";\nimport { Provider } from \"@tko/provider\";\nexport const NATIVE_BINDINGS = /* @__PURE__ */ Symbol(\"Knockout native bindings\");\nexport default class NativeProvider extends Provider {\n get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE, Node.TEXT_NODE];\n }\n get preemptive() {\n return true;\n }\n nodeHasBindings(node, context) {\n if (!node[NATIVE_BINDINGS]) {\n return false;\n }\n return Object.keys(node[NATIVE_BINDINGS] || {}).some((key) => key.startsWith(\"ko-\"));\n }\n /**\n * There can be only one preprocessor; when there are native bindings,\n * prevent re-entrance (and likely XSS) from the `{{ }}` provider.\n */\n preprocessNode(node) {\n return node[NATIVE_BINDINGS] ? [node] : null;\n }\n onlyBindings([name]) {\n return name.startsWith(\"ko-\");\n }\n valueAsAccessor([name, value]) {\n const bindingName = name.replace(/^ko-/, \"\");\n const valueFn = isObservable(value) ? value : () => value;\n return { [bindingName]: valueFn };\n }\n /**\n * Return as valueAccessor function all the entries matching `ko-*`\n * @param {Node} node\n */\n getBindingAccessors(node, context) {\n const bindings = Object.entries(node[NATIVE_BINDINGS] || {}).filter(this.onlyBindings);\n if (!bindings.length) {\n return null;\n }\n return Object.assign({}, ...bindings.map(this.valueAsAccessor));\n }\n /**\n * Add a named-value to the given node.\n * @param {Node} node\n * @param {string} name\n * @param {any} value\n */\n static addValueToNode(node, name, value) {\n const obj = node[NATIVE_BINDINGS] || (node[NATIVE_BINDINGS] = {});\n obj[name] = value;\n }\n /**\n *\n * @param {Node} node\n * @return {object} the stored values\n */\n static getNodeValues(node) {\n return node[NATIVE_BINDINGS];\n }\n}\n", "// @tko/utils.jsx \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { cleanNode } from \"@tko/utils\";\nconst DELAY_MS = 25;\nconst MAX_CLEAN_AT_ONCE = 1e3;\nconst cleanNodeQueue = new Array();\nlet cleanNodeTimeoutID = null;\nexport function queueCleanNode(node) {\n cleanNodeQueue.push(node);\n triggerCleanTimeout();\n}\nfunction triggerCleanTimeout() {\n if (!cleanNodeTimeoutID && cleanNodeQueue.length) {\n cleanNodeTimeoutID = setTimeout(flushCleanQueue, DELAY_MS);\n }\n}\nfunction flushCleanQueue() {\n cleanNodeTimeoutID = null;\n const nodes = cleanNodeQueue.splice(0, MAX_CLEAN_AT_ONCE);\n for (const node of nodes) {\n cleanNode(node);\n }\n triggerCleanTimeout();\n}\n", "// @tko/utils.jsx \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { LifeCycle } from \"@tko/lifecycle\";\nimport { safeStringify, isThenable } from \"@tko/utils\";\nimport { applyBindings, contextFor } from \"@tko/bind\";\nimport { isObservable, unwrap, observable } from \"@tko/observable\";\nimport { isComputed } from \"@tko/computed\";\nimport { NativeProvider, NATIVE_BINDINGS } from \"@tko/provider.native\";\nimport { queueCleanNode } from \"./jsxClean\";\nexport const ORIGINAL_JSX_SYM = /* @__PURE__ */ Symbol(\"Knockout - Original JSX\");\nconst NAMESPACES = {\n svg: \"http://www.w3.org/2000/svg\",\n html: \"http://www.w3.org/1999/xhtml\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\nfunction isIterable(v) {\n return v && typeof v[Symbol.iterator] === \"function\";\n}\nexport class JsxObserver extends LifeCycle {\n /**\n * @param {any} jsxOrObservable take a long list of permutations\n */\n constructor(jsxOrObservable, parentNode, insertBefore = null, xmlns, noInitialBinding) {\n super();\n const parentNodeIsComment = parentNode.nodeType === Node.COMMENT_NODE;\n const parentNodeTarget = this.getParentTarget(parentNode);\n if (isObservable(jsxOrObservable)) {\n jsxOrObservable.extend({ trackArrayChanges: true });\n this.subscribe(jsxOrObservable, this.observableArrayChange, \"arrayChange\");\n if (!insertBefore) {\n const insertAt = parentNodeIsComment ? parentNode.nextSibling : null;\n insertBefore = this.createComment(\"O\");\n parentNodeTarget?.insertBefore(insertBefore, insertAt);\n } else {\n this.adoptedInsertBefore = true;\n }\n }\n if (parentNodeIsComment && !insertBefore) {\n insertBefore = parentNode.nextSibling;\n this.adoptedInsertBefore = true;\n }\n this.anchorTo(insertBefore || parentNode);\n Object.assign(this, {\n insertBefore,\n noInitialBinding,\n parentNode,\n parentNodeTarget,\n xmlns,\n nodeArrayOrObservableAtIndex: [],\n subscriptionsForNode: /* @__PURE__ */ new Map()\n });\n const jsx = unwrap(jsxOrObservable);\n const computed = isComputed(jsxOrObservable);\n if (computed || jsx !== null && jsx !== void 0) {\n this.observableArrayChange(this.createInitialAdditions(jsx));\n }\n this.noInitialBinding = false;\n }\n getParentTarget(parentNode) {\n if (\"content\" in parentNode) {\n return parentNode.content;\n }\n if (parentNode.nodeType === Node.COMMENT_NODE) {\n return parentNode.parentNode;\n }\n return parentNode;\n }\n remove() {\n this.dispose();\n }\n dispose() {\n super.dispose();\n const ib = this.insertBefore;\n const insertBeforeIsChild = ib && this.parentNodeTarget === ib.parentNode;\n if (insertBeforeIsChild && !this.adoptedInsertBefore) {\n this.parentNodeTarget?.removeChild(ib);\n }\n this.removeAllPriorNodes();\n Object.assign(this, {\n parentNode: null,\n parentNodeTarget: null,\n insertBefore: null,\n nodeArrayOrObservableAtIndex: []\n });\n for (const subscriptions of this.subscriptionsForNode.values()) {\n subscriptions.forEach((s) => s.dispose());\n }\n this.subscriptionsForNode.clear();\n }\n createInitialAdditions(possibleIterable) {\n const status = \"added\";\n if (typeof possibleIterable === \"object\" && possibleIterable !== null && Symbol.iterator in possibleIterable) {\n possibleIterable = [...possibleIterable];\n }\n return Array.isArray(possibleIterable) ? possibleIterable.map((value, index) => ({ index, status, value })) : [{ status, index: 0, value: possibleIterable }];\n }\n /**\n * Note: array change notification indexes are:\n * - to the original array indexes for deletes\n * - to the new array indexes for adds\n * - sorted by index in ascending order\n */\n observableArrayChange(changes) {\n const adds = [];\n const dels = [];\n for (const index in changes) {\n const change = changes[index];\n if (change.status === \"added\") {\n adds.push([change.index, change.value]);\n } else {\n dels.unshift([change.index, change.value]);\n }\n }\n dels.forEach((change) => this.delChange(...change));\n adds.forEach((change) => this.addChange(...change));\n }\n /**\n * Add a change at the given index.\n *\n * @param {int} index\n * @param {string|object|Array|Observable.string|Observable.Array|Observable.object} jsx\n */\n addChange(index, jsx) {\n this.nodeArrayOrObservableAtIndex.splice(index, 0, this.injectNode(jsx, this.lastNodeFor(index)));\n }\n injectNode(jsx, nextNode) {\n let nodeArrayOrObservable;\n if (isObservable(jsx)) {\n const { parentNode, xmlns } = this;\n const observer = new JsxObserver(jsx, parentNode, nextNode, xmlns, this.noInitialBinding);\n nodeArrayOrObservable = [observer];\n } else if (typeof jsx !== \"string\" && isIterable(jsx)) {\n nodeArrayOrObservable = new Array();\n for (const child of jsx) {\n nodeArrayOrObservable.unshift(this.injectNode(child, nextNode));\n }\n } else {\n const $context = contextFor(this.parentNode);\n const isInsideTemplate = \"content\" in this.parentNode;\n const shouldApplyBindings = $context && !isInsideTemplate && !this.noInitialBinding;\n if (Array.isArray(jsx)) {\n nodeArrayOrObservable = jsx.map((j) => this.anyToNode(j));\n } else {\n nodeArrayOrObservable = [this.anyToNode(jsx)];\n }\n for (const node of nodeArrayOrObservable) {\n this.parentNodeTarget?.insertBefore(node, nextNode);\n if (shouldApplyBindings && this.canApplyBindings(node)) {\n applyBindings($context, node);\n }\n }\n }\n return nodeArrayOrObservable;\n }\n /**\n * True when Node is a type suitable for applyBindings i.e. a HTMLElement\n * or a Comment.\n * @param {Node} node\n */\n canApplyBindings(node) {\n return node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE;\n }\n delChange(index, _) {\n this.removeNodeArrayOrObservable(this.nodeArrayOrObservableAtIndex[index]);\n this.nodeArrayOrObservableAtIndex.splice(index, 1);\n }\n getSubscriptionsForNode(node) {\n if (!this.subscriptionsForNode.has(node)) {\n const subscriptions = new Array();\n this.subscriptionsForNode.set(node, subscriptions);\n return subscriptions;\n }\n return this.subscriptionsForNode.get(node);\n }\n isJsx(jsx) {\n return typeof jsx.elementName === \"string\" && \"children\" in jsx && \"attributes\" in jsx;\n }\n /**\n * @param {any} value acceptable to turn into a Node\n *\n * The one thing `any` cannot be here is an Array or Observable; both those\n * cases are handled with new JsxObservers.\n */\n anyToNode(any) {\n if (isThenable(any)) {\n return this.futureJsxNode(any);\n }\n switch (typeof any) {\n case \"object\":\n if (any instanceof Error) {\n return this.createComment(any.toString());\n }\n if (any === null) {\n return this.createComment(String(any));\n }\n if (any instanceof Node) {\n return this.cloneJSXorMoveNode(any);\n }\n if (Symbol.iterator in any) {\n return any;\n }\n break;\n case \"function\":\n return this.anyToNode(any());\n case \"undefined\":\n case \"symbol\":\n return this.createComment(String(any));\n case \"string\":\n return this.createTextNode(any);\n case \"boolean\":\n case \"number\":\n case \"bigint\":\n default:\n return this.createTextNode(String(any));\n }\n return this.isJsx(any) ? this.jsxToNode(any) : this.createComment(safeStringify(any));\n }\n createComment(string) {\n const node = document.createComment(string);\n node[NATIVE_BINDINGS] = true;\n return node;\n }\n createTextNode(string) {\n const node = document.createTextNode(string);\n node[NATIVE_BINDINGS] = true;\n return node;\n }\n /**\n * Clone a node; if that node was originally from JSX, we clone from there\n * so we preserve binding handlers.\n *\n * @param {HTMLElement} node\n */\n cloneJSXorMoveNode(node) {\n return ORIGINAL_JSX_SYM in node ? this.jsxToNode(node[ORIGINAL_JSX_SYM]) : node;\n }\n /**\n * @param {JSX} jsx to convert to a node.\n */\n jsxToNode(jsx) {\n const xmlns = jsx.attributes.xmlns || NAMESPACES[jsx.elementName] || this.xmlns;\n const node = document.createElementNS(xmlns || NAMESPACES.html, jsx.elementName);\n node[ORIGINAL_JSX_SYM] = jsx;\n if (isObservable(jsx.attributes)) {\n const subscriptions = this.getSubscriptionsForNode(node);\n subscriptions.push(\n jsx.attributes.subscribe((attrs) => {\n this.updateAttributes(node, unwrap(attrs));\n })\n );\n }\n this.updateAttributes(node, unwrap(jsx.attributes));\n this.addDisposable(new JsxObserver(jsx.children, node, null, xmlns, this.noInitialBinding));\n return node;\n }\n futureJsxNode(promise) {\n const obs = observable();\n promise.then(obs).catch((e) => obs(e instanceof Error ? e : Error(e)));\n const jo = new JsxObserver(obs, this.parentNode, null, this.xmlns, this.noInitialBinding);\n this.addDisposable(jo);\n return jo.insertBefore;\n }\n updateAttributes(node, attributes) {\n const subscriptions = this.getSubscriptionsForNode(node);\n const toRemove = new Set([...node.attributes].map((n) => n.name));\n for (const [name, value] of Object.entries(attributes || {})) {\n toRemove.delete(name);\n if (isObservable(value)) {\n subscriptions.push(value.subscribe((attr) => this.setNodeAttribute(node, name, value)));\n }\n this.setNodeAttribute(node, name, value);\n }\n for (const name of toRemove) {\n this.setNodeAttribute(node, name, void 0);\n }\n }\n /**\n * See https://stackoverflow.com/a/52572048\n * @param {string} attr element attribute\n * @return {string} namespace argument for setAtttributeNS\n */\n getNamespaceOfAttribute(attr) {\n const [prefix, ...unqualifiedName] = attr.split(\":\");\n if (prefix === \"xmlns\" || unqualifiedName.length && NAMESPACES[prefix]) {\n return NAMESPACES[prefix];\n }\n return null;\n }\n /**\n *\n * @param {HTMLElement} node\n * @param {string} name\n * @param {any} valueOrObservable\n */\n setNodeAttribute(node, name, valueOrObservable) {\n const value = unwrap(valueOrObservable);\n NativeProvider.addValueToNode(node, name, valueOrObservable);\n if (value === void 0) {\n node.removeAttributeNS(null, name);\n } else if (isThenable(valueOrObservable)) {\n Promise.resolve(valueOrObservable).then((v) => this.setNodeAttribute(node, name, v));\n } else {\n const ns = this.getNamespaceOfAttribute(name);\n node.setAttributeNS(ns, name, String(value));\n }\n }\n /**\n * @param {int} index\n * @return {Comment} that immediately precedes this.\n */\n lastNodeFor(index) {\n const nodesAtIndex = this.nodeArrayOrObservableAtIndex[index] || [];\n const [lastNodeOfPrior] = nodesAtIndex.slice(-1);\n const insertBefore = lastNodeOfPrior instanceof JsxObserver ? lastNodeOfPrior.insertBefore : lastNodeOfPrior || this.insertBefore;\n if (insertBefore) {\n return insertBefore.parentNode ? insertBefore : null;\n }\n return null;\n }\n removeAllPriorNodes() {\n const { nodeArrayOrObservableAtIndex } = this;\n while (nodeArrayOrObservableAtIndex.length) {\n this.removeNodeArrayOrObservable(nodeArrayOrObservableAtIndex.pop());\n }\n }\n removeNodeArrayOrObservable(nodeArrayOrObservable) {\n for (const nodeOrObservable of nodeArrayOrObservable) {\n if (nodeOrObservable instanceof JsxObserver) {\n nodeOrObservable.dispose();\n continue;\n }\n const node = nodeOrObservable;\n delete node[ORIGINAL_JSX_SYM];\n this.detachAndDispose(node);\n const subscriptions = this.subscriptionsForNode.get(node);\n if (subscriptions) {\n subscriptions.forEach((s) => s.dispose());\n this.subscriptionsForNode.delete(node);\n }\n }\n }\n /**\n * Detach the given node, and dispose of its children.\n *\n * The cleaning can trigger a lot of garbage collection, so we defer that.\n */\n detachAndDispose(node) {\n if (isIterable(node)) {\n for (const child of node) {\n this.detachAndDispose(child);\n }\n } else {\n node.remove();\n }\n queueCleanNode(node);\n }\n}\nexport default JsxObserver;\n", "// @tko/utils.jsx \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { isObservable, unwrap } from \"@tko/observable\";\nimport { ORIGINAL_JSX_SYM } from \"./JsxObserver\";\nexport function maybeJsx(possibleJsx) {\n if (isObservable(possibleJsx)) {\n return true;\n }\n const value = unwrap(possibleJsx);\n if (!value) {\n return false;\n }\n if (value.elementName) {\n return true;\n }\n if (!Array.isArray(value) || !value.length) {\n return false;\n }\n if (value[0] instanceof window.Node) {\n return false;\n }\n return true;\n}\nexport function getOriginalJsxForNode(node) {\n return node[ORIGINAL_JSX_SYM];\n}\nexport function createElement(elementName, attributes, ...children) {\n return elementName === Fragment ? children : { elementName, attributes: attributes || {}, children: [...children] };\n}\nexport const Fragment = /* @__PURE__ */ Symbol(\"JSX Fragment\");\n", "// @tko/binding.component \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { virtualElements, makeArray, cloneNodes } from \"@tko/utils\";\nimport { unwrap } from \"@tko/observable\";\nimport { DescendantBindingHandler } from \"@tko/bind\";\nimport { JsxObserver, maybeJsx } from \"@tko/utils.jsx\";\nimport { NativeProvider } from \"@tko/provider.native\";\nimport { LifeCycle } from \"@tko/lifecycle\";\nimport registry from \"@tko/utils.component\";\nlet componentLoadingOperationUniqueId = 0;\nexport default class ComponentBinding extends DescendantBindingHandler {\n constructor(params) {\n super(params);\n this.originalChildNodes = makeArray(virtualElements.childNodes(this.$element));\n this.computed(\"computeApplyComponent\");\n }\n cloneTemplateIntoElement(componentName, template, element) {\n if (!template) {\n throw new Error(\"Component '\" + componentName + \"' has no template\");\n }\n if (maybeJsx(template)) {\n virtualElements.emptyNode(element);\n this.addDisposable(new JsxObserver(template, element, null, void 0, true));\n } else {\n const clonedNodesArray = cloneNodes(template);\n virtualElements.setDomNodeChildren(element, clonedNodesArray);\n }\n }\n createViewModel(componentDefinition, element, originalChildNodes, componentParams) {\n const componentViewModelFactory = componentDefinition.createViewModel;\n return componentViewModelFactory ? componentViewModelFactory.call(componentDefinition, componentParams, {\n element,\n templateNodes: originalChildNodes\n }) : componentParams;\n }\n /**\n * Return the $componentTemplateSlotNodes for the given template\n * @param {HTMLElement|jsx} template\n */\n makeTemplateSlotNodes(originalChildNodes) {\n return Object.assign({}, ...this.genSlotsByName(originalChildNodes));\n }\n /**\n * Iterate over the templateNodes, yielding each '<element slot=name>'\n * as an object * of {name: element}.\n * @param {HTMLElement[]} templateNodes\n */\n *genSlotsByName(templateNodes) {\n for (const node of templateNodes) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n const slotName = node.getAttribute(\"slot\");\n if (!slotName) {\n continue;\n }\n yield { [slotName]: node };\n }\n }\n computeApplyComponent() {\n const value = unwrap(this.value);\n let componentName;\n let componentParams;\n if (typeof value === \"string\") {\n componentName = value;\n } else {\n componentName = unwrap(value.name);\n componentParams = NativeProvider.getNodeValues(this.$element) || unwrap(value.params);\n }\n this.latestComponentName = componentName;\n if (!componentName) {\n throw new Error(\"No component name specified\");\n }\n this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId;\n registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn));\n }\n makeChildBindingContext($component) {\n const ctxExtender = (ctx) => Object.assign(ctx, {\n $component,\n $componentTemplateNodes: this.originalChildNodes,\n $componentTemplateSlotNodes: this.makeTemplateSlotNodes(this.originalChildNodes)\n });\n return this.$context.createChildContext($component, void 0, ctxExtender);\n }\n applyComponentDefinition(componentName, componentParams, componentDefinition) {\n if (this.currentLoadingOperationId !== this.loadingOperationId || this.latestComponentName !== componentName) {\n return;\n }\n this.cleanUpState();\n const element = this.$element;\n if (!componentDefinition) {\n throw new Error(\"Unknown component '\" + componentName + \"'\");\n }\n if (componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, componentDefinition.template, element);\n }\n const componentViewModel = this.createViewModel(\n componentDefinition,\n element,\n this.originalChildNodes,\n componentParams\n );\n this.childBindingContext = this.makeChildBindingContext(componentViewModel);\n const viewTemplate = componentViewModel && componentViewModel.template;\n if (!viewTemplate && !componentDefinition.template) {\n throw new Error(\"Component '\" + componentName + \"' has no template\");\n }\n if (!componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, viewTemplate, element);\n }\n if (componentViewModel instanceof LifeCycle) {\n componentViewModel.anchorTo(this.$element);\n }\n this.currentViewModel = componentViewModel;\n const onBinding = this.onBindingComplete.bind(this, componentViewModel);\n this.applyBindingsToDescendants(this.childBindingContext, onBinding);\n }\n onBindingComplete(componentViewModel, bindingResult) {\n if (componentViewModel && componentViewModel.koDescendantsComplete) {\n componentViewModel.koDescendantsComplete(this.$element);\n }\n this.completeBinding(bindingResult);\n }\n cleanUpState() {\n const currentView = this.currentViewModel;\n const currentViewDispose = currentView && currentView.dispose;\n if (typeof currentViewDispose === \"function\") {\n currentViewDispose.call(currentView);\n }\n this.currentViewModel = null;\n this.currentLoadingOperationId = null;\n }\n dispose() {\n this.cleanUpState();\n super.dispose();\n }\n get controlsDescendants() {\n return true;\n }\n static get allowVirtualElements() {\n return true;\n }\n}\n", "// @tko/binding.component \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { virtualElements } from \"@tko/utils\";\nimport { JsxObserver, getOriginalJsxForNode } from \"@tko/utils.jsx\";\nimport { DescendantBindingHandler, contextFor } from \"@tko/bind\";\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor(params) {\n super(params);\n const slotNode = this.getSlot(this.value);\n const $slotContext = contextFor(slotNode);\n const childContext = this.$context.extend({ $slotContext, $slotData: $slotContext && $slotContext.$data });\n this.replaceSlotWithNode(this.$element, slotNode);\n this.applyBindingsToDescendants(childContext);\n }\n /**\n *\n * @param {HTMLElement} nodeToReplace\n * @param {HTMLElement} slotValue\n */\n replaceSlotWithNode(nodeInComponentTemplate, slotNode) {\n const nodes = this.cloneNodeFromOriginal(slotNode);\n virtualElements.emptyNode(nodeInComponentTemplate);\n this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, void 0, void 0, true));\n }\n cloneNodeFromOriginal(node) {\n if (!node) {\n return [];\n }\n const jsx = getOriginalJsxForNode(node);\n if (jsx) {\n return jsx.children;\n }\n if (\"content\" in node) {\n const clone = document.importNode(node.content, true);\n return [...clone.childNodes];\n }\n const nodeArray = Array.isArray(node) ? node : [node];\n return nodeArray.map((n) => n.cloneNode(true));\n }\n getSlot(slotName) {\n const { $componentTemplateSlotNodes } = this.$context;\n if (!slotName) {\n return $componentTemplateSlotNodes[\"\"] || [...this.$context.$componentTemplateNodes].filter((n) => !n.getAttribute || !n.getAttribute(\"slot\"));\n }\n return $componentTemplateSlotNodes[slotName];\n }\n static get allowVirtualElements() {\n return true;\n }\n}\n", "// @tko/binding.component \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport component from \"./componentBinding\";\nimport slot from \"./slotBinding\";\nexport const bindings = { component, slot };\n", "// @tko/filter.punches \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nimport { unwrap, toJS } from \"@tko/observable\";\nconst sproto = String.prototype;\nconst filters = {\n // Convert value to uppercase\n uppercase: function(value) {\n return sproto.toUpperCase.call(unwrap(value));\n },\n // Convert value to lowercase\n lowercase: function(value) {\n return sproto.toLowerCase.call(unwrap(value));\n },\n // Return default value if the input value is empty or null\n default: function(value, defaultValue) {\n value = unwrap(value);\n if (typeof value === \"function\") {\n return value;\n }\n if (typeof value === \"string\") {\n return sproto.trim.call(value) === \"\" ? defaultValue : value;\n }\n return value == null || value.length == 0 ? defaultValue : value;\n },\n // Return the value with the search string replaced with the replacement string\n replace: function(value, search, replace) {\n return sproto.replace.call(unwrap(value), search, replace);\n },\n fit: function(value, length, replacement, trimWhere) {\n value = unwrap(value);\n if (length && (\"\" + value).length > length) {\n replacement = \"\" + (replacement || \"...\");\n length = length - replacement.length;\n value = \"\" + value;\n switch (trimWhere) {\n case \"left\":\n return replacement + value.slice(-length);\n case \"middle\": {\n const leftLen = Math.ceil(length / 2);\n return value.substr(0, leftLen) + replacement + value.slice(leftLen - length);\n }\n default:\n return value.substr(0, length) + replacement;\n }\n } else {\n return value;\n }\n },\n // Convert a model object to JSON\n json: function(rootObject, space, replacer) {\n return JSON.stringify(toJS(rootObject), replacer, space);\n },\n // Format a number using the browser's toLocaleString\n number: function(value) {\n return (+unwrap(value)).toLocaleString();\n }\n};\nexport { filters };\n", "// @tko/utils.functionrewrite \uD83E\uDD4A 4.0.0-beta1.3 ESM\n\"use strict\";\nconst FUNCTION_REX = /\\bfunction\\s*\\(([^)]*)\\)\\s*\\{\\s*(?:(return\\s)?([^}]+?)[;\\s]*)?\\}/g;\nexport default function functionRewrite(bindingString) {\n return bindingString.replace(FUNCTION_REX, (match, args, returnKeyword, rv) => {\n if (rv && !returnKeyword) {\n rv += \" && undefined\";\n }\n const out = `(${args.trim()}) => ${rv}`;\n if (!functionRewrite.silent) {\n console.log(`Knockout: Replace \"${match}\" with \"${out}\"`);\n }\n return out;\n });\n}\nfunctionRewrite.silent = false;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["index_exports", "__export", "index_default", "isArray", "arrayForEach", "array", "action", "actionOwner", "i", "j", "arrayIndexOf", "item", "arrayFirst", "predicate", "predicateOwner", "arrayMap", "mapping", "thisArg", "arrayRemoveItem", "itemToRemove", "index", "arrayGetDistinctValues", "seen", "arrayFilter", "arrayPushAll", "valuesToPush", "addOrRemoveItem", "value", "included", "existingEntryIndex", "makeArray", "arrayLikeObject", "range", "min", "max", "minimum", "maximum", "result", "findMovesInArrayComparison", "left", "right", "limitFailedCompares", "failedCompares", "l", "r", "leftItem", "rightItem", "statusNotInOld", "statusNotInNew", "compareArrays", "oldArray", "newArray", "options", "compareSmallArrayToBigArray", "smlArray", "bigArray", "statusNotInSml", "statusNotInBig", "myMin", "myMax", "editDistanceMatrix", "smlIndex", "smlIndexMax", "bigIndex", "bigIndexMax", "compareRange", "maxDistance", "thisRow", "lastRow", "bigIndexMaxForRow", "bigIndexMinForRow", "northDistance", "westDistance", "editScript", "meMinusOne", "notInSml", "notInBig", "Options", "_a", "jQuery", "html", "throws", "name", "value", "key", "node", "callback", "options", "options_default", "catchFunctionErrors", "delegate", "options_default", "args", "err", "deferError", "error", "safeSetTimeout", "handler", "timeout", "throttle", "callback", "timeout", "timeoutInstance", "args", "safeSetTimeout", "debounce", "hasOwnProperty", "obj", "propName", "isObjectLike", "extend", "target", "source", "prop", "objectForEach", "action", "objectMap", "mapping", "thisArg", "getObjectOwnProperty", "clonePlainObjectDeep", "seen", "result", "safeStringify", "value", "k", "v", "isThenable", "object", "testOverwrite", "e", "functionSupportsLengthOverwrite", "overwriteLengthPropertyIfSupported", "fn", "descriptor", "stringTrim", "string", "stringStartsWith", "startsWith", "parseJson", "jsonString", "useSymbols", "createSymbolOrString", "identifier", "cssClassNameRegex", "toggleDomNodeCssClass", "node", "classNames", "shouldHaveClass", "addOrRemoveFn", "arrayForEach", "className", "toggleObjectClassPropertyString", "obj", "prop", "currentClassNames", "addOrRemoveItem", "domNodeIsContainedBy", "node", "containedByNode", "parentNode", "domNodeIsAttachedToDocument", "anyDomNodeIsAttachedToDocument", "nodes", "arrayFirst", "tagNameLower", "element", "isDomElement", "obj", "isDocumentFragment", "knownEvents", "knownEventTypesByEventName", "objectForEach", "eventType", "knownEventsForType", "i", "j", "isClickOnCheckableElement", "element", "tagNameLower", "inputType", "registerEventHandler", "handler", "eventOptions", "wrappedHandler", "catchFunctionErrors", "mustUseNative", "jQuery", "options_default", "hasClick", "triggerEvent", "useClickWorkaround", "eventCategory", "event", "data_exports", "__export", "clear", "get", "getOrSet", "nextKey", "set", "datastoreTime", "dataStoreKeyExpandoPropertyName", "dataStoreSymbol", "uniqueId", "isSafeKey", "key", "getDataForNode", "node", "createIfNotFound", "dataForNode", "dataStoreSymbol", "clear", "nextKey", "dataStoreKeyExpandoPropertyName", "get", "set", "value", "getOrSet", "domDataKey", "nextKey", "cleanableNodeTypes", "cleanableNodeTypesWithDescendants", "getDisposeCallbacksCollection", "node", "createIfNotFound", "allDisposeCallbacks", "get", "set", "destroyCallbacksCollection", "cleanSingleNode", "callbacks", "i", "clear", "j", "otherNodeCleanerFunctions", "options_default", "cleanNodesInList", "nodeList", "onlyComments", "cleanedNodes", "lastCleanedNode", "arrayIndexOf", "addDisposeCallback", "callback", "removeDisposeCallback", "callbacksCollection", "arrayRemoveItem", "cleanNode", "removeNode", "addCleaner", "fn", "removeCleaner", "fnIndex", "cleanjQueryData", "jQueryCleanNodeFn", "moveCleanedNodesToContainerElement", "nodes", "nodesArray", "makeArray", "container", "j", "cleanNode", "cloneNodes", "shouldCleanNodes", "newNodesArray", "i", "clonedNode", "setDomNodeChildren", "domNode", "childNodes", "emptyDomNode", "replaceDomNodes", "nodeToReplaceOrNodeArray", "nodesToReplaceArray", "insertionPoint", "parent", "removeNode", "fixUpContinuousNodeArray", "continuousNodeArray", "parentNode", "current", "last", "setOptionNodeSelectionState", "optionNode", "isSelected", "virtualElements_exports", "__export", "allowedBindings", "childNodes", "emptyNode", "endCommentRegex", "firstChild", "getVirtualChildren", "hasBindingValue", "insertAfter", "isEndComment", "isStartComment", "lastChild", "nextSibling", "normaliseVirtualElementDomStructure", "prepend", "previousSibling", "setDomNodeChildren", "startCommentRegex", "virtualNodeBindingValue", "startCommentRegex", "endCommentRegex", "htmlTagsWithOptionallyClosingChildren", "isStartComment", "node", "isEndComment", "isUnmatchedEndComment", "get", "matchedEndCommentDataKey", "getVirtualChildren", "startComment", "allowUnbalanced", "currentNode", "depth", "children", "set", "getMatchingEndComment", "allVirtualChildren", "getUnbalancedChildTags", "childNode", "captureRemaining", "matchingEndComment", "allowedBindings", "hasBindingValue", "childNodes", "emptyNode", "emptyDomNode", "virtualChildren", "i", "j", "removeNode", "setDomNodeChildren", "childNodes2", "endCommentNode", "parentNode", "prepend", "containerNode", "nodeToPrepend", "_a", "insertAfter", "nodeToInsert", "insertAfterNode", "firstChild", "lastChild", "nextChild", "lastChildNode", "nextSibling", "previousSibling", "virtualNodeBindingValue", "regexMatch", "normaliseVirtualElementDomStructure", "elementVerified", "tagNameLower", "unbalancedTags", "nodeToInsertBefore", "supportsTemplateTag", "options_default", "simpleHtmlParse", "html", "documentContext", "div", "makeArray", "templateHtmlParse", "template", "jQueryHtmlParse", "jQuery", "parseHtmlFragment", "saferHtml", "validateHTMLInput", "scriptTagPattern", "parseHtmlForTemplateNodes", "nodes", "moveCleanedNodesToContainerElement", "setHtml", "node", "emptyDomNode", "parsedNodes", "emptyNode", "setDomNodeChildren", "setTextContent", "element", "textContent", "value", "innerTextNode", "firstChild", "nextSibling", "hasDomDataExpandoProperty", "selectExtensions", "nextKey", "element", "tagNameLower", "get", "selectElement", "value", "allowUnset", "set", "el", "selection", "i", "n", "optionValue", "strictEqual", "blankEqual", "numericEqual", "memoization_exports", "__export", "memoize", "parseMemoText", "unmemoize", "unmemoizeDomNodeAndDescendants", "memos", "randomMax8HexChars", "generateRandomId", "findMemoNodes", "rootNode", "appendToArray", "memoId", "parseMemoText", "i", "childNodes", "j", "memoize", "callback", "unmemoize", "callbackParams", "unmemoizeDomNodeAndDescendants", "domNode", "extraCallbackParamsArray", "memos2", "node", "combinedParams", "arrayPushAll", "memoText", "match", "tasks_exports", "__export", "cancel", "resetForTesting", "processTasks", "schedule", "taskQueue", "taskQueueLength", "nextHandle", "nextIndexToProcess", "w", "options_default", "callback", "div", "scheduledProcess", "processTasks", "mark", "countMarks", "task", "deferError", "ex", "scheduleTaskProcessing", "schedule", "func", "cancel", "handle", "index", "resetForTesting", "length", "dependencyDetection_exports", "__export", "begin", "end", "getDependencies", "getDependenciesCount", "ignore", "isInitial", "registerDependency", "SUBSCRIBABLE_SYM", "isSubscribable", "instance", "outerFrames", "currentFrame", "lastId", "getId", "begin", "options", "end", "registerDependency", "subscribable", "isSubscribable", "ignore", "callback", "callbackTarget", "callbackArgs", "getDependenciesCount", "getDependencies", "isInitial", "deferUpdates", "target", "callback", "handle", "ignoreUpdates", "tasks_exports", "Subscription", "target", "observer", "disposeCallback", "removeDisposeCallback", "node", "addDisposeCallback", "primitiveTypes", "valuesArePrimitiveAndEqual", "a", "b", "applyExtenders", "requestedExtenders", "target", "objectForEach", "key", "value", "extenderHandler", "extenders", "options_default", "notify", "notifyWhen", "deferred", "option", "deferUpdates", "rateLimit", "options2", "timeout", "method", "limitFunction", "debounce", "throttle", "callback", "LATEST_VALUE", "subscribable", "ko_subscribable_fn", "defaultEvent", "SUBSCRIBABLE_SYM", "instance", "callback", "callbackTarget", "event", "isTC39Callback", "observer", "subscriptionInstance", "Subscription", "arrayRemoveItem", "valueToNotify", "subs", "begin", "i", "end", "versionToCheck", "total", "objectForEach", "eventName", "subscriptions", "oldValue", "newValue", "cb", "nv", "test", "returnValue", "current", "givenRv", "testFn", "v", "options_default", "resolve", "reject", "args", "negated", "applyExtenders", "observable", "initialValue", "Observable", "LATEST_VALUE", "registerDependency", "overwriteLengthPropertyIfSupported", "subscribable", "options_default", "deferUpdates", "valuesArePrimitiveAndEqual", "fn", "peek2", "limitNotifySubscribers", "value", "event", "defaultEvent", "limitFunction", "self", "selfIsObservable", "isObservable", "beforeChange", "ignoreBeforeChange", "notifyNextChange", "previousValue", "pendingValue", "didUpdate", "finish", "shouldNotify", "isDirty", "protoProperty", "instance", "proto", "unwrap", "peek", "isWriteableObservable", "arrayChangeEventName", "trackArrayChanges", "target", "options", "extend", "trackingChanges", "cachedDiff", "arrayChangeSubscription", "pendingNotifications", "underlyingNotifySubscribersFunction", "underlyingBeforeSubscriptionAddFunction", "underlyingAfterSubscriptionRemoveFunction", "event", "trackChanges", "valueToNotify", "defaultEvent", "previousContents", "currentContents", "changes", "getChanges", "rawArray", "operationName", "args", "diff", "arrayLength", "argsLength", "offset", "pushDiff", "status", "value", "index", "startIndex", "endDeleteIndex", "endAddIndex", "endIndex", "additions", "deletions", "argsIndex", "findMovesInArrayComparison", "compareArrays", "extenders", "observableArray", "initialValues", "result", "observable", "trackArrayChanges", "overwriteLengthPropertyIfSupported", "_a", "isObservableArray", "instance", "isObservable", "valueOrPredicate", "underlyingArray", "removedValues", "predicate", "value", "arrayOfValues", "allValues", "arrayIndexOf", "i", "item", "oldItem", "newItem", "index", "compareFn", "__yieldStar", "arrayForEach", "methodName", "methodCallResult", "maxNestedObservableDepth", "toJS", "rootObject", "mapJsObjectGraph", "valueToMap", "i", "isObservable", "toJSON", "replacer", "space", "plainJavaScriptObject", "mapInputCallback", "visitedObjects", "outputProperties", "visitPropertiesOrArrayEntries", "indexer", "propertyValue", "previouslyMappedValue", "visitorCallback", "propertyName", "LAMBDA", "unwrapOrCall", "a", "b", "operators", "unwrap", "__pow", "IS_EXPR_OR_IDENT", "Node", "_Node", "lhs", "op", "rhs", "operators", "leaf", "context", "globals", "node", "unwrap", "notused", "LAMBDA", "args", "lambdaContext", "lhv", "earlyOut", "rhv", "item", "nodes", "debug", "out", "ops", "i", "prec", "a", "b", "Expression", "nodes", "Node", "parent", "context", "globals", "node", "Arguments", "parser", "args", "parent", "context", "globals", "node", "deReffedArgs", "i", "j", "Node", "IDStart", "IDContinue", "Identifier", "_Identifier", "parser", "token", "dereferences", "value", "$context", "globals", "node", "member", "refs", "$data", "lastValue", "i", "n", "Node", "Arguments", "hasOwnProperty", "parent", "context", "intermediate", "object", "property", "isWriteableObservable", "isObservable", "new_value", "leaf", "root", "isObjectLike", "ch", "IDStart", "IDContinue", "_names", "_Parameters", "parser", "node", "__privateAdd", "Expression", "__privateSet", "e", "context", "args", "__privateGet", "newValues", "name", "index", "Node", "names", "Identifier", "operators", "Parameters", "Ternary", "yes", "no", "Node", "escapee", "Parser", "ch", "p", "second", "c", "m", "name", "msg", "message", "enclosedBy", "number", "string", "options_default", "object", "key", "value", "Node", "v", "hasOwnProperty", "objectKeyIsValue", "Identifier", "delim", "nodes", "plusOp", "operators", "hex", "i", "uffff", "interpolate", "_a", "_b", "array", "opts", "op", "opFn", "isIdentifierChar", "args", "nextFilter", "filter", "ignored", "context", "globals", "node", "argValues", "j", "filterable", "allowMultipleValues", "Parameters", "dereferences", "deref", "Arguments", "Expression", "ternary", "Ternary", "member", "token", "bindings", "sep", "expr", "extend", "clonePlainObjectDeep", "result", "objectForEach", "optionalValue", "options2", "currentValue", "unchanged", "source", "acc", "fn", "e", "parseFn", "bindingAccessors", "specials", "bindingToken", "divisionLookBehind", "keywordRegexLookBehind", "parseObjectLiteral", "objectLiteralString", "str", "stringTrim", "result", "toks", "key", "values", "depth", "i", "tok", "c", "match", "computedState", "createSymbolOrString", "DISPOSED_STATE", "computed", "evaluatorFunctionOrOptions", "evaluatorFunctionTarget", "options2", "writeFunction", "state", "computedObservable", "dependencyDetection_exports", "subscribable", "extend", "pureComputedOverrides", "deferEvaluationOverrides", "options_default", "extenders", "addDisposeCallback", "computedDisposeDependencyCallback", "id", "entryToDispose", "computedBeginDependencyDetectionCallback", "subscribable2", "valuesArePrimitiveAndEqual", "dependencyTracking", "dependentObservables", "objectForEach", "dependency", "target", "trackingObj", "hasOwnProperty", "dirtySub", "changeSub", "throttleEvaluationTimeout", "safeSetTimeout", "notifyChange", "disposeWhen", "changed", "domNodeIsAttachedToDocument", "isInitial", "dependencyDetectionContext", "newValue", "readFunction", "forceEvaluate", "LATEST_VALUE", "limitFunction", "isChange", "removeDisposeCallback", "event", "dependenciesOrder", "arrayForEach", "order", "subscription", "protoProp", "observable", "isComputed", "instance", "isPureComputed", "pureComputed", "throttleExtender", "target", "timeout", "writeTimeoutInstance", "computed", "value", "extenders", "PROXY_SYM", "MIRROR_SYM", "makeComputed", "proxy2", "fn", "computed", "setOrCreate", "mirror", "prop", "value", "ctr", "observableArray", "observable", "assignOrUpdate", "object", "key", "proxy", "target", "unwrap", "receiver", "property", "thisArg", "props", "proto", "desc", "getObservable", "proxied", "peek", "isProxied", "kowhen", "predicate", "context", "resolve", "observable", "pureComputed", "subscription", "value", "when", "callback", "whenFn", "SUBSCRIPTIONS", "createSymbolOrString", "ANCHOR_NODE", "LifeCycle", "_LifeCycle", "Constructor", "target", "mixin", "prop", "observable", "action", "subscriptionType", "params", "proto", "computed", "args", "node", "type", "act", "options", "handler", "eventType", "dispose", "addDisposeCallback", "nodeOrLifeCycle", "s", "subscription", "subscriptions", "contextAncestorBindingInfo", "boundElementDomDataKey", "data_exports", "bindingEvent", "node", "event", "callback", "callbackContext", "bindingInfo", "subscribable", "boundElementDomDataKey", "data_exports", "contextSubscribeSymbol", "inheritParentIndicator", "bindingContext", "dataItemOrAccessor", "parentContext", "dataItemAlias", "extendCallback", "settings", "self", "shouldInheritData", "realDataItemOrAccessor", "isFunc", "isObservable", "options_default", "subscribable", "updateContext", "dataItemOrObservable", "dataItem", "unwrap", "extend", "contextAncestorBindingInfo", "pureComputed", "token", "globals", "node", "$data", "isObjectLike", "_a", "properties", "storedBindingContextForNode", "bindingInfo", "contextFor", "dataFor", "context", "BindingResult", "asyncBindingsApplied", "rootNode", "bindingContext", "__async", "BindingHandler", "LifeCycle", "params", "$element", "valueAccessor", "allBindings", "$context", "v", "va", "isWriteableObservable", "name", "provider", "options_default", "handler", "ResolveSymbol", "AsyncBindingHandler", "resolve", "bindingResult", "PossibleWeakMap", "options_default", "legacyBindingMap", "LegacyBindingHandler", "_LegacyBindingHandler", "BindingHandler", "params", "handler", "e", "key", "newLegacyHandler", "initFn", "disposeFn", "init", "dispose", "virtualElements_exports", "bindingDoesNotRecurseIntoElementTypes", "getBindingProvider", "options_default", "isProviderForNode", "provider", "node", "asProperHandlerClass", "handler", "bindingKey", "LegacyBindingHandler", "getBindingHandlerFromComponent", "$component", "getBindingHandler", "bindingDefinition", "evaluateValueAccessor", "valueAccessor", "applyBindingsToDescendantsInternal", "bindingContext2", "elementOrVirtualElement", "asyncBindingsApplied", "nextInQueue", "virtualElements_exports", "currentChild", "preprocessNode", "applyBindingsToNodeAndDescendantsInternal", "bindingEvent", "hasBindings", "nodeOrChildHasBindings", "c", "nodeVerified", "isElement", "shouldApplyBindings", "shouldBindDescendants", "applyBindingsToNodeInternal", "tagNameLower", "topologicalSortBindings", "bindings", "results", "bindingsConsidered", "cyclicDependencyStack", "objectForEach", "pushBinding", "binding", "arrayForEach", "bindingDependencyKey", "arrayIndexOf", "result", "sourceBindings", "bindingInfo", "data_exports", "boundElementDomDataKey", "alreadyBound", "onBindingError", "bindingsUpdater", "getBindings", "computed", "contextSubscribeSymbol", "bindingHandlerThatControlsDescendantBindings", "allBindingHandlers", "getValueAccessor", "optionalValue", "allBindings", "objectMap", "key", "callback", "nodes", "dataFor", "bindingsGenerated", "nodeAsyncBindingPromises", "BindingHandlerClass", "reportBindingError", "during", "errorCaptured", "bindingHandler", "dependencyDetection_exports", "v", "err", "error", "triggerDescendantsComplete", "hasBindingHandler", "hasFirstChild", "accessor", "getBindingContext", "viewModelOrBindingContext", "extendContextCallback", "bindingContext", "applyBindingAccessorsToNode", "applyBindingsToNode", "bindingAccessors", "BindingResult", "applyBindingsToDescendants", "rootNode", "applyBindings", "rootContext", "spec", "extend", "e", "message", "originalName", "mapNodeAndRefreshWhenChanged", "containerNode", "mapping", "valueToMap", "callbackAfterAddingNodes", "index", "mappedNodes", "dependentObservable", "computed", "newMappedNodes", "fixUpContinuousNodeArray", "replaceDomNodes", "dependencyDetection_exports", "arrayPushAll", "anyDomNodeIsAttachedToDocument", "lastMappingResultDomDataKey", "data_exports", "deletedItemDummyValue", "setDomNodeChildrenFromArrayMapping", "domNode", "array", "options", "editScript", "lastMappingResult", "isFirstExecution", "newMappingResult", "lastMappingResultIndex", "newMappingResultIndex", "nodesToDelete", "itemsToProcess", "itemsForBeforeRemoveCallbacks", "itemsForMoveCallbacks", "itemsForAfterAddCallbacks", "mapData", "countWaitingForRemove", "itemAdded", "value", "observable", "itemMovedOrRetained", "oldPosition", "callCallback", "callback", "items", "i", "n", "arrayForEach", "node", "lastArray", "arrayMap", "x", "compareOptions", "compareArrays", "editScriptItem", "movedIndex", "itemIndex", "cleanNode", "removeNode", "k", "nextNode", "virtualElements_exports", "lastNode", "extend", "j", "DescendantBindingHandler", "AsyncBindingHandler", "childContext", "callback", "__async", "bindingResult", "applyBindingsToDescendants", "templateScript", "templateTextArea", "templateTemplate", "templateElement", "templateAnonymous", "dataDomDataPrefix", "data_exports", "templatesDomDataKey", "getTemplateDomData", "element", "setTemplateDomData", "data", "domElement", "tagNameLower", "valueToWrite", "elemContentsProperty", "setHtml", "key", "templateData", "nodes", "text", "parseHtmlForTemplateNodes", "anonymousTemplate", "templateEngine", "extend", "templateSource", "bindingContext", "options2", "templateDocument", "script", "options_default", "template", "elem", "domElement", "anonymousTemplate", "_templateEngine", "cleanContainerDomDataKey", "data_exports", "setTemplateEngine", "tEngine", "templateEngine", "invokeForEachNodeInContinuousRange", "firstNode", "lastNode", "action", "node", "nextInQueue", "firstOutOfRangeNode", "virtualElements_exports", "activateBindingsOnContinuousNodeArray", "continuousNodeArray", "bindingContext", "afterBindingCallback", "parentNode", "provider", "options_default", "preprocessNode", "nextNodeInRange", "nodePreviousSibling", "newNodes", "fixUpContinuousNodeArray", "applyBindings", "memoization_exports", "getFirstNodeFromPossibleArray", "nodeOrNodeArray", "executeTemplate", "targetNodeOrNodeArray", "renderMode", "template", "options", "templateDocument", "renderedNodesArray", "haveAddedNodesToParent", "replaceDomNodes", "dependencyDetection_exports", "bindingEvent", "resolveTemplateName", "data", "context", "isObservable", "renderTemplate", "dataOrBindingContext", "firstTargetNode", "whenToDispose", "domNodeIsAttachedToDocument", "activelyDisposeWhenNodeIsRemoved", "computed", "templateName", "domNode", "renderTemplateForEach", "arrayOrObservableArray", "targetNode", "parentBindingContext", "arrayItemContext", "executeTemplateForArrayItem", "arrayValue", "index", "activateBindingsCallback", "addedNodesArray", "localSetDomNodeChildrenFromArrayMapping", "newArray", "changeList", "setDomNodeChildrenFromArrayMapping", "shouldHideDestroyed", "isObservableArray", "subscription", "unwrappedArray", "unwrap", "arrayFilter", "item", "templateComputedDomDataKey", "TemplateBindingHandler", "AsyncBindingHandler", "params", "element", "bindingValue", "observable", "nodes", "container", "moveCleanedNodesToContainerElement", "anonymousTemplate", "templateNodes", "value", "shouldDisplay", "templateComputed", "elseChainSatisfied", "dataArray", "innerBindingContext", "newComputed", "oldComputed", "nativeTemplateEngine", "templateEngine", "templateSource", "bindingContext", "options", "templateDocument", "templateNodes", "makeArray", "templateText", "parseHtmlFragment", "setTemplateEngine", "TemplateForEachBindingHandler", "TemplateBindingHandler", "modelValue", "unwrappedValue", "peek", "nativeTemplateEngine", "unwrap", "bindings", "TemplateForEachBindingHandler", "TemplateBindingHandler", "domNodeDisposal", "addDisposeCallback", "removeDisposeCallback", "removeNode", "addCleaner", "removeCleaner", "options_default", "cleanerFn", "utils", "addOrRemoveItem", "arrayFilter", "arrayFirst", "arrayForEach", "arrayGetDistinctValues", "arrayIndexOf", "arrayMap", "arrayPushAll", "arrayRemoveItem", "cloneNodes", "compareArrays", "createSymbolOrString", "data_exports", "extend", "objectForEach", "objectMap", "parseHtmlFragment", "parseJson", "parseObjectLiteral", "peek", "range", "registerEventHandler", "setDomNodeChildrenFromArrayMapping", "setHtml", "setTextContent", "toggleDomNodeCssClass", "triggerEvent", "unwrap", "knockout", "cleanNode", "dependencyDetection_exports", "memoization_exports", "selectExtensions", "tasks_exports", "LifeCycle", "isObservable", "isSubscribable", "isWriteableObservable", "observable", "observableArray", "isObservableArray", "subscribable", "toJS", "toJSON", "proxy", "computed", "isComputed", "isPureComputed", "pureComputed", "when", "nativeTemplateEngine", "renderTemplate", "setTemplateEngine", "templateEngine", "domElement", "anonymousTemplate", "applyBindingAccessorsToNode", "applyBindings", "applyBindingsToDescendants", "applyBindingsToNode", "contextFor", "dataFor", "BindingHandler", "AsyncBindingHandler", "virtualElements_exports", "bindingEvent", "Builder", "provider", "bindings", "extenders", "filters", "options2", "bindingsObject", "additionalProperties", "instance", "fn", "BindingHandlerObject", "nameOrObject", "value", "options_default", "nameOrDotted", "name", "Provider", "_Provider", "params", "BindingHandlerObject", "globals", "node", "context", "provider", "LegacyProvider", "callback", "objectMap", "dependencyDetection_exports", "value", "key", "bindings", "providerObject", "parentProvider", "bindingsFn", "BindingStringProvider", "Provider", "key", "value", "handlerName", "property", "handler", "bindingsAddedByHandler", "chainFn", "args", "key2", "value2", "__yieldStar", "bindingStringOrObjects", "bindingObjectsArray", "parseObjectLiteral", "unknown", "node", "context", "bindingString", "processed", "Parser", "VirtualProvider", "BindingStringProvider", "node", "parent", "childNodes", "virtualBindingString", "openNode", "closeNode", "child", "name", "value", "virtualElements_exports", "context", "DataBindProvider", "BindingStringProvider", "node", "context", "loadingSubscribablesCache", "loadedDefinitionsCache", "loadComponentAndNotify", "componentName", "callback", "_subscribable", "getObjectOwnProperty", "completedAsync", "subscribable", "beginLoadingComponent", "definition", "config", "isSynchronousComponent", "tasks_exports", "getFirstResultFromLoaders", "methodName", "argsExceptCallback", "candidateLoaders", "registry", "currentCandidateLoader", "methodInstance", "wasAborted", "result", "cachedDefinition", "dependencyDetection_exports", "defaultConfigRegistry", "VIEW_MODEL_FACTORY", "register", "componentName", "config", "isRegistered", "ceok", "hasOwnProperty", "unregister", "registry", "defaultLoader", "callback", "result", "errorCallback", "makeErrorCallback", "possiblyGetConfigFromAmd", "loadedConfig", "resolveConfig", "templateConfig", "resolveTemplate", "viewModelConfig", "resolveViewModel", "createViewModelKey", "tryIssueCallback", "makeCallBackWhenZero", "resolvedTemplate", "resolvedViewModel", "parseHtmlFragment", "isDocumentFragment", "makeArray", "element", "isDomElement", "cloneNodesFromTemplateSourceElement", "elemInstance", "args", "params", "fixedInstance", "tagNameLower", "cloneNodes", "message", "ComponentABC", "LifeCycle", "VIEW_MODEL_FACTORY", "params", "componentInfo", "name", "viewModel", "template", "synchronous", "register", "dist_default", "ComponentABC", "registry", "register", "isRegistered", "unregister", "defaultLoader", "defaultConfigRegistry", "loaders", "ComponentProvider", "Provider", "node", "parent", "slotName", "openNode", "closeNode", "context", "componentName", "tagName", "tagNameLower", "dist_default", "hasDash", "isUnknownEntity", "parser", "Parser", "paramsString", "accessors", "$raw", "objectMap", "value", "computed", "params", "v", "paramValueComputed", "paramValue", "isWriteable", "isWriteableObservable", "unwrap", "AttrProvider", "Provider", "node", "attr", "context", "token", "$context", "$data", "MultiProvider", "Provider", "params", "providers", "p", "globals", "provider", "nodeTypeMap", "nodeType", "k", "node", "context", "newNodes", "bindings", "__yieldStar", "key", "accessor", "attr", "element", "valueAccessor", "_allBindings", "value", "unwrap", "objectForEach", "attrName", "attrValue", "prefixLen", "namespace", "toRemove", "checked", "element", "valueAccessor", "allBindings", "checkedValue2", "pureComputed", "unwrap", "useElementValue", "updateModel", "isChecked", "elemValue", "dependencyDetection_exports", "isRadio", "modelValue", "valueIsArray", "writableValue", "rawValueIsNonArrayObservable", "saveOldValue", "oldElemValue", "addOrRemoveItem", "isWriteableObservable", "isCheckbox", "modelValue2", "updateView", "arrayIndexOf", "rawValue", "computed", "registerEventHandler", "checkedValue", "makeEventHandlerShortcut", "eventName", "element", "valueAccessor", "allBindings", "viewModel", "bindingContext", "newValueAccessor", "result", "eventHandler", "makeDescriptor", "handlerOrObject", "eventsToHandle", "objectForEach", "descriptor", "passive", "capture", "once", "debounce", "throttle", "eventOptions", "eventHandlerFn", "event", "more", "handlerReturnValue", "handler", "passive2", "bubble", "preventDefault", "possiblyUpdatedViewModel", "argsForHandler", "unwrap", "bubbleMark", "registerEventHandler", "onHandler", "value", "key", "addBinding", "click", "makeEventHandlerShortcut", "css", "element", "valueAccessor", "value", "unwrap", "objectForEach", "className", "shouldHaveClass", "toggleDomNodeCssClass", "stringTrim", "createSymbolOrString", "DescendantsCompleteHandler", "BindingHandler", "enable", "element", "valueAccessor", "value", "unwrap", "disable", "hasfocusUpdatingProperty", "createSymbolOrString", "hasfocusLastValue", "hasfocus", "element", "valueAccessor", "_allBindings", "handleElementFocusChange", "isFocused", "ownerDoc", "active", "e", "modelValue", "isWriteableObservable", "handleElementFocusIn", "handleElementFocusOut", "registerEventHandler", "value", "unwrap", "dependencyDetection_exports", "triggerEvent", "html", "element", "valueAccessor", "setHtml", "let_default", "element", "valueAccessor", "_allBindings", "_viewModel", "bindingContext", "innerContext", "applyBindingsToDescendants", "captionPlaceholder", "options", "element", "tagNameLower", "valueAccessor", "allBindings", "selectedOptions", "arrayFilter", "node", "selectWasPreviouslyEmpty", "multiple", "previousScrollTop", "unwrappedArray", "unwrap", "valueAllowUnset", "includeDestroyed", "arrayToDomNodeChildrenOptions", "captionValue", "filteredArray", "previousSelectedValues", "arrayMap", "selectExtensions", "item", "applyToObject", "object", "predicate", "defaultValue", "predicateType", "itemUpdate", "optionForArrayItem", "arrayEntry", "index", "oldOptions", "option", "setTextContent", "optionValue", "optionText", "setSelectionCallback", "newOptions", "isSelected", "arrayIndexOf", "setOptionNodeSelectionState", "dependencyDetection_exports", "triggerEvent", "callback", "setDomNodeChildrenFromArrayMapping", "selectionChanged", "selectedOptions", "element", "valueAccessor", "_allBindings", "registerEventHandler", "value", "valueToWrite", "arrayForEach", "node", "selectExtensions", "tagNameLower", "newValue", "unwrap", "previousScrollTop", "isSelected", "arrayIndexOf", "setOptionNodeSelectionState", "style", "element", "valueAccessor", "value", "unwrap", "objectForEach", "styleName", "styleValue", "options_default", "all", "letter", "previousStyle", "submit", "element", "valueAccessor", "_allBindings", "_viewModel", "bindingContext", "registerEventHandler", "event", "handlerReturnValue", "value", "text", "element", "valueAccessor", "setTextContent", "MSIE_REGEX", "operaVersion", "safariVersion", "firefoxVersion", "ieVersion", "TextInput", "BindingHandler", "args", "options_default", "arrayForEach", "eventName", "event", "element", "elementValue", "handler", "safeSetTimeout", "modelValue", "unwrap", "TextInputIE", "TextInputLegacySafari", "TextInputLegacyOpera", "TextInputLegacyFirefox", "w", "parseVersion", "matches", "userAgent", "ieMatch", "textInput", "uniqueName", "element", "valueAccessor", "name", "value", "BindingHandler", "args", "applyBindingAccessorsToNode", "arrayForEach", "eventName", "requestedEventsToCatch", "requestedEventsArray", "tagNameLower", "MSIE_REGEX", "selectExtensions", "handler", "stringStartsWith", "safeSetTimeout", "newValue", "unwrap", "dependencyDetection_exports", "element", "elementValue", "allowUnset", "visible", "element", "valueAccessor", "value", "unwrap", "isCurrentlyVisible", "hidden", "using", "element", "valueAccessor", "_allBindings", "_viewModel", "bindingContext", "innerContext", "applyBindingsToDescendants", "bindings", "attr", "checked", "checkedValue", "click", "css", "DescendantsCompleteHandler", "enable", "eventHandler", "disable", "hasfocus", "hidden", "html", "let_default", "onHandler", "options", "selectedOptions", "style", "submit", "text", "textInput", "uniqueName", "using", "value", "visible", "ConditionalBindingHandler", "AsyncBindingHandler", "params", "elseChainSatisfied", "observable", "data_exports", "dependencyDetection_exports", "isFirstRender", "shouldDisplay", "useOriginalNodes", "virtualElements_exports", "nodes", "__async", "cloneNodes", "bound", "applyBindingsToDescendants", "node", "element", "children", "i", "j", "hasElse", "ifNodes", "elseNodes", "target", "cleanNode", "IfBindingHandler", "ConditionalBindingHandler", "args", "unwrap", "shouldDisplay", "UnlessBindingHandler", "WithBindingHandler", "ConditionalBindingHandler", "args", "conditionalFn", "options_default", "unwrap", "ElseBindingHandler", "IfBindingHandler", "unwrap", "node", "virtualElements_exports", "data_exports", "bindings", "IfBindingHandler", "WithBindingHandler", "UnlessBindingHandler", "ElseBindingHandler", "MAX_LIST_SIZE", "isPlainObject", "o", "supportsDocumentFragment", "options_default", "makeTemplateNode", "sourceNode", "container", "parentNode", "arrayForEach", "virtualElements_exports", "child", "valueToChangeAddItem", "value", "index", "PENDING_DELETE_INDEX_SYM", "createSymbolOrString", "ForEachBinding", "_ForEachBinding", "AsyncBindingHandler", "params", "_a", "settings", "unwrap", "p", "observable", "data_exports", "primeData", "isObservable", "changeSet", "isInitial", "changeMap", "len", "lastAdd", "isEmpty", "lowestIndexChanged", "changeItem", "ctx$indexRequestedFrom", "i", "ctx", "$ctx", "as", "v", "children", "first", "last", "valuesToAdd", "referenceElement", "allChildNodes", "asyncBindingResults", "pendingDelete", "templateClone", "bindingResult", "applyBindingsToDescendants", "result", "ptr", "node", "active", "domNodeIsContainedBy", "nodeOrNodeArrayToInsert", "insertAfterNode", "frag", "containerNode", "data", "pd", "nodes", "removeFn", "parent", "cleanNode", "beforeRemoveReturn", "fromIndex", "contextFor", "toggle", "w", "frame", "cb", "bindings", "ForEachBinding", "NATIVE_BINDINGS", "NativeProvider", "Provider", "node", "context", "key", "name", "value", "bindingName", "valueFn", "isObservable", "bindings", "obj", "DELAY_MS", "MAX_CLEAN_AT_ONCE", "cleanNodeQueue", "cleanNodeTimeoutID", "queueCleanNode", "node", "triggerCleanTimeout", "flushCleanQueue", "nodes", "cleanNode", "ORIGINAL_JSX_SYM", "NAMESPACES", "isIterable", "v", "JsxObserver", "_JsxObserver", "LifeCycle", "jsxOrObservable", "parentNode", "insertBefore", "xmlns", "noInitialBinding", "parentNodeIsComment", "parentNodeTarget", "isObservable", "insertAt", "jsx", "unwrap", "isComputed", "_a", "ib", "subscriptions", "possibleIterable", "status", "value", "index", "changes", "adds", "dels", "change", "nextNode", "nodeArrayOrObservable", "child", "$context", "contextFor", "isInsideTemplate", "shouldApplyBindings", "j", "node", "applyBindings", "_", "any", "isThenable", "safeStringify", "string", "NATIVE_BINDINGS", "attrs", "promise", "obs", "observable", "e", "jo", "attributes", "toRemove", "n", "name", "attr", "prefix", "unqualifiedName", "valueOrObservable", "NativeProvider", "ns", "nodesAtIndex", "lastNodeOfPrior", "nodeArrayOrObservableAtIndex", "nodeOrObservable", "queueCleanNode", "JsxObserver_default", "maybeJsx", "possibleJsx", "isObservable", "value", "unwrap", "getOriginalJsxForNode", "node", "ORIGINAL_JSX_SYM", "componentLoadingOperationUniqueId", "ComponentBinding", "DescendantBindingHandler", "params", "makeArray", "virtualElements_exports", "componentName", "template", "element", "maybeJsx", "JsxObserver_default", "clonedNodesArray", "cloneNodes", "componentDefinition", "originalChildNodes", "componentParams", "componentViewModelFactory", "templateNodes", "node", "slotName", "value", "unwrap", "NativeProvider", "dist_default", "defn", "$component", "ctxExtender", "ctx", "componentViewModel", "viewTemplate", "LifeCycle", "onBinding", "bindingResult", "currentView", "currentViewDispose", "SlotBinding", "DescendantBindingHandler", "params", "slotNode", "$slotContext", "contextFor", "childContext", "nodeInComponentTemplate", "nodes", "virtualElements_exports", "JsxObserver_default", "node", "jsx", "getOriginalJsxForNode", "n", "slotName", "$componentTemplateSlotNodes", "bindings", "ComponentBinding", "SlotBinding", "sproto", "filters", "value", "unwrap", "defaultValue", "search", "replace", "length", "replacement", "trimWhere", "leftLen", "rootObject", "space", "replacer", "toJS", "FUNCTION_REX", "functionRewrite", "bindingString", "match", "args", "returnKeyword", "rv", "out", "dataBindProvider", "DataBindProvider", "expressionRewriting", "s", "provider", "MultiProvider", "ComponentProvider", "VirtualProvider", "AttrProvider", "builder", "Builder", "bindings", "filters", "options_default", "functionRewrite", "version", "index_default", "dist_default"]
|
|
3
|
+
"sources": ["../src/index.ts", "../../../packages/utils/src/array.ts", "../../../packages/utils/src/options.ts", "../../../packages/utils/src/error.ts", "../../../packages/utils/src/async.ts", "../../../packages/utils/src/object.ts", "../../../packages/utils/src/function.ts", "../../../packages/utils/src/string.ts", "../../../packages/utils/src/symbol.ts", "../../../packages/utils/src/css.ts", "../../../packages/utils/src/dom/info.ts", "../../../packages/utils/src/dom/event.ts", "../../../packages/utils/src/dom/data.ts", "../../../packages/utils/src/dom/disposal.ts", "../../../packages/utils/src/dom/manipulation.ts", "../../../packages/utils/src/dom/fixes.ts", "../../../packages/utils/src/dom/virtualElements.ts", "../../../packages/utils/src/dom/html.ts", "../../../packages/utils/src/dom/selectExtensions.ts", "../../../packages/utils/src/memoization.ts", "../../../packages/utils/src/tasks.ts", "../../../packages/observable/src/dependencyDetection.ts", "../../../packages/observable/src/subscribableSymbol.ts", "../../../packages/observable/src/defer.ts", "../../../packages/observable/src/Subscription.ts", "../../../packages/observable/src/extenders.ts", "../../../packages/observable/src/subscribable.ts", "../../../packages/observable/src/observable.ts", "../../../packages/observable/src/observableArray.changeTracking.ts", "../../../packages/observable/src/observableArray.ts", "../../../packages/observable/src/mappingHelpers.ts", "../../../packages/utils.parser/src/operators.ts", "../../../packages/utils.parser/src/Node.ts", "../../../packages/utils.parser/src/Expression.ts", "../../../packages/utils.parser/src/Arguments.ts", "../../../packages/utils.parser/src/identifierExpressions.ts", "../../../packages/utils.parser/src/Identifier.ts", "../../../packages/utils.parser/src/Parameters.ts", "../../../packages/utils.parser/src/Ternary.ts", "../../../packages/utils.parser/src/Parser.ts", "../../../packages/utils.parser/src/preparse.ts", "../../../packages/computed/src/computed.ts", "../../../packages/computed/src/throttleExtender.ts", "../../../packages/computed/src/proxy.ts", "../../../packages/computed/src/when.ts", "../../../packages/lifecycle/src/LifeCycle.ts", "../../../packages/bind/src/bindingEvent.ts", "../../../packages/bind/src/bindingContext.ts", "../../../packages/bind/src/BindingResult.ts", "../../../packages/bind/src/BindingHandler.ts", "../../../packages/bind/src/LegacyBindingHandler.ts", "../../../packages/bind/src/applyBindings.ts", "../../../packages/bind/src/arrayToDomNodeChildren.ts", "../../../packages/bind/src/DescendantBindingHandler.ts", "../../../packages/binding.template/src/templateSources.ts", "../../../packages/binding.template/src/templateEngine.ts", "../../../packages/binding.template/src/templating.ts", "../../../packages/binding.template/src/nativeTemplateEngine.ts", "../../../packages/binding.template/src/foreach.ts", "../../../packages/binding.template/src/index.ts", "../../../packages/builder/src/Builder.ts", "../../../packages/provider/src/BindingHandlerObject.ts", "../../../packages/provider/src/Provider.ts", "../../../packages/provider.bindingstring/src/BindingStringProvider.ts", "../../../packages/provider.virtual/src/VirtualProvider.ts", "../../../packages/provider.databind/src/DataBindProvider.ts", "../../../packages/utils.component/src/registry.ts", "../../../packages/utils.component/src/loaders.ts", "../../../packages/utils.component/src/ComponentABC.ts", "../../../packages/utils.component/src/index.ts", "../../../packages/provider.component/src/ComponentProvider.ts", "../../../packages/provider.attr/src/AttributeProvider.ts", "../../../packages/provider.multi/src/MultiProvider.ts", "../../../packages/binding.core/src/attr.ts", "../../../packages/binding.core/src/checked.ts", "../../../packages/binding.core/src/event.ts", "../../../packages/binding.core/src/click.ts", "../../../packages/binding.core/src/css.ts", "../../../packages/binding.core/src/descendantsComplete.ts", "../../../packages/binding.core/src/enableDisable.ts", "../../../packages/binding.core/src/hasfocus.ts", "../../../packages/binding.core/src/html.ts", "../../../packages/binding.core/src/let.ts", "../../../packages/binding.core/src/options.ts", "../../../packages/binding.core/src/selectedOptions.ts", "../../../packages/binding.core/src/style.ts", "../../../packages/binding.core/src/submit.ts", "../../../packages/binding.core/src/text.ts", "../../../packages/binding.core/src/textInput.ts", "../../../packages/binding.core/src/uniqueName.ts", "../../../packages/binding.core/src/value.ts", "../../../packages/binding.core/src/visible.ts", "../../../packages/binding.core/src/using.ts", "../../../packages/binding.core/src/index.ts", "../../../packages/binding.if/src/ConditionalBindingHandler.ts", "../../../packages/binding.if/src/ifUnless.ts", "../../../packages/binding.if/src/with.ts", "../../../packages/binding.if/src/else.ts", "../../../packages/binding.if/src/index.ts", "../../../packages/binding.foreach/src/foreach.ts", "../../../packages/binding.foreach/src/index.ts", "../../../packages/provider.native/src/NativeProvider.ts", "../../../packages/utils.jsx/src/jsxClean.ts", "../../../packages/utils.jsx/src/JsxObserver.ts", "../../../packages/utils.jsx/src/jsx.ts", "../../../packages/binding.component/src/componentBinding.ts", "../../../packages/binding.component/src/slotBinding.ts", "../../../packages/binding.component/src/index.ts", "../../../packages/filter.punches/src/index.ts", "../../../packages/utils.functionrewrite/src/functionRewrite.ts"],
|
|
4
|
+
"sourcesContent": ["import { Builder } from '@tko/builder'\n\nimport { VirtualProvider } from '@tko/provider.virtual'\nimport { DataBindProvider } from '@tko/provider.databind'\nimport { ComponentProvider } from '@tko/provider.component'\nimport { AttributeProvider } from '@tko/provider.attr'\nimport { MultiProvider } from '@tko/provider.multi'\n\nimport { bindings as coreBindings } from '@tko/binding.core'\nimport { bindings as templateBindings } from '@tko/binding.template'\nimport { bindings as ifBindings } from '@tko/binding.if'\nimport { bindings as foreachBindings } from '@tko/binding.foreach'\nimport { bindings as componentBindings } from '@tko/binding.component'\n\nimport { filters } from '@tko/filter.punches'\n\nimport components from '@tko/utils.component'\n\nimport { functionRewrite } from '@tko/utils.functionrewrite'\n\nimport { options as defaultOptions } from '@tko/utils'\n\ndeclare const BUILD_VERSION: string\n\n/**\n * expressionRewriting is deprecated in TKO because we have our own JS\n * parser now. This is here only for legacy compatibility.\n */\nconst dataBindProvider = new DataBindProvider()\nconst expressionRewriting = {\n preProcessBindings: s => dataBindProvider.preProcessBindings(s)\n}\n\nconst provider = new MultiProvider({\n providers: [new ComponentProvider(), dataBindProvider, new VirtualProvider(), new AttributeProvider()]\n})\n\nconst builder = new Builder({\n provider,\n bindings: [coreBindings, templateBindings, ifBindings, componentBindings, { each: foreachBindings.foreach }],\n extenders: {},\n filters,\n options: {\n bindingGlobals: defaultOptions.global,\n bindingStringPreparsers: [functionRewrite]\n }\n})\n\nconst version = BUILD_VERSION\nexport default builder.create({\n version,\n components,\n Component: components.ComponentABC,\n expressionRewriting\n})\n", "//\n// Array utilities\n//\n// Note that the array functions may be called with\n// Array-like things, such as NodeList.\n\nconst { isArray } = Array\n\nexport function arrayForEach<T = any>(\n array: T[],\n action: (item: T, index?: number, array?: T[]) => void,\n actionOwner?: any\n): void {\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}\n\nexport function arrayIndexOf<T = any>(array: Array<T>, item: T): number {\n return (isArray(array) ? array : [...array]).indexOf(item)\n}\n\nexport function arrayFirst<T = any>(\n array: T[],\n predicate: (item: T, index?: number) => boolean,\n predicateOwner?: any\n): T | undefined {\n return (isArray(array) ? array : [...array]).find(predicate, predicateOwner)\n}\n\nexport function arrayMap<T = any, U = any>(array: ArrayLike<T>, mapping: (item: T, index?: number) => U, thisArg?) {\n if (arguments.length > 2) {\n mapping = mapping.bind(thisArg)\n }\n return array === null ? [] : Array.from(array, mapping)\n}\n\nexport function arrayRemoveItem<T = any>(array: Array<T>, itemToRemove: T): void {\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}\n\nexport function arrayGetDistinctValues<T = any>(array: T[]): T[] {\n const seen = 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}\n\nexport function arrayFilter<T = any>(\n array: T[],\n predicate: (item: T, index?: number) => boolean,\n predicateOwner?: any\n): T[] {\n if (arguments.length > 2) {\n predicate = predicate.bind(predicateOwner)\n }\n return array === null ? [] : (isArray(array) ? array : [...array]).filter(predicate)\n}\n\nexport function arrayPushAll<T = any>(array: Array<T>, valuesToPush: ArrayLike<T>): T[] {\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}\n\nexport function addOrRemoveItem(array, value, included: boolean) {\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}\n\nexport function makeArray<T = any>(arrayLikeObject: ArrayLike<T>): T[] {\n return Array.from(arrayLikeObject)\n}\n\n//TODO May be MaybeSubscribable<number> -> I actually don't want the dependency\nexport function range(min: () => number | number, max: () => number | number): number[] {\n const minimum = typeof min === 'function' ? (min as () => number)() : (min as number)\n const maximum = typeof max === 'function' ? (max as () => number)() : (max as number)\n const result: number[] = []\n for (let i = minimum as number; i <= maximum; i++) {\n result.push(i)\n }\n return result\n}\n\n// Go through the items that have been added and deleted and try to find matches between them.\nexport function findMovesInArrayComparison(left, right, limitFailedCompares?: number | boolean) {\n if (left.length && right.length) {\n let failedCompares, l, r, leftItem, rightItem\n for (\n failedCompares = l = 0;\n (!limitFailedCompares || failedCompares < limitFailedCompares) && (leftItem = left[l]);\n ++l\n ) {\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) // This item is marked as moved; so remove it from right list\n failedCompares = r = 0 // Reset failed compares count because we're checking for consecutive failures\n break\n }\n }\n failedCompares += r\n }\n }\n}\n\nconst statusNotInOld = 'added'\nconst statusNotInNew = 'deleted'\n\nexport interface ArrayChange<T = any> {\n status: 'added' | 'deleted' | 'retained'\n value: T\n index: number\n moved?: number\n}\n\nexport type ArrayChanges<T = any> = ArrayChange<T>[]\n\nexport interface CompareArraysOptions {\n dontLimitMoves?: boolean\n sparse?: boolean\n}\n\n// Simple calculation based on Levenshtein distance.\nexport function compareArrays<T = any>(\n oldArray: T[],\n newArray: T[],\n options?: CompareArraysOptions | boolean\n): ArrayChanges<T> {\n // For backward compatibility, if the third arg is actually a bool, interpret\n // it as the old parameter 'dontLimitMoves'. Newer code should use { dontLimitMoves: true }.\n options = typeof options === 'boolean' ? { dontLimitMoves: options } : options || {}\n oldArray = oldArray || []\n newArray = newArray || []\n\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}\n\nfunction compareSmallArrayToBigArray<T = any>(\n smlArray: T[],\n bigArray: T[],\n statusNotInSml: 'added' | 'deleted',\n statusNotInBig: 'added' | 'deleted',\n options: CompareArraysOptions\n): ArrayChanges<T> {\n let myMin = Math.min,\n myMax = Math.max,\n editDistanceMatrix = new Array(),\n smlIndex,\n smlIndexMax = smlArray.length,\n bigIndex,\n bigIndexMax = bigArray.length,\n compareRange = bigIndexMax - smlIndexMax || 1,\n maxDistance = smlIndexMax + bigIndexMax + 1,\n thisRow,\n lastRow,\n bigIndexMaxForRow,\n bigIndexMinForRow\n\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 // Top row - transform empty array into new array via additions\n thisRow[bigIndex] = bigIndex + 1\n } else if (smlArray[smlIndex - 1] === bigArray[bigIndex - 1]) {\n thisRow[bigIndex] = lastRow[bigIndex - 1]\n } else {\n // copy value (no edit)\n const northDistance = lastRow[bigIndex] || maxDistance // not in big (deletion)\n const westDistance = thisRow[bigIndex - 1] || maxDistance // not in small (addition)\n thisRow[bigIndex] = myMin(northDistance, westDistance) + 1\n }\n }\n }\n\n let editScript = new Array(),\n meMinusOne,\n notInSml = new Array(),\n 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\n // Set a limit on the number of consecutive non-matching comparisons; having it a multiple of\n // smlIndexMax keeps the time complexity of this algorithm linear.\n findMovesInArrayComparison(notInBig, notInSml, !options.dontLimitMoves && smlIndexMax * 10)\n\n return editScript.reverse()\n}\n", "import type { Provider } from '@tko/provider'\nimport type { KnockoutInstance } from '@tko/builder'\n\nexport interface CustomBindingGlobalProperties {\n [customBindingName: string]: any\n}\n\nexport type BindingStringPreparsersFunction = (bindingString: string) => string\n\n//\n// This becomes ko.options\n// --\n//\n// This is the root 'options', which must be extended by others.\nexport class Options {\n // The following options can be set on ko.options to make a function rewriting or something similar.\n bindingStringPreparsers: BindingStringPreparsersFunction[] = []\n\n // Reference to the own knockout instance\n knockoutInstance: KnockoutInstance | null = null\n\n deferUpdates: boolean = false\n\n // Don't set this false, with jquery 3.7+\n useOnlyNativeEvents: boolean = true\n\n // Use HTML5 <template> tags if is supported\n useTemplateTag: boolean = true\n\n protoProperty: string = '__ko_proto__'\n\n // Modify the default attribute from `data-bind`.\n defaultBindingAttribute: string = 'data-bind'\n\n // Enable/disable <!-- ko binding: ... -> style bindings\n allowVirtualElements: boolean = true\n\n // Global variables that can be accessed from bindings.\n bindingGlobals: object & CustomBindingGlobalProperties = Object.create(null)\n\n // An instance of the binding provider.\n bindingProviderInstance: Provider\n\n // Whether the `with` binding creates a child context when used with `as`.\n createChildContextWithAs: boolean = false\n\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 disableJQueryUsage: boolean = false\n\n get jQuery(): JQueryStatic | undefined {\n if (this.disableJQueryUsage) return undefined\n return this._jQuery ?? (globalThis as any).jQuery\n }\n\n private _jQuery: JQueryStatic | undefined\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: JQueryStatic | undefined) {\n if (!jQuery) {\n this.disableJQueryUsage = true\n this._jQuery = undefined\n } else {\n this._jQuery = jQuery\n this.disableJQueryUsage = false\n }\n }\n\n Promise: PromiseConstructor = globalThis.Promise\n\n taskScheduler: any = null\n\n debug: boolean = false\n /**\n * The maximum size of template to parse.\n * Set to 0 to disable the limit.\n */\n templateSizeLimit: number = 4096\n\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 allowScriptTagsInTemplates: boolean = false\n\n private _sanitizeWarningLogged: boolean = false\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: string): string {\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\n global: any = globalThis\n\n document: Document = globalThis.document\n\n // Filters for bindings\n // data-bind=\"expression | filter_1 | filter_2\"\n filters: any = {}\n\n // Used by the template binding.\n includeDestroyed: boolean = false\n\n foreachHidesDestroyed: boolean = false\n\n onError(e: any, throws: boolean = true): typeof e {\n if (throws) throw e\n return e\n }\n\n set(name: string, value: any): void {\n this[name] = value\n }\n\n // Overload getBindingHandler to have a custom lookup function.\n getBindingHandler(key: string): any {\n return null\n }\n cleanExternalData(node: Node, callback?: Function) {}\n}\n\nconst options = new Options()\n\n/**\n * Define a custom option on ko.options with an optional side-effect setter.\n * Plugins use this to register their own configuration properties.\n *\n * Must be called before applyBindings \u2014 setters run side effects at\n * configuration time, not retroactively on already-parsed bindings.\n *\n * @example\n * defineOption('strictEquality', {\n * default: false,\n * set(strict) { /* swap operator functions *\\/ }\n * })\n * // Then: ko.options.strictEquality = true\n */\nexport function defineOption<T>(name: string, config: { default: T; set?: (value: T) => void }) {\n let _value = config.default\n Object.defineProperty(options, name, {\n get() {\n return _value\n },\n set(value: T) {\n _value = value\n config.set?.(value)\n },\n enumerable: true,\n configurable: true\n })\n // Run the setter with the default value to initialize side effects\n config.set?.(_value)\n}\n\nexport default options\n", "//\n// Error handling\n// ---\n//\n// The default onError handler is to re-throw.\nimport options from './options'\n\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}\n\nexport function deferError(error) {\n safeSetTimeout(function () {\n throw error\n }, 0)\n}\n\nexport function safeSetTimeout(handler, timeout: number) {\n return setTimeout(catchFunctionErrors(handler), timeout)\n}\n", "//\n// Asynchronous functionality\n// ---\nimport { safeSetTimeout } from './error'\n\nexport function throttle(callback, timeout) {\n let timeoutInstance: ReturnType<typeof setTimeout> | undefined\n return function (...args) {\n if (!timeoutInstance) {\n timeoutInstance = safeSetTimeout(function () {\n timeoutInstance = undefined\n callback(...args)\n }, timeout)\n }\n }\n}\n\nexport function debounce(callback, timeout: number) {\n let timeoutInstance: ReturnType<typeof setTimeout>\n return function (...args) {\n clearTimeout(timeoutInstance)\n timeoutInstance = safeSetTimeout(() => callback(...args), timeout)\n }\n}\n", "//\n// Object functions\n//\n\nexport function hasOwnProperty<T = any>(obj: T, propName: keyof T | any): boolean {\n return Object.prototype.hasOwnProperty.call(obj, propName)\n}\n\n/**\n * True when obj is a non-null object, or a function.\n * @param obj\n * @returns\n */\nexport function isObjectLike(obj) {\n if (obj === null) {\n return false\n }\n return typeof obj === 'object' || typeof obj === 'function'\n}\n\nexport function extend<T, U>(target: T, source: U): T & U {\n if (source) {\n for (const prop of Object.keys(source) as Array<keyof U>) {\n if (hasOwnProperty(source, prop)) {\n ;(target as T & U)[prop] = source[prop] as any\n }\n }\n }\n return target as T & U\n}\n\nexport function objectForEach<T = any>(obj: { [key: string]: T }, action: (key: string, value: T) => void): void {\n for (const prop in obj) {\n if (hasOwnProperty(obj, prop)) {\n action(prop, obj[prop])\n }\n }\n}\n\nexport function objectMap(source, mapping, thisArg?: any) {\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: string) {\n return hasOwnProperty(obj, propName) ? obj[propName] : undefined\n}\n\n/**\n * @deprecated Function is unused\n * */\nexport function clonePlainObjectDeep(obj, seen?: any[]) {\n if (!seen) {\n seen = new Array()\n }\n\n if (!obj || typeof obj !== 'object' || obj.constructor !== Object || seen.indexOf(obj) !== -1) {\n return obj\n }\n\n // Anything that makes it below is a plain object that has not yet\n // been seen/cloned.\n seen.push(obj)\n\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}\n\n/**\n * JSON.stringify, but inserts `...` for objects that are referenced\n * multiple times, preventing infinite recursion.\n */\nexport function safeStringify(value) {\n const seen = 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}\n\n/**\n * Promises/A+ compliant isThenable (per section 1.2)\n */\nexport function isThenable(object: any) {\n return isObjectLike(object) && typeof object.then === 'function'\n}\n", "function testOverwrite() {\n try {\n Object.defineProperty(function x() {}, 'length', {})\n return true\n } catch (e) {\n return false\n }\n}\n\nexport const functionSupportsLengthOverwrite = testOverwrite()\n\nexport function overwriteLengthPropertyIfSupported(fn, descriptor) {\n if (functionSupportsLengthOverwrite) {\n Object.defineProperty(fn, 'length', descriptor)\n }\n}\n", "//\n// String (and JSON)\n//\n\nexport function stringTrim(string) {\n return string === null || string === undefined\n ? ''\n : string.trim\n ? string.trim()\n : string.toString().replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g, '')\n}\n\nexport function stringStartsWith(string, startsWith) {\n string = string || ''\n if (startsWith.length > string.length) {\n return false\n }\n return string.substring(0, startsWith.length) === startsWith\n}\n\nexport function parseJson<T = any>(jsonString: string): T | null {\n if (typeof jsonString === 'string') {\n jsonString = stringTrim(jsonString)\n if (jsonString) {\n return JSON.parse(jsonString) as T\n }\n }\n return null\n}\n", "//\n// ES6 Symbols\n//\n\nexport const useSymbols = typeof Symbol === 'function'\n\nexport function createSymbolOrString(identifier) {\n return useSymbols ? Symbol(identifier) : identifier\n}\n", "//\n// DOM - CSS\n//\n\nimport { arrayForEach, addOrRemoveItem } from './array'\n\n// For details on the pattern for changing node classes\n// see: https://github.com/knockout/knockout/issues/1597\nconst cssClassNameRegex = /\\S+/g\n\nfunction toggleDomNodeCssClass(node: Element, classNames: string, shouldHaveClass?: boolean): void {\n let addOrRemoveFn\n if (!classNames) {\n return\n }\n if (typeof node.classList === 'object') {\n addOrRemoveFn = node.classList[shouldHaveClass ? 'add' : 'remove']\n arrayForEach(classNames.match(cssClassNameRegex)!, function (className) {\n addOrRemoveFn.call(node.classList, className)\n })\n } else if (typeof node.className['baseVal'] === 'string') {\n // SVG tag .classNames is an SVGAnimatedString instance\n toggleObjectClassPropertyString(node.className, 'baseVal', classNames, shouldHaveClass)\n } else {\n // node.className ought to be a string.\n toggleObjectClassPropertyString(node, 'className', classNames, shouldHaveClass)\n }\n}\n\nfunction toggleObjectClassPropertyString(obj, prop, classNames, shouldHaveClass) {\n // obj/prop is either a node/'className' or a SVGAnimatedString/'baseVal'.\n const currentClassNames = obj[prop].match(cssClassNameRegex) || []\n arrayForEach(classNames.match(cssClassNameRegex), function (className) {\n addOrRemoveItem(currentClassNames, className, shouldHaveClass)\n })\n obj[prop] = currentClassNames.join(' ')\n}\n\nexport { toggleDomNodeCssClass }\n", "//\n// Information about the DOM\n//\nimport { arrayFirst } from '../array'\n\nexport function domNodeIsContainedBy(node: Node, containedByNode: Node) {\n if (node === containedByNode) {\n return true\n }\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n return false\n } // Fixes issue #1162 - can't use node.contains for document fragments on IE8\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\n let parentNode: Node | null = node\n while (parentNode && parentNode != containedByNode) {\n parentNode = parentNode.parentNode\n }\n return !!parentNode\n}\n\nexport function domNodeIsAttachedToDocument(node) {\n return domNodeIsContainedBy(node, node.ownerDocument.documentElement)\n}\n\nexport function anyDomNodeIsAttachedToDocument(nodes) {\n return !!arrayFirst(nodes, domNodeIsAttachedToDocument)\n}\n\nexport function tagNameLower(element: Element) {\n // For HTML elements, tagName will always be upper case; for XHTML elements, it'll be lower case.\n // Possible future optimization: If we know it's an element from an XHTML document (not HTML),\n // we don't need to do the .toLowerCase() as it will always be lower case anyway.\n return element && element.tagName && element.tagName.toLowerCase()\n}\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}\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", "//\n// DOM Events\n//\n\nimport { objectForEach } from '../object'\nimport { catchFunctionErrors } from '../error'\nimport { tagNameLower } from './info'\n\nimport options from '../options'\n\n// Represent the known event types in a compact way, then at runtime transform it into a hash with event name as key (for fast lookup)\nconst knownEvents = {},\n knownEventTypesByEventName = {}\n\nknownEvents['UIEvents'] = ['keyup', 'keydown', 'keypress']\n\nknownEvents['MouseEvents'] = [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseover',\n 'mouseout',\n 'mouseenter',\n 'mouseleave'\n]\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})\n\nfunction isClickOnCheckableElement(element: Element, eventType: string) {\n if (tagNameLower(element) !== 'input' || !(element as HTMLInputElement).type) return false\n if (eventType.toLowerCase() != 'click') return false\n const inputType = (element as HTMLInputElement).type\n return inputType == 'checkbox' || inputType == 'radio'\n}\n\nexport function registerEventHandler(\n element: Element,\n eventType: string,\n handler: EventListener,\n eventOptions = false\n): void {\n const wrappedHandler = catchFunctionErrors(handler)\n const mustUseNative = Boolean(eventOptions)\n const jQuery = options.jQuery\n\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}\n\nfunction hasClick(element: Element): element is Element & { click(): void } {\n return typeof (element as any).click === 'function'\n}\n\nexport function triggerEvent(element: Element, eventType: string): void {\n if (!(element && element.nodeType)) {\n throw new Error('element must be a DOM node when calling triggerEvent')\n }\n\n // For click events on checkboxes and radio buttons, jQuery toggles the element checked state *after* the\n // event handler runs instead of *before*. (This was fixed in 1.9 for checkboxes but not for radio buttons.)\n const useClickWorkaround = isClickOnCheckableElement(element, eventType)\n\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 as any).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", "//\n// DOM node data\n//\n\nconst datastoreTime = new Date().getTime()\nconst dataStoreKeyExpandoPropertyName = `__ko__${datastoreTime}`\nconst dataStoreSymbol = Symbol('Knockout data')\nconst dataStore = {}\nlet uniqueId = 0\n\n// Prevent prototype pollution by restricting special property names\nfunction isSafeKey(key: string): boolean {\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'\n}\n\n/*\n * We considered using WeakMap, but it has a problem in IE 11 and Edge that\n * prevents using it cross-window, so instead we just store the data directly\n * on the node. See https://github.com/knockout/knockout/issues/2141\n */\nfunction getDataForNode(node: Node, createIfNotFound: boolean): any {\n let dataForNode = node[dataStoreSymbol]\n if (!dataForNode && createIfNotFound) {\n dataForNode = node[dataStoreSymbol] = {}\n }\n return dataForNode\n}\n\nfunction clear(node: Node): boolean {\n if (node[dataStoreSymbol]) {\n delete node[dataStoreSymbol]\n return true\n }\n return false\n}\n\n/**\n * Create a unique key-string identifier.\n */\nexport function nextKey() {\n return uniqueId++ + dataStoreKeyExpandoPropertyName\n}\n\nfunction get(node: Node, key: string) {\n if (!isSafeKey(key)) throw new Error('Unsafe key for DOM data: ' + key)\n\n const dataForNode = getDataForNode(node, false)\n return dataForNode && dataForNode[key]\n}\n\nfunction set(node: Node, key: string, value: any) {\n if (!isSafeKey(key)) throw new Error('Unsafe key for DOM data: ' + key)\n // Make sure we don't actually create a new domData key if we are actually deleting a value\n const dataForNode = getDataForNode(node, value !== undefined /* createIfNotFound */)\n if (dataForNode) {\n dataForNode[key] = value\n }\n}\n\nfunction getOrSet(node: Node, key: string, value: any) {\n if (!isSafeKey(key)) throw new Error('Unsafe key for DOM data: ' + key)\n const dataForNode = getDataForNode(node, true /* createIfNotFound */)\n return dataForNode[key] || (dataForNode[key] = value)\n}\n\nexport { get, set, getOrSet, clear }\n", "//\n// DOM node disposal\n//\n/* eslint no-cond-assign: 0 */\nimport * as domData from './data'\nimport { default as options } from '../options'\nimport { arrayRemoveItem, arrayIndexOf } from '../array'\n\nconst domDataKey = domData.nextKey()\n// Node types:\n// 1: Element\n// 8: Comment\n// 9: Document\nconst cleanableNodeTypes = { 1: true, 8: true, 9: true }\nconst cleanableNodeTypesWithDescendants = { 1: true, 9: true }\n\nfunction getDisposeCallbacksCollection(node: Node, createIfNotFound: boolean) {\n let allDisposeCallbacks = domData.get(node, domDataKey)\n if (allDisposeCallbacks === undefined && createIfNotFound) {\n allDisposeCallbacks = new Array()\n domData.set(node, domDataKey, allDisposeCallbacks)\n }\n return allDisposeCallbacks\n}\nfunction destroyCallbacksCollection(node: Node) {\n domData.set(node, domDataKey, undefined)\n}\n\nfunction cleanSingleNode(node: Node) {\n // Run all the dispose callbacks\n let callbacks = getDisposeCallbacksCollection(node, false)\n if (callbacks) {\n callbacks = callbacks.slice(0) // Clone, as the array may be modified during iteration (typically, callbacks will remove themselves)\n for (let i = 0; i < callbacks.length; i++) {\n callbacks[i](node)\n }\n }\n\n // Erase the DOM data\n domData.clear(node)\n\n // Perform cleanup needed by external libraries (currently only jQuery, but can be extended)\n for (let i = 0, j = otherNodeCleanerFunctions.length; i < j; ++i) {\n otherNodeCleanerFunctions[i](node)\n }\n\n if (options.cleanExternalData) {\n options.cleanExternalData(node)\n }\n\n // Clear any immediate-child comment nodes, as these wouldn't have been found by\n // node.getElementsByTagName('*') in cleanNode() (comment nodes aren't elements)\n if (cleanableNodeTypesWithDescendants[node.nodeType]) {\n cleanNodesInList(node.childNodes, true /* onlyComments */)\n }\n}\n\nfunction cleanNodesInList(nodeList: NodeList | HTMLCollectionBase, onlyComments?: boolean) {\n const cleanedNodes = new Array<Node>()\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\n// Exports\nexport function addDisposeCallback(node: Node, callback: (node: Node) => void) {\n if (typeof callback !== 'function') {\n throw new Error('Callback must be a function')\n }\n getDisposeCallbacksCollection(node, true).push(callback)\n}\n\nexport function removeDisposeCallback(node: Node, callback: (node: Node) => void) {\n const callbacksCollection = getDisposeCallbacksCollection(node, false)\n if (callbacksCollection) {\n arrayRemoveItem(callbacksCollection, callback)\n if (callbacksCollection.length === 0) {\n destroyCallbacksCollection(node)\n }\n }\n}\n\nexport function cleanNode(node: Node): typeof node {\n // First clean this node, where applicable\n if (cleanableNodeTypes[node.nodeType]) {\n cleanSingleNode(node)\n\n // ... then its descendants, where applicable\n if (cleanableNodeTypesWithDescendants[node.nodeType] && node instanceof Element) {\n cleanNodesInList(node.getElementsByTagName('*'))\n }\n }\n return node\n}\n\nexport function removeNode(node: Node | null) {\n if (!node) {\n return\n }\n\n cleanNode(node)\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n}\n\n// Expose supplemental node cleaning functions.\nexport const otherNodeCleanerFunctions = new Array<Function>()\n\nexport function addCleaner(fn: Function) {\n otherNodeCleanerFunctions.push(fn)\n}\n\nexport function removeCleaner(fn: Function) {\n const fnIndex = otherNodeCleanerFunctions.indexOf(fn)\n if (fnIndex >= 0) {\n otherNodeCleanerFunctions.splice(fnIndex, 1)\n }\n}\n\n// Special support for jQuery here because it's so commonly used.\n// Many jQuery plugins (including jquery.tmpl) store data using jQuery's equivalent of domData\n// so notify it to tear down any resources associated with the node & descendants here.\nexport function cleanjQueryData(node: Node) {\n const jQueryCleanNodeFn = options.jQuery ? options.jQuery.cleanData : null\n\n if (jQueryCleanNodeFn) {\n jQueryCleanNodeFn([node])\n }\n}\n\notherNodeCleanerFunctions.push(cleanjQueryData)\n", "//\n// DOM manipulation\n//\n/* eslint no-empty: 0 */\nimport { makeArray } from '../array'\nimport { cleanNode, removeNode } from './disposal'\n\nexport function moveCleanedNodesToContainerElement(nodes: ArrayLike<Node>) {\n // Ensure it's a real array, as we're about to reparent the nodes and\n // we don't want the underlying collection to change while we're doing that.\n const nodesArray = makeArray(nodes) as Node[]\n const templateDocument = (nodesArray[0] && nodesArray[0].ownerDocument) || document\n\n const container = templateDocument.createElement('div')\n for (let i = 0, j = nodesArray.length; i < j; i++) {\n container.appendChild(cleanNode(nodesArray[i]))\n }\n return container\n}\n\nexport function cloneNodes(nodesArray: ArrayLike<Node>, shouldCleanNodes?: boolean) {\n const newNodesArray = new Array()\n\n for (let i = 0; i < nodesArray.length; i++) {\n const clonedNode = nodesArray[i].cloneNode(true)\n newNodesArray.push(shouldCleanNodes ? cleanNode(clonedNode) : clonedNode)\n }\n\n return newNodesArray\n}\n\nexport function setDomNodeChildren(domNode: Node, childNodes: ArrayLike<Node>) {\n emptyDomNode(domNode)\n if (childNodes) {\n for (let i = 0; i < childNodes.length; i++) {\n domNode.appendChild(childNodes[i])\n }\n }\n}\n\nexport function replaceDomNodes(nodeToReplaceOrNodeArray: Node[] | Node, newNodesArray: Node[]) {\n const nodesToReplaceArray = Array.isArray(nodeToReplaceOrNodeArray)\n ? nodeToReplaceOrNodeArray\n : [nodeToReplaceOrNodeArray]\n if (nodesToReplaceArray.length > 0) {\n const insertionPoint = nodesToReplaceArray[0]\n const parent = insertionPoint.parentNode\n\n for (let i = 0; i < newNodesArray.length; i++) {\n parent?.insertBefore(newNodesArray[i], insertionPoint)\n }\n for (let i = 0; i < nodesToReplaceArray.length; i++) {\n removeNode(nodesToReplaceArray[i])\n }\n }\n}\n\nexport function emptyDomNode(domNode: Node) {\n while (domNode.firstChild) {\n removeNode(domNode.firstChild)\n }\n}\n", "//\n// DOM node manipulation\n//\n\nexport function fixUpContinuousNodeArray(continuousNodeArray, parentNode) {\n // Before acting on a set of nodes that were previously outputted by a template function, we have to reconcile\n // them against what is in the DOM right now. It may be that some of the nodes have already been removed, or that\n // new nodes might have been inserted in the middle, for example by a binding. Also, there may previously have been\n // leading comment nodes (created by rewritten string-based templates) that have since been removed during binding.\n // So, this function translates the old \"map\" output array into its best guess of the set of current DOM nodes.\n //\n // Rules:\n // [A] Any leading nodes that have been removed should be ignored\n // These most likely correspond to memoization nodes that were already removed during binding\n // See https://github.com/knockout/knockout/pull/440\n // [B] Any trailing nodes that have been remove should be ignored\n // This prevents the code here from adding unrelated nodes to the array while processing rule [C]\n // See https://github.com/knockout/knockout/pull/1903\n // [C] We want to output a continuous series of nodes. So, ignore any nodes that have already been removed,\n // and include any nodes that have been inserted among the previous collection\n\n if (continuousNodeArray.length) {\n // The parent node can be a virtual element; so get the real parent node\n parentNode = (parentNode.nodeType === Node.COMMENT_NODE && parentNode.parentNode) || parentNode\n\n // Rule [A]\n while (continuousNodeArray.length && continuousNodeArray[0].parentNode !== parentNode) {\n continuousNodeArray.splice(0, 1)\n }\n\n // Rule [B]\n while (\n continuousNodeArray.length > 1 &&\n continuousNodeArray[continuousNodeArray.length - 1].parentNode !== parentNode\n ) {\n continuousNodeArray.length--\n }\n\n // Rule [C]\n if (continuousNodeArray.length > 1) {\n let current = continuousNodeArray[0],\n last = continuousNodeArray[continuousNodeArray.length - 1]\n // Replace with the actual new continuous node set\n continuousNodeArray.length = 0\n while (current !== last) {\n continuousNodeArray.push(current)\n current = current.nextSibling\n }\n continuousNodeArray.push(last)\n }\n }\n return continuousNodeArray\n}\n\nexport function setOptionNodeSelectionState(optionNode, isSelected) {\n optionNode.selected = isSelected\n}\n", "/* eslint no-cond-assign: 0 */\n//\n// Virtual Elements\n//\n//\n// \"Virtual elements\" is an abstraction on top of the usual DOM API which understands the notion that comment nodes\n// may be used to represent hierarchy (in addition to the DOM's natural hierarchy).\n// If you call the DOM-manipulating functions on ko.virtualElements, you will be able to read and write the state\n// of that virtual hierarchy\n//\n// The point of all this is to support containerless templates (e.g., <!-- ko foreach:someCollection -->blah<!-- /ko -->)\n// without having to scatter special cases all over the binding and templating code.\n\nimport { emptyDomNode, setDomNodeChildren as setRegularDomNodeChildren } from './manipulation'\nimport { removeNode } from './disposal'\nimport { tagNameLower } from './info'\nimport * as domData from './data'\nimport options from '../options'\n\nexport const startCommentRegex = /^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/\nexport const endCommentRegex = /^\\s*\\/ko\\s*$/\nconst htmlTagsWithOptionallyClosingChildren = { ul: true, ol: true }\n\nexport function isStartComment(node) {\n return node.nodeType === Node.COMMENT_NODE && startCommentRegex.test(node.nodeValue)\n}\n\nexport function isEndComment(node) {\n return node.nodeType === Node.COMMENT_NODE && endCommentRegex.test(node.nodeValue)\n}\n\nfunction isUnmatchedEndComment(node) {\n return isEndComment(node) && !domData.get(node, matchedEndCommentDataKey)\n}\n\nconst matchedEndCommentDataKey = '__ko_matchedEndComment__'\n\nexport function getVirtualChildren(startComment, allowUnbalanced?) {\n let currentNode = startComment\n let depth = 1\n const children = new Array()\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\n children.push(currentNode)\n\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}\n\nfunction getMatchingEndComment(startComment, allowUnbalanced?) {\n const 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 } // Must have no matching end comment, and allowUnbalanced is true\n}\n\nfunction getUnbalancedChildTags(node) {\n // e.g., from <div>OK</div><!-- ko blah --><span>Another</span>, returns: <!-- ko blah --><span>Another</span>\n // from <div>OK</div><!-- /ko --><!-- /ko -->, returns: <!-- /ko --><!-- /ko -->\n let childNode = node.firstChild,\n captureRemaining: any = null\n if (childNode) {\n do {\n if (captureRemaining) {\n // We already hit an unbalanced node and are now just scooping up all subsequent nodes\n captureRemaining.push(childNode)\n } else if (isStartComment(childNode)) {\n const matchingEndComment = getMatchingEndComment(childNode, /* allowUnbalanced: */ true)\n if (matchingEndComment) {\n // It's a balanced tag, so skip immediately to the end of this virtual set\n childNode = matchingEndComment\n } else {\n captureRemaining = [childNode]\n } // It's unbalanced, so start capturing from this point\n } else if (isEndComment(childNode)) {\n captureRemaining = [childNode] // It's unbalanced (if it wasn't, we'd have skipped over it already), so start capturing\n }\n } while ((childNode = childNode.nextSibling))\n }\n return captureRemaining\n}\n\nexport interface VirtualElementsAllowedBindings {\n text: boolean\n foreach: boolean\n if: boolean\n ifnot: boolean\n with: boolean\n let: boolean\n using: boolean\n template: boolean\n component: boolean\n}\n\nexport const allowedBindings: VirtualElementsAllowedBindings = Object.create(null)\nexport const hasBindingValue = isStartComment\n\nexport function childNodes(node: Node): any {\n return isStartComment(node) ? getVirtualChildren(node) : node.childNodes\n}\n\nexport function emptyNode(node: Node) {\n if (!isStartComment(node)) {\n emptyDomNode(node)\n } else {\n const virtualChildren = childNodes(node)\n for (let i = 0, j = virtualChildren.length; i < j; i++) {\n removeNode(virtualChildren[i])\n }\n }\n}\n\nexport function setDomNodeChildren(node: Node, childNodes: Node[]) {\n if (!isStartComment(node)) {\n setRegularDomNodeChildren(node, childNodes)\n } else {\n emptyNode(node)\n const endCommentNode = node.nextSibling // Must be the next sibling, as we just emptied the children\n if (endCommentNode && endCommentNode.parentNode) {\n const parentNode = endCommentNode.parentNode\n for (let i = 0, j = childNodes.length; i < j; ++i) {\n parentNode.insertBefore(childNodes[i], endCommentNode)\n }\n }\n }\n}\n\nexport function prepend(containerNode: Node, nodeToPrepend: Node) {\n if (!isStartComment(containerNode)) {\n if (containerNode.firstChild) {\n containerNode.insertBefore(nodeToPrepend, containerNode.firstChild)\n } else {\n containerNode.appendChild(nodeToPrepend)\n }\n } else {\n // Start comments must always have a parent and at least one following sibling (the end comment)\n containerNode.parentNode?.insertBefore(nodeToPrepend, containerNode.nextSibling)\n }\n}\n\nexport function insertAfter(containerNode: Node, nodeToInsert: Node, insertAfterNode: Node) {\n if (!insertAfterNode) {\n prepend(containerNode, nodeToInsert)\n } else if (!isStartComment(containerNode)) {\n // Insert after insertion point\n if (insertAfterNode.nextSibling) {\n containerNode.insertBefore(nodeToInsert, insertAfterNode.nextSibling)\n } else {\n containerNode.appendChild(nodeToInsert)\n }\n } else {\n // Children of start comments must always have a parent and at least one following sibling (the end comment)\n containerNode.parentNode?.insertBefore(nodeToInsert, insertAfterNode.nextSibling)\n }\n}\n\nexport function firstChild(node: 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 as Element).outerHTML)\n }\n return node.firstChild\n }\n if (!node.nextSibling || isEndComment(node.nextSibling)) {\n return null\n }\n return node.nextSibling\n}\n\nexport function lastChild(node: Node) {\n let nextChild = firstChild(node)\n if (!nextChild) return null\n\n let lastChildNode\n\n do {\n lastChildNode = nextChild\n } while ((nextChild = nextSibling(nextChild)))\n\n return lastChildNode\n}\n\nexport function nextSibling(node: Node) {\n if (isStartComment(node)) {\n node = getMatchingEndComment(node)\n }\n\n if (node.nextSibling && isEndComment(node.nextSibling)) {\n if (isUnmatchedEndComment(node.nextSibling)) {\n throw Error(\n 'Found end comment without a matching opening comment, as next sibling of ' + (node as Element).outerHTML\n )\n }\n return null\n } else {\n return node.nextSibling\n }\n}\n\nexport function previousSibling(node) {\n let depth = 0\n do {\n if (node.nodeType === Node.COMMENT_NODE) {\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}\n\nexport function virtualNodeBindingValue(node): string | null {\n const regexMatch = node.nodeValue.match(startCommentRegex) as RegExpMatchArray\n return regexMatch ? regexMatch[1] : null\n}\n\nexport function normaliseVirtualElementDomStructure(elementVerified) {\n // Workaround for https://github.com/SteveSanderson/knockout/issues/155\n // (IE <= 8 or IE 9 quirks mode parses your HTML weirdly, treating closing </li> tags as if they don't exist, thereby moving comment nodes\n // that are direct descendants of <ul> into the preceding <li>)\n if (!htmlTagsWithOptionallyClosingChildren[tagNameLower(elementVerified)]) {\n return\n }\n\n // Scan immediate children to see if they contain unbalanced comment tags. If they do, those comment tags\n // must be intended to appear *after* that child, so move them there.\n let childNode = elementVerified.firstChild\n if (childNode) {\n do {\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n const unbalancedTags = getUnbalancedChildTags(childNode)\n if (unbalancedTags) {\n // Fix up the DOM by moving the unbalanced tags to where they most likely were intended to be placed - *after* the child\n const nodeToInsertBefore = childNode.nextSibling\n for (let 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", "//\n// HTML-based manipulation\n//\nimport { makeArray } from '../array'\nimport { emptyDomNode, moveCleanedNodesToContainerElement } from './manipulation'\nimport * as virtualElements from './virtualElements'\nimport options from '../options'\n\n// The canonical way to test that the HTML5 <template> tag is supported\nconst supportsTemplateTag =\n options.useTemplateTag && options.document && 'content' in options.document.createElement('template')\n\n/** @deprecated HTMLTemplateTag or the jquery-template-function as fallback are enough */\nfunction simpleHtmlParse(html: string, documentContext?: Document): Node[] {\n if (!documentContext) {\n documentContext = document\n }\n const div = documentContext.createElement('div')\n div.innerHTML = html\n return makeArray(div.childNodes)\n}\n\nfunction templateHtmlParse(html: string, documentContext?: Document): Node[] {\n if (!documentContext) {\n documentContext = document\n }\n const template = documentContext.createElement('template') as HTMLTemplateElement\n template.innerHTML = html\n return makeArray(template.content.childNodes)\n}\n\nfunction jQueryHtmlParse(html: string, documentContext?: Document): Node[] {\n const jQuery = options.jQuery\n\n // jQuery's \"parseHTML\" function was introduced in jQuery 1.8.0 and is a documented public API.\n if (jQuery) {\n return jQuery.parseHTML(html, documentContext) || [] // Ensure we always return an array and never null\n }\n\n return []\n}\n\n/**\n * parseHtmlFragment converts a string into an array of DOM Nodes.\n * If supported, it uses <template>-tag parsing, falling back on\n * jQuery parsing (if jQuery is present), and finally on a\n * straightforward parser.\n *\n * @param {string} html To be parsed.\n * @param {Document} documentContext That owns the executing code.\n * @return {[Node]} Parsed DOM Nodes\n */\nexport function parseHtmlFragment(html: string, documentContext?: Document): Node[] {\n const saferHtml = validateHTMLInput(html)\n\n // Prefer <template>-tag based HTML parsing.\n if (supportsTemplateTag) return templateHtmlParse(saferHtml, documentContext)\n\n //TODO: It is always true in modern browsers (higher IE11), so we can theoretically remove jQueryHtmlParse and simpleHtmlParse\n if (options.jQuery) {\n // Benefit from jQuery's on old browsers, where possible\n // NOTE: jQuery's HTML parsing fails on element names like tr-*.\n // See: https://github.com/jquery/jquery/pull/1988\n return jQueryHtmlParse(saferHtml, documentContext)\n }\n\n return simpleHtmlParse(saferHtml, documentContext)\n}\n\nconst scriptTagPattern = /<script\\b[^>]*>([\\s\\S]*?)<\\/script[^>]*>/i\nfunction validateHTMLInput(html: string): string {\n if (!html) return ''\n\n if (options.templateSizeLimit > 0 && html.length > options.templateSizeLimit) {\n throw new Error(\"Template is too long. Please configure the 'templateSizeLimit'\")\n }\n\n if (!options.allowScriptTagsInTemplates && scriptTagPattern.test(html)) {\n throw new Error('Script-tag in template detected.')\n }\n\n return options.sanitizeHtmlTemplate(html)\n}\n\nexport function parseHtmlForTemplateNodes(html, documentContext) {\n const nodes = parseHtmlFragment(html, documentContext)\n return (nodes.length && nodes[0].parentElement) || moveCleanedNodesToContainerElement(nodes)\n}\n\n/**\n * setHtml empties the node's contents, unwraps the HTML, and\n * sets the node's HTML using jQuery.html or parseHtmlFragment\n *\n * @param {DOMNode} node Node in which HTML needs to be set\n * @param {DOMNode} html HTML to be inserted in node\n * @returns undefined\n */\nexport function setHtml(node: Node, html: Function | string) {\n emptyDomNode(node)\n\n // There's few cases where we would want to display a stringified\n // function, so we unwrap it.\n if (typeof html === 'function') {\n html = html()\n }\n\n if (html !== null && html !== undefined) {\n if (typeof html !== 'string') {\n html = html.toString()\n }\n\n const jQuery = options.jQuery\n // If the browser supports <template> tags, prefer that, as\n // it obviates all the complex workarounds of jQuery.\n //\n // However, jQuery contains a lot of sophisticated code to parse arbitrary HTML fragments,\n // for example <tr> elements which are not normally allowed to exist on their own.\n // If you've referenced jQuery (and template tags are not supported) we'll use that rather than duplicating its code.\n if (jQuery && !supportsTemplateTag) {\n const saferHtml = validateHTMLInput(html)\n jQuery(node).html(saferHtml)\n } else {\n // ... otherwise, use KO's own parsing logic.\n let parsedNodes: Node[]\n if (node.ownerDocument) {\n parsedNodes = parseHtmlFragment(html, node.ownerDocument)\n } else {\n parsedNodes = parseHtmlFragment(html)\n }\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}\n\n//TODO May be MaybeSubscribable<string> -> I actually don't want the dependency\ntype TextContent = string | null | undefined | Function\nexport function setTextContent(element: Node, textContent?: TextContent): void {\n let value = typeof textContent === 'function' ? (textContent as Function)() : textContent\n if (value === null || value === undefined) {\n value = ''\n }\n\n // We need there to be exactly one child: a text node.\n // If there are no children, more than one, or if it's not a text node,\n // we'll clear everything and create a single text node.\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 ;(innerTextNode as Text).data = value\n }\n}\n", "import { tagNameLower } from './info'\nimport * as domData from './data'\n\nconst hasDomDataExpandoProperty = Symbol('Knockout selectExtensions hasDomDataProperty')\n\n// Normally, SELECT elements and their OPTIONs can only take value of type 'string' (because the values\n// are stored on DOM attributes). ko.selectExtensions provides a way for SELECTs/OPTIONs to have values\n// that are arbitrary objects. This is very convenient when implementing things like cascading dropdowns.\n//\nexport const selectExtensions = {\n optionValueDomDataKey: domData.nextKey(),\n\n readValue: function (element: HTMLElement) {\n switch (tagNameLower(element)) {\n case 'option': {\n if (element[hasDomDataExpandoProperty] === true) {\n return domData.get(element, selectExtensions.optionValueDomDataKey)\n }\n return (element as HTMLOptionElement).value\n }\n case 'select': {\n const selectElement = element as HTMLSelectElement\n return selectElement.selectedIndex >= 0\n ? selectExtensions.readValue(selectElement.options[selectElement.selectedIndex])\n : undefined\n }\n default:\n return (element as HTMLInputElement).value\n }\n },\n\n writeValue: function (element: HTMLElement, value?: any, allowUnset?: boolean) {\n switch (tagNameLower(element)) {\n case 'option':\n if (typeof value === 'string') {\n domData.set(element, selectExtensions.optionValueDomDataKey, undefined)\n if (hasDomDataExpandoProperty in element) {\n // IE <= 8 throws errors if you delete non-existent properties from a DOM node\n delete element[hasDomDataExpandoProperty]\n }\n ;(element as HTMLOptionElement).value = value\n } else {\n const el = element as any //TODO Custom-Type with hasDomDataExpandoProperty\n // Store arbitrary object using DomData\n domData.set(element, selectExtensions.optionValueDomDataKey, value)\n el[hasDomDataExpandoProperty] = true\n // Special treatment of numbers is just for backward compatibility. KO 1.2.1 wrote numerical values to element.value.\n el.value = typeof value === 'number' ? value : ''\n }\n\n break\n case 'select':\n {\n if (value === '' || value === null) {\n // A blank string or null value will select the caption\n value = undefined\n }\n let selection = -1\n\n const selectElement = element as HTMLSelectElement\n\n for (let i = 0, n = selectElement.options.length, optionValue; i < n; ++i) {\n optionValue = selectExtensions.readValue(selectElement.options[i])\n // Include special check to handle selecting a caption with a blank string value\n // Note that the looser == check here is intentional so that integer model values will match string element values.\n const strictEqual = optionValue === value\n const blankEqual = optionValue === '' && value === undefined\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 === undefined && selectElement.size > 1)) {\n selectElement.selectedIndex = selection\n }\n }\n break\n default:\n if (value === null || value === undefined) {\n value = ''\n }\n ;(element as HTMLInputElement).value = value\n break\n }\n }\n}\n", "//\n// Memoization\n//\nimport { arrayPushAll } from './array'\n\nconst memos = {}\n\nfunction randomMax8HexChars() {\n return (((1 + Math.random()) * 0x100000000) | 0).toString(16).substring(1)\n}\n\nfunction generateRandomId() {\n return randomMax8HexChars() + randomMax8HexChars()\n}\n\nfunction findMemoNodes(rootNode: Node, appendToArray: any[]) {\n if (!rootNode) {\n return\n }\n if (rootNode.nodeType === Node.COMMENT_NODE) {\n const comment = rootNode as Comment\n const memoId = parseMemoText(comment.nodeValue)\n if (memoId != null) {\n appendToArray.push({ domNode: rootNode, memoId: memoId })\n }\n } else if (rootNode.nodeType === Node.ELEMENT_NODE) {\n for (let i = 0, childNodes = rootNode.childNodes, j = childNodes.length; i < j; i++) {\n findMemoNodes(childNodes[i], appendToArray)\n }\n }\n}\n\nexport function memoize(callback: (val: any) => void): string {\n if (typeof callback !== 'function') {\n throw new Error('You can only pass a function to memoization.memoize()')\n }\n const memoId = generateRandomId()\n memos[memoId] = callback\n return '<!--[ko_memo:' + memoId + ']-->'\n}\n\nexport function unmemoize(memoId: string, callbackParams: any[]) {\n const callback = memos[memoId]\n if (callback === undefined) {\n throw new Error(\"Couldn't find any memo with ID \" + memoId + \". Perhaps it's already been unmemoized.\")\n }\n try {\n callback.apply(null, callbackParams || [])\n return true\n } finally {\n delete memos[memoId]\n }\n}\n\nexport function unmemoizeDomNodeAndDescendants(domNode: Node, extraCallbackParamsArray: any[]) {\n const memos = new Array()\n findMemoNodes(domNode, memos)\n for (let i = 0, j = memos.length; i < j; i++) {\n const node = memos[i].domNode\n const combinedParams = [node]\n if (extraCallbackParamsArray) {\n arrayPushAll(combinedParams, extraCallbackParamsArray)\n }\n unmemoize(memos[i].memoId, combinedParams)\n node.nodeValue = '' // Neuter this node so we don't try to unmemoize it again\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n } // If possible, erase it totally (not always possible - someone else might just hold a reference to it then call unmemoizeDomNodeAndDescendants again)\n }\n}\n\nexport function parseMemoText(memoText: string | null): string | null {\n if (!memoText) {\n return null\n }\n\n const match = memoText.match(/^\\[ko_memo\\:(.*?)\\]$/)\n return match ? match[1] : null\n}\n", "//\n// Tasks Micro-scheduler\n// ===\n//\n/* eslint no-cond-assign: 0 */\nimport options from './options'\nimport { deferError } from './error'\n\nlet taskQueue = new Array(),\n taskQueueLength = 0,\n nextHandle = 1,\n nextIndexToProcess = 0\n\nconst schedulerGlobal = options.global\n\nif (schedulerGlobal && typeof schedulerGlobal.queueMicrotask === 'function') {\n options.taskScheduler = callback => schedulerGlobal.queueMicrotask(callback)\n} else if (\n schedulerGlobal &&\n schedulerGlobal.MutationObserver &&\n schedulerGlobal.document &&\n !(schedulerGlobal.navigator && schedulerGlobal.navigator.standalone)\n) {\n options.taskScheduler = (function () {\n let scheduledCallback: null | (() => void) = null\n let toggle = false\n const div = schedulerGlobal.document.createElement('div')\n\n new schedulerGlobal.MutationObserver(function () {\n const callback = scheduledCallback\n scheduledCallback = null\n callback?.()\n }).observe(div, { attributes: true })\n\n return function (callback: () => void) {\n scheduledCallback = callback\n toggle = !toggle\n div.setAttribute('data-task-scheduler', toggle ? '1' : '0')\n }\n })()\n} else {\n options.taskScheduler = callback => setTimeout(callback, 0)\n}\n\nfunction processTasks() {\n if (taskQueueLength) {\n // Each mark represents the end of a logical group of tasks and the number of these groups is\n // limited to prevent unchecked recursion.\n let mark = taskQueueLength,\n countMarks = 0\n\n // nextIndexToProcess keeps track of where we are in the queue; processTasks can be called recursively without issue\n for (let task; nextIndexToProcess < taskQueueLength; ) {\n if ((task = taskQueue[nextIndexToProcess++])) {\n if (nextIndexToProcess > mark) {\n if (++countMarks >= 5000) {\n nextIndexToProcess = taskQueueLength // skip all tasks remaining in the queue since any of them could be causing the recursion\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}\n\nfunction scheduledProcess() {\n processTasks()\n\n // Reset the queue\n nextIndexToProcess = taskQueueLength = taskQueue.length = 0\n}\n\nfunction scheduleTaskProcessing() {\n options.taskScheduler(scheduledProcess)\n}\n\nexport function schedule(func: () => any): number {\n if (!taskQueueLength) {\n scheduleTaskProcessing()\n }\n\n taskQueue[taskQueueLength++] = func\n return nextHandle++\n}\n\nexport function cancel(handle: number) {\n const index = handle - (nextHandle - taskQueueLength)\n if (index >= nextIndexToProcess && index < taskQueueLength) {\n taskQueue[index] = null\n }\n}\n\n// For testing only: reset the queue and return the previous queue length\nexport function resetForTesting() {\n const length = taskQueueLength - nextIndexToProcess\n nextIndexToProcess = taskQueueLength = taskQueue.length = 0\n return length\n}\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 * 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 // biome-ignore lint/suspicious/noFallthroughSwitchClause: push sets offset then falls through to unshift\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 // biome-ignore lint/suspicious/noFallthroughSwitchClause: pop sets offset then falls through to shift\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", "import { unwrap } from '@tko/observable'\nimport { defineOption } from '@tko/utils'\n\nexport function LAMBDA() {}\n\n/**\n * @ operator - recursively call the identifier if it's a function\n * @param {operand} a ignored\n * @param {operand} b The variable to be called (if a function) and unwrapped\n * @return {value} The result.\n */\nfunction unwrapOrCall(a, b) {\n while (typeof b === 'function') {\n b = b()\n }\n return b\n}\n\nexport type OperatorFunction = (a: any, b: any, ...args: any[]) => any\n\nexport interface OperatorWithProperties extends OperatorFunction {\n earlyOut?: (a: any) => any\n precedence?: number\n}\n\nexport interface Operators {\n [key: string]: OperatorWithProperties\n}\nfunction looseEqual(a, b) {\n return a == b\n}\nlooseEqual.precedence = 10\n\nfunction looseNotEqual(a, b) {\n return a != b\n}\nlooseNotEqual.precedence = 10\n\nfunction strictEqual(a, b) {\n return a === b\n}\nstrictEqual.precedence = 10\n\nfunction strictNotEqual(a, b) {\n return a !== b\n}\nstrictNotEqual.precedence = 10\n\nconst operators: Operators = {\n // unary\n '@': unwrapOrCall,\n '#': (a, b) => () => unwrap(b), // Convert to read-only.\n '=>': LAMBDA,\n '!': function not(a, b) {\n return !b\n },\n '!!': function notnot(a, b) {\n return !!b\n },\n '++': function preinc(a, b) {\n return ++b\n },\n '--': function preinc(a, b) {\n return --b\n },\n // exponent\n '**': function exp(a, b) {\n return a ** b\n },\n // mul/div\n '*': function mul(a, b) {\n return a * b\n },\n '/': function div(a, b) {\n return a / b\n },\n '%': function mod(a, b) {\n return a % b\n },\n // sub/add\n '+': function add(a, b) {\n return a + b\n },\n '-': function sub(a, b) {\n return (a || 0) - (b || 0)\n },\n '&-': function neg(a, b) {\n return -1 * b\n }, // unary -\n // relational\n '<': function lt(a, b) {\n return a < b\n },\n '<=': function le(a, b) {\n return a <= b\n },\n '>': function gt(a, b) {\n return a > b\n },\n '>=': function ge(a, b) {\n return a >= b\n },\n // TODO: 'in': function (a, b) { return a in b; },\n // TODO: 'instanceof': function (a, b) { return a instanceof b; },\n // TODO: 'typeof': function (a, b) { return typeof b; },\n // equality \u2014 default loose; set options.strictEquality = true for === behavior\n '==': looseEqual,\n '!=': looseNotEqual,\n '===': strictEqual,\n '!==': strictNotEqual,\n // bitwise\n '&': function bitAnd(a, b) {\n return a & b\n },\n '^': function xor(a, b) {\n return a ^ b\n },\n '|': function bitOr(a, b) {\n return a | b\n },\n // logic\n '&&': function logicAnd(a, b) {\n return a && b\n },\n '||': function logicOr(a, b) {\n return a || b\n },\n '??': function nullishCoalesce(a, b) {\n return a ?? b\n },\n // Access\n '.': function member(a, b) {\n return a?.[b]\n },\n '?.': function omember(a, b) {\n return a?.[b]\n },\n '[': function bmember(a, b) {\n return a?.[b]\n },\n ',': function comma(a, b) {\n return b\n },\n // conditional/ternary\n // '?': ternary See Node.js\n // Function-Call\n call: function callOp(a, b) {\n return a.apply(null, b)\n }\n}\n\n/* Order of precedence from:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table\n*/\n\n// Our operator - unwrap/call\noperators['@'].precedence = 21\noperators['#'].precedence = 21\n\n// Member\noperators['.'].precedence = 19\noperators['['].precedence = 19\noperators['?.'].precedence = 19\n\n// Logical not\noperators['!'].precedence = 16\noperators['!!'].precedence = 16 // explicit double-negative\n\n// Prefix inc/dec\noperators['++'].precedence = 16\noperators['--'].precedence = 16\noperators['&-'].precedence = 16\n\n// exponent\noperators['**'].precedence = 15\n\n// mul/div/remainder\noperators['%'].precedence = 14\noperators['*'].precedence = 14\noperators['/'].precedence = 14\n\n// add/sub\noperators['+'].precedence = 13\noperators['-'].precedence = 13\n\n// bitwise\noperators['|'].precedence = 12\noperators['^'].precedence = 11\noperators['&'].precedence = 10\n\n// comparison\noperators['<'].precedence = 11\noperators['<='].precedence = 11\noperators['>'].precedence = 11\noperators['>='].precedence = 11\n\n// operators['in'].precedence = 8;\n// operators['instanceof'].precedence = 8;\n// equality\noperators['=='].precedence = 10\noperators['!='].precedence = 10\noperators['==='].precedence = 10\noperators['!=='].precedence = 10\n\n// logic\noperators['&&'].precedence = 6\noperators['||'].precedence = 5\noperators['??'].precedence = 5\n\noperators['&&'].earlyOut = a => !a\noperators['||'].earlyOut = a => a\noperators['??'].earlyOut = a => a\n\n// multiple values\noperators[','].precedence = 2\n\n// Call a function\noperators['call'].precedence = 1\n\n// lambda\noperators['=>'].precedence = 1\n\n// Extend the Options type so ko.options.strictEquality is strongly typed\ndeclare module '@tko/utils' {\n interface Options {\n strictEquality: boolean\n }\n}\n\n/** Register strictEquality as a configurable option on ko.options */\ndefineOption('strictEquality', {\n default: false,\n set(strict: boolean) {\n operators['=='] = strict ? strictEqual : looseEqual\n operators['!='] = strict ? strictNotEqual : looseNotEqual\n }\n})\n\nexport { operators as default }\n", "import { unwrap } from '@tko/observable'\n\nimport { default as operators, LAMBDA } from './operators'\n\nconst IS_EXPR_OR_IDENT = Symbol('Node - Is Expression Or Identifier')\n\nexport default class Node {\n lhs: any\n op: any\n rhs: any\n\n constructor(lhs, op, rhs) {\n this.lhs = lhs\n this.op = op\n this.rhs = rhs\n }\n\n static get operators() {\n return operators\n }\n\n get_leaf_value(leaf, context, globals, node) {\n if (typeof leaf === 'function') {\n // Expressions on observables are nonsensical, so we unwrap any\n // function values (e.g. identifiers).\n return unwrap(leaf())\n }\n\n // primitives\n if (typeof leaf !== 'object' || leaf === null) {\n return leaf\n }\n\n // Identifiers and Expressions\n if (leaf[Node.isExpressionOrIdentifierSymbol]) {\n // lhs is passed in as the parent of the leaf. It will be defined in\n // cases like a.b.c as 'a' for 'b' then as 'b' for 'c'.\n return unwrap(leaf.get_value(undefined, context, globals, node))\n }\n\n // Plain object/class.\n return leaf\n }\n\n /**\n * Return a function that calculates and returns an expression's value\n * when called.\n * @param {array} ops The operations to perform\n * @return {function} The function that calculates the expression.\n *\n * Note that for a lambda, we do not evaluate the RHS expression until\n * the lambda is called.\n */\n get_value(notused, context, globals, node: Node) {\n if (this.op === LAMBDA) {\n return (...args) => {\n let lambdaContext = context\n if (this.lhs) {\n lambdaContext = this.lhs.extendContext(context, args)\n }\n return this.get_leaf_value(this.rhs, lambdaContext, globals, this)\n }\n }\n\n const lhv = this.get_leaf_value(this.lhs, context, globals, this)\n const earlyOut = this.op.earlyOut\n\n if (earlyOut && earlyOut(lhv)) {\n return lhv\n }\n const rhv = this.get_leaf_value(this.rhs, context, globals, this)\n\n return this.op(lhv, rhv, context, globals)\n }\n\n //\n // Class variables.\n //\n static get isExpressionOrIdentifierSymbol() {\n return IS_EXPR_OR_IDENT\n }\n get [IS_EXPR_OR_IDENT]() {\n return true\n }\n\n static value_of(item, context?, globals?, node?: Node) {\n if (item && item[Node.isExpressionOrIdentifierSymbol]) {\n return item.get_value(item, context, globals, node)\n }\n return item\n }\n\n /**\n * Convert an array of nodes to an executable tree.\n * @return {object} An object with a `lhs`, `rhs` and `op` key, corresponding\n * to the left hand side, right hand side, and\n * operation function.\n */\n static create_root(nodes, debug = false) {\n // shunting yard algorithm with output to an abstact syntax tree of Nodes\n const out = new Array()\n const ops = new Array()\n for (let i = 0; i < nodes.length; i += 2) {\n out.push(nodes[i]) // next value\n const op = nodes[i + 1]\n\n // only left-associative operators are currently defined and handled here\n const prec = op?.precedence || 0 // no op for last value\n while (ops.length && prec <= ops[ops.length - 1].precedence) {\n const rhs = out.pop()\n const lhs = out.pop()\n out.push(new Node(lhs, ops.pop(), rhs))\n }\n ops.push(op)\n }\n if (out.length !== 1) {\n throw new Error(`unexpected nodes remain in shunting yard output stack: ${out}`)\n }\n return out[0]\n }\n}\n\n/**\n * Because of cyclical dependencies on operators <-> Node <-> value_of,\n * we need to patch this in here.\n */\noperators['?'] = function ternary(a, b, context, globals, node) {\n return Node.value_of(a ? b.yes : b.no, context, globals, node)\n}\noperators['?'].precedence = 4\n", "import Node from './Node'\n\nexport default class Expression {\n private nodes: any\n root: any\n\n constructor(nodes) {\n this.nodes = nodes\n this.root = Node.create_root(nodes)\n }\n\n /**\n * Return the value of `this` Expression instance.\n */\n get_value(parent, context, globals, node) {\n if (!this.root) {\n this.root = Node.create_root(this.nodes)\n }\n return this.root.get_value(parent, context, globals, node)\n }\n}\n\nExpression.prototype[Node.isExpressionOrIdentifierSymbol] = true\n", "import Node from './Node'\n\nexport default class Arguments {\n private parser: any\n private args: any\n\n constructor(parser, args) {\n this.parser = parser\n this.args = args\n }\n\n get_value(parent, context, globals, node) {\n const deReffedArgs = new Array()\n for (let i = 0, j = this.args.length; i < j; ++i) {\n deReffedArgs.push(Node.value_of(this.args[i], context, globals, node))\n }\n return deReffedArgs\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n}\n", "/**\n * The following regular expressions were generated by\n * https://mathiasbynens.be/demo/javascript-identifier-regex\n */\nexport const IDStart =\n /[\\$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/\n\nexport const IDContinue =\n /[\\$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/\n", "import Node from './Node'\nimport Arguments from './Arguments'\nimport type Parser from './Parser'\nimport { hasOwnProperty, isObjectLike } from '@tko/utils'\n\nimport { isWriteableObservable, isObservable } from '@tko/observable'\n\nimport { IDStart, IDContinue } from './identifierExpressions'\n\nexport default class Identifier {\n token: string\n dereferences: any\n parser: Parser\n\n constructor(parser: Parser, token: string, dereferences: any[]) {\n this.token = token\n this.dereferences = dereferences\n this.parser = parser\n }\n\n /**\n * Apply all () and [] functions on the identifier to the lhs value e.g.\n * a()[3] has deref functions that are essentially this:\n * [_deref_call, _deref_this where this=3]\n *\n * @param {mixed} value Should be an object.\n * @return {mixed} The dereferenced value.\n *\n * [1] We want to bind any function that is a method of an object, but not\n * corrupt any values (e.g. computed()s). e.g. Running x.bind(obj) where\n * we're given `data-bind='binding: obj.x'` and x is a computed will\n * break the computed's `this` and it will stop working as expected.\n *\n * The test `!last_value.hasOwnProperty(member)`\n * distinguishes between functions on the prototype chain (prototypal\n * members) and value-members added directly to the object. This may\n * not be the canonical test for this relationship, but it succeeds\n * in the known test cases.\n *\n * See: `this` tests of our dereference function.\n */\n dereference(value, $context, globals, node) {\n let member\n const refs = this.dereferences || []\n const $data = $context.$data || {}\n let lastValue // becomes `this` in function calls to object properties.\n let i, n\n\n for (i = 0, n = refs.length; i < n; ++i) {\n member = Node.value_of(refs[i], $context, globals, node)\n\n if (typeof value === 'function' && refs[i] instanceof Arguments) {\n // fn(args)\n value = value.apply(lastValue || $data, member)\n lastValue = value\n } else if (value === null || value === undefined) {\n // This acts like optional chaining ?.\n return value\n } else {\n // obj[x] or obj.x dereference. Note that obj may be a function.\n lastValue = value\n value = Node.value_of(value[member], $context, globals, node)\n }\n }\n\n // [1] See note above.\n if (typeof value === 'function' && n > 0 && lastValue !== value && !hasOwnProperty(lastValue, member)) {\n return value.bind(lastValue)\n }\n\n return value\n }\n\n /**\n * Return the value as one would get it from the top-level i.e.\n * $data.token/$context.token/globals.token; this does not return intermediate\n * values on a chain of members i.e. $data.hello.there -- requesting the\n * Identifier('there').value will return $data/$context/globals.there.\n *\n * This will dereference using () or [arg] member.\n * @param {object | Identifier | Expression} parent\n * @return {mixed} Return the primitive or an accessor.\n */\n get_value(parent, context, globals, node) {\n const intermediate =\n parent && !(parent instanceof Identifier)\n ? Node.value_of(parent, context, globals, node)[this.token]\n : context.lookup(this.token, globals, node)\n return this.dereference(intermediate, context, globals, node)\n }\n\n assign(object, property, value) {\n if (isWriteableObservable(object[property])) {\n object[property](value)\n } else if (!isObservable(object[property])) {\n object[property] = value\n }\n }\n\n /**\n * Set the value of the Identifier.\n *\n * @param {Mixed} new_value The value that Identifier is to be set to.\n */\n set_value(new_value, $context, globals) {\n const $data = $context.$data || {}\n const refs = this.dereferences || []\n let leaf: any = this.token\n let i, n, root\n\n if (isObjectLike($data) && leaf in $data) {\n root = $data\n } else if (leaf in $context) {\n root = $context\n } else if (leaf in globals) {\n root = globals\n } else {\n throw new Error(\n 'Identifier::set_value -- ' +\n \"The property '\" +\n leaf +\n \"' does not exist \" +\n 'on the $data, $context, or globals.'\n )\n }\n\n // Degenerate case. {$data|$context|global}[leaf] = something;\n n = refs.length\n if (n === 0) {\n this.assign(root, leaf, new_value)\n return\n }\n\n // First dereference is {$data|$context|global}[token].\n root = root[leaf]\n\n // We cannot use this.dereference because that gives the leaf; to evoke\n // the ES5 setter we have to call `obj[leaf] = new_value`\n for (i = 0; i < n - 1; ++i) {\n leaf = refs[i]\n if (leaf instanceof Arguments) {\n root = root()\n } else {\n root = root[Node.value_of(leaf)]\n }\n }\n\n // We indicate that a dereference is a function when it is `true`.\n if (refs[i] === true) {\n throw new Error('Cannot assign a value to a function.')\n }\n\n // Call the setter for the leaf.\n if (refs[i]) {\n this.assign(root, Node.value_of(refs[i]), new_value)\n }\n }\n\n /**\n * Determine if a character is a valid item in an identifier.\n * Note that we do not check whether the first item is a number, nor do we\n * support unicode identifiers here.\n *\n * From: http://stackoverflow.com/a/9337047\n * @param {String} ch The character\n * @return {Boolean} True if this is a valid identifier\n */\n // function is_identifier_char(ch) {\n // return (ch >= 'A' && ch <= 'Z') ||\n // (ch >= 'a' && ch <= 'z') ||\n // (ch >= '0' && ch <= 9) ||\n // ch === '_' || ch === '$';\n // }\n static is_valid_start_char(ch) {\n return IDStart.test(ch)\n }\n\n static is_valid_continue_char(ch) {\n return IDContinue.test(ch)\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n}\n", "import operators from './operators'\nimport Node from './Node'\nimport Expression from './Expression'\nimport Identifier from './Identifier'\n\nexport default class Parameters {\n #names: any[]\n\n constructor(parser, node) {\n // convert a node of comma-separated Identifiers to Parameters\n if (node instanceof Expression) {\n node = node.root\n }\n try {\n this.#names = Parameters.nodeTreeToNames(node)\n } catch (e) {\n parser.error(e)\n }\n }\n\n extendContext(context, args) {\n if (!this.#names) {\n return context\n } else {\n const newValues = {}\n this.#names.forEach((name, index) => {\n newValues[name] = args[index]\n })\n return context.extend(newValues)\n }\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n\n static nodeTreeToNames(node) {\n // left-associative series of commas produces a tree with children only on the lhs, so we can extract the leaves with a simplified depth-first traversal\n const names = new Array()\n while (node) {\n if (node instanceof Identifier) {\n names.push(node.token)\n node = null\n } else if (this.isCommaNode(node)) {\n names.push(node.rhs.token)\n node = node.lhs\n } else {\n throw new Error(\n `only simple identifiers allowed in lambda parameter list but found ${JSON.stringify(node, null, 2)}`\n )\n }\n }\n names.reverse()\n return names\n }\n\n static isCommaNode(node) {\n return node instanceof Node && node.op === operators[','] && node.rhs instanceof Identifier\n }\n}\n", "import Node from './Node'\n\nexport default class Ternary {\n yes: any\n no: any\n constructor(yes?, no?) {\n Object.assign(this, { yes, no })\n }\n\n get_value() {\n return this\n }\n\n get [Node.isExpressionOrIdentifierSymbol]() {\n return true\n }\n}\n", "/**\n * Originally based on (public domain):\n * https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n */\n\nimport { options, objectForEach, clonePlainObjectDeep, extend, hasOwnProperty } from '@tko/utils'\n\nimport { default as Expression } from './Expression'\nimport { default as Identifier } from './Identifier'\nimport { default as Arguments } from './Arguments'\nimport { default as Parameters } from './Parameters'\nimport { default as Ternary } from './Ternary'\nimport { default as Node } from './Node'\nimport { default as operators } from './operators'\n\nconst escapee = {\n \"'\": \"'\",\n '\"': '\"',\n '`': '`',\n '\\\\': '\\\\',\n '/': '/',\n $: '$',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t'\n}\n\ntype InnerFilterType = (value: any, ignored: any, context: any, globals: any, node: any) => any\n\ntype FilterType = InnerFilterType & { precedence: number }\n\n/**\n * Construct a new Parser instance with new Parser(node, context)\n * @param {Node} node The DOM element from which we parsed the\n * content.\n * @param {object} context The Knockout context.\n * @param {object} globals An object containing any desired globals.\n */\nexport default class Parser {\n ch: any\n at: any\n text: any\n currentContextGlobals: [context: object, globals: object, node: any]\n\n white() {\n let ch = this.ch\n while (ch && ch <= ' ') {\n ch = this.next()\n }\n return this.comment(ch)\n }\n\n /**\n * Slurp any C or C++ style comments\n */\n comment(ch) {\n if (ch !== '/') {\n return ch\n }\n const p = this.at\n const second = this.lookahead()\n if (second === '/') {\n while (ch) {\n ch = this.next()\n if (ch === '\\n' || ch === '\\r') {\n break\n }\n }\n ch = this.next()\n } else if (second === '*') {\n while (ch) {\n ch = this.next()\n if (ch === '*' && this.lookahead() === '/') {\n this.next()\n break\n }\n }\n if (!ch) {\n this.error('Unclosed comment, starting at character ' + p)\n }\n this.next()\n return this.white()\n }\n return ch\n }\n\n next(c?: string) {\n if (c && c !== this.ch) {\n this.error(\"Expected '\" + c + \"' but got '\" + this.ch + \"'\")\n }\n this.ch = this.text.charAt(this.at)\n this.at += 1\n return this.ch\n }\n\n lookahead() {\n return this.text[this.at]\n }\n\n error(m) {\n if (m instanceof Error) {\n throw m\n }\n throw this.createError(m)\n }\n\n createError(m) {\n const [name, msg] = m.name ? [m.name, m.message] : [m, '']\n const message = `\\n${name} ${msg} of ${this.text}\\n` + Array(this.at).join(' ') + '_/ \uD83D\uDD25 \\\\_\\n'\n return new Error(message)\n }\n\n name() {\n // A name of a binding\n let name = ''\n let enclosedBy\n this.white()\n\n let ch = this.ch\n\n if (ch === \"'\" || ch === '\"') {\n enclosedBy = ch\n ch = this.next()\n }\n\n while (ch) {\n if (enclosedBy && ch === enclosedBy) {\n this.white()\n ch = this.next()\n if (ch !== ':' && ch !== ',') {\n this.error('Object name: ' + name + ' missing closing ' + enclosedBy)\n }\n return name\n } else if (ch === ':' || ch <= ' ' || ch === ',' || ch === '|') {\n return name\n }\n name += ch\n ch = this.next()\n }\n\n return name\n }\n\n number() {\n let number\n let string = ''\n let ch = this.ch\n\n if (ch === '-') {\n string = '-'\n ch = this.next('-')\n }\n while (ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n if (ch === '.') {\n string += '.'\n ch = this.next()\n while (ch && ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch\n ch = this.next()\n if (ch === '-' || ch === '+') {\n string += ch\n ch = this.next()\n }\n while (ch >= '0' && ch <= '9') {\n string += ch\n ch = this.next()\n }\n }\n number = +string\n if (!isFinite(number)) {\n options.onError(new Error('Bad number: ' + number + ' in ' + string))\n } else {\n return number\n }\n }\n\n /**\n * Add a property to 'object' that equals the given value.\n * @param {Object} object The object to add the value to.\n * @param {String} key object[key] is set to the given value.\n * @param {mixed} value The value, may be a primitive or a function. If a\n * function it is unwrapped as a property.\n */\n objectAddValue(object, key, value) {\n if (value && value[Node.isExpressionOrIdentifierSymbol]) {\n Object.defineProperty(object, key, {\n get: () => Node.value_of(value, ...this.currentContextGlobals),\n enumerable: true\n })\n } else if (Array.isArray(value)) {\n Object.defineProperty(object, key, {\n get: () => value.map(v => Node.value_of(v, ...this.currentContextGlobals)),\n enumerable: true\n })\n } else {\n // primitives\n object[key] = value\n }\n }\n\n object() {\n let key: string\n const object = {}\n let ch = this.ch\n\n if (ch === '{') {\n this.next('{')\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n while (ch) {\n if (ch === '\"' || ch === \"'\" || ch === '`') {\n key = this.string()\n } else {\n key = this.name()\n }\n if (hasOwnProperty(object, key)) {\n this.error('Duplicate key \"' + key + '\"')\n }\n if (this.white() === ':') {\n ch = this.next(':')\n this.objectAddValue(object, key, this.singleValueExpression())\n } else {\n const objectKeyIsValue = new Identifier(this, key, [])\n this.objectAddValue(object, key, objectKeyIsValue)\n }\n\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n\n this.next(',')\n ch = this.white()\n if (ch === '}') {\n ch = this.next('}')\n return object\n }\n }\n }\n throw this.createError('Bad object')\n }\n\n /**\n * Read up to delim and return the string\n * @param {string} delim The delimiter, either ' or \"\n * @return {string} The string read.\n */\n readString(delim) {\n let string = ''\n const nodes = ['']\n const plusOp: any = operators['+']\n let hex\n let i\n let uffff\n const interpolate = delim === '`'\n let ch = this.next()\n\n while (ch) {\n if (ch === delim) {\n ch = this.next()\n if (interpolate) {\n nodes.push(plusOp)\n }\n nodes.push(string)\n return nodes\n }\n if (ch === '\\\\') {\n ch = this.next()\n if (ch === 'u') {\n uffff = 0\n for (i = 0; i < 4; i += 1) {\n hex = parseInt((ch = this.next()), 16)\n if (!isFinite(hex)) {\n break\n }\n uffff = uffff * 16 + hex\n }\n string += String.fromCharCode(uffff)\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch]\n } else {\n break\n }\n } else if (interpolate && ch === '$') {\n ch = this.next()\n if (ch === '{') {\n this.next('{')\n nodes.push(plusOp)\n nodes.push(string)\n nodes.push(plusOp)\n nodes.push(this.expression())\n string = ''\n // this.next('}');\n } else {\n string += '$' + ch\n }\n } else {\n string += ch\n }\n ch = this.next()\n }\n\n throw this.createError('Bad string')\n }\n\n string() {\n const ch = this.ch\n if (ch === '\"') {\n return this.readString('\"')?.join('')\n } else if (ch === \"'\") {\n return this.readString(\"'\")?.join('')\n } else if (ch === '`') {\n return Node.create_root(this.readString('`'))\n }\n\n this.error('Bad string')\n }\n\n array() {\n const array = new Array()\n let ch = this.ch\n\n if (ch === '[') {\n ch = this.next('[')\n this.white()\n if (ch === ']') {\n ch = this.next(']')\n return array\n }\n while (ch) {\n array.push(this.singleValueExpression())\n ch = this.white()\n if (ch === ']') {\n ch = this.next(']')\n return array\n }\n this.next(',')\n ch = this.white()\n }\n }\n throw this.createError('Bad array')\n }\n\n value() {\n this.white()\n const ch = this.ch\n switch (ch) {\n case '{':\n return this.object()\n case '[':\n return this.array()\n case '\"':\n case \"'\":\n case '`':\n return this.string()\n case '-':\n return this.number()\n default:\n return ch >= '0' && ch <= '9' ? this.number() : this.identifier()\n }\n }\n\n /**\n * Get the function for the given operator.\n * A `.precedence` value is added to the function, with increasing\n * precedence having a higher number.\n * @return {function} The function that performs the infix operation\n */\n operator(opts) {\n let op = ''\n let opFn\n let ch = this.white()\n let isIdentifierChar = Identifier.is_valid_start_char\n\n while (ch) {\n if (\n isIdentifierChar(ch) ||\n ch <= ' ' ||\n ch === '' ||\n ch === '\"' ||\n ch === \"'\" ||\n ch === '{' ||\n ch === '(' ||\n ch === '`' ||\n ch === ')' ||\n (ch <= '9' && ch >= '0')\n ) {\n break\n }\n\n if (!opts.not_an_array && ch === '[') {\n break\n }\n\n op += ch\n ch = this.next()\n\n // An infix followed by the prefix e.g. a + @b\n // TODO: other prefix unary operators\n if (ch === '@') {\n break\n }\n\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n\n if (op !== '') {\n if (opts.prefix && op === '-') {\n op = '&-'\n }\n opFn = operators[op]\n\n if (!opFn) {\n this.error(\"Bad operator: '\" + op + \"'.\")\n }\n }\n\n return opFn\n }\n\n /**\n * Filters\n * Returns what the Node interprets as an \"operator\".\n * e.g.\n * <span data-bind=\"text: name | fit:20 | uppercase\"></span>\n */\n filter(): FilterType {\n let ch = this.next()\n const args = new Array()\n\n let nextFilter: ((any) => any) | InnerFilterType = function (v) {\n return v\n }\n const name = this.name()\n\n if (!options.filters[name]) {\n options.onError(new Error('Cannot find filter by the name of: ' + name))\n }\n\n ch = this.white()\n\n while (ch) {\n if (ch === ':') {\n ch = this.next()\n args.push(this.singleValueExpression('|'))\n }\n\n if (ch === '|') {\n nextFilter = this.filter()\n break\n }\n\n if (ch === ',') {\n break\n }\n\n ch = this.white()\n }\n\n function filter(value, ignored, context, globals, node) {\n const argValues = [value]\n\n for (let i = 0, j = args.length; i < j; ++i) {\n argValues.push(Node.value_of(args[i], context, globals, node))\n }\n\n return nextFilter(options.filters[name].apply(context, argValues), ignored, context, globals, node)\n }\n\n // Lowest precedence.\n filter.precedence = 1\n return filter\n }\n\n /**\n * Parse an expression \u2013 builds an operator tree, in something like\n * Shunting-Yard.\n * See: http://en.wikipedia.org/wiki/Shunting-yard_algorithm\n *\n * @param filterable - Whether the expression can include jinga-style filters.\n * An argument of '|' is used only by the filter() method to parse subsequent\n * filters.\n * @param allowMultipleValues - Whether multiple values separated by commas are\n * allowed in this expression. When true (default), this method consumes\n * subsequent comma-separated values.\n * @see {@link Parser.singleValueExpression}\n *\n * @returns a function that computes the value of the expression\n * when called or a primitive.\n */\n expression(filterable: string | boolean = false, allowMultipleValues: boolean = true) {\n let op\n const nodes = new Array()\n let ch = this.white()\n\n while (ch) {\n // unary prefix operators\n op = this.operator({ prefix: true })\n if (op) {\n nodes.push(undefined) // LHS Tree node.\n nodes.push(op)\n ch = this.white()\n }\n\n if (ch === '(') {\n this.next()\n nodes.push(this.expression())\n this.next(')')\n } else {\n nodes.push(this.value())\n }\n ch = this.white()\n\n if (\n ch === ':' ||\n ch === '}' ||\n ch === ']' ||\n ch === ')' ||\n ch === '' ||\n ch === '`' ||\n (ch === '|' && filterable === '|') ||\n (ch === ',' && !allowMultipleValues)\n ) {\n break\n }\n\n // filters\n if (ch === '|' && this.lookahead() !== '|' && filterable) {\n nodes.push(this.filter())\n nodes.push(undefined)\n break\n }\n\n // infix or postfix operators\n op = this.operator({ not_an_array: true })\n\n if (op === operators['?']) {\n this.ternary(nodes)\n break\n } else if (op === operators['.'] || op === operators['?.']) {\n nodes.push(op)\n nodes.push(this.member())\n op = null\n } else if (op === operators['[']) {\n nodes.push(op)\n nodes.push(this.expression())\n ch = this.next(']')\n op = null\n } else if (op === operators['=>']) {\n // convert the last node to Parameters\n nodes[nodes.length - 1] = new Parameters(this, nodes[nodes.length - 1])\n nodes.push(op)\n } else if (op) {\n nodes.push(op)\n }\n\n ch = this.white()\n\n if (ch === ']' || (!op && ch === '(')) {\n break\n }\n }\n\n if (nodes.length === 0) {\n return undefined\n }\n\n const dereferences = this.dereferences()\n\n if (nodes.length === 1 && !dereferences.length) {\n return nodes[0]\n }\n\n for (let i = 0, j = dereferences.length; i < j; ++i) {\n const deref = dereferences[i]\n if (deref.constructor === Arguments) {\n nodes.push(operators.call)\n } else {\n nodes.push(operators['.'])\n }\n nodes.push(deref)\n }\n\n return new Expression(nodes)\n }\n\n /**\n * Use this method to parse expressions that can be followed by additional markup\n * separated by a comma, such as in bindings strings.\n *\n * @returns an expression that cannot contain multiple values separated by commas.\n * @see {@link Parser.expression}\n */\n singleValueExpression(filterable: boolean | string = false) {\n return this.expression(filterable, false)\n }\n\n ternary(nodes) {\n const ternary = new Ternary()\n ternary.yes = this.singleValueExpression()\n this.next(':')\n ternary.no = this.singleValueExpression()\n nodes.push(operators['?'])\n nodes.push(ternary)\n }\n\n /**\n * Parse the arguments to a function, returning an Array.\n *\n */\n funcArguments() {\n const args = new Array()\n let ch = this.next('(')\n\n while (ch) {\n ch = this.white()\n if (ch === ')') {\n this.next(')')\n return new Arguments(this, args)\n } else {\n args.push(this.singleValueExpression())\n ch = this.white()\n }\n if (ch !== ')') {\n this.next(',')\n }\n }\n\n throw this.createError('Bad arguments to function')\n }\n\n /**\n * The literal string reference `abc` in an `x.abc` expression.\n */\n member() {\n let member = ''\n let ch = this.white()\n let isIdentifierChar = Identifier.is_valid_start_char\n\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break\n }\n member += ch\n ch = this.next()\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n return member\n }\n\n /**\n * A dereference applies to an identifer, being either a function\n * call \"()\" or a membership lookup with square brackets \"[member]\".\n * @return {fn or undefined} Dereference function to be applied to the\n * Identifier\n */\n dereference() {\n let member\n const ch = this.white()\n\n while (ch) {\n if (ch === '(') {\n // a(...) function call\n return this.funcArguments()\n } else if (ch === '[') {\n // a[x] membership\n this.next('[')\n member = this.expression()\n this.white()\n this.next(']')\n\n return member\n } else if (ch === '.') {\n // a.x membership\n this.next('.')\n return this.member()\n } else {\n break\n }\n }\n }\n\n dereferences() {\n const ch = this.white()\n const dereferences = new Array()\n let deref\n\n while (ch) {\n deref = this.dereference()\n if (deref !== undefined) {\n dereferences.push(deref)\n } else {\n break\n }\n }\n return dereferences\n }\n\n identifier() {\n let token = ''\n let isIdentifierChar = Identifier.is_valid_start_char\n let ch = this.white()\n\n while (ch) {\n if (!isIdentifierChar(ch)) {\n break\n }\n token += ch\n ch = this.next()\n isIdentifierChar = Identifier.is_valid_continue_char\n }\n switch (token) {\n case 'true':\n return true\n case 'false':\n return false\n case 'null':\n return null\n case 'undefined':\n return void 0\n case 'function':\n throw new Error('Knockout: Anonymous functions are no longer supported, but `=>` lambdas are. In: ' + this.text)\n // return this.anonymous_fn();\n }\n return new Identifier(this, token, this.dereferences())\n }\n\n readBindings() {\n let key\n const bindings = {}\n let sep\n let expr\n let ch = this.ch\n\n while (ch) {\n key = this.name()\n sep = this.white()\n\n if (!sep || sep === ',') {\n if (sep) {\n ch = this.next(',')\n } else {\n ch = ''\n }\n // A \"bare\" binding e.g. \"text\"; substitute value of 'null'\n // so it becomes \"text: null\".\n bindings[key] = null\n } else {\n if (key.indexOf('.') !== -1) {\n // Namespaced \u2013 i.e.\n // `attr.css: x` becomes `attr: { css: x }`\n // ^^^ - key\n key = key.split('.')\n bindings[key[0]] = bindings[key[0]] || {}\n\n if (key.length !== 2) {\n options.onError(new Error('Binding ' + key + ' should have two parts (a.b).'))\n } else if (bindings[key[0]].constructor !== Object) {\n options.onError(new Error('Binding ' + key[0] + '.' + key[1] + ' paired with a non-object.'))\n }\n\n ch = this.next(':')\n this.objectAddValue(bindings[key[0]], key[1], this.singleValueExpression(true))\n } else {\n ch = this.next(':')\n if (bindings[key] && typeof bindings[key] === 'object' && bindings[key].constructor === Object) {\n // Extend a namespaced bindings e.g. we've previously seen\n // on.x, now we're seeing on: { 'abc' }.\n expr = this.singleValueExpression(true)\n if (typeof expr !== 'object' || expr.constructor !== Object) {\n options.onError(new Error('Expected plain object for ' + key + ' value.'))\n } else {\n extend(bindings[key], expr)\n }\n } else {\n bindings[key] = this.singleValueExpression(true)\n }\n }\n\n this.white()\n if (this.ch) {\n ch = this.next(',')\n } else {\n ch = ''\n }\n }\n }\n return bindings\n }\n\n valueAsAccessor(value, context, globals, node) {\n if (!value) {\n return () => value\n }\n if (typeof value === 'function') {\n return value\n }\n\n if (value[Node.isExpressionOrIdentifierSymbol]) {\n return () => Node.value_of(value, context, globals, node)\n }\n\n if (Array.isArray(value)) {\n return () => value.map(v => Node.value_of(v, context, globals, node))\n }\n\n if (typeof value !== 'function') {\n return () => clonePlainObjectDeep(value)\n }\n\n throw new Error('Value has cannot be converted to accessor: ' + value)\n }\n\n /**\n * Convert result[name] from a value to a function (i.e. `valueAccessor()`)\n * @param {object} result [Map of top-level names to values]\n * @return {object} [Map of top-level names to functions]\n *\n * Accessors may be one of (below) constAccessor, identifierAccessor,\n * expressionAccessor, or nodeAccessor.\n */\n convertToAccessors(result, context, globals, node) {\n objectForEach(result, (name, value) => {\n if (value instanceof Identifier) {\n // Return a function that, with no arguments returns\n // the value of the identifier, otherwise sets the\n // value of the identifier to the first given argument.\n Object.defineProperty(result, name, {\n value: function (optionalValue, options) {\n const currentValue = value.get_value(undefined, context, globals, node)\n if (arguments.length === 0) {\n return currentValue\n }\n const unchanged = optionalValue === currentValue\n if (options && options.onlyIfChanged && unchanged) {\n return\n }\n return value.set_value(optionalValue, context, globals)\n }\n })\n } else {\n result[name] = this.valueAsAccessor(value, context, globals, node)\n }\n })\n return result\n }\n\n preparse(source = '') {\n const preparsers = options.bindingStringPreparsers || []\n return preparsers.reduce((acc, fn) => fn(acc), source.trim())\n }\n\n runParse(source, fn) {\n this.text = this.preparse(source)\n this.at = 0\n this.ch = ' '\n\n try {\n const result = fn()\n this.white()\n if (this.ch) {\n this.error('Syntax Error')\n }\n return result\n } catch (e) {\n options.onError(e)\n }\n }\n\n /**\n * Get the bindings as name: accessor()\n * @param {string} source The binding string to parse.\n * @return {object} Map of name to accessor function.\n */\n parse(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => null\n }\n this.currentContextGlobals = [context, globals, node]\n const parseFn = () => this.readBindings()\n const bindingAccessors = this.runParse(source, parseFn)\n return this.convertToAccessors(bindingAccessors, context, globals, node)\n }\n\n /**\n * Return a function that evaluates and returns the result of the expression.\n */\n parseExpression(source, context = {}, globals = {}, node) {\n if (!source) {\n return () => ''\n }\n this.currentContextGlobals = [context, globals, node]\n const parseFn = () => this.singleValueExpression(true)\n const bindingAccessors = this.runParse(source, parseFn)\n return this.valueAsAccessor(bindingAccessors, context, globals, node)\n }\n}\n", "import { stringTrim } from '@tko/utils'\n\n/* eslint no-cond-assign: 0 */\n\n// The following regular expressions will be used to split an object-literal string into tokens\n\n// These characters have special meaning to the parser and must not appear in the middle of a\n// token, except as part of a string.\nconst specials = ',\"\\'`{}()/:[\\\\]'\nconst bindingToken = RegExp(\n [\n // These match strings, either with double quotes, single quotes, or backticks\n '\"(?:\\\\\\\\.|[^\"])*\"',\n \"'(?:\\\\\\\\.|[^'])*'\",\n '`(?:\\\\\\\\.|[^`])*`',\n // Match C style comments\n '/\\\\*(?:[^*]|\\\\*+[^*/])*\\\\*+/',\n // Match C++ style comments\n '//.*\\n',\n // Match a regular expression (text enclosed by slashes), but will also match sets of divisions\n // as a regular expression (this is handled by the parsing loop below).\n '/(?:\\\\\\\\.|[^/])+/\\\\w*',\n // Match text (at least two characters) that does not contain any of the above special characters,\n // although some of the special characters are allowed to start it (all but the colon and comma).\n // The text can contain spaces, but leading or trailing spaces are skipped.\n '[^\\\\s:,/][^' + specials + ']*[^\\\\s' + specials + ']',\n // Match any non-space character not matched already. This will match colons and commas, since they're\n // not matched by \"everyThingElse\", but will also match any other single character that wasn't already\n // matched (for example: in \"a: 1, b: 2\", each of the non-space characters will be matched by oneNotSpace).\n '[^\\\\s]'\n ].join('|'),\n 'g'\n)\n\n// Match end of previous token to determine whether a slash is a division or regex.\nconst divisionLookBehind = /[\\])\"'A-Za-z0-9_$]+$/\nconst keywordRegexLookBehind = { in: 1, return: 1, typeof: 1 }\n\n/**\n * Break a binding string (data-bind='x: val, y: ..') into a stable array\n * of {key: value}.\n */\nexport default function parseObjectLiteral(objectLiteralString) {\n // Trim leading and trailing spaces from the string\n let str = stringTrim(objectLiteralString)\n\n // Trim braces '{' surrounding the whole object literal\n if (str.charCodeAt(0) === 123) str = str.slice(1, -1)\n\n // Add a newline to correctly match a C++ style comment at the end of the string and\n // add a comma so that we don't need a separate code block to deal with the last item\n str += '\\n,'\n\n // Split into tokens\n const result = new Array()\n let toks = str.match(bindingToken)\n let key\n let values = new Array()\n let depth = 0\n\n if (toks.length <= 1) {\n return []\n }\n\n for (let i = 0, tok; (tok = toks[i]); ++i) {\n const c = tok.charCodeAt(0)\n // A comma signals the end of a key/value pair if depth is zero\n if (c === 44) {\n // \",\"\n if (depth <= 0) {\n result.push(key && values.length ? { key: key, value: values.join('') } : { unknown: key || values.join('') })\n key = depth = 0\n values = new Array()\n continue\n }\n // Simply skip the colon that separates the name and value\n } else if (c === 58) {\n // \":\"\n if (!depth && !key && values.length === 1) {\n key = values.pop()\n continue\n }\n // A set of slashes is initially matched as a regular expression, but could be division\n } else if (c === 47 && tok.length > 1 && (tok.charCodeAt(1) === 47 || tok.charCodeAt(1) === 42)) {\n // \"//\" or \"/*\"\n // skip comments\n continue\n } else if (c === 47 && i && tok.length > 1) {\n // \"/\"\n // Look at the end of the previous token to determine if the slash is actually division\n const match = toks[i - 1].match(divisionLookBehind)\n if (match && !keywordRegexLookBehind[match[0]]) {\n // The slash is actually a division punctuator; re-parse the remainder of the string (not including the slash)\n str = str.substr(str.indexOf(tok) + 1)\n toks = str.match(bindingToken)\n i = -1\n // Continue with just the slash\n tok = '/'\n }\n // Increment depth for parentheses, braces, and brackets so that interior commas are ignored\n } else if (c === 40 || c === 123 || c === 91) {\n // '(', '{', '['\n ++depth\n } else if (c === 41 || c === 125 || c === 93) {\n // ')', '}', ']'\n --depth\n // The key will be the first token; if it's a string, trim the quotes\n } else if (!key && !values.length && (c === 34 || c === 39)) {\n // '\"', \"'\"\n tok = tok.slice(1, -1)\n }\n values.push(tok)\n }\n\n return result\n}\n", "//\n// Computed Observable Values\n//\n// (before tko, `computed` was also known as `dependentObservable`)\n//\nimport {\n addDisposeCallback,\n arrayForEach,\n createSymbolOrString,\n domNodeIsAttachedToDocument,\n extend,\n options,\n hasOwnProperty,\n objectForEach,\n options as koOptions,\n removeDisposeCallback,\n safeSetTimeout\n} from '@tko/utils'\n\nimport {\n dependencyDetection,\n extenders,\n valuesArePrimitiveAndEqual,\n observable,\n subscribable,\n LATEST_VALUE\n} from '@tko/observable'\n\nimport type { Observable, Subscribable } from '@tko/observable'\n\nconst computedState: symbol = createSymbolOrString('_state')\nconst DISPOSED_STATE = {\n dependencyTracking: null,\n dependenciesCount: 0,\n isDisposed: true,\n isStale: false,\n isDirty: false,\n isSleeping: false,\n disposeWhenNodeIsRemoved: null,\n readFunction: null,\n _options: null\n}\n\nexport interface Computed<T = any> extends ComputedFunctions<T> {\n (): T\n (value: T): this\n}\n\nexport interface ComputedFunctions<T = any> extends Subscribable<T> {\n // It's possible for a to be undefined, since the equalityComparer is run on the initial\n // computation with undefined as the first argument. This is user-relevant for deferred computeds.\n equalityComparer(a: T | undefined, b: T): boolean\n peek(): T\n dispose(): void\n isActive(): boolean\n getDependenciesCount(): number\n getDependencies(): Subscribable[]\n}\n\n// used in computed, but empty interface is pointless. Check if it's needed\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PureComputed<T = any> extends Computed<T> {}\n\nexport type ComputedReadFunction<T = any, TTarget = void> =\n | Subscribable<T>\n | Observable<T>\n | Computed<T>\n | ((this: TTarget) => T)\nexport type ComputedWriteFunction<T = any, TTarget = void> = (this: TTarget, val: T) => void\nexport type MaybeComputed<T = any> = T | Computed<T>\n\nexport interface ComputedOptions<T = any, TTarget = void> {\n read?: ComputedReadFunction<T, TTarget>\n write?: ComputedWriteFunction<T, TTarget>\n owner?: TTarget\n pure?: boolean\n deferEvaluation?: boolean\n disposeWhenNodeIsRemoved?: Node\n disposeWhen?: () => boolean\n}\n\ninterface State {\n latestValue?: any\n isStale: boolean\n isDirty: boolean\n isBeingEvaluated: boolean\n suppressDisposalUntilDisposeWhenReturnsFalse: boolean\n isDisposed: boolean\n pure: boolean\n isSleeping: boolean\n readFunction: ComputedReadFunction\n evaluatorFunctionTarget: any\n disposeWhenNodeIsRemoved: Node | null\n disposeWhen?: () => boolean\n domNodeDisposalCallback: (() => void) | null\n dependencyTracking: any\n dependenciesCount: number\n evaluationTimeoutInstance: any\n}\n\nexport function computed(\n evaluatorFunctionOrOptions?: ComputedOptions<any, void> | ComputedReadFunction<any, any>,\n evaluatorFunctionTarget?: any,\n options?: ComputedOptions\n): Computed {\n if (typeof evaluatorFunctionOrOptions === 'object') {\n // Single-parameter syntax - everything is on this \"options\" param\n options = evaluatorFunctionOrOptions as ComputedOptions\n } else {\n // Multi-parameter syntax - construct the options according to the params passed\n options = options || {}\n if (evaluatorFunctionOrOptions) {\n options!.read = evaluatorFunctionOrOptions\n }\n }\n if (typeof options?.read !== 'function') {\n throw Error('Pass a function that returns the value of the computed')\n }\n\n const writeFunction = options.write\n const state: State = {\n latestValue: undefined,\n isStale: true,\n isDirty: true,\n isBeingEvaluated: false,\n suppressDisposalUntilDisposeWhenReturnsFalse: false,\n isDisposed: false,\n pure: false,\n isSleeping: false,\n readFunction: options.read,\n evaluatorFunctionTarget: evaluatorFunctionTarget || options.owner,\n disposeWhenNodeIsRemoved: options.disposeWhenNodeIsRemoved || null,\n disposeWhen: options.disposeWhen,\n domNodeDisposalCallback: null,\n dependencyTracking: {},\n dependenciesCount: 0,\n evaluationTimeoutInstance: null\n }\n\n function computedObservable() {\n if (arguments.length > 0) {\n if (typeof writeFunction === 'function') {\n // Writing a value\n writeFunction.apply(state.evaluatorFunctionTarget, arguments as any)\n } else {\n throw new Error(\n \"Cannot write a value to a computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\"\n )\n }\n return this // Permits chained assignments\n } else {\n // Reading the value\n if (!state.isDisposed) {\n dependencyDetection.registerDependency(computedObservable)\n }\n if (state.isDirty || (state.isSleeping && (computedObservable as any).haveDependenciesChanged())) {\n ;(computedObservable as any).evaluateImmediate()\n }\n return state.latestValue\n }\n }\n\n computedObservable[computedState] = state\n computedObservable.isWriteable = typeof writeFunction === 'function'\n\n subscribable.fn.init(computedObservable)\n\n // Inherit from 'computed'\n Object.setPrototypeOf(computedObservable, computed.fn)\n\n if (options.pure) {\n state.pure = true\n state.isSleeping = true // Starts off sleeping; will awake on the first subscription\n extend(computedObservable, pureComputedOverrides)\n } else if (options.deferEvaluation) {\n extend(computedObservable, deferEvaluationOverrides)\n }\n\n if (koOptions.deferUpdates) {\n extenders.deferred(computedObservable, true)\n }\n\n if (koOptions.debug) {\n // #1731 - Aid debugging by exposing the computed's options\n computedObservable._options = options\n }\n\n if (state.disposeWhenNodeIsRemoved) {\n // Since this computed is associated with a DOM node, and we don't want to dispose the computed\n // until the DOM node is *removed* from the document (as opposed to never having been in the document),\n // we'll prevent disposal until \"disposeWhen\" first returns false.\n state.suppressDisposalUntilDisposeWhenReturnsFalse = true\n\n // disposeWhenNodeIsRemoved: true can be used to opt into the \"only dispose after first false result\"\n // behavior even if there's no specific node to watch. In that case, clear the option so we don't try\n // to watch for a non-node's disposal. This technique is intended for KO's internal use only and shouldn't\n // be documented or used by application code, as it's likely to change in a future version of KO.\n if (!state.disposeWhenNodeIsRemoved.nodeType) {\n state.disposeWhenNodeIsRemoved = null\n }\n }\n\n // Evaluate, unless sleeping or deferEvaluation is true\n if (!state.isSleeping && !options.deferEvaluation) {\n ;(computedObservable as any).evaluateImmediate()\n }\n\n // Attach a DOM node disposal callback so that the computed will be proactively disposed as soon as the node is\n // removed using ko.removeNode. But skip if isActive is false (there will never be any dependencies to dispose).\n if (state.disposeWhenNodeIsRemoved && (computedObservable as any).isActive()) {\n addDisposeCallback(\n state.disposeWhenNodeIsRemoved,\n (state.domNodeDisposalCallback = function () {\n ;(computedObservable as any).dispose()\n })\n )\n }\n\n return computedObservable as unknown as Computed\n}\n\n// Utility function that disposes a given dependencyTracking entry\nfunction computedDisposeDependencyCallback(id, entryToDispose) {\n if (entryToDispose !== null && entryToDispose.dispose) {\n entryToDispose.dispose()\n }\n}\n\n// This function gets called each time a dependency is detected while evaluating a computed.\n// It's factored out as a shared function to avoid creating unnecessary function instances during evaluation.\nfunction computedBeginDependencyDetectionCallback(subscribable, id) {\n const computedObservable = this.computedObservable,\n state = computedObservable[computedState]\n if (!state.isDisposed) {\n if (this.disposalCount && this.disposalCandidates[id]) {\n // Don't want to dispose this subscription, as it's still being used\n computedObservable.addDependencyTracking(id, subscribable, this.disposalCandidates[id])\n this.disposalCandidates[id] = null // No need to actually delete the property - disposalCandidates is a transient object anyway\n --this.disposalCount\n } else if (!state.dependencyTracking[id]) {\n // Brand new subscription - add it\n computedObservable.addDependencyTracking(\n id,\n subscribable,\n state.isSleeping ? { _target: subscribable } : computedObservable.subscribeToDependency(subscribable)\n )\n }\n // If the observable we've accessed has a pending notification, ensure\n // we get notified of the actual final value (bypass equality checks)\n if (subscribable._notificationIsPending) {\n subscribable._notifyNextChangeIfValueIsDifferent()\n }\n }\n}\n\ncomputed.fn = {\n equalityComparer: valuesArePrimitiveAndEqual,\n getDependenciesCount(): number {\n return this[computedState].dependenciesCount\n },\n\n getDependencies() {\n const dependencyTracking = this[computedState].dependencyTracking\n const dependentObservables = new Array()\n\n objectForEach(dependencyTracking, function (id, dependency) {\n dependentObservables[dependency._order] = dependency._target\n })\n\n return dependentObservables\n },\n\n addDependencyTracking(id, target, trackingObj) {\n if (this[computedState].pure && target === this) {\n throw Error(\"A 'pure' computed must not be called recursively\")\n }\n\n this[computedState].dependencyTracking[id] = trackingObj\n trackingObj._order = this[computedState].dependenciesCount++\n trackingObj._version = target.getVersion()\n },\n haveDependenciesChanged() {\n let id,\n dependency,\n dependencyTracking = this[computedState].dependencyTracking\n for (id in dependencyTracking) {\n if (hasOwnProperty(dependencyTracking, id)) {\n dependency = dependencyTracking[id]\n if (\n (this._evalDelayed && dependency._target._notificationIsPending) ||\n dependency._target.hasChanged(dependency._version)\n ) {\n return true\n }\n }\n }\n return false\n },\n markDirty() {\n // Process \"dirty\" events if we can handle delayed notifications\n if (this._evalDelayed && !this[computedState].isBeingEvaluated) {\n this._evalDelayed(false /* notifyChange */)\n }\n },\n isActive() {\n const state = this[computedState]\n return state.isDirty || state.dependenciesCount > 0\n },\n respondToChange() {\n // Ignore \"change\" events if we've already scheduled a delayed notification\n if (!this._notificationIsPending) {\n this.evaluatePossiblyAsync()\n } else if (this[computedState].isDirty) {\n this[computedState].isStale = true\n }\n },\n subscribeToDependency(target) {\n if (target._deferUpdates) {\n const dirtySub = target.subscribe(this.markDirty, this, 'dirty'),\n changeSub = target.subscribe(this.respondToChange, this)\n return {\n _target: target,\n dispose() {\n dirtySub.dispose()\n changeSub.dispose()\n }\n }\n } else {\n return target.subscribe(this.evaluatePossiblyAsync, this)\n }\n },\n evaluatePossiblyAsync() {\n const computedObservable = this,\n throttleEvaluationTimeout = computedObservable.throttleEvaluation\n if (throttleEvaluationTimeout && throttleEvaluationTimeout >= 0) {\n clearTimeout(this[computedState].evaluationTimeoutInstance)\n this[computedState].evaluationTimeoutInstance = safeSetTimeout(function () {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }, throttleEvaluationTimeout)\n } else if (computedObservable._evalDelayed) {\n computedObservable._evalDelayed(true /* notifyChange */)\n } else {\n computedObservable.evaluateImmediate(true /* notifyChange */)\n }\n },\n evaluateImmediate(notifyChange) {\n let state = this[computedState],\n disposeWhen = state.disposeWhen,\n changed = false\n\n if (state.isBeingEvaluated) {\n // If the evaluation of a ko.computed causes side effects, it's possible that it will trigger its own re-evaluation.\n // This is not desirable (it's hard for a developer to realise a chain of dependencies might cause this, and they almost\n // certainly didn't intend infinite re-evaluations). So, for predictability, we simply prevent ko.computeds from causing\n // their own re-evaluation. Further discussion at https://github.com/SteveSanderson/knockout/pull/387\n return\n }\n\n // Do not evaluate (and possibly capture new dependencies) if disposed\n if (state.isDisposed) {\n return\n }\n\n if (\n (state.disposeWhenNodeIsRemoved && !domNodeIsAttachedToDocument(state.disposeWhenNodeIsRemoved)) ||\n (disposeWhen && disposeWhen())\n ) {\n // See comment above about suppressDisposalUntilDisposeWhenReturnsFalse\n if (!state.suppressDisposalUntilDisposeWhenReturnsFalse) {\n this.dispose()\n return\n }\n } else {\n // It just did return false, so we can stop suppressing now\n state.suppressDisposalUntilDisposeWhenReturnsFalse = false\n }\n\n state.isBeingEvaluated = true\n try {\n changed = this.evaluateImmediate_CallReadWithDependencyDetection(notifyChange)\n } finally {\n state.isBeingEvaluated = false\n }\n\n return changed\n },\n evaluateImmediate_CallReadWithDependencyDetection(notifyChange) {\n // This function is really just part of the evaluateImmediate logic. You would never call it from anywhere else.\n // Factoring it out into a separate function means it can be independent of the try/catch block in evaluateImmediate,\n // which contributes to saving about 40% off the CPU overhead of computed evaluation (on V8 at least).\n\n let state = this[computedState],\n changed = false\n\n // Initially, we assume that none of the subscriptions are still being used (i.e., all are candidates for disposal).\n // Then, during evaluation, we cross off any that are in fact still being used.\n const isInitial = state.pure ? undefined : !state.dependenciesCount, // If we're evaluating when there are no previous dependencies, it must be the first time\n dependencyDetectionContext = {\n computedObservable: this,\n disposalCandidates: state.dependencyTracking,\n disposalCount: state.dependenciesCount\n }\n\n dependencyDetection.begin({\n callbackTarget: dependencyDetectionContext,\n callback: computedBeginDependencyDetectionCallback,\n computed: this,\n isInitial: isInitial\n })\n\n state.dependencyTracking = {}\n state.dependenciesCount = 0\n\n const newValue = this.evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext)\n\n if (!state.dependenciesCount) {\n this.dispose()\n changed = true // When evaluation causes a disposal, make sure all dependent computeds get notified so they'll see the new state\n } else {\n changed = this.isDifferent(state.latestValue, newValue)\n }\n\n if (changed) {\n if (!state.isSleeping) {\n this.notifySubscribers(state.latestValue, 'beforeChange')\n } else {\n this.updateVersion()\n }\n\n state.latestValue = newValue\n if (options.debug) {\n this._latestValue = newValue\n }\n\n this.notifySubscribers(state.latestValue, 'spectate')\n\n if (!state.isSleeping && notifyChange) {\n this.notifySubscribers(state.latestValue)\n }\n\n if (this._recordUpdate) {\n this._recordUpdate()\n }\n }\n\n if (isInitial) {\n this.notifySubscribers(state.latestValue, 'awake')\n }\n\n return changed\n },\n evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyDetectionContext) {\n // This function is really part of the evaluateImmediate_CallReadWithDependencyDetection logic.\n // You'd never call it from anywhere else. Factoring it out means that evaluateImmediate_CallReadWithDependencyDetection\n // can be independent of try/finally blocks, which contributes to saving about 40% off the CPU\n // overhead of computed evaluation (on V8 at least).\n\n try {\n const readFunction = state.readFunction\n return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction()\n } finally {\n dependencyDetection.end()\n\n // For each subscription no longer being used, remove it from the active subscriptions list and dispose it\n if (dependencyDetectionContext.disposalCount && !state.isSleeping) {\n objectForEach(dependencyDetectionContext.disposalCandidates, computedDisposeDependencyCallback)\n }\n\n state.isStale = state.isDirty = false\n }\n },\n peek(forceEvaluate) {\n // Peek won't ordinarily re-evaluate, except while the computed is sleeping\n // or to get the initial value when \"deferEvaluation\" is set.\n const state = this[computedState]\n if (\n (state.isDirty && (forceEvaluate || !state.dependenciesCount)) ||\n (state.isSleeping && this.haveDependenciesChanged())\n ) {\n this.evaluateImmediate()\n }\n return state.latestValue\n },\n\n get [LATEST_VALUE]() {\n return this.peek()\n },\n\n limit(limitFunction) {\n const state = this[computedState]\n // Override the limit function with one that delays evaluation as well\n ;(subscribable.fn as any).limit.call(this, limitFunction)\n Object.assign(this, {\n _evalIfChanged() {\n if (!this[computedState].isSleeping) {\n if (this[computedState].isStale) {\n this.evaluateImmediate()\n } else {\n this[computedState].isDirty = false\n }\n }\n return state.latestValue\n },\n _evalDelayed(isChange) {\n this._limitBeforeChange(state.latestValue)\n\n // Mark as dirty\n state.isDirty = true\n if (isChange) {\n state.isStale = true\n }\n\n // Pass the observable to the \"limit\" code, which will evaluate it when\n // it's time to do the notification.\n this._limitChange(this, !isChange /* isDirty */)\n }\n })\n },\n dispose() {\n const state = this[computedState]\n if (!state.isSleeping && state.dependencyTracking) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n dependency.dispose()\n }\n })\n }\n if (state.disposeWhenNodeIsRemoved && state.domNodeDisposalCallback) {\n removeDisposeCallback(state.disposeWhenNodeIsRemoved, state.domNodeDisposalCallback)\n }\n Object.assign(state, DISPOSED_STATE)\n }\n}\n\nconst pureComputedOverrides = {\n beforeSubscriptionAdd(event: string) {\n // If asleep, wake up the computed by subscribing to any dependencies.\n const computedObservable = this,\n state = computedObservable[computedState]\n if (!state.isDisposed && state.isSleeping && event === 'change') {\n state.isSleeping = false\n if (state.isStale || computedObservable.haveDependenciesChanged()) {\n state.dependencyTracking = null\n state.dependenciesCount = 0\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n } else {\n // First put the dependencies in order\n const dependenciesOrder = new Array()\n objectForEach(state.dependencyTracking, function (id, dependency) {\n dependenciesOrder[dependency._order] = id\n })\n // Next, subscribe to each one\n arrayForEach(dependenciesOrder, function (id, order) {\n const dependency = state.dependencyTracking[id],\n subscription = computedObservable.subscribeToDependency(dependency._target)\n subscription._order = order\n subscription._version = dependency._version\n state.dependencyTracking[id] = subscription\n })\n\n // Waking dependencies may have triggered effects\n if (computedObservable.haveDependenciesChanged()) {\n if (computedObservable.evaluateImmediate()) {\n computedObservable.updateVersion()\n }\n }\n }\n\n if (!state.isDisposed) {\n // test since evaluating could trigger disposal\n computedObservable.notifySubscribers(state.latestValue, 'awake')\n }\n }\n },\n afterSubscriptionRemove(event: string) {\n const state = this[computedState]\n if (!state.isDisposed && event === 'change' && !this.hasSubscriptionsForEvent('change')) {\n objectForEach(state.dependencyTracking, function (id, dependency) {\n if (dependency.dispose) {\n state.dependencyTracking[id] = {\n _target: dependency._target,\n _order: dependency._order,\n _version: dependency._version\n }\n dependency.dispose()\n }\n })\n state.isSleeping = true\n this.notifySubscribers(undefined, 'asleep')\n }\n },\n getVersion() {\n // Because a pure computed is not automatically updated while it is sleeping, we can't\n // simply return the version number. Instead, we check if any of the dependencies have\n // changed and conditionally re-evaluate the computed observable.\n const state = this[computedState]\n if (state.isSleeping && (state.isStale || this.haveDependenciesChanged())) {\n this.evaluateImmediate()\n }\n return subscribable.fn.getVersion.call(this)\n }\n}\n\nconst deferEvaluationOverrides = {\n beforeSubscriptionAdd(event) {\n // This will force a computed with deferEvaluation to evaluate when the first subscription is registered.\n if (event === 'change' || event === 'beforeChange') {\n this.peek()\n }\n }\n}\n\nObject.setPrototypeOf(computed.fn, subscribable.fn)\n\n// Set the proto values for ko.computed\nconst protoProp = observable.protoProperty // == \"__ko_proto__\"\ncomputed.fn[protoProp] = computed\n\n/* This is used by ko.isObservable */\nobservable.observablePrototypes.add(computed as any)\n\nexport function isComputed<T = any>(instance: any): instance is Computed<T> {\n return typeof instance === 'function' && instance[protoProp] === computed\n}\n\nexport function isPureComputed<T = any>(instance: any): instance is PureComputed<T> {\n return isComputed(instance) && instance[computedState] && (instance[computedState] as unknown as State).pure\n}\n\nexport function pureComputed<T = any>(\n evaluatorFunctionOrOptions: ComputedOptions | ComputedReadFunction,\n evaluatorFunctionTarget?\n): Computed<T> {\n if (typeof evaluatorFunctionOrOptions === 'function') {\n const evaluator = evaluatorFunctionOrOptions as ComputedReadFunction\n return computed(evaluator, evaluatorFunctionTarget, { pure: true })\n } else {\n let options = evaluatorFunctionOrOptions as ComputedOptions\n options = extend({}, options) // make a copy of the parameter object\n options.pure = true\n return computed(options, evaluatorFunctionTarget)\n }\n}\n", "import { extenders as baseExtenders } from '@tko/observable'\nimport { computed } from './computed'\n\nexport function throttleExtender(target: any, timeout: number) {\n // Throttling means two things:\n\n // (1) For dependent observables, we throttle *evaluations* so that, no matter how fast its dependencies\n // notify updates, the target doesn't re-evaluate (and hence doesn't notify) faster than a certain rate\n target.throttleEvaluation = timeout\n\n // (2) For writable targets (observables, or writable dependent observables), we throttle *writes*\n // so the target cannot change value synchronously or faster than a certain rate\n let writeTimeoutInstance: ReturnType<typeof setTimeout> | undefined\n return computed({\n read: target,\n write: function (value) {\n clearTimeout(writeTimeoutInstance)\n writeTimeoutInstance = setTimeout(function () {\n target(value)\n }, timeout)\n }\n })\n}\n\nconst extenders = baseExtenders\n\nextenders.throttle = throttleExtender\n", "/**\n * Create an ES\n */\n\nimport { observable, observableArray, unwrap } from '@tko/observable'\n\nimport { computed } from './computed'\n\nconst PROXY_SYM = Symbol('Knockout Proxied Object')\nconst MIRROR_SYM = Symbol('Knockout Proxied Observables')\n\nfunction makeComputed(proxy, fn) {\n return computed({\n owner: proxy,\n read: fn,\n write: fn,\n pure: 'pure' in fn ? fn.pure : true,\n deferEvaluation: 'deferEvaluation' in fn ? fn.deferEvaluation : true\n }).extend({ deferred: true })\n}\n\nfunction setOrCreate(mirror, prop, value, proxy) {\n if (!mirror[prop]) {\n const ctr = Array.isArray(value)\n ? observableArray\n : typeof value === 'function'\n ? makeComputed.bind(null, proxy)\n : observable\n mirror[prop] = ctr(value)\n } else {\n mirror[prop](value)\n }\n}\n\nfunction assignOrUpdate(mirror, object, proxy) {\n for (const key of Object.keys(object)) {\n setOrCreate(mirror, key, object[key], proxy)\n }\n return object\n}\n\nexport function proxy(object) {\n const mirror = { [PROXY_SYM]: object }\n mirror[MIRROR_SYM] = mirror\n const proxy = new Proxy(function () {}, {\n has(target, prop) {\n return prop in mirror\n },\n get(target, prop) {\n return unwrap(mirror[prop])\n },\n set(target, prop, value, receiver) {\n setOrCreate(mirror, prop, value, proxy)\n object[prop] = value\n return true\n },\n deleteProperty(property) {\n delete mirror[property as any]\n return delete object[property as any]\n },\n apply(target, thisArg, [props]) {\n if (props) {\n assignOrUpdate(mirror, props, proxy)\n return Object.assign(object, props)\n }\n return object\n },\n getPrototypeOf() {\n return Object.getPrototypeOf(object)\n },\n setPrototypeOf(target, proto) {\n return Object.setPrototypeOf(object, proto)\n },\n defineProperty(target, prop, desc) {\n return Object.defineProperty(object, prop, desc)\n },\n preventExtensions() {\n return Object.preventExtensions(object)\n },\n isExtensible() {\n return Object.isExtensible(object)\n },\n ownKeys() {\n return [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]\n }\n })\n assignOrUpdate(mirror, object, proxy)\n return proxy\n}\n\nexport function getObservable(proxied, prop) {\n return proxied[MIRROR_SYM][prop]\n}\nexport function peek(proxied, prop) {\n return getObservable(proxied, prop).peek()\n}\nexport function isProxied(proxied) {\n return PROXY_SYM in proxied\n}\n\nObject.assign(proxy, { getObservable, peek, isProxied })\n", "import { pureComputed } from './computed'\n\nfunction kowhen(predicate, context, resolve) {\n const observable = pureComputed(predicate, context).extend({ notify: 'always' })\n const subscription = observable.subscribe(value => {\n if (value) {\n subscription.dispose()\n resolve(value)\n }\n })\n // In case the initial value is true, process it right away\n observable.notifySubscribers(observable.peek())\n return subscription\n}\n\nexport function when(predicate, callback, context) {\n const whenFn = kowhen.bind(null, predicate, context)\n return callback ? whenFn(callback.bind(context)) : new Promise(whenFn)\n}\n", "import { addDisposeCallback, createSymbolOrString } from '@tko/utils'\n\nimport { computed } from '@tko/computed'\nimport type { Observable } from '@tko/observable'\n\nconst SUBSCRIPTIONS = createSymbolOrString('LifeCycle Subscriptions List')\nconst ANCHOR_NODE = createSymbolOrString('LifeCycle Anchor Node')\n\nexport default class LifeCycle {\n // NOTE: For more advanced integration as an ES6 mixin, see e.g.:\n // http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n\n /**\n * Copy the properties of the LifeCycle class to the target (or its prototype)\n *\n * NOTE: getOwnPropertyNames is needed to copy the non-enumerable properties.\n */\n static mixInto(Constructor) {\n const target = Constructor.prototype || Constructor\n const mixin = LifeCycle.prototype\n for (const prop of Object.getOwnPropertyNames(mixin)) {\n target[prop] = mixin[prop]\n }\n }\n\n subscribe(observable: Observable, action: any, subscriptionType?: string) {\n if (typeof action === 'string') {\n action = this[action]\n }\n this.addDisposable(observable.subscribe(action, this, subscriptionType))\n }\n\n computed(params) {\n if (typeof params === 'string') {\n params = { read: this[params], write: this[params] }\n }\n\n if (typeof params === 'object') {\n params = Object.assign({ owner: this }, params)\n } else if (typeof params === 'function') {\n const proto = Object.getPrototypeOf(this)\n if (proto && proto[params.name] === params) {\n params = params.bind(this)\n }\n params = { read: params, write: params }\n } else {\n throw new Error('LifeCycle::computed not given a valid type.')\n }\n\n params.disposeWhenNodeIsRemoved = this[ANCHOR_NODE]\n return this.addDisposable(computed(params))\n }\n\n /**\n * Add an event listener for the given or anchored node.\n * @param {node} [node] (optional) The target node (otherwise the anchored node)\n * @param {string} [type] Event type\n * @param {function|string} [action] Either call the given function or `this[action]`\n * @param {object} [options] (optional) Passed as `options` to `node.addEventListener`\n */\n addEventListener(...args) {\n const node = args[0].nodeType ? args.shift() : this[ANCHOR_NODE]\n const [type, act, options] = args\n const handler = typeof act === 'string' ? this[act].bind(this) : act\n this.__addEventListener(node, type, handler, options)\n }\n\n __addEventListener(node, eventType, handler, options) {\n node.addEventListener(eventType, handler, options)\n function dispose() {\n node.removeEventListener(eventType, handler)\n }\n addDisposeCallback(node, dispose)\n this.addDisposable({ dispose })\n }\n\n anchorTo(nodeOrLifeCycle: Node | LifeCycle) {\n if ('addDisposable' in nodeOrLifeCycle) {\n nodeOrLifeCycle.addDisposable(this)\n this[ANCHOR_NODE] = null // re-anchor on `anchorTo` calls\n } else {\n this[ANCHOR_NODE] = nodeOrLifeCycle\n addDisposeCallback(nodeOrLifeCycle, () => this[ANCHOR_NODE] === nodeOrLifeCycle && this.dispose())\n }\n }\n\n dispose() {\n const subscriptions = this[SUBSCRIPTIONS] || []\n subscriptions.forEach(s => s.dispose())\n this[SUBSCRIPTIONS] = new Array()\n this[ANCHOR_NODE] = null\n }\n\n addDisposable(subscription) {\n const subscriptions = this[SUBSCRIPTIONS] || []\n if (!this[SUBSCRIPTIONS]) {\n this[SUBSCRIPTIONS] = subscriptions\n }\n if (typeof subscription.dispose !== 'function') {\n throw new Error('Lifecycle::addDisposable argument missing `dispose`.')\n }\n subscriptions.push(subscription)\n return subscription\n }\n}\n", "import { domData } from '@tko/utils'\nimport { subscribable } from '@tko/observable'\nimport type { Subscribable, Subscription, SubscriptionCallback } from '@tko/observable'\n\nexport const contextAncestorBindingInfo = Symbol('_ancestorBindingInfo')\nconst boundElementDomDataKey = domData.nextKey()\n\nexport const bindingEvent = {\n //TODO better: String-Enum \"BindingEventEnum\"\n childrenComplete: 'childrenComplete',\n descendantsComplete: 'descendantsComplete',\n\n subscribe(\n node: Node,\n event: string | 'childrenComplete' | 'descendantsComplete',\n callback: (node: Node) => void,\n callbackContext?: any\n ): Subscription {\n const bindingInfo = domData.getOrSet(node, boundElementDomDataKey, {})\n if (!bindingInfo.eventSubscribable) {\n bindingInfo.eventSubscribable = new subscribable()\n }\n return (bindingInfo.eventSubscribable as Subscribable).subscribe(callback, callbackContext, event)\n },\n\n notify(node: Node, event: string) {\n const bindingInfo = domData.get(node, boundElementDomDataKey)\n if (bindingInfo) {\n if (bindingInfo.eventSubscribable) {\n ;(bindingInfo.eventSubscribable as Subscribable).notifySubscribers(node, event)\n }\n }\n }\n}\n", "import { extend, options, domData, isObjectLike } from '@tko/utils'\nimport type { KnockoutInstance } from '@tko/builder'\n\nimport { pureComputed } from '@tko/computed'\n\nimport { unwrap, isObservable } from '@tko/observable'\n\nimport type { Observable } from '@tko/observable'\n\nimport { contextAncestorBindingInfo } from './bindingEvent'\n\nimport type { BindingContextExtendCallback } from './applyBindings'\n\nexport const boundElementDomDataKey = domData.nextKey()\n\nexport const contextSubscribeSymbol = Symbol('Knockout Context Subscription')\n\n// Unique stub to indicate inheritance.\nconst inheritParentIndicator = Symbol('Knockout Parent Indicator')\n\nexport interface BindingContextSetting {\n exportDependencies?: boolean\n}\n\nexport interface BindingContext<T = any> {\n ko: KnockoutInstance\n\n [symbol: symbol]: any\n $parent?: any\n $parents: any[]\n $root: any\n $data: T\n $rawData: T | Observable<T>\n $index?: Observable<number>\n $parentContext?: BindingContext<any>\n // $componentTemplateNodes: any; added in makeChildBindingContext to context\n // $componentTemplateSlotNodes; added in makeChildBindingContext to context\n\n $component?: any\n\n extend(properties: object): BindingContext<T>\n extend(properties: (self: BindingContext<T>) => object): BindingContext<T>\n\n lookup(token: string, globals: any, node: any)\n\n createChildContext(\n dataItemOrAccessor: any,\n dataItemAlias?: string,\n extendCallback?: Function,\n settings?: BindingContextSetting\n ): BindingContext\n createStaticChildContext(dataItemOrAccessor: any, dataItemAlias: any): BindingContext\n}\n\n// Interface for the factory method 'bindingContext', which creates and returns a typed instance of BindingContext<T>\nexport interface bindingContext {\n new <T = any>(\n dataItemOrAccessor: any,\n parentContext?: BindingContext,\n dataItemAlias?: string,\n extendCallback?: BindingContextExtendCallback,\n settings?: BindingContextSetting\n ): BindingContext<T>\n}\n\n// The bindingContext constructor is only called directly to create the root context. For child\n// contexts, use bindingContext.createChildContext or bindingContext.extend.\nexport const bindingContext = function bindingContextFactory<T>(\n dataItemOrAccessor: any,\n parentContext?: BindingContext,\n dataItemAlias?: string,\n extendCallback?: BindingContextExtendCallback<T>,\n settings?: BindingContextSetting\n) {\n const self = this\n const shouldInheritData = dataItemOrAccessor === inheritParentIndicator\n const realDataItemOrAccessor = shouldInheritData ? undefined : dataItemOrAccessor\n const isFunc = typeof realDataItemOrAccessor === 'function' && !isObservable(realDataItemOrAccessor)\n\n // Export 'ko' in the binding context so it will be available in bindings and templates\n // even if 'ko' isn't exported as a global, such as when using an AMD loader.\n // See https://github.com/SteveSanderson/knockout/issues/490\n self.ko = options.knockoutInstance\n\n let subscribable: any\n\n // The binding context object includes static properties for the current, parent, and root view models.\n // If a view model is actually stored in an observable, the corresponding binding context object, and\n // any child contexts, must be updated when the view model is changed.\n function updateContext() {\n // Most of the time, the context will directly get a view model object, but if a function is given,\n // we call the function to retrieve the view model. If the function accesses any observables or returns\n // an observable, the dependency is tracked, and those observables can later cause the binding\n // context to be updated.\n const dataItemOrObservable = isFunc ? realDataItemOrAccessor() : realDataItemOrAccessor\n let dataItem = unwrap(dataItemOrObservable)\n\n if (parentContext) {\n // When a \"parent\" context is given, register a dependency on the parent context. Thus whenever the\n // parent context is updated, this context will also be updated.\n if (parentContext[contextSubscribeSymbol]) {\n parentContext[contextSubscribeSymbol]()\n }\n\n // Copy $root and any custom properties from the parent context\n extend(self, parentContext)\n\n // Copy Symbol properties\n if (contextAncestorBindingInfo in parentContext) {\n self[contextAncestorBindingInfo] = parentContext[contextAncestorBindingInfo]\n }\n } else {\n self.$parents = new Array()\n self.$root = dataItem\n }\n\n self[contextSubscribeSymbol] = subscribable\n\n if (shouldInheritData) {\n dataItem = self.$data\n } else {\n self.$rawData = dataItemOrObservable\n self.$data = dataItem\n }\n\n if (dataItemAlias) {\n self[dataItemAlias] = dataItem\n }\n\n // The extendCallback function is provided when creating a child context or extending a context.\n // It handles the specific actions needed to finish setting up the binding context. Actions in this\n // function could also add dependencies to this binding context.\n if (extendCallback) {\n extendCallback(self, parentContext, dataItem)\n }\n\n return self.$data\n }\n\n if (settings && settings.exportDependencies) {\n // The \"exportDependencies\" option means that the calling code will track any dependencies and re-create\n // the binding context when they change.\n updateContext()\n } else {\n subscribable = pureComputed(updateContext)\n subscribable.peek()\n\n // At this point, the binding context has been initialized, and the \"subscribable\" computed observable is\n // subscribed to any observables that were accessed in the process. If there is nothing to track, the\n // computed will be inactive, and we can safely throw it away. If it's active, the computed is stored in\n // the context object.\n if (subscribable.isActive()) {\n self[contextSubscribeSymbol] = subscribable\n\n // Always notify because even if the model ($data) hasn't changed, other context properties might have changed\n subscribable['equalityComparer'] = null\n } else {\n self[contextSubscribeSymbol] = undefined\n }\n }\n} as unknown as bindingContext\n\nObject.assign(bindingContext.prototype, {\n lookup(token: string, globals: any, node: any) {\n // short circuits\n switch (token) {\n case '$element':\n return node\n case '$context':\n return this\n case 'this':\n case '$data':\n return this.$data\n }\n const $data = this.$data\n // instanceof Object covers 1. {}, 2. [], 3. function() {}, 4. new *; it excludes undefined, null, primitives.\n if (isObjectLike($data) && token in $data) {\n return $data[token]\n }\n if (token in this) {\n return this[token]\n }\n if (token in globals) {\n return globals[token]\n }\n\n throw new Error(`The variable \"${token}\" was not found on $data, $context, or globals.`)\n },\n\n // Extend the binding context hierarchy with a new view model object. If the parent context is watching\n // any observables, the new child context will automatically get a dependency on the parent context.\n // But this does not mean that the $data value of the child context will also get updated. If the child\n // view model also depends on the parent view model, you must provide a function that returns the correct\n // view model on each update.\n createChildContext(\n dataItemOrAccessor: any,\n dataItemAlias?: string,\n extendCallback?: BindingContextExtendCallback,\n settings?: BindingContextSetting\n ): BindingContext {\n return new bindingContext(\n dataItemOrAccessor,\n this,\n dataItemAlias,\n function (self, parentContext) {\n // Extend the context hierarchy by setting the appropriate pointers\n self.$parentContext = parentContext\n self.$parent = parentContext?.$data\n self.$parents = (parentContext?.$parents ?? []).slice(0)\n self.$parents.unshift(self.$parent)\n if (extendCallback) {\n extendCallback(self)\n }\n },\n settings\n )\n },\n\n // Extend the binding context with new custom properties. This doesn't change the context hierarchy.\n // Similarly to \"child\" contexts, provide a function here to make sure that the correct values are set\n // when an observable view model is updated.\n extend(properties) {\n // If the parent context references an observable view model, \"_subscribable\" will always be the\n // latest view model object. If not, \"_subscribable\" isn't set, and we can use the static \"$data\" value.\n return new bindingContext(inheritParentIndicator, this, undefined, function (self, parentContext) {\n extend(self, typeof properties === 'function' ? properties.call(self) : properties)\n })\n },\n\n createStaticChildContext(dataItemOrAccessor: any, dataItemAlias: any): BindingContext {\n return this.createChildContext(dataItemOrAccessor, dataItemAlias, null, { exportDependencies: true })\n }\n})\n\nexport function storedBindingContextForNode(node: Node) {\n const bindingInfo = domData.get(node, boundElementDomDataKey)\n return bindingInfo && bindingInfo.context\n}\n\n// Retrieving binding context from arbitrary nodes\nexport function contextFor(node: Node) {\n // We can only do something meaningful for elements and comment nodes (in particular, not text nodes, as IE can't store domdata for them)\n if (node && (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE)) {\n return storedBindingContextForNode(node)\n }\n}\n\nexport function dataFor<T = any>(node: Node): T | undefined {\n const context = contextFor(node)\n return context ? context.$data : undefined\n}\n", "import type { BindingContext } from './bindingContext'\n\nexport class BindingResult {\n isSync: boolean\n isComplete: boolean\n completionPromise: Promise<BindingResult>\n rootNode: Node\n bindingContext: BindingContext\n\n constructor({ asyncBindingsApplied, rootNode, bindingContext }) {\n this.rootNode = rootNode\n this.bindingContext = bindingContext\n this.isSync = asyncBindingsApplied.size === 0\n this.isComplete = this.isSync\n\n if (!this.isSync) {\n this.completionPromise = this.completeWhenBindingsFinish(asyncBindingsApplied)\n }\n }\n\n async completeWhenBindingsFinish(asyncBindingsApplied: Set<any>) {\n await Promise.all(asyncBindingsApplied)\n this.isComplete = true\n return this\n }\n}\n", "import { options } from '@tko/utils'\nimport { isWriteableObservable } from '@tko/observable'\nimport { LifeCycle } from '@tko/lifecycle'\nimport type { BindingContext } from './bindingContext'\n\nexport type BindingHandlerControlsDescendant = { controlsDescendantBindings: boolean }\nexport type BindingHandlerAddBinding = (name: string, value: any) => void\n\n// usage in applyBindings, BindingHandler, event, checked, options\nexport interface AllBindings {\n (): any\n\n get(name: string): any\n get<T = any>(name: string): T\n\n has(name: string): boolean\n}\n\nexport class BindingHandler<T = any> extends LifeCycle {\n after?: string[]\n init?: (\n element: any,\n valueAccessor: () => T,\n allBindings: AllBindings,\n viewModel: any,\n bindingContext: BindingContext<any>\n ) => void | BindingHandlerControlsDescendant\n update?: (\n element: any,\n valueAccessor: () => T,\n allBindings: AllBindings,\n viewModel: any,\n bindingContext: BindingContext<any>\n ) => void\n options?: any\n preprocess?: (\n value: string | undefined,\n name: string,\n addBinding: BindingHandlerAddBinding\n ) => string | undefined | void\n\n $context: BindingContext // most likly BindingContext but params must be typed first\n $element: HTMLElement\n $data: any\n bindingCompletion: any\n valueAccessor: Function\n completeBinding: any\n allBindings: AllBindings\n\n constructor(params) {\n super()\n const { $element, valueAccessor, allBindings, $context } = params\n\n this.$element = $element\n this.valueAccessor = valueAccessor\n this.allBindings = allBindings\n this.$context = $context\n this.$data = $context.$data\n\n this.anchorTo($element)\n }\n\n get value() {\n return this.valueAccessor()\n }\n set value(v) {\n const va = this.valueAccessor()\n if (isWriteableObservable(va)) {\n va(v)\n } else {\n this.valueAccessor(v)\n }\n }\n\n get controlsDescendants() {\n return false\n }\n\n static get allowVirtualElements() {\n return false\n }\n static get isBindingHandlerClass() {\n return true\n }\n\n /* Overload this for asynchronous bindings or bindings that recursively\n apply bindings (e.g. components, foreach, template).\n\n A binding should be complete when it has run through once, notably\n in server-side bindings for pre-rendering.\n */\n get bindingCompleted(): Promise<boolean> | boolean {\n return true\n }\n\n static registerAs(name: string, provider = options.bindingProviderInstance) {\n provider.bindingHandlers.set(name, this) //todo dangerous javascript: this in static function = this is calling object\n }\n\n static registerBindingHandler(\n handler: typeof BindingHandler,\n name: string,\n provider = options.bindingProviderInstance\n ) {\n provider.bindingHandlers.set(name, handler)\n }\n}\n\n/**\n * An AsyncBindingHandler shall call `completeBinding` when the binding\n * is to be considered complete.\n */\nconst ResolveSymbol = Symbol('Async Binding Resolved')\n\nexport class AsyncBindingHandler extends BindingHandler {\n constructor(params) {\n super(params)\n this.bindingCompletion = new Promise(resolve => {\n this[ResolveSymbol] = resolve\n })\n this.completeBinding = bindingResult => this[ResolveSymbol](bindingResult)\n }\n\n override get bindingCompleted(): Promise<boolean> {\n return this.bindingCompletion\n }\n}\n", "import { virtualElements, options } from '@tko/utils'\nimport { BindingHandler } from './BindingHandler'\n\n/**\n * We have no guarantees, for users employing legacy bindings,\n * that it has not been changed with a modification like\n *\n * ko.bindingHandlers[name] = { init: ...}\n *\n * ... so we have to keep track by way of a map.\n */\nconst PossibleWeakMap = options.global.WeakMap || Map\nconst legacyBindingMap = new PossibleWeakMap()\n\nexport class LegacyBindingHandler extends BindingHandler {\n get handler(): any {\n // Needed to prevent tsc error for using this.handler\n // is overridden in factory functions. Any must be used for return type\n return undefined\n }\n initReturn: any\n onError: (step: string, error: unknown) => void\n constructor(params: any) {\n super(params)\n const handler = this.handler\n this.onError = params.onError\n\n if (typeof handler.dispose === 'function') {\n this.addDisposable(handler)\n }\n\n try {\n this.initReturn = handler.init && handler.init(...this.legacyArgs)\n } catch (e) {\n params.onError('init', e)\n }\n }\n\n onValueChange(): void {\n const handler = this.handler\n if (typeof handler.update !== 'function') {\n return\n }\n try {\n handler.update(...this.legacyArgs)\n } catch (e) {\n this.onError('update', e)\n }\n }\n\n get legacyArgs(): any[] {\n return [this.$element, this.valueAccessor, this.allBindings, this.$data, this.$context]\n }\n\n override get controlsDescendants(): boolean {\n const objectToTest = this.initReturn || this.handler || {}\n return objectToTest.controlsDescendantBindings\n }\n\n /**\n * Create a handler instance from the `origin`, which may be:\n *\n * 1. an object (becomes LegacyBindingHandler)\n * 2. a function (becomes LegacyBindingHandler with `init: function`)\n *\n * If given an object (the only kind supported in knockout 3.x and before), it\n * shall draw the `init`, `update`, and `allowVirtualElements` properties\n */\n static getOrCreateFor(key: string | undefined, handler: any): any {\n if (legacyBindingMap.has(handler)) {\n return legacyBindingMap.get(handler)\n }\n const newLegacyHandler = this.createFor(key, handler)\n legacyBindingMap.set(handler, newLegacyHandler)\n return newLegacyHandler\n }\n\n static createFor(key: string | undefined, handler: any): any {\n if (typeof handler === 'function') {\n const [initFn, disposeFn] = [handler, handler.dispose]\n return class extends LegacyBindingHandler {\n override get handler() {\n const init = initFn.bind(this)\n const dispose = disposeFn ? disposeFn.bind(this) : null\n return { init, dispose }\n }\n static get after() {\n return handler.after\n }\n static override get allowVirtualElements() {\n return handler.allowVirtualElements || virtualElements.allowedBindings[key!]\n }\n }\n }\n\n if (typeof handler === 'object') {\n return class extends LegacyBindingHandler {\n override get handler() {\n return handler\n }\n static get after() {\n return handler.after\n }\n static override get allowVirtualElements() {\n return handler.allowVirtualElements || virtualElements.allowedBindings[key!]\n }\n }\n }\n\n throw new Error('The given handler is not an appropriate type.')\n }\n}\n", "/* eslint no-cond-assign: 0 */\n\nimport {\n extend,\n objectMap,\n virtualElements,\n tagNameLower,\n domData,\n objectForEach,\n arrayIndexOf,\n arrayForEach,\n options\n} from '@tko/utils'\n\nimport { dependencyDetection } from '@tko/observable'\n\nimport type { Observable } from '@tko/observable'\n\nimport { type Computed, computed } from '@tko/computed'\n\nimport { dataFor, bindingContext, boundElementDomDataKey, contextSubscribeSymbol } from './bindingContext'\n\nimport { bindingEvent } from './bindingEvent'\n\nimport { BindingResult } from './BindingResult'\n\nimport { LegacyBindingHandler } from './LegacyBindingHandler'\n\nimport type { Provider } from '@tko/provider'\nimport type { BindingHandler, AllBindings } from './BindingHandler'\nimport type { BindingContext } from './bindingContext'\n\ninterface BindingError {\n during: string\n errorCaptured: Error\n bindings?: any\n allBindings?: AllBindings\n bindingKey?: string\n bindingContext: BindingContext\n element: Node\n valueAccessor?: Function\n message?: string\n stack?: any\n}\n\ntype BindingHandlerOrUndefined = (typeof BindingHandler & BindingHandler) | undefined\n\n// The following element types will not be recursed into during binding.\nconst bindingDoesNotRecurseIntoElementTypes = {\n // Don't want bindings that operate on text nodes to mutate <script> and <textarea> contents,\n // because it's unexpected and a potential XSS issue.\n // Also bindings should not operate on <template> elements since this breaks in Internet Explorer\n // and because such elements' contents are always intended to be bound in a different context\n // from where they appear in the document.\n script: true,\n textarea: true,\n template: true\n}\n\nfunction getBindingProvider(): Provider {\n return options.bindingProviderInstance.instance || options.bindingProviderInstance\n}\n\nfunction isProviderForNode(provider: Provider, node: Node): boolean {\n const nodeTypes = provider.FOR_NODE_TYPES || [Node.ELEMENT_NODE, Node.TEXT_NODE, Node.COMMENT_NODE]\n return nodeTypes.includes(node.nodeType)\n}\n\nfunction asProperHandlerClass(handler?: any, bindingKey?: string): BindingHandlerOrUndefined {\n if (!handler) {\n return\n }\n return handler.isBindingHandlerClass ? handler : LegacyBindingHandler.getOrCreateFor(bindingKey, handler)\n}\n\nfunction getBindingHandlerFromComponent(bindingKey: string, $component: any): BindingHandlerOrUndefined {\n if (!$component || typeof $component.getBindingHandler !== 'function') {\n return\n }\n return asProperHandlerClass($component.getBindingHandler(bindingKey))\n}\n\nexport function getBindingHandler(bindingKey: string): BindingHandlerOrUndefined {\n const bindingDefinition =\n options.getBindingHandler(bindingKey) || getBindingProvider().bindingHandlers.get(bindingKey)\n return asProperHandlerClass(bindingDefinition, bindingKey)\n}\n\n// Returns the value of a valueAccessor function\nfunction evaluateValueAccessor(valueAccessor: Function): any {\n return valueAccessor()\n}\n\nfunction applyBindingsToDescendantsInternal(\n bindingContext: BindingContext,\n elementOrVirtualElement: Node,\n asyncBindingsApplied: Set<any>\n) {\n let nextInQueue: ChildNode | null = virtualElements.firstChild(elementOrVirtualElement)\n\n if (!nextInQueue) {\n return\n }\n\n let currentChild: Node | null\n const provider = getBindingProvider()\n const preprocessNode = provider.preprocessNode\n\n // Preprocessing allows a binding provider to mutate a node before bindings are applied to it. For example it's\n // possible to insert new siblings after it, and/or replace the node with a different one. This can be used to\n // implement custom binding syntaxes, such as {{ value }} for string interpolation, or custom element types that\n // trigger insertion of <template> contents at that point in the document.\n if (preprocessNode) {\n while ((currentChild = nextInQueue)) {\n nextInQueue = virtualElements.nextSibling(currentChild)\n preprocessNode.call(provider, currentChild)\n }\n\n // Reset nextInQueue for the next loop\n nextInQueue = virtualElements.firstChild(elementOrVirtualElement)\n }\n\n while ((currentChild = nextInQueue)) {\n // Keep a record of the next child *before* applying bindings, in case the binding removes the current child from its position\n nextInQueue = virtualElements.nextSibling(currentChild)\n applyBindingsToNodeAndDescendantsInternal(bindingContext, currentChild, asyncBindingsApplied)\n }\n\n bindingEvent.notify(elementOrVirtualElement, bindingEvent.childrenComplete)\n}\n\nfunction hasBindings(node: Node): boolean | undefined {\n const provider = getBindingProvider()\n return isProviderForNode(provider, node) && provider.nodeHasBindings(node as Element)\n}\n\nfunction nodeOrChildHasBindings(node: Node): boolean {\n return hasBindings(node) || [...node.childNodes].some(c => nodeOrChildHasBindings(c))\n}\n\nfunction applyBindingsToNodeAndDescendantsInternal(\n bindingContext: BindingContext,\n nodeVerified: Node,\n asyncBindingsApplied\n) {\n const isElement = nodeVerified.nodeType === Node.ELEMENT_NODE\n if (isElement) {\n // Workaround IE <= 8 HTML parsing weirdness\n virtualElements.normaliseVirtualElementDomStructure(nodeVerified)\n }\n\n // Perf optimisation: Apply bindings only if...\n // (1) We need to store the binding info for the node (all element nodes)\n // (2) It might have bindings (e.g., it has a data-bind attribute, or it's a marker for a containerless template)\n\n const shouldApplyBindings =\n isElement || // Case (1)\n hasBindings(nodeVerified) // Case (2)\n\n const { shouldBindDescendants }: any = shouldApplyBindings\n ? applyBindingsToNodeInternal(nodeVerified, null, bindingContext, asyncBindingsApplied)\n : { shouldBindDescendants: true }\n\n if (shouldBindDescendants && !bindingDoesNotRecurseIntoElementTypes[tagNameLower(nodeVerified as Element)]) {\n // We're recursing automatically into (real or virtual) child nodes without changing binding contexts. So,\n // * For children of a *real* element, the binding context is certainly the same as on their DOM .parentNode,\n // hence bindingContextsMayDifferFromDomParentElement is false\n // * For children of a *virtual* element, we can't be sure. Evaluating .parentNode on those children may\n // skip over any number of intermediate virtual elements, any of which might define a custom binding context,\n // hence bindingContextsMayDifferFromDomParentElement is true\n applyBindingsToDescendantsInternal(bindingContext, nodeVerified, asyncBindingsApplied)\n }\n}\n\nfunction* topologicalSortBindings(bindings: Record<string, any>, $component: any) {\n const results: [string, typeof BindingHandler][] = []\n // Depth-first sort\n const bindingsConsidered = {} // A temporary record of which bindings are already in 'result'\n const cyclicDependencyStack = new Array() // Keeps track of a depth-search so that, if there's a cycle, we know which bindings caused it\n\n objectForEach(bindings, function pushBinding(bindingKey) {\n if (!bindingsConsidered[bindingKey]) {\n const binding = getBindingHandlerFromComponent(bindingKey, $component) || getBindingHandler(bindingKey)\n if (!binding) {\n return\n }\n // First add dependencies (if any) of the current binding\n if (binding.after) {\n cyclicDependencyStack.push(bindingKey)\n arrayForEach(binding.after, function (bindingDependencyKey) {\n if (!bindings[bindingDependencyKey]) {\n return\n }\n if (arrayIndexOf(cyclicDependencyStack, bindingDependencyKey) !== -1) {\n throw Error(\n 'Cannot combine the following bindings, because they have a cyclic dependency: ' +\n cyclicDependencyStack.join(', ')\n )\n } else {\n pushBinding(bindingDependencyKey)\n }\n })\n cyclicDependencyStack.length--\n }\n // Next add the current binding\n results.push([bindingKey, binding])\n }\n bindingsConsidered[bindingKey] = true\n })\n\n for (const result of results) {\n yield result\n }\n}\n\nfunction applyBindingsToNodeInternal<T>(\n node: Node,\n sourceBindings: Record<string, any> | null,\n bindingContext: BindingContext<T>,\n asyncBindingsApplied?: Set<any>\n) {\n const bindingInfo = domData.getOrSet(node, boundElementDomDataKey, {})\n // Prevent multiple applyBindings calls for the same node, except when a binding value is specified\n const alreadyBound = bindingInfo.alreadyBound\n if (!sourceBindings) {\n if (alreadyBound) {\n if (!nodeOrChildHasBindings(node)) {\n return false\n }\n onBindingError({\n during: 'apply',\n errorCaptured: new Error('You cannot apply bindings multiple times to the same element.'),\n element: node,\n bindingContext\n })\n return false\n }\n bindingInfo.alreadyBound = true\n }\n\n if (!alreadyBound) {\n bindingInfo.context = bindingContext\n }\n\n // Use bindings if given, otherwise fall back on asking the bindings provider to give us some bindings\n let bindings: Record<string, any> | null = null\n let bindingsUpdater: Computed | null = null\n if (sourceBindings && typeof sourceBindings !== 'function') {\n bindings = sourceBindings\n } else {\n const provider = getBindingProvider()\n const getBindings = provider.getBindingAccessors\n\n if (isProviderForNode(provider, node)) {\n // Get the binding from the provider within a computed observable so that we can update the bindings whenever\n // the binding context is updated or if the binding provider accesses observables.\n bindingsUpdater = computed(\n function () {\n bindings = sourceBindings\n ? sourceBindings(bindingContext, node)\n : getBindings.call(provider, node, bindingContext)\n // Register a dependency on the binding context to support observable view models.\n if (bindings && bindingContext[contextSubscribeSymbol]) {\n bindingContext[contextSubscribeSymbol]()\n }\n return bindings\n },\n null,\n { disposeWhenNodeIsRemoved: node }\n )\n\n if (!bindings || !bindingsUpdater.isActive()) {\n bindingsUpdater = null\n }\n }\n }\n\n let bindingHandlerThatControlsDescendantBindings: string | undefined\n if (bindings) {\n const $component = bindingContext.$component || {}\n\n const allBindingHandlers = {}\n domData.set(node, 'bindingHandlers', allBindingHandlers)\n\n // Return the value accessor for a given binding. When bindings are static (won't be updated because of a binding\n // context update), just return the value accessor from the binding. Otherwise, return a function that always gets\n // the latest binding value and registers a dependency on the binding updater.\n const getValueAccessor = bindingsUpdater\n ? bindingKey =>\n function (optionalValue) {\n const valueAccessor = bindingsUpdater()[bindingKey]\n if (arguments.length === 0) {\n return evaluateValueAccessor(valueAccessor)\n } else {\n return valueAccessor(optionalValue)\n }\n }\n : bindingKey => bindings![bindingKey]\n\n // Use of allBindings as a function is maintained for backwards compatibility, but its use is deprecated\n const allBindings: AllBindings = function (): any {\n return objectMap(bindingsUpdater ? bindingsUpdater() : bindings, evaluateValueAccessor)\n }\n\n // The following is the 3.x allBindings API\n allBindings.has = (key: string) => key in bindings!\n allBindings.get = (key: string) => bindings![key] && evaluateValueAccessor(getValueAccessor(key))\n\n if (bindingEvent.childrenComplete in bindings) {\n bindingEvent.subscribe(\n node,\n bindingEvent.childrenComplete,\n () => {\n const callback = evaluateValueAccessor(bindings![bindingEvent.childrenComplete])\n if (!callback) {\n return\n }\n const nodes = virtualElements.childNodes(node)\n if (nodes.length) {\n callback(nodes, dataFor(nodes[0]))\n }\n },\n null\n )\n }\n\n const bindingsGenerated = topologicalSortBindings(bindings, $component)\n const nodeAsyncBindingPromises = new Set<Promise<any>>()\n for (const [key, BindingHandlerClass] of bindingsGenerated) {\n // Go through the sorted bindings, calling init and update for each\n const reportBindingError = function (during: string, errorCaptured: Error) {\n onBindingError({\n during,\n errorCaptured,\n bindings,\n allBindings,\n bindingKey: key,\n bindingContext,\n element: node,\n valueAccessor: getValueAccessor(key)\n })\n }\n\n if (node.nodeType === Node.COMMENT_NODE && !BindingHandlerClass.allowVirtualElements) {\n throw new Error(`The binding '${key}' cannot be used with virtual elements`)\n }\n\n try {\n const bindingHandler = dependencyDetection.ignore(\n () =>\n new BindingHandlerClass({\n allBindings,\n $element: node,\n $context: bindingContext,\n onError: reportBindingError,\n valueAccessor(...v) {\n return getValueAccessor(key)(...v)\n }\n })\n )\n\n if (bindingHandler.onValueChange) {\n dependencyDetection.ignore(() => bindingHandler.computed('onValueChange'))\n }\n\n // Expose the bindings via domData.\n allBindingHandlers[key] = bindingHandler\n\n if (bindingHandler.controlsDescendants) {\n if (bindingHandlerThatControlsDescendantBindings !== undefined) {\n throw new Error(\n 'Multiple bindings (' +\n bindingHandlerThatControlsDescendantBindings +\n ' and ' +\n key +\n ') are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.'\n )\n }\n bindingHandlerThatControlsDescendantBindings = key\n }\n\n if (bindingHandler.bindingCompleted instanceof Promise) {\n asyncBindingsApplied!.add(bindingHandler.bindingCompleted)\n nodeAsyncBindingPromises.add(bindingHandler.bindingCompleted)\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n reportBindingError('creation', error)\n }\n }\n\n triggerDescendantsComplete(node, bindings, nodeAsyncBindingPromises)\n }\n\n const shouldBindDescendants = bindingHandlerThatControlsDescendantBindings === undefined\n return { shouldBindDescendants }\n}\n\n/**\n *\n * @param {HTMLElement} node\n * @param {Object} bindings\n * @param {[Promise]} nodeAsyncBindingPromises\n */\nfunction triggerDescendantsComplete(node: Node, bindings: object, nodeAsyncBindingPromises: Set<Promise<any>>) {\n /** descendantsComplete ought to be an instance of the descendantsComplete\n * binding handler. */\n const hasBindingHandler = bindingEvent.descendantsComplete in bindings\n const hasFirstChild = virtualElements.firstChild(node)\n const accessor = hasBindingHandler && evaluateValueAccessor(bindings[bindingEvent.descendantsComplete])\n const callback = () => {\n bindingEvent.notify(node, bindingEvent.descendantsComplete)\n if (accessor && hasFirstChild) {\n accessor(node)\n }\n }\n if (nodeAsyncBindingPromises.size) {\n Promise.all(nodeAsyncBindingPromises).then(callback)\n } else {\n callback()\n }\n}\n\n// used in applyBinding, bindingContext.ts\nexport type BindingContextExtendCallback<T = any> = (\n self: BindingContext<T>,\n parentContext?: BindingContext<T>,\n dataItem?: T\n) => void\n\nfunction getBindingContext<T = any>(\n viewModelOrBindingContext: any,\n extendContextCallback?: BindingContextExtendCallback<T>\n): BindingContext<T> {\n return viewModelOrBindingContext && viewModelOrBindingContext instanceof bindingContext\n ? viewModelOrBindingContext\n : new bindingContext<T>(viewModelOrBindingContext, undefined, undefined, extendContextCallback)\n}\n\nexport function applyBindingAccessorsToNode<T = any>(\n node: HTMLElement,\n bindings: Record<string, any>,\n viewModelOrBindingContext?: BindingContext<T> | Observable<T> | T,\n asyncBindingsApplied?: Set<any>\n) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n // If it's an element, workaround IE <= 8 HTML parsing weirdness\n virtualElements.normaliseVirtualElementDomStructure(node)\n }\n return applyBindingsToNodeInternal<T>(\n node,\n bindings,\n getBindingContext(viewModelOrBindingContext),\n asyncBindingsApplied\n )\n}\n\nexport function applyBindingsToNode<T = any>(\n node: HTMLElement,\n bindings: Record<string, any>,\n viewModelOrBindingContext: BindingContext<T> | Observable<T> | T\n): BindingResult {\n const asyncBindingsApplied = new Set()\n const bindingContext = getBindingContext<T>(viewModelOrBindingContext)\n const bindingAccessors = getBindingProvider().makeBindingAccessors(bindings, bindingContext, node)\n applyBindingAccessorsToNode(node, bindingAccessors, bindingContext, asyncBindingsApplied)\n return new BindingResult({ asyncBindingsApplied, rootNode: node, bindingContext })\n}\n\nexport function applyBindingsToDescendants<T = any>(\n viewModelOrBindingContext: T | BindingContext<T>,\n rootNode: Node\n): BindingResult {\n const asyncBindingsApplied = new Set()\n const bindingContext = getBindingContext(viewModelOrBindingContext)\n if (rootNode.nodeType === Node.ELEMENT_NODE || rootNode.nodeType === Node.COMMENT_NODE) {\n applyBindingsToDescendantsInternal(bindingContext, rootNode, asyncBindingsApplied)\n return new BindingResult({ asyncBindingsApplied, rootNode, bindingContext })\n }\n return new BindingResult({ asyncBindingsApplied, rootNode, bindingContext })\n}\n\nexport function applyBindings<T = any>(\n viewModelOrBindingContext: BindingContext<T> | Observable<T> | T,\n rootNode: HTMLElement,\n extendContextCallback?: BindingContextExtendCallback<T>\n): Promise<unknown> {\n const asyncBindingsApplied = new Set()\n\n // rootNode is optional\n if (!rootNode) {\n rootNode = window.document.body\n if (!rootNode) {\n throw Error('ko.applyBindings: could not find window.document.body; has the document been loaded?')\n }\n } else if (rootNode.nodeType !== Node.ELEMENT_NODE && rootNode.nodeType !== Node.COMMENT_NODE) {\n throw Error('ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node')\n }\n const rootContext = getBindingContext<T>(viewModelOrBindingContext, extendContextCallback)\n applyBindingsToNodeAndDescendantsInternal(rootContext, rootNode, asyncBindingsApplied)\n return Promise.all(asyncBindingsApplied)\n}\n\nfunction onBindingError(spec: BindingError) {\n let error: Error\n if (spec.bindingKey) {\n // During: 'init' or initial 'update'\n error = spec.errorCaptured\n spec.message =\n 'Unable to process binding \"' +\n spec.bindingKey +\n '\" in binding \"' +\n spec.bindingKey +\n '\"\\nMessage: ' +\n (error.message ? error.message : error)\n } else {\n // During: 'apply'\n error = spec.errorCaptured\n }\n try {\n extend(error, spec)\n } catch (e: any) {\n // Read-only error e.g. a DOMEXception.\n spec.stack = error.stack\n\n const message = error.message || String(error)\n const originalName = error.name\n error = new Error(message)\n if (originalName && originalName !== 'Error') {\n error.name = originalName\n }\n extend(error, spec)\n }\n options.onError(error)\n}\n", "/* eslint no-cond-assign: 0 */\nimport {\n fixUpContinuousNodeArray,\n replaceDomNodes,\n arrayPushAll,\n anyDomNodeIsAttachedToDocument,\n domData,\n arrayMap,\n arrayForEach,\n virtualElements,\n extend,\n cleanNode,\n removeNode,\n compareArrays\n} from '@tko/utils'\n\nimport { dependencyDetection, observable } from '@tko/observable'\n\nimport type { Observable } from '@tko/observable'\n\nimport { computed } from '@tko/computed'\n\nimport type { Computed } from '@tko/computed'\n\ntype MappingFunction<T = any> = (valueToMap: T, index: number | Observable<number>, nodes: Node[]) => Node[]\ntype MappingAfterAddFunction<T = any> = (arrayEntry: T, nodes: Node[], index: Observable<number>) => Node[]\ntype MappingHookFunction<T = any> = (nodes: Node[], index: number, arrayEntry: T) => void\n\ninterface MappingOptions<T = any> {\n dontLimitMoves?: boolean\n beforeMove?: MappingHookFunction<T>\n beforeRemove?: MappingHookFunction<T>\n afterAdd?: MappingHookFunction<T>\n afterMove?: MappingHookFunction<T>\n afterRemove?: MappingHookFunction<T>\n sparse?: boolean\n}\n\n// Objective:\n// * Given an input array, a container DOM node, and a function from array elements to arrays of DOM nodes,\n// map the array elements to arrays of DOM nodes, concatenate together all these arrays, and use them to populate the container DOM node\n// * Next time we're given the same combination of things (with the array possibly having mutated), update the container DOM node\n// so that its children is again the concatenation of the mappings of the array elements, but don't re-map any array elements that we\n// previously mapped - retain those nodes, and just insert/delete other ones\n\n// \"callbackAfterAddingNodes\" will be invoked after any \"mapping\"-generated nodes are inserted into the container node\n// You can use this, for example, to activate bindings on those nodes.\n\nfunction mapNodeAndRefreshWhenChanged(\n containerNode: Node,\n mapping: MappingFunction,\n valueToMap: any,\n callbackAfterAddingNodes: MappingAfterAddFunction | undefined,\n index: number | Observable<number>\n) {\n // Map this array value inside a dependentObservable so we re-map when any dependency changes\n const mappedNodes: Node[] = []\n const dependentObservable: Computed<void> = computed(\n function () {\n const newMappedNodes: Node[] =\n mapping(valueToMap, index, fixUpContinuousNodeArray(mappedNodes, containerNode)) || []\n\n // On subsequent evaluations, just replace the previously-inserted DOM nodes\n if (mappedNodes.length > 0) {\n replaceDomNodes(mappedNodes, newMappedNodes)\n if (callbackAfterAddingNodes) {\n dependencyDetection.ignore(callbackAfterAddingNodes, null, [valueToMap, newMappedNodes, index])\n }\n }\n\n // Replace the contents of the mappedNodes array, thereby updating the record\n // of which nodes would be deleted if valueToMap was itself later removed\n mappedNodes.length = 0\n arrayPushAll(mappedNodes, newMappedNodes)\n },\n null,\n {\n disposeWhenNodeIsRemoved: containerNode,\n disposeWhen: function () {\n return !anyDomNodeIsAttachedToDocument(mappedNodes)\n }\n }\n )\n return {\n mappedNodes: mappedNodes,\n dependentObservable: dependentObservable.isActive() ? dependentObservable : undefined\n }\n}\n\nconst lastMappingResultDomDataKey = domData.nextKey()\nconst deletedItemDummyValue = domData.nextKey()\n\nexport function setDomNodeChildrenFromArrayMapping<T = any>(\n domNode: Node,\n array: any,\n mapping: MappingFunction<T>,\n options?: MappingOptions<T>,\n callbackAfterAddingNodes?: MappingAfterAddFunction<T> | ((...params: any) => any),\n editScript?: any[]\n) {\n // Compare the provided array against the previous one\n array = array || []\n if (typeof array.length === 'undefined') {\n array = [array]\n }\n\n options = options || {}\n const lastMappingResult = domData.get(domNode, lastMappingResultDomDataKey)\n const isFirstExecution = !lastMappingResult\n\n // Build the new mapping result\n const newMappingResult = new Array()\n let lastMappingResultIndex = 0\n let newMappingResultIndex = 0\n\n const nodesToDelete: Node[] = []\n const itemsToProcess: MapDataType[] = []\n const itemsForBeforeRemoveCallbacks: MapDataType[] = []\n const itemsForMoveCallbacks: MapDataType[] = []\n const itemsForAfterAddCallbacks: MapDataType[] = []\n let mapData: MapDataType | null\n let countWaitingForRemove = 0\n\n type MapDataType = {\n arrayEntry: any\n indexObservable: Observable<number>\n mappedNodes?: Node[]\n dependentObservable?: Computed<void>\n initialized?: boolean\n }\n\n function itemAdded(value: any) {\n mapData = { arrayEntry: value, indexObservable: observable(newMappingResultIndex++) }\n newMappingResult.push(mapData)\n itemsToProcess.push(mapData)\n if (!isFirstExecution) {\n itemsForAfterAddCallbacks.push(mapData)\n }\n }\n\n function itemMovedOrRetained(oldPosition: number) {\n mapData = lastMappingResult[oldPosition]\n if (newMappingResultIndex !== oldPosition) {\n itemsForMoveCallbacks.push(mapData!)\n }\n // Since updating the index might change the nodes, do so before calling fixUpContinuousNodeArray\n mapData!.indexObservable(newMappingResultIndex++)\n fixUpContinuousNodeArray(mapData!.mappedNodes, domNode)\n newMappingResult.push(mapData)\n itemsToProcess.push(mapData!)\n }\n\n function callCallback(callback: MappingHookFunction<T> | undefined, items: any[]) {\n if (callback) {\n for (let i = 0, n = items.length; i < n; i++) {\n arrayForEach(items[i].mappedNodes, function (node) {\n callback(node, i, items[i].arrayEntry)\n })\n }\n }\n }\n\n if (isFirstExecution) {\n arrayForEach(array, itemAdded)\n } else {\n if (!editScript || (lastMappingResult && lastMappingResult['_countWaitingForRemove'])) {\n // Compare the provided array against the previous one\n const lastArray = arrayMap(lastMappingResult, function (x) {\n return x.arrayEntry\n })\n const compareOptions = { dontLimitMoves: options.dontLimitMoves, sparse: true }\n editScript = compareArrays(lastArray, array, compareOptions)\n }\n\n for (\n let i = 0, editScriptItem: number[], movedIndex: number, itemIndex: number;\n (editScriptItem = editScript[i]);\n i++\n ) {\n movedIndex = editScriptItem['moved']\n itemIndex = editScriptItem['index']\n switch (editScriptItem['status']) {\n case 'deleted':\n while (lastMappingResultIndex < itemIndex) {\n itemMovedOrRetained(lastMappingResultIndex++)\n }\n if (movedIndex === undefined) {\n mapData = lastMappingResult[lastMappingResultIndex]\n\n // Stop tracking changes to the mapping for these nodes\n if (mapData!.dependentObservable) {\n mapData!.dependentObservable.dispose()\n mapData!.dependentObservable = undefined\n }\n\n // Queue these nodes for later removal\n if (fixUpContinuousNodeArray(mapData!.mappedNodes, domNode).length) {\n if (options.beforeRemove) {\n newMappingResult.push(mapData)\n itemsToProcess.push(mapData!)\n countWaitingForRemove++\n if (mapData!.arrayEntry === deletedItemDummyValue) {\n mapData = null\n } else {\n itemsForBeforeRemoveCallbacks.push(mapData!)\n }\n }\n if (mapData?.mappedNodes) {\n nodesToDelete.push.apply(nodesToDelete, mapData.mappedNodes)\n }\n }\n }\n lastMappingResultIndex++\n break\n\n case 'added':\n while (newMappingResultIndex < itemIndex) {\n itemMovedOrRetained(lastMappingResultIndex++)\n }\n if (movedIndex !== undefined) {\n itemMovedOrRetained(movedIndex)\n } else {\n itemAdded(editScriptItem['value'])\n }\n break\n }\n }\n\n while (newMappingResultIndex < array.length) {\n itemMovedOrRetained(lastMappingResultIndex++)\n }\n\n // Record that the current view may still contain deleted items\n // because it means we won't be able to use a provided editScript.\n newMappingResult['_countWaitingForRemove'] = countWaitingForRemove\n }\n\n // Store a copy of the array items we just considered so we can difference it next time\n domData.set(domNode, lastMappingResultDomDataKey, newMappingResult)\n\n // Call beforeMove first before any changes have been made to the DOM\n callCallback(options.beforeMove, itemsForMoveCallbacks)\n\n // Next remove nodes for deleted items (or just clean if there's a beforeRemove callback)\n arrayForEach(nodesToDelete, options.beforeRemove ? cleanNode : removeNode)\n\n // Next add/reorder the remaining items (will include deleted items if there's a beforeRemove callback)\n for (let k = 0, nextNode = virtualElements.firstChild(domNode), lastNode, node; (mapData = itemsToProcess[k]); k++) {\n // Get nodes for newly added items\n if (!mapData.mappedNodes) {\n extend(\n mapData,\n mapNodeAndRefreshWhenChanged(\n domNode,\n mapping,\n mapData.arrayEntry,\n callbackAfterAddingNodes,\n mapData.indexObservable\n )\n )\n }\n\n // Put nodes in the right place if they aren't there already\n for (let j = 0; (node = mapData.mappedNodes![j]); nextNode = node.nextSibling, lastNode = node, j++) {\n if (node !== nextNode) {\n virtualElements.insertAfter(domNode, node, lastNode)\n }\n }\n\n // Run the callbacks for newly added nodes (for example, to apply bindings, etc.)\n if (!mapData.initialized && callbackAfterAddingNodes) {\n callbackAfterAddingNodes(mapData.arrayEntry, mapData.mappedNodes!, mapData.indexObservable)\n mapData.initialized = true\n }\n }\n\n // If there's a beforeRemove callback, call it after reordering.\n // Note that we assume that the beforeRemove callback will usually be used to remove the nodes using\n // some sort of animation, which is why we first reorder the nodes that will be removed. If the\n // callback instead removes the nodes right away, it would be more efficient to skip reordering them.\n // Perhaps we'll make that change in the future if this scenario becomes more common.\n callCallback(options.beforeRemove, itemsForBeforeRemoveCallbacks)\n\n // Replace the stored values of deleted items with a dummy value. This provides two benefits: it marks this item\n // as already \"removed\" so we won't call beforeRemove for it again, and it ensures that the item won't match up\n // with an actual item in the array and appear as \"retained\" or \"moved\".\n for (let x = 0; x < itemsForBeforeRemoveCallbacks.length; ++x) {\n itemsForBeforeRemoveCallbacks[x].arrayEntry = deletedItemDummyValue\n }\n\n // Finally call afterMove and afterAdd callbacks\n callCallback(options.afterMove, itemsForMoveCallbacks)\n callCallback(options.afterAdd, itemsForAfterAddCallbacks)\n}\n", "import { applyBindingsToDescendants } from './applyBindings'\nimport { AsyncBindingHandler } from './BindingHandler'\nimport type { BindingResult } from './BindingResult'\nimport type { BindingContext } from './bindingContext'\n\n/**\n * This DescendantBindingHandler is a base class for bindings that control\n * descendants, such as the `if`, `with`, `component`, `foreach` and `template`\n * bindings.\n */\nexport class DescendantBindingHandler extends AsyncBindingHandler {\n override get controlsDescendants() {\n return true\n }\n\n async applyBindingsToDescendants(childContext: BindingContext, callback?: (result: BindingResult) => void) {\n const bindingResult = applyBindingsToDescendants(childContext, this.$element)\n if (bindingResult.isSync) {\n this.bindingCompletion = bindingResult\n } else {\n await bindingResult.completionPromise\n }\n if (callback) {\n callback(bindingResult)\n }\n this.completeBinding(bindingResult)\n }\n}\n", "// A template source represents a read/write way of accessing a template. This is to eliminate the need for template loading/saving\n// logic to be duplicated in every template engine (and means they can all work with anonymous templates, etc.)\n//\n// Two are provided by default:\n// 1. ko.templateSources.domElement - reads/writes the text content of an arbitrary DOM element\n// 2. ko.templateSources.anonymousElement - uses ko.utils.domData to read/write text *associated* with the DOM element, but\n// without reading/writing the actual element text content, since it will be overwritten\n// with the rendered template output.\n// You can implement your own template source if you want to fetch/store templates somewhere other than in DOM elements.\n// Template sources need to have the following functions:\n// text() \t\t\t- returns the template text from your storage location\n// text(value)\t\t- writes the supplied template text to your storage location\n// data(key)\t\t\t- reads values stored using data(key, value) - see below\n// data(key, value)\t- associates \"value\" with this template and the key \"key\". Is used to store information like \"isRewritten\".\n//\n// Optionally, template sources can also have the following functions:\n// nodes() - returns a DOM element containing the nodes of this template, where available\n// nodes(value) - writes the given DOM element to your storage location\n// If a DOM element is available for a given template source, template engines are encouraged to use it in preference over text()\n// for improved speed. However, all templateSources must supply text() even if they don't supply nodes().\n//\n// Once you've implemented a templateSource, make your template engine use it by subclassing whatever template engine you were\n// using and overriding \"makeTemplateSource\" to return an instance of your custom template source.\n\nimport { tagNameLower as tagNameLowerFn, setHtml, domData, parseHtmlForTemplateNodes } from '@tko/utils'\n\n// ---- ko.templateSources.domElement -----\n\n// template types\nconst templateScript = 1,\n templateTextArea = 2,\n templateTemplate = 3,\n templateElement = 4,\n templateAnonymous = 5\n\nexport interface TemplateSource {\n text(): string\n text(valueToWrite: string): void\n text(valueToWrite?: string): string | void\n\n data(key: string): any\n data<T>(key: string): T\n data<T>(key: string, valueToWrite: T): void\n\n nodes(): Node\n nodes(valueToWrite: Node): undefined\n nodes(valueToWrite?: any): Node | undefined\n}\n\nconst dataDomDataPrefix = domData.nextKey() + '_'\nconst templatesDomDataKey = domData.nextKey()\nfunction getTemplateDomData(element) {\n return domData.get(element, templatesDomDataKey) || {}\n}\nfunction setTemplateDomData(element, data) {\n domData.set(element, templatesDomDataKey, data)\n}\n\nexport class domElement implements TemplateSource {\n protected domElement: Element | Comment\n protected templateType: number\n\n constructor(element: Element | Comment) {\n this.domElement = element\n\n if (element.nodeType === Node.COMMENT_NODE) {\n this.templateType = templateElement\n } else {\n const tagNameLower = tagNameLowerFn(this.domElement as Element)\n this.templateType =\n tagNameLower === 'script'\n ? templateScript\n : tagNameLower === 'textarea'\n ? templateTextArea\n : // For browsers with proper <template> element support, where the .content property gives a document fragment\n tagNameLower == 'template' &&\n (element as HTMLTemplateElement).content &&\n (element as HTMLTemplateElement).content.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? templateTemplate\n : templateElement\n }\n }\n\n text(): string\n text(valueToWrite: string): void\n text(valueToWrite?: string): string | void {\n const elemContentsProperty =\n this.templateType === templateScript ? 'text' : this.templateType === templateTextArea ? 'value' : 'innerHTML'\n\n if (arguments.length == 0) {\n return this.domElement[elemContentsProperty]\n } else {\n if (elemContentsProperty === 'innerHTML') {\n setHtml(this.domElement, valueToWrite!)\n } else {\n this.domElement[elemContentsProperty] = valueToWrite\n }\n }\n }\n\n data<T = any>(key: string, valueToWrite?: T): T | void {\n if (arguments.length === 1) {\n return domData.get(this.domElement, dataDomDataPrefix + key)\n } else {\n domData.set(this.domElement, dataDomDataPrefix + key, valueToWrite)\n }\n }\n\n nodes(): Node\n nodes(valueToWrite: Node): undefined\n nodes(valueToWrite?: any): Node | undefined {\n const element = this.domElement\n if (arguments.length == 0) {\n const templateData = getTemplateDomData(element)\n let nodes =\n templateData.containerData ||\n (this.templateType === templateTemplate\n ? (element as HTMLTemplateElement).content\n : this.templateType === templateElement\n ? element\n : undefined)\n if (!nodes || templateData.alwaysCheckText) {\n // If the template is associated with an element that stores the template as text,\n // parse and cache the nodes whenever there's new text content available. This allows\n // the user to update the template content by updating the text of template node.\n const text = this.text()\n if (text) {\n nodes = parseHtmlForTemplateNodes(text, element.ownerDocument)\n this.text('') // clear the text from the node\n setTemplateDomData(element, { containerData: nodes, alwaysCheckText: true })\n }\n }\n return nodes\n } else {\n setTemplateDomData(element, { containerData: valueToWrite })\n }\n return undefined\n }\n}\n\n// ---- ko.templateSources.anonymousTemplate -----\n// Anonymous templates are normally saved/retrieved as DOM nodes through \"nodes\".\n// For compatibility, you can also read \"text\"; it will be serialized from the nodes on demand.\n// Writing to \"text\" is still supported, but then the template data will not be available as DOM nodes.\nexport class anonymousTemplate extends domElement {\n constructor(element: Element | Comment) {\n super(element)\n //The old prototype construct uses an empty-constructor from domElement, so templateType and element was 'undefined'.\n //With the new templateType = templateAnonymous (5) we achieve the same behavior in the \"nodes\" Method\n this.templateType = templateAnonymous\n }\n\n override text(): string\n override text(valueToWrite: string): void\n override text(valueToWrite?: string): string | void {\n if (arguments.length == 0) {\n const templateData = getTemplateDomData(this.domElement)\n if (templateData.textData === undefined && templateData.containerData) {\n templateData.textData = templateData.containerData.innerHTML\n }\n return templateData.textData\n } else {\n setTemplateDomData(this.domElement, { textData: valueToWrite })\n }\n }\n}\n", "// If you want to make a custom template engine,\n//\n// [1] Inherit from this class (like ko.nativeTemplateEngine does)\n// [2] Override 'renderTemplateSource', supplying a function with this signature:\n//\n// function (templateSource, bindingContext, options) {\n// // - templateSource.text() is the text of the template you should render\n// // - bindingContext.$data is the data you should pass into the template\n// // - you might also want to make bindingContext.$parent, bindingContext.$parents,\n// // and bindingContext.$root available in the template too\n// // - options gives you access to any other properties set on \"data-bind: { template: options }\"\n// // - templateDocument is the document object of the template\n// //\n// // Return value: an array of DOM nodes\n// }\n//\n// [3] Override 'createJavaScriptEvaluatorBlock', supplying a function with this signature:\n//\n// function (script) {\n// // Return value: Whatever syntax means \"Evaluate the JavaScript statement 'script' and output the result\"\n// // For example, the jquery.tmpl template engine converts 'someScript' to '${ someScript }'\n// }\n//\n// This is only necessary if you want to allow data-bind attributes to reference arbitrary template variables.\n// If you don't want to allow that, you can set the property 'allowTemplateRewriting' to false (like ko.nativeTemplateEngine does)\n// and then you don't need to override 'createJavaScriptEvaluatorBlock'.\n\nimport { extend, options } from '@tko/utils'\nimport { domElement, anonymousTemplate } from './templateSources'\nimport type { TemplateSource } from './templateSources'\nimport type { BindingContext } from '@tko/bind'\n\nexport interface TemplateOptions<T = any> {\n afterRender?: (elements: Node[], dataItem: T) => void\n templateEngine?: TemplateEngine\n}\n\nexport interface TemplateEngine {\n allowTemplateRewriting: boolean\n\n renderTemplateSource(\n templateSource: TemplateSource,\n bindingContext: BindingContext<any>,\n options: TemplateOptions<any>,\n templateDocument?: Document\n ): Node[]\n createJavaScriptEvaluatorBlock(script: string): string\n\n makeTemplateSource(template: string | Node, templateDocument?: Document): TemplateSource\n\n renderTemplate(\n template: string | Node,\n bindingContext: BindingContext<any>,\n options: TemplateOptions<any>,\n templateDocument?: Document\n ): Node[]\n\n isTemplateRewritten(template: string | Node, templateDocument?: Document): boolean\n\n rewriteTemplate(template: string | Node, rewriterCallback: (val: string) => string, templateDocument?: Document): void\n}\n\n//TODO Class-Migration implements TemplateEngine\nexport function templateEngine() {}\n\nextend(templateEngine.prototype, {\n renderTemplateSource(\n templateSource: TemplateSource,\n bindingContext: BindingContext<any>,\n options,\n templateDocument?: Document\n ) {\n // templateSource, bindingContext, templateDocument not in use\n options.onError('Override renderTemplateSource')\n },\n\n createJavaScriptEvaluatorBlock(script: string) {\n options.onError(new Error('Override createJavaScriptEvaluatorBlock'))\n },\n\n makeTemplateSource(template: string | Node, templateDocument?: Document): TemplateSource {\n // Named template\n if (typeof template === 'string') {\n templateDocument = templateDocument || document\n const elem = templateDocument.getElementById(template)\n if (!elem) {\n throw options.onError(new Error('Cannot find template with ID ' + template), false)\n }\n return new domElement(elem)\n } else if (template.nodeType === Node.ELEMENT_NODE) {\n // Anonymous template\n return new anonymousTemplate(template as Element)\n } else if (template.nodeType === Node.COMMENT_NODE) {\n // Anonymous template stored in a comment node\n return new anonymousTemplate(template as Comment)\n } else {\n throw options.onError(new Error('Unknown template type: ' + template), false)\n }\n },\n\n renderTemplate(\n template: string | Node,\n bindingContext: BindingContext<any>,\n options: TemplateOptions<any>,\n templateDocument?: Document\n ): Node[] {\n const templateSource = this.makeTemplateSource(template, templateDocument)\n return this.renderTemplateSource(templateSource, bindingContext, options, templateDocument)\n }\n})\n", "import {\n virtualElements,\n fixUpContinuousNodeArray,\n replaceDomNodes,\n memoization,\n domNodeIsAttachedToDocument,\n moveCleanedNodesToContainerElement,\n arrayFilter,\n domData,\n options as koOptions\n} from '@tko/utils'\n\nimport {\n applyBindings,\n setDomNodeChildrenFromArrayMapping,\n AsyncBindingHandler,\n bindingEvent,\n bindingContext as BindingContextConstructor\n} from '@tko/bind'\n\nimport { computed } from '@tko/computed'\n\nimport type { Computed } from '@tko/computed'\n\nimport type { BindingContext } from '@tko/bind'\n\nimport { isObservable, dependencyDetection, unwrap, observable, isObservableArray } from '@tko/observable'\n\nimport { templateEngine } from './templateEngine'\n\nimport type { TemplateEngine, TemplateOptions } from './templateEngine'\n\nimport { anonymousTemplate as AnonymousTemplate } from './templateSources'\n\nlet _templateEngine: TemplateEngine\nconst cleanContainerDomDataKey = domData.nextKey()\n\nexport function setTemplateEngine(tEngine: TemplateEngine | undefined): void {\n if (tEngine !== undefined && !(tEngine instanceof templateEngine)) {\n // TODO: ko.templateEngine to appropriate name\n throw new Error('templateEngine must inherit from ko.templateEngine')\n }\n _templateEngine = tEngine!\n}\n\nfunction invokeForEachNodeInContinuousRange(firstNode, lastNode, action) {\n let node\n let nextInQueue = firstNode\n const firstOutOfRangeNode = virtualElements.nextSibling(lastNode)\n while (nextInQueue && (node = nextInQueue) !== firstOutOfRangeNode) {\n nextInQueue = virtualElements.nextSibling(node)\n action(node, nextInQueue)\n }\n}\n\nfunction activateBindingsOnContinuousNodeArray(\n continuousNodeArray,\n bindingContext: BindingContext,\n afterBindingCallback\n) {\n // To be used on any nodes that have been rendered by a template and have been inserted into some parent element\n // Walks through continuousNodeArray (which *must* be continuous, i.e., an uninterrupted sequence of sibling nodes, because\n // the algorithm for walking them relies on this), and for each top-level item in the virtual-element sense,\n // (1) Does a regular \"applyBindings\" to associate bindingContext with this node and to activate any non-memoized bindings\n // (2) Unmemoizes any memos in the DOM subtree (e.g., to activate bindings that had been memoized during template rewriting)\n\n if (continuousNodeArray.length) {\n let firstNode = continuousNodeArray[0]\n let lastNode = continuousNodeArray[continuousNodeArray.length - 1]\n const parentNode = firstNode.parentNode\n const provider = koOptions.bindingProviderInstance\n const preprocessNode = provider.preprocessNode\n\n if (preprocessNode) {\n invokeForEachNodeInContinuousRange(firstNode, lastNode, function (node, nextNodeInRange) {\n const nodePreviousSibling = node.previousSibling\n const newNodes = preprocessNode.call(provider, node)\n if (newNodes) {\n if (node === firstNode) {\n firstNode = newNodes[0] || nextNodeInRange\n }\n if (node === lastNode) {\n lastNode = newNodes[newNodes.length - 1] || nodePreviousSibling\n }\n }\n })\n\n // Because preprocessNode can change the nodes, including the first and last nodes, update continuousNodeArray to match.\n // We need the full set, including inner nodes, because the unmemoize step might remove the first node (and so the real\n // first node needs to be in the array).\n continuousNodeArray.length = 0\n if (!firstNode) {\n // preprocessNode might have removed all the nodes, in which case there's nothing left to do\n return\n }\n if (firstNode === lastNode) {\n continuousNodeArray.push(firstNode)\n } else {\n continuousNodeArray.push(firstNode, lastNode)\n fixUpContinuousNodeArray(continuousNodeArray, parentNode)\n }\n }\n\n // Need to applyBindings *before* unmemoziation, because unmemoization might introduce extra nodes (that we don't want to re-bind)\n // whereas a regular applyBindings won't introduce new memoized nodes\n invokeForEachNodeInContinuousRange(firstNode, lastNode, function (node) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE) {\n applyBindings(bindingContext, node).then(afterBindingCallback)\n }\n })\n invokeForEachNodeInContinuousRange(firstNode, lastNode, function (node) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE) {\n memoization.unmemoizeDomNodeAndDescendants(node, [bindingContext])\n }\n })\n\n // Make sure any changes done by applyBindings or unmemoize are reflected in the array\n fixUpContinuousNodeArray(continuousNodeArray, parentNode)\n }\n}\n\nfunction getFirstNodeFromPossibleArray(nodeOrNodeArray) {\n return nodeOrNodeArray.nodeType ? nodeOrNodeArray : nodeOrNodeArray.length > 0 ? nodeOrNodeArray[0] : null\n}\n\nfunction executeTemplate(targetNodeOrNodeArray, renderMode, template, bindingContext, options, afterBindingCallback) {\n options = options || {}\n const firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray)\n const templateDocument = (firstTargetNode || template || {}).ownerDocument\n const templateEngineToUse = options.templateEngine || _templateEngine\n const renderedNodesArray = templateEngineToUse.renderTemplate(template, bindingContext, options, templateDocument)\n\n // Loosely check result is an array of DOM nodes\n if (\n typeof renderedNodesArray.length !== 'number' ||\n (renderedNodesArray.length > 0 && typeof renderedNodesArray[0].nodeType !== 'number')\n ) {\n throw new Error('Template engine must return an array of DOM nodes')\n }\n\n let haveAddedNodesToParent = false\n switch (renderMode) {\n case 'replaceChildren':\n virtualElements.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray)\n haveAddedNodesToParent = true\n break\n case 'replaceNode':\n replaceDomNodes(targetNodeOrNodeArray, renderedNodesArray)\n haveAddedNodesToParent = true\n break\n case 'ignoreTargetNode':\n break\n default:\n throw new Error('Unknown renderMode: ' + renderMode)\n }\n\n if (haveAddedNodesToParent) {\n activateBindingsOnContinuousNodeArray(renderedNodesArray, bindingContext, afterBindingCallback)\n if (options.afterRender) {\n dependencyDetection.ignore(options.afterRender, null, [renderedNodesArray, bindingContext['$data']])\n }\n if (renderMode === 'replaceChildren') {\n bindingEvent.notify(targetNodeOrNodeArray, bindingEvent.childrenComplete)\n }\n }\n\n return renderedNodesArray\n}\n\nfunction resolveTemplateName(template, data, context) {\n // The template can be specified as:\n if (isObservable(template)) {\n // 1. An observable, with string value\n return template()\n } else if (typeof template === 'function') {\n // 2. A function of (data, context) returning a string\n return template(data, context)\n } else {\n // 3. A string\n return template\n }\n}\n\nexport type RenderModeEnum = 'replaceChildren' | 'replaceNode' | 'ignoreTargetNode'\n\nexport function renderTemplate<T = any>(\n template: string | Node | (() => string | Node),\n dataOrBindingContext: T | BindingContext<T> | null | undefined,\n options: TemplateOptions<T> | null | undefined,\n targetNodeOrNodeArray: Node | Node[],\n renderMode?: RenderModeEnum,\n afterBindingCallback?\n): Computed<void> | string {\n options = options || {}\n if ((options.templateEngine || _templateEngine) === undefined) {\n throw new Error('Set a template engine before calling renderTemplate')\n }\n renderMode = renderMode || 'replaceChildren'\n\n if (targetNodeOrNodeArray) {\n let firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray)\n\n const whenToDispose = function () {\n return !firstTargetNode || !domNodeIsAttachedToDocument(firstTargetNode)\n } // Passive disposal (on next evaluation)\n const activelyDisposeWhenNodeIsRemoved =\n firstTargetNode && renderMode === 'replaceNode' ? firstTargetNode.parentNode : firstTargetNode\n\n return computed(\n // So the DOM is automatically updated when any dependency changes\n function () {\n // Ensure we've got a proper binding context to work with\n const bindingContext =\n dataOrBindingContext && dataOrBindingContext instanceof BindingContextConstructor\n ? dataOrBindingContext\n : new BindingContextConstructor(dataOrBindingContext, undefined, undefined, undefined, {\n exportDependencies: true\n })\n\n const templateName = resolveTemplateName(template, bindingContext.$data, bindingContext)\n const renderedNodesArray = executeTemplate(\n targetNodeOrNodeArray,\n renderMode,\n templateName,\n bindingContext,\n options,\n afterBindingCallback\n )\n\n if (renderMode === 'replaceNode') {\n targetNodeOrNodeArray = renderedNodesArray\n firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray)\n }\n },\n null,\n { disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: activelyDisposeWhenNodeIsRemoved }\n )\n } else {\n // We don't yet have a DOM node to evaluate, so use a memo and render the template later when there is a DOM node\n return memoization.memoize(function (domNode) {\n renderTemplate(template, dataOrBindingContext, options, domNode, 'replaceNode')\n })\n }\n}\n\nexport default function renderTemplateForEach(\n template,\n arrayOrObservableArray,\n options,\n targetNode,\n parentBindingContext,\n afterBindingCallback\n) {\n // Since setDomNodeChildrenFromArrayMapping always calls executeTemplateForArrayItem and then\n // activateBindingsCallback for added items, we can store the binding context in the former to use in the latter.\n let arrayItemContext\n\n // This will be called by setDomNodeChildrenFromArrayMapping to get the nodes to add to targetNode\n function executeTemplateForArrayItem(arrayValue, index) {\n // Support selecting template as a function of the data being rendered\n if (options.as) {\n if (koOptions.createChildContextWithAs) {\n arrayItemContext = parentBindingContext.createChildContext(arrayValue, options.as, context => {\n context.$index = index\n })\n } else {\n arrayItemContext = parentBindingContext.extend({ [options.as]: arrayValue, $index: index })\n }\n } else {\n arrayItemContext = parentBindingContext.createChildContext(arrayValue, options.as, context => {\n context.$index = index\n })\n }\n\n const templateName = resolveTemplateName(template, arrayValue, arrayItemContext)\n return executeTemplate(\n targetNode,\n 'ignoreTargetNode',\n templateName,\n arrayItemContext,\n options,\n afterBindingCallback\n )\n }\n\n // This will be called whenever setDomNodeChildrenFromArrayMapping has added nodes to targetNode\n const activateBindingsCallback = function (arrayValue, addedNodesArray /*, index */) {\n activateBindingsOnContinuousNodeArray(addedNodesArray, arrayItemContext, afterBindingCallback)\n if (options.afterRender) {\n options.afterRender(addedNodesArray, arrayValue)\n }\n\n // release the \"cache\" variable, so that it can be collected by\n // the GC when its value isn't used from within the bindings anymore.\n arrayItemContext = null\n }\n\n // Call setDomNodeChildrenFromArrayMapping, ignoring any observables unwrapped within (most likely from a callback function).\n // If the array items are observables, though, they will be unwrapped in executeTemplateForArrayItem and managed within setDomNodeChildrenFromArrayMapping.\n function localSetDomNodeChildrenFromArrayMapping(newArray, changeList?) {\n dependencyDetection.ignore(setDomNodeChildrenFromArrayMapping, null, [\n targetNode,\n newArray,\n executeTemplateForArrayItem,\n options,\n activateBindingsCallback,\n changeList\n ])\n bindingEvent.notify(targetNode, bindingEvent.childrenComplete)\n }\n\n const shouldHideDestroyed =\n options.includeDestroyed === false || (koOptions.foreachHidesDestroyed && !options.includeDestroyed)\n if (!shouldHideDestroyed && !options.beforeRemove && isObservableArray(arrayOrObservableArray)) {\n localSetDomNodeChildrenFromArrayMapping(arrayOrObservableArray.peek())\n const subscription = arrayOrObservableArray.subscribe(\n function (changeList) {\n localSetDomNodeChildrenFromArrayMapping(arrayOrObservableArray(), changeList)\n },\n null,\n 'arrayChange'\n )\n subscription.disposeWhenNodeIsRemoved(targetNode)\n return subscription\n } else {\n return computed(\n function () {\n let unwrappedArray = unwrap(arrayOrObservableArray) || []\n const unwrappedIsIterable = Symbol.iterator in unwrappedArray\n if (!unwrappedIsIterable) {\n unwrappedArray = [unwrappedArray]\n }\n if (shouldHideDestroyed) {\n // Filter out any entries marked as destroyed\n unwrappedArray = arrayFilter(unwrappedArray, function (item) {\n return item === undefined || item === null || !unwrap(item._destroy)\n })\n }\n localSetDomNodeChildrenFromArrayMapping(unwrappedArray)\n },\n null,\n { disposeWhenNodeIsRemoved: targetNode }\n )\n }\n}\n\nconst templateComputedDomDataKey = domData.nextKey()\n\nexport class TemplateBindingHandler extends AsyncBindingHandler {\n constructor(params) {\n super(params)\n const element = this.$element\n const bindingValue = unwrap(this.value)\n\n // Expose 'conditional' for `else` chaining.\n domData.set(element, 'conditional', { elseChainSatisfied: observable(true) })\n\n // Support anonymous templates\n if (typeof bindingValue === 'string' || bindingValue.name) {\n this.bindNamedTemplate()\n } else if ('nodes' in bindingValue) {\n this.bindNodeTemplate(bindingValue.nodes || [])\n } else {\n this.bindAnonymousTemplate()\n }\n }\n\n bindNamedTemplate() {\n // It's a named template - clear the element\n virtualElements.emptyNode(this.$element)\n }\n\n // We've been given an array of DOM nodes. Save them as the template source.\n // There is no known use case for the node array being an observable array (if the output\n // varies, put that behavior *into* your template - that's what templates are for), and\n // the implementation would be a mess, so assert that it's not observable.\n bindNodeTemplate(nodes) {\n if (isObservable(nodes)) {\n throw new Error('The \"nodes\" option must be a plain, non-observable array.')\n }\n\n // If the nodes are already attached to a KO-generated container, we reuse that container without moving the\n // elements to a new one (we check only the first node, as the nodes are always moved together)\n let container = nodes[0] && nodes[0].parentNode\n if (!container || !domData.get(container, cleanContainerDomDataKey)) {\n container = moveCleanedNodesToContainerElement(nodes)\n domData.set(container, cleanContainerDomDataKey, true)\n }\n\n new AnonymousTemplate(this.$element).nodes(container)\n }\n\n bindAnonymousTemplate() {\n // It's an anonymous template - store the element contents, then clear the element\n const templateNodes = virtualElements.childNodes(this.$element)\n if (templateNodes.length === 0) {\n throw new Error('Anonymous template defined, but no template content was provided.')\n }\n const container = moveCleanedNodesToContainerElement(templateNodes) // This also removes the nodes from their current parent\n new AnonymousTemplate(this.$element).nodes(container)\n }\n\n onValueChange() {\n const element = this.$element\n const bindingContext = this.$context\n const value = this.value\n let options = unwrap(value)\n let shouldDisplay = true\n let templateComputed: string | Computed<any> | null = null\n const elseChainSatisfied = domData.get(element, 'conditional').elseChainSatisfied\n let templateName\n\n if (typeof options === 'string') {\n templateName = value\n options = {}\n } else {\n templateName = options.name\n\n // Support \"if\"/\"ifnot\" conditions\n if ('if' in options) {\n shouldDisplay = unwrap(options.if)\n }\n\n if (shouldDisplay && 'ifnot' in options) {\n shouldDisplay = !unwrap(options.ifnot)\n }\n }\n\n if ('foreach' in options) {\n // Render once for each data point (treating data set as empty if shouldDisplay==false)\n const dataArray = (shouldDisplay && options.foreach) || []\n templateComputed = renderTemplateForEach(\n templateName || element,\n dataArray,\n options,\n element,\n bindingContext,\n this.completeBinding\n )\n\n elseChainSatisfied((unwrap(dataArray) || []).length !== 0)\n } else if (shouldDisplay) {\n // Render once for this single data point (or use the viewModel if no data was provided)\n const innerBindingContext =\n 'data' in options\n ? bindingContext.createStaticChildContext(options.data, options.as) // Given an explicit 'data' value, we create a child binding context for it\n : bindingContext // Given no explicit 'data' value, we retain the same binding context\n templateComputed = renderTemplate(\n templateName || element,\n innerBindingContext,\n options,\n element,\n undefined,\n this.completeBinding\n )\n elseChainSatisfied(true)\n } else {\n virtualElements.emptyNode(element)\n elseChainSatisfied(false)\n }\n\n // It only makes sense to have a single template computed per element (otherwise which one should have its output displayed?)\n this.disposeOldComputedAndStoreNewOne(element, templateComputed)\n }\n\n disposeOldComputedAndStoreNewOne(element, newComputed) {\n const oldComputed = domData.get(element, templateComputedDomDataKey)\n if (oldComputed && typeof oldComputed.dispose === 'function') {\n oldComputed.dispose()\n }\n domData.set(\n element,\n templateComputedDomDataKey,\n newComputed && (!newComputed.isActive || newComputed.isActive()) ? newComputed : undefined\n )\n }\n\n override get controlsDescendants() {\n return true\n }\n static override get allowVirtualElements() {\n return true\n }\n}\n", "import { makeArray, parseHtmlFragment } from '@tko/utils'\nimport { templateEngine, type TemplateOptions } from './templateEngine'\nimport { setTemplateEngine } from './templating'\nimport type { TemplateSource } from './templateSources'\nimport type { BindingContext } from '@tko/bind'\n\nexport function nativeTemplateEngine() {}\n\nnativeTemplateEngine.prototype = new templateEngine()\nnativeTemplateEngine.prototype.constructor = nativeTemplateEngine\nnativeTemplateEngine.prototype.renderTemplateSource = function (\n templateSource: TemplateSource,\n bindingContext: BindingContext<any>,\n options: TemplateOptions<any>,\n templateDocument?: Document\n): Node[] {\n const templateNodes = templateSource.nodes ? templateSource.nodes() : null\n\n if (templateNodes) {\n return makeArray(templateNodes.cloneNode(true).childNodes)\n } else {\n const templateText = templateSource.text()\n return parseHtmlFragment(templateText, templateDocument)\n }\n}\n\nnativeTemplateEngine.instance = new nativeTemplateEngine()\nsetTemplateEngine(nativeTemplateEngine.instance)\n", "import { unwrap, peek } from '@tko/observable'\n\nimport { nativeTemplateEngine } from './nativeTemplateEngine'\n\nimport { TemplateBindingHandler } from './templating'\n\n// \"foreach: someExpression\" is equivalent to \"template: { foreach: someExpression }\"\n// \"foreach: { data: someExpression, afterAdd: myfn }\" is equivalent to \"template: { foreach: someExpression, afterAdd: myfn }\"\nexport class TemplateForEachBindingHandler extends TemplateBindingHandler {\n override get value() {\n const modelValue = this.valueAccessor()\n const unwrappedValue = peek(modelValue) // Unwrap without setting a dependency here\n\n // If unwrappedValue is the array, pass in the wrapped value on its own\n // The value will be unwrapped and tracked within the template binding\n // (See https://github.com/SteveSanderson/knockout/issues/523)\n if (!unwrappedValue || typeof unwrappedValue.length === 'number') {\n return { foreach: modelValue, templateEngine: nativeTemplateEngine.instance }\n }\n\n // If unwrappedValue.data is the array, preserve all relevant options and unwrap again value so we get updates\n unwrap(modelValue)\n return {\n foreach: unwrappedValue.data,\n as: unwrappedValue.as,\n includeDestroyed: unwrappedValue.includeDestroyed,\n afterAdd: unwrappedValue.afterAdd,\n beforeRemove: unwrappedValue.beforeRemove,\n afterRender: unwrappedValue.afterRender,\n beforeMove: unwrappedValue.beforeMove,\n afterMove: unwrappedValue.afterMove,\n templateEngine: nativeTemplateEngine.instance\n }\n }\n}\n", "import { TemplateForEachBindingHandler } from './foreach'\n\nimport { TemplateBindingHandler } from './templating'\n// 'let': letBinding,\n// template: template,\n\nexport const bindings = { foreach: TemplateForEachBindingHandler, template: TemplateBindingHandler }\n\nexport * from './nativeTemplateEngine'\nexport * from './templateEngine'\nexport * from './templating'\nexport * from './templateSources'\n", "/**\n * A class to create the global knockout instance (ko).\n */\n\nimport {\n addDisposeCallback,\n addOrRemoveItem,\n arrayFilter,\n arrayFirst,\n arrayForEach,\n arrayGetDistinctValues,\n arrayIndexOf,\n arrayMap,\n arrayPushAll,\n arrayRemoveItem,\n addCleaner,\n cleanNode,\n cloneNodes,\n compareArrays,\n createSymbolOrString,\n domData,\n extend,\n memoization,\n objectForEach,\n objectMap,\n options,\n parseHtmlFragment,\n parseJson,\n range,\n registerEventHandler,\n removeCleaner,\n removeDisposeCallback,\n removeNode,\n selectExtensions,\n setHtml,\n setTextContent,\n tasks,\n toggleDomNodeCssClass,\n triggerEvent,\n virtualElements\n} from '@tko/utils'\n\nimport { parseObjectLiteral } from '@tko/utils.parser'\n\nimport { LifeCycle } from '@tko/lifecycle'\n\nimport {\n // applyExtenders,\n // arrayChangeEventName,\n // deferUpdates,\n dependencyDetection,\n extenders as defaultExtenders,\n isObservable,\n isSubscribable,\n isWriteableObservable,\n observable,\n observableArray,\n isObservableArray,\n peek,\n subscribable,\n toJS,\n toJSON,\n unwrap\n} from '@tko/observable'\n\nimport { computed, isComputed, isPureComputed, proxy, pureComputed, when } from '@tko/computed'\n\nimport {\n applyBindingAccessorsToNode,\n applyBindings,\n applyBindingsToDescendants,\n applyBindingsToNode,\n contextFor,\n dataFor,\n bindingEvent,\n BindingHandler,\n AsyncBindingHandler,\n setDomNodeChildrenFromArrayMapping\n} from '@tko/bind'\n\nimport {\n anonymousTemplate,\n domElement,\n nativeTemplateEngine,\n renderTemplate,\n setTemplateEngine,\n templateEngine\n // templateSources\n} from '@tko/binding.template'\n\nimport type { BindingHandlerObject } from '@tko/provider'\n\nconst domNodeDisposal = {\n addDisposeCallback,\n removeDisposeCallback,\n removeNode,\n addCleaner,\n removeCleaner,\n get cleanExternalData() {\n return options.cleanExternalData\n },\n set cleanExternalData(cleanerFn) {\n options.set('cleanExternalData', cleanerFn)\n }\n}\n\nexport type Utils = {\n addOrRemoveItem: typeof addOrRemoveItem\n arrayFilter: typeof arrayFilter\n arrayFirst: typeof arrayFirst\n arrayForEach: typeof arrayForEach\n arrayGetDistinctValues: typeof arrayGetDistinctValues\n arrayIndexOf: typeof arrayIndexOf\n arrayMap: typeof arrayMap\n arrayPushAll: typeof arrayPushAll\n arrayRemoveItem: typeof arrayRemoveItem\n cloneNodes: typeof cloneNodes\n compareArrays: typeof compareArrays\n createSymbolOrString: typeof createSymbolOrString\n domData: typeof domData\n domNodeDisposal: typeof domNodeDisposal\n extend: typeof extend\n filters: typeof options.filters\n objectForEach: typeof objectForEach\n objectMap: typeof objectMap\n parseHtmlFragment: typeof parseHtmlFragment\n parseJson: typeof parseJson\n parseObjectLiteral: typeof parseObjectLiteral\n peekObservable: typeof peek\n range: typeof range\n registerEventHandler: typeof registerEventHandler\n setDomNodeChildrenFromArrayMapping: typeof setDomNodeChildrenFromArrayMapping\n setHtml: typeof setHtml\n setTextContent: typeof setTextContent\n toggleDomNodeCssClass: typeof toggleDomNodeCssClass\n triggerEvent: typeof triggerEvent\n unwrapObservable: typeof unwrap\n}\n\nconst utils: Utils = {\n addOrRemoveItem,\n arrayFilter,\n arrayFirst,\n arrayForEach,\n arrayGetDistinctValues,\n arrayIndexOf,\n arrayMap,\n arrayPushAll,\n arrayRemoveItem,\n cloneNodes,\n compareArrays,\n createSymbolOrString,\n domData,\n domNodeDisposal,\n extend,\n filters: options.filters,\n objectForEach,\n objectMap,\n parseHtmlFragment,\n parseJson,\n parseObjectLiteral,\n peekObservable: peek,\n range,\n registerEventHandler,\n setDomNodeChildrenFromArrayMapping,\n setHtml,\n setTextContent,\n toggleDomNodeCssClass,\n triggerEvent,\n unwrapObservable: unwrap\n}\n\nexport type KnockoutInstance = {\n // --- Utilities ---\n cleanNode: typeof cleanNode\n dependencyDetection: typeof dependencyDetection\n computedContext: typeof dependencyDetection\n filters: typeof options.filters\n ignoreDependencies: typeof dependencyDetection.ignore\n memoization: typeof memoization\n options: typeof options\n removeNode: typeof removeNode\n selectExtensions: typeof selectExtensions\n tasks: typeof tasks\n utils: typeof utils\n LifeCycle: typeof LifeCycle\n\n // -- Observable ---\n isObservable: typeof isObservable\n isSubscribable: typeof isSubscribable\n isWriteableObservable: typeof isWriteableObservable\n isWritableObservable: typeof isWriteableObservable\n observable: typeof observable\n observableArray: typeof observableArray\n isObservableArray: typeof isObservableArray\n peek: typeof peek\n subscribable: typeof subscribable\n unwrap: typeof unwrap\n toJS: typeof toJS\n toJSON: typeof toJSON\n proxy: typeof proxy\n\n // ... Computed ...\n computed: typeof computed\n dependentObservable: typeof computed\n isComputed: typeof isComputed\n isPureComputed: typeof isPureComputed\n pureComputed: typeof pureComputed\n when: typeof when\n\n // --- Templates ---\n nativeTemplateEngine: typeof nativeTemplateEngine\n renderTemplate: typeof renderTemplate\n setTemplateEngine: typeof setTemplateEngine\n templateEngine: typeof templateEngine\n templateSources: { domElement: typeof domElement; anonymousTemplate: typeof anonymousTemplate }\n\n // --- Binding ---\n applyBindingAccessorsToNode: typeof applyBindingAccessorsToNode\n applyBindings: typeof applyBindings\n applyBindingsToDescendants: typeof applyBindingsToDescendants\n applyBindingsToNode: typeof applyBindingsToNode\n contextFor: typeof contextFor\n dataFor: typeof dataFor\n BindingHandler: typeof BindingHandler\n AsyncBindingHandler: typeof AsyncBindingHandler\n virtualElements: typeof virtualElements\n domNodeDisposal: typeof domNodeDisposal\n bindingEvent: typeof bindingEvent\n}\n\nconst knockout: KnockoutInstance = {\n // --- Utilities ---\n cleanNode,\n dependencyDetection,\n computedContext: dependencyDetection,\n filters: options.filters,\n ignoreDependencies: dependencyDetection.ignore,\n memoization,\n options,\n removeNode,\n selectExtensions,\n tasks,\n utils,\n LifeCycle,\n\n // -- Observable ---\n isObservable,\n isSubscribable,\n isWriteableObservable,\n isWritableObservable: isWriteableObservable,\n observable,\n observableArray,\n isObservableArray,\n peek,\n subscribable,\n unwrap,\n toJS,\n toJSON,\n proxy,\n\n // ... Computed ...\n computed,\n dependentObservable: computed,\n isComputed,\n isPureComputed,\n pureComputed,\n when: when,\n\n // --- Templates ---\n nativeTemplateEngine,\n renderTemplate,\n setTemplateEngine,\n templateEngine,\n templateSources: { domElement, anonymousTemplate },\n\n // --- Binding ---\n applyBindingAccessorsToNode,\n applyBindings,\n applyBindingsToDescendants,\n applyBindingsToNode,\n contextFor,\n dataFor,\n BindingHandler,\n AsyncBindingHandler,\n virtualElements,\n domNodeDisposal,\n bindingEvent\n}\n\nexport class Builder {\n providedProperties: { extenders: any; bindingHandlers: BindingHandlerObject; bindingProvider: any }\n\n constructor({ provider, bindings, extenders, filters, options }) {\n Object.assign(knockout.options, options, { filters, bindingProviderInstance: provider })\n\n provider.setGlobals(knockout.options.bindingGlobals)\n\n if (Array.isArray(bindings)) {\n for (const bindingsObject of bindings) {\n provider.bindingHandlers.set(bindingsObject)\n }\n } else {\n provider.bindingHandlers.set(bindings)\n }\n\n this.providedProperties = {\n extenders: Object.assign(defaultExtenders, extenders),\n bindingHandlers: provider.bindingHandlers,\n bindingProvider: provider\n }\n }\n\n /**\n * @return {KnockoutInstance} An instance of Knockout.\n */\n create(...additionalProperties): KnockoutInstance {\n const instance: KnockoutInstance = Object.assign(\n {\n get getBindingHandler() {\n return options.getBindingHandler\n },\n set getBindingHandler(fn) {\n options.set('getBindingHandler', fn)\n }\n },\n knockout, //never change the order of these\n this.providedProperties,\n ...additionalProperties\n )\n\n instance.options.knockoutInstance = instance\n\n return instance\n }\n}\n", "import { options } from '@tko/utils'\n\nexport default class BindingHandlerObject {\n set(nameOrObject: string | object, value?: string | object) {\n if (typeof nameOrObject === 'string') {\n this[nameOrObject] = value\n } else if (typeof nameOrObject === 'object') {\n if (value !== undefined) {\n options.onError(\n new Error(\n 'Given extraneous `value` parameter (first param should be a string, but it was an object).' + nameOrObject\n )\n )\n }\n Object.assign(this, nameOrObject)\n } else {\n options.onError(new Error('Given a bad binding handler type: ' + nameOrObject))\n }\n }\n\n /**\n * The handler may have a `.` in it, e.g. `attr.title`, in which case the\n * handler is `attr`. Otherwise it's the name given\n */\n get(nameOrDotted) {\n const [name] = nameOrDotted.split('.')\n return this[name]\n }\n}\n", "import { objectMap } from '@tko/utils'\n\nimport { dependencyDetection } from '@tko/observable'\n\nimport BindingHandlerObject from './BindingHandlerObject'\n\nimport type { BindingContext } from '@tko/bind'\n\nexport interface ProviderParamsInput {\n bindingHandlers?: BindingHandlerObject\n globals?: any\n attributesToSkip?: any\n attributesBindingMap?: any\n providers?: any[]\n}\n\nexport type BindingAccessors = { [name: string]: Function }\n\nexport default class Provider {\n constructor(params?: ProviderParamsInput | null) {\n if (this.constructor === Provider) {\n throw new Error('Provider is an abstract base class.')\n }\n if (!('FOR_NODE_TYPES' in this)) {\n // FOR_NODE_TYPES must return a list of integers corresponding to the\n // node.nodeType's that the provider handles.\n throw new Error('Providers must have FOR_NODE_TYPES property')\n }\n this.bindingHandlers = params?.bindingHandlers || new BindingHandlerObject()\n this.globals = params?.globals || {}\n }\n\n get FOR_NODE_TYPES(): number[] {\n throw new Error('Providers must override FOR_NODE_TYPES property')\n }\n\n setGlobals(globals) {\n this.globals = globals\n }\n get preemptive() {\n return false\n }\n nodeHasBindings(node: Node, context?: BindingContext): boolean {\n return false\n }\n getBindingAccessors(node: Node, context?: BindingContext): BindingAccessors {\n return Object.create(null)\n }\n\n /**\n * Preprocess a given node.\n * @param {Node} node\n * @returns {[Node]|null}\n */\n preprocessNode(node: Node): Node[] | null {\n return [node]\n }\n postProcess(/* node */) {}\n\n bindingHandlers: BindingHandlerObject\n globals: any | undefined\n _overloadInstance: any | undefined\n\n /** For legacy binding provider assignments to\n * ko.bindingProvider.instance = ... */\n get instance() {\n return this._overloadInstance || this\n }\n set instance(provider) {\n if (!provider || provider === this) {\n this._overloadInstance = undefined\n } else {\n this._overloadInstance = new LegacyProvider(provider, this)\n }\n }\n\n // Given a function that returns bindings, create and return a new object that contains\n // binding value-accessors functions. Each accessor function calls the original function\n // so that it always gets the latest value and all dependencies are captured. This is used\n // by ko.applyBindingsToNode and getBindingsAndMakeAccessors.\n makeAccessorsFromFunction(callback) {\n return objectMap(dependencyDetection.ignore(callback), (value, key) => () => callback()[key])\n }\n\n // Returns the valueAccessor function for a binding value\n makeValueAccessor(value): Function {\n return () => value\n }\n\n // Given a bindings function or object, create and return a new object that contains\n // binding value-accessors functions. This is used by ko.applyBindingsToNode.\n makeBindingAccessors(bindings, context, node) {\n if (typeof bindings === 'function') {\n return this.makeAccessorsFromFunction(bindings.bind(null, context, node))\n } else {\n return objectMap(bindings, this.makeValueAccessor)\n }\n }\n}\n\n/**\n * LegacyProvider class is created when ko.bindingProvider.instance assigned to\n * an object that were once used for binding pre-4.0 binding providers e.g.\n * { getBindings: function () { ... },\n * nodeHasBindings: function () { ... }\n * preprocessNode: function () { ... }\n * }\n */\nclass LegacyProvider extends Provider {\n override get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE, Node.TEXT_NODE, Node.COMMENT_NODE]\n }\n\n providerObject: any\n\n constructor(providerObject, parentProvider) {\n super()\n Object.assign(this, { providerObject })\n this.bindingHandlers = providerObject.bindingHandlers || parentProvider.bindingHandlers\n }\n\n // This function is used if the binding provider doesn't include a getBindingAccessors function.\n // It must be called with 'this' set to the provider instance.\n getBindingsAndMakeAccessors(node, context) {\n const bindingsFn = this.providerObject.getBindings.bind(this.providerObject, node, context)\n return this.makeAccessorsFromFunction(bindingsFn)\n }\n\n override getBindingAccessors(node, context) {\n return this.providerObject.getBindingAccessors\n ? this.providerObject.getBindingAccessors(node, context)\n : this.getBindingsAndMakeAccessors(node, context)\n }\n\n override nodeHasBindings(node: Node): boolean {\n return this.providerObject.nodeHasBindings(node)\n }\n\n override preprocessNode(node: Node): Node[] | null {\n if (this.providerObject.preprocessNode) {\n return this.providerObject.preprocessNode(node)\n }\n return null\n }\n}\n", "import { Parser, parseObjectLiteral } from '@tko/utils.parser'\n\nimport { Provider } from '@tko/provider'\n\n/**\n * BindingStringProvider is an abstract base class parses a binding string.\n *\n * Children must implement `nodeHasBindings` and `getBindingString`.\n */\nexport default class BindingStringProvider extends Provider {\n /** Call bindingHandler.preprocess on each respective binding string.\n *\n * The `preprocess` property of bindingHandler must be a static\n * function (i.e. on the object or constructor).\n */\n *processBinding(key: string, value) {\n // Get the \"on\" binding from \"on.click\"\n const [handlerName, property] = key.split('.')\n const handler = this.bindingHandlers.get(handlerName)\n\n if (handler && handler.preprocess) {\n const bindingsAddedByHandler = new Array()\n const chainFn = (...args) => bindingsAddedByHandler.push(args)\n value = handler.preprocess(value, key, chainFn)\n for (const [key, value] of bindingsAddedByHandler) {\n yield* this.processBinding(key, value)\n }\n } else if (property) {\n value = `{${property}:${value}}`\n }\n\n yield `'${handlerName}':${value}`\n }\n\n *generateBindingString(bindingStringOrObjects) {\n const bindingObjectsArray =\n typeof bindingStringOrObjects === 'string' ? parseObjectLiteral(bindingStringOrObjects) : bindingStringOrObjects\n for (const { key, unknown, value } of bindingObjectsArray) {\n yield* this.processBinding(key || unknown, value)\n }\n }\n\n preProcessBindings(bindingStringOrObjects) {\n return Array.from(this.generateBindingString(bindingStringOrObjects)).join(',')\n }\n\n override getBindingAccessors(node: Node, context) {\n const bindingString = node && this.getBindingString(node)\n if (!bindingString) {\n return\n }\n const processed = this.preProcessBindings(bindingString)\n return new Parser().parse(processed, context, this.globals, node)\n }\n\n getBindingString(node: Node): string | null {\n throw new Error('Overload getBindingString.')\n }\n}\n", "import { virtualElements } from '@tko/utils'\n\nimport { BindingStringProvider } from '@tko/provider.bindingstring'\n\nimport type { BindingContext } from '@tko/bind'\n\nexport default class VirtualProvider extends BindingStringProvider {\n override get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE, Node.COMMENT_NODE]\n }\n\n /**\n * Convert <ko binding='...'> into <!-- ko binding: ... -->\n * @param {Node} node\n */\n override preprocessNode(node: Node): Node[] | null {\n if (node instanceof Element && node.tagName === 'KO') {\n const parent = node.parentNode\n const childNodes = [...node.childNodes]\n const virtualBindingString = [...this.genElementBindingStrings(node)].join(',')\n const openNode = document.createComment('ko ' + virtualBindingString)\n const closeNode = document.createComment('/ko')\n parent?.insertBefore(openNode, node)\n for (const child of childNodes) {\n parent?.insertBefore(child, node)\n }\n parent?.insertBefore(closeNode, node)\n node.remove()\n return [openNode, ...childNodes, closeNode]\n }\n return null\n }\n\n *genElementBindingStrings(node: Element) {\n for (const { name, value } of node.attributes) {\n yield `${name.replace(/^ko-/, '')}: ${value}`\n }\n }\n\n override getBindingString(node: Node): string | null {\n if (node.nodeType === Node.COMMENT_NODE) {\n return virtualElements.virtualNodeBindingValue(node)\n }\n return null\n }\n\n override nodeHasBindings(node: Node, context?: BindingContext): boolean {\n if (node.nodeType === Node.COMMENT_NODE) {\n return virtualElements.isStartComment(node)\n }\n return false\n }\n}\n", "import { BindingStringProvider } from '@tko/provider.bindingstring'\n\nimport type { BindingContext } from '@tko/bind'\n\nexport default class DataBindProvider extends BindingStringProvider {\n override get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE]\n }\n\n get BIND_ATTRIBUTE() {\n return 'data-bind'\n }\n\n override getBindingString(node: Node): string | null {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return (node as Element).getAttribute(this.BIND_ATTRIBUTE)\n }\n return null\n }\n\n override nodeHasBindings(node: HTMLElement, context?: BindingContext): boolean {\n if (node.nodeType === Node.ELEMENT_NODE) {\n return node.hasAttribute(this.BIND_ATTRIBUTE)\n }\n return false\n }\n}\n", "import { subscribable, dependencyDetection } from '@tko/observable'\nimport { getObjectOwnProperty, tasks } from '@tko/utils'\nimport type { Loader } from './loaders'\n\nconst loadingSubscribablesCache = {}, // Tracks component loads that are currently in flight\n loadedDefinitionsCache = {} // Tracks component loads that have already completed\n\nfunction loadComponentAndNotify(componentName: string, callback: any): void {\n let _subscribable = getObjectOwnProperty(loadingSubscribablesCache, componentName),\n completedAsync\n if (!_subscribable) {\n // It's not started loading yet. Start loading, and when it's done, move it to loadedDefinitionsCache.\n _subscribable = loadingSubscribablesCache[componentName] = new subscribable()\n _subscribable.subscribe(callback)\n\n beginLoadingComponent(componentName, function (definition, config) {\n const isSynchronousComponent = !!(config && config.synchronous)\n loadedDefinitionsCache[componentName] = { definition: definition, isSynchronousComponent: isSynchronousComponent }\n delete loadingSubscribablesCache[componentName]\n\n // For API consistency, all loads complete asynchronously. However we want to avoid\n // adding an extra task schedule if it's unnecessary (i.e., the completion is already\n // async).\n //\n // You can bypass the 'always asynchronous' feature by putting the synchronous:true\n // flag on your component configuration when you register it.\n if (completedAsync || isSynchronousComponent) {\n // Note that notifySubscribers ignores any dependencies read within the callback.\n // See comment in loaderRegistryBehaviors.js for reasoning\n _subscribable.notifySubscribers(definition)\n } else {\n tasks.schedule(function () {\n _subscribable.notifySubscribers(definition)\n })\n }\n })\n completedAsync = true\n } else {\n _subscribable.subscribe(callback)\n }\n}\n\nfunction beginLoadingComponent(componentName, callback) {\n getFirstResultFromLoaders('getConfig', [componentName], function (config) {\n if (config) {\n // We have a config, so now load its definition\n getFirstResultFromLoaders('loadComponent', [componentName, config], function (definition) {\n callback(definition, config)\n })\n } else {\n // The component has no config - it's unknown to all the loaders.\n // Note that this is not an error (e.g., a module loading error) - that would abort the\n // process and this callback would not run. For this callback to run, all loaders must\n // have confirmed they don't know about this component.\n callback(null, null)\n }\n })\n}\n\nfunction getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders?) {\n // On the first call in the stack, start with the full set of loaders\n if (!candidateLoaders) {\n candidateLoaders = registry.loaders.slice(0) // Use a copy, because we'll be mutating this array\n }\n\n // Try the next candidate\n const currentCandidateLoader = candidateLoaders.shift()\n if (currentCandidateLoader) {\n const methodInstance = currentCandidateLoader[methodName]\n if (methodInstance) {\n let wasAborted = false,\n synchronousReturnValue = methodInstance.apply(\n currentCandidateLoader,\n argsExceptCallback.concat(function (result) {\n if (wasAborted) {\n callback(null)\n } else if (result !== null) {\n // This candidate returned a value. Use it.\n callback(result)\n } else {\n // Try the next candidate\n getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders)\n }\n })\n )\n\n // Currently, loaders may not return anything synchronously. This leaves open the possibility\n // that we'll extend the API to support synchronous return values in the future. It won't be\n // a breaking change, because currently no loader is allowed to return anything except undefined.\n if (synchronousReturnValue !== undefined) {\n wasAborted = true\n\n // Method to suppress exceptions will remain undocumented. This is only to keep\n // KO's specs running tidily, since we can observe the loading got aborted without\n // having exceptions cluttering up the console too.\n if (!currentCandidateLoader.suppressLoaderExceptions) {\n throw new Error(\n 'Component loaders must supply values by invoking the callback, not by returning values synchronously.'\n )\n }\n }\n } else {\n // This candidate doesn't have the relevant handler. Synchronously move on to the next one.\n getFirstResultFromLoaders(methodName, argsExceptCallback, callback, candidateLoaders)\n }\n } else {\n // No candidates returned a value\n callback(null)\n }\n}\n\nexport const registry = {\n get(componentName: string, callback: any) {\n const cachedDefinition = getObjectOwnProperty(loadedDefinitionsCache, componentName)\n if (cachedDefinition) {\n // It's already loaded and cached. Reuse the same definition object.\n // Note that for API consistency, even cache hits complete asynchronously by default.\n // You can bypass this by putting synchronous:true on your component config.\n if (cachedDefinition.isSynchronousComponent) {\n dependencyDetection.ignore(function () {\n // See comment in loaderRegistryBehaviors.js for reasoning\n callback(cachedDefinition.definition)\n })\n } else {\n tasks.schedule(function () {\n callback(cachedDefinition.definition)\n })\n }\n } else {\n // Join the loading process that is already underway, or start a new one.\n loadComponentAndNotify(componentName, callback)\n }\n },\n\n clearCachedDefinition(componentName: string) {\n delete loadedDefinitionsCache[componentName]\n },\n\n _getFirstResultFromLoaders: getFirstResultFromLoaders,\n\n loaders: new Array<Loader>()\n}\n", "import {\n isDomElement,\n isDocumentFragment,\n tagNameLower,\n parseHtmlFragment,\n makeArray,\n cloneNodes,\n hasOwnProperty\n} from '@tko/utils'\n\nimport { registry } from './registry'\n\n// The default loader is responsible for two things:\n// 1. Maintaining the default in-memory registry of component configuration objects\n// (i.e., the thing you're writing to when you call ko.components.register(someName, ...))\n// 2. Answering requests for components by fetching configuration objects\n// from that default in-memory registry and resolving them into standard\n// component definition objects (of the form { createViewModel: ..., template: ... })\n// Custom loaders may override either of these facilities, i.e.,\n// 1. To supply configuration objects from some other source (e.g., conventions)\n// 2. Or, to resolve configuration objects by loading viewmodels/templates via arbitrary logic.\n\nexport const defaultConfigRegistry: Record<string, Config> = {}\nexport const VIEW_MODEL_FACTORY = Symbol('Knockout View Model ViewModel factory')\n\nexport interface Component {\n template: Node[]\n createViewModel?: CreateViewModel\n}\nexport type CreateViewModel = (params: ViewModelParams, componentInfo: ComponentInfo) => ViewModel\n\nexport interface ViewModelParams {\n [name: string]: any\n}\n\nexport interface ComponentInfo {\n element: Node\n templateNodes: Node[]\n}\n\nexport interface ViewModel {\n dispose?: () => void\n koDescendantsComplete?: (node: Node) => void\n}\n\nexport interface Config {\n require?: string\n viewModel?: RequireConfig | ViewModelConfig | any\n template?: RequireConfig | TemplateConfig | any\n synchronous?: boolean\n ignoreCustomElementWarning?: boolean\n}\n\nexport interface ViewModelConstructor {\n new (params?: ViewModelParams): ViewModel\n}\n\nexport interface ViewModelStatic {\n instance: any\n}\nexport interface ViewModelFactory {\n createViewModel: CreateViewModel\n}\nexport interface TemplateElement {\n element: string | Node\n}\n\nexport type ViewModelConfig = ViewModelConstructor | ViewModelStatic | ViewModelFactory\nexport type TemplateConfig = string | Node[] | DocumentFragment | TemplateElement\n\nexport interface RequireConfig {\n require: string\n}\n\nexport function register(componentName: string, config: Config) {\n if (!config) {\n throw new Error('Invalid configuration for ' + componentName)\n }\n\n if (isRegistered(componentName)) {\n throw new Error('Component ' + componentName + ' is already registered')\n }\n\n const ceok = componentName.includes('-') && componentName.toLowerCase() === componentName\n\n if (!config.ignoreCustomElementWarning && !ceok) {\n console.log(`\n\uD83E\uDD4A Knockout warning: components for custom elements must be lowercase and contain a dash. To ignore this warning, add to the 'config' of .register(componentName, config):\n\n ignoreCustomElementWarning: true\n `)\n }\n\n defaultConfigRegistry[componentName] = config\n}\n\nexport function isRegistered(componentName: string): boolean {\n return hasOwnProperty(defaultConfigRegistry, componentName)\n}\n\nexport function unregister(componentName: string): void {\n delete defaultConfigRegistry[componentName]\n registry.clearCachedDefinition(componentName)\n}\n\nexport interface Loader {\n getConfig?(componentName: string, callback: (config: Config | null) => void): void\n loadComponent?(componentName: string, config: Config | object, callback: (component: Component | null) => void): void\n loadTemplate?(\n componentName: string,\n config: TemplateConfig | any,\n callback: (resolvedTemplate: Node[] | null) => void\n ): void\n loadViewModel?(\n componentName: string,\n config: ViewModelConfig | any,\n callback: (resolvedViewModel: CreateViewModel | null) => void\n ): void\n}\n\nexport const defaultLoader: Loader = {\n getConfig(componentName: string, callback: (config: Config | null) => void): void {\n const result = hasOwnProperty(defaultConfigRegistry, componentName) ? defaultConfigRegistry[componentName] : null\n callback(result)\n },\n\n loadComponent(componentName: string, config: Config, callback: (component: Component) => void): void {\n const errorCallback = makeErrorCallback(componentName)\n possiblyGetConfigFromAmd(errorCallback, config, function (loadedConfig) {\n resolveConfig(componentName, errorCallback, loadedConfig, callback)\n })\n },\n\n loadTemplate(\n componentName: string,\n templateConfig: TemplateConfig,\n callback: (resolvedTemplate: Node[]) => void\n ): void {\n resolveTemplate(makeErrorCallback(componentName), templateConfig, callback)\n },\n\n loadViewModel(\n componentName: string,\n viewModelConfig: ViewModelConfig,\n callback: (resolvedViewModel: CreateViewModel) => void\n ): void {\n resolveViewModel(makeErrorCallback(componentName), viewModelConfig, callback)\n }\n}\n\nconst createViewModelKey = 'createViewModel'\n\n// Takes a config object of the form { template: ..., viewModel: ... }, and asynchronously convert it\n// into the standard component definition format:\n// { template: <ArrayOfDomNodes>, createViewModel: function(params, componentInfo) { ... } }.\n// Since both template and viewModel may need to be resolved asynchronously, both tasks are performed\n// in parallel, and the results joined when both are ready. We don't depend on any promises infrastructure,\n// so this is implemented manually below.\nfunction resolveConfig(componentName, errorCallback, config, callback) {\n const result = {},\n tryIssueCallback = function () {\n if (--makeCallBackWhenZero === 0) {\n callback(result)\n }\n },\n templateConfig = config['template'],\n viewModelConfig = config['viewModel']\n\n let makeCallBackWhenZero = 2\n if (templateConfig) {\n possiblyGetConfigFromAmd(errorCallback, templateConfig, function (loadedConfig) {\n registry._getFirstResultFromLoaders('loadTemplate', [componentName, loadedConfig], function (resolvedTemplate) {\n result['template'] = resolvedTemplate\n tryIssueCallback()\n })\n })\n } else {\n tryIssueCallback()\n }\n\n if (viewModelConfig) {\n possiblyGetConfigFromAmd(errorCallback, viewModelConfig, function (loadedConfig) {\n registry._getFirstResultFromLoaders('loadViewModel', [componentName, loadedConfig], function (resolvedViewModel) {\n result[createViewModelKey] = resolvedViewModel\n tryIssueCallback()\n })\n })\n } else {\n tryIssueCallback()\n }\n}\n\nfunction resolveTemplate(errorCallback, templateConfig, callback) {\n if (typeof templateConfig === 'string') {\n // Markup - parse it\n callback(parseHtmlFragment(templateConfig))\n } else if (templateConfig instanceof Array) {\n // Assume already an array of DOM nodes - pass through unchanged\n callback(templateConfig)\n } else if (isDocumentFragment(templateConfig)) {\n // Document fragment - use its child nodes\n callback(makeArray(templateConfig.childNodes))\n } else if (templateConfig.element) {\n const element = templateConfig.element\n if (isDomElement(element)) {\n // Element instance - copy its child nodes\n callback(cloneNodesFromTemplateSourceElement(element))\n } else if (typeof element === 'string') {\n // Element ID - find it, then copy its child nodes\n const elemInstance = document.getElementById(element)\n if (elemInstance) {\n callback(cloneNodesFromTemplateSourceElement(elemInstance))\n } else {\n errorCallback('Cannot find element with ID ' + element)\n }\n } else {\n errorCallback('Unknown element type: ' + element)\n }\n } else if (templateConfig.elementName) {\n // JSX in the style of babel-plugin-transform-jsx\n callback(templateConfig)\n } else {\n errorCallback('Unknown template value: ' + templateConfig)\n }\n}\n\nfunction resolveViewModel(errorCallback, viewModelConfig, callback) {\n if (viewModelConfig[VIEW_MODEL_FACTORY]) {\n callback((...args) => viewModelConfig[VIEW_MODEL_FACTORY](...args))\n } else if (typeof viewModelConfig === 'function') {\n // Constructor - convert to standard factory function format\n // By design, this does *not* supply componentInfo to the constructor, as the intent is that\n // componentInfo contains non-viewmodel data (e.g., the component's element) that should only\n // be used in factory functions, not viewmodel constructors.\n callback(function (params /*, componentInfo */) {\n return new viewModelConfig(params)\n })\n } else if (typeof viewModelConfig[createViewModelKey] === 'function') {\n // Already a factory function - use it as-is\n callback(viewModelConfig[createViewModelKey])\n } else if ('instance' in viewModelConfig) {\n // Fixed object instance - promote to createViewModel format for API consistency\n const fixedInstance = viewModelConfig['instance']\n callback(function (/* params, componentInfo */) {\n return fixedInstance\n })\n } else if ('viewModel' in viewModelConfig) {\n // Resolved AMD module whose value is of the form { viewModel: ... }\n resolveViewModel(errorCallback, viewModelConfig['viewModel'], callback)\n } else {\n errorCallback('Unknown viewModel value: ' + viewModelConfig)\n }\n}\n\nfunction cloneNodesFromTemplateSourceElement(elemInstance) {\n switch (tagNameLower(elemInstance)) {\n case 'script':\n return parseHtmlFragment(elemInstance.text)\n case 'textarea':\n return parseHtmlFragment(elemInstance.value)\n case 'template':\n // For browsers with proper <template> element support (i.e., where the .content property\n // gives a document fragment), use that document fragment.\n if (isDocumentFragment(elemInstance.content)) {\n return cloneNodes(elemInstance.content.childNodes)\n }\n }\n\n // Regular elements such as <div>, and <template> elements on old browsers that don't really\n // understand <template> and just treat it as a regular container\n return cloneNodes(elemInstance.childNodes)\n}\n\nfunction possiblyGetConfigFromAmd(errorCallback, config, callback) {\n if (typeof config.require === 'string') {\n // The config is the value of an AMD module\n if (window.amdRequire || window.require) {\n ;(window.amdRequire || window.require)([config.require], callback)\n } else {\n errorCallback('Uses require, but no AMD loader is present')\n }\n } else {\n callback(config)\n }\n}\n\nfunction makeErrorCallback(componentName) {\n return function (message) {\n throw new Error(\"Component '\" + componentName + \"': \" + message)\n }\n}\n\n// By default, the default loader is the only registered component loader\nregistry.loaders.push(defaultLoader)\n", "/**\n * Component --- Abstract Base Class\n *\n * This simplifies and compartmentalizes Components. Use this:\n *\n * class CompX extends ComponentABC {\n * \tstatic get element () { return 'comp-x-id' }\n * \tstatic get sync () { return false }\n * \tstatic get elementName () { return 'comp-x' }\n * }\n * CompX.register()\n *\n * instead of:\n *\n * class CompX {}\n *\n * ko.components.register('comp-x', {\n * viewModel: CompX,\n * synchronous: false,\n * template: { element: 'comp-x' }\n * })\n *\n * As well, gain all the benefits of a LifeCycle, namely automated\n * event and subscription addition/removal.\n *\n * NOTE: A Component created this way can add events to the component node\n * with `this.addEventListener(type, action)`.\n */\nimport { LifeCycle } from '@tko/lifecycle'\nimport { register, VIEW_MODEL_FACTORY } from './loaders'\n\nexport class ComponentABC extends LifeCycle {\n /**\n * The tag name of the custom element. For example 'my-component'.\n * By default converts the class name from camel case to kebab case.\n * @return {string} The custom node name of this component.\n */\n static get customElementName() {\n return this.name.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\n }\n\n /**\n * Overload this to return:\n * 1. A string of markup\n * 2. An array of DOM nodes\n * 3. A document fragment\n * 4. An AMD module (with `{require: 'some/template'}`)\n * @return {mixed} One of the accepted template types for the ComponentBinding.\n */\n static get template(): any {\n if ('template' in this.prototype) {\n return undefined\n }\n return { element: this.element }\n }\n\n /**\n * This is called by the default `template`. Overload this to return:\n * 1. The element ID\n * 2. A DOM node itself\n * @return {string|HTMLElement} either the element ID or actual element.\n */\n static get element() {\n throw new Error('[ComponentABC] `element` must be overloaded.')\n }\n\n /**\n * @return {bool} True if the component shall load synchronously\n */\n static get sync() {\n return true\n }\n\n /**\n * Construct a new instance of the model. When using ComponentABC as a\n * base class, we do pass in the $element and $componentTemplateNodes.\n * @param {Object} params\n * @param {{element: HTMLElement, templateNodes: [HTMLElement]}} componentInfo\n */\n static [VIEW_MODEL_FACTORY](params: object, componentInfo: ComponentInfo): ComponentABC {\n return new (this as any)(params, componentInfo)\n }\n\n static register(name = this.customElementName) {\n // biome-ignore lint/complexity/noUselessThisAlias: viewModel captures the subclass for register()\n const viewModel = this\n const { template } = this\n const synchronous = this.sync\n register(name, { viewModel, template, synchronous })\n }\n}\ninterface ComponentInfo {\n element: HTMLElement\n templateNodes: HTMLElement[]\n}\n", "import { registry } from './registry'\n\nimport { ComponentABC } from './ComponentABC'\n\nimport { register, isRegistered, unregister, defaultLoader, defaultConfigRegistry } from './loaders'\n\nexport { ComponentABC }\n\nexport default {\n ComponentABC,\n // -- Registry --\n get: registry.get,\n clearCachedDefinition: registry.clearCachedDefinition,\n\n // -- Loader --\n register,\n isRegistered,\n unregister,\n defaultLoader,\n // \"Privately\" expose the underlying config registry for use in old-IE shim\n _allRegisteredComponents: defaultConfigRegistry,\n\n get loaders() {\n return registry.loaders\n },\n set loaders(loaders) {\n registry.loaders = loaders\n }\n}\n", "import { tagNameLower, objectMap } from '@tko/utils'\n\nimport registry from '@tko/utils.component'\n\nimport { unwrap, isWriteableObservable } from '@tko/observable'\n\nimport { computed } from '@tko/computed'\n\nimport { Provider } from '@tko/provider'\n\nimport { Parser } from '@tko/utils.parser'\n\nexport default class ComponentProvider extends Provider {\n override get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE]\n }\n\n /**\n * Convert <slot name='X'> to <!-- ko slot: 'X' --><!-- /ko -->\n * @param {Node} node\n */\n override preprocessNode(node: Node): Node[] | null {\n if (node instanceof Element && node.tagName === 'SLOT') {\n const parent = node.parentNode\n const slotName = node.getAttribute('name') || ''\n const openNode = document.createComment(`ko slot: \"${slotName}\"`)\n const closeNode = document.createComment('/ko')\n\n if (!parent) {\n throw Error('Missing parent node')\n }\n\n parent.insertBefore(openNode, node)\n parent.insertBefore(closeNode, node)\n parent.removeChild(node)\n\n return [openNode, closeNode]\n }\n return null\n }\n\n override nodeHasBindings(node: Node): boolean {\n return Boolean(this.getComponentNameForNode(node))\n }\n\n override getBindingAccessors(node: Node, context) {\n const componentName = this.getComponentNameForNode(node)\n if (!componentName) {\n return Object.create(null)\n }\n const component = () => ({ name: componentName, params: this.getComponentParams(node, context) })\n return { component }\n }\n\n getComponentNameForNode(node: Node): string | null {\n if (!(node instanceof Element) || node.nodeType !== Node.ELEMENT_NODE) {\n return null\n }\n const tagName = tagNameLower(node)\n if (registry.isRegistered(tagName)) {\n const hasDash = tagName.includes('-')\n const isUnknownEntity = '' + node === '[object HTMLUnknownElement]'\n if (hasDash || isUnknownEntity) {\n return tagName\n }\n }\n return null\n }\n\n getComponentParams(node: Node, context) {\n if (!(node instanceof Element)) {\n return { $raw: {} }\n }\n\n const parser = new (Parser as any)(node, context, this.globals) as Parser\n const paramsString = (node.getAttribute('params') || '').trim()\n const accessors = parser.parse(paramsString, context, undefined, node)\n if (!accessors || Object.keys(accessors).length === 0) {\n return { $raw: {} }\n }\n const $raw = objectMap(accessors, value => computed(value, null, { disposeWhenNodeIsRemoved: node }))\n const params = objectMap($raw, v => this.makeParamValue(node, v))\n return Object.assign({ $raw }, params)\n }\n\n makeParamValue(node: Element, paramValueComputed) {\n const paramValue = paramValueComputed.peek()\n // Does the evaluation of the parameter value unwrap any observables?\n if (!paramValueComputed.isActive()) {\n // No it doesn't, so there's no need for any computed wrapper. Just pass through the supplied value directly.\n // Example: \"someVal: firstName, age: 123\" (whether or not firstName is an observable/computed)\n return paramValue\n }\n // Yes it does. Supply a computed property that unwraps both the outer (binding expression)\n // level of observability, and any inner (resulting model value) level of observability.\n // This means the component doesn't have to worry about multiple unwrapping. If the value is a\n // writable observable, the computed will also be writable and pass the value on to the observable.\n const isWriteable = isWriteableObservable(paramValue)\n\n return computed({\n read: () => unwrap(paramValueComputed()),\n write: isWriteable ? v => paramValueComputed()(v) : undefined,\n disposeWhenNodeIsRemoved: node\n })\n }\n}\n", "import { Provider } from '@tko/provider'\n\n/**\n * Convert attributes with ko-* to bindings.\n *\n * e.g.\n * <div ko-visible='value'></div>\n */\nexport default class AttrProvider extends Provider {\n override get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE]\n }\n\n get PREFIX() {\n return 'ko-'\n }\n\n getBindingAttributesList(node: Node) {\n if (!(node instanceof Element)) {\n return []\n }\n\n if (!node.hasAttributes()) {\n return []\n }\n return Array.from(node.attributes).filter(attr => attr.name.startsWith(this.PREFIX))\n }\n\n override nodeHasBindings(node: Node) {\n return this.getBindingAttributesList(node).length > 0\n }\n\n override getBindingAccessors(node: Node, context) {\n return Object.assign({}, ...this.handlersFromAttributes(node, context))\n }\n\n *handlersFromAttributes(node: Node, context) {\n for (const attr of this.getBindingAttributesList(node)) {\n const name = attr.name.substring(this.PREFIX.length)\n yield { [name]: () => this.getValue(attr.value, context, node) }\n }\n }\n\n getValue(token, $context, node: Node) {\n /* FIXME: This duplicates Identifier.prototype.lookup_value; it should\n be refactored into e.g. a BindingContext method */\n if (!token) {\n return\n }\n const $data = $context.$data\n\n switch (token) {\n case '$element':\n return node\n case '$context':\n return $context\n case 'this':\n case '$data':\n return $context.$data\n }\n\n if ($data instanceof Object && token in $data) {\n return $data[token]\n }\n if (token in $context) {\n return $context[token]\n }\n if (token in this.globals) {\n return this.globals[token]\n }\n\n throw new Error(`The variable '${token}' not found.`)\n }\n}\n", "import { Provider } from '@tko/provider'\n\nimport type { ProviderParamsInput } from '@tko/provider'\n\nimport type { BindingContext } from '@tko/bind'\n\nexport default class MultiProvider extends Provider {\n nodeTypes: number[]\n nodeTypeMap: Record<string, any[]>\n providers: any[]\n\n override get FOR_NODE_TYPES() {\n return this.nodeTypes\n }\n\n constructor(params?: ProviderParamsInput | null) {\n super(params)\n const providers = params?.providers || []\n this.nodeTypeMap = {}\n this.nodeTypes = []\n this.providers = []\n providers.forEach(p => this.addProvider(p))\n }\n\n override setGlobals(globals) {\n ;[this, ...this.providers].forEach(p => (p.globals = globals))\n }\n\n addProvider(provider: Provider) {\n this.providers.push(provider)\n provider.bindingHandlers = this.bindingHandlers\n provider.globals = this.globals\n const nodeTypeMap = this.nodeTypeMap\n for (const nodeType of provider.FOR_NODE_TYPES) {\n if (!nodeTypeMap[nodeType]) {\n nodeTypeMap[nodeType] = new Array()\n }\n nodeTypeMap[nodeType].push(provider)\n }\n this.nodeTypes = Object.keys(this.nodeTypeMap).map(k => parseInt(k, 10))\n }\n\n providersFor(node: Node): any[] {\n return this.nodeTypeMap[node.nodeType] || []\n }\n\n override nodeHasBindings(node: Node, context?: BindingContext): boolean {\n return this.providersFor(node).some(p => p.nodeHasBindings(node))\n }\n\n override preprocessNode(node: Node): Node[] | null {\n for (const provider of this.providersFor(node)) {\n const newNodes = provider.preprocessNode(node)\n if (newNodes) {\n return newNodes\n }\n }\n return null\n }\n\n *enumerateProviderBindings(node: Node, context) {\n for (const provider of this.providersFor(node)) {\n const bindings = provider.getBindingAccessors(node, context)\n if (!bindings) {\n continue\n }\n yield* Object.entries(bindings || {})\n if (provider.preemptive) {\n return\n }\n }\n }\n\n override getBindingAccessors(node: Node, context?: BindingContext) {\n const bindings = {}\n for (const [key, accessor] of this.enumerateProviderBindings(node, context)) {\n if (key in bindings) {\n throw new Error(`The binding \"${key}\" is duplicated by multiple providers`)\n }\n bindings[key] = accessor\n }\n return bindings\n }\n}\n", "import { objectForEach } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport type { AllBindings } from '@tko/bind'\n\nexport const attr = {\n update: function (element, valueAccessor, _allBindings: AllBindings) {\n const value = unwrap(valueAccessor()) || {}\n objectForEach(value, function (attrName, attrValue) {\n attrValue = unwrap(attrValue)\n\n // Find the namespace of this attribute, if any.\n const prefixLen = attrName.indexOf(':')\n const namespace = prefixLen > 0 && element.lookupNamespaceURI(attrName.substr(0, prefixLen))\n\n // To cover cases like \"attr: { checked:someProp }\", we want to remove the attribute entirely\n // when someProp is a \"no value\"-like value (strictly null, false, or undefined)\n // (because the absence of the \"checked\" attr is how to mark an element as not checked, etc.)\n const toRemove = attrValue === false || attrValue === null || attrValue === undefined\n\n if (toRemove) {\n if (namespace) {\n element.removeAttributeNS(namespace, attrName)\n } else {\n element.removeAttribute(attrName)\n }\n } else {\n attrValue = attrValue.toString()\n if (namespace) {\n element.setAttributeNS(namespace, attrName, attrValue)\n } else {\n element.setAttribute(attrName, attrValue)\n }\n }\n\n // Deliberately being case-sensitive here because XHTML would regard \"Name\" as a different thing\n // entirely, and there's no strong reason to allow for such casing in HTML.\n if (attrName === 'name') {\n element.name = toRemove ? '' : attrValue\n }\n })\n }\n}\n", "import { registerEventHandler, arrayIndexOf, addOrRemoveItem } from '@tko/utils'\n\nimport { unwrap, dependencyDetection, isWriteableObservable } from '@tko/observable'\n\nimport { computed, pureComputed } from '@tko/computed'\n\nimport type { AllBindings } from '@tko/bind'\n\nexport const checked = {\n after: ['value', 'attr'],\n init: function (element, valueAccessor, allBindings: AllBindings) {\n const checkedValue = pureComputed(function () {\n // Treat \"value\" like \"checkedValue\" when it is included with \"checked\" binding\n if (allBindings.has('checkedValue')) {\n return unwrap(allBindings.get('checkedValue'))\n } else if (useElementValue) {\n if (allBindings.has('value')) {\n return unwrap(allBindings.get('value'))\n } else {\n return element.value\n }\n }\n })\n\n function updateModel() {\n // This updates the model value from the view value.\n // It runs in response to DOM events (click) and changes in checkedValue.\n let isChecked = element.checked,\n elemValue = checkedValue()\n\n // When we're first setting up this computed, don't change any model state.\n if (dependencyDetection.isInitial()) {\n return\n }\n\n // We can ignore unchecked radio buttons, because some other radio\n // button will be checked, and that one can take care of updating state.\n // button will be checked, and that one can take care of updating state\n if (!isChecked && (isRadio || dependencyDetection.getDependenciesCount())) {\n return\n }\n\n const modelValue = dependencyDetection.ignore(valueAccessor)\n if (valueIsArray) {\n const writableValue = rawValueIsNonArrayObservable ? modelValue.peek() : modelValue,\n saveOldValue = oldElemValue\n oldElemValue = elemValue\n\n if (saveOldValue !== elemValue) {\n // When we're responding to the checkedValue changing, and the element is\n // currently checked, replace the old elem value with the new elem value\n // in the model array.\n if (isChecked) {\n addOrRemoveItem(writableValue, elemValue, true)\n addOrRemoveItem(writableValue, saveOldValue, false)\n }\n\n oldElemValue = elemValue\n } else {\n // When we're responding to the user having checked/unchecked a checkbox,\n // add/remove the element value to the model array.\n addOrRemoveItem(writableValue, elemValue, isChecked)\n }\n if (rawValueIsNonArrayObservable && isWriteableObservable(modelValue)) {\n modelValue(writableValue)\n }\n } else {\n if (isCheckbox) {\n if (elemValue === undefined) {\n elemValue = isChecked\n } else if (!isChecked) {\n elemValue = undefined\n }\n }\n // valueAccessor(elemValue, {onlyIfChanged: true})\n const modelValue = valueAccessor(elemValue, { onlyIfChanged: true })\n if (isWriteableObservable(modelValue) && modelValue.peek() !== elemValue) {\n modelValue(elemValue)\n }\n }\n }\n\n function updateView() {\n // This updates the view value from the model value.\n // It runs in response to changes in the bound (checked) value.\n const modelValue = unwrap(valueAccessor())\n const elemValue = checkedValue()\n\n if (valueIsArray) {\n // When a checkbox is bound to an array, being checked represents its value being present in that array\n element.checked = arrayIndexOf(modelValue, elemValue) >= 0\n oldElemValue = elemValue\n } else if (isCheckbox && elemValue === undefined) {\n // When a checkbox is bound to any other value (not an array) and \"checkedValue\" is not defined,\n // being checked represents the value being trueish\n element.checked = !!modelValue\n } else {\n // Otherwise, being checked means that the checkbox or radio button's value corresponds to the model value\n element.checked = checkedValue() === modelValue\n }\n }\n\n const isCheckbox = element.type == 'checkbox',\n isRadio = element.type == 'radio'\n\n // Only bind to check boxes and radio buttons\n if (!isCheckbox && !isRadio) {\n return\n }\n\n let rawValue = valueAccessor(),\n valueIsArray = isCheckbox && unwrap(rawValue) instanceof Array,\n rawValueIsNonArrayObservable = !(valueIsArray && rawValue.push && rawValue.splice),\n useElementValue = isRadio || valueIsArray,\n oldElemValue = valueIsArray ? checkedValue() : undefined\n\n // Set up two computeds to update the binding:\n\n // The first responds to changes in the checkedValue value and to element clicks\n computed(updateModel, null, { disposeWhenNodeIsRemoved: element })\n registerEventHandler(element, 'click', updateModel)\n\n // The second responds to changes in the model value (the one associated with the checked binding)\n computed(updateView, null, { disposeWhenNodeIsRemoved: element })\n\n rawValue = undefined\n }\n}\n\nexport const checkedValue = {\n update: function (element, valueAccessor) {\n element.value = unwrap(valueAccessor())\n }\n}\n", "import {\n objectForEach,\n registerEventHandler,\n makeArray,\n throttle as throttleFn,\n debounce as debounceFn\n} from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport type { AllBindings, BindingContext } from '@tko/bind'\n\n// For certain common events (currently just 'click'), allow a simplified data-binding syntax\n// e.g. click:handler instead of the usual full-length event:{click:handler}\nexport function makeEventHandlerShortcut(eventName) {\n return {\n init: function (element, valueAccessor, allBindings: AllBindings, viewModel, bindingContext: BindingContext) {\n const newValueAccessor = function () {\n const result = {}\n result[eventName] = valueAccessor()\n return result\n }\n eventHandler.init.call(this, element, newValueAccessor, allBindings, viewModel, bindingContext)\n }\n }\n}\n\nfunction makeDescriptor(handlerOrObject) {\n return typeof handlerOrObject === 'function' ? { handler: handlerOrObject } : handlerOrObject || {}\n}\n\nexport const eventHandler = {\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext: BindingContext) {\n const eventsToHandle = valueAccessor() || {}\n objectForEach(eventsToHandle, function (eventName, descriptor) {\n const { passive, capture, once, debounce, throttle } = makeDescriptor(descriptor)\n const eventOptions = (capture || passive || once) && { capture, passive, once }\n\n let eventHandlerFn = (event, ...more) => {\n let handlerReturnValue\n const { handler, passive, bubble, preventDefault } = makeDescriptor(valueAccessor()[eventName])\n\n try {\n // Take all the event args, and prefix with the viewmodel\n if (handler) {\n const possiblyUpdatedViewModel = bindingContext.$data\n const argsForHandler = [possiblyUpdatedViewModel, event, ...more]\n handlerReturnValue = handler.apply(possiblyUpdatedViewModel, argsForHandler)\n }\n } finally {\n // preventDefault in the descriptor takes precedent over the handler return value\n if (preventDefault !== undefined) {\n if (unwrap(preventDefault)) {\n event.preventDefault()\n }\n } else if (handlerReturnValue !== true) {\n // Normally we want to prevent default action. Developer can override this by explicitly returning true\n // preventDefault will throw an error if the event is passive.\n if (!passive) {\n event.preventDefault()\n }\n }\n }\n\n const bubbleMark = allBindings.get(eventName + 'Bubble') !== false\n if (bubble === false || !bubbleMark) {\n event.cancelBubble = true\n if (event.stopPropagation) {\n event.stopPropagation()\n }\n }\n }\n\n if (debounce) {\n eventHandlerFn = debounceFn(eventHandlerFn, debounce)\n }\n if (throttle) {\n eventHandlerFn = throttleFn(eventHandlerFn, throttle)\n }\n\n registerEventHandler(element, eventName, eventHandlerFn, eventOptions || false)\n })\n }\n}\n\nexport const onHandler = {\n init: eventHandler.init,\n preprocess: function (value, key, addBinding) {\n addBinding(key.replace('on.', ''), '=>' + value)\n }\n}\n", "import { makeEventHandlerShortcut } from './event'\n\n// 'click' is just a shorthand for the usual full-length event:{click:handler}\nexport const click = makeEventHandlerShortcut('click')\n", "import { createSymbolOrString, toggleDomNodeCssClass, objectForEach, stringTrim } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nexport const css = {\n aliases: ['class'],\n update: function (element, valueAccessor) {\n let value = unwrap(valueAccessor())\n if (value !== null && typeof value === 'object') {\n objectForEach(value, function (className, shouldHaveClass) {\n shouldHaveClass = unwrap(shouldHaveClass)\n toggleDomNodeCssClass(element, className, shouldHaveClass)\n })\n } else {\n value = stringTrim(String(value || '')) // Make sure we don't try to store or set a non-string value\n toggleDomNodeCssClass(element, element[css.classesWrittenByBindingKey], false)\n element[css.classesWrittenByBindingKey] = value\n toggleDomNodeCssClass(element, value, true)\n }\n },\n classesWrittenByBindingKey: createSymbolOrString('__ko__cssValue')\n}\n", "/**\n * A simple callback binding.\n */\nimport { BindingHandler } from '@tko/bind'\n\nexport default class DescendantsCompleteHandler extends BindingHandler {\n onDescendantsComplete() {\n if (typeof this.value === 'function') {\n this.value(this.$element)\n }\n }\n\n static override get allowVirtualElements() {\n return true\n }\n}\n", "import { unwrap } from '@tko/observable'\n\nexport const enable = {\n update: function (element, valueAccessor) {\n const value = unwrap(valueAccessor())\n if (value && element.disabled) {\n element.removeAttribute('disabled')\n } else if (!value && !element.disabled) {\n element.disabled = true\n }\n }\n}\n\nexport const disable = {\n update: function (element, valueAccessor) {\n enable.update(element, function () {\n return !unwrap(valueAccessor())\n })\n }\n}\n", "import { createSymbolOrString, triggerEvent, registerEventHandler } from '@tko/utils'\n\nimport { unwrap, dependencyDetection, isWriteableObservable } from '@tko/observable'\n\nimport type { AllBindings } from '@tko/bind'\n\nconst hasfocusUpdatingProperty = createSymbolOrString('__ko_hasfocusUpdating')\nconst hasfocusLastValue = createSymbolOrString('__ko_hasfocusLastValue')\n\nexport const hasfocus = {\n init: function (element, valueAccessor, _allBindings: AllBindings) {\n const handleElementFocusChange = function (isFocused) {\n // Where possible, ignore which event was raised and determine focus state using activeElement,\n // as this avoids phantom focus/blur events raised when changing tabs in modern browsers.\n // However, not all KO-targeted browsers (Firefox 2) support activeElement. For those browsers,\n // prevent a loss of focus when changing tabs/windows by setting a flag that prevents hasfocus\n // from calling 'blur()' on the element when it loses focus.\n // Discussion at https://github.com/SteveSanderson/knockout/pull/352\n element[hasfocusUpdatingProperty] = true\n const ownerDoc = element.ownerDocument\n if ('activeElement' in ownerDoc) {\n let active\n try {\n active = ownerDoc.activeElement\n } catch (e) {\n // IE9 throws if you access activeElement during page load (see issue #703)\n active = ownerDoc.body\n }\n isFocused = active === element\n }\n\n const modelValue = valueAccessor(isFocused, { onlyIfChanged: true })\n // Found a scenario where hasFocus changes were not fired\n // the fix was transfered from ko 3.5 (Focusout event was not fired)\n // This only replies the value if there are changes\n // it won't effect if already set by valueAccessor (Parser.convertToAccessors)\n if (isWriteableObservable(modelValue) && modelValue.peek() !== isFocused) {\n modelValue(isFocused)\n }\n\n // cache the latest value, so we can avoid unnecessarily calling focus/blur in the update function\n element[hasfocusLastValue] = isFocused\n element[hasfocusUpdatingProperty] = false\n }\n\n const handleElementFocusIn = handleElementFocusChange.bind(null, true)\n const handleElementFocusOut = handleElementFocusChange.bind(null, false)\n\n registerEventHandler(element, 'focus', handleElementFocusIn)\n registerEventHandler(element, 'focusin', handleElementFocusIn) // For IE\n registerEventHandler(element, 'blur', handleElementFocusOut)\n registerEventHandler(element, 'focusout', handleElementFocusOut) // For IE\n },\n update: function (element, valueAccessor) {\n const value = !!unwrap(valueAccessor())\n\n if (!element[hasfocusUpdatingProperty] && element[hasfocusLastValue] !== value) {\n if (value) {\n element.focus()\n } else {\n element.blur()\n }\n\n // In IE, the blur method doesn't always cause the element to lose focus (for example, if the window is not in focus).\n // Setting focus to the body element does seem to be reliable in IE, but should only be used if we know that the current\n // element was focused already.\n if (!value && element[hasfocusLastValue]) {\n element.ownerDocument.body.focus()\n }\n\n // For IE, which doesn't reliably fire \"focus\" or \"blur\" events synchronously\n dependencyDetection.ignore(triggerEvent, null, [element, value ? 'focusin' : 'focusout'])\n }\n }\n}\n", "import { setHtml } from '@tko/utils'\n\nexport const html = {\n init: function () {\n // Prevent binding on the dynamically-injected HTML (as developers are unlikely to expect that, and it has security implications)\n return { controlsDescendantBindings: true }\n },\n //\n // Modify internal, per ko.punches and :\n // http://stackoverflow.com/a/15348139\n update: function (element, valueAccessor) {\n setHtml(element, valueAccessor())\n },\n allowVirtualElements: true\n}\n", "import { applyBindingsToDescendants } from '@tko/bind'\n\nimport type { BindingContext } from '@tko/bind'\n\nexport default {\n init: function (element, valueAccessor, _allBindings, _viewModel, bindingContext: BindingContext) {\n // Make a modified binding context, with extra properties, and apply it to descendant elements\n const innerContext = bindingContext['extend'](valueAccessor)\n applyBindingsToDescendants(innerContext, element)\n\n return { controlsDescendantBindings: true }\n },\n allowVirtualElements: true\n}\n", "import {\n tagNameLower,\n arrayFilter,\n arrayMap,\n setTextContent,\n arrayIndexOf,\n setOptionNodeSelectionState,\n triggerEvent,\n selectExtensions\n} from '@tko/utils'\n\nimport { unwrap, dependencyDetection } from '@tko/observable'\nimport { setDomNodeChildrenFromArrayMapping } from '@tko/bind'\nimport type { AllBindings } from '@tko/bind'\nconst captionPlaceholder = {}\n\nexport const options = {\n init: function (element) {\n if (tagNameLower(element) !== 'select') {\n throw new Error('options binding applies only to SELECT elements')\n }\n\n // Remove all existing <option>s.\n while (element.length > 0) {\n element.remove(0)\n }\n\n // Ensures that the binding processor doesn't try to bind the options\n return { controlsDescendantBindings: true }\n },\n update: function (element, valueAccessor, allBindings: AllBindings) {\n function selectedOptions() {\n return arrayFilter(element.options, function (node) {\n return node.selected\n })\n }\n\n let selectWasPreviouslyEmpty = element.length == 0,\n multiple = element.multiple,\n previousScrollTop = !selectWasPreviouslyEmpty && multiple ? element.scrollTop : null,\n unwrappedArray = unwrap(valueAccessor()),\n valueAllowUnset = allBindings.get('valueAllowUnset') && allBindings['has']('value'),\n includeDestroyed = allBindings.get('optionsIncludeDestroyed'),\n arrayToDomNodeChildrenOptions = {},\n captionValue,\n filteredArray,\n previousSelectedValues = new Array()\n\n if (!valueAllowUnset) {\n if (multiple) {\n previousSelectedValues = arrayMap(selectedOptions(), selectExtensions.readValue)\n } else if (element.selectedIndex >= 0) {\n previousSelectedValues.push(selectExtensions.readValue(element.options[element.selectedIndex]))\n }\n }\n\n if (unwrappedArray) {\n if (typeof unwrappedArray.length === 'undefined') {\n // Coerce single value into array\n unwrappedArray = [unwrappedArray]\n }\n\n // Filter out any entries marked as destroyed\n filteredArray = arrayFilter(unwrappedArray, function (item) {\n return includeDestroyed || item === undefined || item === null || !unwrap(item['_destroy'])\n })\n\n // If caption is included, add it to the array\n if (allBindings['has']('optionsCaption')) {\n captionValue = unwrap(allBindings.get('optionsCaption'))\n // If caption value is null or undefined, don't show a caption\n if (captionValue !== null && captionValue !== undefined) {\n filteredArray.unshift(captionPlaceholder)\n }\n }\n } else {\n // If a falsy value is provided (e.g. null), we'll simply empty the select element\n }\n\n function applyToObject(object, predicate, defaultValue) {\n const predicateType = typeof predicate\n if (predicateType === 'function') {\n // Given a function; run it against the data value\n return predicate(object)\n } else if (predicateType == 'string') {\n // Given a string; treat it as a property name on the data value\n return object[predicate]\n } // Given no optionsText arg; use the data value itself\n else {\n return defaultValue\n }\n }\n\n // The following functions can run at two different times:\n // The first is when the whole array is being updated directly from this binding handler.\n // The second is when an observable value for a specific array entry is updated.\n // oldOptions will be empty in the first case, but will be filled with the previously generated option in the second.\n let itemUpdate = false\n function optionForArrayItem(arrayEntry, index, oldOptions) {\n if (oldOptions.length) {\n previousSelectedValues =\n !valueAllowUnset && oldOptions[0].selected ? [selectExtensions.readValue(oldOptions[0])] : []\n itemUpdate = true\n }\n const option = element.ownerDocument.createElement('option')\n if (arrayEntry === captionPlaceholder) {\n setTextContent(option, allBindings.get('optionsCaption'))\n selectExtensions.writeValue(option, undefined)\n } else {\n // Apply a value to the option element\n const optionValue = applyToObject(arrayEntry, allBindings.get('optionsValue'), arrayEntry)\n selectExtensions.writeValue(option, unwrap(optionValue))\n\n // Apply some text to the option element\n const optionText = applyToObject(arrayEntry, allBindings.get('optionsText'), optionValue)\n setTextContent(option, optionText)\n }\n return [option]\n }\n\n // By using a beforeRemove callback, we delay the removal until after new items are added. This fixes a selection\n // problem in IE<=8 and Firefox. See https://github.com/knockout/knockout/issues/1208\n arrayToDomNodeChildrenOptions['beforeRemove'] = function (option) {\n element.removeChild(option)\n }\n\n function setSelectionCallback(arrayEntry, newOptions) {\n if (itemUpdate && valueAllowUnset) {\n // The model value is authoritative, so make sure its value is the one selected\n // There is no need to use dependencyDetection.ignore since setDomNodeChildrenFromArrayMapping does so already.\n selectExtensions.writeValue(element, unwrap(allBindings.get('value')), true /* allowUnset */)\n } else if (previousSelectedValues.length) {\n // IE6 doesn't like us to assign selection to OPTION nodes before they're added to the document.\n // That's why we first added them without selection. Now it's time to set the selection.\n const isSelected = arrayIndexOf(previousSelectedValues, selectExtensions.readValue(newOptions[0])) >= 0\n setOptionNodeSelectionState(newOptions[0], isSelected)\n\n // If this option was changed from being selected during a single-item update, notify the change\n if (itemUpdate && !isSelected) {\n dependencyDetection.ignore(triggerEvent, null, [element, 'change'])\n }\n }\n }\n\n let callback = setSelectionCallback\n if (allBindings['has']('optionsAfterRender') && typeof allBindings.get('optionsAfterRender') === 'function') {\n callback = function (arrayEntry, newOptions) {\n setSelectionCallback(arrayEntry, newOptions)\n dependencyDetection.ignore(allBindings.get('optionsAfterRender'), null, [\n newOptions[0],\n arrayEntry !== captionPlaceholder ? arrayEntry : undefined\n ])\n }\n }\n\n setDomNodeChildrenFromArrayMapping(\n element,\n filteredArray,\n optionForArrayItem,\n arrayToDomNodeChildrenOptions,\n callback\n )\n\n dependencyDetection.ignore(function () {\n if (valueAllowUnset) {\n // The model value is authoritative, so make sure its value is the one selected\n selectExtensions.writeValue(element, unwrap(allBindings.get('value')), true /* allowUnset */)\n } else {\n // Determine if the selection has changed as a result of updating the options list\n let selectionChanged\n if (multiple) {\n // For a multiple-select box, compare the new selection count to the previous one\n // But if nothing was selected before, the selection can't have changed\n selectionChanged = previousSelectedValues.length && selectedOptions().length < previousSelectedValues.length\n } else {\n // For a single-select box, compare the current value to the previous value\n // But if nothing was selected before or nothing is selected now, just look for a change in selection\n selectionChanged =\n previousSelectedValues.length && element.selectedIndex >= 0\n ? selectExtensions.readValue(element.options[element.selectedIndex]) !== previousSelectedValues[0]\n : previousSelectedValues.length || element.selectedIndex >= 0\n }\n\n // Ensure consistency between model value and selected option.\n // If the dropdown was changed so that selection is no longer the same,\n // notify the value or selectedOptions binding.\n if (selectionChanged) {\n triggerEvent(element, 'change')\n }\n }\n })\n\n if (previousScrollTop && Math.abs(previousScrollTop - element.scrollTop) > 20) {\n element.scrollTop = previousScrollTop\n }\n }\n}\n", "import {\n arrayForEach,\n setOptionNodeSelectionState,\n arrayIndexOf,\n registerEventHandler,\n tagNameLower,\n selectExtensions\n} from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport type { AllBindings } from '@tko/bind'\n\nexport const selectedOptions = {\n after: ['options', 'foreach'],\n\n init: function (element, valueAccessor, _allBindings: AllBindings) {\n registerEventHandler(element, 'change', function () {\n const value = valueAccessor(),\n valueToWrite = new Array()\n arrayForEach(element.getElementsByTagName('option'), function (node) {\n if (node.selected) {\n valueToWrite.push(selectExtensions.readValue(node))\n }\n })\n valueAccessor(valueToWrite)\n })\n },\n\n update: function (element, valueAccessor) {\n if (tagNameLower(element) != 'select') {\n throw new Error('values binding applies only to SELECT elements')\n }\n\n const newValue = unwrap(valueAccessor()),\n previousScrollTop = element.scrollTop\n\n if (newValue && typeof newValue.length === 'number') {\n arrayForEach(element.getElementsByTagName('option'), function (node) {\n const isSelected = arrayIndexOf(newValue, selectExtensions.readValue(node)) >= 0\n if (node.selected != isSelected) {\n // This check prevents flashing of the select element in IE\n setOptionNodeSelectionState(node, isSelected)\n }\n })\n }\n\n element.scrollTop = previousScrollTop\n }\n}\n", "import { objectForEach, options } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nexport const style = {\n update: function (element, valueAccessor) {\n const value = unwrap(valueAccessor() || {})\n objectForEach(value, function (styleName, styleValue) {\n styleValue = unwrap(styleValue)\n\n if (styleValue === null || styleValue === undefined || styleValue === false) {\n // Empty string removes the value, whereas null/undefined have no effect\n styleValue = ''\n }\n\n if (options.jQuery) {\n jQuery(element).css(styleName, styleValue)\n } else {\n styleName = styleName.replace(/-(\\w)/g, (all, letter) => letter.toUpperCase())\n const previousStyle = element.style[styleName]\n element.style[styleName] = styleValue\n if (styleValue !== previousStyle && element.style[styleName] === previousStyle && !isNaN(styleValue)) {\n element.style[styleName] = styleValue + 'px'\n }\n }\n })\n }\n}\n", "import { registerEventHandler } from '@tko/utils'\n\nimport type { BindingContext } from '@tko/bind'\n\nexport const submit = {\n init: function (element, valueAccessor, _allBindings, _viewModel, bindingContext: BindingContext) {\n if (typeof valueAccessor() !== 'function') {\n throw new Error('The value for a submit binding must be a function')\n }\n registerEventHandler(element, 'submit', function (event) {\n let handlerReturnValue\n const value = valueAccessor()\n try {\n handlerReturnValue = value.call(bindingContext['$data'], element)\n } finally {\n if (handlerReturnValue !== true) {\n // Normally we want to prevent default action. Developer can override this be explicitly returning true.\n if (event.preventDefault) {\n event.preventDefault()\n } else {\n event.returnValue = false\n }\n }\n }\n })\n }\n}\n", "import { setTextContent } from '@tko/utils'\n\nexport const text = {\n init: function () {\n // Prevent binding on the dynamically-injected text node (as developers are unlikely to expect that, and it has security implications).\n // It should also make things faster, as we no longer have to consider whether the text node might be bindable.\n return { controlsDescendantBindings: true }\n },\n update: function (element, valueAccessor) {\n setTextContent(element, valueAccessor())\n },\n allowVirtualElements: true\n}\n", "import { safeSetTimeout, options, arrayForEach } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport { BindingHandler } from '@tko/bind'\n\nexport const MSIE_REGEX = /MSIE ([^ ;]+)|rv:([^ )]+)/\n\nlet operaVersion, safariVersion, firefoxVersion, ieVersion\n\n/**\n * TextInput binding handler for modern browsers (legacy below).\n * @extends BindingHandler\n */\nclass TextInput extends BindingHandler {\n get aliases() {\n return 'textinput'\n }\n\n get $inputElement(): HTMLInputElement {\n return this.$element as HTMLInputElement\n }\n\n previousElementValue: any\n elementValueBeforeEvent?: ReturnType<typeof setTimeout>\n timeoutHandle?: ReturnType<typeof setTimeout>\n\n constructor(...args: [any]) {\n super(...args)\n\n this.previousElementValue = this.$inputElement.value\n\n if (options.debug && (this.constructor as any)._forceUpdateOn) {\n // Provide a way for tests to specify exactly which events are bound\n arrayForEach((this.constructor as any)._forceUpdateOn, eventName => {\n if (eventName.slice(0, 5) === 'after') {\n this.addEventListener(eventName.slice(5), 'deferUpdateModel')\n } else {\n this.addEventListener(eventName, 'updateModel')\n }\n })\n }\n\n for (const eventName of this.eventsIndicatingSyncValueChange()) {\n this.addEventListener(eventName, 'updateModel')\n }\n for (const eventName of this.eventsIndicatingDeferValueChange()) {\n this.addEventListener(eventName, 'deferUpdateModel')\n }\n this.computed('updateView')\n }\n\n eventsIndicatingSyncValueChange() {\n // input: Default, modern handler\n // change: Catch programmatic updates of the value that fire this event.\n // blur: To deal with browsers that don't notify any kind of event for some changes (IE, Safari, etc.)\n return ['input', 'change', 'blur']\n }\n\n eventsIndicatingDeferValueChange(): any[] {\n return []\n }\n\n updateModel(event) {\n const element = this.$inputElement\n clearTimeout(this.timeoutHandle)\n this.elementValueBeforeEvent = this.timeoutHandle = undefined\n const elementValue = element.value\n if (this.previousElementValue !== elementValue) {\n // Provide a way for tests to know exactly which event was processed\n if (options.debug && event) {\n ;(element as any)._ko_textInputProcessedEvent = event.type\n }\n this.previousElementValue = elementValue\n this.value = elementValue\n }\n }\n\n deferUpdateModel(event: any) {\n const element = this.$inputElement\n if (!this.timeoutHandle) {\n // The elementValueBeforeEvent variable is set *only* during the brief gap between an\n // event firing and the updateModel function running. This allows us to ignore model\n // updates that are from the previous state of the element, usually due to techniques\n // such as rateLimit. Such updates, if not ignored, can cause keystrokes to be lost.\n this.elementValueBeforeEvent = element.value as any\n const handler = options.debug ? this.updateModel.bind(this, { type: event.type }) : this.updateModel\n this.timeoutHandle = safeSetTimeout(handler, 4)\n }\n }\n\n updateView() {\n let modelValue = unwrap(this.value)\n if (modelValue === null || modelValue === undefined) {\n modelValue = ''\n }\n if (this.elementValueBeforeEvent !== undefined && modelValue === this.elementValueBeforeEvent) {\n setTimeout(this.updateView.bind(this), 4)\n } else if (this.$inputElement.value !== modelValue) {\n // Update the element only if the element and model are different. On some browsers, updating the value\n // will move the cursor to the end of the input, which would be bad while the user is typing.\n this.previousElementValue = modelValue // Make sure we ignore events (propertychange) that result from updating the value\n this.$inputElement.value = modelValue\n this.previousElementValue = this.$inputElement.value // In case the browser changes the value (see #2281)\n }\n }\n}\n\nclass TextInputIE extends TextInput {\n override eventsIndicatingSyncValueChange() {\n //keypress: All versions (including 11) of Internet Explorer have a bug that they don't generate an input or propertychange event when ESC is pressed\n return [...super.eventsIndicatingSyncValueChange(), 'keypress']\n }\n}\n\n// Safari <5 doesn't fire the 'input' event for <textarea> elements (it does fire 'textInput'\n// but only when typing). So we'll just catch as much as we can with keydown, cut, and paste.\nclass TextInputLegacySafari extends TextInput {\n override eventsIndicatingDeferValueChange() {\n return ['keydown', 'paste', 'cut']\n }\n}\n\nclass TextInputLegacyOpera extends TextInput {\n override eventsIndicatingDeferValueChange(): string[] {\n // Opera 10 doesn't always fire the 'input' event for cut, paste, undo & drop operations.\n // We can try to catch some of those using 'keydown'.\n return ['keydown']\n }\n}\n\nclass TextInputLegacyFirefox extends TextInput {\n eventsIndicatingValueChange(): string[] {\n return [\n ...super.eventsIndicatingSyncValueChange(),\n // Firefox <= 3.6 doesn't fire the 'input' event when text is filled in through autocomplete\n 'DOMAutoComplete',\n // Firefox <=3.5 doesn't fire the 'input' event when text is dropped into the input.\n 'dragdrop', // < 3.5\n 'drop' // 3.5\n ]\n }\n}\n\nconst w = options.global // window / global\nif (w.navigator) {\n const parseVersion = matches => matches && parseFloat(matches[1])\n const userAgent = w.navigator.userAgent\n const isChrome = userAgent.match(/Chrome\\/([^ ]+)/)\n if (!isChrome) {\n // Detect various browser versions because some old versions don't fully support the 'input' event\n operaVersion = w.opera && w.opera.version && parseInt(w.opera.version())\n safariVersion = parseVersion(userAgent.match(/Version\\/([^ ]+) Safari/))\n firefoxVersion = parseVersion(userAgent.match(/Firefox\\/([^ ]*)/))\n const ieMatch = userAgent.match(MSIE_REGEX)\n ieVersion = ieMatch && (parseFloat(ieMatch[1]) || parseFloat(ieMatch[2]))\n }\n}\n\nexport const textInput =\n ieVersion && ieVersion <= 11\n ? TextInputIE\n : safariVersion && safariVersion < 5\n ? TextInputLegacySafari\n : operaVersion && operaVersion < 11\n ? TextInputLegacyOpera\n : firefoxVersion && firefoxVersion < 4\n ? TextInputLegacyFirefox\n : TextInput\n", "export const uniqueName = {\n init: function (element, valueAccessor) {\n if (valueAccessor()) {\n const name = 'ko_unique_' + ++uniqueName.currentIndex\n element.name = name\n }\n },\n currentIndex: 0\n}\n", "import { stringStartsWith, safeSetTimeout, tagNameLower, arrayForEach, selectExtensions } from '@tko/utils'\n\nimport { unwrap, dependencyDetection } from '@tko/observable'\n\nimport { applyBindingAccessorsToNode, BindingHandler } from '@tko/bind'\n\nimport { MSIE_REGEX } from './textInput'\n\nexport class value extends BindingHandler {\n static get after() {\n return ['options', 'foreach', 'template']\n }\n\n elementValueBeforeEvent: any\n propertyChangedFired: boolean\n updateFromModel: any\n constructor(...args: [any]) {\n super(...args)\n\n // If the value binding is placed on a radio/checkbox, then just pass through to checkedValue and quit\n if (this.isCheckboxOrRadio) {\n applyBindingAccessorsToNode(this.$element, { checkedValue: this.valueAccessor })\n return\n }\n\n this.propertyChangedFired = false\n this.elementValueBeforeEvent = null\n\n if (this.ieAutoCompleteHackNeeded) {\n this.addEventListener('propertyChange', () => (this.propertyChangedFired = true))\n this.addEventListener('focus', () => (this.propertyChangedFired = false))\n this.addEventListener('blur', () => this.propertyChangedFired && this.valueUpdateHandler())\n }\n\n arrayForEach(this.eventsToCatch, eventName => this.registerEvent(eventName))\n\n if (this.isInput(this.$element) && this.$element.type === 'file') {\n this.updateFromModel = this.updateFromModelForFile\n } else {\n this.updateFromModel = this.updateFromModelForValue\n }\n\n this.computed('updateFromModel')\n }\n\n get eventsToCatch() {\n const requestedEventsToCatch = this.allBindings.get('valueUpdate')\n const requestedEventsArray =\n typeof requestedEventsToCatch === 'string' ? [requestedEventsToCatch] : requestedEventsToCatch || []\n return [...new Set(['change', ...requestedEventsArray])]\n }\n\n isInput(element: HTMLElement): element is HTMLInputElement {\n return tagNameLower(this.$element) === 'input'\n }\n\n get isCheckboxOrRadio() {\n const e = this.$element\n return this.isInput(e) && (e.type == 'checkbox' || e.type == 'radio')\n }\n\n // Workaround for https://github.com/SteveSanderson/knockout/issues/122\n // IE doesn't fire \"change\" events on textboxes if the user selects a value from its autocomplete list\n get ieAutoCompleteHackNeeded() {\n return (\n this.isInput(this.$element) &&\n this.$element.type == 'text' &&\n this.$element.autocomplete != 'off' &&\n (!this.$element.form || this.$element.form.autocomplete != 'off') &&\n MSIE_REGEX.test(window.navigator.userAgent) //IE detection (primarily for IE10/11)\n )\n }\n\n valueUpdateHandler() {\n this.elementValueBeforeEvent = null\n this.propertyChangedFired = false\n this.value = selectExtensions.readValue(this.$element)\n }\n\n registerEvent(eventName) {\n // The syntax \"after<eventname>\" means \"run the handler asynchronously after the event\"\n // This is useful, for example, to catch \"keydown\" events after the browser has updated the control\n // (otherwise, selectExtensions.readValue(this) will receive the control's value *before* the key event)\n let handler = this.valueUpdateHandler.bind(this)\n if (stringStartsWith(eventName, 'after')) {\n handler = () => {\n // The elementValueBeforeEvent variable is non-null *only* during the brief gap between\n // a keyX event firing and the valueUpdateHandler running, which is scheduled to happen\n // at the earliest asynchronous opportunity. We store this temporary information so that\n // if, between keyX and valueUpdateHandler, the underlying model value changes separately,\n // we can overwrite that model value change with the value the user just typed. Otherwise,\n // techniques like rateLimit can trigger model changes at critical moments that will\n // override the user's inputs, causing keystrokes to be lost.\n this.elementValueBeforeEvent = selectExtensions.readValue(this.$element)\n safeSetTimeout(this.valueUpdateHandler.bind(this), 0)\n }\n eventName = eventName.substring(5 /* 'after'.length */)\n }\n this.addEventListener(eventName, handler)\n }\n\n updateFromModelForFile() {\n // For file input elements, can only write the empty string\n const newValue = unwrap(this.value)\n if (newValue === null || newValue === undefined || newValue === '') {\n ;(this.$element as HTMLInputElement).value = ''\n } else {\n dependencyDetection.ignore(this.valueUpdateHandler, this) // reset the model to match the element\n }\n }\n\n updateFromModelForValue() {\n const element = this.$element\n const newValue = unwrap(this.value)\n const elementValue = selectExtensions.readValue(element)\n\n if (this.elementValueBeforeEvent !== null && newValue === this.elementValueBeforeEvent) {\n safeSetTimeout(this.updateFromModel.bind(this), 0)\n return\n }\n\n if (newValue === elementValue && elementValue !== undefined) {\n return\n }\n\n if (tagNameLower(element) === 'select') {\n const allowUnset = this.allBindings.get('valueAllowUnset')\n selectExtensions.writeValue(element, newValue, allowUnset)\n\n if (!allowUnset && newValue !== selectExtensions.readValue(element)) {\n // If you try to set a model value that can't be represented in an already-populated dropdown, reject that change,\n // because you're not allowed to have a model value that disagrees with a visible UI selection.\n dependencyDetection.ignore(this.valueUpdateHandler, this)\n }\n } else {\n selectExtensions.writeValue(element, newValue)\n }\n }\n}\n", "import { unwrap } from '@tko/observable'\n\nexport const visible = {\n update: function (element, valueAccessor) {\n const value = unwrap(valueAccessor())\n const isCurrentlyVisible = !(element.style.display === 'none')\n if (value && !isCurrentlyVisible) {\n element.style.display = ''\n } else if (!value && isCurrentlyVisible) {\n element.style.display = 'none'\n }\n }\n}\n\nexport const hidden = {\n update: function (element, valueAccessor) {\n visible.update.call(this, element, () => !unwrap(valueAccessor()))\n }\n}\n", "import { applyBindingsToDescendants } from '@tko/bind'\n\nimport type { BindingContext, AllBindings } from '@tko/bind'\n\nexport const using = {\n init: function (element, valueAccessor, _allBindings: AllBindings, _viewModel, bindingContext: BindingContext) {\n const innerContext = bindingContext.createChildContext(valueAccessor)\n applyBindingsToDescendants(innerContext, element)\n return { controlsDescendantBindings: true }\n },\n allowVirtualElements: true\n}\n", "import { attr } from './attr'\nimport { checked, checkedValue } from './checked'\nimport { click } from './click'\nimport { css } from './css'\nimport descendantsComplete from './descendantsComplete'\nimport { enable, disable } from './enableDisable'\nimport { eventHandler, onHandler } from './event'\nimport { hasfocus } from './hasfocus'\nimport { html } from './html'\nimport $let from './let'\nimport { options } from './options'\nimport { selectedOptions } from './selectedOptions'\nimport { style } from './style'\nimport { submit } from './submit'\nimport { text } from './text'\nimport { textInput } from './textInput'\nimport { uniqueName } from './uniqueName'\nimport { value } from './value'\nimport { visible, hidden } from './visible'\nimport { using } from './using'\n\nexport const bindings: Record<string, unknown> = {\n attr,\n checked,\n checkedValue,\n click,\n css,\n class: css,\n descendantsComplete,\n enable,\n event: eventHandler,\n disable,\n hasfocus,\n hasFocus: hasfocus,\n hidden,\n html,\n let: $let,\n on: onHandler,\n options,\n selectedOptions,\n style,\n submit,\n text,\n textInput,\n textinput: textInput,\n uniqueName,\n using,\n value,\n visible\n}\n", "import { cloneNodes, virtualElements, cleanNode, domData } from '@tko/utils'\n\nimport { dependencyDetection, observable } from '@tko/observable'\n\nimport type { Observable } from '@tko/observable'\n\nimport { applyBindingsToDescendants, AsyncBindingHandler } from '@tko/bind'\n\nimport type { BindingContext } from '@tko/bind'\n\n//todo signature of renderStatus but be discussed\nexport type RenderStatusKeys = 'shouldDisplay'\n\n/**\n * Create a DOMbinding that controls DOM nodes presence\n *\n * Covers e.g.\n *\n * 1. DOM Nodes contents\n *\n * <div data-bind='if: x'>\n * <!-- else --> ... an optional 'if'\n * </div>\n *\n * 2. Virtual elements\n *\n * <!-- ko if: x -->\n * <!-- else -->\n * <!-- /ko -->\n *\n * 3. Else binding\n * <div data-bind='if: x'></div>\n * <div data-bind='else'></div>\n *\n * Requires `renderStatus` and `get bindingContext` to be overloaded,\n * and this.computed('render') must be called in the child constructor.\n */\nexport default class ConditionalBindingHandler extends AsyncBindingHandler {\n get bindingContext(): BindingContext {\n throw new Error('bindingContext() must be implemented in the child class')\n }\n completesElseChain: Observable\n hasElse: boolean\n ifElseNodes?: any\n constructor(params) {\n super(params)\n this.hasElse = this.detectElse(this.$element)\n const elseChainSatisfied = (this.completesElseChain = observable())\n domData.set(this.$element, 'conditional', { elseChainSatisfied })\n }\n\n getIfElseNodes() {\n if (this.ifElseNodes) {\n return this.ifElseNodes\n }\n if (dependencyDetection.getDependenciesCount() || this.hasElse) {\n return this.cloneIfElseNodes(this.$element, this.hasElse)\n }\n }\n\n renderStatus(): Record<RenderStatusKeys, any> {\n throw new Error('renderStatus() must be implemented in the child class')\n }\n\n render() {\n const isFirstRender = !this.ifElseNodes\n const { shouldDisplay } = this.renderStatus()\n\n // Save the nodes before we possibly remove them from the DOM.\n this.ifElseNodes = this.getIfElseNodes() || {}\n\n if (shouldDisplay) {\n const useOriginalNodes = isFirstRender && !this.hasElse\n this.renderAndApplyBindings(this.ifElseNodes.ifNodes, useOriginalNodes)\n } else if (this.hasElse) {\n this.renderAndApplyBindings(this.ifElseNodes.elseNodes)\n } else {\n virtualElements.emptyNode(this.$element)\n }\n }\n\n async renderAndApplyBindings(nodes: ArrayLike<Node>, useOriginalNodes?: boolean) {\n if (!useOriginalNodes) {\n virtualElements.setDomNodeChildren(this.$element, cloneNodes(nodes))\n }\n const bound = await applyBindingsToDescendants(this.bindingContext, this.$element)\n this.completeBinding(bound)\n }\n\n /**\n * This may be truthy for the `else` binding.\n */\n get elseChainIsAlreadySatisfied() {\n return false\n }\n\n /**\n * Test a node for whether it represents an 'else' condition.\n * @param {HTMLElement} node to be tested\n * @return {Boolean} true when\n *\n * Matches <!-- else -->\n */\n isElseNode(node) {\n return node.nodeType === Node.COMMENT_NODE && node.nodeValue.trim().toLowerCase() === 'else'\n }\n\n detectElse(element) {\n const children = virtualElements.childNodes(element)\n for (let i = 0, j = children.length; i < j; ++i) {\n if (this.isElseNode(children[i])) {\n return true\n }\n }\n return false\n }\n\n /**\n * Clone the nodes, returning `ifNodes`, `elseNodes`\n * @param {HTMLElement} element The nodes to be cloned\n * @param {boolean} hasElse short-circuit to speed up the inner-loop.\n * @return {object} Containing the cloned nodes.\n */\n cloneIfElseNodes(element, hasElse) {\n const children = virtualElements.childNodes(element)\n const ifNodes = new Array()\n const elseNodes = new Array()\n let target = ifNodes\n\n for (let i = 0, j = children.length; i < j; ++i) {\n if (hasElse && this.isElseNode(children[i])) {\n target = elseNodes\n hasElse = false\n } else {\n target.push(cleanNode(children[i].cloneNode(true)))\n }\n }\n\n return { ifNodes, elseNodes }\n }\n\n override get controlsDescendants() {\n return true\n }\n static override get allowVirtualElements() {\n return true\n }\n}\n", "import { unwrap } from '@tko/observable'\n\nimport ConditionalBindingHandler from './ConditionalBindingHandler'\n\n/**\n * For the `if:` binding.\n */\nexport class IfBindingHandler extends ConditionalBindingHandler {\n ifCondition: any\n constructor(...args: [any]) {\n super(...args)\n this.ifCondition = this.computed(() => !!unwrap(this.value))\n this.computed('render')\n }\n\n shouldDisplayIf() {\n return this.ifCondition()\n }\n\n override get bindingContext() {\n return this.ifCondition.isActive()\n ? this.$context.extend(() => {\n // Ensure that this context is dependant upon the conditional, so the\n // order of binding application is: conditional before its children.\n // See https://github.com/knockout/knockout/pull/2226\n this.ifCondition()\n return null\n })\n : this.$context\n }\n\n override renderStatus() {\n let shouldDisplay = this.shouldDisplayIf()\n\n if (this.elseChainIsAlreadySatisfied) {\n shouldDisplay = false\n // needsRefresh = isFirstRender || this.didDisplayOnLastUpdate FIXME\n this.completesElseChain(true)\n } else {\n this.completesElseChain(shouldDisplay)\n }\n return { shouldDisplay }\n }\n}\n\nexport class UnlessBindingHandler extends IfBindingHandler {\n override shouldDisplayIf() {\n return !super.shouldDisplayIf()\n }\n}\n", "import { options } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport ConditionalBindingHandler from './ConditionalBindingHandler'\n\n/**\n * The following fails somewhere in the `limit` functions of Observables i.e.\n * it's an issue related to async/deferUpdates.\n */\nexport class WithBindingHandler extends ConditionalBindingHandler {\n asOption: any\n conditional: any\n constructor(...args: [any]) {\n super(...args)\n this.asOption = this.allBindings.get('as')\n\n // If given `as`, reduce the condition to a boolean, so it does not\n // change & refresh when the value is updated.\n const conditionalFn =\n this.asOption && !options.createChildContextWithAs ? () => Boolean(unwrap(this.value)) : () => unwrap(this.value)\n this.conditional = this.computed(conditionalFn)\n\n this.computed('render')\n }\n\n override get bindingContext() {\n if (!this.asOption) {\n return this.$context.createChildContext(this.valueAccessor)\n }\n return options.createChildContextWithAs\n ? this.$context.createChildContext(this.value, this.asOption)\n : this.$context.extend({ [this.asOption]: this.value })\n }\n\n override renderStatus() {\n const shouldDisplay = Boolean(this.conditional())\n return { shouldDisplay }\n }\n}\n", "import { virtualElements, domData } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport { IfBindingHandler } from './ifUnless'\n\n/**\n * The `else` binding\n * (not to be mistaken for `<!-- else -->` inside if bindings.\n */\nexport class ElseBindingHandler extends IfBindingHandler {\n _elseChain: any\n\n override shouldDisplayIf() {\n return super.shouldDisplayIf() || this.value === undefined\n }\n\n /**\n * Return any conditional that precedes the given node.\n * @return {object} { elseChainSatisfied: observable }\n */\n override get elseChainIsAlreadySatisfied() {\n if (!this._elseChain) {\n this._elseChain = this.readElseChain()\n }\n return unwrap(this._elseChain.elseChainSatisfied)\n }\n\n readElseChain() {\n let node: ChildNode | null = this.$element\n do {\n node = node.previousSibling\n } while (node && node.nodeType !== Node.ELEMENT_NODE && node.nodeType !== Node.COMMENT_NODE)\n\n if (!node) {\n return false\n }\n\n if (node.nodeType === Node.COMMENT_NODE) {\n node = virtualElements.previousSibling(node)\n }\n\n return domData.get(node as Node, 'conditional') || {}\n }\n}\n", "import { IfBindingHandler, UnlessBindingHandler } from './ifUnless'\n\nimport { WithBindingHandler } from './with'\n\nimport { ElseBindingHandler } from './else'\n\nexport const bindings = {\n if: IfBindingHandler,\n with: WithBindingHandler,\n ifnot: UnlessBindingHandler,\n unless: UnlessBindingHandler,\n else: ElseBindingHandler,\n elseif: ElseBindingHandler\n}\n", "// index.js\n// --------\n// Fast For Each\n//\n// Employing sound techniques to make a faster Knockout foreach binding.\n// --------\n\nimport {\n arrayForEach,\n cleanNode,\n options,\n virtualElements,\n createSymbolOrString,\n domData,\n domNodeIsContainedBy\n} from '@tko/utils'\n\nimport { isObservable, unwrap, observable } from '@tko/observable'\n\nimport type { ObservableArray } from '@tko/observable'\n\nimport { contextFor, applyBindingsToDescendants, AsyncBindingHandler } from '@tko/bind'\n\nimport type { AllBindings } from '@tko/bind'\n\n// Utilities\nconst MAX_LIST_SIZE = 9007199254740991\n\n// from https://github.com/jonschlinkert/is-plain-object\nfunction isPlainObject(o): o is Record<string, any> {\n return !!o && typeof o === 'object' && o.constructor === Object\n}\n\ninterface ChangeMap {\n added: ChangeAddItem[]\n deleted: any[]\n}\n\ninterface ChangeAddItemBase {\n status: 'added'\n index: number\n}\n\ninterface ChangeAddBatchItem extends ChangeAddItemBase {\n isBatch: true\n values: any[]\n}\n\ninterface ChangeAddOneItem extends ChangeAddItemBase {\n isBatch?: false\n value: any\n}\n\ntype ChangeAddItem = ChangeAddBatchItem | ChangeAddOneItem\n\nconst supportsDocumentFragment = options.document && typeof options.document.createDocumentFragment === 'function'\n\n// Get a copy of the (possibly virtual) child nodes of the given element,\n// put them into a container, then empty the given node.\nfunction makeTemplateNode(sourceNode) {\n const container = document.createElement('div')\n let parentNode\n if (sourceNode.content) {\n // For e.g. <template> tags\n parentNode = sourceNode.content\n } else if (sourceNode.tagName === 'SCRIPT') {\n parentNode = document.createElement('div')\n parentNode.innerHTML = sourceNode.text\n } else {\n // Anything else e.g. <div>\n parentNode = sourceNode\n }\n arrayForEach(virtualElements.childNodes(parentNode), function (child) {\n // FIXME - This cloneNode could be expensive; we may prefer to iterate over the\n // parentNode children in reverse (so as not to foul the indexes as childNodes are\n // removed from parentNode when inserted into the container)\n if (child) {\n container.insertBefore(child.cloneNode(true), null)\n }\n })\n return container\n}\n\n// Mimic a KO change item 'add'\nfunction valueToChangeAddItem(value, index): ChangeAddItem {\n return { status: 'added', value: value, index: index }\n}\n\n// store a symbol for caching the pending delete info index in the data item objects\nconst PENDING_DELETE_INDEX_SYM = createSymbolOrString('_ko_ffe_pending_delete_index')\n\nexport class ForEachBinding extends AsyncBindingHandler {\n // NOTE: valid valueAccessors include:\n // []\n // observable([])\n // observableArray([])\n // computed\n // {data: array, name: string, as: string}\n afterAdd\n static animateFrame\n as\n beforeRemove\n container\n changeSubs: any\n data\n generateContext\n $indexHasBeenRequested: boolean\n templateNode\n changeQueue: any[]\n firstLastNodesList: { first: Node; last: Node }[]\n indexesToDelete: any[]\n isNotEmpty: any\n rendering_queued: boolean\n pendingDeletes: any[]\n afterQueueFlush\n beforeQueueFlush\n\n constructor(params) {\n super(params)\n const settings: any = {}\n if (isPlainObject(this.value)) {\n Object.assign(settings, this.value)\n }\n\n this.as = settings.as || this.allBindings.get('as')\n\n this.data = settings.data || (unwrap(this.$context.$rawData) === this.value ? this.$context.$rawData : this.value)\n\n this.container = virtualElements.isStartComment(this.$element) ? this.$element.parentNode : this.$element\n this.generateContext = this.createContextGenerator(this.as)\n this.$indexHasBeenRequested = false\n\n this.templateNode = makeTemplateNode(\n settings.templateNode || (settings.name ? document.getElementById(settings.name)?.cloneNode(true) : this.$element)\n )\n ;['afterAdd', 'beforeRemove', 'afterQueueFlush', 'beforeQueueFlush'].forEach(p => {\n this[p] = settings[p] || this.allBindings.get(p)\n })\n\n this.changeQueue = new Array()\n this.firstLastNodesList = new Array()\n this.indexesToDelete = new Array()\n this.rendering_queued = false\n this.pendingDeletes = new Array()\n\n // Expose the conditional so that if the `foreach` data is empty, successive\n // 'else' bindings will appear.\n this.isNotEmpty = observable(Boolean(unwrap(this.data).length))\n domData.set(this.$element, 'conditional', { elseChainSatisfied: this.isNotEmpty })\n\n // Remove existing content.\n virtualElements.emptyNode(this.$element)\n\n // Prime content\n const primeData = unwrap(this.data)\n if (primeData && primeData.map) {\n this.onArrayChange(primeData.map(valueToChangeAddItem), true)\n } else {\n this.completeBinding()\n }\n\n // Watch for changes\n if (isObservable(this.data)) {\n if (!(this.data as ObservableArray).indexOf) {\n // Make sure the observable is trackable.\n this.data = this.data.extend({ trackArrayChanges: true })\n }\n this.changeSubs = this.data.subscribe(this.onArrayChange, this, 'arrayChange')\n }\n }\n\n override dispose() {\n if (this.changeSubs) {\n this.changeSubs.dispose()\n }\n this.flushPendingDeletes()\n }\n\n // If the array changes we register the change.\n onArrayChange(changeSet, isInitial) {\n const changeMap: ChangeMap = { added: [], deleted: [] }\n\n // knockout array change notification index handling:\n // - sends the original array indexes for deletes\n // - sends the new array indexes for adds\n // - sorts them all by index in ascending order\n // because of this, when checking for possible batch additions, any delete can be between to adds with neighboring indexes, so only additions should be checked\n for (let i = 0, len = changeSet.length; i < len; i++) {\n if (changeMap.added.length && changeSet[i].status === 'added') {\n let lastAdd = changeMap.added[changeMap.added.length - 1]\n const lastIndex = lastAdd.isBatch ? lastAdd.index + lastAdd.values!.length - 1 : lastAdd.index\n if (lastIndex + 1 === changeSet[i].index) {\n if (!lastAdd.isBatch) {\n // transform the last addition into a batch addition object\n lastAdd = { isBatch: true, status: 'added', index: lastAdd.index, values: [lastAdd.value] }\n changeMap.added.splice(changeMap.added.length - 1, 1, lastAdd)\n }\n lastAdd.values!.push(changeSet[i].value)\n continue\n }\n }\n\n changeMap[changeSet[i].status].push(changeSet[i])\n }\n\n if (changeMap.deleted.length > 0) {\n this.changeQueue.push.apply(this.changeQueue, changeMap.deleted)\n this.changeQueue.push({ status: 'clearDeletedIndexes' })\n }\n\n this.changeQueue.push.apply(this.changeQueue, changeMap.added)\n // Once a change is registered, the ticking count-down starts for the processQueue.\n if (this.changeQueue.length > 0 && !this.rendering_queued) {\n this.rendering_queued = true\n if (isInitial) {\n this.processQueue()\n } else {\n ForEachBinding.animateFrame.call(window, () => this.processQueue())\n }\n }\n }\n\n startQueueFlush() {\n // Callback so folks can do things before the queue flush.\n if (typeof this.beforeQueueFlush === 'function') {\n this.beforeQueueFlush(this.changeQueue)\n }\n }\n\n endQueueFlush() {\n // Callback so folks can do things.\n if (typeof this.afterQueueFlush === 'function') {\n this.afterQueueFlush(this.changeQueue)\n }\n }\n\n // Reflect all the changes in the queue in the DOM, then wipe the queue.\n processQueue() {\n const isEmpty = !unwrap(this.data).length\n let lowestIndexChanged = MAX_LIST_SIZE\n\n this.startQueueFlush()\n\n arrayForEach(this.changeQueue, changeItem => {\n if (typeof changeItem.index === 'number') {\n lowestIndexChanged = Math.min(lowestIndexChanged, changeItem.index)\n }\n this[changeItem.status](changeItem)\n })\n this.flushPendingDeletes()\n this.rendering_queued = false\n\n // Update our indexes.\n if (this.$indexHasBeenRequested) {\n this.updateIndexes(lowestIndexChanged)\n }\n\n this.endQueueFlush()\n this.changeQueue = new Array()\n\n // Update the conditional exposed on the domData\n if (isEmpty !== !this.isNotEmpty()) {\n this.isNotEmpty(!isEmpty)\n }\n }\n\n /**\n * Once the $index has been asked for once, start calculating it.\n * Note that this significantly degrades performance, from O(1) to O(n)\n * for arbitrary changes to the list.\n */\n _first$indexRequest(ctx$indexRequestedFrom) {\n this.$indexHasBeenRequested = true\n for (let i = 0, len = this.firstLastNodesList.length; i < len; ++i) {\n const ctx = this.getContextStartingFrom(this.firstLastNodesList[i].first)\n // Overwrite the defineProperty.\n if (ctx) {\n ctx.$index = observable(i)\n }\n }\n return ctx$indexRequestedFrom.$index()\n }\n\n _contextExtensions($ctx) {\n Object.assign($ctx, { $list: this.data })\n if (this.$indexHasBeenRequested) {\n $ctx.$index = $ctx.$index || observable()\n } else {\n Object.defineProperty($ctx, '$index', {\n value: () => this._first$indexRequest($ctx),\n configurable: true,\n writable: true\n })\n }\n return $ctx\n }\n\n /**\n * Return a function that generates the context for a given node.\n *\n * We generate a single function that reduces our inner-loop calculations,\n * which has a good chance of being optimized by the browser.\n *\n * @param {string} as The name given to each item in the list\n * @param {bool} index Whether to calculate indexes\n * @return {function} A function(dataValue) that returns the context\n */\n createContextGenerator(as) {\n const $ctx = this.$context\n if (as) {\n return v => this._contextExtensions($ctx.extend({ [as]: v }))\n } else {\n return v => $ctx.createChildContext(v, undefined, ctx => this._contextExtensions(ctx))\n }\n }\n\n updateFirstLastNodesList(index, children) {\n const first = children[0]\n const last = children[children.length - 1]\n this.firstLastNodesList.splice(index, 0, { first, last })\n }\n\n // Process a changeItem with {status: 'added', ...}\n added(changeItem: ChangeAddItem) {\n const index = changeItem.index\n const valuesToAdd = changeItem.isBatch ? changeItem.values : [changeItem.value]\n const referenceElement = this.getLastNodeBeforeIndex(index)\n // gather all childnodes for a possible batch insertion\n const allChildNodes: Node[] = []\n const asyncBindingResults = new Array()\n let children\n\n for (let i = 0, len = valuesToAdd.length; i < len; ++i) {\n // we check if we have a pending delete with reusable nodesets for this data, and if yes, we reuse one nodeset\n const pendingDelete = this.getPendingDeleteFor(valuesToAdd[i])\n if (pendingDelete && pendingDelete.nodesets.length) {\n children = pendingDelete.nodesets.pop()\n this.updateFirstLastNodesList(index + i, children)\n } else {\n const templateClone = this.templateNode.cloneNode(true)\n children = virtualElements.childNodes(templateClone)\n this.updateFirstLastNodesList(index + i, children)\n\n // Apply bindings first, and then process child nodes,\n // because bindings can add childnodes.\n const bindingResult = applyBindingsToDescendants(this.generateContext(valuesToAdd[i]), templateClone)\n asyncBindingResults.push(bindingResult)\n }\n\n allChildNodes.push(...children)\n }\n\n if (typeof this.afterAdd === 'function') {\n this.afterAdd({\n nodeOrArrayInserted: this.insertAllAfter(allChildNodes, referenceElement),\n foreachInstance: this\n })\n } else {\n this.insertAllAfter(allChildNodes, referenceElement)\n }\n\n this.completeBinding(Promise.all(asyncBindingResults))\n }\n\n getNodesForIndex(index) {\n const result = new Array()\n let ptr = this.firstLastNodesList[index].first\n const last = this.firstLastNodesList[index].last\n result.push(ptr)\n while (ptr && ptr !== last) {\n ptr = ptr.nextSibling!\n result.push(ptr)\n }\n return result\n }\n\n getLastNodeBeforeIndex(index) {\n if (index < 1 || index - 1 >= this.firstLastNodesList.length) {\n return null\n }\n return this.firstLastNodesList[index - 1].last\n }\n\n /**\n * Get the active (focused) node, if it's a child of the given node.\n */\n activeChildElement(node) {\n const active = document.activeElement\n if (domNodeIsContainedBy(active!, node)) {\n return active\n }\n return null\n }\n\n insertAllAfter(nodeOrNodeArrayToInsert, insertAfterNode) {\n let frag\n let len\n let i\n let active: any = null\n const containerNode = this.$element\n\n // Poor man's node and array check.\n if (nodeOrNodeArrayToInsert.nodeType === undefined && nodeOrNodeArrayToInsert.length === undefined) {\n throw new Error('Expected a single node or a node array')\n }\n if (nodeOrNodeArrayToInsert.nodeType !== undefined) {\n active = this.activeChildElement(nodeOrNodeArrayToInsert)\n virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode)\n return [nodeOrNodeArrayToInsert]\n } else if (nodeOrNodeArrayToInsert.length === 1) {\n active = this.activeChildElement(nodeOrNodeArrayToInsert[0])\n virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert[0], insertAfterNode)\n } else if (supportsDocumentFragment) {\n frag = document.createDocumentFragment()\n for (i = 0, len = nodeOrNodeArrayToInsert.length; i !== len; ++i) {\n active = active || this.activeChildElement(nodeOrNodeArrayToInsert[i])\n frag.appendChild(nodeOrNodeArrayToInsert[i])\n }\n virtualElements.insertAfter(containerNode, frag, insertAfterNode)\n } else {\n // Nodes are inserted in reverse order - pushed down immediately after\n // the last node for the previous item or as the first node of element.\n for (i = nodeOrNodeArrayToInsert.length - 1; i >= 0; --i) {\n active = active || this.activeChildElement(nodeOrNodeArrayToInsert[i])\n const child = nodeOrNodeArrayToInsert[i]\n if (!child) {\n break\n }\n virtualElements.insertAfter(containerNode, child, insertAfterNode)\n }\n }\n\n if (active) {\n active.focus()\n }\n\n return nodeOrNodeArrayToInsert\n }\n\n // checks if the deleted data item should be handled with delay for a possible reuse at additions\n shouldDelayDeletion(data) {\n return data && (typeof data === 'object' || typeof data === 'function')\n }\n\n // gets the pending deletion info for this data item\n getPendingDeleteFor(data: any[]) {\n const index = data && data[PENDING_DELETE_INDEX_SYM]\n if (index === undefined) return null\n return this.pendingDeletes[index]\n }\n\n // tries to find the existing pending delete info for this data item, and if it can't, it registeres one\n getOrCreatePendingDeleteFor(data) {\n let pd = this.getPendingDeleteFor(data)\n if (pd) {\n return pd\n }\n pd = { data: data, nodesets: [] }\n data[PENDING_DELETE_INDEX_SYM] = this.pendingDeletes.length\n this.pendingDeletes.push(pd)\n return pd\n }\n\n // Process a changeItem with {status: 'deleted', ...}\n deleted(changeItem) {\n // if we should delay the deletion of this data, we add the nodeset to the pending delete info object\n if (this.shouldDelayDeletion(changeItem.value)) {\n const pd = this.getOrCreatePendingDeleteFor(changeItem.value)\n pd.nodesets.push(this.getNodesForIndex(changeItem.index))\n } else {\n // simple data, just remove the nodes\n this.removeNodes(this.getNodesForIndex(changeItem.index))\n }\n this.indexesToDelete.push(changeItem.index)\n }\n\n // removes a set of nodes from the DOM\n removeNodes(nodes) {\n if (!nodes.length) {\n return\n }\n\n function removeFn() {\n const parent = nodes[0].parentNode\n for (let i = nodes.length - 1; i >= 0; --i) {\n cleanNode(nodes[i])\n parent.removeChild(nodes[i])\n }\n }\n\n if (this.beforeRemove) {\n const beforeRemoveReturn = this.beforeRemove({ nodesToRemove: nodes, foreachInstance: this }) || {}\n // If beforeRemove returns a `then`\u2013able e.g. a Promise, we remove\n // the nodes when that thenable completes. We pass any errors to\n // ko.onError.\n if (typeof beforeRemoveReturn.then === 'function') {\n beforeRemoveReturn.then(removeFn, options.onError)\n }\n } else {\n removeFn()\n }\n }\n\n // flushes the pending delete info store\n // this should be called after queue processing has finished, so that data items and remaining (not reused) nodesets get cleaned up\n // we also call it on dispose not to leave any mess\n flushPendingDeletes() {\n for (let i = 0, len = this.pendingDeletes.length; i !== len; ++i) {\n const pd = this.pendingDeletes[i]\n while (pd.nodesets.length) {\n this.removeNodes(pd.nodesets.pop())\n }\n if (pd.data && pd.data[PENDING_DELETE_INDEX_SYM] !== undefined) {\n delete pd.data[PENDING_DELETE_INDEX_SYM]\n }\n }\n this.pendingDeletes = new Array()\n }\n\n // We batch our deletion of item indexes in our parallel array.\n // See brianmhunt/knockout-fast-foreach#6/#8\n clearDeletedIndexes() {\n // We iterate in reverse on the presumption (following the unit tests) that KO's diff engine\n // processes diffs (esp. deletes) monotonically ascending i.e. from index 0 -> N.\n for (let i = this.indexesToDelete.length - 1; i >= 0; --i) {\n this.firstLastNodesList.splice(this.indexesToDelete[i], 1)\n }\n this.indexesToDelete = new Array()\n }\n\n updateIndexes(fromIndex) {\n let ctx\n for (let i = fromIndex, len = this.firstLastNodesList.length; i < len; ++i) {\n ctx = this.getContextStartingFrom(this.firstLastNodesList[i].first)\n if (ctx) {\n ctx.$index(i)\n }\n }\n }\n\n getContextStartingFrom(node) {\n let ctx\n while (node) {\n ctx = contextFor(node)\n if (ctx) {\n return ctx\n }\n node = node.nextSibling\n }\n }\n\n /**\n * Set whether the binding is always synchronous.\n * Useful during testing.\n */\n static setSync(toggle) {\n const w = options.global\n if (toggle) {\n ForEachBinding.animateFrame = function (frame) {\n frame()\n }\n } else {\n ForEachBinding.animateFrame =\n w.requestAnimationFrame ||\n w.webkitRequestAnimationFrame ||\n w.mozRequestAnimationFrame ||\n w.msRequestAnimationFrame ||\n function (cb) {\n return w.setTimeout(cb, 1000 / 60)\n }\n }\n }\n\n override get controlsDescendants() {\n return true\n }\n static override get allowVirtualElements() {\n return true\n }\n\n /* TODO: Remove; for legacy/testing */\n static get ForEach() {\n return this\n }\n static get PENDING_DELETE_INDEX_SYM() {\n return PENDING_DELETE_INDEX_SYM\n }\n}\n", "import { ForEachBinding } from './foreach'\n\nexport const bindings = { foreach: ForEachBinding }\n\n// By default, foreach will be async.\nForEachBinding.setSync(false)\n", "import { isObservable } from '@tko/observable'\n\nimport { Provider } from '@tko/provider'\n\nimport type { BindingContext } from '@tko/bind'\n\nexport const NATIVE_BINDINGS = Symbol('Knockout native bindings')\n\n/**\n * Retrieve the binding accessors that are already attached to\n * a node under the `NATIVE_BINDINGS` symbol.\n *\n * Used by the jsxToNode function.\n */\nexport default class NativeProvider extends Provider {\n override get FOR_NODE_TYPES() {\n return [Node.ELEMENT_NODE, Node.TEXT_NODE]\n }\n override get preemptive() {\n return true\n }\n\n override nodeHasBindings(node: Node, context?: BindingContext): boolean {\n if (!node[NATIVE_BINDINGS]) {\n return false\n }\n return Object.keys(node[NATIVE_BINDINGS] || {}).some(key => key.startsWith('ko-'))\n }\n\n /**\n * There can be only one preprocessor; when there are native bindings,\n * prevent re-entrance (and likely XSS) from the `{{ }}` provider.\n */\n override preprocessNode(node: Node): Node[] | null {\n return node[NATIVE_BINDINGS] ? [node] : null\n }\n\n onlyBindings([name]) {\n return name.startsWith('ko-')\n }\n\n valueAsAccessor([name, value]) {\n const bindingName = name.replace(/^ko-/, '')\n const valueFn = isObservable(value) ? value : () => value\n return { [bindingName]: valueFn }\n }\n\n /**\n * Return as valueAccessor function all the entries matching `ko-*`\n * @param {Node} node\n */\n override getBindingAccessors(node: Node, context?: BindingContext) {\n const bindings = (Object.entries(node[NATIVE_BINDINGS] || {}) as any).filter(this.onlyBindings)\n if (!bindings.length) {\n return null\n }\n return Object.assign({}, ...bindings.map(this.valueAsAccessor))\n }\n\n /**\n * Add a named-value to the given node.\n * @param {Node} node\n * @param {string} name\n * @param {any} value\n */\n static addValueToNode(node: Node, name: string, value: any) {\n const obj = node[NATIVE_BINDINGS] || (node[NATIVE_BINDINGS] = {})\n obj[name] = value\n }\n\n /**\n *\n * @param {Node} node\n * @return {object} the stored values\n */\n static getNodeValues(node: Node): any {\n return node[NATIVE_BINDINGS]\n }\n}\n", "import { cleanNode } from '@tko/utils'\n\nconst DELAY_MS = 25\nconst MAX_CLEAN_AT_ONCE = 1000\nconst cleanNodeQueue = new Array()\nlet cleanNodeTimeoutID: ReturnType<typeof setTimeout> | null = null\n\nexport function queueCleanNode(node) {\n cleanNodeQueue.push(node)\n triggerCleanTimeout()\n}\n\nfunction triggerCleanTimeout() {\n if (!cleanNodeTimeoutID && cleanNodeQueue.length) {\n cleanNodeTimeoutID = setTimeout(flushCleanQueue, DELAY_MS)\n }\n}\n\nfunction flushCleanQueue() {\n cleanNodeTimeoutID = null\n const nodes = cleanNodeQueue.splice(0, MAX_CLEAN_AT_ONCE)\n for (const node of nodes) {\n cleanNode(node)\n }\n triggerCleanTimeout()\n}\n", "import { LifeCycle } from '@tko/lifecycle'\n\nimport { safeStringify, isThenable } from '@tko/utils'\n\nimport { applyBindings, contextFor } from '@tko/bind'\n\nimport { isObservable, unwrap, observable } from '@tko/observable'\n\nimport type { Observable } from '@tko/observable'\n\nimport { isComputed } from '@tko/computed'\n\nimport { NativeProvider, NATIVE_BINDINGS } from '@tko/provider.native'\n\nimport { queueCleanNode } from './jsxClean'\n\nexport const ORIGINAL_JSX_SYM = Symbol('Knockout - Original JSX')\n\nconst NAMESPACES = {\n svg: 'http://www.w3.org/2000/svg',\n html: 'http://www.w3.org/1999/xhtml',\n xml: 'http://www.w3.org/XML/1998/namespace',\n xlink: 'http://www.w3.org/1999/xlink',\n xmlns: 'http://www.w3.org/2000/xmlns/'\n}\n\nfunction isIterable(v) {\n return v && typeof v[Symbol.iterator] === 'function'\n}\n\n/**\n * JSX object from a pre-processor.\n * @typedef {Object} JSX\n * @property {string} elementName becomes the `tagName`\n * @property {Array.<JSX>} children\n * @property {object} attributes\n */\n\ninterface JSX {\n elementName: string\n children: Array<JSX>\n attributes: any\n}\n\ninterface Changes {\n index: number\n status: string\n value: any\n}\n\n/**\n * Observe a variety of possible cases from JSX, modifying the\n * `parentNode` at `insertBefore` with the result.\n */\nexport class JsxObserver extends LifeCycle {\n adoptedInsertBefore: boolean\n noInitialBinding: boolean\n insertBefore: Node | null\n parentNode: Node\n parentNodeTarget: Node | null\n subscriptionsForNode: any\n nodeArrayOrObservableAtIndex: any\n xmlns: any\n\n /**\n * @param {any} jsxOrObservable take a long list of permutations\n */\n constructor(\n jsxOrObservable: any,\n parentNode: Node,\n insertBefore: Node | null = null,\n xmlns?: any,\n noInitialBinding?: boolean | null\n ) {\n super()\n\n const parentNodeIsComment = parentNode.nodeType === Node.COMMENT_NODE\n\n const parentNodeTarget = this.getParentTarget(parentNode)\n\n if (isObservable(jsxOrObservable)) {\n jsxOrObservable.extend({ trackArrayChanges: true })\n this.subscribe(jsxOrObservable, this.observableArrayChange, 'arrayChange')\n\n if (!insertBefore) {\n const insertAt = parentNodeIsComment ? parentNode.nextSibling : null\n insertBefore = this.createComment('O')\n parentNodeTarget?.insertBefore(insertBefore, insertAt)\n } else {\n this.adoptedInsertBefore = true\n }\n }\n\n if (parentNodeIsComment && !insertBefore) {\n // Typcially: insertBefore becomes <!-- /ko -->\n insertBefore = parentNode.nextSibling\n // Mark this so we don't remove the next node - since we didn't create it.\n this.adoptedInsertBefore = true\n }\n\n this.anchorTo(insertBefore || parentNode)\n\n Object.assign(this, {\n insertBefore,\n noInitialBinding,\n parentNode,\n parentNodeTarget,\n xmlns,\n nodeArrayOrObservableAtIndex: [],\n subscriptionsForNode: new Map()\n })\n\n const jsx = unwrap(jsxOrObservable)\n const computed = isComputed(jsxOrObservable)\n\n if (computed || (jsx !== null && jsx !== undefined)) {\n this.observableArrayChange(this.createInitialAdditions(jsx))\n }\n this.noInitialBinding = false\n }\n\n getParentTarget(parentNode: Node): Node | null {\n if ('content' in parentNode) {\n return (parentNode as HTMLTemplateElement).content\n }\n if (parentNode.nodeType === Node.COMMENT_NODE) {\n return (parentNode as Comment).parentNode\n }\n return parentNode\n }\n\n remove() {\n this.dispose()\n }\n override dispose() {\n super.dispose()\n const ib = this.insertBefore\n const insertBeforeIsChild = ib && this.parentNodeTarget === ib.parentNode\n if (insertBeforeIsChild && !this.adoptedInsertBefore) {\n this.parentNodeTarget?.removeChild(ib)\n }\n this.removeAllPriorNodes()\n Object.assign(this, {\n parentNode: null,\n parentNodeTarget: null,\n insertBefore: null,\n nodeArrayOrObservableAtIndex: []\n })\n for (const subscriptions of this.subscriptionsForNode.values()) {\n subscriptions.forEach(s => s.dispose())\n }\n this.subscriptionsForNode.clear()\n }\n\n createInitialAdditions(possibleIterable): Changes[] {\n const status = 'added'\n if (typeof possibleIterable === 'object' && possibleIterable !== null && Symbol.iterator in possibleIterable) {\n possibleIterable = [...possibleIterable]\n }\n\n return Array.isArray(possibleIterable)\n ? possibleIterable.map((value, index) => ({ index, status, value }))\n : [{ status, index: 0, value: possibleIterable }]\n }\n\n /**\n * Note: array change notification indexes are:\n * - to the original array indexes for deletes\n * - to the new array indexes for adds\n * - sorted by index in ascending order\n */\n observableArrayChange(changes: Changes[]) {\n const adds: [number, any][] = []\n const dels: [number, any][] = []\n\n for (const index in changes) {\n const change = changes[index]\n if (change.status === 'added') {\n adds.push([change.index, change.value])\n } else {\n dels.unshift([change.index, change.value])\n }\n }\n\n dels.forEach(change => this.delChange(...change))\n adds.forEach(change => this.addChange(...change))\n }\n\n /**\n * Add a change at the given index.\n *\n * @param {int} index\n * @param {string|object|Array|Observable.string|Observable.Array|Observable.object} jsx\n */\n addChange(\n index: number,\n jsx: string | object | Array<any> | Observable<string> | Observable<any[]> | Observable<object>\n ) {\n this.nodeArrayOrObservableAtIndex.splice(index, 0, this.injectNode(jsx, this.lastNodeFor(index)!))\n }\n\n injectNode(jsx, nextNode: Node) {\n let nodeArrayOrObservable\n\n if (isObservable(jsx)) {\n const { parentNode, xmlns } = this\n const observer = new JsxObserver(jsx, parentNode, nextNode, xmlns, this.noInitialBinding)\n nodeArrayOrObservable = [observer]\n } else if (typeof jsx !== 'string' && isIterable(jsx)) {\n nodeArrayOrObservable = new Array()\n for (const child of jsx) {\n nodeArrayOrObservable.unshift(this.injectNode(child, nextNode))\n }\n } else {\n const $context = contextFor(this.parentNode as HTMLElement)\n const isInsideTemplate = 'content' in this.parentNode\n const shouldApplyBindings = $context && !isInsideTemplate && !this.noInitialBinding\n\n if (Array.isArray(jsx)) {\n nodeArrayOrObservable = jsx.map(j => this.anyToNode(j))\n } else {\n nodeArrayOrObservable = [this.anyToNode(jsx)]\n }\n\n for (const node of nodeArrayOrObservable) {\n this.parentNodeTarget?.insertBefore(node, nextNode)\n if (shouldApplyBindings && this.canApplyBindings(node)) {\n applyBindings($context, node)\n }\n }\n }\n\n return nodeArrayOrObservable\n }\n\n /**\n * True when Node is a type suitable for applyBindings i.e. a HTMLElement\n * or a Comment.\n * @param {Node} node\n */\n canApplyBindings(node: Node): boolean {\n return node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.COMMENT_NODE\n }\n\n delChange(index: number, _: any) {\n this.removeNodeArrayOrObservable(this.nodeArrayOrObservableAtIndex[index])\n this.nodeArrayOrObservableAtIndex.splice(index, 1)\n }\n\n getSubscriptionsForNode(node: Node) {\n if (!this.subscriptionsForNode.has(node)) {\n const subscriptions = new Array()\n this.subscriptionsForNode.set(node, subscriptions)\n return subscriptions\n }\n return this.subscriptionsForNode.get(node)\n }\n\n isJsx(jsx): jsx is JSX {\n return typeof jsx.elementName === 'string' && 'children' in jsx && 'attributes' in jsx\n }\n\n /**\n * @param {any} value acceptable to turn into a Node\n *\n * The one thing `any` cannot be here is an Array or Observable; both those\n * cases are handled with new JsxObservers.\n */\n anyToNode(any) {\n if (isThenable(any)) {\n return this.futureJsxNode(any)\n }\n\n switch (typeof any) {\n case 'object':\n if (any instanceof Error) {\n return this.createComment(any.toString())\n }\n if (any === null) {\n return this.createComment(String(any))\n }\n if (any instanceof Node) {\n return this.cloneJSXorMoveNode(any)\n }\n if (Symbol.iterator in any) {\n return any\n }\n break\n case 'function':\n return this.anyToNode(any())\n case 'undefined':\n case 'symbol':\n return this.createComment(String(any))\n case 'string':\n return this.createTextNode(any)\n case 'boolean':\n case 'number':\n case 'bigint':\n default:\n return this.createTextNode(String(any))\n }\n\n return this.isJsx(any) ? this.jsxToNode(any) : this.createComment(safeStringify(any))\n }\n\n createComment(string) {\n const node = document.createComment(string)\n node[NATIVE_BINDINGS] = true\n return node\n }\n\n createTextNode(string) {\n const node = document.createTextNode(string)\n node[NATIVE_BINDINGS] = true\n return node\n }\n\n /**\n * Clone a node; if that node was originally from JSX, we clone from there\n * so we preserve binding handlers.\n *\n * @param {HTMLElement} node\n */\n cloneJSXorMoveNode(node: Node) {\n return ORIGINAL_JSX_SYM in node ? this.jsxToNode(node[ORIGINAL_JSX_SYM] as JSX) : node\n }\n\n /**\n * @param {JSX} jsx to convert to a node.\n */\n jsxToNode(jsx: JSX) {\n const xmlns = jsx.attributes.xmlns || NAMESPACES[jsx.elementName] || this.xmlns\n const node = document.createElementNS(xmlns || NAMESPACES.html, jsx.elementName)\n\n /** Slots need to be able to replicate with the attributes, which\n * are not preserved when cloning from template nodes. */\n node[ORIGINAL_JSX_SYM] = jsx\n\n if (isObservable(jsx.attributes)) {\n const subscriptions = this.getSubscriptionsForNode(node)\n subscriptions.push(\n jsx.attributes.subscribe(attrs => {\n this.updateAttributes(node, unwrap(attrs))\n })\n )\n }\n this.updateAttributes(node, unwrap(jsx.attributes))\n\n this.addDisposable(new JsxObserver(jsx.children, node, null, xmlns, this.noInitialBinding))\n\n return node\n }\n\n futureJsxNode(promise) {\n const obs = observable()\n promise.then(obs).catch(e => obs(e instanceof Error ? e : Error(e)))\n const jo = new JsxObserver(obs, this.parentNode, null, this.xmlns, this.noInitialBinding)\n this.addDisposable(jo)\n return jo.insertBefore\n }\n\n updateAttributes(node, attributes) {\n const subscriptions = this.getSubscriptionsForNode(node)\n const toRemove = new Set([...node.attributes].map(n => n.name))\n\n for (const [name, value] of Object.entries(attributes || {})) {\n toRemove.delete(name)\n if (isObservable(value)) {\n subscriptions.push(value.subscribe(attr => this.setNodeAttribute(node, name, value)))\n }\n this.setNodeAttribute(node, name, value)\n }\n\n for (const name of toRemove) {\n this.setNodeAttribute(node, name, undefined)\n }\n }\n\n /**\n * See https://stackoverflow.com/a/52572048\n * @param {string} attr element attribute\n * @return {string} namespace argument for setAtttributeNS\n */\n getNamespaceOfAttribute(attr: string): string | null {\n const [prefix, ...unqualifiedName] = attr.split(':')\n if (prefix === 'xmlns' || (unqualifiedName.length && NAMESPACES[prefix])) {\n return NAMESPACES[prefix]\n }\n return null\n }\n\n /**\n *\n * @param {HTMLElement} node\n * @param {string} name\n * @param {any} valueOrObservable\n */\n setNodeAttribute(node: HTMLElement, name: string, valueOrObservable: any) {\n const value = unwrap(valueOrObservable)\n NativeProvider.addValueToNode(node, name, valueOrObservable)\n if (value === undefined) {\n node.removeAttributeNS(null, name)\n } else if (isThenable(valueOrObservable)) {\n Promise.resolve(valueOrObservable).then(v => this.setNodeAttribute(node, name, v))\n } else {\n const ns = this.getNamespaceOfAttribute(name)\n node.setAttributeNS(ns, name, String(value))\n }\n }\n\n /**\n * @param {int} index\n * @return {Comment} that immediately precedes this.\n */\n lastNodeFor(index: number): Comment | null {\n const nodesAtIndex = this.nodeArrayOrObservableAtIndex[index] || []\n const [lastNodeOfPrior] = nodesAtIndex.slice(-1)\n const insertBefore =\n lastNodeOfPrior instanceof JsxObserver ? lastNodeOfPrior.insertBefore : lastNodeOfPrior || this.insertBefore\n if (insertBefore) {\n return insertBefore.parentNode ? insertBefore : null\n }\n return null\n }\n\n removeAllPriorNodes() {\n const { nodeArrayOrObservableAtIndex } = this\n while (nodeArrayOrObservableAtIndex.length) {\n this.removeNodeArrayOrObservable(nodeArrayOrObservableAtIndex.pop())\n }\n }\n\n removeNodeArrayOrObservable(nodeArrayOrObservable) {\n for (const nodeOrObservable of nodeArrayOrObservable) {\n if (nodeOrObservable instanceof JsxObserver) {\n nodeOrObservable.dispose()\n continue\n }\n const node = nodeOrObservable\n delete node[ORIGINAL_JSX_SYM]\n this.detachAndDispose(node)\n const subscriptions = this.subscriptionsForNode.get(node)\n if (subscriptions) {\n subscriptions.forEach(s => s.dispose())\n this.subscriptionsForNode.delete(node)\n }\n }\n }\n\n /**\n * Detach the given node, and dispose of its children.\n *\n * The cleaning can trigger a lot of garbage collection, so we defer that.\n */\n detachAndDispose(node) {\n if (isIterable(node)) {\n for (const child of node) {\n this.detachAndDispose(child)\n }\n } else {\n node.remove()\n }\n queueCleanNode(node)\n }\n}\n\nexport default JsxObserver\n", "import { isObservable, unwrap } from '@tko/observable'\n\nimport { ORIGINAL_JSX_SYM } from './JsxObserver'\n\n/**\n *\n * @param {any} possibleJsx Test whether this value is JSX.\n *\n * True for\n * { elementName }\n * [{elementName}]\n * observable({elementName} | [])\n *\n * Any observable will return truthy if its value is an array that doesn't\n * contain HTML elements. Template nodes should not be observable unless they\n * are JSX.\n *\n * There's a bit of guesswork here that we could nail down with more test cases.\n */\nexport function maybeJsx(possibleJsx) {\n if (isObservable(possibleJsx)) {\n return true\n }\n const value = unwrap(possibleJsx)\n if (!value) {\n return false\n }\n if (value.elementName) {\n return true\n }\n if (!Array.isArray(value) || !value.length) {\n return false\n }\n if (value[0] instanceof window.Node) {\n return false\n }\n return true\n}\n\nexport function getOriginalJsxForNode(node) {\n return node[ORIGINAL_JSX_SYM]\n}\n\n/**\n * Convert JSX into an object that can be consumed by TKO.\n * Mimics React.createElement\n * @param {string} e tagName of the element\n * @param {object|null} a attributes of the element\n * @param {...string|object} c children of the element\n */\nexport function createElement(elementName, attributes, ...children) {\n return elementName === Fragment\n ? children\n : { elementName: elementName, attributes: attributes || {}, children: [...children] }\n}\n\nexport const Fragment = Symbol('JSX Fragment')\n", "//\n// Binding Handler for Components\n//\n\nimport { virtualElements, makeArray, cloneNodes } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport { DescendantBindingHandler } from '@tko/bind'\n\nimport { JsxObserver, maybeJsx } from '@tko/utils.jsx'\n\nimport { NativeProvider } from '@tko/provider.native'\n\nimport { LifeCycle } from '@tko/lifecycle'\n\nimport registry from '@tko/utils.component'\n\nimport type { BindingContext } from '@tko/bind'\n\nlet componentLoadingOperationUniqueId = 0\n\nexport default class ComponentBinding extends DescendantBindingHandler {\n childBindingContext: BindingContext\n currentLoadingOperationId: number | null\n currentViewModel: any\n latestComponentName: string\n loadingOperationId: number\n originalChildNodes: Node[]\n constructor(params: any) {\n super(params)\n this.originalChildNodes = makeArray(virtualElements.childNodes(this.$element as Node))\n this.computed('computeApplyComponent')\n }\n\n cloneTemplateIntoElement(componentName: string, template: any, element: Node) {\n if (!template) {\n throw new Error(\"Component '\" + componentName + \"' has no template\")\n }\n\n if (maybeJsx(template)) {\n virtualElements.emptyNode(element)\n this.addDisposable(new JsxObserver(template, element, null, undefined, true))\n } else {\n const clonedNodesArray = cloneNodes(template)\n virtualElements.setDomNodeChildren(element, clonedNodesArray)\n }\n }\n\n createViewModel(componentDefinition: any, element: Node, originalChildNodes: Node[], componentParams: any) {\n const componentViewModelFactory = componentDefinition.createViewModel\n return componentViewModelFactory\n ? componentViewModelFactory.call(componentDefinition, componentParams, {\n element,\n templateNodes: originalChildNodes\n })\n : componentParams // Template-only component\n }\n\n /**\n * Return the $componentTemplateSlotNodes for the given template\n * @param {HTMLElement|jsx} template\n */\n makeTemplateSlotNodes(originalChildNodes: HTMLElement[]) {\n return Object.assign({}, ...this.genSlotsByName(originalChildNodes))\n }\n\n /**\n * Iterate over the templateNodes, yielding each '<element slot=name>'\n * as an object * of {name: element}.\n * @param {HTMLElement[]} templateNodes\n */\n *genSlotsByName(templateNodes: HTMLElement[]): Generator<{ [key: string]: HTMLElement }, void, unknown> {\n for (const node of templateNodes) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue\n }\n const slotName = node.getAttribute('slot')\n if (!slotName) {\n continue\n }\n yield { [slotName]: node }\n }\n }\n\n computeApplyComponent() {\n const value = unwrap(this.value)\n let componentName: string\n let componentParams: any\n\n if (typeof value === 'string') {\n componentName = value\n } else {\n componentName = unwrap(value.name)\n componentParams = NativeProvider.getNodeValues(this.$element) || unwrap(value.params)\n }\n\n this.latestComponentName = componentName\n\n if (!componentName) {\n throw new Error('No component name specified')\n }\n\n this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId\n registry.get(componentName, (defn: any) => this.applyComponentDefinition(componentName, componentParams, defn))\n }\n\n makeChildBindingContext($component: any): any {\n const ctxExtender = (ctx: any) =>\n Object.assign(ctx, {\n $component,\n $componentTemplateNodes: this.originalChildNodes,\n $componentTemplateSlotNodes: this.makeTemplateSlotNodes(this.originalChildNodes as HTMLElement[])\n })\n\n return this.$context.createChildContext($component, undefined, ctxExtender)\n }\n\n applyComponentDefinition(componentName: string, componentParams: any, componentDefinition: any) {\n // If this is not the current load operation for this element, ignore it.\n if (this.currentLoadingOperationId !== this.loadingOperationId || this.latestComponentName !== componentName) {\n return\n }\n\n // Clean up previous state\n this.cleanUpState()\n\n const element = this.$element\n\n // Instantiate and bind new component. Implicitly this cleans any old DOM nodes.\n if (!componentDefinition) {\n throw new Error(\"Unknown component '\" + componentName + \"'\")\n }\n\n if (componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, componentDefinition.template, element)\n }\n\n const componentViewModel = this.createViewModel(\n componentDefinition,\n element,\n this.originalChildNodes,\n componentParams\n )\n\n this.childBindingContext = this.makeChildBindingContext(componentViewModel)\n\n const viewTemplate = componentViewModel && componentViewModel.template\n\n if (!viewTemplate && !componentDefinition.template) {\n throw new Error(\"Component '\" + componentName + \"' has no template\")\n }\n\n if (!componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, viewTemplate, element)\n }\n\n if (componentViewModel instanceof LifeCycle) {\n componentViewModel.anchorTo(this.$element)\n }\n\n this.currentViewModel = componentViewModel\n\n const onBinding = this.onBindingComplete.bind(this, componentViewModel)\n this.applyBindingsToDescendants(this.childBindingContext, onBinding)\n }\n\n onBindingComplete(componentViewModel, bindingResult) {\n if (componentViewModel && componentViewModel.koDescendantsComplete) {\n componentViewModel.koDescendantsComplete(this.$element)\n }\n this.completeBinding(bindingResult)\n }\n\n cleanUpState() {\n const currentView = this.currentViewModel\n const currentViewDispose = currentView && currentView.dispose\n if (typeof currentViewDispose === 'function') {\n currentViewDispose.call(currentView)\n }\n this.currentViewModel = null\n // Any in-flight loading operation is no longer relevant, so make sure we ignore its completion\n this.currentLoadingOperationId = null\n }\n\n override dispose() {\n this.cleanUpState()\n super.dispose()\n }\n\n override get controlsDescendants() {\n return true\n }\n static override get allowVirtualElements() {\n return true\n }\n}\n", "/**\n * Slots work as follows (you'll note a similarity to vue).\n *\n * Component template definitions have <slot name='abc'> tags.\n *\n * <template id='custom-component-template'>\n * <slot name='abc'>\n *\n * Component use these slots with e.g.\n *\n * <custom-component>\n * <template slot='abc'>\n *\n * When the component template is rendered, the `slot` binding will map\n * every binding to its respective slot.\n */\nimport { virtualElements } from '@tko/utils'\n\nimport { JsxObserver, getOriginalJsxForNode } from '@tko/utils.jsx'\n\nimport { DescendantBindingHandler, contextFor } from '@tko/bind'\n\n/**\n * SlotBinding replaces a slot with\n */\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor(params: any) {\n super(params)\n const slotNode = this.getSlot(this.value)\n const $slotContext = contextFor(slotNode)\n\n const childContext = this.$context.extend({ $slotContext, $slotData: $slotContext && $slotContext.$data })\n\n this.replaceSlotWithNode(this.$element, slotNode)\n\n this.applyBindingsToDescendants(childContext)\n }\n\n /**\n *\n * @param {HTMLElement} nodeToReplace\n * @param {HTMLElement} slotValue\n */\n replaceSlotWithNode(nodeInComponentTemplate: HTMLElement, slotNode: Node): void {\n const nodes = this.cloneNodeFromOriginal(slotNode)\n virtualElements.emptyNode(nodeInComponentTemplate)\n this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true))\n }\n\n cloneNodeFromOriginal(node: Node): any[] {\n if (!node) {\n return []\n }\n const jsx = getOriginalJsxForNode(node)\n if (jsx) {\n return jsx.children\n }\n\n if ('content' in node) {\n const clone = document.importNode(node.content as Node, true)\n return [...clone.childNodes]\n }\n\n const nodeArray = Array.isArray(node) ? node : [node]\n return nodeArray.map(n => n.cloneNode(true))\n }\n\n getSlot(slotName: string): Node {\n const { $componentTemplateSlotNodes }: any = this.$context\n\n if (!slotName) {\n return (\n $componentTemplateSlotNodes[''] ||\n [...(this.$context as any).$componentTemplateNodes].filter(n => !n.getAttribute || !n.getAttribute('slot'))\n )\n }\n\n return $componentTemplateSlotNodes[slotName]\n }\n\n static override get allowVirtualElements(): true {\n return true\n }\n}\n", "import component from './componentBinding'\nimport slot from './slotBinding'\nexport const bindings = { component, slot }\n", "import { unwrap, toJS } from '@tko/observable'\n\nconst sproto = String.prototype\n\nexport interface Filters {\n uppercase(value)\n lowercase(value)\n default(value, defaultValue)\n replace(value, search, replace)\n fit(value, length, replacement, trimWhere)\n json(rootObject, space, replacer)\n number(value)\n}\n\nconst filters: Filters = {\n // Convert value to uppercase\n uppercase: function (value) {\n return sproto.toUpperCase.call(unwrap(value))\n },\n\n // Convert value to lowercase\n lowercase: function (value) {\n return sproto.toLowerCase.call(unwrap(value))\n },\n\n // Return default value if the input value is empty or null\n default: function (value, defaultValue) {\n value = unwrap(value)\n if (typeof value === 'function') {\n return value\n }\n if (typeof value === 'string') {\n return sproto.trim.call(value) === '' ? defaultValue : value\n }\n return value == null || value.length == 0 ? defaultValue : value\n },\n\n // Return the value with the search string replaced with the replacement string\n replace: function (value, search, replace) {\n return sproto.replace.call(unwrap(value), search, replace)\n },\n\n fit: function (value, length, replacement, trimWhere) {\n value = unwrap(value)\n if (length && ('' + value).length > length) {\n replacement = '' + (replacement || '...')\n length = length - replacement.length\n value = '' + value\n switch (trimWhere) {\n case 'left':\n return replacement + value.slice(-length)\n case 'middle': {\n const leftLen = Math.ceil(length / 2)\n return value.substr(0, leftLen) + replacement + value.slice(leftLen - length)\n }\n default:\n return value.substr(0, length) + replacement\n }\n } else {\n return value\n }\n },\n\n // Convert a model object to JSON\n json: function (rootObject, space, replacer) {\n // replacer and space are optional\n return JSON.stringify(toJS(rootObject), replacer, space)\n },\n\n // Format a number using the browser's toLocaleString\n number: function (value) {\n return (+unwrap(value)).toLocaleString()\n }\n}\n\n// Export the filters object for general access\nexport { filters }\n", "/**\n * This is a BindingString subclass that converts `function () {}` to lambas,\n * for backwards compatibility.\n *\n */\n\nconst FUNCTION_REX = /\\bfunction\\s*\\(([^)]*)\\)\\s*\\{\\s*(?:(return\\s)?([^}]+?)[;\\s]*)?\\}/g\n\nexport default function functionRewrite(bindingString: string): string {\n return bindingString.replace(FUNCTION_REX, (match, args, returnKeyword, rv) => {\n if (rv && !returnKeyword) {\n rv += ' && undefined'\n }\n const out = `(${args.trim()}) => ${rv}`\n if (!functionRewrite.silent) {\n console.log(`Knockout: Replace \"${match}\" with \"${out}\"`)\n }\n return out\n })\n}\n\nfunctionRewrite.silent = false\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["index_exports", "__export", "index_default", "isArray", "arrayForEach", "array", "action", "actionOwner", "i", "j", "arrayIndexOf", "item", "arrayFirst", "predicate", "predicateOwner", "arrayMap", "mapping", "thisArg", "arrayRemoveItem", "itemToRemove", "index", "arrayGetDistinctValues", "seen", "arrayFilter", "arrayPushAll", "valuesToPush", "addOrRemoveItem", "value", "included", "existingEntryIndex", "makeArray", "arrayLikeObject", "range", "min", "max", "minimum", "maximum", "result", "findMovesInArrayComparison", "left", "right", "limitFailedCompares", "failedCompares", "l", "r", "leftItem", "rightItem", "statusNotInOld", "statusNotInNew", "compareArrays", "oldArray", "newArray", "options", "compareSmallArrayToBigArray", "smlArray", "bigArray", "statusNotInSml", "statusNotInBig", "myMin", "myMax", "editDistanceMatrix", "smlIndex", "smlIndexMax", "bigIndex", "bigIndexMax", "compareRange", "maxDistance", "thisRow", "lastRow", "bigIndexMaxForRow", "bigIndexMinForRow", "northDistance", "westDistance", "editScript", "meMinusOne", "notInSml", "notInBig", "Options", "__publicField", "_a", "jQuery", "html", "throws", "name", "value", "key", "node", "callback", "options", "defineOption", "config", "_value", "options_default", "catchFunctionErrors", "delegate", "options_default", "args", "err", "deferError", "error", "safeSetTimeout", "handler", "timeout", "throttle", "callback", "timeout", "timeoutInstance", "args", "safeSetTimeout", "debounce", "hasOwnProperty", "obj", "propName", "isObjectLike", "extend", "target", "source", "prop", "objectForEach", "action", "objectMap", "mapping", "thisArg", "getObjectOwnProperty", "clonePlainObjectDeep", "seen", "result", "safeStringify", "value", "k", "v", "isThenable", "object", "testOverwrite", "e", "functionSupportsLengthOverwrite", "overwriteLengthPropertyIfSupported", "fn", "descriptor", "stringTrim", "string", "stringStartsWith", "startsWith", "parseJson", "jsonString", "useSymbols", "createSymbolOrString", "identifier", "cssClassNameRegex", "toggleDomNodeCssClass", "node", "classNames", "shouldHaveClass", "addOrRemoveFn", "arrayForEach", "className", "toggleObjectClassPropertyString", "obj", "prop", "currentClassNames", "addOrRemoveItem", "domNodeIsContainedBy", "node", "containedByNode", "parentNode", "domNodeIsAttachedToDocument", "anyDomNodeIsAttachedToDocument", "nodes", "arrayFirst", "tagNameLower", "element", "isDomElement", "obj", "isDocumentFragment", "knownEvents", "knownEventTypesByEventName", "objectForEach", "eventType", "knownEventsForType", "i", "j", "isClickOnCheckableElement", "element", "tagNameLower", "inputType", "registerEventHandler", "handler", "eventOptions", "wrappedHandler", "catchFunctionErrors", "mustUseNative", "jQuery", "options_default", "hasClick", "triggerEvent", "useClickWorkaround", "eventCategory", "event", "data_exports", "__export", "clear", "get", "getOrSet", "nextKey", "set", "datastoreTime", "dataStoreKeyExpandoPropertyName", "dataStoreSymbol", "uniqueId", "isSafeKey", "key", "getDataForNode", "node", "createIfNotFound", "dataForNode", "dataStoreSymbol", "clear", "nextKey", "dataStoreKeyExpandoPropertyName", "get", "set", "value", "getOrSet", "domDataKey", "nextKey", "cleanableNodeTypes", "cleanableNodeTypesWithDescendants", "getDisposeCallbacksCollection", "node", "createIfNotFound", "allDisposeCallbacks", "get", "set", "destroyCallbacksCollection", "cleanSingleNode", "callbacks", "i", "clear", "j", "otherNodeCleanerFunctions", "options_default", "cleanNodesInList", "nodeList", "onlyComments", "cleanedNodes", "lastCleanedNode", "arrayIndexOf", "addDisposeCallback", "callback", "removeDisposeCallback", "callbacksCollection", "arrayRemoveItem", "cleanNode", "removeNode", "addCleaner", "fn", "removeCleaner", "fnIndex", "cleanjQueryData", "jQueryCleanNodeFn", "moveCleanedNodesToContainerElement", "nodes", "nodesArray", "makeArray", "container", "j", "cleanNode", "cloneNodes", "shouldCleanNodes", "newNodesArray", "i", "clonedNode", "setDomNodeChildren", "domNode", "childNodes", "emptyDomNode", "replaceDomNodes", "nodeToReplaceOrNodeArray", "nodesToReplaceArray", "insertionPoint", "parent", "removeNode", "fixUpContinuousNodeArray", "continuousNodeArray", "parentNode", "current", "last", "setOptionNodeSelectionState", "optionNode", "isSelected", "virtualElements_exports", "__export", "allowedBindings", "childNodes", "emptyNode", "endCommentRegex", "firstChild", "getVirtualChildren", "hasBindingValue", "insertAfter", "isEndComment", "isStartComment", "lastChild", "nextSibling", "normaliseVirtualElementDomStructure", "prepend", "previousSibling", "setDomNodeChildren", "startCommentRegex", "virtualNodeBindingValue", "startCommentRegex", "endCommentRegex", "htmlTagsWithOptionallyClosingChildren", "isStartComment", "node", "isEndComment", "isUnmatchedEndComment", "get", "matchedEndCommentDataKey", "getVirtualChildren", "startComment", "allowUnbalanced", "currentNode", "depth", "children", "set", "getMatchingEndComment", "allVirtualChildren", "getUnbalancedChildTags", "childNode", "captureRemaining", "matchingEndComment", "allowedBindings", "hasBindingValue", "childNodes", "emptyNode", "emptyDomNode", "virtualChildren", "i", "j", "removeNode", "setDomNodeChildren", "endCommentNode", "parentNode", "prepend", "containerNode", "nodeToPrepend", "_a", "insertAfter", "nodeToInsert", "insertAfterNode", "firstChild", "lastChild", "nextChild", "lastChildNode", "nextSibling", "previousSibling", "virtualNodeBindingValue", "regexMatch", "normaliseVirtualElementDomStructure", "elementVerified", "tagNameLower", "unbalancedTags", "nodeToInsertBefore", "supportsTemplateTag", "options_default", "simpleHtmlParse", "html", "documentContext", "div", "makeArray", "templateHtmlParse", "template", "jQueryHtmlParse", "jQuery", "parseHtmlFragment", "saferHtml", "validateHTMLInput", "scriptTagPattern", "parseHtmlForTemplateNodes", "nodes", "moveCleanedNodesToContainerElement", "setHtml", "node", "emptyDomNode", "parsedNodes", "emptyNode", "setDomNodeChildren", "setTextContent", "element", "textContent", "value", "innerTextNode", "firstChild", "nextSibling", "hasDomDataExpandoProperty", "selectExtensions", "nextKey", "element", "tagNameLower", "get", "selectElement", "value", "allowUnset", "set", "el", "selection", "i", "n", "optionValue", "strictEqual", "blankEqual", "numericEqual", "memoization_exports", "__export", "memoize", "parseMemoText", "unmemoize", "unmemoizeDomNodeAndDescendants", "memos", "randomMax8HexChars", "generateRandomId", "findMemoNodes", "rootNode", "appendToArray", "memoId", "parseMemoText", "i", "childNodes", "j", "memoize", "callback", "unmemoize", "callbackParams", "unmemoizeDomNodeAndDescendants", "domNode", "extraCallbackParamsArray", "node", "combinedParams", "arrayPushAll", "memoText", "match", "tasks_exports", "__export", "cancel", "resetForTesting", "processTasks", "schedule", "taskQueue", "taskQueueLength", "nextHandle", "nextIndexToProcess", "schedulerGlobal", "options_default", "callback", "scheduledCallback", "toggle", "div", "processTasks", "mark", "countMarks", "task", "deferError", "ex", "scheduledProcess", "scheduleTaskProcessing", "schedule", "func", "cancel", "handle", "index", "resetForTesting", "length", "dependencyDetection_exports", "__export", "begin", "end", "getDependencies", "getDependenciesCount", "ignore", "isInitial", "registerDependency", "SUBSCRIBABLE_SYM", "isSubscribable", "instance", "outerFrames", "currentFrame", "lastId", "getId", "begin", "options", "end", "registerDependency", "subscribable", "isSubscribable", "ignore", "callback", "callbackTarget", "callbackArgs", "getDependenciesCount", "getDependencies", "isInitial", "deferUpdates", "target", "callback", "handle", "ignoreUpdates", "tasks_exports", "Subscription", "target", "observer", "disposeCallback", "__publicField", "removeDisposeCallback", "node", "addDisposeCallback", "primitiveTypes", "valuesArePrimitiveAndEqual", "a", "b", "applyExtenders", "requestedExtenders", "target", "objectForEach", "key", "value", "extenderHandler", "extenders", "options_default", "notify", "notifyWhen", "deferred", "option", "deferUpdates", "rateLimit", "options", "timeout", "method", "limitFunction", "debounce", "throttle", "callback", "LATEST_VALUE", "subscribable", "ko_subscribable_fn", "defaultEvent", "SUBSCRIBABLE_SYM", "instance", "callback", "callbackTarget", "event", "isTC39Callback", "observer", "subscriptionInstance", "Subscription", "arrayRemoveItem", "valueToNotify", "subs", "begin", "i", "end", "versionToCheck", "total", "objectForEach", "eventName", "subscriptions", "oldValue", "newValue", "cb", "nv", "test", "returnValue", "current", "givenRv", "testFn", "v", "options_default", "resolve", "reject", "args", "negated", "applyExtenders", "observable", "initialValue", "Observable", "LATEST_VALUE", "registerDependency", "overwriteLengthPropertyIfSupported", "subscribable", "options_default", "deferUpdates", "valuesArePrimitiveAndEqual", "fn", "peek", "limitNotifySubscribers", "value", "event", "defaultEvent", "limitFunction", "self", "selfIsObservable", "isObservable", "beforeChange", "ignoreBeforeChange", "notifyNextChange", "previousValue", "pendingValue", "didUpdate", "finish", "shouldNotify", "isDirty", "protoProperty", "instance", "proto", "unwrap", "isWriteableObservable", "arrayChangeEventName", "trackArrayChanges", "target", "options", "extend", "trackingChanges", "cachedDiff", "arrayChangeSubscription", "pendingNotifications", "underlyingNotifySubscribersFunction", "underlyingBeforeSubscriptionAddFunction", "underlyingAfterSubscriptionRemoveFunction", "event", "trackChanges", "valueToNotify", "defaultEvent", "previousContents", "currentContents", "changes", "getChanges", "rawArray", "operationName", "args", "diff", "arrayLength", "argsLength", "offset", "pushDiff", "status", "value", "index", "startIndex", "endDeleteIndex", "endAddIndex", "endIndex", "additions", "deletions", "argsIndex", "findMovesInArrayComparison", "compareArrays", "extenders", "observableArray", "initialValues", "result", "observable", "trackArrayChanges", "overwriteLengthPropertyIfSupported", "_a", "isObservableArray", "instance", "isObservable", "valueOrPredicate", "underlyingArray", "removedValues", "predicate", "value", "arrayOfValues", "allValues", "arrayIndexOf", "i", "item", "oldItem", "newItem", "index", "compareFn", "__yieldStar", "arrayForEach", "methodName", "methodCallResult", "maxNestedObservableDepth", "toJS", "rootObject", "mapJsObjectGraph", "valueToMap", "i", "isObservable", "toJSON", "replacer", "space", "plainJavaScriptObject", "mapInputCallback", "visitedObjects", "outputProperties", "visitPropertiesOrArrayEntries", "indexer", "propertyValue", "previouslyMappedValue", "visitorCallback", "propertyName", "LAMBDA", "unwrapOrCall", "a", "b", "looseEqual", "looseNotEqual", "strictEqual", "strictNotEqual", "operators", "unwrap", "__pow", "defineOption", "strict", "IS_EXPR_OR_IDENT", "Node", "_Node", "lhs", "op", "rhs", "__publicField", "operators", "leaf", "context", "globals", "node", "unwrap", "notused", "LAMBDA", "args", "lambdaContext", "lhv", "earlyOut", "rhv", "item", "nodes", "debug", "out", "ops", "i", "prec", "a", "b", "Expression", "nodes", "__publicField", "Node", "parent", "context", "globals", "node", "Arguments", "parser", "args", "__publicField", "parent", "context", "globals", "node", "deReffedArgs", "i", "j", "Node", "IDStart", "IDContinue", "Identifier", "_Identifier", "parser", "token", "dereferences", "__publicField", "value", "$context", "globals", "node", "member", "refs", "$data", "lastValue", "i", "n", "Node", "Arguments", "hasOwnProperty", "parent", "context", "intermediate", "object", "property", "isWriteableObservable", "isObservable", "new_value", "leaf", "root", "isObjectLike", "ch", "IDStart", "IDContinue", "_names", "_Parameters", "parser", "node", "__privateAdd", "Expression", "__privateSet", "e", "context", "args", "__privateGet", "newValues", "name", "index", "Node", "names", "Identifier", "operators", "Parameters", "Ternary", "yes", "no", "__publicField", "Node", "escapee", "Parser", "__publicField", "ch", "p", "second", "c", "m", "name", "msg", "message", "enclosedBy", "number", "string", "options_default", "object", "key", "value", "Node", "v", "hasOwnProperty", "objectKeyIsValue", "Identifier", "delim", "nodes", "plusOp", "operators", "hex", "i", "uffff", "interpolate", "_a", "_b", "array", "opts", "op", "opFn", "isIdentifierChar", "args", "nextFilter", "filter", "ignored", "context", "globals", "node", "argValues", "j", "filterable", "allowMultipleValues", "Parameters", "dereferences", "deref", "Arguments", "Expression", "ternary", "Ternary", "member", "token", "bindings", "sep", "expr", "extend", "clonePlainObjectDeep", "result", "objectForEach", "optionalValue", "options", "currentValue", "unchanged", "source", "acc", "fn", "e", "parseFn", "bindingAccessors", "specials", "bindingToken", "divisionLookBehind", "keywordRegexLookBehind", "parseObjectLiteral", "objectLiteralString", "str", "stringTrim", "result", "toks", "key", "values", "depth", "i", "tok", "c", "match", "computedState", "createSymbolOrString", "DISPOSED_STATE", "computed", "evaluatorFunctionOrOptions", "evaluatorFunctionTarget", "options", "writeFunction", "state", "computedObservable", "dependencyDetection_exports", "subscribable", "extend", "pureComputedOverrides", "deferEvaluationOverrides", "options_default", "extenders", "addDisposeCallback", "computedDisposeDependencyCallback", "id", "entryToDispose", "computedBeginDependencyDetectionCallback", "valuesArePrimitiveAndEqual", "dependencyTracking", "dependentObservables", "objectForEach", "dependency", "target", "trackingObj", "hasOwnProperty", "dirtySub", "changeSub", "throttleEvaluationTimeout", "safeSetTimeout", "notifyChange", "disposeWhen", "changed", "domNodeIsAttachedToDocument", "isInitial", "dependencyDetectionContext", "newValue", "readFunction", "forceEvaluate", "LATEST_VALUE", "limitFunction", "isChange", "removeDisposeCallback", "event", "dependenciesOrder", "arrayForEach", "order", "subscription", "protoProp", "observable", "isComputed", "instance", "isPureComputed", "pureComputed", "throttleExtender", "target", "timeout", "writeTimeoutInstance", "computed", "value", "extenders", "PROXY_SYM", "MIRROR_SYM", "makeComputed", "proxy", "fn", "computed", "setOrCreate", "mirror", "prop", "value", "ctr", "observableArray", "observable", "assignOrUpdate", "object", "key", "target", "unwrap", "receiver", "property", "thisArg", "props", "proto", "desc", "getObservable", "proxied", "peek", "isProxied", "kowhen", "predicate", "context", "resolve", "observable", "pureComputed", "subscription", "value", "when", "callback", "whenFn", "SUBSCRIPTIONS", "createSymbolOrString", "ANCHOR_NODE", "LifeCycle", "_LifeCycle", "Constructor", "target", "mixin", "prop", "observable", "action", "subscriptionType", "params", "proto", "computed", "args", "node", "type", "act", "options", "handler", "eventType", "dispose", "addDisposeCallback", "nodeOrLifeCycle", "s", "subscription", "subscriptions", "contextAncestorBindingInfo", "boundElementDomDataKey", "data_exports", "bindingEvent", "node", "event", "callback", "callbackContext", "bindingInfo", "subscribable", "boundElementDomDataKey", "data_exports", "contextSubscribeSymbol", "inheritParentIndicator", "bindingContext", "dataItemOrAccessor", "parentContext", "dataItemAlias", "extendCallback", "settings", "self", "shouldInheritData", "realDataItemOrAccessor", "isFunc", "isObservable", "options_default", "subscribable", "updateContext", "dataItemOrObservable", "dataItem", "unwrap", "extend", "contextAncestorBindingInfo", "pureComputed", "token", "globals", "node", "$data", "isObjectLike", "_a", "properties", "storedBindingContextForNode", "bindingInfo", "contextFor", "dataFor", "context", "BindingResult", "asyncBindingsApplied", "rootNode", "bindingContext", "__publicField", "__async", "BindingHandler", "LifeCycle", "params", "__publicField", "$element", "valueAccessor", "allBindings", "$context", "v", "va", "isWriteableObservable", "name", "provider", "options_default", "handler", "ResolveSymbol", "AsyncBindingHandler", "resolve", "bindingResult", "PossibleWeakMap", "options_default", "legacyBindingMap", "LegacyBindingHandler", "_LegacyBindingHandler", "BindingHandler", "params", "__publicField", "handler", "e", "key", "newLegacyHandler", "initFn", "disposeFn", "init", "dispose", "virtualElements_exports", "bindingDoesNotRecurseIntoElementTypes", "getBindingProvider", "options_default", "isProviderForNode", "provider", "node", "asProperHandlerClass", "handler", "bindingKey", "LegacyBindingHandler", "getBindingHandlerFromComponent", "$component", "getBindingHandler", "bindingDefinition", "evaluateValueAccessor", "valueAccessor", "applyBindingsToDescendantsInternal", "bindingContext", "elementOrVirtualElement", "asyncBindingsApplied", "nextInQueue", "virtualElements_exports", "currentChild", "preprocessNode", "applyBindingsToNodeAndDescendantsInternal", "bindingEvent", "hasBindings", "nodeOrChildHasBindings", "c", "nodeVerified", "isElement", "shouldApplyBindings", "shouldBindDescendants", "applyBindingsToNodeInternal", "tagNameLower", "topologicalSortBindings", "bindings", "results", "bindingsConsidered", "cyclicDependencyStack", "objectForEach", "pushBinding", "binding", "arrayForEach", "bindingDependencyKey", "arrayIndexOf", "result", "sourceBindings", "bindingInfo", "data_exports", "boundElementDomDataKey", "alreadyBound", "onBindingError", "bindingsUpdater", "getBindings", "computed", "contextSubscribeSymbol", "bindingHandlerThatControlsDescendantBindings", "allBindingHandlers", "getValueAccessor", "optionalValue", "allBindings", "objectMap", "key", "callback", "nodes", "dataFor", "bindingsGenerated", "nodeAsyncBindingPromises", "BindingHandlerClass", "reportBindingError", "during", "errorCaptured", "bindingHandler", "dependencyDetection_exports", "v", "err", "error", "triggerDescendantsComplete", "hasBindingHandler", "hasFirstChild", "accessor", "getBindingContext", "viewModelOrBindingContext", "extendContextCallback", "applyBindingAccessorsToNode", "applyBindingsToNode", "bindingAccessors", "BindingResult", "applyBindingsToDescendants", "rootNode", "applyBindings", "rootContext", "spec", "extend", "e", "message", "originalName", "mapNodeAndRefreshWhenChanged", "containerNode", "mapping", "valueToMap", "callbackAfterAddingNodes", "index", "mappedNodes", "dependentObservable", "computed", "newMappedNodes", "fixUpContinuousNodeArray", "replaceDomNodes", "dependencyDetection_exports", "arrayPushAll", "anyDomNodeIsAttachedToDocument", "lastMappingResultDomDataKey", "data_exports", "deletedItemDummyValue", "setDomNodeChildrenFromArrayMapping", "domNode", "array", "options", "editScript", "lastMappingResult", "isFirstExecution", "newMappingResult", "lastMappingResultIndex", "newMappingResultIndex", "nodesToDelete", "itemsToProcess", "itemsForBeforeRemoveCallbacks", "itemsForMoveCallbacks", "itemsForAfterAddCallbacks", "mapData", "countWaitingForRemove", "itemAdded", "value", "observable", "itemMovedOrRetained", "oldPosition", "callCallback", "callback", "items", "i", "n", "arrayForEach", "node", "lastArray", "arrayMap", "x", "compareOptions", "compareArrays", "editScriptItem", "movedIndex", "itemIndex", "cleanNode", "removeNode", "k", "nextNode", "virtualElements_exports", "lastNode", "extend", "j", "DescendantBindingHandler", "AsyncBindingHandler", "childContext", "callback", "__async", "bindingResult", "applyBindingsToDescendants", "templateScript", "templateTextArea", "templateTemplate", "templateElement", "templateAnonymous", "dataDomDataPrefix", "data_exports", "templatesDomDataKey", "getTemplateDomData", "element", "setTemplateDomData", "data", "domElement", "__publicField", "tagNameLower", "valueToWrite", "elemContentsProperty", "setHtml", "key", "templateData", "nodes", "text", "parseHtmlForTemplateNodes", "anonymousTemplate", "templateEngine", "extend", "templateSource", "bindingContext", "options", "templateDocument", "script", "options_default", "template", "elem", "domElement", "anonymousTemplate", "_templateEngine", "cleanContainerDomDataKey", "data_exports", "setTemplateEngine", "tEngine", "templateEngine", "invokeForEachNodeInContinuousRange", "firstNode", "lastNode", "action", "node", "nextInQueue", "firstOutOfRangeNode", "virtualElements_exports", "activateBindingsOnContinuousNodeArray", "continuousNodeArray", "bindingContext", "afterBindingCallback", "parentNode", "provider", "options_default", "preprocessNode", "nextNodeInRange", "nodePreviousSibling", "newNodes", "fixUpContinuousNodeArray", "applyBindings", "memoization_exports", "getFirstNodeFromPossibleArray", "nodeOrNodeArray", "executeTemplate", "targetNodeOrNodeArray", "renderMode", "template", "options", "templateDocument", "renderedNodesArray", "haveAddedNodesToParent", "replaceDomNodes", "dependencyDetection_exports", "bindingEvent", "resolveTemplateName", "data", "context", "isObservable", "renderTemplate", "dataOrBindingContext", "firstTargetNode", "whenToDispose", "domNodeIsAttachedToDocument", "activelyDisposeWhenNodeIsRemoved", "computed", "templateName", "domNode", "renderTemplateForEach", "arrayOrObservableArray", "targetNode", "parentBindingContext", "arrayItemContext", "executeTemplateForArrayItem", "arrayValue", "index", "activateBindingsCallback", "addedNodesArray", "localSetDomNodeChildrenFromArrayMapping", "newArray", "changeList", "setDomNodeChildrenFromArrayMapping", "shouldHideDestroyed", "isObservableArray", "subscription", "unwrappedArray", "unwrap", "arrayFilter", "item", "templateComputedDomDataKey", "TemplateBindingHandler", "AsyncBindingHandler", "params", "element", "bindingValue", "observable", "nodes", "container", "moveCleanedNodesToContainerElement", "anonymousTemplate", "templateNodes", "value", "shouldDisplay", "templateComputed", "elseChainSatisfied", "dataArray", "innerBindingContext", "newComputed", "oldComputed", "nativeTemplateEngine", "templateEngine", "templateSource", "bindingContext", "options", "templateDocument", "templateNodes", "makeArray", "templateText", "parseHtmlFragment", "setTemplateEngine", "TemplateForEachBindingHandler", "TemplateBindingHandler", "modelValue", "unwrappedValue", "peek", "nativeTemplateEngine", "unwrap", "bindings", "TemplateForEachBindingHandler", "TemplateBindingHandler", "domNodeDisposal", "addDisposeCallback", "removeDisposeCallback", "removeNode", "addCleaner", "removeCleaner", "options_default", "cleanerFn", "utils", "addOrRemoveItem", "arrayFilter", "arrayFirst", "arrayForEach", "arrayGetDistinctValues", "arrayIndexOf", "arrayMap", "arrayPushAll", "arrayRemoveItem", "cloneNodes", "compareArrays", "createSymbolOrString", "data_exports", "extend", "objectForEach", "objectMap", "parseHtmlFragment", "parseJson", "parseObjectLiteral", "peek", "range", "registerEventHandler", "setDomNodeChildrenFromArrayMapping", "setHtml", "setTextContent", "toggleDomNodeCssClass", "triggerEvent", "unwrap", "knockout", "cleanNode", "dependencyDetection_exports", "memoization_exports", "selectExtensions", "tasks_exports", "LifeCycle", "isObservable", "isSubscribable", "isWriteableObservable", "observable", "observableArray", "isObservableArray", "subscribable", "toJS", "toJSON", "proxy", "computed", "isComputed", "isPureComputed", "pureComputed", "when", "nativeTemplateEngine", "renderTemplate", "setTemplateEngine", "templateEngine", "domElement", "anonymousTemplate", "applyBindingAccessorsToNode", "applyBindings", "applyBindingsToDescendants", "applyBindingsToNode", "contextFor", "dataFor", "BindingHandler", "AsyncBindingHandler", "virtualElements_exports", "bindingEvent", "Builder", "provider", "bindings", "extenders", "filters", "options", "__publicField", "bindingsObject", "additionalProperties", "instance", "fn", "BindingHandlerObject", "nameOrObject", "value", "options_default", "nameOrDotted", "name", "Provider", "_Provider", "params", "__publicField", "BindingHandlerObject", "globals", "node", "context", "provider", "LegacyProvider", "callback", "objectMap", "dependencyDetection_exports", "value", "key", "bindings", "providerObject", "parentProvider", "bindingsFn", "BindingStringProvider", "Provider", "key", "value", "handlerName", "property", "handler", "bindingsAddedByHandler", "chainFn", "args", "__yieldStar", "bindingStringOrObjects", "bindingObjectsArray", "parseObjectLiteral", "unknown", "node", "context", "bindingString", "processed", "Parser", "VirtualProvider", "BindingStringProvider", "node", "parent", "childNodes", "virtualBindingString", "openNode", "closeNode", "child", "name", "value", "virtualElements_exports", "context", "DataBindProvider", "BindingStringProvider", "node", "context", "loadingSubscribablesCache", "loadedDefinitionsCache", "loadComponentAndNotify", "componentName", "callback", "_subscribable", "getObjectOwnProperty", "completedAsync", "subscribable", "beginLoadingComponent", "definition", "config", "isSynchronousComponent", "tasks_exports", "getFirstResultFromLoaders", "methodName", "argsExceptCallback", "candidateLoaders", "registry", "currentCandidateLoader", "methodInstance", "wasAborted", "result", "cachedDefinition", "dependencyDetection_exports", "defaultConfigRegistry", "VIEW_MODEL_FACTORY", "register", "componentName", "config", "isRegistered", "ceok", "hasOwnProperty", "unregister", "registry", "defaultLoader", "callback", "result", "errorCallback", "makeErrorCallback", "possiblyGetConfigFromAmd", "loadedConfig", "resolveConfig", "templateConfig", "resolveTemplate", "viewModelConfig", "resolveViewModel", "createViewModelKey", "tryIssueCallback", "makeCallBackWhenZero", "resolvedTemplate", "resolvedViewModel", "parseHtmlFragment", "isDocumentFragment", "makeArray", "element", "isDomElement", "cloneNodesFromTemplateSourceElement", "elemInstance", "args", "params", "fixedInstance", "tagNameLower", "cloneNodes", "message", "ComponentABC", "LifeCycle", "VIEW_MODEL_FACTORY", "params", "componentInfo", "name", "viewModel", "template", "synchronous", "register", "src_default", "ComponentABC", "registry", "register", "isRegistered", "unregister", "defaultLoader", "defaultConfigRegistry", "loaders", "ComponentProvider", "Provider", "node", "parent", "slotName", "openNode", "closeNode", "context", "componentName", "tagName", "tagNameLower", "src_default", "hasDash", "isUnknownEntity", "parser", "Parser", "paramsString", "accessors", "$raw", "objectMap", "value", "computed", "params", "v", "paramValueComputed", "paramValue", "isWriteable", "isWriteableObservable", "unwrap", "AttrProvider", "Provider", "node", "attr", "context", "token", "$context", "$data", "MultiProvider", "Provider", "params", "__publicField", "providers", "p", "globals", "provider", "nodeTypeMap", "nodeType", "k", "node", "context", "newNodes", "bindings", "__yieldStar", "key", "accessor", "attr", "element", "valueAccessor", "_allBindings", "value", "unwrap", "objectForEach", "attrName", "attrValue", "prefixLen", "namespace", "toRemove", "checked", "element", "valueAccessor", "allBindings", "checkedValue", "pureComputed", "unwrap", "useElementValue", "updateModel", "isChecked", "elemValue", "dependencyDetection_exports", "isRadio", "modelValue", "valueIsArray", "writableValue", "rawValueIsNonArrayObservable", "saveOldValue", "oldElemValue", "addOrRemoveItem", "isWriteableObservable", "isCheckbox", "updateView", "arrayIndexOf", "rawValue", "computed", "registerEventHandler", "makeEventHandlerShortcut", "eventName", "element", "valueAccessor", "allBindings", "viewModel", "bindingContext", "newValueAccessor", "result", "eventHandler", "makeDescriptor", "handlerOrObject", "eventsToHandle", "objectForEach", "descriptor", "passive", "capture", "once", "debounce", "throttle", "eventOptions", "eventHandlerFn", "event", "more", "handlerReturnValue", "handler", "bubble", "preventDefault", "possiblyUpdatedViewModel", "argsForHandler", "unwrap", "bubbleMark", "registerEventHandler", "onHandler", "value", "key", "addBinding", "click", "makeEventHandlerShortcut", "css", "element", "valueAccessor", "value", "unwrap", "objectForEach", "className", "shouldHaveClass", "toggleDomNodeCssClass", "stringTrim", "createSymbolOrString", "DescendantsCompleteHandler", "BindingHandler", "enable", "element", "valueAccessor", "value", "unwrap", "disable", "hasfocusUpdatingProperty", "createSymbolOrString", "hasfocusLastValue", "hasfocus", "element", "valueAccessor", "_allBindings", "handleElementFocusChange", "isFocused", "ownerDoc", "active", "e", "modelValue", "isWriteableObservable", "handleElementFocusIn", "handleElementFocusOut", "registerEventHandler", "value", "unwrap", "dependencyDetection_exports", "triggerEvent", "html", "element", "valueAccessor", "setHtml", "let_default", "element", "valueAccessor", "_allBindings", "_viewModel", "bindingContext", "innerContext", "applyBindingsToDescendants", "captionPlaceholder", "options", "element", "tagNameLower", "valueAccessor", "allBindings", "selectedOptions", "arrayFilter", "node", "selectWasPreviouslyEmpty", "multiple", "previousScrollTop", "unwrappedArray", "unwrap", "valueAllowUnset", "includeDestroyed", "arrayToDomNodeChildrenOptions", "captionValue", "filteredArray", "previousSelectedValues", "arrayMap", "selectExtensions", "item", "applyToObject", "object", "predicate", "defaultValue", "predicateType", "itemUpdate", "optionForArrayItem", "arrayEntry", "index", "oldOptions", "option", "setTextContent", "optionValue", "optionText", "setSelectionCallback", "newOptions", "isSelected", "arrayIndexOf", "setOptionNodeSelectionState", "dependencyDetection_exports", "triggerEvent", "callback", "setDomNodeChildrenFromArrayMapping", "selectionChanged", "selectedOptions", "element", "valueAccessor", "_allBindings", "registerEventHandler", "value", "valueToWrite", "arrayForEach", "node", "selectExtensions", "tagNameLower", "newValue", "unwrap", "previousScrollTop", "isSelected", "arrayIndexOf", "setOptionNodeSelectionState", "style", "element", "valueAccessor", "value", "unwrap", "objectForEach", "styleName", "styleValue", "options_default", "all", "letter", "previousStyle", "submit", "element", "valueAccessor", "_allBindings", "_viewModel", "bindingContext", "registerEventHandler", "event", "handlerReturnValue", "value", "text", "element", "valueAccessor", "setTextContent", "MSIE_REGEX", "operaVersion", "safariVersion", "firefoxVersion", "ieVersion", "TextInput", "BindingHandler", "args", "__publicField", "options_default", "arrayForEach", "eventName", "event", "element", "elementValue", "handler", "safeSetTimeout", "modelValue", "unwrap", "TextInputIE", "TextInputLegacySafari", "TextInputLegacyOpera", "TextInputLegacyFirefox", "w", "parseVersion", "matches", "userAgent", "ieMatch", "textInput", "uniqueName", "element", "valueAccessor", "name", "value", "BindingHandler", "args", "__publicField", "applyBindingAccessorsToNode", "arrayForEach", "eventName", "requestedEventsToCatch", "requestedEventsArray", "element", "tagNameLower", "e", "MSIE_REGEX", "selectExtensions", "handler", "stringStartsWith", "safeSetTimeout", "newValue", "unwrap", "dependencyDetection_exports", "elementValue", "allowUnset", "visible", "element", "valueAccessor", "value", "unwrap", "isCurrentlyVisible", "hidden", "using", "element", "valueAccessor", "_allBindings", "_viewModel", "bindingContext", "innerContext", "applyBindingsToDescendants", "bindings", "attr", "checked", "checkedValue", "click", "css", "DescendantsCompleteHandler", "enable", "eventHandler", "disable", "hasfocus", "hidden", "html", "let_default", "onHandler", "options", "selectedOptions", "style", "submit", "text", "textInput", "uniqueName", "using", "value", "visible", "ConditionalBindingHandler", "AsyncBindingHandler", "params", "__publicField", "elseChainSatisfied", "observable", "data_exports", "dependencyDetection_exports", "isFirstRender", "shouldDisplay", "useOriginalNodes", "virtualElements_exports", "nodes", "__async", "cloneNodes", "bound", "applyBindingsToDescendants", "node", "element", "children", "j", "hasElse", "ifNodes", "elseNodes", "target", "i", "cleanNode", "IfBindingHandler", "ConditionalBindingHandler", "args", "__publicField", "unwrap", "shouldDisplay", "UnlessBindingHandler", "WithBindingHandler", "ConditionalBindingHandler", "args", "__publicField", "conditionalFn", "options_default", "unwrap", "ElseBindingHandler", "IfBindingHandler", "__publicField", "unwrap", "node", "virtualElements_exports", "data_exports", "bindings", "IfBindingHandler", "WithBindingHandler", "UnlessBindingHandler", "ElseBindingHandler", "MAX_LIST_SIZE", "isPlainObject", "o", "supportsDocumentFragment", "options_default", "makeTemplateNode", "sourceNode", "container", "parentNode", "arrayForEach", "virtualElements_exports", "child", "valueToChangeAddItem", "value", "index", "PENDING_DELETE_INDEX_SYM", "createSymbolOrString", "_ForEachBinding", "AsyncBindingHandler", "params", "_a", "__publicField", "settings", "unwrap", "p", "observable", "data_exports", "primeData", "isObservable", "changeSet", "isInitial", "changeMap", "i", "len", "lastAdd", "isEmpty", "lowestIndexChanged", "changeItem", "ctx$indexRequestedFrom", "ctx", "$ctx", "as", "v", "children", "first", "last", "valuesToAdd", "referenceElement", "allChildNodes", "asyncBindingResults", "pendingDelete", "templateClone", "bindingResult", "applyBindingsToDescendants", "result", "ptr", "node", "active", "domNodeIsContainedBy", "nodeOrNodeArrayToInsert", "insertAfterNode", "frag", "containerNode", "data", "pd", "nodes", "removeFn", "parent", "cleanNode", "beforeRemoveReturn", "fromIndex", "contextFor", "toggle", "w", "frame", "cb", "ForEachBinding", "bindings", "ForEachBinding", "NATIVE_BINDINGS", "NativeProvider", "Provider", "node", "context", "key", "name", "value", "bindingName", "valueFn", "isObservable", "bindings", "obj", "DELAY_MS", "MAX_CLEAN_AT_ONCE", "cleanNodeQueue", "cleanNodeTimeoutID", "queueCleanNode", "node", "triggerCleanTimeout", "flushCleanQueue", "nodes", "cleanNode", "ORIGINAL_JSX_SYM", "NAMESPACES", "isIterable", "v", "JsxObserver", "_JsxObserver", "LifeCycle", "jsxOrObservable", "parentNode", "insertBefore", "xmlns", "noInitialBinding", "__publicField", "parentNodeIsComment", "parentNodeTarget", "isObservable", "insertAt", "jsx", "unwrap", "isComputed", "_a", "ib", "subscriptions", "possibleIterable", "status", "value", "index", "changes", "adds", "dels", "change", "nextNode", "nodeArrayOrObservable", "child", "$context", "contextFor", "isInsideTemplate", "shouldApplyBindings", "j", "node", "applyBindings", "_", "any", "isThenable", "safeStringify", "string", "NATIVE_BINDINGS", "attrs", "promise", "obs", "observable", "e", "jo", "attributes", "toRemove", "n", "name", "attr", "prefix", "unqualifiedName", "valueOrObservable", "NativeProvider", "ns", "nodesAtIndex", "lastNodeOfPrior", "nodeArrayOrObservableAtIndex", "nodeOrObservable", "queueCleanNode", "JsxObserver_default", "maybeJsx", "possibleJsx", "isObservable", "value", "unwrap", "getOriginalJsxForNode", "node", "ORIGINAL_JSX_SYM", "componentLoadingOperationUniqueId", "ComponentBinding", "DescendantBindingHandler", "params", "__publicField", "makeArray", "virtualElements_exports", "componentName", "template", "element", "maybeJsx", "JsxObserver_default", "clonedNodesArray", "cloneNodes", "componentDefinition", "originalChildNodes", "componentParams", "componentViewModelFactory", "templateNodes", "node", "slotName", "value", "unwrap", "NativeProvider", "src_default", "defn", "$component", "ctxExtender", "ctx", "componentViewModel", "viewTemplate", "LifeCycle", "onBinding", "bindingResult", "currentView", "currentViewDispose", "SlotBinding", "DescendantBindingHandler", "params", "slotNode", "$slotContext", "contextFor", "childContext", "nodeInComponentTemplate", "nodes", "virtualElements_exports", "JsxObserver_default", "node", "jsx", "getOriginalJsxForNode", "n", "slotName", "$componentTemplateSlotNodes", "bindings", "ComponentBinding", "SlotBinding", "sproto", "filters", "value", "unwrap", "defaultValue", "search", "replace", "length", "replacement", "trimWhere", "leftLen", "rootObject", "space", "replacer", "toJS", "FUNCTION_REX", "functionRewrite", "bindingString", "match", "args", "returnKeyword", "rv", "out", "dataBindProvider", "DataBindProvider", "expressionRewriting", "s", "provider", "MultiProvider", "ComponentProvider", "VirtualProvider", "AttrProvider", "builder", "Builder", "bindings", "filters", "options_default", "functionRewrite", "version", "index_default", "src_default"]
|
|
7
7
|
}
|