{
  "version": 3,
  "sources": ["../index.ts", "../src/NativeProvider.ts"],
  "sourcesContent": ["export * from './src'\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"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,wBAA6B;AAE7B,sBAAyB;AAIlB,IAAM,kBAAkB,uBAAO,0BAA0B;AAQhE,IAAqB,iBAArB,cAA4C,yBAAS;AAAA,EACnD,IAAa,iBAAiB;AAC5B,WAAO,CAAC,KAAK,cAAc,KAAK,SAAS;AAAA,EAC3C;AAAA,EACA,IAAa,aAAa;AACxB,WAAO;AAAA,EACT;AAAA,EAES,gBAAgB,MAAY,SAAmC;AACtE,QAAI,CAAC,KAAK,eAAe,GAAG;AAC1B,aAAO;AAAA,IACT;AACA,WAAO,OAAO,KAAK,KAAK,eAAe,KAAK,CAAC,CAAC,EAAE,KAAK,SAAO,IAAI,WAAW,KAAK,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMS,eAAe,MAA2B;AACjD,WAAO,KAAK,eAAe,IAAI,CAAC,IAAI,IAAI;AAAA,EAC1C;AAAA,EAEA,aAAa,CAAC,IAAI,GAAG;AACnB,WAAO,KAAK,WAAW,KAAK;AAAA,EAC9B;AAAA,EAEA,gBAAgB,CAAC,MAAM,KAAK,GAAG;AAC7B,UAAM,cAAc,KAAK,QAAQ,QAAQ,EAAE;AAC3C,UAAM,cAAU,gCAAa,KAAK,IAAI,QAAQ,MAAM;AACpD,WAAO,EAAE,CAAC,WAAW,GAAG,QAAQ;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMS,oBAAoB,MAAY,SAA0B;AACjE,UAAM,WAAY,OAAO,QAAQ,KAAK,eAAe,KAAK,CAAC,CAAC,EAAU,OAAO,KAAK,YAAY;AAC9F,QAAI,CAAC,SAAS,QAAQ;AACpB,aAAO;AAAA,IACT;AACA,WAAO,OAAO,OAAO,CAAC,GAAG,GAAG,SAAS,IAAI,KAAK,eAAe,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,eAAe,MAAY,MAAc,OAAY;AAC1D,UAAM,MAAM,KAAK,eAAe,MAAM,KAAK,eAAe,IAAI,CAAC;AAC/D,QAAI,IAAI,IAAI;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAAc,MAAiB;AACpC,WAAO,KAAK,eAAe;AAAA,EAC7B;AACF;",
  "names": []
}
