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

@tko/bind

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tko/bind - npm Package Compare versions

Comparing version
4.0.0
to
4.0.1
+7
-6
dist/applyBindings.js

@@ -1,2 +0,2 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";

@@ -16,6 +16,6 @@ import {

import { computed } from "@tko/computed";
import { dataFor, bindingContext, boundElementDomDataKey, contextSubscribeSymbol } from "./bindingContext";
import { bindingEvent } from "./bindingEvent";
import { BindingResult } from "./BindingResult";
import { LegacyBindingHandler } from "./LegacyBindingHandler";
import { dataFor, bindingContext, boundElementDomDataKey, contextSubscribeSymbol } from "./bindingContext.js";
import { bindingEvent } from "./bindingEvent.js";
import { BindingResult } from "./BindingResult.js";
import { LegacyBindingHandler } from "./LegacyBindingHandler.js";
const bindingDoesNotRecurseIntoElementTypes = {

@@ -90,3 +90,4 @@ // Don't want bindings that operate on text nodes to mutate <script> and <textarea> contents,

}
const shouldApplyBindings = isElement || hasBindings(nodeVerified);
const shouldApplyBindings = isElement || // Case (1)
hasBindings(nodeVerified);
const { shouldBindDescendants } = shouldApplyBindings ? applyBindingsToNodeInternal(nodeVerified, null, bindingContext2, asyncBindingsApplied) : { shouldBindDescendants: true };

@@ -93,0 +94,0 @@ if (shouldBindDescendants && !bindingDoesNotRecurseIntoElementTypes[tagNameLower(nodeVerified)]) {

{
"version": 3,
"sources": ["../src/applyBindings.ts"],
"sourcesContent": ["/* 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 { 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"],
"mappings": "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",
"sourcesContent": ["/* 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"],
"mappings": "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",
"names": ["bindingContext"]
}

@@ -1,2 +0,2 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";

@@ -3,0 +3,0 @@ import {

@@ -1,2 +0,2 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";

@@ -6,3 +6,3 @@ import { extend, options, domData, isObjectLike } from "@tko/utils";

import { unwrap, isObservable } from "@tko/observable";
import { contextAncestorBindingInfo } from "./bindingEvent";
import { contextAncestorBindingInfo } from "./bindingEvent.js";
export const boundElementDomDataKey = domData.nextKey();

@@ -9,0 +9,0 @@ export const contextSubscribeSymbol = /* @__PURE__ */ Symbol("Knockout Context Subscription");

{
"version": 3,
"sources": ["../src/bindingContext.ts"],
"sourcesContent": ["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 { 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"],
"sourcesContent": ["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"],
"mappings": "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",
"names": []
}

@@ -1,2 +0,2 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";

@@ -3,0 +3,0 @@ import { domData } from "@tko/utils";

{
"version": 3,
"sources": ["../src/bindingEvent.ts"],
"sourcesContent": ["import { domData } from '@tko/utils'\nimport { subscribable } from '@tko/observable'\nimport type { Subscribable, SubscriptionCallback } from '@tko/observable'\nimport type Subscription from '@tko/observable/src/Subscription'\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"],
"mappings": ";;AAAA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAItB,aAAM,6BAA6B,uBAAO,sBAAsB;AACvE,MAAM,yBAAyB,QAAQ,QAAQ;AAExC,aAAM,eAAe;AAAA;AAAA,EAE1B,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EAErB,UACE,MACA,OACA,UACA,iBACc;AACd,UAAM,cAAc,QAAQ,SAAS,MAAM,wBAAwB,CAAC,CAAC;AACrE,QAAI,CAAC,YAAY,mBAAmB;AAClC,kBAAY,oBAAoB,IAAI,aAAa;AAAA,IACnD;AACA,WAAQ,YAAY,kBAAmC,UAAU,UAAU,iBAAiB,KAAK;AAAA,EACnG;AAAA,EAEA,OAAO,MAAY,OAAe;AAChC,UAAM,cAAc,QAAQ,IAAI,MAAM,sBAAsB;AAC5D,QAAI,aAAa;AACf,UAAI,YAAY,mBAAmB;AACjC;AAAC,QAAC,YAAY,kBAAmC,kBAAkB,MAAM,KAAK;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AACF;",
"sourcesContent": ["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"],
"mappings": ";;AAAA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAGtB,aAAM,6BAA6B,uBAAO,sBAAsB;AACvE,MAAM,yBAAyB,QAAQ,QAAQ;AAExC,aAAM,eAAe;AAAA;AAAA,EAE1B,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EAErB,UACE,MACA,OACA,UACA,iBACc;AACd,UAAM,cAAc,QAAQ,SAAS,MAAM,wBAAwB,CAAC,CAAC;AACrE,QAAI,CAAC,YAAY,mBAAmB;AAClC,kBAAY,oBAAoB,IAAI,aAAa;AAAA,IACnD;AACA,WAAQ,YAAY,kBAAmC,UAAU,UAAU,iBAAiB,KAAK;AAAA,EACnG;AAAA,EAEA,OAAO,MAAY,OAAe;AAChC,UAAM,cAAc,QAAQ,IAAI,MAAM,sBAAsB;AAC5D,QAAI,aAAa;AACf,UAAI,YAAY,mBAAmB;AACjC;AAAC,QAAC,YAAY,kBAAmC,kBAAkB,MAAM,KAAK;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AACF;",
"names": []
}

@@ -1,2 +0,2 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";

@@ -7,2 +7,15 @@ import { options } from "@tko/utils";

export class BindingHandler extends LifeCycle {
after;
init;
update;
options;
preprocess;
$context;
// most likly BindingContext but params must be typed first
$element;
$data;
bindingCompletion;
valueAccessor;
completeBinding;
allBindings;
constructor(params) {

@@ -9,0 +22,0 @@ super();

{
"version": 3,
"sources": ["../src/BindingHandler.ts"],
"sourcesContent": ["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(handler: BindingHandler, name: string, provider = options.bindingProviderInstance) {\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"],
"mappings": ";;AAAA,SAAS,eAAe;AACxB,SAAS,6BAA6B;AACtC,SAAS,iBAAiB;AAgBnB,aAAM,uBAAgC,UAAU;AAAA,EA+BrD,YAAY,QAAQ;AAClB,UAAM;AACN,UAAM,EAAE,UAAU,eAAe,aAAa,SAAS,IAAI;AAE3D,SAAK,WAAW;AAChB,SAAK,gBAAgB;AACrB,SAAK,cAAc;AACnB,SAAK,WAAW;AAChB,SAAK,QAAQ,SAAS;AAEtB,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EACA,IAAI,MAAM,GAAG;AACX,UAAM,KAAK,KAAK,cAAc;AAC9B,QAAI,sBAAsB,EAAE,GAAG;AAC7B,SAAG,CAAC;AAAA,IACN,OAAO;AACL,WAAK,cAAc,CAAC;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,IAAI,sBAAsB;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,uBAAuB;AAChC,WAAO;AAAA,EACT;AAAA,EACA,WAAW,wBAAwB;AACjC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,mBAA+C;AACjD,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,WAAW,MAAc,WAAW,QAAQ,yBAAyB;AAC1E,aAAS,gBAAgB,IAAI,MAAM,IAAI;AAAA,EACzC;AAAA,EAEA,OAAO,uBAAuB,SAAyB,MAAc,WAAW,QAAQ,yBAAyB;AAC/G,aAAS,gBAAgB,IAAI,MAAM,OAAO;AAAA,EAC5C;AACF;AAMA,MAAM,gBAAgB,uBAAO,wBAAwB;AAE9C,aAAM,4BAA4B,eAAe;AAAA,EACtD,YAAY,QAAQ;AAClB,UAAM,MAAM;AACZ,SAAK,oBAAoB,IAAI,QAAQ,aAAW;AAC9C,WAAK,aAAa,IAAI;AAAA,IACxB,CAAC;AACD,SAAK,kBAAkB,mBAAiB,KAAK,aAAa,EAAE,aAAa;AAAA,EAC3E;AAAA,EAEA,IAAa,mBAAqC;AAChD,WAAO,KAAK;AAAA,EACd;AACF;",
"sourcesContent": ["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"],
"mappings": ";;AAAA,SAAS,eAAe;AACxB,SAAS,6BAA6B;AACtC,SAAS,iBAAiB;AAgBnB,aAAM,uBAAgC,UAAU;AAAA,EACrD;AAAA,EACA;AAAA,EAOA;AAAA,EAOA;AAAA,EACA;AAAA,EAMA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,QAAQ;AAClB,UAAM;AACN,UAAM,EAAE,UAAU,eAAe,aAAa,SAAS,IAAI;AAE3D,SAAK,WAAW;AAChB,SAAK,gBAAgB;AACrB,SAAK,cAAc;AACnB,SAAK,WAAW;AAChB,SAAK,QAAQ,SAAS;AAEtB,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EACA,IAAI,MAAM,GAAG;AACX,UAAM,KAAK,KAAK,cAAc;AAC9B,QAAI,sBAAsB,EAAE,GAAG;AAC7B,SAAG,CAAC;AAAA,IACN,OAAO;AACL,WAAK,cAAc,CAAC;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,IAAI,sBAAsB;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,uBAAuB;AAChC,WAAO;AAAA,EACT;AAAA,EACA,WAAW,wBAAwB;AACjC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,mBAA+C;AACjD,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,WAAW,MAAc,WAAW,QAAQ,yBAAyB;AAC1E,aAAS,gBAAgB,IAAI,MAAM,IAAI;AAAA,EACzC;AAAA,EAEA,OAAO,uBACL,SACA,MACA,WAAW,QAAQ,yBACnB;AACA,aAAS,gBAAgB,IAAI,MAAM,OAAO;AAAA,EAC5C;AACF;AAMA,MAAM,gBAAgB,uBAAO,wBAAwB;AAE9C,aAAM,4BAA4B,eAAe;AAAA,EACtD,YAAY,QAAQ;AAClB,UAAM,MAAM;AACZ,SAAK,oBAAoB,IAAI,QAAQ,aAAW;AAC9C,WAAK,aAAa,IAAI;AAAA,IACxB,CAAC;AACD,SAAK,kBAAkB,mBAAiB,KAAK,aAAa,EAAE,aAAa;AAAA,EAC3E;AAAA,EAEA,IAAa,mBAAqC;AAChD,WAAO,KAAK;AAAA,EACd;AACF;",
"names": []
}

@@ -1,4 +0,9 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";
export class BindingResult {
isSync;
isComplete;
completionPromise;
rootNode;
bindingContext;
constructor({ asyncBindingsApplied, rootNode, bindingContext }) {

@@ -5,0 +10,0 @@ this.rootNode = rootNode;

@@ -5,4 +5,4 @@ {

"sourcesContent": ["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"],
"mappings": ";;AAEO,aAAM,cAAc;AAAA,EAOzB,YAAY,EAAE,sBAAsB,UAAU,eAAe,GAAG;AAC9D,SAAK,WAAW;AAChB,SAAK,iBAAiB;AACtB,SAAK,SAAS,qBAAqB,SAAS;AAC5C,SAAK,aAAa,KAAK;AAEvB,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,oBAAoB,KAAK,2BAA2B,oBAAoB;AAAA,IAC/E;AAAA,EACF;AAAA,EAEA,MAAM,2BAA2B,sBAAgC;AAC/D,UAAM,QAAQ,IAAI,oBAAoB;AACtC,SAAK,aAAa;AAClB,WAAO;AAAA,EACT;AACF;",
"mappings": ";;AAEO,aAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,EAAE,sBAAsB,UAAU,eAAe,GAAG;AAC9D,SAAK,WAAW;AAChB,SAAK,iBAAiB;AACtB,SAAK,SAAS,qBAAqB,SAAS;AAC5C,SAAK,aAAa,KAAK;AAEvB,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,oBAAoB,KAAK,2BAA2B,oBAAoB;AAAA,IAC/E;AAAA,EACF;AAAA,EAEA,MAAM,2BAA2B,sBAAgC;AAC/D,UAAM,QAAQ,IAAI,oBAAoB;AACtC,SAAK,aAAa;AAClB,WAAO;AAAA,EACT;AACF;",
"names": []
}

@@ -1,5 +0,5 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";
import { applyBindingsToDescendants } from "./applyBindings";
import { AsyncBindingHandler } from "./BindingHandler";
import { applyBindingsToDescendants } from "./applyBindings.js";
import { AsyncBindingHandler } from "./BindingHandler.js";
export class DescendantBindingHandler extends AsyncBindingHandler {

@@ -6,0 +6,0 @@ get controlsDescendants() {

@@ -1,8 +0,8 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";
export * from "./bindingContext";
export * from "./applyBindings";
export * from "./arrayToDomNodeChildren";
export { BindingHandler, AsyncBindingHandler } from "./BindingHandler";
export { DescendantBindingHandler } from "./DescendantBindingHandler";
export { bindingEvent } from "./bindingEvent";
export * from "./bindingContext.js";
export * from "./applyBindings.js";
export * from "./arrayToDomNodeChildren.js";
export { BindingHandler, AsyncBindingHandler } from "./BindingHandler.js";
export { DescendantBindingHandler } from "./DescendantBindingHandler.js";
export { bindingEvent } from "./bindingEvent.js";

@@ -1,8 +0,8 @@

// @tko/bind 🥊 4.0.0 MJS
// @tko/bind 🥊 4.0.1 MJS
"use strict";
export * from "./bindingContext";
export * from "./applyBindings";
export * from "./arrayToDomNodeChildren";
export { BindingHandler, AsyncBindingHandler } from "./BindingHandler";
export { DescendantBindingHandler } from "./DescendantBindingHandler";
export { bindingEvent } from "./bindingEvent";
export * from "./bindingContext.js";
export * from "./applyBindings.js";
export * from "./arrayToDomNodeChildren.js";
export { BindingHandler, AsyncBindingHandler } from "./BindingHandler.js";
export { DescendantBindingHandler } from "./DescendantBindingHandler.js";
export { bindingEvent } from "./bindingEvent.js";

@@ -1,5 +0,5 @@

// @tko/bind 🥊 4.0.0 ESM
// @tko/bind 🥊 4.0.1 ESM
"use strict";
import { virtualElements, options } from "@tko/utils";
import { BindingHandler } from "./BindingHandler";
import { BindingHandler } from "./BindingHandler.js";
const PossibleWeakMap = options.global.WeakMap || Map;

@@ -11,2 +11,4 @@ const legacyBindingMap = new PossibleWeakMap();

}
initReturn;
onError;
constructor(params) {

@@ -13,0 +15,0 @@ super(params);

{
"version": 3,
"sources": ["../src/LegacyBindingHandler.ts"],
"sourcesContent": ["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 overriden 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"],
"mappings": ";;AAAA,SAAS,iBAAiB,eAAe;AACzC,SAAS,sBAAsB;AAU/B,MAAM,kBAAkB,QAAQ,OAAO,WAAW;AAClD,MAAM,mBAAmB,IAAI,gBAAgB;AAEtC,aAAM,6BAA6B,eAAe;AAAA,EACvD,IAAI,UAAe;AAGjB,WAAO;AAAA,EACT;AAAA,EAGA,YAAY,QAAa;AACvB,UAAM,MAAM;AACZ,UAAM,UAAU,KAAK;AACrB,SAAK,UAAU,OAAO;AAEtB,QAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,WAAK,cAAc,OAAO;AAAA,IAC5B;AAEA,QAAI;AACF,WAAK,aAAa,QAAQ,QAAQ,QAAQ,KAAK,GAAG,KAAK,UAAU;AAAA,IACnE,SAAS,GAAG;AACV,aAAO,QAAQ,QAAQ,CAAC;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,gBAAsB;AACpB,UAAM,UAAU,KAAK;AACrB,QAAI,OAAO,QAAQ,WAAW,YAAY;AACxC;AAAA,IACF;AACA,QAAI;AACF,cAAQ,OAAO,GAAG,KAAK,UAAU;AAAA,IACnC,SAAS,GAAG;AACV,WAAK,QAAQ,UAAU,CAAC;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,IAAI,aAAoB;AACtB,WAAO,CAAC,KAAK,UAAU,KAAK,eAAe,KAAK,aAAa,KAAK,OAAO,KAAK,QAAQ;AAAA,EACxF;AAAA,EAEA,IAAa,sBAA+B;AAC1C,UAAM,eAAe,KAAK,cAAc,KAAK,WAAW,CAAC;AACzD,WAAO,aAAa;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,eAAe,KAAyB,SAAmB;AAChE,QAAI,iBAAiB,IAAI,OAAO,GAAG;AACjC,aAAO,iBAAiB,IAAI,OAAO;AAAA,IACrC;AACA,UAAM,mBAAmB,KAAK,UAAU,KAAK,OAAO;AACpD,qBAAiB,IAAI,SAAS,gBAAgB;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,UAAU,KAAyB,SAAmB;AAC3D,QAAI,OAAO,YAAY,YAAY;AACjC,YAAM,CAAC,QAAQ,SAAS,IAAI,CAAC,SAAS,QAAQ,OAAO;AACrD,aAAO,cAAc,qBAAqB;AAAA,QACxC,IAAa,UAAU;AACrB,gBAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,gBAAM,UAAU,YAAY,UAAU,KAAK,IAAI,IAAI;AACnD,iBAAO,EAAE,MAAM,QAAQ;AAAA,QACzB;AAAA,QACA,WAAW,QAAQ;AACjB,iBAAO,QAAQ;AAAA,QACjB;AAAA,QACA,WAAoB,uBAAuB;AACzC,iBAAO,QAAQ,wBAAwB,gBAAgB,gBAAgB,GAAI;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO,cAAc,qBAAqB;AAAA,QACxC,IAAa,UAAU;AACrB,iBAAO;AAAA,QACT;AAAA,QACA,WAAW,QAAQ;AACjB,iBAAO,QAAQ;AAAA,QACjB;AAAA,QACA,WAAoB,uBAAuB;AACzC,iBAAO,QAAQ,wBAAwB,gBAAgB,gBAAgB,GAAI;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AACF;",
"sourcesContent": ["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"],
"mappings": ";;AAAA,SAAS,iBAAiB,eAAe;AACzC,SAAS,sBAAsB;AAU/B,MAAM,kBAAkB,QAAQ,OAAO,WAAW;AAClD,MAAM,mBAAmB,IAAI,gBAAgB;AAEtC,aAAM,6BAA6B,eAAe;AAAA,EACvD,IAAI,UAAe;AAGjB,WAAO;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,QAAa;AACvB,UAAM,MAAM;AACZ,UAAM,UAAU,KAAK;AACrB,SAAK,UAAU,OAAO;AAEtB,QAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,WAAK,cAAc,OAAO;AAAA,IAC5B;AAEA,QAAI;AACF,WAAK,aAAa,QAAQ,QAAQ,QAAQ,KAAK,GAAG,KAAK,UAAU;AAAA,IACnE,SAAS,GAAG;AACV,aAAO,QAAQ,QAAQ,CAAC;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,gBAAsB;AACpB,UAAM,UAAU,KAAK;AACrB,QAAI,OAAO,QAAQ,WAAW,YAAY;AACxC;AAAA,IACF;AACA,QAAI;AACF,cAAQ,OAAO,GAAG,KAAK,UAAU;AAAA,IACnC,SAAS,GAAG;AACV,WAAK,QAAQ,UAAU,CAAC;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,IAAI,aAAoB;AACtB,WAAO,CAAC,KAAK,UAAU,KAAK,eAAe,KAAK,aAAa,KAAK,OAAO,KAAK,QAAQ;AAAA,EACxF;AAAA,EAEA,IAAa,sBAA+B;AAC1C,UAAM,eAAe,KAAK,cAAc,KAAK,WAAW,CAAC;AACzD,WAAO,aAAa;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAO,eAAe,KAAyB,SAAmB;AAChE,QAAI,iBAAiB,IAAI,OAAO,GAAG;AACjC,aAAO,iBAAiB,IAAI,OAAO;AAAA,IACrC;AACA,UAAM,mBAAmB,KAAK,UAAU,KAAK,OAAO;AACpD,qBAAiB,IAAI,SAAS,gBAAgB;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,UAAU,KAAyB,SAAmB;AAC3D,QAAI,OAAO,YAAY,YAAY;AACjC,YAAM,CAAC,QAAQ,SAAS,IAAI,CAAC,SAAS,QAAQ,OAAO;AACrD,aAAO,cAAc,qBAAqB;AAAA,QACxC,IAAa,UAAU;AACrB,gBAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,gBAAM,UAAU,YAAY,UAAU,KAAK,IAAI,IAAI;AACnD,iBAAO,EAAE,MAAM,QAAQ;AAAA,QACzB;AAAA,QACA,WAAW,QAAQ;AACjB,iBAAO,QAAQ;AAAA,QACjB;AAAA,QACA,WAAoB,uBAAuB;AACzC,iBAAO,QAAQ,wBAAwB,gBAAgB,gBAAgB,GAAI;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO,cAAc,qBAAqB;AAAA,QACxC,IAAa,UAAU;AACrB,iBAAO;AAAA,QACT;AAAA,QACA,WAAW,QAAQ;AACjB,iBAAO,QAAQ;AAAA,QACjB;AAAA,QACA,WAAoB,uBAAuB;AACzC,iBAAO,QAAQ,wBAAwB,gBAAgB,gBAAgB,GAAI;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AACF;",
"names": []
}
{
"version": "4.0.0",
"version": "4.0.1",
"name": "@tko/bind",
"description": "TKO DOM-Observable Binding",
"module": "dist/bind.js",
"module": "dist/index.js",
"dependencies": {
"@tko/computed": "^4.0.0",
"@tko/lifecycle": "^4.0.0",
"@tko/observable": "^4.0.0",
"@tko/provider": "^4.0.0",
"@tko/utils": "^4.0.0",
"@tko/computed": "^4.0.1",
"@tko/lifecycle": "^4.0.1",
"@tko/observable": "^4.0.1",
"@tko/provider": "^4.0.1",
"@tko/utils": "^4.0.1",
"tslib": "^2.2.0"
},
"peerDependencies": {
"@tko/binding.foreach": "^4.0.0"
"@tko/binding.foreach": "^4.0.1"
},
"files": [
"dist/",
"helpers/"
"dist/"
],

@@ -31,7 +30,2 @@ "repository": {

"homepage": "https://tko.io",
"karma": {
"frameworks": [
"jasmine"
]
},
"__about__": "These are copied into all packages/*/package.json",

@@ -48,5 +42,7 @@ "licenses": [

"import": "./dist/index.js"
},
"./helpers/*": "./helpers/*"
}
},
"scripts": {
"build": "bun ../../tools/build.ts"
}
}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display