sygnal 5.3.6 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +53 -38
  2. package/dist/astro/client.cjs.js +18 -8106
  3. package/dist/astro/client.cjs.js.map +1 -0
  4. package/dist/astro/client.mjs +17 -8105
  5. package/dist/astro/client.mjs.map +1 -0
  6. package/dist/astro/index.cjs.js +768 -9
  7. package/dist/astro/index.cjs.js.map +1 -0
  8. package/dist/astro/index.mjs +768 -9
  9. package/dist/astro/index.mjs.map +1 -0
  10. package/dist/astro/server.cjs.js +4 -1
  11. package/dist/astro/server.cjs.js.map +1 -0
  12. package/dist/astro/server.mjs +4 -1
  13. package/dist/astro/server.mjs.map +1 -0
  14. package/dist/diagnostics.cjs.js +1297 -0
  15. package/dist/diagnostics.cjs.js.map +1 -0
  16. package/dist/diagnostics.esm.js +1267 -0
  17. package/dist/diagnostics.esm.js.map +1 -0
  18. package/dist/index.cjs.js +2981 -1386
  19. package/dist/index.cjs.js.map +1 -0
  20. package/dist/index.d.ts +848 -111
  21. package/dist/index.esm.js +2997 -1411
  22. package/dist/index.esm.js.map +1 -0
  23. package/dist/jsx-dev-runtime.cjs.js +15 -9
  24. package/dist/jsx-dev-runtime.cjs.js.map +1 -0
  25. package/dist/jsx-dev-runtime.esm.js +15 -9
  26. package/dist/jsx-dev-runtime.esm.js.map +1 -0
  27. package/dist/jsx-runtime.cjs.js +15 -9
  28. package/dist/jsx-runtime.cjs.js.map +1 -0
  29. package/dist/jsx-runtime.esm.js +15 -9
  30. package/dist/jsx-runtime.esm.js.map +1 -0
  31. package/dist/jsx.cjs.js +15 -9
  32. package/dist/jsx.cjs.js.map +1 -0
  33. package/dist/jsx.esm.js +15 -9
  34. package/dist/jsx.esm.js.map +1 -0
  35. package/dist/sygnal.min.js +2 -1
  36. package/dist/sygnal.min.js.map +1 -0
  37. package/dist/vike/+config.cjs.js +1 -0
  38. package/dist/vike/+config.cjs.js.map +1 -0
  39. package/dist/vike/+config.js +1 -0
  40. package/dist/vike/+config.js.map +1 -0
  41. package/dist/vike/ClientOnly.cjs.js +1 -0
  42. package/dist/vike/ClientOnly.cjs.js.map +1 -0
  43. package/dist/vike/ClientOnly.mjs +1 -0
  44. package/dist/vike/ClientOnly.mjs.map +1 -0
  45. package/dist/vike/onRenderClient.cjs.js +1 -0
  46. package/dist/vike/onRenderClient.cjs.js.map +1 -0
  47. package/dist/vike/onRenderClient.mjs +1 -0
  48. package/dist/vike/onRenderClient.mjs.map +1 -0
  49. package/dist/vike/onRenderHtml.cjs.js +1 -0
  50. package/dist/vike/onRenderHtml.cjs.js.map +1 -0
  51. package/dist/vike/onRenderHtml.mjs +1 -0
  52. package/dist/vike/onRenderHtml.mjs.map +1 -0
  53. package/dist/vite/plugin.cjs.js +680 -47
  54. package/dist/vite/plugin.cjs.js.map +1 -0
  55. package/dist/vite/plugin.mjs +680 -47
  56. package/dist/vite/plugin.mjs.map +1 -0
  57. package/llms.txt +250 -0
  58. package/package.json +15 -6
  59. package/src/astro/client.ts +13 -2
  60. package/src/astro/index.d.ts +24 -1
  61. package/src/astro/index.ts +40 -9
  62. package/src/astro/server.ts +3 -1
  63. package/src/collection.ts +5 -2
  64. package/src/component.ts +375 -330
  65. package/src/cycle/dom/MainDOMSource.ts +4 -0
  66. package/src/cycle/dom/classNameModule.ts +74 -0
  67. package/src/cycle/dom/controlledInputModule.ts +33 -0
  68. package/src/cycle/dom/enrichEventStream.ts +9 -3
  69. package/src/cycle/dom/makeDOMDriver.ts +1 -2
  70. package/src/cycle/dom/mockDOMSource.ts +62 -8
  71. package/src/cycle/dom/modules.ts +5 -1
  72. package/src/cycle/state/Collection.ts +13 -3
  73. package/src/cycle/state/StateSource.ts +1 -1
  74. package/src/cycle/state/pickCombine.ts +35 -1
  75. package/src/cycle/state/withState.ts +1 -1
  76. package/src/extra/devtools.ts +8 -0
  77. package/src/extra/diagnostics/checks/collections.ts +67 -0
  78. package/src/extra/diagnostics/checks/dom.ts +241 -0
  79. package/src/extra/diagnostics/checks/events.ts +68 -0
  80. package/src/extra/diagnostics/checks/index.ts +109 -0
  81. package/src/extra/diagnostics/checks/inspect.ts +319 -0
  82. package/src/extra/diagnostics/checks/props.ts +51 -0
  83. package/src/extra/diagnostics/checks/public.d.ts +211 -0
  84. package/src/extra/diagnostics/checks/rxjsHints.ts +88 -0
  85. package/src/extra/diagnostics/checks/shared.ts +119 -0
  86. package/src/extra/diagnostics/checks/state.ts +55 -0
  87. package/src/extra/diagnostics/checks/strict.ts +112 -0
  88. package/src/extra/diagnostics/checks/wiring.ts +65 -0
  89. package/src/extra/diagnostics/codes.ts +232 -0
  90. package/src/extra/diagnostics/index.ts +328 -0
  91. package/src/extra/diagnostics/legacy.ts +59 -0
  92. package/src/extra/driverFactories.ts +106 -58
  93. package/src/extra/eventDriver.ts +4 -0
  94. package/src/extra/flatten.ts +75 -0
  95. package/src/extra/reducers.ts +12 -5
  96. package/src/extra/run.ts +11 -0
  97. package/src/extra/testing.ts +890 -180
  98. package/src/extra/xstreamExtras.ts +269 -0
  99. package/src/index.d.ts +428 -17
  100. package/src/index.ts +7 -6
  101. package/src/pragma/index.ts +14 -9
  102. package/src/switchable.ts +10 -8
  103. package/src/vike/types.ts +21 -4
  104. package/src/vite/plugin.d.ts +95 -2
  105. package/src/vite/plugin.ts +730 -55
  106. package/dist/astro/astro/client.d.ts +0 -5
  107. package/dist/astro/astro/index.d.ts +0 -16
  108. package/dist/astro/astro/server.d.ts +0 -12
  109. package/dist/astro/client.d.ts +0 -5
  110. package/dist/astro/client.esm.js +0 -4665
  111. package/dist/astro/collection.d.ts +0 -12
  112. package/dist/astro/component.d.ts +0 -22
  113. package/dist/astro/cycle/dom/BodyDOMSource.d.ts +0 -10
  114. package/dist/astro/cycle/dom/DOMSource.d.ts +0 -11
  115. package/dist/astro/cycle/dom/DocumentDOMSource.d.ts +0 -12
  116. package/dist/astro/cycle/dom/ElementFinder.d.ts +0 -8
  117. package/dist/astro/cycle/dom/EventDelegator.d.ts +0 -34
  118. package/dist/astro/cycle/dom/IsolateModule.d.ts +0 -23
  119. package/dist/astro/cycle/dom/MainDOMSource.d.ts +0 -32
  120. package/dist/astro/cycle/dom/PriorityQueue.d.ts +0 -7
  121. package/dist/astro/cycle/dom/ScopeChecker.d.ts +0 -9
  122. package/dist/astro/cycle/dom/SymbolTree.d.ts +0 -9
  123. package/dist/astro/cycle/dom/VNodeWrapper.d.ts +0 -8
  124. package/dist/astro/cycle/dom/enrichEventStream.d.ts +0 -24
  125. package/dist/astro/cycle/dom/fromEvent.d.ts +0 -6
  126. package/dist/astro/cycle/dom/index.d.ts +0 -8
  127. package/dist/astro/cycle/dom/isolate.d.ts +0 -9
  128. package/dist/astro/cycle/dom/makeDOMDriver.d.ts +0 -11
  129. package/dist/astro/cycle/dom/mockDOMSource.d.ts +0 -17
  130. package/dist/astro/cycle/dom/modules.d.ts +0 -5
  131. package/dist/astro/cycle/dom/snabbdom.d.ts +0 -22
  132. package/dist/astro/cycle/dom/styleModule.d.ts +0 -13
  133. package/dist/astro/cycle/dom/thunk.d.ts +0 -11
  134. package/dist/astro/cycle/dom/utils.d.ts +0 -8
  135. package/dist/astro/cycle/isolate/index.d.ts +0 -42
  136. package/dist/astro/cycle/run/adapt.d.ts +0 -6
  137. package/dist/astro/cycle/run/index.d.ts +0 -36
  138. package/dist/astro/cycle/run/internals.d.ts +0 -8
  139. package/dist/astro/cycle/run/types.d.ts +0 -49
  140. package/dist/astro/cycle/state/Collection.d.ts +0 -29
  141. package/dist/astro/cycle/state/StateSource.d.ts +0 -20
  142. package/dist/astro/cycle/state/index.d.ts +0 -5
  143. package/dist/astro/cycle/state/pickCombine.d.ts +0 -3
  144. package/dist/astro/cycle/state/pickMerge.d.ts +0 -3
  145. package/dist/astro/cycle/state/types.d.ts +0 -18
  146. package/dist/astro/cycle/state/withState.d.ts +0 -17
  147. package/dist/astro/extra/classes.d.ts +0 -7
  148. package/dist/astro/extra/devtools.d.ts +0 -78
  149. package/dist/astro/extra/dragDriver.d.ts +0 -20
  150. package/dist/astro/extra/driverFactories.d.ts +0 -12
  151. package/dist/astro/extra/eventDriver.d.ts +0 -9
  152. package/dist/astro/extra/exactState.d.ts +0 -1
  153. package/dist/astro/extra/hmr.d.ts +0 -17
  154. package/dist/astro/extra/logDriver.d.ts +0 -2
  155. package/dist/astro/extra/processDrag.d.ts +0 -19
  156. package/dist/astro/extra/processForm.d.ts +0 -15
  157. package/dist/astro/extra/run.d.ts +0 -13
  158. package/dist/astro/extra/xstreamCompat.d.ts +0 -5
  159. package/dist/astro/index.d.ts +0 -19
  160. package/dist/astro/index.esm.js +0 -27
  161. package/dist/astro/jsx-dev-runtime.d.ts +0 -1
  162. package/dist/astro/jsx-runtime.d.ts +0 -4
  163. package/dist/astro/jsx.d.ts +0 -2
  164. package/dist/astro/pragma/fn.d.ts +0 -7
  165. package/dist/astro/pragma/index.d.ts +0 -7
  166. package/dist/astro/pragma/is.d.ts +0 -10
  167. package/dist/astro/server.d.ts +0 -12
  168. package/dist/astro/server.esm.js +0 -25
  169. package/dist/astro/switchable.d.ts +0 -7
  170. package/dist/collection.d.ts +0 -12
  171. package/dist/component.d.ts +0 -22
  172. package/dist/cycle/dom/BodyDOMSource.d.ts +0 -10
  173. package/dist/cycle/dom/DOMSource.d.ts +0 -11
  174. package/dist/cycle/dom/DocumentDOMSource.d.ts +0 -12
  175. package/dist/cycle/dom/ElementFinder.d.ts +0 -8
  176. package/dist/cycle/dom/EventDelegator.d.ts +0 -34
  177. package/dist/cycle/dom/IsolateModule.d.ts +0 -23
  178. package/dist/cycle/dom/MainDOMSource.d.ts +0 -32
  179. package/dist/cycle/dom/PriorityQueue.d.ts +0 -7
  180. package/dist/cycle/dom/ScopeChecker.d.ts +0 -9
  181. package/dist/cycle/dom/SymbolTree.d.ts +0 -9
  182. package/dist/cycle/dom/VNodeWrapper.d.ts +0 -8
  183. package/dist/cycle/dom/enrichEventStream.d.ts +0 -24
  184. package/dist/cycle/dom/fromEvent.d.ts +0 -6
  185. package/dist/cycle/dom/index.d.ts +0 -8
  186. package/dist/cycle/dom/isolate.d.ts +0 -9
  187. package/dist/cycle/dom/makeDOMDriver.d.ts +0 -11
  188. package/dist/cycle/dom/mockDOMSource.d.ts +0 -17
  189. package/dist/cycle/dom/modules.d.ts +0 -5
  190. package/dist/cycle/dom/snabbdom.d.ts +0 -22
  191. package/dist/cycle/dom/styleModule.d.ts +0 -13
  192. package/dist/cycle/dom/thunk.d.ts +0 -11
  193. package/dist/cycle/dom/utils.d.ts +0 -8
  194. package/dist/cycle/isolate/index.d.ts +0 -42
  195. package/dist/cycle/run/adapt.d.ts +0 -6
  196. package/dist/cycle/run/index.d.ts +0 -36
  197. package/dist/cycle/run/internals.d.ts +0 -8
  198. package/dist/cycle/run/types.d.ts +0 -49
  199. package/dist/cycle/state/Collection.d.ts +0 -29
  200. package/dist/cycle/state/StateSource.d.ts +0 -20
  201. package/dist/cycle/state/index.d.ts +0 -5
  202. package/dist/cycle/state/pickCombine.d.ts +0 -3
  203. package/dist/cycle/state/pickMerge.d.ts +0 -3
  204. package/dist/cycle/state/types.d.ts +0 -18
  205. package/dist/cycle/state/withState.d.ts +0 -17
  206. package/dist/extra/classes.d.ts +0 -7
  207. package/dist/extra/devtools.d.ts +0 -78
  208. package/dist/extra/dragDriver.d.ts +0 -20
  209. package/dist/extra/driverFactories.d.ts +0 -12
  210. package/dist/extra/eventDriver.d.ts +0 -9
  211. package/dist/extra/exactState.d.ts +0 -1
  212. package/dist/extra/hmr.d.ts +0 -17
  213. package/dist/extra/logDriver.d.ts +0 -2
  214. package/dist/extra/processDrag.d.ts +0 -19
  215. package/dist/extra/processForm.d.ts +0 -15
  216. package/dist/extra/run.d.ts +0 -13
  217. package/dist/extra/xstreamCompat.d.ts +0 -5
  218. package/dist/jsx-dev-runtime.d.ts +0 -1
  219. package/dist/jsx-dev-runtime.js +0 -224
  220. package/dist/jsx-runtime.d.ts +0 -4
  221. package/dist/jsx-runtime.js +0 -224
  222. package/dist/jsx.d.ts +0 -2
  223. package/dist/pragma/fn.d.ts +0 -7
  224. package/dist/pragma/index.d.ts +0 -7
  225. package/dist/pragma/is.d.ts +0 -10
  226. package/dist/switchable.d.ts +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sygnal.min.js","sources":["../node_modules/symbol-observable/lib/ponyfill.js","../node_modules/symbol-observable/ponyfill.js","../node_modules/object-keys/isArguments.js","../node_modules/object-keys/index.js","../node_modules/object-keys/implementation.js","../node_modules/get-intrinsic/index.js","../node_modules/has-symbols/index.js","../node_modules/has-symbols/shams.js","../node_modules/has-proto/index.js","../node_modules/function-bind/implementation.js","../node_modules/function-bind/index.js","../node_modules/has/src/index.js","../node_modules/has-property-descriptors/index.js","../node_modules/define-properties/index.js","../node_modules/globalthis/polyfill.js","../node_modules/globalthis/implementation.js","../node_modules/globalthis/shim.js","../node_modules/globalthis/index.js","../node_modules/xstream/index.js","../src/cycle/run/adapt.ts","../src/cycle/isolate/index.ts","../src/extra/xstreamExtras.ts","../src/cycle/state/StateSource.ts","../src/cycle/state/pickMerge.ts","../src/cycle/state/pickCombine.ts","../src/cycle/state/Collection.ts","../src/cycle/state/withState.ts","../node_modules/snabbdom/build/vnode.js","../node_modules/snabbdom/build/is.js","../node_modules/snabbdom/build/h.js","../node_modules/snabbdom/build/htmldomapi.js","../node_modules/snabbdom/build/init.js","../node_modules/snabbdom/build/tovnode.js","../node_modules/snabbdom/build/modules/class.js","../node_modules/snabbdom/build/modules/props.js","../node_modules/snabbdom/build/modules/attributes.js","../node_modules/snabbdom/build/modules/dataset.js","../src/cycle/dom/thunk.ts","../src/cycle/dom/fromEvent.ts","../src/cycle/dom/enrichEventStream.ts","../src/cycle/dom/DocumentDOMSource.ts","../src/cycle/dom/BodyDOMSource.ts","../src/cycle/dom/utils.ts","../src/cycle/dom/ScopeChecker.ts","../src/cycle/dom/ElementFinder.ts","../src/cycle/dom/isolate.ts","../src/extra/diagnostics/codes.ts","../src/extra/diagnostics/index.ts","../src/cycle/dom/MainDOMSource.ts","../src/cycle/dom/VNodeWrapper.ts","../src/cycle/dom/styleModule.ts","../src/cycle/dom/selectModule.ts","../src/cycle/dom/controlledInputModule.ts","../src/cycle/dom/classNameModule.ts","../src/cycle/dom/modules.ts","../src/cycle/dom/SymbolTree.ts","../src/cycle/dom/IsolateModule.ts","../src/cycle/dom/PriorityQueue.ts","../src/cycle/dom/EventDelegator.ts","../src/cycle/dom/makeDOMDriver.ts","../src/cycle/dom/mockDOMSource.ts","../src/extra/diagnostics/legacy.ts","../src/collection.ts","../src/extra/xstreamCompat.ts","../src/switchable.ts","../src/extra/command.ts","../src/component.ts","../src/portal.ts","../src/transition.ts","../src/suspense.ts","../src/slot.ts","../src/extra/dragDriver.ts","../src/cycle/run/internals.ts","../src/cycle/run/index.ts","../src/extra/eventDriver.ts","../src/extra/logDriver.ts","../src/extra/devtools.ts","../src/extra/hmr.ts","../src/extra/classes.ts","../src/pragma/is.ts","../node_modules/extend/index.js","../src/pragma/fn.ts","../src/pragma/index.ts","../src/extra/ssr.ts","../src/extra/testing.ts","../src/extra/reducers.ts","../src/extra/pwa.ts","../src/extra/flatten.ts","../src/extra/ref.ts","../src/extra/driverFactories.ts","../src/extra/exactState.ts","../src/lazy.ts","../src/extra/processDrag.ts","../src/extra/processForm.ts","../src/extra/run.ts"],"sourcesContent":["'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports['default'] = symbolObservablePonyfill;\nfunction symbolObservablePonyfill(root) {\n\tvar result;\n\tvar _Symbol = root.Symbol;\n\n\tif (typeof _Symbol === 'function') {\n\t\tif (_Symbol.observable) {\n\t\t\tresult = _Symbol.observable;\n\t\t} else {\n\n\t\t\t// This just needs to be something that won't trample other user's Symbol.for use\n\t\t\t// It also will guide people to the source of their issues, if this is problematic.\n\t\t\t// META: It's a resource locator!\n\t\t\tresult = _Symbol['for']('https://github.com/benlesh/symbol-observable');\n\t\t\ttry {\n\t\t\t\t_Symbol.observable = result;\n\t\t\t} catch (err) {\n\t\t\t\t// Do nothing. In some environments, users have frozen `Symbol` for security reasons,\n\t\t\t\t// if it is frozen assigning to it will throw. In this case, we don't care, because\n\t\t\t\t// they will need to use the returned value from the ponyfill.\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};","module.exports = require('./lib/ponyfill');\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object) {\n\t\tif (predicate === true) {\n\t\t\tif (object[name] === value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!isFunction(predicate) || !predicate()) {\n\t\t\treturn;\n\t\t}\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (typeof global !== 'object' || !global || global.Math !== Math || global.Array !== Array) {\n\t\treturn implementation;\n\t}\n\treturn global;\n};\n","'use strict';\n\nmodule.exports = global;\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimGlobal() {\n\tvar polyfill = getPolyfill();\n\tif (define.supportsDescriptors) {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(polyfill, 'globalThis');\n\t\tif (!descriptor || (descriptor.configurable && (descriptor.enumerable || !descriptor.writable || globalThis !== polyfill))) { // eslint-disable-line max-len\n\t\t\tObject.defineProperty(polyfill, 'globalThis', {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: polyfill,\n\t\t\t\twritable: true\n\t\t\t});\n\t\t}\n\t} else if (typeof globalThis !== 'object' || globalThis !== polyfill) {\n\t\tpolyfill.globalThis = polyfill;\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = getPolyfill();\n\nvar getGlobal = function () { return polyfill; };\n\ndefineProperties(getGlobal, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = getGlobal;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NO_IL = exports.NO = exports.MemoryStream = exports.Stream = void 0;\nvar ponyfill_1 = require(\"symbol-observable/ponyfill\");\nvar globalthis_1 = require(\"globalthis\");\nvar $$observable = ponyfill_1.default(globalthis_1.getPolyfill());\nvar NO = {};\nexports.NO = NO;\nfunction noop() { }\nfunction cp(a) {\n var l = a.length;\n var b = Array(l);\n for (var i = 0; i < l; ++i)\n b[i] = a[i];\n return b;\n}\nfunction and(f1, f2) {\n return function andFn(t) {\n return f1(t) && f2(t);\n };\n}\nfunction _try(c, t, u) {\n try {\n return c.f(t);\n }\n catch (e) {\n u._e(e);\n return NO;\n }\n}\nvar NO_IL = {\n _n: noop,\n _e: noop,\n _c: noop,\n};\nexports.NO_IL = NO_IL;\n// mutates the input\nfunction internalizeProducer(producer) {\n producer._start = function _start(il) {\n il.next = il._n;\n il.error = il._e;\n il.complete = il._c;\n this.start(il);\n };\n producer._stop = producer.stop;\n}\nvar StreamSub = /** @class */ (function () {\n function StreamSub(_stream, _listener) {\n this._stream = _stream;\n this._listener = _listener;\n }\n StreamSub.prototype.unsubscribe = function () {\n this._stream._remove(this._listener);\n };\n return StreamSub;\n}());\nvar Observer = /** @class */ (function () {\n function Observer(_listener) {\n this._listener = _listener;\n }\n Observer.prototype.next = function (value) {\n this._listener._n(value);\n };\n Observer.prototype.error = function (err) {\n this._listener._e(err);\n };\n Observer.prototype.complete = function () {\n this._listener._c();\n };\n return Observer;\n}());\nvar FromObservable = /** @class */ (function () {\n function FromObservable(observable) {\n this.type = 'fromObservable';\n this.ins = observable;\n this.active = false;\n }\n FromObservable.prototype._start = function (out) {\n this.out = out;\n this.active = true;\n this._sub = this.ins.subscribe(new Observer(out));\n if (!this.active)\n this._sub.unsubscribe();\n };\n FromObservable.prototype._stop = function () {\n if (this._sub)\n this._sub.unsubscribe();\n this.active = false;\n };\n return FromObservable;\n}());\nvar Merge = /** @class */ (function () {\n function Merge(insArr) {\n this.type = 'merge';\n this.insArr = insArr;\n this.out = NO;\n this.ac = 0;\n }\n Merge.prototype._start = function (out) {\n this.out = out;\n var s = this.insArr;\n var L = s.length;\n this.ac = L;\n for (var i = 0; i < L; i++)\n s[i]._add(this);\n };\n Merge.prototype._stop = function () {\n var s = this.insArr;\n var L = s.length;\n for (var i = 0; i < L; i++)\n s[i]._remove(this);\n this.out = NO;\n };\n Merge.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n u._n(t);\n };\n Merge.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Merge.prototype._c = function () {\n if (--this.ac <= 0) {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n }\n };\n return Merge;\n}());\nvar CombineListener = /** @class */ (function () {\n function CombineListener(i, out, p) {\n this.i = i;\n this.out = out;\n this.p = p;\n p.ils.push(this);\n }\n CombineListener.prototype._n = function (t) {\n var p = this.p, out = this.out;\n if (out === NO)\n return;\n if (p.up(t, this.i)) {\n var b = cp(p.vals);\n out._n(b);\n }\n };\n CombineListener.prototype._e = function (err) {\n var out = this.out;\n if (out === NO)\n return;\n out._e(err);\n };\n CombineListener.prototype._c = function () {\n var p = this.p;\n if (p.out === NO)\n return;\n if (--p.Nc === 0)\n p.out._c();\n };\n return CombineListener;\n}());\nvar Combine = /** @class */ (function () {\n function Combine(insArr) {\n this.type = 'combine';\n this.insArr = insArr;\n this.out = NO;\n this.ils = [];\n this.Nc = this.Nn = 0;\n this.vals = [];\n }\n Combine.prototype.up = function (t, i) {\n var v = this.vals[i];\n var Nn = !this.Nn ? 0 : v === NO ? --this.Nn : this.Nn;\n this.vals[i] = t;\n return Nn === 0;\n };\n Combine.prototype._start = function (out) {\n this.out = out;\n var s = this.insArr;\n var n = this.Nc = this.Nn = s.length;\n var vals = this.vals = new Array(n);\n if (n === 0) {\n out._n([]);\n out._c();\n }\n else {\n for (var i = 0; i < n; i++) {\n vals[i] = NO;\n s[i]._add(new CombineListener(i, out, this));\n }\n }\n };\n Combine.prototype._stop = function () {\n var s = this.insArr;\n var n = s.length;\n var ils = this.ils;\n for (var i = 0; i < n; i++)\n s[i]._remove(ils[i]);\n this.out = NO;\n this.ils = [];\n this.vals = [];\n };\n return Combine;\n}());\nvar FromArray = /** @class */ (function () {\n function FromArray(a) {\n this.type = 'fromArray';\n this.a = a;\n }\n FromArray.prototype._start = function (out) {\n var a = this.a;\n for (var i = 0, n = a.length; i < n; i++)\n out._n(a[i]);\n out._c();\n };\n FromArray.prototype._stop = function () {\n };\n return FromArray;\n}());\nvar FromPromise = /** @class */ (function () {\n function FromPromise(p) {\n this.type = 'fromPromise';\n this.on = false;\n this.p = p;\n }\n FromPromise.prototype._start = function (out) {\n var prod = this;\n this.on = true;\n this.p.then(function (v) {\n if (prod.on) {\n out._n(v);\n out._c();\n }\n }, function (e) {\n out._e(e);\n }).then(noop, function (err) {\n setTimeout(function () { throw err; });\n });\n };\n FromPromise.prototype._stop = function () {\n this.on = false;\n };\n return FromPromise;\n}());\nvar Periodic = /** @class */ (function () {\n function Periodic(period) {\n this.type = 'periodic';\n this.period = period;\n this.intervalID = -1;\n this.i = 0;\n }\n Periodic.prototype._start = function (out) {\n var self = this;\n function intervalHandler() { out._n(self.i++); }\n this.intervalID = setInterval(intervalHandler, this.period);\n };\n Periodic.prototype._stop = function () {\n if (this.intervalID !== -1)\n clearInterval(this.intervalID);\n this.intervalID = -1;\n this.i = 0;\n };\n return Periodic;\n}());\nvar Debug = /** @class */ (function () {\n function Debug(ins, arg) {\n this.type = 'debug';\n this.ins = ins;\n this.out = NO;\n this.s = noop;\n this.l = '';\n if (typeof arg === 'string')\n this.l = arg;\n else if (typeof arg === 'function')\n this.s = arg;\n }\n Debug.prototype._start = function (out) {\n this.out = out;\n this.ins._add(this);\n };\n Debug.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n };\n Debug.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n var s = this.s, l = this.l;\n if (s !== noop) {\n try {\n s(t);\n }\n catch (e) {\n u._e(e);\n }\n }\n else if (l)\n console.log(l + ':', t);\n else\n console.log(t);\n u._n(t);\n };\n Debug.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Debug.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n return Debug;\n}());\nvar Drop = /** @class */ (function () {\n function Drop(max, ins) {\n this.type = 'drop';\n this.ins = ins;\n this.out = NO;\n this.max = max;\n this.dropped = 0;\n }\n Drop.prototype._start = function (out) {\n this.out = out;\n this.dropped = 0;\n this.ins._add(this);\n };\n Drop.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n };\n Drop.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n if (this.dropped++ >= this.max)\n u._n(t);\n };\n Drop.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Drop.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n return Drop;\n}());\nvar EndWhenListener = /** @class */ (function () {\n function EndWhenListener(out, op) {\n this.out = out;\n this.op = op;\n }\n EndWhenListener.prototype._n = function () {\n this.op.end();\n };\n EndWhenListener.prototype._e = function (err) {\n this.out._e(err);\n };\n EndWhenListener.prototype._c = function () {\n this.op.end();\n };\n return EndWhenListener;\n}());\nvar EndWhen = /** @class */ (function () {\n function EndWhen(o, ins) {\n this.type = 'endWhen';\n this.ins = ins;\n this.out = NO;\n this.o = o;\n this.oil = NO_IL;\n }\n EndWhen.prototype._start = function (out) {\n this.out = out;\n this.o._add(this.oil = new EndWhenListener(out, this));\n this.ins._add(this);\n };\n EndWhen.prototype._stop = function () {\n this.ins._remove(this);\n this.o._remove(this.oil);\n this.out = NO;\n this.oil = NO_IL;\n };\n EndWhen.prototype.end = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n EndWhen.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n u._n(t);\n };\n EndWhen.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n EndWhen.prototype._c = function () {\n this.end();\n };\n return EndWhen;\n}());\nvar Filter = /** @class */ (function () {\n function Filter(passes, ins) {\n this.type = 'filter';\n this.ins = ins;\n this.out = NO;\n this.f = passes;\n }\n Filter.prototype._start = function (out) {\n this.out = out;\n this.ins._add(this);\n };\n Filter.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n };\n Filter.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n var r = _try(this, t, u);\n if (r === NO || !r)\n return;\n u._n(t);\n };\n Filter.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Filter.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n return Filter;\n}());\nvar FlattenListener = /** @class */ (function () {\n function FlattenListener(out, op) {\n this.out = out;\n this.op = op;\n }\n FlattenListener.prototype._n = function (t) {\n this.out._n(t);\n };\n FlattenListener.prototype._e = function (err) {\n this.out._e(err);\n };\n FlattenListener.prototype._c = function () {\n this.op.inner = NO;\n this.op.less();\n };\n return FlattenListener;\n}());\nvar Flatten = /** @class */ (function () {\n function Flatten(ins) {\n this.type = 'flatten';\n this.ins = ins;\n this.out = NO;\n this.open = true;\n this.inner = NO;\n this.il = NO_IL;\n }\n Flatten.prototype._start = function (out) {\n this.out = out;\n this.open = true;\n this.inner = NO;\n this.il = NO_IL;\n this.ins._add(this);\n };\n Flatten.prototype._stop = function () {\n this.ins._remove(this);\n if (this.inner !== NO)\n this.inner._remove(this.il);\n this.out = NO;\n this.open = true;\n this.inner = NO;\n this.il = NO_IL;\n };\n Flatten.prototype.less = function () {\n var u = this.out;\n if (u === NO)\n return;\n if (!this.open && this.inner === NO)\n u._c();\n };\n Flatten.prototype._n = function (s) {\n var u = this.out;\n if (u === NO)\n return;\n var _a = this, inner = _a.inner, il = _a.il;\n if (inner !== NO && il !== NO_IL)\n inner._remove(il);\n (this.inner = s)._add(this.il = new FlattenListener(u, this));\n };\n Flatten.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Flatten.prototype._c = function () {\n this.open = false;\n this.less();\n };\n return Flatten;\n}());\nvar Fold = /** @class */ (function () {\n function Fold(f, seed, ins) {\n var _this = this;\n this.type = 'fold';\n this.ins = ins;\n this.out = NO;\n this.f = function (t) { return f(_this.acc, t); };\n this.acc = this.seed = seed;\n }\n Fold.prototype._start = function (out) {\n this.out = out;\n this.acc = this.seed;\n out._n(this.acc);\n this.ins._add(this);\n };\n Fold.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n this.acc = this.seed;\n };\n Fold.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n var r = _try(this, t, u);\n if (r === NO)\n return;\n u._n(this.acc = r);\n };\n Fold.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Fold.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n return Fold;\n}());\nvar Last = /** @class */ (function () {\n function Last(ins) {\n this.type = 'last';\n this.ins = ins;\n this.out = NO;\n this.has = false;\n this.val = NO;\n }\n Last.prototype._start = function (out) {\n this.out = out;\n this.has = false;\n this.ins._add(this);\n };\n Last.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n this.val = NO;\n };\n Last.prototype._n = function (t) {\n this.has = true;\n this.val = t;\n };\n Last.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Last.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n if (this.has) {\n u._n(this.val);\n u._c();\n }\n else\n u._e(new Error('last() failed because input stream completed'));\n };\n return Last;\n}());\nvar MapOp = /** @class */ (function () {\n function MapOp(project, ins) {\n this.type = 'map';\n this.ins = ins;\n this.out = NO;\n this.f = project;\n }\n MapOp.prototype._start = function (out) {\n this.out = out;\n this.ins._add(this);\n };\n MapOp.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n };\n MapOp.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n var r = _try(this, t, u);\n if (r === NO)\n return;\n u._n(r);\n };\n MapOp.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n MapOp.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n return MapOp;\n}());\nvar Remember = /** @class */ (function () {\n function Remember(ins) {\n this.type = 'remember';\n this.ins = ins;\n this.out = NO;\n }\n Remember.prototype._start = function (out) {\n this.out = out;\n this.ins._add(out);\n };\n Remember.prototype._stop = function () {\n this.ins._remove(this.out);\n this.out = NO;\n };\n return Remember;\n}());\nvar ReplaceError = /** @class */ (function () {\n function ReplaceError(replacer, ins) {\n this.type = 'replaceError';\n this.ins = ins;\n this.out = NO;\n this.f = replacer;\n }\n ReplaceError.prototype._start = function (out) {\n this.out = out;\n this.ins._add(this);\n };\n ReplaceError.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n };\n ReplaceError.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n u._n(t);\n };\n ReplaceError.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n try {\n this.ins._remove(this);\n (this.ins = this.f(err))._add(this);\n }\n catch (e) {\n u._e(e);\n }\n };\n ReplaceError.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n return ReplaceError;\n}());\nvar StartWith = /** @class */ (function () {\n function StartWith(ins, val) {\n this.type = 'startWith';\n this.ins = ins;\n this.out = NO;\n this.val = val;\n }\n StartWith.prototype._start = function (out) {\n this.out = out;\n this.out._n(this.val);\n this.ins._add(out);\n };\n StartWith.prototype._stop = function () {\n this.ins._remove(this.out);\n this.out = NO;\n };\n return StartWith;\n}());\nvar Take = /** @class */ (function () {\n function Take(max, ins) {\n this.type = 'take';\n this.ins = ins;\n this.out = NO;\n this.max = max;\n this.taken = 0;\n }\n Take.prototype._start = function (out) {\n this.out = out;\n this.taken = 0;\n if (this.max <= 0)\n out._c();\n else\n this.ins._add(this);\n };\n Take.prototype._stop = function () {\n this.ins._remove(this);\n this.out = NO;\n };\n Take.prototype._n = function (t) {\n var u = this.out;\n if (u === NO)\n return;\n var m = ++this.taken;\n if (m < this.max)\n u._n(t);\n else if (m === this.max) {\n u._n(t);\n u._c();\n }\n };\n Take.prototype._e = function (err) {\n var u = this.out;\n if (u === NO)\n return;\n u._e(err);\n };\n Take.prototype._c = function () {\n var u = this.out;\n if (u === NO)\n return;\n u._c();\n };\n return Take;\n}());\nvar Stream = /** @class */ (function () {\n function Stream(producer) {\n this._prod = producer || NO;\n this._ils = [];\n this._stopID = NO;\n this._dl = NO;\n this._d = false;\n this._target = null;\n this._err = NO;\n }\n Stream.prototype._n = function (t) {\n var a = this._ils;\n var L = a.length;\n if (this._d)\n this._dl._n(t);\n if (L == 1)\n a[0]._n(t);\n else if (L == 0)\n return;\n else {\n var b = cp(a);\n for (var i = 0; i < L; i++)\n b[i]._n(t);\n }\n };\n Stream.prototype._e = function (err) {\n if (this._err !== NO)\n return;\n this._err = err;\n var a = this._ils;\n var L = a.length;\n this._x();\n if (this._d)\n this._dl._e(err);\n if (L == 1)\n a[0]._e(err);\n else if (L == 0)\n return;\n else {\n var b = cp(a);\n for (var i = 0; i < L; i++)\n b[i]._e(err);\n }\n if (!this._d && L == 0)\n throw this._err;\n };\n Stream.prototype._c = function () {\n var a = this._ils;\n var L = a.length;\n this._x();\n if (this._d)\n this._dl._c();\n if (L == 1)\n a[0]._c();\n else if (L == 0)\n return;\n else {\n var b = cp(a);\n for (var i = 0; i < L; i++)\n b[i]._c();\n }\n };\n Stream.prototype._x = function () {\n if (this._ils.length === 0)\n return;\n if (this._prod !== NO)\n this._prod._stop();\n this._err = NO;\n this._ils = [];\n };\n Stream.prototype._stopNow = function () {\n // WARNING: code that calls this method should\n // first check if this._prod is valid (not `NO`)\n this._prod._stop();\n this._err = NO;\n this._stopID = NO;\n };\n Stream.prototype._add = function (il) {\n var ta = this._target;\n if (ta)\n return ta._add(il);\n var a = this._ils;\n a.push(il);\n if (a.length > 1)\n return;\n if (this._stopID !== NO) {\n clearTimeout(this._stopID);\n this._stopID = NO;\n }\n else {\n var p = this._prod;\n if (p !== NO)\n p._start(this);\n }\n };\n Stream.prototype._remove = function (il) {\n var _this = this;\n var ta = this._target;\n if (ta)\n return ta._remove(il);\n var a = this._ils;\n var i = a.indexOf(il);\n if (i > -1) {\n a.splice(i, 1);\n if (this._prod !== NO && a.length <= 0) {\n this._err = NO;\n this._stopID = setTimeout(function () { return _this._stopNow(); });\n }\n else if (a.length === 1) {\n this._pruneCycles();\n }\n }\n };\n // If all paths stemming from `this` stream eventually end at `this`\n // stream, then we remove the single listener of `this` stream, to\n // force it to end its execution and dispose resources. This method\n // assumes as a precondition that this._ils has just one listener.\n Stream.prototype._pruneCycles = function () {\n if (this._hasNoSinks(this, []))\n this._remove(this._ils[0]);\n };\n // Checks whether *there is no* path starting from `x` that leads to an end\n // listener (sink) in the stream graph, following edges A->B where B is a\n // listener of A. This means these paths constitute a cycle somehow. Is given\n // a trace of all visited nodes so far.\n Stream.prototype._hasNoSinks = function (x, trace) {\n if (trace.indexOf(x) !== -1)\n return true;\n else if (x.out === this)\n return true;\n else if (x.out && x.out !== NO)\n return this._hasNoSinks(x.out, trace.concat(x));\n else if (x._ils) {\n for (var i = 0, N = x._ils.length; i < N; i++)\n if (!this._hasNoSinks(x._ils[i], trace.concat(x)))\n return false;\n return true;\n }\n else\n return false;\n };\n Stream.prototype.ctor = function () {\n return this instanceof MemoryStream ? MemoryStream : Stream;\n };\n /**\n * Adds a Listener to the Stream.\n *\n * @param {Listener} listener\n */\n Stream.prototype.addListener = function (listener) {\n listener._n = listener.next || noop;\n listener._e = listener.error || noop;\n listener._c = listener.complete || noop;\n this._add(listener);\n };\n /**\n * Removes a Listener from the Stream, assuming the Listener was added to it.\n *\n * @param {Listener<T>} listener\n */\n Stream.prototype.removeListener = function (listener) {\n this._remove(listener);\n };\n /**\n * Adds a Listener to the Stream returning a Subscription to remove that\n * listener.\n *\n * @param {Listener} listener\n * @returns {Subscription}\n */\n Stream.prototype.subscribe = function (listener) {\n this.addListener(listener);\n return new StreamSub(this, listener);\n };\n /**\n * Add interop between most.js and RxJS 5\n *\n * @returns {Stream}\n */\n Stream.prototype[$$observable] = function () {\n return this;\n };\n /**\n * Creates a new Stream given a Producer.\n *\n * @factory true\n * @param {Producer} producer An optional Producer that dictates how to\n * start, generate events, and stop the Stream.\n * @return {Stream}\n */\n Stream.create = function (producer) {\n if (producer) {\n if (typeof producer.start !== 'function'\n || typeof producer.stop !== 'function')\n throw new Error('producer requires both start and stop functions');\n internalizeProducer(producer); // mutates the input\n }\n return new Stream(producer);\n };\n /**\n * Creates a new MemoryStream given a Producer.\n *\n * @factory true\n * @param {Producer} producer An optional Producer that dictates how to\n * start, generate events, and stop the Stream.\n * @return {MemoryStream}\n */\n Stream.createWithMemory = function (producer) {\n if (producer)\n internalizeProducer(producer); // mutates the input\n return new MemoryStream(producer);\n };\n /**\n * Creates a Stream that does nothing when started. It never emits any event.\n *\n * Marble diagram:\n *\n * ```text\n * never\n * -----------------------\n * ```\n *\n * @factory true\n * @return {Stream}\n */\n Stream.never = function () {\n return new Stream({ _start: noop, _stop: noop });\n };\n /**\n * Creates a Stream that immediately emits the \"complete\" notification when\n * started, and that's it.\n *\n * Marble diagram:\n *\n * ```text\n * empty\n * -|\n * ```\n *\n * @factory true\n * @return {Stream}\n */\n Stream.empty = function () {\n return new Stream({\n _start: function (il) { il._c(); },\n _stop: noop,\n });\n };\n /**\n * Creates a Stream that immediately emits an \"error\" notification with the\n * value you passed as the `error` argument when the stream starts, and that's\n * it.\n *\n * Marble diagram:\n *\n * ```text\n * throw(X)\n * -X\n * ```\n *\n * @factory true\n * @param error The error event to emit on the created stream.\n * @return {Stream}\n */\n Stream.throw = function (error) {\n return new Stream({\n _start: function (il) { il._e(error); },\n _stop: noop,\n });\n };\n /**\n * Creates a stream from an Array, Promise, or an Observable.\n *\n * @factory true\n * @param {Array|PromiseLike|Observable} input The input to make a stream from.\n * @return {Stream}\n */\n Stream.from = function (input) {\n if (typeof input[$$observable] === 'function')\n return Stream.fromObservable(input);\n else if (typeof input.then === 'function')\n return Stream.fromPromise(input);\n else if (Array.isArray(input))\n return Stream.fromArray(input);\n throw new TypeError(\"Type of input to from() must be an Array, Promise, or Observable\");\n };\n /**\n * Creates a Stream that immediately emits the arguments that you give to\n * *of*, then completes.\n *\n * Marble diagram:\n *\n * ```text\n * of(1,2,3)\n * 123|\n * ```\n *\n * @factory true\n * @param a The first value you want to emit as an event on the stream.\n * @param b The second value you want to emit as an event on the stream. One\n * or more of these values may be given as arguments.\n * @return {Stream}\n */\n Stream.of = function () {\n var items = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n items[_i] = arguments[_i];\n }\n return Stream.fromArray(items);\n };\n /**\n * Converts an array to a stream. The returned stream will emit synchronously\n * all the items in the array, and then complete.\n *\n * Marble diagram:\n *\n * ```text\n * fromArray([1,2,3])\n * 123|\n * ```\n *\n * @factory true\n * @param {Array} array The array to be converted as a stream.\n * @return {Stream}\n */\n Stream.fromArray = function (array) {\n return new Stream(new FromArray(array));\n };\n /**\n * Converts a promise to a stream. The returned stream will emit the resolved\n * value of the promise, and then complete. However, if the promise is\n * rejected, the stream will emit the corresponding error.\n *\n * Marble diagram:\n *\n * ```text\n * fromPromise( ----42 )\n * -----------------42|\n * ```\n *\n * @factory true\n * @param {PromiseLike} promise The promise to be converted as a stream.\n * @return {Stream}\n */\n Stream.fromPromise = function (promise) {\n return new Stream(new FromPromise(promise));\n };\n /**\n * Converts an Observable into a Stream.\n *\n * @factory true\n * @param {any} observable The observable to be converted as a stream.\n * @return {Stream}\n */\n Stream.fromObservable = function (obs) {\n if (obs.endWhen !== undefined)\n return obs;\n var o = typeof obs[$$observable] === 'function' ? obs[$$observable]() : obs;\n return new Stream(new FromObservable(o));\n };\n /**\n * Creates a stream that periodically emits incremental numbers, every\n * `period` milliseconds.\n *\n * Marble diagram:\n *\n * ```text\n * periodic(1000)\n * ---0---1---2---3---4---...\n * ```\n *\n * @factory true\n * @param {number} period The interval in milliseconds to use as a rate of\n * emission.\n * @return {Stream}\n */\n Stream.periodic = function (period) {\n return new Stream(new Periodic(period));\n };\n Stream.prototype._map = function (project) {\n return new (this.ctor())(new MapOp(project, this));\n };\n /**\n * Transforms each event from the input Stream through a `project` function,\n * to get a Stream that emits those transformed events.\n *\n * Marble diagram:\n *\n * ```text\n * --1---3--5-----7------\n * map(i => i * 10)\n * --10--30-50----70-----\n * ```\n *\n * @param {Function} project A function of type `(t: T) => U` that takes event\n * `t` of type `T` from the input Stream and produces an event of type `U`, to\n * be emitted on the output Stream.\n * @return {Stream}\n */\n Stream.prototype.map = function (project) {\n return this._map(project);\n };\n /**\n * It's like `map`, but transforms each input event to always the same\n * constant value on the output Stream.\n *\n * Marble diagram:\n *\n * ```text\n * --1---3--5-----7-----\n * mapTo(10)\n * --10--10-10----10----\n * ```\n *\n * @param projectedValue A value to emit on the output Stream whenever the\n * input Stream emits any value.\n * @return {Stream}\n */\n Stream.prototype.mapTo = function (projectedValue) {\n var s = this.map(function () { return projectedValue; });\n var op = s._prod;\n op.type = 'mapTo';\n return s;\n };\n /**\n * Only allows events that pass the test given by the `passes` argument.\n *\n * Each event from the input stream is given to the `passes` function. If the\n * function returns `true`, the event is forwarded to the output stream,\n * otherwise it is ignored and not forwarded.\n *\n * Marble diagram:\n *\n * ```text\n * --1---2--3-----4-----5---6--7-8--\n * filter(i => i % 2 === 0)\n * ------2--------4---------6----8--\n * ```\n *\n * @param {Function} passes A function of type `(t: T) => boolean` that takes\n * an event from the input stream and checks if it passes, by returning a\n * boolean.\n * @return {Stream}\n */\n Stream.prototype.filter = function (passes) {\n var p = this._prod;\n if (p instanceof Filter)\n return new Stream(new Filter(and(p.f, passes), p.ins));\n return new Stream(new Filter(passes, this));\n };\n /**\n * Lets the first `amount` many events from the input stream pass to the\n * output stream, then makes the output stream complete.\n *\n * Marble diagram:\n *\n * ```text\n * --a---b--c----d---e--\n * take(3)\n * --a---b--c|\n * ```\n *\n * @param {number} amount How many events to allow from the input stream\n * before completing the output stream.\n * @return {Stream}\n */\n Stream.prototype.take = function (amount) {\n return new (this.ctor())(new Take(amount, this));\n };\n /**\n * Ignores the first `amount` many events from the input stream, and then\n * after that starts forwarding events from the input stream to the output\n * stream.\n *\n * Marble diagram:\n *\n * ```text\n * --a---b--c----d---e--\n * drop(3)\n * --------------d---e--\n * ```\n *\n * @param {number} amount How many events to ignore from the input stream\n * before forwarding all events from the input stream to the output stream.\n * @return {Stream}\n */\n Stream.prototype.drop = function (amount) {\n return new Stream(new Drop(amount, this));\n };\n /**\n * When the input stream completes, the output stream will emit the last event\n * emitted by the input stream, and then will also complete.\n *\n * Marble diagram:\n *\n * ```text\n * --a---b--c--d----|\n * last()\n * -----------------d|\n * ```\n *\n * @return {Stream}\n */\n Stream.prototype.last = function () {\n return new Stream(new Last(this));\n };\n /**\n * Prepends the given `initial` value to the sequence of events emitted by the\n * input stream. The returned stream is a MemoryStream, which means it is\n * already `remember()`'d.\n *\n * Marble diagram:\n *\n * ```text\n * ---1---2-----3---\n * startWith(0)\n * 0--1---2-----3---\n * ```\n *\n * @param initial The value or event to prepend.\n * @return {MemoryStream}\n */\n Stream.prototype.startWith = function (initial) {\n return new MemoryStream(new StartWith(this, initial));\n };\n /**\n * Uses another stream to determine when to complete the current stream.\n *\n * When the given `other` stream emits an event or completes, the output\n * stream will complete. Before that happens, the output stream will behaves\n * like the input stream.\n *\n * Marble diagram:\n *\n * ```text\n * ---1---2-----3--4----5----6---\n * endWhen( --------a--b--| )\n * ---1---2-----3--4--|\n * ```\n *\n * @param other Some other stream that is used to know when should the output\n * stream of this operator complete.\n * @return {Stream}\n */\n Stream.prototype.endWhen = function (other) {\n return new (this.ctor())(new EndWhen(other, this));\n };\n /**\n * \"Folds\" the stream onto itself.\n *\n * Combines events from the past throughout\n * the entire execution of the input stream, allowing you to accumulate them\n * together. It's essentially like `Array.prototype.reduce`. The returned\n * stream is a MemoryStream, which means it is already `remember()`'d.\n *\n * The output stream starts by emitting the `seed` which you give as argument.\n * Then, when an event happens on the input stream, it is combined with that\n * seed value through the `accumulate` function, and the output value is\n * emitted on the output stream. `fold` remembers that output value as `acc`\n * (\"accumulator\"), and then when a new input event `t` happens, `acc` will be\n * combined with that to produce the new `acc` and so forth.\n *\n * Marble diagram:\n *\n * ```text\n * ------1-----1--2----1----1------\n * fold((acc, x) => acc + x, 3)\n * 3-----4-----5--7----8----9------\n * ```\n *\n * @param {Function} accumulate A function of type `(acc: R, t: T) => R` that\n * takes the previous accumulated value `acc` and the incoming event from the\n * input stream and produces the new accumulated value.\n * @param seed The initial accumulated value, of type `R`.\n * @return {MemoryStream}\n */\n Stream.prototype.fold = function (accumulate, seed) {\n return new MemoryStream(new Fold(accumulate, seed, this));\n };\n /**\n * Replaces an error with another stream.\n *\n * When (and if) an error happens on the input stream, instead of forwarding\n * that error to the output stream, *replaceError* will call the `replace`\n * function which returns the stream that the output stream will replicate.\n * And, in case that new stream also emits an error, `replace` will be called\n * again to get another stream to start replicating.\n *\n * Marble diagram:\n *\n * ```text\n * --1---2-----3--4-----X\n * replaceError( () => --10--| )\n * --1---2-----3--4--------10--|\n * ```\n *\n * @param {Function} replace A function of type `(err) => Stream` that takes\n * the error that occurred on the input stream or on the previous replacement\n * stream and returns a new stream. The output stream will behave like the\n * stream that this function returns.\n * @return {Stream}\n */\n Stream.prototype.replaceError = function (replace) {\n return new (this.ctor())(new ReplaceError(replace, this));\n };\n /**\n * Flattens a \"stream of streams\", handling only one nested stream at a time\n * (no concurrency).\n *\n * If the input stream is a stream that emits streams, then this operator will\n * return an output stream which is a flat stream: emits regular events. The\n * flattening happens without concurrency. It works like this: when the input\n * stream emits a nested stream, *flatten* will start imitating that nested\n * one. However, as soon as the next nested stream is emitted on the input\n * stream, *flatten* will forget the previous nested one it was imitating, and\n * will start imitating the new nested one.\n *\n * Marble diagram:\n *\n * ```text\n * --+--------+---------------\n * \\ \\\n * \\ ----1----2---3--\n * --a--b----c----d--------\n * flatten\n * -----a--b------1----2---3--\n * ```\n *\n * @return {Stream}\n */\n Stream.prototype.flatten = function () {\n return new Stream(new Flatten(this));\n };\n /**\n * Passes the input stream to a custom operator, to produce an output stream.\n *\n * *compose* is a handy way of using an existing function in a chained style.\n * Instead of writing `outStream = f(inStream)` you can write\n * `outStream = inStream.compose(f)`.\n *\n * @param {function} operator A function that takes a stream as input and\n * returns a stream as well.\n * @return {Stream}\n */\n Stream.prototype.compose = function (operator) {\n return operator(this);\n };\n /**\n * Returns an output stream that behaves like the input stream, but also\n * remembers the most recent event that happens on the input stream, so that a\n * newly added listener will immediately receive that memorised event.\n *\n * @return {MemoryStream}\n */\n Stream.prototype.remember = function () {\n return new MemoryStream(new Remember(this));\n };\n /**\n * Returns an output stream that identically behaves like the input stream,\n * but also runs a `spy` function for each event, to help you debug your app.\n *\n * *debug* takes a `spy` function as argument, and runs that for each event\n * happening on the input stream. If you don't provide the `spy` argument,\n * then *debug* will just `console.log` each event. This helps you to\n * understand the flow of events through some operator chain.\n *\n * Please note that if the output stream has no listeners, then it will not\n * start, which means `spy` will never run because no actual event happens in\n * that case.\n *\n * Marble diagram:\n *\n * ```text\n * --1----2-----3-----4--\n * debug\n * --1----2-----3-----4--\n * ```\n *\n * @param {function} labelOrSpy A string to use as the label when printing\n * debug information on the console, or a 'spy' function that takes an event\n * as argument, and does not need to return anything.\n * @return {Stream}\n */\n Stream.prototype.debug = function (labelOrSpy) {\n return new (this.ctor())(new Debug(this, labelOrSpy));\n };\n /**\n * *imitate* changes this current Stream to emit the same events that the\n * `other` given Stream does. This method returns nothing.\n *\n * This method exists to allow one thing: **circular dependency of streams**.\n * For instance, let's imagine that for some reason you need to create a\n * circular dependency where stream `first$` depends on stream `second$`\n * which in turn depends on `first$`:\n *\n * <!-- skip-example -->\n * ```js\n * import delay from 'xstream/extra/delay'\n *\n * var first$ = second$.map(x => x * 10).take(3);\n * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100));\n * ```\n *\n * However, that is invalid JavaScript, because `second$` is undefined\n * on the first line. This is how *imitate* can help solve it:\n *\n * ```js\n * import delay from 'xstream/extra/delay'\n *\n * var secondProxy$ = xs.create();\n * var first$ = secondProxy$.map(x => x * 10).take(3);\n * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100));\n * secondProxy$.imitate(second$);\n * ```\n *\n * We create `secondProxy$` before the others, so it can be used in the\n * declaration of `first$`. Then, after both `first$` and `second$` are\n * defined, we hook `secondProxy$` with `second$` with `imitate()` to tell\n * that they are \"the same\". `imitate` will not trigger the start of any\n * stream, it just binds `secondProxy$` and `second$` together.\n *\n * The following is an example where `imitate()` is important in Cycle.js\n * applications. A parent component contains some child components. A child\n * has an action stream which is given to the parent to define its state:\n *\n * <!-- skip-example -->\n * ```js\n * const childActionProxy$ = xs.create();\n * const parent = Parent({...sources, childAction$: childActionProxy$});\n * const childAction$ = parent.state$.map(s => s.child.action$).flatten();\n * childActionProxy$.imitate(childAction$);\n * ```\n *\n * Note, though, that **`imitate()` does not support MemoryStreams**. If we\n * would attempt to imitate a MemoryStream in a circular dependency, we would\n * either get a race condition (where the symptom would be \"nothing happens\")\n * or an infinite cyclic emission of values. It's useful to think about\n * MemoryStreams as cells in a spreadsheet. It doesn't make any sense to\n * define a spreadsheet cell `A1` with a formula that depends on `B1` and\n * cell `B1` defined with a formula that depends on `A1`.\n *\n * If you find yourself wanting to use `imitate()` with a\n * MemoryStream, you should rework your code around `imitate()` to use a\n * Stream instead. Look for the stream in the circular dependency that\n * represents an event stream, and that would be a candidate for creating a\n * proxy Stream which then imitates the target Stream.\n *\n * @param {Stream} target The other stream to imitate on the current one. Must\n * not be a MemoryStream.\n */\n Stream.prototype.imitate = function (target) {\n if (target instanceof MemoryStream)\n throw new Error('A MemoryStream was given to imitate(), but it only ' +\n 'supports a Stream. Read more about this restriction here: ' +\n 'https://github.com/staltz/xstream#faq');\n this._target = target;\n for (var ils = this._ils, N = ils.length, i = 0; i < N; i++)\n target._add(ils[i]);\n this._ils = [];\n };\n /**\n * Forces the Stream to emit the given value to its listeners.\n *\n * As the name indicates, if you use this, you are most likely doing something\n * The Wrong Way. Please try to understand the reactive way before using this\n * method. Use it only when you know what you are doing.\n *\n * @param value The \"next\" value you want to broadcast to all listeners of\n * this Stream.\n */\n Stream.prototype.shamefullySendNext = function (value) {\n this._n(value);\n };\n /**\n * Forces the Stream to emit the given error to its listeners.\n *\n * As the name indicates, if you use this, you are most likely doing something\n * The Wrong Way. Please try to understand the reactive way before using this\n * method. Use it only when you know what you are doing.\n *\n * @param {any} error The error you want to broadcast to all the listeners of\n * this Stream.\n */\n Stream.prototype.shamefullySendError = function (error) {\n this._e(error);\n };\n /**\n * Forces the Stream to emit the \"completed\" event to its listeners.\n *\n * As the name indicates, if you use this, you are most likely doing something\n * The Wrong Way. Please try to understand the reactive way before using this\n * method. Use it only when you know what you are doing.\n */\n Stream.prototype.shamefullySendComplete = function () {\n this._c();\n };\n /**\n * Adds a \"debug\" listener to the stream. There can only be one debug\n * listener, that's why this is 'setDebugListener'. To remove the debug\n * listener, just call setDebugListener(null).\n *\n * A debug listener is like any other listener. The only difference is that a\n * debug listener is \"stealthy\": its presence/absence does not trigger the\n * start/stop of the stream (or the producer inside the stream). This is\n * useful so you can inspect what is going on without changing the behavior\n * of the program. If you have an idle stream and you add a normal listener to\n * it, the stream will start executing. But if you set a debug listener on an\n * idle stream, it won't start executing (not until the first normal listener\n * is added).\n *\n * As the name indicates, we don't recommend using this method to build app\n * logic. In fact, in most cases the debug operator works just fine. Only use\n * this one if you know what you're doing.\n *\n * @param {Listener<T>} listener\n */\n Stream.prototype.setDebugListener = function (listener) {\n if (!listener) {\n this._d = false;\n this._dl = NO;\n }\n else {\n this._d = true;\n listener._n = listener.next || noop;\n listener._e = listener.error || noop;\n listener._c = listener.complete || noop;\n this._dl = listener;\n }\n };\n /**\n * Blends multiple streams together, emitting events from all of them\n * concurrently.\n *\n * *merge* takes multiple streams as arguments, and creates a stream that\n * behaves like each of the argument streams, in parallel.\n *\n * Marble diagram:\n *\n * ```text\n * --1----2-----3--------4---\n * ----a-----b----c---d------\n * merge\n * --1-a--2--b--3-c---d--4---\n * ```\n *\n * @factory true\n * @param {Stream} stream1 A stream to merge together with other streams.\n * @param {Stream} stream2 A stream to merge together with other streams. Two\n * or more streams may be given as arguments.\n * @return {Stream}\n */\n Stream.merge = function merge() {\n var streams = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n streams[_i] = arguments[_i];\n }\n return new Stream(new Merge(streams));\n };\n /**\n * Combines multiple input streams together to return a stream whose events\n * are arrays that collect the latest events from each input stream.\n *\n * *combine* internally remembers the most recent event from each of the input\n * streams. When any of the input streams emits an event, that event together\n * with all the other saved events are combined into an array. That array will\n * be emitted on the output stream. It's essentially a way of joining together\n * the events from multiple streams.\n *\n * Marble diagram:\n *\n * ```text\n * --1----2-----3--------4---\n * ----a-----b-----c--d------\n * combine\n * ----1a-2a-2b-3b-3c-3d-4d--\n * ```\n *\n * @factory true\n * @param {Stream} stream1 A stream to combine together with other streams.\n * @param {Stream} stream2 A stream to combine together with other streams.\n * Multiple streams, not just two, may be given as arguments.\n * @return {Stream}\n */\n Stream.combine = function combine() {\n var streams = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n streams[_i] = arguments[_i];\n }\n return new Stream(new Combine(streams));\n };\n return Stream;\n}());\nexports.Stream = Stream;\nvar MemoryStream = /** @class */ (function (_super) {\n __extends(MemoryStream, _super);\n function MemoryStream(producer) {\n var _this = _super.call(this, producer) || this;\n _this._has = false;\n return _this;\n }\n MemoryStream.prototype._n = function (x) {\n this._v = x;\n this._has = true;\n _super.prototype._n.call(this, x);\n };\n MemoryStream.prototype._add = function (il) {\n var ta = this._target;\n if (ta)\n return ta._add(il);\n var a = this._ils;\n a.push(il);\n if (a.length > 1) {\n if (this._has)\n il._n(this._v);\n return;\n }\n if (this._stopID !== NO) {\n if (this._has)\n il._n(this._v);\n clearTimeout(this._stopID);\n this._stopID = NO;\n }\n else if (this._has)\n il._n(this._v);\n else {\n var p = this._prod;\n if (p !== NO)\n p._start(this);\n }\n };\n MemoryStream.prototype._stopNow = function () {\n this._has = false;\n _super.prototype._stopNow.call(this);\n };\n MemoryStream.prototype._x = function () {\n this._has = false;\n _super.prototype._x.call(this);\n };\n MemoryStream.prototype.map = function (project) {\n return this._map(project);\n };\n MemoryStream.prototype.mapTo = function (projectedValue) {\n return _super.prototype.mapTo.call(this, projectedValue);\n };\n MemoryStream.prototype.take = function (amount) {\n return _super.prototype.take.call(this, amount);\n };\n MemoryStream.prototype.endWhen = function (other) {\n return _super.prototype.endWhen.call(this, other);\n };\n MemoryStream.prototype.replaceError = function (replace) {\n return _super.prototype.replaceError.call(this, replace);\n };\n MemoryStream.prototype.remember = function () {\n return this;\n };\n MemoryStream.prototype.debug = function (labelOrSpy) {\n return _super.prototype.debug.call(this, labelOrSpy);\n };\n return MemoryStream;\n}(Stream));\nexports.MemoryStream = MemoryStream;\nvar xs = Stream;\nexports.default = xs;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFrRTtBQUNsRSx5Q0FBMEQ7QUFFMUQsSUFBTSxZQUFZLEdBQUcsa0JBQXdCLENBQUMsd0JBQWEsRUFBRSxDQUFDLENBQUM7QUFFL0QsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBOC9ETCxnQkFBRTtBQTcvRFgsU0FBUyxJQUFJLEtBQUssQ0FBQztBQUVuQixTQUFTLEVBQUUsQ0FBSSxDQUFXO0lBQ3hCLElBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkIsSUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBSSxFQUFxQixFQUFFLEVBQXFCO0lBQzFELE9BQU8sU0FBUyxLQUFLLENBQUMsQ0FBSTtRQUN4QixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQU1ELFNBQVMsSUFBSSxDQUFPLENBQW1CLEVBQUUsQ0FBSSxFQUFFLENBQWM7SUFDM0QsSUFBSTtRQUNGLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNmO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUM7QUFRRCxJQUFNLEtBQUss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TCxVQUFNLFVBQWlEO1FBQ3JELE9BQU8saUJBQU0sS0FBSyxZQUFDLFVBQWlCLENBQW9CLENBQUM7SUFDM0QsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQXhFRCxDQUFxQyxNQUFNLEdBd0UxQztBQXhFWSxvQ0FBWTtBQTJFekIsSUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBRWxCLGtCQUFlLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwb255ZmlsbFN5bWJvbE9ic2VydmFibGUgZnJvbSAnc3ltYm9sLW9ic2VydmFibGUvcG9ueWZpbGwnO1xuaW1wb3J0IHsgZ2V0UG9seWZpbGwgYXMgZ2V0R2xvYmFsVGhpcyB9IGZyb20gJ2dsb2JhbHRoaXMnO1xuXG5jb25zdCAkJG9ic2VydmFibGUgPSBwb255ZmlsbFN5bWJvbE9ic2VydmFibGUoZ2V0R2xvYmFsVGhpcygpKTtcblxuY29uc3QgTk8gPSB7fTtcbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gY3A8VD4oYTogQXJyYXk8VD4pOiBBcnJheTxUPiB7XG4gIGNvbnN0IGwgPSBhLmxlbmd0aDtcbiAgY29uc3QgYiA9IEFycmF5KGwpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGw7ICsraSkgYltpXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG5mdW5jdGlvbiBhbmQ8VD4oZjE6ICh0OiBUKSA9PiBib29sZWFuLCBmMjogKHQ6IFQpID0+IGJvb2xlYW4pOiAodDogVCkgPT4gYm9vbGVhbiB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmRGbih0OiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGYxKHQpICYmIGYyKHQpO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRkNvbnRhaW5lcjxULCBSPiB7XG4gIGYodDogVCk6IFI7XG59XG5cbmZ1bmN0aW9uIF90cnk8VCwgUj4oYzogRkNvbnRhaW5lcjxULCBSPiwgdDogVCwgdTogU3RyZWFtPGFueT4pOiBSIHwge30ge1xuICB0cnkge1xuICAgIHJldHVybiBjLmYodCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB1Ll9lKGUpO1xuICAgIHJldHVybiBOTztcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsTGlzdGVuZXI8VD4ge1xuICBfbjogKHY6IFQpID0+IHZvaWQ7XG4gIF9lOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIF9jOiAoKSA9PiB2b2lkO1xufVxuXG5jb25zdCBOT19JTDogSW50ZXJuYWxMaXN0ZW5lcjxhbnk+ID0ge1xuICBfbjogbm9vcCxcbiAgX2U6IG5vb3AsXG4gIF9jOiBub29wLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbFByb2R1Y2VyPFQ+IHtcbiAgX3N0YXJ0KGxpc3RlbmVyOiBJbnRlcm5hbExpc3RlbmVyPFQ+KTogdm9pZDtcbiAgX3N0b3A6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0U2VuZGVyPFQ+IHtcbiAgb3V0OiBTdHJlYW08VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0b3I8VCwgUj4gZXh0ZW5kcyBJbnRlcm5hbFByb2R1Y2VyPFI+LCBJbnRlcm5hbExpc3RlbmVyPFQ+LCBPdXRTZW5kZXI8Uj4ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGluczogU3RyZWFtPFQ+O1xuICBfc3RhcnQob3V0OiBTdHJlYW08Uj4pOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFnZ3JlZ2F0b3I8VCwgVT4gZXh0ZW5kcyBJbnRlcm5hbFByb2R1Y2VyPFU+LCBPdXRTZW5kZXI8VT4ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGluc0FycjogQXJyYXk8U3RyZWFtPFQ+PjtcbiAgX3N0YXJ0KG91dDogU3RyZWFtPFU+KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWNlcjxUPiB7XG4gIHN0YXJ0OiAobGlzdGVuZXI6IExpc3RlbmVyPFQ+KSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyPFQ+IHtcbiAgbmV4dDogKHg6IFQpID0+IHZvaWQ7XG4gIGVycm9yOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIGNvbXBsZXRlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbiB7XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2YWJsZTxUPiB7XG4gIHN1YnNjcmliZShsaXN0ZW5lcjogTGlzdGVuZXI8VD4pOiBTdWJzY3JpcHRpb247XG59XG5cbi8vIG11dGF0ZXMgdGhlIGlucHV0XG5mdW5jdGlvbiBpbnRlcm5hbGl6ZVByb2R1Y2VyPFQ+KHByb2R1Y2VyOiBQcm9kdWNlcjxUPiAmIFBhcnRpYWw8SW50ZXJuYWxQcm9kdWNlcjxUPj4pIHtcbiAgcHJvZHVjZXIuX3N0YXJ0ID0gZnVuY3Rpb24gX3N0YXJ0KGlsOiBJbnRlcm5hbExpc3RlbmVyPFQ+ICYgUGFydGlhbDxMaXN0ZW5lcjxUPj4pIHtcbiAgICBpbC5uZXh0ID0gaWwuX247XG4gICAgaWwuZXJyb3IgPSBpbC5fZTtcbiAgICBpbC5jb21wbGV0ZSA9IGlsLl9jO1xuICAgIHRoaXMuc3RhcnQoaWwgYXMgTGlzdGVuZXI8VD4pO1xuICB9O1xuICBwcm9kdWNlci5fc3RvcCA9IHByb2R1Y2VyLnN0b3A7XG59XG5cbmNsYXNzIFN0cmVhbVN1YjxUPiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N0cmVhbTogU3RyZWFtPFQ+LCBwcml2YXRlIF9saXN0ZW5lcjogSW50ZXJuYWxMaXN0ZW5lcjxUPikgeyB9XG5cbiAgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RyZWFtLl9yZW1vdmUodGhpcy5fbGlzdGVuZXIpO1xuICB9XG59XG5cbmNsYXNzIE9ic2VydmVyPFQ+IGltcGxlbWVudHMgTGlzdGVuZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9saXN0ZW5lcjogSW50ZXJuYWxMaXN0ZW5lcjxUPikgeyB9XG5cbiAgbmV4dCh2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVyLl9uKHZhbHVlKTtcbiAgfVxuXG4gIGVycm9yKGVycjogYW55KSB7XG4gICAgdGhpcy5fbGlzdGVuZXIuX2UoZXJyKTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIHRoaXMuX2xpc3RlbmVyLl9jKCk7XG4gIH1cbn1cblxuY2xhc3MgRnJvbU9ic2VydmFibGU8VD4gaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZnJvbU9ic2VydmFibGUnO1xuICBwdWJsaWMgaW5zOiBPYnNlcnZhYmxlPFQ+O1xuICBwdWJsaWMgb3V0PzogU3RyZWFtPFQ+O1xuICBwcml2YXRlIGFjdGl2ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPikge1xuICAgIHRoaXMuaW5zID0gb2JzZXJ2YWJsZTtcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMuX3N1YiA9IHRoaXMuaW5zLnN1YnNjcmliZShuZXcgT2JzZXJ2ZXIob3V0KSk7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkgdGhpcy5fc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBfc3RvcCgpIHtcbiAgICBpZiAodGhpcy5fc3ViKSB0aGlzLl9zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2VTaWduYXR1cmUge1xuICAoKTogU3RyZWFtPGFueT47XG4gIDxUMT4oczE6IFN0cmVhbTxUMT4pOiBTdHJlYW08VDE+O1xuICA8VDEsIFQyPihcbiAgICBzMTogU3RyZWFtPFQxPixcbiAgICBzMjogU3RyZWFtPFQyPik6IFN0cmVhbTxUMSB8IFQyPjtcbiAgPFQxLCBUMiwgVDM+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+KTogU3RyZWFtPFQxIHwgVDIgfCBUMz47XG4gIDxUMSwgVDIsIFQzLCBUND4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4pOiBTdHJlYW08VDEgfCBUMiB8IFQzIHwgVDQ+O1xuICA8VDEsIFQyLCBUMywgVDQsIFQ1PihcbiAgICBzMTogU3RyZWFtPFQxPixcbiAgICBzMjogU3RyZWFtPFQyPixcbiAgICBzMzogU3RyZWFtPFQzPixcbiAgICBzNDogU3RyZWFtPFQ0PixcbiAgICBzNTogU3RyZWFtPFQ1Pik6IFN0cmVhbTxUMSB8IFQyIHwgVDMgfCBUNCB8IFQ1PjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDY+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+KTogU3RyZWFtPFQxIHwgVDIgfCBUMyB8IFQ0IHwgVDUgfCBUNj47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4sXG4gICAgczU6IFN0cmVhbTxUNT4sXG4gICAgczY6IFN0cmVhbTxUNj4sXG4gICAgczc6IFN0cmVhbTxUNz4pOiBTdHJlYW08VDEgfCBUMiB8IFQzIHwgVDQgfCBUNSB8IFQ2IHwgVDc+O1xuICA8VDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4PihcbiAgICBzMTogU3RyZWFtPFQxPixcbiAgICBzMjogU3RyZWFtPFQyPixcbiAgICBzMzogU3RyZWFtPFQzPixcbiAgICBzNDogU3RyZWFtPFQ0PixcbiAgICBzNTogU3RyZWFtPFQ1PixcbiAgICBzNjogU3RyZWFtPFQ2PixcbiAgICBzNzogU3RyZWFtPFQ3PixcbiAgICBzODogU3RyZWFtPFQ4Pik6IFN0cmVhbTxUMSB8IFQyIHwgVDMgfCBUNCB8IFQ1IHwgVDYgfCBUNyB8IFQ4PjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+KTogU3RyZWFtPFQxIHwgVDIgfCBUMyB8IFQ0IHwgVDUgfCBUNiB8IFQ3IHwgVDggfCBUOT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTA+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+LFxuICAgIHMxMDogU3RyZWFtPFQxMD4pOiBTdHJlYW08VDEgfCBUMiB8IFQzIHwgVDQgfCBUNSB8IFQ2IHwgVDcgfCBUOCB8IFQ5IHwgVDEwPjtcbiAgPFQ+KC4uLnN0cmVhbTogQXJyYXk8U3RyZWFtPFQ+Pik6IFN0cmVhbTxUPjtcbn1cblxuY2xhc3MgTWVyZ2U8VD4gaW1wbGVtZW50cyBBZ2dyZWdhdG9yPFQsIFQ+LCBJbnRlcm5hbExpc3RlbmVyPFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnbWVyZ2UnO1xuICBwdWJsaWMgaW5zQXJyOiBBcnJheTxTdHJlYW08VD4+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHByaXZhdGUgYWM6IG51bWJlcjsgLy8gYWMgaXMgYWN0aXZlQ291bnRcblxuICBjb25zdHJ1Y3RvcihpbnNBcnI6IEFycmF5PFN0cmVhbTxUPj4pIHtcbiAgICB0aGlzLmluc0FyciA9IGluc0FycjtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLmFjID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIGNvbnN0IHMgPSB0aGlzLmluc0FycjtcbiAgICBjb25zdCBMID0gcy5sZW5ndGg7XG4gICAgdGhpcy5hYyA9IEw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIHNbaV0uX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSB0aGlzLmluc0FycjtcbiAgICBjb25zdCBMID0gcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIHNbaV0uX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIGlmICgtLXRoaXMuYWMgPD0gMCkge1xuICAgICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgICB1Ll9jKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZVNpZ25hdHVyZSB7XG4gICgpOiBTdHJlYW08QXJyYXk8YW55Pj47XG4gIDxUMT4oczE6IFN0cmVhbTxUMT4pOiBTdHJlYW08W1QxXT47XG4gIDxUMSwgVDI+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+KTogU3RyZWFtPFtUMSwgVDJdPjtcbiAgPFQxLCBUMiwgVDM+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+KTogU3RyZWFtPFtUMSwgVDIsIFQzXT47XG4gIDxUMSwgVDIsIFQzLCBUND4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4pOiBTdHJlYW08W1QxLCBUMiwgVDMsIFQ0XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDU+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDVdPjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDY+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz4oXG4gICAgczE6IFN0cmVhbTxUMT4sXG4gICAgczI6IFN0cmVhbTxUMj4sXG4gICAgczM6IFN0cmVhbTxUMz4sXG4gICAgczQ6IFN0cmVhbTxUND4sXG4gICAgczU6IFN0cmVhbTxUNT4sXG4gICAgczY6IFN0cmVhbTxUNj4sXG4gICAgczc6IFN0cmVhbTxUNz4pOiBTdHJlYW08W1QxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDg+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDhdPjtcbiAgPFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+KTogU3RyZWFtPFtUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5XT47XG4gIDxUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgsIFQ5LCBUMTA+KFxuICAgIHMxOiBTdHJlYW08VDE+LFxuICAgIHMyOiBTdHJlYW08VDI+LFxuICAgIHMzOiBTdHJlYW08VDM+LFxuICAgIHM0OiBTdHJlYW08VDQ+LFxuICAgIHM1OiBTdHJlYW08VDU+LFxuICAgIHM2OiBTdHJlYW08VDY+LFxuICAgIHM3OiBTdHJlYW08VDc+LFxuICAgIHM4OiBTdHJlYW08VDg+LFxuICAgIHM5OiBTdHJlYW08VDk+LFxuICAgIHMxMDogU3RyZWFtPFQxMD4pOiBTdHJlYW08W1QxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDksIFQxMF0+O1xuICA8VD4oLi4uc3RyZWFtOiBBcnJheTxTdHJlYW08VD4+KTogU3RyZWFtPEFycmF5PFQ+PjtcbiAgKC4uLnN0cmVhbTogQXJyYXk8U3RyZWFtPGFueT4+KTogU3RyZWFtPEFycmF5PGFueT4+O1xufVxuXG5jbGFzcyBDb21iaW5lTGlzdGVuZXI8VD4gaW1wbGVtZW50cyBJbnRlcm5hbExpc3RlbmVyPFQ+LCBPdXRTZW5kZXI8QXJyYXk8VD4+IHtcbiAgcHJpdmF0ZSBpOiBudW1iZXI7XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxBcnJheTxUPj47XG4gIHByaXZhdGUgcDogQ29tYmluZTxUPjtcblxuICBjb25zdHJ1Y3RvcihpOiBudW1iZXIsIG91dDogU3RyZWFtPEFycmF5PFQ+PiwgcDogQ29tYmluZTxUPikge1xuICAgIHRoaXMuaSA9IGk7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5wID0gcDtcbiAgICBwLmlscy5wdXNoKHRoaXMpO1xuICB9XG5cbiAgX24odDogVCk6IHZvaWQge1xuICAgIGNvbnN0IHAgPSB0aGlzLnAsIG91dCA9IHRoaXMub3V0O1xuICAgIGlmIChvdXQgPT09IE5PKSByZXR1cm47XG4gICAgaWYgKHAudXAodCwgdGhpcy5pKSkge1xuICAgICAgY29uc3QgYiA9IGNwKHAudmFscyk7XG4gICAgICBvdXQuX24oYik7XG4gICAgfVxuICB9XG5cbiAgX2UoZXJyOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBvdXQgPSB0aGlzLm91dDtcbiAgICBpZiAob3V0ID09PSBOTykgcmV0dXJuO1xuICAgIG91dC5fZShlcnIpO1xuICB9XG5cbiAgX2MoKTogdm9pZCB7XG4gICAgY29uc3QgcCA9IHRoaXMucDtcbiAgICBpZiAocC5vdXQgPT09IE5PKSByZXR1cm47XG4gICAgaWYgKC0tcC5OYyA9PT0gMCkgcC5vdXQuX2MoKTtcbiAgfVxufVxuXG5jbGFzcyBDb21iaW5lPFI+IGltcGxlbWVudHMgQWdncmVnYXRvcjxhbnksIEFycmF5PFI+PiB7XG4gIHB1YmxpYyB0eXBlID0gJ2NvbWJpbmUnO1xuICBwdWJsaWMgaW5zQXJyOiBBcnJheTxTdHJlYW08YW55Pj47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxBcnJheTxSPj47XG4gIHB1YmxpYyBpbHM6IEFycmF5PENvbWJpbmVMaXN0ZW5lcjxhbnk+PjtcbiAgcHVibGljIE5jOiBudW1iZXI7IC8vICpOKnVtYmVyIG9mIHN0cmVhbXMgc3RpbGwgdG8gc2VuZCAqYypvbXBsZXRlXG4gIHB1YmxpYyBObjogbnVtYmVyOyAvLyAqTip1bWJlciBvZiBzdHJlYW1zIHN0aWxsIHRvIHNlbmQgKm4qZXh0XG4gIHB1YmxpYyB2YWxzOiBBcnJheTxSPjtcblxuICBjb25zdHJ1Y3RvcihpbnNBcnI6IEFycmF5PFN0cmVhbTxhbnk+Pikge1xuICAgIHRoaXMuaW5zQXJyID0gaW5zQXJyO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPEFycmF5PFI+PjtcbiAgICB0aGlzLmlscyA9IFtdO1xuICAgIHRoaXMuTmMgPSB0aGlzLk5uID0gMDtcbiAgICB0aGlzLnZhbHMgPSBbXTtcbiAgfVxuXG4gIHVwKHQ6IGFueSwgaTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdiA9IHRoaXMudmFsc1tpXTtcbiAgICBjb25zdCBObiA9ICF0aGlzLk5uID8gMCA6IHYgPT09IE5PID8gLS10aGlzLk5uIDogdGhpcy5ObjtcbiAgICB0aGlzLnZhbHNbaV0gPSB0O1xuICAgIHJldHVybiBObiA9PT0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxBcnJheTxSPj4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICBjb25zdCBzID0gdGhpcy5pbnNBcnI7XG4gICAgY29uc3QgbiA9IHRoaXMuTmMgPSB0aGlzLk5uID0gcy5sZW5ndGg7XG4gICAgY29uc3QgdmFscyA9IHRoaXMudmFscyA9IG5ldyBBcnJheShuKTtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgb3V0Ll9uKFtdKTtcbiAgICAgIG91dC5fYygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2YWxzW2ldID0gTk87XG4gICAgICAgIHNbaV0uX2FkZChuZXcgQ29tYmluZUxpc3RlbmVyKGksIG91dCwgdGhpcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSB0aGlzLmluc0FycjtcbiAgICBjb25zdCBuID0gcy5sZW5ndGg7XG4gICAgY29uc3QgaWxzID0gdGhpcy5pbHM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHNbaV0uX3JlbW92ZShpbHNbaV0pO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPEFycmF5PFI+PjtcbiAgICB0aGlzLmlscyA9IFtdO1xuICAgIHRoaXMudmFscyA9IFtdO1xuICB9XG59XG5cbmNsYXNzIEZyb21BcnJheTxUPiBpbXBsZW1lbnRzIEludGVybmFsUHJvZHVjZXI8VD4ge1xuICBwdWJsaWMgdHlwZSA9ICdmcm9tQXJyYXknO1xuICBwdWJsaWMgYTogQXJyYXk8VD47XG5cbiAgY29uc3RydWN0b3IoYTogQXJyYXk8VD4pIHtcbiAgICB0aGlzLmEgPSBhO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogSW50ZXJuYWxMaXN0ZW5lcjxUPik6IHZvaWQge1xuICAgIGNvbnN0IGEgPSB0aGlzLmE7XG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBhLmxlbmd0aDsgaSA8IG47IGkrKykgb3V0Ll9uKGFbaV0pO1xuICAgIG91dC5fYygpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gIH1cbn1cblxuY2xhc3MgRnJvbVByb21pc2U8VD4gaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZnJvbVByb21pc2UnO1xuICBwdWJsaWMgb246IGJvb2xlYW47XG4gIHB1YmxpYyBwOiBQcm9taXNlTGlrZTxUPjtcblxuICBjb25zdHJ1Y3RvcihwOiBQcm9taXNlTGlrZTxUPikge1xuICAgIHRoaXMub24gPSBmYWxzZTtcbiAgICB0aGlzLnAgPSBwO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogSW50ZXJuYWxMaXN0ZW5lcjxUPik6IHZvaWQge1xuICAgIGNvbnN0IHByb2QgPSB0aGlzO1xuICAgIHRoaXMub24gPSB0cnVlO1xuICAgIHRoaXMucC50aGVuKFxuICAgICAgKHY6IFQpID0+IHtcbiAgICAgICAgaWYgKHByb2Qub24pIHtcbiAgICAgICAgICBvdXQuX24odik7XG4gICAgICAgICAgb3V0Ll9jKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZTogYW55KSA9PiB7XG4gICAgICAgIG91dC5fZShlKTtcbiAgICAgIH0sXG4gICAgKS50aGVuKG5vb3AsIChlcnI6IGFueSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRocm93IGVycjsgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uID0gZmFsc2U7XG4gIH1cbn1cblxuY2xhc3MgUGVyaW9kaWMgaW1wbGVtZW50cyBJbnRlcm5hbFByb2R1Y2VyPG51bWJlcj4ge1xuICBwdWJsaWMgdHlwZSA9ICdwZXJpb2RpYyc7XG4gIHB1YmxpYyBwZXJpb2Q6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbnRlcnZhbElEOiBhbnk7XG4gIHByaXZhdGUgaTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHBlcmlvZDogbnVtYmVyKSB7XG4gICAgdGhpcy5wZXJpb2QgPSBwZXJpb2Q7XG4gICAgdGhpcy5pbnRlcnZhbElEID0gLTE7XG4gICAgdGhpcy5pID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IEludGVybmFsTGlzdGVuZXI8bnVtYmVyPik6IHZvaWQge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGludGVydmFsSGFuZGxlcigpIHsgb3V0Ll9uKHNlbGYuaSsrKTsgfVxuICAgIHRoaXMuaW50ZXJ2YWxJRCA9IHNldEludGVydmFsKGludGVydmFsSGFuZGxlciwgdGhpcy5wZXJpb2QpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJRCAhPT0gLTEpIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElEKTtcbiAgICB0aGlzLmludGVydmFsSUQgPSAtMTtcbiAgICB0aGlzLmkgPSAwO1xuICB9XG59XG5cbmNsYXNzIERlYnVnPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdkZWJ1Zyc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFQ+O1xuICBwcml2YXRlIHM6ICh0OiBUKSA9PiBhbnk7IC8vIHNweVxuICBwcml2YXRlIGw6IHN0cmluZzsgLy8gbGFiZWxcblxuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPik7XG4gIGNvbnN0cnVjdG9yKGluczogU3RyZWFtPFQ+LCBhcmc/OiBzdHJpbmcpO1xuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPiwgYXJnPzogKHQ6IFQpID0+IGFueSk7XG4gIGNvbnN0cnVjdG9yKGluczogU3RyZWFtPFQ+LCBhcmc/OiBzdHJpbmcgfCAoKHQ6IFQpID0+IGFueSkpO1xuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPiwgYXJnPzogc3RyaW5nIHwgKCh0OiBUKSA9PiBhbnkpIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5zID0gbm9vcDtcbiAgICB0aGlzLmwgPSAnJztcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHRoaXMubCA9IGFyZzsgZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5zID0gYXJnO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHMgPSB0aGlzLnMsIGwgPSB0aGlzLmw7XG4gICAgaWYgKHMgIT09IG5vb3ApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHUuX2UoZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChsKSBjb25zb2xlLmxvZyhsICsgJzonLCB0KTsgZWxzZSBjb25zb2xlLmxvZyh0KTtcbiAgICB1Ll9uKHQpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2MoKTtcbiAgfVxufVxuXG5jbGFzcyBEcm9wPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdkcm9wJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBkcm9wcGVkOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IobWF4OiBudW1iZXIsIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gICAgdGhpcy5kcm9wcGVkID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuZHJvcHBlZCA9IDA7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmRyb3BwZWQrKyA+PSB0aGlzLm1heCkgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9jKCk7XG4gIH1cbn1cblxuY2xhc3MgRW5kV2hlbkxpc3RlbmVyPFQ+IGltcGxlbWVudHMgSW50ZXJuYWxMaXN0ZW5lcjxhbnk+IHtcbiAgcHJpdmF0ZSBvdXQ6IFN0cmVhbTxUPjtcbiAgcHJpdmF0ZSBvcDogRW5kV2hlbjxUPjtcblxuICBjb25zdHJ1Y3RvcihvdXQ6IFN0cmVhbTxUPiwgb3A6IEVuZFdoZW48VD4pIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm9wID0gb3A7XG4gIH1cblxuICBfbigpIHtcbiAgICB0aGlzLm9wLmVuZCgpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICB0aGlzLm91dC5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgdGhpcy5vcC5lbmQoKTtcbiAgfVxufVxuXG5jbGFzcyBFbmRXaGVuPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdlbmRXaGVuJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHB1YmxpYyBvOiBTdHJlYW08YW55PjsgLy8gbyA9IG90aGVyXG4gIHByaXZhdGUgb2lsOiBJbnRlcm5hbExpc3RlbmVyPGFueT47IC8vIG9pbCA9IG90aGVyIEludGVybmFsTGlzdGVuZXJcblxuICBjb25zdHJ1Y3RvcihvOiBTdHJlYW08YW55PiwgaW5zOiBTdHJlYW08VD4pIHtcbiAgICB0aGlzLmlucyA9IGlucztcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLm8gPSBvO1xuICAgIHRoaXMub2lsID0gTk9fSUw7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm8uX2FkZCh0aGlzLm9pbCA9IG5ldyBFbmRXaGVuTGlzdGVuZXIob3V0LCB0aGlzKSk7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vLl9yZW1vdmUodGhpcy5vaWwpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMub2lsID0gTk9fSUw7XG4gIH1cblxuICBlbmQoKTogdm9pZCB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2MoKTtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMuZW5kKCk7XG4gIH1cbn1cblxuY2xhc3MgRmlsdGVyPFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdmaWx0ZXInO1xuICBwdWJsaWMgaW5zOiBTdHJlYW08VD47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPjtcbiAgcHVibGljIGY6ICh0OiBUKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHBhc3NlczogKHQ6IFQpID0+IGJvb2xlYW4sIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5mID0gcGFzc2VzO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSBfdHJ5KHRoaXMsIHQsIHUpO1xuICAgIGlmIChyID09PSBOTyB8fCAhcikgcmV0dXJuO1xuICAgIHUuX24odCk7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmNsYXNzIEZsYXR0ZW5MaXN0ZW5lcjxUPiBpbXBsZW1lbnRzIEludGVybmFsTGlzdGVuZXI8VD4ge1xuICBwcml2YXRlIG91dDogU3RyZWFtPFQ+O1xuICBwcml2YXRlIG9wOiBGbGF0dGVuPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKG91dDogU3RyZWFtPFQ+LCBvcDogRmxhdHRlbjxUPikge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMub3AgPSBvcDtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICB0aGlzLm91dC5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgdGhpcy5vdXQuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIHRoaXMub3AuaW5uZXIgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5vcC5sZXNzKCk7XG4gIH1cbn1cblxuY2xhc3MgRmxhdHRlbjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFN0cmVhbTxUPiwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdmbGF0dGVuJztcbiAgcHVibGljIGluczogU3RyZWFtPFN0cmVhbTxUPj47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPjtcbiAgcHJpdmF0ZSBvcGVuOiBib29sZWFuO1xuICBwdWJsaWMgaW5uZXI6IFN0cmVhbTxUPjsgLy8gQ3VycmVudCBpbm5lciBTdHJlYW1cbiAgcHJpdmF0ZSBpbDogSW50ZXJuYWxMaXN0ZW5lcjxUPjsgLy8gQ3VycmVudCBpbm5lciBJbnRlcm5hbExpc3RlbmVyXG5cbiAgY29uc3RydWN0b3IoaW5zOiBTdHJlYW08U3RyZWFtPFQ+Pikge1xuICAgIHRoaXMuaW5zID0gaW5zO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5pbm5lciA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLmlsID0gTk9fSUw7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMuaW5uZXIgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5pbCA9IE5PX0lMO1xuICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgIGlmICh0aGlzLmlubmVyICE9PSBOTykgdGhpcy5pbm5lci5fcmVtb3ZlKHRoaXMuaWwpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMub3BlbiA9IHRydWU7XG4gICAgdGhpcy5pbm5lciA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLmlsID0gTk9fSUw7XG4gIH1cblxuICBsZXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICBpZiAoIXRoaXMub3BlbiAmJiB0aGlzLmlubmVyID09PSBOTykgdS5fYygpO1xuICB9XG5cbiAgX24oczogU3RyZWFtPFQ+KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHsgaW5uZXIsIGlsIH0gPSB0aGlzO1xuICAgIGlmIChpbm5lciAhPT0gTk8gJiYgaWwgIT09IE5PX0lMKSBpbm5lci5fcmVtb3ZlKGlsKTtcbiAgICAodGhpcy5pbm5lciA9IHMpLl9hZGQodGhpcy5pbCA9IG5ldyBGbGF0dGVuTGlzdGVuZXIodSwgdGhpcykpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5sZXNzKCk7XG4gIH1cbn1cblxuY2xhc3MgRm9sZDxULCBSPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFI+IHtcbiAgcHVibGljIHR5cGUgPSAnZm9sZCc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFI+O1xuICBwdWJsaWMgZjogKHQ6IFQpID0+IFI7XG4gIHB1YmxpYyBzZWVkOiBSO1xuICBwcml2YXRlIGFjYzogUjsgLy8gaW5pdGlhbGl6ZWQgYXMgc2VlZFxuXG4gIGNvbnN0cnVjdG9yKGY6IChhY2M6IFIsIHQ6IFQpID0+IFIsIHNlZWQ6IFIsIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08Uj47XG4gICAgdGhpcy5mID0gKHQ6IFQpID0+IGYodGhpcy5hY2MsIHQpO1xuICAgIHRoaXMuYWNjID0gdGhpcy5zZWVkID0gc2VlZDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxSPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuYWNjID0gdGhpcy5zZWVkO1xuICAgIG91dC5fbih0aGlzLmFjYyk7XG4gICAgdGhpcy5pbnMuX2FkZCh0aGlzKTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcyk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08Uj47XG4gICAgdGhpcy5hY2MgPSB0aGlzLnNlZWQ7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIGNvbnN0IHIgPSBfdHJ5KHRoaXMsIHQsIHUpO1xuICAgIGlmIChyID09PSBOTykgcmV0dXJuO1xuICAgIHUuX24odGhpcy5hY2MgPSByIGFzIFIpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2MoKTtcbiAgfVxufVxuXG5jbGFzcyBMYXN0PFQ+IGltcGxlbWVudHMgT3BlcmF0b3I8VCwgVD4ge1xuICBwdWJsaWMgdHlwZSA9ICdsYXN0JztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHByaXZhdGUgaGFzOiBib29sZWFuO1xuICBwcml2YXRlIHZhbDogVDtcblxuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPikge1xuICAgIHRoaXMuaW5zID0gaW5zO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICAgIHRoaXMuaGFzID0gZmFsc2U7XG4gICAgdGhpcy52YWwgPSBOTyBhcyBUO1xuICB9XG5cbiAgX3N0YXJ0KG91dDogU3RyZWFtPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5vdXQgPSBvdXQ7XG4gICAgdGhpcy5oYXMgPSBmYWxzZTtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLnZhbCA9IE5PIGFzIFQ7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgdGhpcy5oYXMgPSB0cnVlO1xuICAgIHRoaXMudmFsID0gdDtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHUuX2UoZXJyKTtcbiAgfVxuXG4gIF9jKCkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICBpZiAodGhpcy5oYXMpIHtcbiAgICAgIHUuX24odGhpcy52YWwpO1xuICAgICAgdS5fYygpO1xuICAgIH0gZWxzZSB1Ll9lKG5ldyBFcnJvcignbGFzdCgpIGZhaWxlZCBiZWNhdXNlIGlucHV0IHN0cmVhbSBjb21wbGV0ZWQnKSk7XG4gIH1cbn1cblxuY2xhc3MgTWFwT3A8VCwgUj4gaW1wbGVtZW50cyBPcGVyYXRvcjxULCBSPiB7XG4gIHB1YmxpYyB0eXBlID0gJ21hcCc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFI+O1xuICBwdWJsaWMgZjogKHQ6IFQpID0+IFI7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogKHQ6IFQpID0+IFIsIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08Uj47XG4gICAgdGhpcy5mID0gcHJvamVjdDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxSPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuaW5zLl9hZGQodGhpcyk7XG4gIH1cblxuICBfc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFI+O1xuICB9XG5cbiAgX24odDogVCkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICBjb25zdCByID0gX3RyeSh0aGlzLCB0LCB1KTtcbiAgICBpZiAociA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9uKHIgYXMgUik7XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmNsYXNzIFJlbWVtYmVyPFQ+IGltcGxlbWVudHMgSW50ZXJuYWxQcm9kdWNlcjxUPiB7XG4gIHB1YmxpYyB0eXBlID0gJ3JlbWVtYmVyJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG5cbiAgY29uc3RydWN0b3IoaW5zOiBTdHJlYW08VD4pIHtcbiAgICB0aGlzLmlucyA9IGlucztcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMuaW5zLl9hZGQob3V0KTtcbiAgfVxuXG4gIF9zdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zLl9yZW1vdmUodGhpcy5vdXQpO1xuICAgIHRoaXMub3V0ID0gTk8gYXMgU3RyZWFtPFQ+O1xuICB9XG59XG5cbmNsYXNzIFJlcGxhY2VFcnJvcjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAncmVwbGFjZUVycm9yJztcbiAgcHVibGljIGluczogU3RyZWFtPFQ+O1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD47XG4gIHB1YmxpYyBmOiAoZXJyOiBhbnkpID0+IFN0cmVhbTxUPjtcblxuICBjb25zdHJ1Y3RvcihyZXBsYWNlcjogKGVycjogYW55KSA9PiBTdHJlYW08VD4sIGluczogU3RyZWFtPFQ+KSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy5mID0gcmVwbGFjZXI7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fbih0KTtcbiAgfVxuXG4gIF9lKGVycjogYW55KSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICh1ID09PSBOTykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlucy5fcmVtb3ZlKHRoaXMpO1xuICAgICAgKHRoaXMuaW5zID0gdGhpcy5mKGVycikpLl9hZGQodGhpcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdS5fZShlKTtcbiAgICB9XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmNsYXNzIFN0YXJ0V2l0aDxUPiBpbXBsZW1lbnRzIEludGVybmFsUHJvZHVjZXI8VD4ge1xuICBwdWJsaWMgdHlwZSA9ICdzdGFydFdpdGgnO1xuICBwdWJsaWMgaW5zOiBTdHJlYW08VD47XG4gIHB1YmxpYyBvdXQ6IFN0cmVhbTxUPjtcbiAgcHVibGljIHZhbDogVDtcblxuICBjb25zdHJ1Y3RvcihpbnM6IFN0cmVhbTxUPiwgdmFsOiBUKSB7XG4gICAgdGhpcy5pbnMgPSBpbnM7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gICAgdGhpcy52YWwgPSB2YWw7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLm91dC5fbih0aGlzLnZhbCk7XG4gICAgdGhpcy5pbnMuX2FkZChvdXQpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzLm91dCk7XG4gICAgdGhpcy5vdXQgPSBOTyBhcyBTdHJlYW08VD47XG4gIH1cbn1cblxuY2xhc3MgVGFrZTxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAndGFrZSc7XG4gIHB1YmxpYyBpbnM6IFN0cmVhbTxUPjtcbiAgcHVibGljIG91dDogU3RyZWFtPFQ+O1xuICBwdWJsaWMgbWF4OiBudW1iZXI7XG4gIHByaXZhdGUgdGFrZW46IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihtYXg6IG51bWJlciwgaW5zOiBTdHJlYW08VD4pIHtcbiAgICB0aGlzLmlucyA9IGlucztcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgICB0aGlzLnRha2VuID0gMDtcbiAgfVxuXG4gIF9zdGFydChvdXQ6IFN0cmVhbTxUPik6IHZvaWQge1xuICAgIHRoaXMub3V0ID0gb3V0O1xuICAgIHRoaXMudGFrZW4gPSAwO1xuICAgIGlmICh0aGlzLm1heCA8PSAwKSBvdXQuX2MoKTsgZWxzZSB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IE5PIGFzIFN0cmVhbTxUPjtcbiAgfVxuXG4gIF9uKHQ6IFQpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgY29uc3QgbSA9ICsrdGhpcy50YWtlbjtcbiAgICBpZiAobSA8IHRoaXMubWF4KSB1Ll9uKHQpOyBlbHNlIGlmIChtID09PSB0aGlzLm1heCkge1xuICAgICAgdS5fbih0KTtcbiAgICAgIHUuX2MoKTtcbiAgICB9XG4gIH1cblxuICBfZShlcnI6IGFueSkge1xuICAgIGNvbnN0IHUgPSB0aGlzLm91dDtcbiAgICBpZiAodSA9PT0gTk8pIHJldHVybjtcbiAgICB1Ll9lKGVycik7XG4gIH1cblxuICBfYygpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKHUgPT09IE5PKSByZXR1cm47XG4gICAgdS5fYygpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW08VD4gaW1wbGVtZW50cyBJbnRlcm5hbExpc3RlbmVyPFQ+IHtcbiAgcHVibGljIF9wcm9kOiBJbnRlcm5hbFByb2R1Y2VyPFQ+O1xuICBwcm90ZWN0ZWQgX2lsczogQXJyYXk8SW50ZXJuYWxMaXN0ZW5lcjxUPj47IC8vICdpbHMnID0gSW50ZXJuYWwgbGlzdGVuZXJzXG4gIHByb3RlY3RlZCBfc3RvcElEOiBhbnk7XG4gIHByb3RlY3RlZCBfZGw6IEludGVybmFsTGlzdGVuZXI8VD47IC8vIHRoZSBkZWJ1ZyBsaXN0ZW5lclxuICBwcm90ZWN0ZWQgX2Q6IGJvb2xlYW47IC8vIGZsYWcgaW5kaWNhdGluZyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBkZWJ1ZyBsaXN0ZW5lclxuICBwcm90ZWN0ZWQgX3RhcmdldDogU3RyZWFtPFQ+IHwgbnVsbDsgLy8gaW1pdGF0aW9uIHRhcmdldCBpZiB0aGlzIFN0cmVhbSB3aWxsIGltaXRhdGVcbiAgcHJvdGVjdGVkIF9lcnI6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9kdWNlcj86IEludGVybmFsUHJvZHVjZXI8VD4pIHtcbiAgICB0aGlzLl9wcm9kID0gcHJvZHVjZXIgfHwgTk8gYXMgSW50ZXJuYWxQcm9kdWNlcjxUPjtcbiAgICB0aGlzLl9pbHMgPSBbXTtcbiAgICB0aGlzLl9zdG9wSUQgPSBOTztcbiAgICB0aGlzLl9kbCA9IE5PIGFzIEludGVybmFsTGlzdGVuZXI8VD47XG4gICAgdGhpcy5fZCA9IGZhbHNlO1xuICAgIHRoaXMuX3RhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fZXJyID0gTk87XG4gIH1cblxuICBfbih0OiBUKTogdm9pZCB7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBMID0gYS5sZW5ndGg7XG4gICAgaWYgKHRoaXMuX2QpIHRoaXMuX2RsLl9uKHQpO1xuICAgIGlmIChMID09IDEpIGFbMF0uX24odCk7IGVsc2UgaWYgKEwgPT0gMCkgcmV0dXJuOyBlbHNlIHtcbiAgICAgIGNvbnN0IGIgPSBjcChhKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTDsgaSsrKSBiW2ldLl9uKHQpO1xuICAgIH1cbiAgfVxuXG4gIF9lKGVycjogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2VyciAhPT0gTk8pIHJldHVybjtcbiAgICB0aGlzLl9lcnIgPSBlcnI7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBMID0gYS5sZW5ndGg7XG4gICAgdGhpcy5feCgpO1xuICAgIGlmICh0aGlzLl9kKSB0aGlzLl9kbC5fZShlcnIpO1xuICAgIGlmIChMID09IDEpIGFbMF0uX2UoZXJyKTsgZWxzZSBpZiAoTCA9PSAwKSByZXR1cm47IGVsc2Uge1xuICAgICAgY29uc3QgYiA9IGNwKGEpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIGJbaV0uX2UoZXJyKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9kICYmIEwgPT0gMCkgdGhyb3cgdGhpcy5fZXJyO1xuICB9XG5cbiAgX2MoKTogdm9pZCB7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBMID0gYS5sZW5ndGg7XG4gICAgdGhpcy5feCgpO1xuICAgIGlmICh0aGlzLl9kKSB0aGlzLl9kbC5fYygpO1xuICAgIGlmIChMID09IDEpIGFbMF0uX2MoKTsgZWxzZSBpZiAoTCA9PSAwKSByZXR1cm47IGVsc2Uge1xuICAgICAgY29uc3QgYiA9IGNwKGEpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBMOyBpKyspIGJbaV0uX2MoKTtcbiAgICB9XG4gIH1cblxuICBfeCgpOiB2b2lkIHsgLy8gdGVhciBkb3duIGxvZ2ljLCBhZnRlciBlcnJvciBvciBjb21wbGV0ZVxuICAgIGlmICh0aGlzLl9pbHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuX3Byb2QgIT09IE5PKSB0aGlzLl9wcm9kLl9zdG9wKCk7XG4gICAgdGhpcy5fZXJyID0gTk87XG4gICAgdGhpcy5faWxzID0gW107XG4gIH1cblxuICBfc3RvcE5vdygpIHtcbiAgICAvLyBXQVJOSU5HOiBjb2RlIHRoYXQgY2FsbHMgdGhpcyBtZXRob2Qgc2hvdWxkXG4gICAgLy8gZmlyc3QgY2hlY2sgaWYgdGhpcy5fcHJvZCBpcyB2YWxpZCAobm90IGBOT2ApXG4gICAgdGhpcy5fcHJvZC5fc3RvcCgpO1xuICAgIHRoaXMuX2VyciA9IE5PO1xuICAgIHRoaXMuX3N0b3BJRCA9IE5PO1xuICB9XG5cbiAgX2FkZChpbDogSW50ZXJuYWxMaXN0ZW5lcjxUPik6IHZvaWQge1xuICAgIGNvbnN0IHRhID0gdGhpcy5fdGFyZ2V0O1xuICAgIGlmICh0YSkgcmV0dXJuIHRhLl9hZGQoaWwpO1xuICAgIGNvbnN0IGEgPSB0aGlzLl9pbHM7XG4gICAgYS5wdXNoKGlsKTtcbiAgICBpZiAoYS5sZW5ndGggPiAxKSByZXR1cm47XG4gICAgaWYgKHRoaXMuX3N0b3BJRCAhPT0gTk8pIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdG9wSUQpO1xuICAgICAgdGhpcy5fc3RvcElEID0gTk87XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLl9wcm9kO1xuICAgICAgaWYgKHAgIT09IE5PKSBwLl9zdGFydCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBfcmVtb3ZlKGlsOiBJbnRlcm5hbExpc3RlbmVyPFQ+KTogdm9pZCB7XG4gICAgY29uc3QgdGEgPSB0aGlzLl90YXJnZXQ7XG4gICAgaWYgKHRhKSByZXR1cm4gdGEuX3JlbW92ZShpbCk7XG4gICAgY29uc3QgYSA9IHRoaXMuX2lscztcbiAgICBjb25zdCBpID0gYS5pbmRleE9mKGlsKTtcbiAgICBpZiAoaSA+IC0xKSB7XG4gICAgICBhLnNwbGljZShpLCAxKTtcbiAgICAgIGlmICh0aGlzLl9wcm9kICE9PSBOTyAmJiBhLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIHRoaXMuX2VyciA9IE5PO1xuICAgICAgICB0aGlzLl9zdG9wSUQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3N0b3BOb3coKSk7XG4gICAgICB9IGVsc2UgaWYgKGEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMuX3BydW5lQ3ljbGVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgYWxsIHBhdGhzIHN0ZW1taW5nIGZyb20gYHRoaXNgIHN0cmVhbSBldmVudHVhbGx5IGVuZCBhdCBgdGhpc2BcbiAgLy8gc3RyZWFtLCB0aGVuIHdlIHJlbW92ZSB0aGUgc2luZ2xlIGxpc3RlbmVyIG9mIGB0aGlzYCBzdHJlYW0sIHRvXG4gIC8vIGZvcmNlIGl0IHRvIGVuZCBpdHMgZXhlY3V0aW9uIGFuZCBkaXNwb3NlIHJlc291cmNlcy4gVGhpcyBtZXRob2RcbiAgLy8gYXNzdW1lcyBhcyBhIHByZWNvbmRpdGlvbiB0aGF0IHRoaXMuX2lscyBoYXMganVzdCBvbmUgbGlzdGVuZXIuXG4gIF9wcnVuZUN5Y2xlcygpIHtcbiAgICBpZiAodGhpcy5faGFzTm9TaW5rcyh0aGlzLCBbXSkpIHRoaXMuX3JlbW92ZSh0aGlzLl9pbHNbMF0pO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgKnRoZXJlIGlzIG5vKiBwYXRoIHN0YXJ0aW5nIGZyb20gYHhgIHRoYXQgbGVhZHMgdG8gYW4gZW5kXG4gIC8vIGxpc3RlbmVyIChzaW5rKSBpbiB0aGUgc3RyZWFtIGdyYXBoLCBmb2xsb3dpbmcgZWRnZXMgQS0+QiB3aGVyZSBCIGlzIGFcbiAgLy8gbGlzdGVuZXIgb2YgQS4gVGhpcyBtZWFucyB0aGVzZSBwYXRocyBjb25zdGl0dXRlIGEgY3ljbGUgc29tZWhvdy4gSXMgZ2l2ZW5cbiAgLy8gYSB0cmFjZSBvZiBhbGwgdmlzaXRlZCBub2RlcyBzbyBmYXIuXG4gIF9oYXNOb1NpbmtzKHg6IEludGVybmFsTGlzdGVuZXI8YW55PiwgdHJhY2U6IEFycmF5PGFueT4pOiBib29sZWFuIHtcbiAgICBpZiAodHJhY2UuaW5kZXhPZih4KSAhPT0gLTEpXG4gICAgICByZXR1cm4gdHJ1ZTsgZWxzZVxuICAgICAgaWYgKCh4IGFzIGFueSBhcyBPdXRTZW5kZXI8YW55Pikub3V0ID09PSB0aGlzKVxuICAgICAgICByZXR1cm4gdHJ1ZTsgZWxzZVxuICAgICAgICBpZiAoKHggYXMgYW55IGFzIE91dFNlbmRlcjxhbnk+KS5vdXQgJiYgKHggYXMgYW55IGFzIE91dFNlbmRlcjxhbnk+KS5vdXQgIT09IE5PKVxuICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNOb1NpbmtzKCh4IGFzIGFueSBhcyBPdXRTZW5kZXI8YW55Pikub3V0LCB0cmFjZS5jb25jYXQoeCkpOyBlbHNlXG4gICAgICAgICAgaWYgKCh4IGFzIFN0cmVhbTxhbnk+KS5faWxzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgTiA9ICh4IGFzIFN0cmVhbTxhbnk+KS5faWxzLmxlbmd0aDsgaSA8IE47IGkrKylcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNOb1NpbmtzKCh4IGFzIFN0cmVhbTxhbnk+KS5faWxzW2ldLCB0cmFjZS5jb25jYXQoeCkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGN0b3IoKTogdHlwZW9mIFN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZW1vcnlTdHJlYW0gPyBNZW1vcnlTdHJlYW0gOiBTdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIExpc3RlbmVyIHRvIHRoZSBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSB7TGlzdGVuZXJ9IGxpc3RlbmVyXG4gICAqL1xuICBhZGRMaXN0ZW5lcihsaXN0ZW5lcjogUGFydGlhbDxMaXN0ZW5lcjxUPj4pOiB2b2lkIHtcbiAgICAobGlzdGVuZXIgYXMgSW50ZXJuYWxMaXN0ZW5lcjxUPikuX24gPSBsaXN0ZW5lci5uZXh0IHx8IG5vb3A7XG4gICAgKGxpc3RlbmVyIGFzIEludGVybmFsTGlzdGVuZXI8VD4pLl9lID0gbGlzdGVuZXIuZXJyb3IgfHwgbm9vcDtcbiAgICAobGlzdGVuZXIgYXMgSW50ZXJuYWxMaXN0ZW5lcjxUPikuX2MgPSBsaXN0ZW5lci5jb21wbGV0ZSB8fCBub29wO1xuICAgIHRoaXMuX2FkZChsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgTGlzdGVuZXIgZnJvbSB0aGUgU3RyZWFtLCBhc3N1bWluZyB0aGUgTGlzdGVuZXIgd2FzIGFkZGVkIHRvIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge0xpc3RlbmVyPFQ+fSBsaXN0ZW5lclxuICAgKi9cbiAgcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXI6IFBhcnRpYWw8TGlzdGVuZXI8VD4+KTogdm9pZCB7XG4gICAgdGhpcy5fcmVtb3ZlKGxpc3RlbmVyIGFzIEludGVybmFsTGlzdGVuZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBMaXN0ZW5lciB0byB0aGUgU3RyZWFtIHJldHVybmluZyBhIFN1YnNjcmlwdGlvbiB0byByZW1vdmUgdGhhdFxuICAgKiBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtMaXN0ZW5lcn0gbGlzdGVuZXJcbiAgICogQHJldHVybnMge1N1YnNjcmlwdGlvbn1cbiAgICovXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogUGFydGlhbDxMaXN0ZW5lcjxUPj4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHRoaXMuYWRkTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIHJldHVybiBuZXcgU3RyZWFtU3ViPFQ+KHRoaXMsIGxpc3RlbmVyIGFzIEludGVybmFsTGlzdGVuZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBpbnRlcm9wIGJldHdlZW4gbW9zdC5qcyBhbmQgUnhKUyA1XG4gICAqXG4gICAqIEByZXR1cm5zIHtTdHJlYW19XG4gICAqL1xuICBbJCRvYnNlcnZhYmxlXSgpOiBTdHJlYW08VD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU3RyZWFtIGdpdmVuIGEgUHJvZHVjZXIuXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtQcm9kdWNlcn0gcHJvZHVjZXIgQW4gb3B0aW9uYWwgUHJvZHVjZXIgdGhhdCBkaWN0YXRlcyBob3cgdG9cbiAgICogc3RhcnQsIGdlbmVyYXRlIGV2ZW50cywgYW5kIHN0b3AgdGhlIFN0cmVhbS5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZTxUPihwcm9kdWNlcj86IFByb2R1Y2VyPFQ+KTogU3RyZWFtPFQ+IHtcbiAgICBpZiAocHJvZHVjZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvZHVjZXIuc3RhcnQgIT09ICdmdW5jdGlvbidcbiAgICAgICAgfHwgdHlwZW9mIHByb2R1Y2VyLnN0b3AgIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvZHVjZXIgcmVxdWlyZXMgYm90aCBzdGFydCBhbmQgc3RvcCBmdW5jdGlvbnMnKTtcbiAgICAgIGludGVybmFsaXplUHJvZHVjZXIocHJvZHVjZXIpOyAvLyBtdXRhdGVzIHRoZSBpbnB1dFxuICAgIH1cbiAgICByZXR1cm4gbmV3IFN0cmVhbShwcm9kdWNlciBhcyBJbnRlcm5hbFByb2R1Y2VyPFQ+ICYgUHJvZHVjZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTWVtb3J5U3RyZWFtIGdpdmVuIGEgUHJvZHVjZXIuXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtQcm9kdWNlcn0gcHJvZHVjZXIgQW4gb3B0aW9uYWwgUHJvZHVjZXIgdGhhdCBkaWN0YXRlcyBob3cgdG9cbiAgICogc3RhcnQsIGdlbmVyYXRlIGV2ZW50cywgYW5kIHN0b3AgdGhlIFN0cmVhbS5cbiAgICogQHJldHVybiB7TWVtb3J5U3RyZWFtfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVdpdGhNZW1vcnk8VD4ocHJvZHVjZXI/OiBQcm9kdWNlcjxUPik6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgaWYgKHByb2R1Y2VyKSBpbnRlcm5hbGl6ZVByb2R1Y2VyKHByb2R1Y2VyKTsgLy8gbXV0YXRlcyB0aGUgaW5wdXRcbiAgICByZXR1cm4gbmV3IE1lbW9yeVN0cmVhbTxUPihwcm9kdWNlciBhcyBJbnRlcm5hbFByb2R1Y2VyPFQ+ICYgUHJvZHVjZXI8VD4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTdHJlYW0gdGhhdCBkb2VzIG5vdGhpbmcgd2hlbiBzdGFydGVkLiBJdCBuZXZlciBlbWl0cyBhbnkgZXZlbnQuXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqICAgICAgICAgIG5ldmVyXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAZmFjdG9yeSB0cnVlXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBuZXZlcjxUID0gYW55PigpOiBTdHJlYW08VD4ge1xuICAgIHJldHVybiBuZXcgU3RyZWFtPFQ+KHsgX3N0YXJ0OiBub29wLCBfc3RvcDogbm9vcCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU3RyZWFtIHRoYXQgaW1tZWRpYXRlbHkgZW1pdHMgdGhlIFwiY29tcGxldGVcIiBub3RpZmljYXRpb24gd2hlblxuICAgKiBzdGFydGVkLCBhbmQgdGhhdCdzIGl0LlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBlbXB0eVxuICAgKiAtfFxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgZW1wdHk8VCA9IGFueT4oKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPih7XG4gICAgICBfc3RhcnQoaWw6IEludGVybmFsTGlzdGVuZXI8YW55PikgeyBpbC5fYygpOyB9LFxuICAgICAgX3N0b3A6IG5vb3AsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFN0cmVhbSB0aGF0IGltbWVkaWF0ZWx5IGVtaXRzIGFuIFwiZXJyb3JcIiBub3RpZmljYXRpb24gd2l0aCB0aGVcbiAgICogdmFsdWUgeW91IHBhc3NlZCBhcyB0aGUgYGVycm9yYCBhcmd1bWVudCB3aGVuIHRoZSBzdHJlYW0gc3RhcnRzLCBhbmQgdGhhdCdzXG4gICAqIGl0LlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiB0aHJvdyhYKVxuICAgKiAtWFxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIGV2ZW50IHRvIGVtaXQgb24gdGhlIGNyZWF0ZWQgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgdGhyb3coZXJyb3I6IGFueSk6IFN0cmVhbTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxhbnk+KHtcbiAgICAgIF9zdGFydChpbDogSW50ZXJuYWxMaXN0ZW5lcjxhbnk+KSB7IGlsLl9lKGVycm9yKTsgfSxcbiAgICAgIF9zdG9wOiBub29wLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdHJlYW0gZnJvbSBhbiBBcnJheSwgUHJvbWlzZSwgb3IgYW4gT2JzZXJ2YWJsZS5cbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0ge0FycmF5fFByb21pc2VMaWtlfE9ic2VydmFibGV9IGlucHV0IFRoZSBpbnB1dCB0byBtYWtlIGEgc3RyZWFtIGZyb20uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBmcm9tPFQ+KGlucHV0OiBQcm9taXNlTGlrZTxUPiB8IFN0cmVhbTxUPiB8IEFycmF5PFQ+IHwgT2JzZXJ2YWJsZTxUPik6IFN0cmVhbTxUPiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dFskJG9ic2VydmFibGVdID09PSAnZnVuY3Rpb24nKVxuICAgICAgcmV0dXJuIFN0cmVhbS5mcm9tT2JzZXJ2YWJsZTxUPihpbnB1dCBhcyBPYnNlcnZhYmxlPFQ+KTsgZWxzZVxuICAgICAgaWYgKHR5cGVvZiAoaW5wdXQgYXMgUHJvbWlzZUxpa2U8VD4pLnRoZW4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiBTdHJlYW0uZnJvbVByb21pc2U8VD4oaW5wdXQgYXMgUHJvbWlzZUxpa2U8VD4pOyBlbHNlXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSlcbiAgICAgICAgICByZXR1cm4gU3RyZWFtLmZyb21BcnJheTxUPihpbnB1dCk7XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBUeXBlIG9mIGlucHV0IHRvIGZyb20oKSBtdXN0IGJlIGFuIEFycmF5LCBQcm9taXNlLCBvciBPYnNlcnZhYmxlYCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFN0cmVhbSB0aGF0IGltbWVkaWF0ZWx5IGVtaXRzIHRoZSBhcmd1bWVudHMgdGhhdCB5b3UgZ2l2ZSB0b1xuICAgKiAqb2YqLCB0aGVuIGNvbXBsZXRlcy5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogb2YoMSwyLDMpXG4gICAqIDEyM3xcbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIGEgVGhlIGZpcnN0IHZhbHVlIHlvdSB3YW50IHRvIGVtaXQgYXMgYW4gZXZlbnQgb24gdGhlIHN0cmVhbS5cbiAgICogQHBhcmFtIGIgVGhlIHNlY29uZCB2YWx1ZSB5b3Ugd2FudCB0byBlbWl0IGFzIGFuIGV2ZW50IG9uIHRoZSBzdHJlYW0uIE9uZVxuICAgKiBvciBtb3JlIG9mIHRoZXNlIHZhbHVlcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgb2Y8VD4oLi4uaXRlbXM6IEFycmF5PFQ+KTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gU3RyZWFtLmZyb21BcnJheTxUPihpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gYXJyYXkgdG8gYSBzdHJlYW0uIFRoZSByZXR1cm5lZCBzdHJlYW0gd2lsbCBlbWl0IHN5bmNocm9ub3VzbHlcbiAgICogYWxsIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXksIGFuZCB0aGVuIGNvbXBsZXRlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBmcm9tQXJyYXkoWzEsMiwzXSlcbiAgICogMTIzfFxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gYmUgY29udmVydGVkIGFzIGEgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgZnJvbUFycmF5PFQ+KGFycmF5OiBBcnJheTxUPik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08VD4obmV3IEZyb21BcnJheTxUPihhcnJheSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgcHJvbWlzZSB0byBhIHN0cmVhbS4gVGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIGVtaXQgdGhlIHJlc29sdmVkXG4gICAqIHZhbHVlIG9mIHRoZSBwcm9taXNlLCBhbmQgdGhlbiBjb21wbGV0ZS4gSG93ZXZlciwgaWYgdGhlIHByb21pc2UgaXNcbiAgICogcmVqZWN0ZWQsIHRoZSBzdHJlYW0gd2lsbCBlbWl0IHRoZSBjb3JyZXNwb25kaW5nIGVycm9yLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBmcm9tUHJvbWlzZSggLS0tLTQyIClcbiAgICogLS0tLS0tLS0tLS0tLS0tLS00MnxcbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtQcm9taXNlTGlrZX0gcHJvbWlzZSBUaGUgcHJvbWlzZSB0byBiZSBjb252ZXJ0ZWQgYXMgYSBzdHJlYW0uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUHJvbWlzZTxUPihwcm9taXNlOiBQcm9taXNlTGlrZTxUPik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08VD4obmV3IEZyb21Qcm9taXNlPFQ+KHByb21pc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBPYnNlcnZhYmxlIGludG8gYSBTdHJlYW0uXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHthbnl9IG9ic2VydmFibGUgVGhlIG9ic2VydmFibGUgdG8gYmUgY29udmVydGVkIGFzIGEgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgZnJvbU9ic2VydmFibGU8VD4ob2JzOiB7IHN1YnNjcmliZTogYW55IH0pOiBTdHJlYW08VD4ge1xuICAgIGlmICgob2JzIGFzIFN0cmVhbTxUPikuZW5kV2hlbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gb2JzIGFzIFN0cmVhbTxUPjtcbiAgICBjb25zdCBvID0gdHlwZW9mIG9ic1skJG9ic2VydmFibGVdID09PSAnZnVuY3Rpb24nID8gb2JzWyQkb2JzZXJ2YWJsZV0oKSA6IG9icztcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPihuZXcgRnJvbU9ic2VydmFibGUobykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdHJlYW0gdGhhdCBwZXJpb2RpY2FsbHkgZW1pdHMgaW5jcmVtZW50YWwgbnVtYmVycywgZXZlcnlcbiAgICogYHBlcmlvZGAgbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAgICAgcGVyaW9kaWMoMTAwMClcbiAgICogLS0tMC0tLTEtLS0yLS0tMy0tLTQtLS0uLi5cbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBlcmlvZCBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHVzZSBhcyBhIHJhdGUgb2ZcbiAgICogZW1pc3Npb24uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBwZXJpb2RpYyhwZXJpb2Q6IG51bWJlcik6IFN0cmVhbTxudW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxudW1iZXI+KG5ldyBQZXJpb2RpYyhwZXJpb2QpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCbGVuZHMgbXVsdGlwbGUgc3RyZWFtcyB0b2dldGhlciwgZW1pdHRpbmcgZXZlbnRzIGZyb20gYWxsIG9mIHRoZW1cbiAgICogY29uY3VycmVudGx5LlxuICAgKlxuICAgKiAqbWVyZ2UqIHRha2VzIG11bHRpcGxlIHN0cmVhbXMgYXMgYXJndW1lbnRzLCBhbmQgY3JlYXRlcyBhIHN0cmVhbSB0aGF0XG4gICAqIGJlaGF2ZXMgbGlrZSBlYWNoIG9mIHRoZSBhcmd1bWVudCBzdHJlYW1zLCBpbiBwYXJhbGxlbC5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tLTItLS0tLTMtLS0tLS0tLTQtLS1cbiAgICogLS0tLWEtLS0tLWItLS0tYy0tLWQtLS0tLS1cbiAgICogICAgICAgICAgICBtZXJnZVxuICAgKiAtLTEtYS0tMi0tYi0tMy1jLS0tZC0tNC0tLVxuICAgKiBgYGBcbiAgICpcbiAgICogQGZhY3RvcnkgdHJ1ZVxuICAgKiBAcGFyYW0ge1N0cmVhbX0gc3RyZWFtMSBBIHN0cmVhbSB0byBtZXJnZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0yIEEgc3RyZWFtIHRvIG1lcmdlIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3RyZWFtcy4gVHdvXG4gICAqIG9yIG1vcmUgc3RyZWFtcyBtYXkgYmUgZ2l2ZW4gYXMgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBzdGF0aWMgbWVyZ2U6IE1lcmdlU2lnbmF0dXJlID0gZnVuY3Rpb24gbWVyZ2UoLi4uc3RyZWFtczogQXJyYXk8U3RyZWFtPGFueT4+KSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08YW55PihuZXcgTWVyZ2Uoc3RyZWFtcykpO1xuICB9IGFzIE1lcmdlU2lnbmF0dXJlO1xuXG4gIC8qKlxuICAgKiBDb21iaW5lcyBtdWx0aXBsZSBpbnB1dCBzdHJlYW1zIHRvZ2V0aGVyIHRvIHJldHVybiBhIHN0cmVhbSB3aG9zZSBldmVudHNcbiAgICogYXJlIGFycmF5cyB0aGF0IGNvbGxlY3QgdGhlIGxhdGVzdCBldmVudHMgZnJvbSBlYWNoIGlucHV0IHN0cmVhbS5cbiAgICpcbiAgICogKmNvbWJpbmUqIGludGVybmFsbHkgcmVtZW1iZXJzIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIGVhY2ggb2YgdGhlIGlucHV0XG4gICAqIHN0cmVhbXMuIFdoZW4gYW55IG9mIHRoZSBpbnB1dCBzdHJlYW1zIGVtaXRzIGFuIGV2ZW50LCB0aGF0IGV2ZW50IHRvZ2V0aGVyXG4gICAqIHdpdGggYWxsIHRoZSBvdGhlciBzYXZlZCBldmVudHMgYXJlIGNvbWJpbmVkIGludG8gYW4gYXJyYXkuIFRoYXQgYXJyYXkgd2lsbFxuICAgKiBiZSBlbWl0dGVkIG9uIHRoZSBvdXRwdXQgc3RyZWFtLiBJdCdzIGVzc2VudGlhbGx5IGEgd2F5IG9mIGpvaW5pbmcgdG9nZXRoZXJcbiAgICogdGhlIGV2ZW50cyBmcm9tIG11bHRpcGxlIHN0cmVhbXMuXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tMS0tLS0yLS0tLS0zLS0tLS0tLS00LS0tXG4gICAqIC0tLS1hLS0tLS1iLS0tLS1jLS1kLS0tLS0tXG4gICAqICAgICAgICAgIGNvbWJpbmVcbiAgICogLS0tLTFhLTJhLTJiLTNiLTNjLTNkLTRkLS1cbiAgICogYGBgXG4gICAqXG4gICAqIEBmYWN0b3J5IHRydWVcbiAgICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbTEgQSBzdHJlYW0gdG8gY29tYmluZSB0b2dldGhlciB3aXRoIG90aGVyIHN0cmVhbXMuXG4gICAqIEBwYXJhbSB7U3RyZWFtfSBzdHJlYW0yIEEgc3RyZWFtIHRvIGNvbWJpbmUgdG9nZXRoZXIgd2l0aCBvdGhlciBzdHJlYW1zLlxuICAgKiBNdWx0aXBsZSBzdHJlYW1zLCBub3QganVzdCB0d28sIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHN0YXRpYyBjb21iaW5lOiBDb21iaW5lU2lnbmF0dXJlID0gZnVuY3Rpb24gY29tYmluZSguLi5zdHJlYW1zOiBBcnJheTxTdHJlYW08YW55Pj4pIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxBcnJheTxhbnk+PihuZXcgQ29tYmluZTxhbnk+KHN0cmVhbXMpKTtcbiAgfSBhcyBDb21iaW5lU2lnbmF0dXJlO1xuXG4gIHByb3RlY3RlZCBfbWFwPFU+KHByb2plY3Q6ICh0OiBUKSA9PiBVKTogU3RyZWFtPFU+IHwgTWVtb3J5U3RyZWFtPFU+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VT4obmV3IE1hcE9wPFQsIFU+KHByb2plY3QsIHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIGVhY2ggZXZlbnQgZnJvbSB0aGUgaW5wdXQgU3RyZWFtIHRocm91Z2ggYSBgcHJvamVjdGAgZnVuY3Rpb24sXG4gICAqIHRvIGdldCBhIFN0cmVhbSB0aGF0IGVtaXRzIHRob3NlIHRyYW5zZm9ybWVkIGV2ZW50cy5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tMy0tNS0tLS0tNy0tLS0tLVxuICAgKiAgICBtYXAoaSA9PiBpICogMTApXG4gICAqIC0tMTAtLTMwLTUwLS0tLTcwLS0tLS1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2plY3QgQSBmdW5jdGlvbiBvZiB0eXBlIGAodDogVCkgPT4gVWAgdGhhdCB0YWtlcyBldmVudFxuICAgKiBgdGAgb2YgdHlwZSBgVGAgZnJvbSB0aGUgaW5wdXQgU3RyZWFtIGFuZCBwcm9kdWNlcyBhbiBldmVudCBvZiB0eXBlIGBVYCwgdG9cbiAgICogYmUgZW1pdHRlZCBvbiB0aGUgb3V0cHV0IFN0cmVhbS5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgbWFwPFU+KHByb2plY3Q6ICh0OiBUKSA9PiBVKTogU3RyZWFtPFU+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFwKHByb2plY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0J3MgbGlrZSBgbWFwYCwgYnV0IHRyYW5zZm9ybXMgZWFjaCBpbnB1dCBldmVudCB0byBhbHdheXMgdGhlIHNhbWVcbiAgICogY29uc3RhbnQgdmFsdWUgb24gdGhlIG91dHB1dCBTdHJlYW0uXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tMS0tLTMtLTUtLS0tLTctLS0tLVxuICAgKiAgICAgICBtYXBUbygxMClcbiAgICogLS0xMC0tMTAtMTAtLS0tMTAtLS0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcHJvamVjdGVkVmFsdWUgQSB2YWx1ZSB0byBlbWl0IG9uIHRoZSBvdXRwdXQgU3RyZWFtIHdoZW5ldmVyIHRoZVxuICAgKiBpbnB1dCBTdHJlYW0gZW1pdHMgYW55IHZhbHVlLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBtYXBUbzxVPihwcm9qZWN0ZWRWYWx1ZTogVSk6IFN0cmVhbTxVPiB7XG4gICAgY29uc3QgcyA9IHRoaXMubWFwKCgpID0+IHByb2plY3RlZFZhbHVlKTtcbiAgICBjb25zdCBvcDogT3BlcmF0b3I8VCwgVT4gPSBzLl9wcm9kIGFzIE9wZXJhdG9yPFQsIFU+O1xuICAgIG9wLnR5cGUgPSAnbWFwVG8nO1xuICAgIHJldHVybiBzO1xuICB9XG5cbiAgZmlsdGVyPFMgZXh0ZW5kcyBUPihwYXNzZXM6ICh0OiBUKSA9PiB0IGlzIFMpOiBTdHJlYW08Uz47XG4gIGZpbHRlcihwYXNzZXM6ICh0OiBUKSA9PiBib29sZWFuKTogU3RyZWFtPFQ+O1xuICAvKipcbiAgICogT25seSBhbGxvd3MgZXZlbnRzIHRoYXQgcGFzcyB0aGUgdGVzdCBnaXZlbiBieSB0aGUgYHBhc3Nlc2AgYXJndW1lbnQuXG4gICAqXG4gICAqIEVhY2ggZXZlbnQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGlzIGdpdmVuIHRvIHRoZSBgcGFzc2VzYCBmdW5jdGlvbi4gSWYgdGhlXG4gICAqIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLCB0aGUgZXZlbnQgaXMgZm9yd2FyZGVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtLFxuICAgKiBvdGhlcndpc2UgaXQgaXMgaWdub3JlZCBhbmQgbm90IGZvcndhcmRlZC5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tMi0tMy0tLS0tNC0tLS0tNS0tLTYtLTctOC0tXG4gICAqICAgICBmaWx0ZXIoaSA9PiBpICUgMiA9PT0gMClcbiAgICogLS0tLS0tMi0tLS0tLS0tNC0tLS0tLS0tLTYtLS0tOC0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXNzZXMgQSBmdW5jdGlvbiBvZiB0eXBlIGAodDogVCkgPT4gYm9vbGVhbmAgdGhhdCB0YWtlc1xuICAgKiBhbiBldmVudCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gYW5kIGNoZWNrcyBpZiBpdCBwYXNzZXMsIGJ5IHJldHVybmluZyBhXG4gICAqIGJvb2xlYW4uXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIGZpbHRlcihwYXNzZXM6ICh0OiBUKSA9PiBib29sZWFuKTogU3RyZWFtPFQ+IHtcbiAgICBjb25zdCBwID0gdGhpcy5fcHJvZDtcbiAgICBpZiAocCBpbnN0YW5jZW9mIEZpbHRlcilcbiAgICAgIHJldHVybiBuZXcgU3RyZWFtPFQ+KG5ldyBGaWx0ZXI8VD4oXG4gICAgICAgIGFuZCgocCBhcyBGaWx0ZXI8VD4pLmYsIHBhc3NlcyksXG4gICAgICAgIChwIGFzIEZpbHRlcjxUPikuaW5zXG4gICAgICApKTtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPihuZXcgRmlsdGVyPFQ+KHBhc3NlcywgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIExldHMgdGhlIGZpcnN0IGBhbW91bnRgIG1hbnkgZXZlbnRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBwYXNzIHRvIHRoZVxuICAgKiBvdXRwdXQgc3RyZWFtLCB0aGVuIG1ha2VzIHRoZSBvdXRwdXQgc3RyZWFtIGNvbXBsZXRlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLWEtLS1iLS1jLS0tLWQtLS1lLS1cbiAgICogICAgdGFrZSgzKVxuICAgKiAtLWEtLS1iLS1jfFxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBIb3cgbWFueSBldmVudHMgdG8gYWxsb3cgZnJvbSB0aGUgaW5wdXQgc3RyZWFtXG4gICAqIGJlZm9yZSBjb21wbGV0aW5nIHRoZSBvdXRwdXQgc3RyZWFtLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICB0YWtlKGFtb3VudDogbnVtYmVyKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VD4obmV3IFRha2U8VD4oYW1vdW50LCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogSWdub3JlcyB0aGUgZmlyc3QgYGFtb3VudGAgbWFueSBldmVudHMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCBhbmQgdGhlblxuICAgKiBhZnRlciB0aGF0IHN0YXJ0cyBmb3J3YXJkaW5nIGV2ZW50cyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gdG8gdGhlIG91dHB1dFxuICAgKiBzdHJlYW0uXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tYS0tLWItLWMtLS0tZC0tLWUtLVxuICAgKiAgICAgICBkcm9wKDMpXG4gICAqIC0tLS0tLS0tLS0tLS0tZC0tLWUtLVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBIb3cgbWFueSBldmVudHMgdG8gaWdub3JlIGZyb20gdGhlIGlucHV0IHN0cmVhbVxuICAgKiBiZWZvcmUgZm9yd2FyZGluZyBhbGwgZXZlbnRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSB0byB0aGUgb3V0cHV0IHN0cmVhbS5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgZHJvcChhbW91bnQ6IG51bWJlcik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW08VD4obmV3IERyb3A8VD4oYW1vdW50LCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGUgaW5wdXQgc3RyZWFtIGNvbXBsZXRlcywgdGhlIG91dHB1dCBzdHJlYW0gd2lsbCBlbWl0IHRoZSBsYXN0IGV2ZW50XG4gICAqIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHN0cmVhbSwgYW5kIHRoZW4gd2lsbCBhbHNvIGNvbXBsZXRlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLWEtLS1iLS1jLS1kLS0tLXxcbiAgICogICAgICAgbGFzdCgpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tZHxcbiAgICogYGBgXG4gICAqXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIGxhc3QoKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxUPihuZXcgTGFzdDxUPih0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGVuZHMgdGhlIGdpdmVuIGBpbml0aWFsYCB2YWx1ZSB0byB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGVtaXR0ZWQgYnkgdGhlXG4gICAqIGlucHV0IHN0cmVhbS4gVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIE1lbW9yeVN0cmVhbSwgd2hpY2ggbWVhbnMgaXQgaXNcbiAgICogYWxyZWFkeSBgcmVtZW1iZXIoKWAnZC5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0tMS0tLTItLS0tLTMtLS1cbiAgICogICBzdGFydFdpdGgoMClcbiAgICogMC0tMS0tLTItLS0tLTMtLS1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBpbml0aWFsIFRoZSB2YWx1ZSBvciBldmVudCB0byBwcmVwZW5kLlxuICAgKiBAcmV0dXJuIHtNZW1vcnlTdHJlYW19XG4gICAqL1xuICBzdGFydFdpdGgoaW5pdGlhbDogVCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW08VD4obmV3IFN0YXJ0V2l0aDxUPih0aGlzLCBpbml0aWFsKSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbm90aGVyIHN0cmVhbSB0byBkZXRlcm1pbmUgd2hlbiB0byBjb21wbGV0ZSB0aGUgY3VycmVudCBzdHJlYW0uXG4gICAqXG4gICAqIFdoZW4gdGhlIGdpdmVuIGBvdGhlcmAgc3RyZWFtIGVtaXRzIGFuIGV2ZW50IG9yIGNvbXBsZXRlcywgdGhlIG91dHB1dFxuICAgKiBzdHJlYW0gd2lsbCBjb21wbGV0ZS4gQmVmb3JlIHRoYXQgaGFwcGVucywgdGhlIG91dHB1dCBzdHJlYW0gd2lsbCBiZWhhdmVzXG4gICAqIGxpa2UgdGhlIGlucHV0IHN0cmVhbS5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0tMS0tLTItLS0tLTMtLTQtLS0tNS0tLS02LS0tXG4gICAqICAgZW5kV2hlbiggLS0tLS0tLS1hLS1iLS18IClcbiAgICogLS0tMS0tLTItLS0tLTMtLTQtLXxcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciBTb21lIG90aGVyIHN0cmVhbSB0aGF0IGlzIHVzZWQgdG8ga25vdyB3aGVuIHNob3VsZCB0aGUgb3V0cHV0XG4gICAqIHN0cmVhbSBvZiB0aGlzIG9wZXJhdG9yIGNvbXBsZXRlLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBlbmRXaGVuKG90aGVyOiBTdHJlYW08YW55Pik6IFN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyAodGhpcy5jdG9yKCkpPFQ+KG5ldyBFbmRXaGVuPFQ+KG90aGVyLCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogXCJGb2xkc1wiIHRoZSBzdHJlYW0gb250byBpdHNlbGYuXG4gICAqXG4gICAqIENvbWJpbmVzIGV2ZW50cyBmcm9tIHRoZSBwYXN0IHRocm91Z2hvdXRcbiAgICogdGhlIGVudGlyZSBleGVjdXRpb24gb2YgdGhlIGlucHV0IHN0cmVhbSwgYWxsb3dpbmcgeW91IHRvIGFjY3VtdWxhdGUgdGhlbVxuICAgKiB0b2dldGhlci4gSXQncyBlc3NlbnRpYWxseSBsaWtlIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYC4gVGhlIHJldHVybmVkXG4gICAqIHN0cmVhbSBpcyBhIE1lbW9yeVN0cmVhbSwgd2hpY2ggbWVhbnMgaXQgaXMgYWxyZWFkeSBgcmVtZW1iZXIoKWAnZC5cbiAgICpcbiAgICogVGhlIG91dHB1dCBzdHJlYW0gc3RhcnRzIGJ5IGVtaXR0aW5nIHRoZSBgc2VlZGAgd2hpY2ggeW91IGdpdmUgYXMgYXJndW1lbnQuXG4gICAqIFRoZW4sIHdoZW4gYW4gZXZlbnQgaGFwcGVucyBvbiB0aGUgaW5wdXQgc3RyZWFtLCBpdCBpcyBjb21iaW5lZCB3aXRoIHRoYXRcbiAgICogc2VlZCB2YWx1ZSB0aHJvdWdoIHRoZSBgYWNjdW11bGF0ZWAgZnVuY3Rpb24sIGFuZCB0aGUgb3V0cHV0IHZhbHVlIGlzXG4gICAqIGVtaXR0ZWQgb24gdGhlIG91dHB1dCBzdHJlYW0uIGBmb2xkYCByZW1lbWJlcnMgdGhhdCBvdXRwdXQgdmFsdWUgYXMgYGFjY2BcbiAgICogKFwiYWNjdW11bGF0b3JcIiksIGFuZCB0aGVuIHdoZW4gYSBuZXcgaW5wdXQgZXZlbnQgYHRgIGhhcHBlbnMsIGBhY2NgIHdpbGwgYmVcbiAgICogY29tYmluZWQgd2l0aCB0aGF0IHRvIHByb2R1Y2UgdGhlIG5ldyBgYWNjYCBhbmQgc28gZm9ydGguXG4gICAqXG4gICAqIE1hcmJsZSBkaWFncmFtOlxuICAgKlxuICAgKiBgYGB0ZXh0XG4gICAqIC0tLS0tLTEtLS0tLTEtLTItLS0tMS0tLS0xLS0tLS0tXG4gICAqICAgZm9sZCgoYWNjLCB4KSA9PiBhY2MgKyB4LCAzKVxuICAgKiAzLS0tLS00LS0tLS01LS03LS0tLTgtLS0tOS0tLS0tLVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gYWNjdW11bGF0ZSBBIGZ1bmN0aW9uIG9mIHR5cGUgYChhY2M6IFIsIHQ6IFQpID0+IFJgIHRoYXRcbiAgICogdGFrZXMgdGhlIHByZXZpb3VzIGFjY3VtdWxhdGVkIHZhbHVlIGBhY2NgIGFuZCB0aGUgaW5jb21pbmcgZXZlbnQgZnJvbSB0aGVcbiAgICogaW5wdXQgc3RyZWFtIGFuZCBwcm9kdWNlcyB0aGUgbmV3IGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKiBAcGFyYW0gc2VlZCBUaGUgaW5pdGlhbCBhY2N1bXVsYXRlZCB2YWx1ZSwgb2YgdHlwZSBgUmAuXG4gICAqIEByZXR1cm4ge01lbW9yeVN0cmVhbX1cbiAgICovXG4gIGZvbGQ8Uj4oYWNjdW11bGF0ZTogKGFjYzogUiwgdDogVCkgPT4gUiwgc2VlZDogUik6IE1lbW9yeVN0cmVhbTxSPiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW08Uj4obmV3IEZvbGQ8VCwgUj4oYWNjdW11bGF0ZSwgc2VlZCwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFuIGVycm9yIHdpdGggYW5vdGhlciBzdHJlYW0uXG4gICAqXG4gICAqIFdoZW4gKGFuZCBpZikgYW4gZXJyb3IgaGFwcGVucyBvbiB0aGUgaW5wdXQgc3RyZWFtLCBpbnN0ZWFkIG9mIGZvcndhcmRpbmdcbiAgICogdGhhdCBlcnJvciB0byB0aGUgb3V0cHV0IHN0cmVhbSwgKnJlcGxhY2VFcnJvciogd2lsbCBjYWxsIHRoZSBgcmVwbGFjZWBcbiAgICogZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgc3RyZWFtIHRoYXQgdGhlIG91dHB1dCBzdHJlYW0gd2lsbCByZXBsaWNhdGUuXG4gICAqIEFuZCwgaW4gY2FzZSB0aGF0IG5ldyBzdHJlYW0gYWxzbyBlbWl0cyBhbiBlcnJvciwgYHJlcGxhY2VgIHdpbGwgYmUgY2FsbGVkXG4gICAqIGFnYWluIHRvIGdldCBhbm90aGVyIHN0cmVhbSB0byBzdGFydCByZXBsaWNhdGluZy5cbiAgICpcbiAgICogTWFyYmxlIGRpYWdyYW06XG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogLS0xLS0tMi0tLS0tMy0tNC0tLS0tWFxuICAgKiAgIHJlcGxhY2VFcnJvciggKCkgPT4gLS0xMC0tfCApXG4gICAqIC0tMS0tLTItLS0tLTMtLTQtLS0tLS0tLTEwLS18XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXBsYWNlIEEgZnVuY3Rpb24gb2YgdHlwZSBgKGVycikgPT4gU3RyZWFtYCB0aGF0IHRha2VzXG4gICAqIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkIG9uIHRoZSBpbnB1dCBzdHJlYW0gb3Igb24gdGhlIHByZXZpb3VzIHJlcGxhY2VtZW50XG4gICAqIHN0cmVhbSBhbmQgcmV0dXJucyBhIG5ldyBzdHJlYW0uIFRoZSBvdXRwdXQgc3RyZWFtIHdpbGwgYmVoYXZlIGxpa2UgdGhlXG4gICAqIHN0cmVhbSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucy5cbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgcmVwbGFjZUVycm9yKHJlcGxhY2U6IChlcnI6IGFueSkgPT4gU3RyZWFtPFQ+KTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VD4obmV3IFJlcGxhY2VFcnJvcjxUPihyZXBsYWNlLCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbnMgYSBcInN0cmVhbSBvZiBzdHJlYW1zXCIsIGhhbmRsaW5nIG9ubHkgb25lIG5lc3RlZCBzdHJlYW0gYXQgYSB0aW1lXG4gICAqIChubyBjb25jdXJyZW5jeSkuXG4gICAqXG4gICAqIElmIHRoZSBpbnB1dCBzdHJlYW0gaXMgYSBzdHJlYW0gdGhhdCBlbWl0cyBzdHJlYW1zLCB0aGVuIHRoaXMgb3BlcmF0b3Igd2lsbFxuICAgKiByZXR1cm4gYW4gb3V0cHV0IHN0cmVhbSB3aGljaCBpcyBhIGZsYXQgc3RyZWFtOiBlbWl0cyByZWd1bGFyIGV2ZW50cy4gVGhlXG4gICAqIGZsYXR0ZW5pbmcgaGFwcGVucyB3aXRob3V0IGNvbmN1cnJlbmN5LiBJdCB3b3JrcyBsaWtlIHRoaXM6IHdoZW4gdGhlIGlucHV0XG4gICAqIHN0cmVhbSBlbWl0cyBhIG5lc3RlZCBzdHJlYW0sICpmbGF0dGVuKiB3aWxsIHN0YXJ0IGltaXRhdGluZyB0aGF0IG5lc3RlZFxuICAgKiBvbmUuIEhvd2V2ZXIsIGFzIHNvb24gYXMgdGhlIG5leHQgbmVzdGVkIHN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZSBpbnB1dFxuICAgKiBzdHJlYW0sICpmbGF0dGVuKiB3aWxsIGZvcmdldCB0aGUgcHJldmlvdXMgbmVzdGVkIG9uZSBpdCB3YXMgaW1pdGF0aW5nLCBhbmRcbiAgICogd2lsbCBzdGFydCBpbWl0YXRpbmcgdGhlIG5ldyBuZXN0ZWQgb25lLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS1cbiAgICogICBcXCAgICAgICAgXFxcbiAgICogICAgXFwgICAgICAgLS0tLTEtLS0tMi0tLTMtLVxuICAgKiAgICAtLWEtLWItLS0tYy0tLS1kLS0tLS0tLS1cbiAgICogICAgICAgICAgIGZsYXR0ZW5cbiAgICogLS0tLS1hLS1iLS0tLS0tMS0tLS0yLS0tMy0tXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBmbGF0dGVuPFI+KHRoaXM6IFN0cmVhbTxTdHJlYW08Uj4gfCBNZW1vcnlTdHJlYW08Uj4+KTogU3RyZWFtPFI+IHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbTxSPihuZXcgRmxhdHRlbih0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFzc2VzIHRoZSBpbnB1dCBzdHJlYW0gdG8gYSBjdXN0b20gb3BlcmF0b3IsIHRvIHByb2R1Y2UgYW4gb3V0cHV0IHN0cmVhbS5cbiAgICpcbiAgICogKmNvbXBvc2UqIGlzIGEgaGFuZHkgd2F5IG9mIHVzaW5nIGFuIGV4aXN0aW5nIGZ1bmN0aW9uIGluIGEgY2hhaW5lZCBzdHlsZS5cbiAgICogSW5zdGVhZCBvZiB3cml0aW5nIGBvdXRTdHJlYW0gPSBmKGluU3RyZWFtKWAgeW91IGNhbiB3cml0ZVxuICAgKiBgb3V0U3RyZWFtID0gaW5TdHJlYW0uY29tcG9zZShmKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9wZXJhdG9yIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHN0cmVhbSBhcyBpbnB1dCBhbmRcbiAgICogcmV0dXJucyBhIHN0cmVhbSBhcyB3ZWxsLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBjb21wb3NlPFU+KG9wZXJhdG9yOiAoc3RyZWFtOiBTdHJlYW08VD4pID0+IFUpOiBVIHtcbiAgICByZXR1cm4gb3BlcmF0b3IodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgYmVoYXZlcyBsaWtlIHRoZSBpbnB1dCBzdHJlYW0sIGJ1dCBhbHNvXG4gICAqIHJlbWVtYmVycyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgdGhhdCBoYXBwZW5zIG9uIHRoZSBpbnB1dCBzdHJlYW0sIHNvIHRoYXQgYVxuICAgKiBuZXdseSBhZGRlZCBsaXN0ZW5lciB3aWxsIGltbWVkaWF0ZWx5IHJlY2VpdmUgdGhhdCBtZW1vcmlzZWQgZXZlbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge01lbW9yeVN0cmVhbX1cbiAgICovXG4gIHJlbWVtYmVyKCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIG5ldyBNZW1vcnlTdHJlYW08VD4obmV3IFJlbWVtYmVyPFQ+KHRoaXMpKTtcbiAgfVxuXG4gIGRlYnVnKCk6IFN0cmVhbTxUPjtcbiAgZGVidWcobGFiZWxPclNweTogc3RyaW5nKTogU3RyZWFtPFQ+O1xuICBkZWJ1ZyhsYWJlbE9yU3B5OiAodDogVCkgPT4gYW55KTogU3RyZWFtPFQ+O1xuICAvKipcbiAgICogUmV0dXJucyBhbiBvdXRwdXQgc3RyZWFtIHRoYXQgaWRlbnRpY2FsbHkgYmVoYXZlcyBsaWtlIHRoZSBpbnB1dCBzdHJlYW0sXG4gICAqIGJ1dCBhbHNvIHJ1bnMgYSBgc3B5YCBmdW5jdGlvbiBmb3IgZWFjaCBldmVudCwgdG8gaGVscCB5b3UgZGVidWcgeW91ciBhcHAuXG4gICAqXG4gICAqICpkZWJ1ZyogdGFrZXMgYSBgc3B5YCBmdW5jdGlvbiBhcyBhcmd1bWVudCwgYW5kIHJ1bnMgdGhhdCBmb3IgZWFjaCBldmVudFxuICAgKiBoYXBwZW5pbmcgb24gdGhlIGlucHV0IHN0cmVhbS4gSWYgeW91IGRvbid0IHByb3ZpZGUgdGhlIGBzcHlgIGFyZ3VtZW50LFxuICAgKiB0aGVuICpkZWJ1Zyogd2lsbCBqdXN0IGBjb25zb2xlLmxvZ2AgZWFjaCBldmVudC4gVGhpcyBoZWxwcyB5b3UgdG9cbiAgICogdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBldmVudHMgdGhyb3VnaCBzb21lIG9wZXJhdG9yIGNoYWluLlxuICAgKlxuICAgKiBQbGVhc2Ugbm90ZSB0aGF0IGlmIHRoZSBvdXRwdXQgc3RyZWFtIGhhcyBubyBsaXN0ZW5lcnMsIHRoZW4gaXQgd2lsbCBub3RcbiAgICogc3RhcnQsIHdoaWNoIG1lYW5zIGBzcHlgIHdpbGwgbmV2ZXIgcnVuIGJlY2F1c2Ugbm8gYWN0dWFsIGV2ZW50IGhhcHBlbnMgaW5cbiAgICogdGhhdCBjYXNlLlxuICAgKlxuICAgKiBNYXJibGUgZGlhZ3JhbTpcbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiAtLTEtLS0tMi0tLS0tMy0tLS0tNC0tXG4gICAqICAgICAgICAgZGVidWdcbiAgICogLS0xLS0tLTItLS0tLTMtLS0tLTQtLVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbGFiZWxPclNweSBBIHN0cmluZyB0byB1c2UgYXMgdGhlIGxhYmVsIHdoZW4gcHJpbnRpbmdcbiAgICogZGVidWcgaW5mb3JtYXRpb24gb24gdGhlIGNvbnNvbGUsIG9yIGEgJ3NweScgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBldmVudFxuICAgKiBhcyBhcmd1bWVudCwgYW5kIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueXRoaW5nLlxuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBkZWJ1ZyhsYWJlbE9yU3B5Pzogc3RyaW5nIHwgKCh0OiBUKSA9PiBhbnkpKTogU3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmN0b3IoKSk8VD4obmV3IERlYnVnPFQ+KHRoaXMsIGxhYmVsT3JTcHkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAqaW1pdGF0ZSogY2hhbmdlcyB0aGlzIGN1cnJlbnQgU3RyZWFtIHRvIGVtaXQgdGhlIHNhbWUgZXZlbnRzIHRoYXQgdGhlXG4gICAqIGBvdGhlcmAgZ2l2ZW4gU3RyZWFtIGRvZXMuIFRoaXMgbWV0aG9kIHJldHVybnMgbm90aGluZy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgZXhpc3RzIHRvIGFsbG93IG9uZSB0aGluZzogKipjaXJjdWxhciBkZXBlbmRlbmN5IG9mIHN0cmVhbXMqKi5cbiAgICogRm9yIGluc3RhbmNlLCBsZXQncyBpbWFnaW5lIHRoYXQgZm9yIHNvbWUgcmVhc29uIHlvdSBuZWVkIHRvIGNyZWF0ZSBhXG4gICAqIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2hlcmUgc3RyZWFtIGBmaXJzdCRgIGRlcGVuZHMgb24gc3RyZWFtIGBzZWNvbmQkYFxuICAgKiB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYGZpcnN0JGA6XG4gICAqXG4gICAqIDwhLS0gc2tpcC1leGFtcGxlIC0tPlxuICAgKiBgYGBqc1xuICAgKiBpbXBvcnQgZGVsYXkgZnJvbSAneHN0cmVhbS9leHRyYS9kZWxheSdcbiAgICpcbiAgICogdmFyIGZpcnN0JCA9IHNlY29uZCQubWFwKHggPT4geCAqIDEwKS50YWtlKDMpO1xuICAgKiB2YXIgc2Vjb25kJCA9IGZpcnN0JC5tYXAoeCA9PiB4ICsgMSkuc3RhcnRXaXRoKDEpLmNvbXBvc2UoZGVsYXkoMTAwKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBIb3dldmVyLCB0aGF0IGlzIGludmFsaWQgSmF2YVNjcmlwdCwgYmVjYXVzZSBgc2Vjb25kJGAgaXMgdW5kZWZpbmVkXG4gICAqIG9uIHRoZSBmaXJzdCBsaW5lLiBUaGlzIGlzIGhvdyAqaW1pdGF0ZSogY2FuIGhlbHAgc29sdmUgaXQ6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBkZWxheSBmcm9tICd4c3RyZWFtL2V4dHJhL2RlbGF5J1xuICAgKlxuICAgKiB2YXIgc2Vjb25kUHJveHkkID0geHMuY3JlYXRlKCk7XG4gICAqIHZhciBmaXJzdCQgPSBzZWNvbmRQcm94eSQubWFwKHggPT4geCAqIDEwKS50YWtlKDMpO1xuICAgKiB2YXIgc2Vjb25kJCA9IGZpcnN0JC5tYXAoeCA9PiB4ICsgMSkuc3RhcnRXaXRoKDEpLmNvbXBvc2UoZGVsYXkoMTAwKSk7XG4gICAqIHNlY29uZFByb3h5JC5pbWl0YXRlKHNlY29uZCQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogV2UgY3JlYXRlIGBzZWNvbmRQcm94eSRgIGJlZm9yZSB0aGUgb3RoZXJzLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiB0aGVcbiAgICogZGVjbGFyYXRpb24gb2YgYGZpcnN0JGAuIFRoZW4sIGFmdGVyIGJvdGggYGZpcnN0JGAgYW5kIGBzZWNvbmQkYCBhcmVcbiAgICogZGVmaW5lZCwgd2UgaG9vayBgc2Vjb25kUHJveHkkYCB3aXRoIGBzZWNvbmQkYCB3aXRoIGBpbWl0YXRlKClgIHRvIHRlbGxcbiAgICogdGhhdCB0aGV5IGFyZSBcInRoZSBzYW1lXCIuIGBpbWl0YXRlYCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSBzdGFydCBvZiBhbnlcbiAgICogc3RyZWFtLCBpdCBqdXN0IGJpbmRzIGBzZWNvbmRQcm94eSRgIGFuZCBgc2Vjb25kJGAgdG9nZXRoZXIuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB3aGVyZSBgaW1pdGF0ZSgpYCBpcyBpbXBvcnRhbnQgaW4gQ3ljbGUuanNcbiAgICogYXBwbGljYXRpb25zLiBBIHBhcmVudCBjb21wb25lbnQgY29udGFpbnMgc29tZSBjaGlsZCBjb21wb25lbnRzLiBBIGNoaWxkXG4gICAqIGhhcyBhbiBhY3Rpb24gc3RyZWFtIHdoaWNoIGlzIGdpdmVuIHRvIHRoZSBwYXJlbnQgdG8gZGVmaW5lIGl0cyBzdGF0ZTpcbiAgICpcbiAgICogPCEtLSBza2lwLWV4YW1wbGUgLS0+XG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IGNoaWxkQWN0aW9uUHJveHkkID0geHMuY3JlYXRlKCk7XG4gICAqIGNvbnN0IHBhcmVudCA9IFBhcmVudCh7Li4uc291cmNlcywgY2hpbGRBY3Rpb24kOiBjaGlsZEFjdGlvblByb3h5JH0pO1xuICAgKiBjb25zdCBjaGlsZEFjdGlvbiQgPSBwYXJlbnQuc3RhdGUkLm1hcChzID0+IHMuY2hpbGQuYWN0aW9uJCkuZmxhdHRlbigpO1xuICAgKiBjaGlsZEFjdGlvblByb3h5JC5pbWl0YXRlKGNoaWxkQWN0aW9uJCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBOb3RlLCB0aG91Z2gsIHRoYXQgKipgaW1pdGF0ZSgpYCBkb2VzIG5vdCBzdXBwb3J0IE1lbW9yeVN0cmVhbXMqKi4gSWYgd2VcbiAgICogd291bGQgYXR0ZW1wdCB0byBpbWl0YXRlIGEgTWVtb3J5U3RyZWFtIGluIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgd2Ugd291bGRcbiAgICogZWl0aGVyIGdldCBhIHJhY2UgY29uZGl0aW9uICh3aGVyZSB0aGUgc3ltcHRvbSB3b3VsZCBiZSBcIm5vdGhpbmcgaGFwcGVuc1wiKVxuICAgKiBvciBhbiBpbmZpbml0ZSBjeWNsaWMgZW1pc3Npb24gb2YgdmFsdWVzLiBJdCdzIHVzZWZ1bCB0byB0aGluayBhYm91dFxuICAgKiBNZW1vcnlTdHJlYW1zIGFzIGNlbGxzIGluIGEgc3ByZWFkc2hlZXQuIEl0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgdG9cbiAgICogZGVmaW5lIGEgc3ByZWFkc2hlZXQgY2VsbCBgQTFgIHdpdGggYSBmb3JtdWxhIHRoYXQgZGVwZW5kcyBvbiBgQjFgIGFuZFxuICAgKiBjZWxsIGBCMWAgZGVmaW5lZCB3aXRoIGEgZm9ybXVsYSB0aGF0IGRlcGVuZHMgb24gYEExYC5cbiAgICpcbiAgICogSWYgeW91IGZpbmQgeW91cnNlbGYgd2FudGluZyB0byB1c2UgYGltaXRhdGUoKWAgd2l0aCBhXG4gICAqIE1lbW9yeVN0cmVhbSwgeW91IHNob3VsZCByZXdvcmsgeW91ciBjb2RlIGFyb3VuZCBgaW1pdGF0ZSgpYCB0byB1c2UgYVxuICAgKiBTdHJlYW0gaW5zdGVhZC4gTG9vayBmb3IgdGhlIHN0cmVhbSBpbiB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSB0aGF0XG4gICAqIHJlcHJlc2VudHMgYW4gZXZlbnQgc3RyZWFtLCBhbmQgdGhhdCB3b3VsZCBiZSBhIGNhbmRpZGF0ZSBmb3IgY3JlYXRpbmcgYVxuICAgKiBwcm94eSBTdHJlYW0gd2hpY2ggdGhlbiBpbWl0YXRlcyB0aGUgdGFyZ2V0IFN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJlYW19IHRhcmdldCBUaGUgb3RoZXIgc3RyZWFtIHRvIGltaXRhdGUgb24gdGhlIGN1cnJlbnQgb25lLiBNdXN0XG4gICAqIG5vdCBiZSBhIE1lbW9yeVN0cmVhbS5cbiAgICovXG4gIGltaXRhdGUodGFyZ2V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWVtb3J5U3RyZWFtKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIE1lbW9yeVN0cmVhbSB3YXMgZ2l2ZW4gdG8gaW1pdGF0ZSgpLCBidXQgaXQgb25seSAnICtcbiAgICAgICAgJ3N1cHBvcnRzIGEgU3RyZWFtLiBSZWFkIG1vcmUgYWJvdXQgdGhpcyByZXN0cmljdGlvbiBoZXJlOiAnICtcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9zdGFsdHoveHN0cmVhbSNmYXEnKTtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG4gICAgZm9yIChsZXQgaWxzID0gdGhpcy5faWxzLCBOID0gaWxzLmxlbmd0aCwgaSA9IDA7IGkgPCBOOyBpKyspIHRhcmdldC5fYWRkKGlsc1tpXSk7XG4gICAgdGhpcy5faWxzID0gW107XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSBTdHJlYW0gdG8gZW1pdCB0aGUgZ2l2ZW4gdmFsdWUgdG8gaXRzIGxpc3RlbmVycy5cbiAgICpcbiAgICogQXMgdGhlIG5hbWUgaW5kaWNhdGVzLCBpZiB5b3UgdXNlIHRoaXMsIHlvdSBhcmUgbW9zdCBsaWtlbHkgZG9pbmcgc29tZXRoaW5nXG4gICAqIFRoZSBXcm9uZyBXYXkuIFBsZWFzZSB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmVhY3RpdmUgd2F5IGJlZm9yZSB1c2luZyB0aGlzXG4gICAqIG1ldGhvZC4gVXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgXCJuZXh0XCIgdmFsdWUgeW91IHdhbnQgdG8gYnJvYWRjYXN0IHRvIGFsbCBsaXN0ZW5lcnMgb2ZcbiAgICogdGhpcyBTdHJlYW0uXG4gICAqL1xuICBzaGFtZWZ1bGx5U2VuZE5leHQodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9uKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBnaXZlbiBlcnJvciB0byBpdHMgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBBcyB0aGUgbmFtZSBpbmRpY2F0ZXMsIGlmIHlvdSB1c2UgdGhpcywgeW91IGFyZSBtb3N0IGxpa2VseSBkb2luZyBzb21ldGhpbmdcbiAgICogVGhlIFdyb25nIFdheS4gUGxlYXNlIHRyeSB0byB1bmRlcnN0YW5kIHRoZSByZWFjdGl2ZSB3YXkgYmVmb3JlIHVzaW5nIHRoaXNcbiAgICogbWV0aG9kLiBVc2UgaXQgb25seSB3aGVuIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IGVycm9yIFRoZSBlcnJvciB5b3Ugd2FudCB0byBicm9hZGNhc3QgdG8gYWxsIHRoZSBsaXN0ZW5lcnMgb2ZcbiAgICogdGhpcyBTdHJlYW0uXG4gICAqL1xuICBzaGFtZWZ1bGx5U2VuZEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICB0aGlzLl9lKGVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIFN0cmVhbSB0byBlbWl0IHRoZSBcImNvbXBsZXRlZFwiIGV2ZW50IHRvIGl0cyBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEFzIHRoZSBuYW1lIGluZGljYXRlcywgaWYgeW91IHVzZSB0aGlzLCB5b3UgYXJlIG1vc3QgbGlrZWx5IGRvaW5nIHNvbWV0aGluZ1xuICAgKiBUaGUgV3JvbmcgV2F5LiBQbGVhc2UgdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWN0aXZlIHdheSBiZWZvcmUgdXNpbmcgdGhpc1xuICAgKiBtZXRob2QuIFVzZSBpdCBvbmx5IHdoZW4geW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLlxuICAgKi9cbiAgc2hhbWVmdWxseVNlbmRDb21wbGV0ZSgpIHtcbiAgICB0aGlzLl9jKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIFwiZGVidWdcIiBsaXN0ZW5lciB0byB0aGUgc3RyZWFtLiBUaGVyZSBjYW4gb25seSBiZSBvbmUgZGVidWdcbiAgICogbGlzdGVuZXIsIHRoYXQncyB3aHkgdGhpcyBpcyAnc2V0RGVidWdMaXN0ZW5lcicuIFRvIHJlbW92ZSB0aGUgZGVidWdcbiAgICogbGlzdGVuZXIsIGp1c3QgY2FsbCBzZXREZWJ1Z0xpc3RlbmVyKG51bGwpLlxuICAgKlxuICAgKiBBIGRlYnVnIGxpc3RlbmVyIGlzIGxpa2UgYW55IG90aGVyIGxpc3RlbmVyLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgYVxuICAgKiBkZWJ1ZyBsaXN0ZW5lciBpcyBcInN0ZWFsdGh5XCI6IGl0cyBwcmVzZW5jZS9hYnNlbmNlIGRvZXMgbm90IHRyaWdnZXIgdGhlXG4gICAqIHN0YXJ0L3N0b3Agb2YgdGhlIHN0cmVhbSAob3IgdGhlIHByb2R1Y2VyIGluc2lkZSB0aGUgc3RyZWFtKS4gVGhpcyBpc1xuICAgKiB1c2VmdWwgc28geW91IGNhbiBpbnNwZWN0IHdoYXQgaXMgZ29pbmcgb24gd2l0aG91dCBjaGFuZ2luZyB0aGUgYmVoYXZpb3JcbiAgICogb2YgdGhlIHByb2dyYW0uIElmIHlvdSBoYXZlIGFuIGlkbGUgc3RyZWFtIGFuZCB5b3UgYWRkIGEgbm9ybWFsIGxpc3RlbmVyIHRvXG4gICAqIGl0LCB0aGUgc3RyZWFtIHdpbGwgc3RhcnQgZXhlY3V0aW5nLiBCdXQgaWYgeW91IHNldCBhIGRlYnVnIGxpc3RlbmVyIG9uIGFuXG4gICAqIGlkbGUgc3RyZWFtLCBpdCB3b24ndCBzdGFydCBleGVjdXRpbmcgKG5vdCB1bnRpbCB0aGUgZmlyc3Qgbm9ybWFsIGxpc3RlbmVyXG4gICAqIGlzIGFkZGVkKS5cbiAgICpcbiAgICogQXMgdGhlIG5hbWUgaW5kaWNhdGVzLCB3ZSBkb24ndCByZWNvbW1lbmQgdXNpbmcgdGhpcyBtZXRob2QgdG8gYnVpbGQgYXBwXG4gICAqIGxvZ2ljLiBJbiBmYWN0LCBpbiBtb3N0IGNhc2VzIHRoZSBkZWJ1ZyBvcGVyYXRvciB3b3JrcyBqdXN0IGZpbmUuIE9ubHkgdXNlXG4gICAqIHRoaXMgb25lIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0xpc3RlbmVyPFQ+fSBsaXN0ZW5lclxuICAgKi9cbiAgc2V0RGVidWdMaXN0ZW5lcihsaXN0ZW5lcjogUGFydGlhbDxMaXN0ZW5lcjxUPj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgdGhpcy5fZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fZGwgPSBOTyBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kID0gdHJ1ZTtcbiAgICAgIChsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+KS5fbiA9IGxpc3RlbmVyLm5leHQgfHwgbm9vcDtcbiAgICAgIChsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+KS5fZSA9IGxpc3RlbmVyLmVycm9yIHx8IG5vb3A7XG4gICAgICAobGlzdGVuZXIgYXMgSW50ZXJuYWxMaXN0ZW5lcjxUPikuX2MgPSBsaXN0ZW5lci5jb21wbGV0ZSB8fCBub29wO1xuICAgICAgdGhpcy5fZGwgPSBsaXN0ZW5lciBhcyBJbnRlcm5hbExpc3RlbmVyPFQ+O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWVtb3J5U3RyZWFtPFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHtcbiAgcHJpdmF0ZSBfdj86IFQ7XG4gIHByaXZhdGUgX2hhcz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvZHVjZXI6IEludGVybmFsUHJvZHVjZXI8VD4pIHtcbiAgICBzdXBlcihwcm9kdWNlcik7XG4gIH1cblxuICBfbih4OiBUKSB7XG4gICAgdGhpcy5fdiA9IHg7XG4gICAgdGhpcy5faGFzID0gdHJ1ZTtcbiAgICBzdXBlci5fbih4KTtcbiAgfVxuXG4gIF9hZGQoaWw6IEludGVybmFsTGlzdGVuZXI8VD4pOiB2b2lkIHtcbiAgICBjb25zdCB0YSA9IHRoaXMuX3RhcmdldDtcbiAgICBpZiAodGEpIHJldHVybiB0YS5fYWRkKGlsKTtcbiAgICBjb25zdCBhID0gdGhpcy5faWxzO1xuICAgIGEucHVzaChpbCk7XG4gICAgaWYgKGEubGVuZ3RoID4gMSkge1xuICAgICAgaWYgKHRoaXMuX2hhcykgaWwuX24odGhpcy5fdiEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc3RvcElEICE9PSBOTykge1xuICAgICAgaWYgKHRoaXMuX2hhcykgaWwuX24odGhpcy5fdiEpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N0b3BJRCk7XG4gICAgICB0aGlzLl9zdG9wSUQgPSBOTztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2hhcykgaWwuX24odGhpcy5fdiEpOyBlbHNlIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLl9wcm9kO1xuICAgICAgaWYgKHAgIT09IE5PKSBwLl9zdGFydCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBfc3RvcE5vdygpIHtcbiAgICB0aGlzLl9oYXMgPSBmYWxzZTtcbiAgICBzdXBlci5fc3RvcE5vdygpO1xuICB9XG5cbiAgX3goKTogdm9pZCB7XG4gICAgdGhpcy5faGFzID0gZmFsc2U7XG4gICAgc3VwZXIuX3goKTtcbiAgfVxuXG4gIG1hcDxVPihwcm9qZWN0OiAodDogVCkgPT4gVSk6IE1lbW9yeVN0cmVhbTxVPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcChwcm9qZWN0KSBhcyBNZW1vcnlTdHJlYW08VT47XG4gIH1cblxuICBtYXBUbzxVPihwcm9qZWN0ZWRWYWx1ZTogVSk6IE1lbW9yeVN0cmVhbTxVPiB7XG4gICAgcmV0dXJuIHN1cGVyLm1hcFRvKHByb2plY3RlZFZhbHVlKSBhcyBNZW1vcnlTdHJlYW08VT47XG4gIH1cblxuICB0YWtlKGFtb3VudDogbnVtYmVyKTogTWVtb3J5U3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIudGFrZShhbW91bnQpIGFzIE1lbW9yeVN0cmVhbTxUPjtcbiAgfVxuXG4gIGVuZFdoZW4ob3RoZXI6IFN0cmVhbTxhbnk+KTogTWVtb3J5U3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuZW5kV2hlbihvdGhlcikgYXMgTWVtb3J5U3RyZWFtPFQ+O1xuICB9XG5cbiAgcmVwbGFjZUVycm9yKHJlcGxhY2U6IChlcnI6IGFueSkgPT4gU3RyZWFtPFQ+KTogTWVtb3J5U3RyZWFtPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIucmVwbGFjZUVycm9yKHJlcGxhY2UpIGFzIE1lbW9yeVN0cmVhbTxUPjtcbiAgfVxuXG4gIHJlbWVtYmVyKCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkZWJ1ZygpOiBNZW1vcnlTdHJlYW08VD47XG4gIGRlYnVnKGxhYmVsT3JTcHk6IHN0cmluZyk6IE1lbW9yeVN0cmVhbTxUPjtcbiAgZGVidWcobGFiZWxPclNweTogKHQ6IFQpID0+IGFueSk6IE1lbW9yeVN0cmVhbTxUPjtcbiAgZGVidWcobGFiZWxPclNweT86IHN0cmluZyB8ICgodDogVCkgPT4gYW55KSB8IHVuZGVmaW5lZCk6IE1lbW9yeVN0cmVhbTxUPiB7XG4gICAgcmV0dXJuIHN1cGVyLmRlYnVnKGxhYmVsT3JTcHkgYXMgYW55KSBhcyBNZW1vcnlTdHJlYW08VD47XG4gIH1cbn1cblxuZXhwb3J0IHsgTk8sIE5PX0lMIH07XG5jb25zdCB4cyA9IFN0cmVhbTtcbnR5cGUgeHM8VD4gPSBTdHJlYW08VD47XG5leHBvcnQgZGVmYXVsdCB4cztcbiJdfQ==","import {Stream} from 'xstream';\n\ndeclare var window: any;\ndeclare var global: any;\n\nfunction getGlobal(this: any): any {\n let globalObj: any;\n if (typeof window !== 'undefined') {\n globalObj = window;\n } else if (typeof global !== 'undefined') {\n globalObj = global;\n } else {\n globalObj = this;\n }\n globalObj.Cyclejs = globalObj.Cyclejs || {};\n globalObj = globalObj.Cyclejs;\n globalObj.adaptStream = globalObj.adaptStream || ((x: any) => x);\n return globalObj;\n}\n\nexport interface AdaptStream {\n (s: Stream<any>): any;\n}\n\nexport function setAdapt(f: AdaptStream): void {\n getGlobal().adaptStream = f;\n}\n\nexport function adapt(stream: Stream<any>): any {\n return getGlobal().adaptStream(stream);\n}\n","import xs, {Stream} from 'xstream';\nimport {adapt} from '../run/adapt';\nexport type Component<So, Si> = (sources: So, ...rest: Array<any>) => Si;\n\nexport type FirstArg<\n T extends (r: any, ...args: Array<any>) => any\n> = T extends (r: infer R, ...args: Array<any>) => any ? R : any;\n\nexport type IsolateableSource<A = any, B = any> = {\n isolateSource(\n source: IsolateableSource<A, B>,\n scope: any\n ): IsolateableSource<A, B>;\n isolateSink(sink: A, scope: any): B;\n};\n\nexport type Sources = {\n [name: string]: IsolateableSource;\n};\n\nexport type WildcardScope = {\n ['*']?: string;\n};\n\nexport type ScopesPerChannel<So> = {[K in keyof So]: any};\n\nexport type Scopes<So> =\n | (Partial<ScopesPerChannel<So>> & WildcardScope)\n | string;\n\nfunction checkIsolateArgs<So, Si>(\n dataflowComponent: Component<So, Si>,\n scope: any\n) {\n if (typeof dataflowComponent !== `function`) {\n throw new Error(\n `First argument given to isolate() must be a ` +\n `'dataflowComponent' function`\n );\n }\n if (scope === null) {\n throw new Error(`Second argument given to isolate() must not be null`);\n }\n}\n\nfunction normalizeScopes<So>(\n sources: So,\n scopes: Scopes<So>,\n randomScope: string\n): ScopesPerChannel<So> {\n const perChannel = {} as ScopesPerChannel<So>;\n Object.keys(sources as any).forEach(channel => {\n if (typeof scopes === 'string') {\n (perChannel as any)[channel] = scopes;\n return;\n }\n const candidate = (scopes as any)[channel];\n if (typeof candidate !== 'undefined') {\n (perChannel as any)[channel] = candidate;\n return;\n }\n const wildcard = (scopes as WildcardScope)['*'];\n if (typeof wildcard !== 'undefined') {\n (perChannel as any)[channel] = wildcard;\n return;\n }\n (perChannel as any)[channel] = randomScope;\n });\n return perChannel;\n}\n\nfunction isolateAllSources<So extends Sources>(\n outerSources: So,\n scopes: ScopesPerChannel<So>\n): So {\n const innerSources = {} as So;\n for (const channel in outerSources) {\n const outerSource = outerSources[channel] as IsolateableSource;\n if (\n Object.prototype.hasOwnProperty.call(outerSources, channel) &&\n outerSource &&\n scopes[channel] !== null &&\n typeof outerSource.isolateSource === 'function'\n ) {\n innerSources[channel] = outerSource.isolateSource(\n outerSource,\n scopes[channel]\n ) as any;\n } else if (Object.prototype.hasOwnProperty.call(outerSources, channel)) {\n innerSources[channel] = outerSources[channel];\n }\n }\n return innerSources;\n}\n\nfunction isolateAllSinks<So extends Sources, Si>(\n sources: So,\n innerSinks: Si,\n scopes: ScopesPerChannel<So>\n): Si {\n const outerSinks = {} as Si;\n for (const channel in innerSinks) {\n const source = sources[channel] as IsolateableSource;\n const innerSink = innerSinks[channel];\n if (\n Object.prototype.hasOwnProperty.call(innerSinks, channel) &&\n source &&\n scopes[channel] !== null &&\n typeof source.isolateSink === 'function'\n ) {\n outerSinks[channel] = adapt(\n source.isolateSink(xs.fromObservable(innerSink as any), scopes[channel])\n );\n } else if (Object.prototype.hasOwnProperty.call(innerSinks, channel)) {\n outerSinks[channel] = innerSinks[channel];\n }\n }\n return outerSinks;\n}\n\nexport type OuterSo<ISo> = {\n [K in keyof ISo]: ISo[K] extends IsolateableSource\n ? FirstArg<IsolateableSource['isolateSource']>\n : ISo[K]\n};\n\nexport type OuterSi<ISo, ISi> = {\n [K in keyof ISo & keyof ISi]: ISo[K] extends IsolateableSource\n ? (ReturnType<ISo[K]['isolateSink']> extends Stream<infer T>\n ? Stream<T>\n : (ReturnType<ISo[K]['isolateSink']> extends Stream<any>\n ? Stream<unknown>\n : unknown))\n : ISi[K]\n} &\n {[K in Exclude<keyof ISi, keyof ISo>]: ISi[K]};\n\nlet counter = 0;\nfunction newScope(): string {\n return `cycle${++counter}`;\n}\n\n/**\n * Takes a `component` function and a `scope`, and returns an isolated version\n * of the `component` function.\n *\n * When the isolated component is invoked, each source provided to it is\n * isolated to the given `scope` using `source.isolateSource(source, scope)`,\n * if possible. Likewise, the sinks returned from the isolated component are\n * isolated to the given `scope` using `source.isolateSink(sink, scope)`.\n *\n * @param {Function} component a function that takes `sources` as input and outputs a collection of `sinks`.\n * @param {String} scope an optional string that is used to isolate each `sources` and `sinks`.\n * @return {Function} the scoped component function.\n * @function isolate\n */\nfunction isolate<InnerSo, InnerSi>(\n component: Component<InnerSo, InnerSi>,\n scope: any = newScope()\n): Component<OuterSo<InnerSo>, OuterSi<InnerSo, InnerSi>> {\n checkIsolateArgs(component, scope);\n const randomScope = typeof scope === 'object' ? newScope() : '';\n const scopes: any =\n typeof scope === 'string' || typeof scope === 'object'\n ? scope\n : scope.toString();\n return function wrappedComponent(\n outerSources: OuterSo<InnerSo>,\n ...rest: Array<any>\n ): OuterSi<InnerSo, InnerSi> {\n const scopesPerChannel = normalizeScopes(outerSources, scopes, randomScope);\n const innerSources = isolateAllSources(\n outerSources as any,\n scopesPerChannel\n );\n const innerSinks = component(innerSources, ...rest);\n const outerSinks = isolateAllSinks(\n outerSources as any,\n innerSinks,\n scopesPerChannel\n );\n return outerSinks as any;\n };\n}\n\n(isolate as any).reset = () => (counter = 0);\n\nexport default isolate;\n\nexport function toIsolated<InnerSo, InnerSi>(\n scope: any = newScope()\n): (\n c: Component<InnerSo, InnerSi>\n) => Component<OuterSo<InnerSo>, OuterSi<InnerSo, InnerSi>> {\n return component => isolate(component, scope);\n}\n","/**\n * ESM ports of xstream's `concat`, `debounce`, `throttle`, `delay`, `dropRepeats` and\n * `sampleCombine` extras (xstream, MIT, André Staltz), behaviour-identical.\n *\n * Why not import 'xstream/extra/*': those modules are CommonJS with `exports.default`. Under\n * Vite/Vitest the default import resolves to the function, but in the rollup CJS build and in\n * native Node ESM it resolves to the module object `{ default: fn }`, so the re-exports from\n * 'sygnal' were not callable there (and neither were sygnal's own internal uses). ESM classes\n * are also tree-shaken when an app does not use them. See also ./flatten.ts.\n */\nimport {Stream} from 'xstream'\n\n// ---------------------------------------------------------------- concat\n\nclass ConcatProducer {\n type = 'concat'\n out: any = null\n i = 0\n constructor(public streams: any[]) {}\n _start(out: any) { this.out = out; this.streams[this.i]._add(this) }\n _stop() {\n const streams = this.streams\n if (this.i < streams.length) streams[this.i]._remove(this)\n this.i = 0\n this.out = null\n }\n _n(t: any) { const u = this.out; if (u) u._n(t) }\n _e(err: any) { const u = this.out; if (u) u._e(err) }\n _c() {\n const u = this.out\n if (!u) return\n const streams = this.streams\n streams[this.i]._remove(this)\n if (++this.i < streams.length) streams[this.i]._add(this)\n else u._c()\n }\n}\n\n/** Emits everything from the first stream, then (once it completes) the second, and so on. */\nexport function concat<T>(...streams: Stream<T>[]): Stream<T> {\n return new Stream<T>(new ConcatProducer(streams) as any)\n}\n\n// ---------------------------------------------------------------- debounce\n\nconst NO_VALUE = {}\n\nclass DebounceOperator {\n type = 'debounce'\n out: any = null\n id: any = null\n t: any = NO_VALUE\n constructor(public dt: number, public ins: any) {}\n _start(out: any) { this.out = out; this.ins._add(this) }\n _stop() { this.ins._remove(this); this.out = null; this.clearInterval() }\n clearInterval() {\n const id = this.id\n if (id !== null) clearInterval(id)\n this.id = null\n }\n _n(t: any) {\n const u = this.out\n if (!u) return\n this.clearInterval()\n this.t = t\n this.id = setInterval(() => {\n this.clearInterval()\n u._n(t)\n this.t = NO_VALUE\n }, this.dt)\n }\n _e(err: any) {\n const u = this.out\n if (!u) return\n this.clearInterval()\n u._e(err)\n }\n _c() {\n const u = this.out\n if (!u) return\n this.clearInterval()\n if (this.t != NO_VALUE) u._n(this.t)\n this.t = NO_VALUE\n u._c()\n }\n}\n\n/** Emits a value only after `period` ms have passed without another value. */\nexport function debounce(period: number): <T>(ins: Stream<T>) => Stream<T> {\n return function debounceOperator<T>(ins: Stream<T>): Stream<T> {\n return new Stream<T>(new DebounceOperator(period, ins) as any)\n }\n}\n\n// ---------------------------------------------------------------- throttle\n\nclass ThrottleOperator {\n type = 'throttle'\n out: any = null\n id: any = null\n constructor(public dt: number, public ins: any) {}\n _start(out: any) { this.out = out; this.ins._add(this) }\n _stop() { this.ins._remove(this); this.out = null; this.id = null }\n clearInterval() {\n const id = this.id\n if (id !== null) clearInterval(id)\n this.id = null\n }\n _n(t: any) {\n const u = this.out\n if (!u) return\n if (this.id) return\n u._n(t)\n this.id = setInterval(() => { this.clearInterval() }, this.dt)\n }\n _e(err: any) {\n const u = this.out\n if (!u) return\n this.clearInterval()\n u._e(err)\n }\n _c() {\n const u = this.out\n if (!u) return\n this.clearInterval()\n u._c()\n }\n}\n\n/** Emits a value, then ignores further values for `period` ms. */\nexport function throttle(period: number): <T>(ins: Stream<T>) => Stream<T> {\n return function throttleOperator<T>(ins: Stream<T>): Stream<T> {\n return new Stream<T>(new ThrottleOperator(period, ins) as any)\n }\n}\n\n// ---------------------------------------------------------------- delay\n\nclass DelayOperator {\n type = 'delay'\n out: any = null\n constructor(public dt: number, public ins: any) {}\n _start(out: any) { this.out = out; this.ins._add(this) }\n _stop() { this.ins._remove(this); this.out = null }\n _n(t: any) {\n const u = this.out\n if (!u) return\n const id = setInterval(() => { u._n(t); clearInterval(id) }, this.dt)\n }\n _e(err: any) {\n const u = this.out\n if (!u) return\n const id = setInterval(() => { u._e(err); clearInterval(id) }, this.dt)\n }\n _c() {\n const u = this.out\n if (!u) return\n const id = setInterval(() => { u._c(); clearInterval(id) }, this.dt)\n }\n}\n\n/** Delays every event (values, error, completion) by `period` ms. */\nexport function delay(period: number): <T>(ins: Stream<T>) => Stream<T> {\n return function delayOperator<T>(ins: Stream<T>): Stream<T> {\n return new Stream<T>(new DelayOperator(period, ins) as any)\n }\n}\n\n// ---------------------------------------------------------------- dropRepeats\n\nconst EMPTY = {}\n\nclass DropRepeatsOperator {\n type = 'dropRepeats'\n out: any = null\n v: any = EMPTY\n isEq: (x: any, y: any) => boolean\n constructor(public ins: any, fn?: (x: any, y: any) => boolean) {\n this.isEq = fn ? fn : (x: any, y: any) => x === y\n }\n _start(out: any) { this.out = out; this.ins._add(this) }\n _stop() { this.ins._remove(this); this.out = null; this.v = EMPTY }\n _n(t: any) {\n const u = this.out\n if (!u) return\n const v = this.v\n if (v !== EMPTY && this.isEq(t, v)) return\n this.v = t\n u._n(t)\n }\n _e(err: any) { const u = this.out; if (u) u._e(err) }\n _c() { const u = this.out; if (u) u._c() }\n}\n\n/** Drops consecutive duplicates (`===`, or the given equality function). */\nexport function dropRepeats<T>(isEqual?: (x: T, y: T) => boolean): (ins: Stream<T>) => Stream<T> {\n return function dropRepeatsOperator(ins: Stream<T>): Stream<T> {\n return new Stream<T>(new DropRepeatsOperator(ins, isEqual as any) as any)\n }\n}\n\n// ---------------------------------------------------------------- sampleCombine\n\nconst NO = {}\n\nclass SampleCombineListener {\n constructor(public i: number, public p: SampleCombineOperator) { p.ils[i] = this }\n _n(t: any) {\n const p = this.p\n if (p.out === NO) return\n p.up(t, this.i)\n }\n _e(err: any) { this.p._e(err) }\n _c() { this.p.down(this.i, this) }\n}\n\nclass SampleCombineOperator {\n type = 'sampleCombine'\n out: any = NO\n ils: any[] = []\n Nn = 0\n vals: any[] = []\n constructor(public ins: any, public others: any[]) {}\n _start(out: any) {\n this.out = out\n const s = this.others\n const n = this.Nn = s.length\n const vals = this.vals = new Array(n)\n for (let i = 0; i < n; i++) {\n vals[i] = NO\n s[i]._add(new SampleCombineListener(i, this))\n }\n this.ins._add(this)\n }\n _stop() {\n const s = this.others\n const n = s.length\n const ils = this.ils\n this.ins._remove(this)\n for (let i = 0; i < n; i++) s[i]._remove(ils[i])\n this.out = NO\n this.vals = []\n this.ils = []\n }\n _n(t: any) {\n const out = this.out\n if (out === NO) return\n if (this.Nn > 0) return\n out._n([t, ...this.vals])\n }\n _e(err: any) { const out = this.out; if (out !== NO) out._e(err) }\n _c() { const out = this.out; if (out !== NO) out._c() }\n up(t: any, i: number) {\n const v = this.vals[i]\n if (this.Nn > 0 && v === NO) this.Nn--\n this.vals[i] = t\n }\n down(i: number, l: any) { this.others[i]._remove(l) }\n}\n\n/**\n * Operator: whenever the source emits, emits `[source, latest(a), latest(b), ...]`\n * (only once every other stream has emitted at least once).\n */\nexport function sampleCombine(...streams: Stream<any>[]): (sampler: Stream<any>) => Stream<any[]> {\n return function sampleCombineOperator(sampler: Stream<any>): Stream<any[]> {\n return new Stream<any[]>(new SampleCombineOperator(sampler, streams) as any)\n }\n}\n","import xs, {Stream, MemoryStream} from 'xstream';\nimport {dropRepeats} from '../../extra/xstreamExtras';\nimport {DevToolEnabledSource} from '../run/types';\nimport {adapt} from '../run/adapt';\nimport {Getter, Setter, Scope, Reducer} from './types';\n\nfunction updateArrayEntry<T>(\n array: Array<T>,\n scope: number | string,\n newVal: any\n): Array<T> {\n if (newVal === (array as any)[scope]) {\n return array;\n }\n const index = parseInt(scope as string);\n if (typeof newVal === 'undefined') {\n return array.filter((_val, i) => i !== index);\n }\n return array.map((val, i) => (i === index ? newVal : val));\n}\n\nfunction makeGetter<T, R>(scope: Scope<T, R>): Getter<T, R> {\n if (typeof scope === 'string' || typeof scope === 'number') {\n return function lensGet(state: T | undefined) {\n if (typeof state === 'undefined' || state === null) {\n return void 0;\n } else {\n return (state as any)[scope];\n }\n };\n } else {\n return scope.get;\n }\n}\n\nfunction makeSetter<T, R>(scope: Scope<T, R>): Setter<T, R> {\n if (typeof scope === 'string' || typeof scope === 'number') {\n return function lensSet(\n state: T | undefined,\n childState: R | undefined\n ): T {\n if (Array.isArray(state)) {\n return updateArrayEntry(state, scope, childState) as any;\n } else if (typeof state === 'undefined') {\n return ({[scope]: childState} as any) as T;\n } else {\n return {...(state as any), [scope]: childState};\n }\n };\n } else {\n return scope.set;\n }\n}\n\nexport function isolateSource<T, R>(\n source: StateSource<T>,\n scope: Scope<T, R>\n): StateSource<R> {\n return source.select(scope);\n}\n\nexport function isolateSink<T, R>(\n innerReducer$: Stream<Reducer<R>>,\n scope: Scope<T, R>\n): Stream<Reducer<T>> {\n const get = makeGetter(scope);\n const set = makeSetter(scope);\n\n return innerReducer$.map(\n innerReducer =>\n function outerReducer(outer: T | undefined) {\n const prevInner = get(outer);\n const nextInner = innerReducer(prevInner);\n if (prevInner === nextInner) {\n return outer;\n } else {\n return set(outer, nextInner);\n }\n }\n );\n}\n\n/**\n * Represents a piece of application state dynamically changing over time.\n */\nexport class StateSource<S> {\n public stream: MemoryStream<S>;\n private _stream: MemoryStream<S>;\n private _name: string;\n\n constructor(stream: Stream<S>, name: string) {\n this._stream = stream\n .filter(s => typeof s !== 'undefined')\n .compose(dropRepeats())\n .remember();\n this._name = name;\n this.stream = adapt(this._stream);\n (this._stream as MemoryStream<S> &\n DevToolEnabledSource)._isCycleSource = name;\n }\n\n /**\n * Selects a part (or scope) of the state object and returns a new StateSource\n * dynamically representing that selected part of the state.\n */\n public select<R>(scope: Scope<S, R>): StateSource<R> {\n const get = makeGetter(scope);\n return new StateSource<R>(this._stream.map(get) as Stream<R>, this._name);\n }\n\n public isolateSource = isolateSource;\n public isolateSink = isolateSink;\n}\n","import xs, {Stream, InternalListener, OutSender, Operator} from 'xstream';\nimport {InternalInstances} from './types';\n\nclass PickMergeListener<Si, T> implements InternalListener<T>, OutSender<T> {\n public ins: Stream<T>;\n public out: Stream<T>;\n public p: PickMerge<Si, T>;\n\n constructor(out: Stream<T>, p: PickMerge<Si, T>, ins: Stream<T>) {\n this.ins = ins;\n this.out = out;\n this.p = p;\n }\n\n public _n(t: T): void {\n const p = this.p,\n out = this.out;\n if (out === null) {\n return;\n }\n out._n(t);\n }\n\n public _e(err: any): void {\n const out = this.out;\n if (out === null) {\n return;\n }\n out._e(err);\n }\n\n public _c(): void {}\n}\n\nclass PickMerge<Si, T> implements Operator<InternalInstances<Si>, T> {\n public type = 'pickMerge';\n public ins: Stream<InternalInstances<Si>>;\n public out: Stream<T>;\n public sel: string;\n public ils: Map<string, PickMergeListener<Si, T>>;\n public inst: InternalInstances<Si>;\n\n constructor(sel: string, ins: Stream<InternalInstances<Si>>) {\n this.ins = ins;\n this.out = null as any;\n this.sel = sel;\n this.ils = new Map();\n this.inst = null as any;\n }\n\n public _start(out: Stream<T>): void {\n this.out = out;\n this.ins._add(this);\n }\n\n public _stop(): void {\n this.ins._remove(this);\n const ils = this.ils;\n ils.forEach((il, key) => {\n il.ins._remove(il);\n il.ins = null as any;\n il.out = null as any;\n ils.delete(key);\n });\n ils.clear();\n this.out = null as any;\n this.ils = new Map();\n this.inst = null as any;\n }\n\n public _n(inst: InternalInstances<Si>): void {\n this.inst = inst;\n const arrSinks = inst.arr;\n const ils = this.ils;\n const out = this.out;\n const sel = this.sel;\n const n = arrSinks.length;\n // add\n for (let i = 0; i < n; ++i) {\n const sinks = arrSinks[i];\n const key = (sinks as any)._key as string;\n const sink: Stream<any> = xs.fromObservable((sinks as any)[sel] || xs.never());\n if (!ils.has(key)) {\n ils.set(key, new PickMergeListener(out, this, sink));\n sink._add(ils.get(key) as PickMergeListener<Si, T>);\n }\n }\n // remove\n ils.forEach((il, key) => {\n if (!inst.dict.has(key) || !inst.dict.get(key)) {\n il.ins._remove(il);\n il.ins = null as any;\n il.out = null as any;\n ils.delete(key);\n }\n });\n }\n\n public _e(err: any) {\n const u = this.out;\n if (u === null) {\n return;\n }\n u._e(err);\n }\n\n public _c() {\n const u = this.out;\n if (u === null) {\n return;\n }\n u._c();\n }\n}\n\nexport function pickMerge(selector: string) {\n return function pickMergeOperator(\n inst$: Stream<InternalInstances<any>>\n ): Stream<any> {\n return new Stream(new PickMerge(selector, inst$));\n };\n}\n","import xs, {Stream, InternalListener, OutSender, Operator, NO} from 'xstream';\nimport {InternalInstances} from './types';\n\nclass PickCombineListener<Si, T>\n implements InternalListener<T>, OutSender<Array<T>> {\n private key: string;\n public out: Stream<Array<T>>;\n public p: PickCombine<Si, T>;\n public val: T;\n public ins: Stream<T>;\n\n constructor(\n key: string,\n out: Stream<Array<T>>,\n p: PickCombine<Si, T>,\n ins: Stream<T>\n ) {\n this.key = key;\n this.out = out;\n this.p = p;\n this.val = NO as any;\n this.ins = ins;\n }\n\n public _n(t: T): void {\n const p = this.p,\n out = this.out;\n this.val = t;\n if (out === null) {\n return;\n }\n this.p.up();\n }\n\n public _e(err: any): void {\n const out = this.out;\n if (out === null) {\n return;\n }\n out._e(err);\n }\n\n public _c(): void {}\n}\n\n// True when the items present both before and after appear in a different relative\n// order. Additions emit through the new item's sink and removals are handled\n// separately, so only a permutation of the surviving items counts here.\nfunction isReordered(prev: Array<string>, next: Array<string>, dict: Map<string, any>): boolean {\n const m = prev.length;\n if (m === next.length) {\n let same = true;\n for (let i = 0; i < m && same; ++i) same = prev[i] === next[i];\n if (same) return false;\n }\n let j = 0;\n const seen = new Set(prev);\n for (let i = 0; i < next.length; ++i) {\n const key = next[i];\n if (!seen.has(key)) continue;\n while (j < m && !dict.has(prev[j])) ++j;\n if (prev[j] !== key) return true;\n ++j;\n }\n return false;\n}\n\nclass PickCombine<Si, R> implements Operator<InternalInstances<Si>, Array<R>> {\n public type = 'combine';\n public ins: Stream<InternalInstances<Si>>;\n public out: Stream<Array<R>>;\n public sel: string;\n public ils: Map<string, PickCombineListener<Si, R>>;\n public inst: InternalInstances<Si>;\n // item keys in the order of the last instances (B-010: detect pure reorders)\n public keys: Array<string>;\n\n constructor(sel: string, ins: Stream<InternalInstances<Si>>) {\n this.ins = ins;\n this.sel = sel;\n this.out = null as any;\n this.ils = new Map();\n this.inst = null as any;\n this.keys = [];\n }\n\n public _start(out: Stream<Array<R>>): void {\n this.out = out;\n this.ins._add(this);\n }\n\n public _stop(): void {\n this.ins._remove(this);\n const ils = this.ils;\n ils.forEach(il => {\n il.ins._remove(il);\n il.ins = null as any;\n il.out = null as any;\n il.val = null as any;\n });\n ils.clear();\n this.out = null as any;\n this.ils = new Map();\n this.inst = null as any;\n this.keys = [];\n }\n\n public up(): void {\n const arr = this.inst.arr;\n const n = arr.length;\n const ils = this.ils;\n const outArr: Array<R> = Array(n);\n for (let i = 0; i < n; ++i) {\n const sinks = arr[i];\n const key = (sinks as any)._key as string;\n if (!ils.has(key)) {\n return;\n }\n const val = (ils.get(key) as any).val;\n if (val === NO) {\n return;\n }\n outArr[i] = val;\n }\n this.out._n(outArr);\n }\n\n public _n(inst: InternalInstances<Si>): void {\n this.inst = inst;\n const arrSinks = inst.arr;\n const ils = this.ils;\n const out = this.out;\n const sel = this.sel;\n const dict = inst.dict;\n const n = arrSinks.length;\n // remove\n let removed = false;\n ils.forEach((il, key) => {\n if (!dict.has(key)) {\n il.ins._remove(il);\n il.ins = null as any;\n il.out = null as any;\n il.val = null as any;\n ils.delete(key);\n removed = true;\n }\n });\n if (n === 0) {\n this.keys = [];\n out._n([]);\n return;\n }\n // add\n const keys: Array<string> = Array(n);\n for (let i = 0; i < n; ++i) {\n const sinks = arrSinks[i];\n const key = (sinks as any)._key as string;\n keys[i] = key;\n if (!(sinks as any)[sel]) {\n throw new Error('pickCombine found an undefined child sink stream');\n }\n const sink: Stream<any> = xs.fromObservable((sinks as any)[sel]);\n if (!ils.has(key)) {\n ils.set(key, new PickCombineListener(key, out, this, sink));\n sink._add(ils.get(key) as PickCombineListener<Si, R>);\n }\n }\n const reordered = isReordered(this.keys, keys, dict);\n this.keys = keys;\n // B-010: a permutation (swap, reverse, move) neither removes an item nor makes an\n // item sink emit, so re-emit whenever the order of keys changed. up() waits until\n // every item has emitted, so a brand new item still triggers its own emission.\n if (removed || reordered) {\n this.up();\n }\n }\n\n public _e(e: any): void {\n const out = this.out;\n if (out === null) {\n return;\n }\n out._e(e);\n }\n\n public _c(): void {\n const out = this.out;\n if (out === null) {\n return;\n }\n out._c();\n }\n}\n\nexport function pickCombine(selector: string) {\n return function pickCombineOperator(\n inst$: Stream<InternalInstances<any>>\n ): Stream<Array<any>> {\n return new Stream(new PickCombine(selector, inst$));\n };\n}\n","import xs, {Stream} from 'xstream';\nimport {adapt} from '../run/adapt';\nimport isolate from '../isolate/index';\nimport {pickMerge} from './pickMerge';\nimport {pickCombine} from './pickCombine';\nimport {StateSource} from './StateSource';\nimport {\n InternalInstances,\n Lens,\n ItemKeyFn,\n ItemScopeFn,\n ItemFactoryFn,\n} from './types';\n\n/**\n * An object representing all instances in a collection of components. Has the\n * methods pickCombine and pickMerge to get the combined sinks of all instances.\n */\nexport class Instances<Si> {\n private _instances$: Stream<InternalInstances<Si>>;\n\n constructor(instances$: Stream<InternalInstances<Si>>) {\n this._instances$ = instances$;\n }\n\n public pickMerge(selector: string): Stream<any> {\n return adapt(this._instances$.compose(pickMerge(selector)));\n }\n\n public pickCombine(selector: string): Stream<Array<any>> {\n return adapt(this._instances$.compose(pickCombine(selector)));\n }\n}\n\ninterface BaseOptions<S, So, Si> {\n collectSinks(instances: Instances<Si>): any;\n itemKey?: ItemKeyFn<S>;\n itemScope?: ItemScopeFn;\n channel?: string;\n}\n\ninterface HomogenousOptions<S, So, Si> extends BaseOptions<S, So, Si> {\n item(so: So): Si;\n itemFactory?: never;\n}\n\ninterface HeterogenousOptions<S, So, Si> extends BaseOptions<S, So, Si> {\n item?: never;\n itemFactory: ItemFactoryFn<S, So, Si>;\n}\n\nexport type CollectionOptions<S, So, Si> =\n | HomogenousOptions<S, So, Si>\n | HeterogenousOptions<S, So, Si>;\n\nfunction defaultItemScope(key: string) {\n return {'*': null};\n}\n\nfunction instanceLens(\n itemKey: ItemKeyFn<any>,\n key: string\n): Lens<Array<any>, any> {\n return {\n get(arr: Array<any> | undefined): any {\n if (typeof arr === 'undefined') {\n return void 0;\n } else {\n for (let i = 0, n = arr.length; i < n; ++i) {\n if (`${itemKey(arr[i], i)}` === key) {\n return arr[i];\n }\n }\n return void 0;\n }\n },\n\n set(arr: Array<any> | undefined, item: any): any {\n if (typeof arr === 'undefined') {\n return [item];\n } else if (typeof item === 'undefined') {\n return arr.filter((s, i) => `${itemKey(s, i)}` !== key);\n } else {\n return arr.map((s, i) => {\n if (`${itemKey(s, i)}` === key) {\n return item;\n } else {\n return s;\n }\n });\n }\n },\n };\n}\n\nconst identityLens = {\n get: <T>(outer: T) => outer,\n set: <T>(outer: T, inner: T) => inner,\n};\n\nexport function makeCollection<S, So = any, Si = any>(\n opts: CollectionOptions<S, So, Si>\n) {\n return function collectionComponent(sources: any) {\n const name = opts.channel || 'state';\n const itemKey = opts.itemKey;\n const itemScope = opts.itemScope || defaultItemScope;\n const state$ = xs.fromObservable((sources[name] as StateSource<S>).stream);\n const dict = new Map();\n let disposed = false;\n const instances$ = state$.fold(\n (acc: InternalInstances<Si>, nextState: Array<any> | any) => {\n if (disposed) return acc;\n if (Array.isArray(nextState)) {\n const nextInstArray = Array(nextState.length) as Array<\n Si & {_key: string}\n >;\n const nextKeys = new Set<string>();\n // add\n for (let i = 0, n = nextState.length; i < n; ++i) {\n const key = `${itemKey ? itemKey(nextState[i], i) : i}`;\n nextKeys.add(key);\n if (!dict.has(key)) {\n const stateScope = itemKey ? instanceLens(itemKey, key) : `${i}`;\n const otherScopes = itemScope(key);\n const scopes =\n typeof otherScopes === 'string'\n ? {'*': otherScopes, [name]: stateScope}\n : {...otherScopes, [name]: stateScope};\n const itemComp = opts.itemFactory\n ? opts.itemFactory(nextState[i], i)\n : opts.item;\n const sinks: any = isolate(itemComp, scopes)(sources);\n dict.set(key, sinks);\n nextInstArray[i] = sinks;\n } else {\n nextInstArray[i] = dict.get(key) as any;\n }\n nextInstArray[i]._key = key;\n }\n // remove\n dict.forEach((sinks, key) => {\n if (!nextKeys.has(key)) {\n if (sinks && typeof sinks.__dispose === 'function') {\n sinks.__dispose();\n }\n dict.delete(key);\n }\n });\n nextKeys.clear();\n return {dict: dict, arr: nextInstArray};\n } else {\n dict.forEach((sinks) => {\n if (sinks && typeof sinks.__dispose === 'function') sinks.__dispose();\n });\n dict.clear();\n const key = `${itemKey ? itemKey(nextState, 0) : 'this'}`;\n const stateScope = identityLens;\n const otherScopes = itemScope(key);\n const scopes =\n typeof otherScopes === 'string'\n ? {'*': otherScopes, [name]: stateScope}\n : {...otherScopes, [name]: stateScope};\n const itemComp = opts.itemFactory\n ? opts.itemFactory(nextState, 0)\n : opts.item;\n const sinks: any = isolate(itemComp, scopes)(sources);\n dict.set(key, sinks);\n return {dict: dict, arr: [sinks]};\n }\n },\n {dict, arr: []} as InternalInstances<Si>\n );\n const sinks = opts.collectSinks(new Instances<Si>(instances$));\n // B-024: disposing the collection (its owner was disposed or stopped rendering it)\n // disposes every live item, and so their subtrees\n sinks.__dispose = () => {\n disposed = true;\n dict.forEach((s: any) => s.__dispose?.());\n dict.clear();\n };\n return sinks;\n };\n}\n","import xs, {Stream} from 'xstream';\nimport {concat} from '../../extra/xstreamExtras';\nimport {MainFn, Reducer} from './types';\nimport {StateSource} from './StateSource';\n\nexport type Omit<T, K extends keyof T> = {[P in Exclude<keyof T, K>]: T[P]};\n\nexport type Forbid<T, K extends keyof T> = Omit<T, K> & {[P in K]?: never};\n\nexport type OSo<T, N extends string> = {[P in N]: StateSource<T>};\nexport type OSi<T, N extends string> = {[P in N]: Stream<Reducer<T>>};\n\nexport type MainWithState<\n So extends OSo<T, N>,\n Si extends OSi<T, N>,\n T,\n N extends string\n> = MainFn<Forbid<So, N>, Omit<Si, N>>;\n\nexport function withState<\n So extends OSo<T, N>,\n Si extends OSi<T, N>,\n T = any,\n N extends string = 'state'\n>(main: MainFn<So, Si>, name: N = 'state' as N): MainWithState<So, Si, T, N> {\n return function mainWithState(sources: Forbid<So, N>): Omit<Si, N> {\n const reducerMimic$ = xs.create<Reducer<T>>();\n const state$ = reducerMimic$\n .fold((state, reducer) => reducer(state), void 0 as T | undefined)\n .drop(1);\n const innerSources: So = sources as any;\n (innerSources as any)[name] = new StateSource<any>(state$, name);\n const sinks = main(innerSources);\n if (sinks[name]) {\n const stream$ = concat(\n xs.fromObservable<Reducer<T>>(sinks[name]),\n xs.never()\n );\n stream$.subscribe({\n next: i => queueMicrotask(() => reducerMimic$._n(i)),\n error: err => queueMicrotask(() => reducerMimic$._e(err)),\n complete: () => queueMicrotask(() => reducerMimic$._c()),\n });\n }\n return sinks as any;\n };\n}\n","export function vnode(sel, data, children, text, elm) {\n const key = data === undefined ? undefined : data.key;\n return { sel, data, children, text, elm, key };\n}\n//# sourceMappingURL=vnode.js.map","export const array = Array.isArray;\nexport function primitive(s) {\n return (typeof s === \"string\" ||\n typeof s === \"number\" ||\n s instanceof String ||\n s instanceof Number);\n}\n//# sourceMappingURL=is.js.map","import { vnode } from \"./vnode.js\";\nimport * as is from \"./is.js\";\nexport function addNS(data, children, sel) {\n data.ns = \"http://www.w3.org/2000/svg\";\n if (sel !== \"foreignObject\" && children !== undefined) {\n for (let i = 0; i < children.length; ++i) {\n const child = children[i];\n if (typeof child === \"string\")\n continue;\n const childData = child.data;\n if (childData !== undefined) {\n addNS(childData, child.children, child.sel);\n }\n }\n }\n}\nexport function h(sel, b, c) {\n let data = {};\n let children;\n let text;\n let i;\n if (c !== undefined) {\n if (b !== null) {\n data = b;\n }\n if (is.array(c)) {\n children = c;\n }\n else if (is.primitive(c)) {\n text = c.toString();\n }\n else if (c && c.sel) {\n children = [c];\n }\n }\n else if (b !== undefined && b !== null) {\n if (is.array(b)) {\n children = b;\n }\n else if (is.primitive(b)) {\n text = b.toString();\n }\n else if (b && b.sel) {\n children = [b];\n }\n else {\n data = b;\n }\n }\n if (children !== undefined) {\n for (i = 0; i < children.length; ++i) {\n if (is.primitive(children[i]))\n children[i] = vnode(undefined, undefined, undefined, children[i], undefined);\n }\n }\n if (sel.startsWith(\"svg\") &&\n (sel.length === 3 || sel[3] === \".\" || sel[3] === \"#\")) {\n addNS(data, children, sel);\n }\n return vnode(sel, data, children, text, undefined);\n}\n/**\n * @experimental\n */\nexport function fragment(children) {\n let c;\n let text;\n if (is.array(children)) {\n c = children;\n }\n else if (is.primitive(c)) {\n text = children;\n }\n else if (c && c.sel) {\n c = [children];\n }\n if (c !== undefined) {\n for (let i = 0; i < c.length; ++i) {\n if (is.primitive(c[i]))\n c[i] = vnode(undefined, undefined, undefined, c[i], undefined);\n }\n }\n return vnode(undefined, {}, c, text, undefined);\n}\n//# sourceMappingURL=h.js.map","function createElement(tagName, options) {\n return document.createElement(tagName, options);\n}\nfunction createElementNS(namespaceURI, qualifiedName, options) {\n return document.createElementNS(namespaceURI, qualifiedName, options);\n}\nfunction createDocumentFragment() {\n return parseFragment(document.createDocumentFragment());\n}\nfunction createTextNode(text) {\n return document.createTextNode(text);\n}\nfunction createComment(text) {\n return document.createComment(text);\n}\nfunction insertBefore(parentNode, newNode, referenceNode) {\n if (isDocumentFragment(parentNode)) {\n let node = parentNode;\n while (node && isDocumentFragment(node)) {\n const fragment = parseFragment(node);\n node = fragment.parent;\n }\n parentNode = node !== null && node !== void 0 ? node : parentNode;\n }\n if (isDocumentFragment(newNode)) {\n newNode = parseFragment(newNode, parentNode);\n }\n if (referenceNode && isDocumentFragment(referenceNode)) {\n referenceNode = parseFragment(referenceNode).firstChildNode;\n }\n parentNode.insertBefore(newNode, referenceNode);\n}\nfunction removeChild(node, child) {\n node.removeChild(child);\n}\nfunction appendChild(node, child) {\n if (isDocumentFragment(child)) {\n child = parseFragment(child, node);\n }\n node.appendChild(child);\n}\nfunction parentNode(node) {\n if (isDocumentFragment(node)) {\n while (node && isDocumentFragment(node)) {\n const fragment = parseFragment(node);\n node = fragment.parent;\n }\n return node !== null && node !== void 0 ? node : null;\n }\n return node.parentNode;\n}\nfunction nextSibling(node) {\n var _a;\n if (isDocumentFragment(node)) {\n const fragment = parseFragment(node);\n const parent = parentNode(fragment);\n if (parent && fragment.lastChildNode) {\n const children = Array.from(parent.childNodes);\n const index = children.indexOf(fragment.lastChildNode);\n return (_a = children[index + 1]) !== null && _a !== void 0 ? _a : null;\n }\n return null;\n }\n return node.nextSibling;\n}\nfunction tagName(elm) {\n return elm.tagName;\n}\nfunction setTextContent(node, text) {\n node.textContent = text;\n}\nfunction getTextContent(node) {\n return node.textContent;\n}\nfunction isElement(node) {\n return node.nodeType === 1;\n}\nfunction isText(node) {\n return node.nodeType === 3;\n}\nfunction isComment(node) {\n return node.nodeType === 8;\n}\nfunction isDocumentFragment(node) {\n return node.nodeType === 11;\n}\nfunction parseFragment(fragmentNode, parentNode) {\n var _a, _b, _c;\n const fragment = fragmentNode;\n (_a = fragment.parent) !== null && _a !== void 0 ? _a : (fragment.parent = parentNode !== null && parentNode !== void 0 ? parentNode : null);\n (_b = fragment.firstChildNode) !== null && _b !== void 0 ? _b : (fragment.firstChildNode = fragmentNode.firstChild);\n (_c = fragment.lastChildNode) !== null && _c !== void 0 ? _c : (fragment.lastChildNode = fragmentNode.lastChild);\n return fragment;\n}\nexport const htmlDomApi = {\n createElement,\n createElementNS,\n createTextNode,\n createDocumentFragment,\n createComment,\n insertBefore,\n removeChild,\n appendChild,\n parentNode,\n nextSibling,\n tagName,\n setTextContent,\n getTextContent,\n isElement,\n isText,\n isComment,\n isDocumentFragment\n};\n//# sourceMappingURL=htmldomapi.js.map","import { vnode } from \"./vnode.js\";\nimport * as is from \"./is.js\";\nimport { htmlDomApi } from \"./htmldomapi.js\";\nconst emptyNode = vnode(\"\", {}, [], undefined, undefined);\nfunction sameVnode(vnode1, vnode2) {\n var _a, _b;\n const isSameKey = vnode1.key === vnode2.key;\n const isSameIs = ((_a = vnode1.data) === null || _a === void 0 ? void 0 : _a.is) === ((_b = vnode2.data) === null || _b === void 0 ? void 0 : _b.is);\n const isSameSel = vnode1.sel === vnode2.sel;\n const isSameTextOrFragment = !vnode1.sel && vnode1.sel === vnode2.sel\n ? typeof vnode1.text === typeof vnode2.text\n : true;\n return isSameSel && isSameKey && isSameIs && isSameTextOrFragment;\n}\n/**\n * @todo Remove this function when the document fragment is considered stable.\n */\nfunction documentFragmentIsNotSupported() {\n throw new Error(\"The document fragment is not supported on this platform.\");\n}\nfunction isElement(api, vnode) {\n return api.isElement(vnode);\n}\nfunction isDocumentFragment(api, vnode) {\n return api.isDocumentFragment(vnode);\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n var _a;\n const map = {};\n for (let i = beginIdx; i <= endIdx; ++i) {\n const key = (_a = children[i]) === null || _a === void 0 ? void 0 : _a.key;\n if (key !== undefined) {\n map[key] = i;\n }\n }\n return map;\n}\nconst hooks = [\n \"create\",\n \"update\",\n \"remove\",\n \"destroy\",\n \"pre\",\n \"post\"\n];\nexport function init(modules, domApi, options) {\n const cbs = {\n create: [],\n update: [],\n remove: [],\n destroy: [],\n pre: [],\n post: []\n };\n const api = domApi !== undefined ? domApi : htmlDomApi;\n for (const hook of hooks) {\n for (const module of modules) {\n const currentHook = module[hook];\n if (currentHook !== undefined) {\n cbs[hook].push(currentHook);\n }\n }\n }\n function emptyNodeAt(elm) {\n const id = elm.id ? \"#\" + elm.id : \"\";\n // elm.className doesn't return a string when elm is an SVG element inside a shadowRoot.\n // https://stackoverflow.com/questions/29454340/detecting-classname-of-svganimatedstring\n const classes = elm.getAttribute(\"class\");\n const c = classes ? \".\" + classes.split(\" \").join(\".\") : \"\";\n return vnode(api.tagName(elm).toLowerCase() + id + c, {}, [], undefined, elm);\n }\n function emptyDocumentFragmentAt(frag) {\n return vnode(undefined, {}, [], undefined, frag);\n }\n function createRmCb(childElm, listeners) {\n return function rmCb() {\n if (--listeners === 0) {\n const parent = api.parentNode(childElm);\n if (parent !== null) {\n api.removeChild(parent, childElm);\n }\n }\n };\n }\n function createElm(vnode, insertedVnodeQueue) {\n var _a, _b, _c, _d, _e;\n let i;\n const data = vnode.data;\n const hook = data === null || data === void 0 ? void 0 : data.hook;\n (_a = hook === null || hook === void 0 ? void 0 : hook.init) === null || _a === void 0 ? void 0 : _a.call(hook, vnode);\n const children = vnode.children;\n const sel = vnode.sel;\n if (sel === \"!\") {\n (_b = vnode.text) !== null && _b !== void 0 ? _b : (vnode.text = \"\");\n vnode.elm = api.createComment(vnode.text);\n }\n else if (sel === \"\") {\n // textNode has no selector\n vnode.elm = api.createTextNode(vnode.text);\n }\n else if (sel !== undefined) {\n // Parse selector\n const hashIdx = sel.indexOf(\"#\");\n const dotIdx = sel.indexOf(\".\", hashIdx);\n const hash = hashIdx > 0 ? hashIdx : sel.length;\n const dot = dotIdx > 0 ? dotIdx : sel.length;\n const tag = hashIdx !== -1 || dotIdx !== -1\n ? sel.slice(0, Math.min(hash, dot))\n : sel;\n const ns = data === null || data === void 0 ? void 0 : data.ns;\n const elm = ns === undefined\n ? api.createElement(tag, data)\n : api.createElementNS(ns, tag, data);\n vnode.elm = elm;\n if (hash < dot)\n elm.setAttribute(\"id\", sel.slice(hash + 1, dot));\n if (dotIdx > 0)\n elm.setAttribute(\"class\", sel.slice(dot + 1).replace(/\\./g, \" \"));\n for (i = 0; i < cbs.create.length; ++i)\n cbs.create[i](emptyNode, vnode);\n if (is.primitive(vnode.text) &&\n (!is.array(children) || children.length === 0)) {\n // allow h1 and similar nodes to be created w/ text and empty child list\n api.appendChild(elm, api.createTextNode(vnode.text));\n }\n if (is.array(children)) {\n for (i = 0; i < children.length; ++i) {\n const ch = children[i];\n if (ch != null) {\n api.appendChild(elm, createElm(ch, insertedVnodeQueue));\n }\n }\n }\n if (hook !== undefined) {\n (_c = hook.create) === null || _c === void 0 ? void 0 : _c.call(hook, emptyNode, vnode);\n if (hook.insert !== undefined) {\n insertedVnodeQueue.push(vnode);\n }\n }\n }\n else if (((_d = options === null || options === void 0 ? void 0 : options.experimental) === null || _d === void 0 ? void 0 : _d.fragments) && vnode.children) {\n vnode.elm = ((_e = api.createDocumentFragment) !== null && _e !== void 0 ? _e : documentFragmentIsNotSupported)();\n for (i = 0; i < cbs.create.length; ++i)\n cbs.create[i](emptyNode, vnode);\n for (i = 0; i < vnode.children.length; ++i) {\n const ch = vnode.children[i];\n if (ch != null) {\n api.appendChild(vnode.elm, createElm(ch, insertedVnodeQueue));\n }\n }\n }\n else {\n vnode.elm = api.createTextNode(vnode.text);\n }\n return vnode.elm;\n }\n function addVnodes(parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n const ch = vnodes[startIdx];\n if (ch != null) {\n api.insertBefore(parentElm, createElm(ch, insertedVnodeQueue), before);\n }\n }\n }\n function invokeDestroyHook(vnode) {\n var _a, _b;\n const data = vnode.data;\n if (data !== undefined) {\n (_b = (_a = data === null || data === void 0 ? void 0 : data.hook) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a, vnode);\n for (let i = 0; i < cbs.destroy.length; ++i)\n cbs.destroy[i](vnode);\n if (vnode.children !== undefined) {\n for (let j = 0; j < vnode.children.length; ++j) {\n const child = vnode.children[j];\n if (child != null && typeof child !== \"string\") {\n invokeDestroyHook(child);\n }\n }\n }\n }\n }\n function removeVnodes(parentElm, vnodes, startIdx, endIdx) {\n var _a, _b;\n for (; startIdx <= endIdx; ++startIdx) {\n let listeners;\n const ch = vnodes[startIdx];\n if (ch != null) {\n if (ch.sel !== undefined) {\n invokeDestroyHook(ch);\n listeners = cbs.remove.length + 1;\n const rm = createRmCb(ch.elm, listeners);\n for (let i = 0; i < cbs.remove.length; ++i)\n cbs.remove[i](ch, rm);\n const removeHook = (_b = (_a = ch === null || ch === void 0 ? void 0 : ch.data) === null || _a === void 0 ? void 0 : _a.hook) === null || _b === void 0 ? void 0 : _b.remove;\n if (removeHook !== undefined) {\n removeHook(ch, rm);\n }\n else {\n rm();\n }\n }\n else if (ch.children) {\n // Fragment node\n invokeDestroyHook(ch);\n removeVnodes(parentElm, ch.children, 0, ch.children.length - 1);\n }\n else {\n // Text node\n api.removeChild(parentElm, ch.elm);\n }\n }\n }\n }\n function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue) {\n let oldStartIdx = 0;\n let newStartIdx = 0;\n let oldEndIdx = oldCh.length - 1;\n let oldStartVnode = oldCh[0];\n let oldEndVnode = oldCh[oldEndIdx];\n let newEndIdx = newCh.length - 1;\n let newStartVnode = newCh[0];\n let newEndVnode = newCh[newEndIdx];\n let oldKeyToIdx;\n let idxInOld;\n let elmToMove;\n let before;\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (oldStartVnode == null) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode might have been moved left\n }\n else if (oldEndVnode == null) {\n oldEndVnode = oldCh[--oldEndIdx];\n }\n else if (newStartVnode == null) {\n newStartVnode = newCh[++newStartIdx];\n }\n else if (newEndVnode == null) {\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newEndVnode)) {\n // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldEndVnode, newStartVnode)) {\n // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n if (oldKeyToIdx === undefined) {\n oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n }\n idxInOld = oldKeyToIdx[newStartVnode.key];\n if (idxInOld === undefined) {\n // `newStartVnode` is new, create and insert it in beginning\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n newStartVnode = newCh[++newStartIdx];\n }\n else if (oldKeyToIdx[newEndVnode.key] === undefined) {\n // `newEndVnode` is new, create and insert it in the end\n api.insertBefore(parentElm, createElm(newEndVnode, insertedVnodeQueue), api.nextSibling(oldEndVnode.elm));\n newEndVnode = newCh[--newEndIdx];\n }\n else {\n // Neither of the new endpoints are new vnodes, so we make progress by\n // moving `newStartVnode` into position\n elmToMove = oldCh[idxInOld];\n if (elmToMove.sel !== newStartVnode.sel) {\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n }\n else {\n patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);\n oldCh[idxInOld] = undefined;\n api.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm);\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n }\n if (newStartIdx <= newEndIdx) {\n before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n }\n if (oldStartIdx <= oldEndIdx) {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n function patchVnode(oldVnode, vnode, insertedVnodeQueue) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const hook = (_a = vnode.data) === null || _a === void 0 ? void 0 : _a.hook;\n (_b = hook === null || hook === void 0 ? void 0 : hook.prepatch) === null || _b === void 0 ? void 0 : _b.call(hook, oldVnode, vnode);\n const elm = (vnode.elm = oldVnode.elm);\n if (oldVnode === vnode)\n return;\n if (vnode.data !== undefined ||\n (vnode.text !== undefined && vnode.text !== oldVnode.text)) {\n (_c = vnode.data) !== null && _c !== void 0 ? _c : (vnode.data = {});\n (_d = oldVnode.data) !== null && _d !== void 0 ? _d : (oldVnode.data = {});\n for (let i = 0; i < cbs.update.length; ++i)\n cbs.update[i](oldVnode, vnode);\n (_g = (_f = (_e = vnode.data) === null || _e === void 0 ? void 0 : _e.hook) === null || _f === void 0 ? void 0 : _f.update) === null || _g === void 0 ? void 0 : _g.call(_f, oldVnode, vnode);\n }\n const oldCh = oldVnode.children;\n const ch = vnode.children;\n if (vnode.text === undefined) {\n if (oldCh !== undefined && ch !== undefined) {\n if (oldCh !== ch)\n updateChildren(elm, oldCh, ch, insertedVnodeQueue);\n }\n else if (ch !== undefined) {\n if (oldVnode.text !== undefined)\n api.setTextContent(elm, \"\");\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n }\n else if (oldCh !== undefined) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n }\n else if (oldVnode.text !== undefined) {\n api.setTextContent(elm, \"\");\n }\n }\n else if (oldVnode.text !== vnode.text) {\n if (oldCh !== undefined) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n }\n api.setTextContent(elm, vnode.text);\n }\n (_h = hook === null || hook === void 0 ? void 0 : hook.postpatch) === null || _h === void 0 ? void 0 : _h.call(hook, oldVnode, vnode);\n }\n return function patch(oldVnode, vnode) {\n let i, elm, parent;\n const insertedVnodeQueue = [];\n for (i = 0; i < cbs.pre.length; ++i)\n cbs.pre[i]();\n if (isElement(api, oldVnode)) {\n oldVnode = emptyNodeAt(oldVnode);\n }\n else if (isDocumentFragment(api, oldVnode)) {\n oldVnode = emptyDocumentFragmentAt(oldVnode);\n }\n if (sameVnode(oldVnode, vnode)) {\n patchVnode(oldVnode, vnode, insertedVnodeQueue);\n }\n else {\n elm = oldVnode.elm;\n parent = api.parentNode(elm);\n createElm(vnode, insertedVnodeQueue);\n if (parent !== null) {\n api.insertBefore(parent, vnode.elm, api.nextSibling(elm));\n removeVnodes(parent, [oldVnode], 0, 0);\n }\n }\n for (i = 0; i < insertedVnodeQueue.length; ++i) {\n insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]);\n }\n for (i = 0; i < cbs.post.length; ++i)\n cbs.post[i]();\n return vnode;\n };\n}\n//# sourceMappingURL=init.js.map","import { addNS } from \"./h.js\";\nimport { vnode } from \"./vnode.js\";\nimport { htmlDomApi } from \"./htmldomapi.js\";\n/**\n * Transforms the given attribute name into a valid dataset property key\n * according to https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset#name_conversion\n *\n * @param attributeName data- attribute name, must start with data-\n */\nfunction datasetKey(attributeName) {\n return attributeName\n .slice(5)\n .replace(/-([a-z])/g, (_, ch) => ch.toUpperCase());\n}\nexport function toVNode(node, domApi) {\n var _a;\n const api = domApi !== undefined ? domApi : htmlDomApi;\n let text;\n if (api.isElement(node)) {\n const id = node.id ? \"#\" + node.id : \"\";\n const cn = (_a = node.getAttribute(\"class\")) === null || _a === void 0 ? void 0 : _a.match(/[^\\t\\r\\n\\f ]+/g);\n const c = cn ? \".\" + cn.join(\".\") : \"\";\n const sel = api.tagName(node).toLowerCase() + id + c;\n const attrs = {};\n const dataset = {};\n const data = {};\n const children = [];\n let name;\n let i, n;\n const elmAttrs = node.attributes;\n const elmChildren = node.childNodes;\n for (i = 0, n = elmAttrs.length; i < n; i++) {\n name = elmAttrs[i].nodeName;\n if (name.startsWith(\"data-\")) {\n dataset[datasetKey(name)] = elmAttrs[i].nodeValue || \"\";\n }\n else if (name !== \"id\" && name !== \"class\") {\n attrs[name] = elmAttrs[i].nodeValue;\n }\n }\n for (i = 0, n = elmChildren.length; i < n; i++) {\n children.push(toVNode(elmChildren[i], domApi));\n }\n if (Object.keys(attrs).length > 0)\n data.attrs = attrs;\n if (Object.keys(dataset).length > 0)\n data.dataset = dataset;\n if (sel.startsWith(\"svg\") &&\n (sel.length === 3 || sel[3] === \".\" || sel[3] === \"#\")) {\n addNS(data, children, sel);\n }\n return vnode(sel, data, children, undefined, node);\n }\n else if (api.isText(node)) {\n text = api.getTextContent(node);\n return vnode(undefined, undefined, undefined, text, node);\n }\n else if (api.isComment(node)) {\n text = api.getTextContent(node);\n return vnode(\"!\", {}, [], text, node);\n }\n else {\n return vnode(\"\", {}, [], undefined, node);\n }\n}\n//# sourceMappingURL=tovnode.js.map","function updateClass(oldVnode, vnode) {\n let cur;\n let name;\n const elm = vnode.elm;\n let oldClass = oldVnode.data.class;\n let klass = vnode.data.class;\n if (!oldClass && !klass)\n return;\n if (oldClass === klass)\n return;\n oldClass = oldClass || {};\n klass = klass || {};\n for (name in oldClass) {\n if (oldClass[name] && !Object.prototype.hasOwnProperty.call(klass, name)) {\n // was `true` and now not provided\n elm.classList.remove(name);\n }\n }\n for (name in klass) {\n cur = klass[name];\n if (cur !== oldClass[name]) {\n elm.classList[cur ? \"add\" : \"remove\"](name);\n }\n }\n}\nexport const classModule = { create: updateClass, update: updateClass };\n//# sourceMappingURL=class.js.map","function updateProps(oldVnode, vnode) {\n let key;\n let cur;\n let old;\n const elm = vnode.elm;\n let oldProps = oldVnode.data.props;\n let props = vnode.data.props;\n if (!oldProps && !props)\n return;\n if (oldProps === props)\n return;\n oldProps = oldProps || {};\n props = props || {};\n for (key in props) {\n cur = props[key];\n old = oldProps[key];\n if (old !== cur && (key !== \"value\" || elm[key] !== cur)) {\n elm[key] = cur;\n }\n }\n}\nexport const propsModule = { create: updateProps, update: updateProps };\n//# sourceMappingURL=props.js.map","const xlinkNS = \"http://www.w3.org/1999/xlink\";\nconst xmlnsNS = \"http://www.w3.org/2000/xmlns/\";\nconst xmlNS = \"http://www.w3.org/XML/1998/namespace\";\nconst colonChar = 58;\nconst xChar = 120;\nconst mChar = 109;\nfunction updateAttrs(oldVnode, vnode) {\n let key;\n const elm = vnode.elm;\n let oldAttrs = oldVnode.data.attrs;\n let attrs = vnode.data.attrs;\n if (!oldAttrs && !attrs)\n return;\n if (oldAttrs === attrs)\n return;\n oldAttrs = oldAttrs || {};\n attrs = attrs || {};\n // update modified attributes, add new attributes\n for (key in attrs) {\n const cur = attrs[key];\n const old = oldAttrs[key];\n if (old !== cur) {\n if (cur === true) {\n elm.setAttribute(key, \"\");\n }\n else if (cur === false) {\n elm.removeAttribute(key);\n }\n else {\n if (key.charCodeAt(0) !== xChar) {\n elm.setAttribute(key, cur);\n }\n else if (key.charCodeAt(3) === colonChar) {\n // Assume xml namespace\n elm.setAttributeNS(xmlNS, key, cur);\n }\n else if (key.charCodeAt(5) === colonChar) {\n // Assume 'xmlns' or 'xlink' namespace\n key.charCodeAt(1) === mChar\n ? elm.setAttributeNS(xmlnsNS, key, cur)\n : elm.setAttributeNS(xlinkNS, key, cur);\n }\n else {\n elm.setAttribute(key, cur);\n }\n }\n }\n }\n // remove removed attributes\n // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value)\n // the other option is to remove all attributes with value == undefined\n for (key in oldAttrs) {\n if (!(key in attrs)) {\n elm.removeAttribute(key);\n }\n }\n}\nexport const attributesModule = {\n create: updateAttrs,\n update: updateAttrs\n};\n//# sourceMappingURL=attributes.js.map","const CAPS_REGEX = /[A-Z]/g;\nfunction updateDataset(oldVnode, vnode) {\n const elm = vnode.elm;\n let oldDataset = oldVnode.data.dataset;\n let dataset = vnode.data.dataset;\n let key;\n if (!oldDataset && !dataset)\n return;\n if (oldDataset === dataset)\n return;\n oldDataset = oldDataset || {};\n dataset = dataset || {};\n const d = elm.dataset;\n for (key in oldDataset) {\n if (!(key in dataset)) {\n if (d) {\n if (key in d) {\n delete d[key];\n }\n }\n else {\n elm.removeAttribute(\"data-\" + key.replace(CAPS_REGEX, \"-$&\").toLowerCase());\n }\n }\n }\n for (key in dataset) {\n if (oldDataset[key] !== dataset[key]) {\n if (d) {\n d[key] = dataset[key];\n }\n else {\n elm.setAttribute(\"data-\" + key.replace(CAPS_REGEX, \"-$&\").toLowerCase(), dataset[key]);\n }\n }\n }\n}\nexport const datasetModule = {\n create: updateDataset,\n update: updateDataset\n};\n//# sourceMappingURL=dataset.js.map","import {h, VNode, VNodeData} from './snabbdom';\n\nexport interface ThunkData extends VNodeData {\n fn(): VNode;\n args: Array<any>;\n}\n\nexport interface Thunk extends VNode {\n data: ThunkData;\n}\n\nfunction copyToThunk(vnode: VNode, thunkVNode: Thunk): void {\n thunkVNode.elm = vnode.elm;\n (vnode.data as ThunkData).fn = thunkVNode.data.fn;\n (vnode.data as ThunkData).args = thunkVNode.data.args;\n (vnode.data as any).isolate = (thunkVNode.data as any).isolate;\n thunkVNode.data = vnode.data as ThunkData;\n thunkVNode.children = vnode.children;\n thunkVNode.text = vnode.text;\n thunkVNode.elm = vnode.elm;\n}\n\nfunction init(thunkVNode: Thunk): void {\n const cur = thunkVNode.data as VNodeData;\n const vnode = (cur as any).fn.apply(undefined, (cur as any).args);\n copyToThunk(vnode, thunkVNode);\n}\n\nfunction prepatch(oldVnode: Thunk, thunkVNode: Thunk): void {\n const old = oldVnode.data as VNodeData,\n cur = thunkVNode.data as VNodeData;\n let i: number;\n const oldArgs = (old as any).args,\n args = (cur as any).args;\n if ((old as any).fn !== (cur as any).fn || oldArgs.length !== args.length) {\n copyToThunk((cur as any).fn.apply(undefined, args), thunkVNode);\n }\n for (i = 0; i < args.length; ++i) {\n if (oldArgs[i] !== args[i]) {\n copyToThunk((cur as any).fn.apply(undefined, args), thunkVNode);\n return;\n }\n }\n copyToThunk(oldVnode, thunkVNode);\n}\n\nexport function thunk(sel: string, fn: Function, args: Array<any>): Thunk;\nexport function thunk(\n sel: string,\n key: any,\n fn: Function,\n args: Array<any>\n): Thunk;\nexport function thunk(sel: string, key?: any, fn?: any, args?: any): VNode {\n if (args === undefined) {\n args = fn;\n fn = key;\n key = undefined;\n }\n return h(sel, {\n key: key,\n hook: {init: init as any, prepatch: prepatch as any},\n fn: fn,\n args: args,\n } as VNodeData);\n}\n\nexport default thunk;\n","import {Stream, Producer, Listener} from 'xstream';\n\nexport type Predicate = (ev: Event) => boolean;\nexport type Comparator = Record<string, unknown>;\nexport type PreventDefaultOpt = boolean | Predicate | Comparator;\n\nexport function fromEvent(\n element: Element | Document,\n eventName: string,\n useCapture = false,\n preventDefault: PreventDefaultOpt = false,\n passive = false\n): Stream<Event> {\n let next: ((e: Event) => void) | null = null;\n return Stream.create<Event>({\n start: function start(listener: Listener<Event>) {\n if (preventDefault) {\n next = function _next(event: Event) {\n preventDefaultConditional(event, preventDefault);\n listener.next(event);\n };\n } else {\n next = function _next(event: Event) {\n listener.next(event);\n };\n }\n element.addEventListener(eventName, next, {\n capture: useCapture,\n passive,\n });\n },\n stop: function stop() {\n element.removeEventListener(eventName, next as EventListener, useCapture);\n next = null;\n },\n } as Producer<Event>);\n}\n\nfunction matchObject(matcher: Record<string, unknown>, obj: Record<string, unknown>): boolean {\n const keys = Object.keys(matcher);\n const n = keys.length;\n for (let i = 0; i < n; i++) {\n const k = keys[i];\n if (typeof matcher[k] === 'object' && matcher[k] !== null && typeof obj[k] === 'object' && obj[k] !== null) {\n if (!matchObject(matcher[k] as Record<string, unknown>, obj[k] as Record<string, unknown>)) {\n return false;\n }\n } else if (matcher[k] !== obj[k]) {\n return false;\n }\n }\n return true;\n}\n\nexport function preventDefaultConditional(\n event: Event,\n preventDefault: PreventDefaultOpt\n): void {\n if (preventDefault) {\n if (typeof preventDefault === 'boolean') {\n event.preventDefault();\n } else if (isPredicate(preventDefault)) {\n if (preventDefault(event)) {\n event.preventDefault();\n }\n } else if (typeof preventDefault === 'object') {\n if (matchObject(preventDefault as Record<string, unknown>, event as unknown as Record<string, unknown>)) {\n event.preventDefault();\n }\n } else {\n throw new Error(\n 'preventDefault has to be either a boolean, predicate function or object'\n );\n }\n }\n}\n\nfunction isPredicate(fn: PreventDefaultOpt): fn is Predicate {\n return typeof fn === 'function';\n}\n","import {Stream} from 'xstream';\n\nexport interface EnrichedEventStream<T = Event> extends Stream<T> {\n value(): EnrichedEventStream<string>;\n value<R>(fn: (val: string) => R): EnrichedEventStream<R>;\n\n checked(): EnrichedEventStream<boolean>;\n checked<R>(fn: (val: boolean) => R): EnrichedEventStream<R>;\n\n data(name: string): EnrichedEventStream<string | undefined>;\n data<R>(name: string, fn: (val: string | undefined) => R): EnrichedEventStream<R>;\n\n target(): EnrichedEventStream<EventTarget | null>;\n target<R>(fn: (el: EventTarget | null) => R): EnrichedEventStream<R>;\n\n key(): EnrichedEventStream<string>;\n key<R>(fn: (key: string) => R): EnrichedEventStream<R>;\n}\n\n/**\n * Adds chainable convenience methods to a DOM event stream.\n *\n * DOM.select('.input').events('input').value()\n * DOM.input('.input').value()\n * DOM.select('.item').events('click').data('id')\n * DOM.click('.item').data('id', Number)\n * DOM.change('.checkbox').checked()\n * DOM.keydown('.field').key()\n */\nexport function enrichEventStream(stream$: any): any {\n // .value(fn?) — extract e.target.value\n stream$.value = function value(fn?: (val: any) => any): any {\n const mapped = stream$.map((e: any) => {\n const val = e?.target?.value\n return fn ? fn(val) : val\n });\n return enrichEventStream(mapped);\n }\n\n // .checked(fn?) — extract e.target.checked\n stream$.checked = function checked(fn?: (val: any) => any): any {\n const mapped = stream$.map((e: any) => {\n const val = !!e?.target?.checked\n return fn ? fn(val) : val\n });\n return enrichEventStream(mapped);\n }\n\n // .data(name, fn?) — extract dataset[name] from e.target or its nearest ancestor that has\n // it. dataset keys are camelCase but attributes are kebab-case (`taskId` is\n // `data-task-id`), so the closest() selector converts (B-028). The name may be given\n // either way: `.data('taskId')` and `.data('task-id')` read the same attribute (3E/R3).\n stream$.data = function data(name: string, fn?: (val: any) => any): any {\n const key = String(name).replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n const attr = `[data-${key.replace(/[A-Z]/g, c => '-' + c.toLowerCase())}]`\n const mapped = stream$.map((e: any) => {\n const t = e?.target\n const el = typeof t?.closest == 'function' ? t.closest(attr) || t : t\n const val = el?.dataset?.[key]\n return fn ? fn(val) : val\n });\n return enrichEventStream(mapped);\n }\n\n // .target(fn?) — extract e.target\n stream$.target = function target(fn?: (el: any) => any): any {\n const mapped = stream$.map((e: any) => {\n const el = e?.target\n return fn ? fn(el) : el\n });\n return enrichEventStream(mapped);\n }\n\n // .key(fn?) — extract e.key (keyboard events)\n stream$.key = function key(fn?: (val: any) => any): any {\n const mapped = stream$.map((e: any) => {\n const val = e?.key\n return fn ? fn(val) : val\n });\n return enrichEventStream(mapped);\n }\n\n return stream$\n}\n","import xs, {Stream, MemoryStream} from 'xstream';\nimport {adapt} from '../run/adapt';\nimport {DevToolEnabledSource} from '../run/types';\nimport {EventsFnOptions} from './DOMSource';\nimport {fromEvent} from './fromEvent';\nimport {enrichEventStream, EnrichedEventStream} from './enrichEventStream';\n\nexport class DocumentDOMSource {\n private _selector: string | null;\n\n constructor(private _name: string, selector?: string) {\n this._selector = selector || null;\n }\n\n public select(selector: string): DocumentDOMSource {\n return new DocumentDOMSource(this._name, selector);\n }\n\n public elements(): MemoryStream<Array<Document | Element>> {\n if (this._selector) {\n const out: DevToolEnabledSource & MemoryStream<Array<Element>> = adapt(\n xs.of(Array.from(document.querySelectorAll(this._selector)))\n );\n out._isCycleSource = this._name;\n return out;\n }\n const out: DevToolEnabledSource & MemoryStream<Array<Document>> = adapt(\n xs.of([document])\n );\n out._isCycleSource = this._name;\n return out;\n }\n\n public element(): MemoryStream<Document | Element | null> {\n if (this._selector) {\n const out: DevToolEnabledSource & MemoryStream<Element | null> = adapt(\n xs.of(document.querySelector(this._selector))\n );\n out._isCycleSource = this._name;\n return out;\n }\n const out: DevToolEnabledSource & MemoryStream<Document> = adapt(\n xs.of(document)\n );\n out._isCycleSource = this._name;\n return out;\n }\n\n public events<K extends keyof DocumentEventMap>(\n eventType: K,\n options?: EventsFnOptions,\n bubbles?: boolean\n ): EnrichedEventStream<DocumentEventMap[K]>;\n public events(\n eventType: string,\n options: EventsFnOptions = {},\n bubbles?: boolean\n ): EnrichedEventStream<Event> {\n let stream: Stream<Event>;\n\n stream = fromEvent(\n document,\n eventType,\n options.useCapture,\n options.preventDefault\n );\n\n if (this._selector) {\n const selector = this._selector;\n stream = stream.filter((ev: Event) => {\n const target = ev.target;\n if (!(target instanceof Element)) return false;\n return target.matches(selector) || target.closest(selector) !== null;\n });\n }\n\n const out: DevToolEnabledSource & EnrichedEventStream<Event> = enrichEventStream(adapt(stream));\n out._isCycleSource = this._name;\n return out as EnrichedEventStream<Event>;\n }\n}\n","import xs, {Stream, MemoryStream} from 'xstream';\nimport {adapt} from '../run/adapt';\nimport {DevToolEnabledSource} from '../run/types';\nimport {EventsFnOptions} from './DOMSource';\nimport {fromEvent} from './fromEvent';\n\nexport class BodyDOMSource {\n constructor(private _name: string) {}\n\n public select(selector: string): BodyDOMSource {\n return this;\n }\n\n public elements(): MemoryStream<Array<HTMLBodyElement>> {\n const out: DevToolEnabledSource &\n MemoryStream<Array<HTMLBodyElement>> = adapt(xs.of([document.body]));\n out._isCycleSource = this._name;\n return out;\n }\n\n public element(): MemoryStream<HTMLBodyElement> {\n const out: DevToolEnabledSource & MemoryStream<HTMLBodyElement> = adapt(\n xs.of(document.body)\n );\n out._isCycleSource = this._name;\n return out;\n }\n\n public events<K extends keyof HTMLBodyElementEventMap>(\n eventType: K,\n options?: EventsFnOptions,\n bubbles?: boolean\n ): Stream<HTMLBodyElementEventMap[K]>;\n public events(\n eventType: string,\n options: EventsFnOptions = {},\n bubbles?: boolean\n ): Stream<Event> {\n let stream: Stream<Event>;\n\n stream = fromEvent(\n document.body,\n eventType,\n options.useCapture,\n options.preventDefault\n );\n\n const out: DevToolEnabledSource & Stream<Event> = adapt(stream);\n out._isCycleSource = this._name;\n return out;\n }\n}\n","import {Scope} from './isolate';\n\nfunction isValidNode(obj: any): obj is Element {\n const ELEM_TYPE = 1;\n const FRAG_TYPE = 11;\n return typeof HTMLElement === 'object'\n ? obj instanceof HTMLElement || obj instanceof DocumentFragment\n : obj &&\n typeof obj === 'object' &&\n obj !== null &&\n (obj.nodeType === ELEM_TYPE || obj.nodeType === FRAG_TYPE) &&\n typeof obj.nodeName === 'string';\n}\n\nexport function isClassOrId(str: string): boolean {\n return str.length > 1 && (str[0] === '.' || str[0] === '#');\n}\n\nexport function isDocFrag(\n el: Element | DocumentFragment\n): el is DocumentFragment {\n return el.nodeType === 11;\n}\n\nexport function checkValidContainer(\n container: Element | DocumentFragment | string\n): void {\n if (typeof container !== 'string' && !isValidNode(container)) {\n throw new Error(\n 'Given container is not a DOM element neither a selector string.'\n );\n }\n}\n\nexport function getValidNode(\n selectors: Element | DocumentFragment | string\n): Element | DocumentFragment | null {\n const domElement =\n typeof selectors === 'string'\n ? document.querySelector(selectors)\n : selectors;\n\n if (typeof selectors === 'string' && domElement === null) {\n throw new Error(`Cannot render into unknown element \\`${selectors}\\``);\n }\n return domElement;\n}\n\nexport function getSelectors(namespace: Array<Scope>): string {\n let res = '';\n for (let i = namespace.length - 1; i >= 0; i--) {\n if (namespace[i].type !== 'selector') {\n break;\n }\n res = namespace[i].scope + ' ' + res;\n }\n return res.trim();\n}\n\nexport function isEqualNamespace(\n a: Array<Scope> | undefined,\n b: Array<Scope> | undefined\n): boolean {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i].type !== b[i].type || a[i].scope !== b[i].scope) {\n return false;\n }\n }\n return true;\n}\n\nexport function makeInsert(\n map: Map<string, Map<Element, any>>\n): (type: string, elm: Element, value: any) => void {\n return (type, elm, value) => {\n if (map.has(type)) {\n const innerMap = map.get(type)!;\n innerMap.set(elm, value);\n } else {\n const innerMap = new Map<Element, any>();\n innerMap.set(elm, value);\n map.set(type, innerMap);\n }\n };\n}\n","import {IsolateModule} from './IsolateModule';\nimport {Scope} from './isolate';\nimport {isEqualNamespace} from './utils';\n\nexport class ScopeChecker {\n public readonly _namespace: Array<Scope>;\n constructor(\n public readonly namespace: Array<Scope>,\n private isolateModule: IsolateModule\n ) {\n this._namespace = namespace.filter(n => n.type !== 'selector');\n }\n\n public isDirectlyInScope(leaf: Element): boolean {\n const namespace = this.isolateModule.getNamespace(leaf);\n if (!namespace) {\n return false;\n }\n\n if (\n this._namespace.length > namespace.length ||\n !isEqualNamespace(\n this._namespace,\n namespace.slice(0, this._namespace.length)\n )\n ) {\n return false;\n }\n for (let i = this._namespace.length; i < namespace.length; i++) {\n if (namespace[i].type === 'total') {\n return false;\n }\n }\n return true;\n }\n}\n","import {ScopeChecker} from './ScopeChecker';\nimport {getSelectors} from './utils';\nimport {Scope} from './isolate';\nimport {IsolateModule} from './IsolateModule';\n\nfunction toElArray(input: any): Array<Element> {\n return Array.prototype.slice.call(input) as Array<Element>;\n}\n\nexport class ElementFinder {\n constructor(\n public namespace: Array<Scope>,\n public isolateModule: IsolateModule\n ) {}\n\n public call(): Array<Element> {\n const namespace = this.namespace;\n const selector = getSelectors(namespace);\n\n const scopeChecker = new ScopeChecker(namespace, this.isolateModule);\n const topNode = this.isolateModule.getElement(\n namespace.filter(n => n.type !== 'selector')\n );\n\n if (topNode === undefined) {\n return [];\n }\n\n if (selector === '') {\n return [topNode];\n }\n\n return toElArray(topNode.querySelectorAll(selector))\n .filter(scopeChecker.isDirectlyInScope, scopeChecker)\n .concat(topNode.matches(selector) ? [topNode] : []);\n }\n}\n","import {Stream} from 'xstream';\nimport {VNode} from './snabbdom';\nimport {isClassOrId} from './utils';\n\nexport interface Scope {\n type: 'sibling' | 'total' | 'selector';\n scope: string;\n}\n\nexport type IsolateSink<T extends VNode> = (\n s: Stream<T>,\n scope: string\n) => Stream<T>;\n\nexport function makeIsolateSink<T extends VNode>(\n namespace: Array<Scope>\n): IsolateSink<T> {\n return (sink, scope) => {\n if (scope === ':root') {\n return sink;\n }\n\n return sink.map(node => {\n if (!node) {\n return node;\n }\n const scopeObj = getScopeObj(scope);\n const newNode = {\n ...(node as any),\n data: {\n ...node.data,\n isolate:\n !node.data || !Array.isArray((node.data as any).isolate)\n ? namespace.concat([scopeObj])\n : (node.data as any).isolate,\n },\n };\n return {\n ...newNode,\n key:\n newNode.key !== undefined\n ? newNode.key\n : JSON.stringify(newNode.data.isolate),\n } as T;\n });\n };\n}\n\nexport function getScopeObj(scope: string): Scope {\n return {\n type: isClassOrId(scope) ? 'sibling' : 'total',\n scope,\n };\n}\n","/**\n * Sygnal diagnostic code registry.\n *\n * Every diagnostic Sygnal reports has a stable code (`SYG123`), a default\n * severity, a short title, and a docs anchor (`docsSlug`) on\n * https://sygnal.js.org/reference/errors (base URL = the `site` field of\n * docs/astro.config.mjs).\n *\n * The registry is stored as two parallel tables so the published bundle only\n * carries what the runtime needs:\n * - CODE_SEVERITY: code → default severity (used by report(); in the bundle)\n * - CODE_TITLES: code → title (docs/inspect/static-checker metadata; pure\n * object literal, tree-shaken unless something imports it)\n * getCodeInfo(code) / listCodes() assemble the full\n * { code, severity, title, docsSlug } records. To add a code, add it to BOTH\n * tables below (inside your reserved range), or call registerCodes() from a\n * workstream's own module. docsSlug is always the lower-cased code\n * ('SYG101' → https://sygnal.js.org/reference/errors#syg101).\n *\n * (Comments are attached to type-only declarations so the TypeScript emit\n * drops them — keeps them out of the published bundle and the size gate.)\n *\n * Severity:\n * - 'error' — throws (or is rethrown, enriched) at the call site\n * - 'warn' — console + collected (when diagnostics mode is 'warn')\n * - 'info' — collected only; surfaced through inspect / test helpers\n *\n * Ranges (see dev-plans/PLAN-1.md §2):\n * SYG1xx Wiring: intent <-> model <-> view <-> events\n * SYG2xx State & reducers\n * SYG3xx Streams & intent construction (incl. xstream hints)\n * SYG4xx Collections, Switchable, sub-components, context\n * SYG5xx Strict mode / canonical-form violations\n * SYG6xx Drivers & run configuration\n * SYG9xx Internal invariants\n *\n * ---------------------------------------------------------------------------\n * RESERVED RANGES (PLAN-1 workstream allocation — add entries only inside the\n * range your workstream owns; changes outside go through the coordinator):\n *\n * 0B (diagnostics core) SYG900 (check-failure invariant)\n * 1A (runtime checks) SYG101-105, SYG110, SYG201, SYG202, SYG301,\n * SYG401 (pre-seeded below), plus SYG106-199\n * and SYG302-399 for new checks\n * 1E (message retrofit) SYG206-299, SYG402-499, SYG601-699, SYG901-999\n * 2A (strict mode) SYG500-599\n * unallocated SYG100, SYG200, SYG203-205, SYG300, SYG400,\n * SYG600 (coordinator assigns on request)\n * ---------------------------------------------------------------------------\n */\nexport type DiagnosticSeverity = 'error' | 'warn' | 'info'\n\nexport interface DiagnosticCodeInfo {\n code: string\n severity: DiagnosticSeverity\n title: string\n // anchor on the errors reference page, e.g. 'syg101' → /reference/errors#syg101\n docsSlug: string\n}\n\nexport const DOCS_BASE_URL = 'https://sygnal.js.org'\n\nexport const CODE_SEVERITY: Record<string, DiagnosticSeverity> = {\n SYG101: 'warn',\n SYG102: 'info',\n SYG103: 'info',\n SYG104: 'warn',\n SYG105: 'info',\n SYG106: 'warn',\n SYG110: 'warn',\n SYG111: 'warn',\n SYG201: 'warn',\n SYG202: 'warn',\n SYG301: 'error',\n SYG401: 'warn',\n SYG900: 'warn',\n // ---- 1E retrofit codes (SYG206-299, 402-499, 601-699, 901-999) ----\n SYG206: 'error',\n SYG207: 'warn',\n SYG208: 'warn',\n SYG209: 'error',\n SYG210: 'warn',\n SYG211: 'error',\n SYG212: 'error',\n SYG213: 'warn',\n SYG214: 'error',\n SYG215: 'error',\n SYG216: 'error',\n SYG217: 'warn',\n SYG218: 'error',\n SYG219: 'warn',\n SYG220: 'warn',\n SYG402: 'error',\n SYG403: 'error',\n SYG404: 'error',\n SYG405: 'warn',\n SYG406: 'error',\n SYG407: 'error',\n SYG408: 'error',\n SYG409: 'warn',\n SYG410: 'error',\n SYG411: 'error',\n SYG412: 'error',\n SYG413: 'error',\n SYG414: 'error',\n SYG415: 'error',\n SYG416: 'error',\n SYG417: 'warn',\n SYG418: 'error',\n SYG419: 'error',\n SYG420: 'error',\n SYG601: 'error',\n SYG602: 'error',\n SYG603: 'error',\n SYG604: 'error',\n SYG605: 'error',\n SYG606: 'error',\n SYG607: 'error',\n SYG901: 'error',\n SYG902: 'error',\n SYG903: 'error',\n // ---- end 1E retrofit codes ----\n}\n\nexport const CODE_TITLES: Record<string, string> = {\n // SYG1xx wiring (1A)\n SYG101: 'Intent action has no model entry',\n SYG102: 'Model entry is unreachable',\n SYG103: 'Intent selector matched no rendered element',\n SYG104: 'Intent selector crosses an isolation boundary',\n SYG105: 'EVENTS type selected but never emitted, or emitted but never selected',\n SYG106: 'Parent prop is overwritten by a reserved view argument',\n SYG110: 'Intent selector not present in the component view',\n SYG111: 'Controlled input has no input listener',\n // SYG2xx state & reducers (1A)\n SYG201: 'STATE reducer dropped keys from the previous state',\n SYG202: 'STATE reducer returned undefined',\n // SYG3xx streams & intent construction (1A)\n SYG301: 'RxJS operator used on an xstream stream',\n // SYG4xx collections / switchable / sub-components / context (1A)\n SYG401: \"Collection 'from' field is missing or not an array\",\n // SYG5xx strict mode / canonical forms (2A; dev-plans/PLAN-1-canonical-forms.md)\n SYG501: 'View uses positional arguments',\n SYG502: 'STATE reducer signals no change without ABORT',\n SYG503: 'Side effect in a STATE reducer that returns ABORT',\n SYG504: \"'ACTION | SINK' shorthand model key\",\n SYG505: 'Non-canonical EVENTS emit',\n SYG506: 'CHILD.select() with a string component name',\n SYG507: 'Prop drilled through more than 2 component levels',\n // SYG9xx internal (0B)\n SYG900: 'A diagnostics check threw',\n // ---- 1E retrofit codes (SYG206-299, 402-499, 601-699, 901-999) ----\n SYG206: 'Invalid calculated field definition',\n SYG207: 'Calculated field shadows an initialState key',\n SYG208: 'Calculated field depends on an unknown key',\n SYG209: 'Circular calculated field dependency',\n SYG210: 'INITIALIZE used with a sink other than STATE',\n SYG211: 'Invalid model shorthand entry',\n SYG212: 'Model entry is not a function or an object of sinks',\n SYG213: 'Duplicate model entry for the same action and sink',\n SYG214: 'EFFECT handler threw',\n SYG215: 'next() delay is not a number',\n SYG216: 'Reducer threw',\n SYG217: 'Driver-sink reducer returned undefined',\n SYG218: 'Reducer returned an unsupported type',\n SYG219: 'EFFECT handler returned a value',\n SYG220: 'Calculated field threw',\n SYG402: 'Context is not an object',\n SYG403: 'Invalid context entry',\n SYG404: 'Context stream errored',\n SYG405: 'Sub-component has initialState without isolatedState',\n SYG406: 'View threw',\n SYG407: 'onError handler threw',\n SYG408: 'Sub-component failed to instantiate',\n SYG409: 'Child tried to update a calculated field',\n SYG410: \"Invalid sub-component 'state' prop\",\n SYG411: \"Collection 'of' is missing or not a component\",\n SYG412: \"Invalid Collection 'from' prop\",\n SYG413: 'Unnamed component factory not found',\n SYG414: 'Component not found',\n SYG415: \"Switchable 'of' is missing or invalid\",\n SYG416: \"Switchable 'current' is missing or invalid\",\n SYG417: 'Portal target not found',\n SYG418: 'Invalid Collection sort prop',\n SYG419: \"Invalid switchable() 'name$' parameter\",\n SYG420: 'JSX tag is undefined',\n SYG601: 'Missing or invalid sources',\n SYG602: 'Intent is not a function',\n SYG603: 'Intent returned an invalid value',\n SYG604: 'Invalid hmrActions',\n SYG605: \"Intent action name contains '|'\",\n SYG606: 'calculated is not an object',\n SYG607: 'State source not found',\n SYG901: 'Sub-component sink stream errored',\n SYG902: 'EFFECT stream errored',\n SYG903: 'Component factory returned invalid sinks',\n // ---- end 1E retrofit codes ----\n}\n\n// 2A: strict-mode (SYG5xx) default severities. Kept OUT of CODE_SEVERITY so the\n// main bundle doesn't carry them (D29: zero bytes); the 'sygnal/diagnostics'\n// entry registers them (registerCodes) and its reports pass the severity\n// explicitly. sygnal-check keeps the same table in sygnal-check/src/codes.js.\nexport const STRICT_CODE_SEVERITY: Record<string, DiagnosticSeverity> = {\n SYG501: 'warn',\n SYG502: 'warn',\n SYG503: 'warn',\n SYG504: 'warn',\n SYG505: 'warn',\n SYG506: 'warn',\n SYG507: 'info',\n}\n\nexport function getCodeInfo(code: string): DiagnosticCodeInfo | undefined {\n const severity = CODE_SEVERITY[code]\n return severity && { code, severity, title: CODE_TITLES[code] || '', docsSlug: code.toLowerCase() }\n}\n\nexport function listCodes(): DiagnosticCodeInfo[] {\n return Object.keys(CODE_SEVERITY).map(c => getCodeInfo(c)!)\n}\n\nexport function registerCodes(entries: Array<[string, DiagnosticSeverity, string]>): void {\n for (const [code, severity, title] of entries) {\n CODE_SEVERITY[code] = severity\n CODE_TITLES[code] = title\n }\n}\n\nexport function docsUrlFor(code: string): string {\n return `${DOCS_BASE_URL}/reference/errors#${code.toLowerCase()}`\n}\n","/**\n * Sygnal diagnostics core.\n *\n * ===========================================================================\n * FROZEN INTERFACE (PLAN-1 workstream 0B). Changes after the 0B merge go\n * through the coordinator. Later workstreams add checks (registerCheck) and\n * codes (./codes.ts, inside their reserved range) — they do not change these\n * signatures.\n * ===========================================================================\n *\n * --- Reporting ------------------------------------------------------------\n *\n * report(code: string, details: {\n * component?: string | { name?: string } // component name or instance\n * message: string // what is wrong\n * fix?: string // how to fix it\n * data?: any // structured payload\n * severity?: 'error' | 'warn' | 'info' // override the code's default\n * }): Diagnostic | undefined\n *\n * - mode 'off' → no-op, returns undefined (nothing collected/printed)\n * - code in ignore list → no-op, returns undefined\n * - mode 'collect' → collected, no console output\n * - mode 'warn' → collected; 'warn' → console.warn, 'error' → console.error,\n * 'info' → collected only\n * - mode 'error' → collected; 'warn'/'error' severities throw a\n * DiagnosticError (err.diagnostic holds the Diagnostic);\n * 'info' collected only. Called directly this throws\n * synchronously; raised during a hook (i.e. from a\n * check) it is rethrown asynchronously — see Hooks.\n *\n * `diagnostic.text` is formatted lazily (getter) on first read.\n *\n * formatDiagnostic(code, details): string\n * → `[Sygnal SYG123] <Component>: <message>. <fix> <docsUrl>`\n * (works in every mode; for call sites that must keep printing in 'off')\n *\n * getDiagnostics(): Diagnostic[] // copy of the collected list\n * clearDiagnostics(): void\n * onDiagnostic(cb: (d: Diagnostic) => void): () => void // returns unsubscribe\n *\n * --- Configuration --------------------------------------------------------\n *\n * configureDiagnostics({ mode?: DiagnosticsMode | undefined, ignore?: string[] }): void\n * getDiagnosticsMode(): 'off' | 'collect' | 'warn' | 'error'\n * isDiagnosticsEnabled(): boolean\n *\n * Mode resolution — first defined wins:\n * 1. explicit mode: run(App, drivers, { diagnostics }) or configureDiagnostics({ mode })\n * 2. globalThis.__SYGNAL_DEV__ (=== true → 'warn'; injected by the Vite plugin in serve)\n * 3. 'off'\n * The mode is resolved at module load, on every run() call and on every\n * configureDiagnostics() call. `configureDiagnostics({ mode: undefined })`\n * clears the explicit mode and falls back to steps 2-3.\n * Every run() call is authoritative: it sets both the explicit mode and the\n * ignore list from its `diagnostics` option, and run() WITHOUT the option\n * resets them to the defaults (no explicit mode, empty ignore list), so a\n * setting from an earlier run()/configureDiagnostics() does not leak in.\n *\n * --- Checks ---------------------------------------------------------------\n *\n * registerCheck(check: DiagnosticCheck): () => void // returns unregister\n *\n * interface DiagnosticCheck {\n * id: string\n * onIntent?(component, actionNames: string[], selectorsUsed: string[] | undefined): void\n * onModel?(component, modelMap: Record<string, string[]>): void\n * onRender?(component, rootVnode: any): void\n * onReducer?(component, action: string, prevState: any, nextState: any, sinkName: string): void\n * onDispose?(component): void\n * }\n *\n * A check that throws (other than a DiagnosticError from 'error' mode) is\n * isolated: the exception is reported as SYG900 and other checks still run.\n *\n * --- Hooks (called from src/component.ts, marked `// [diagnostics hook]`) ----\n *\n * onIntent(component, actionNames, selectorsUsed?)\n * after intent is built. actionNames = keys of the intent object ([] for a\n * single-stream intent). selectorsUsed is currently always undefined —\n * TODO(1A): collect via MainDOMSource.select instrumentation in src/cycle/dom.\n * onModel(component, modelMap)\n * after the model is normalized; modelMap = action → sink names, shorthand\n * ('A | SINK') expanded, plain functions mapped to the state sink,\n * includes built-ins such as INITIALIZE.\n * onRender(component, rootVnode)\n * after each render of the component (fully injected vnode, before the DOM\n * driver patches it; `rootVnode.elm` is populated after the patch, so DOM\n * checks should defer, e.g. with a microtask/timeout).\n * onReducer(component, action, prevState, nextState, sinkName)\n * after each STATE reducer returns (not for ABORT, not when the reducer\n * throws). nextState is the raw reducer return value (before calculated\n * field cleanup). Currently only fired for the state sink; sinkName is the\n * component's state source name.\n * onDispose(component)\n * at the start of component disposal.\n *\n * onSelector(domSource, selector) (additive, 1A)\n * from MainDOMSource.select() in src/cycle/dom, for every CSS selector\n * (not 'document' / 'body' / ':root'). domSource is the source select()\n * was called on (its `.namespace` holds the isolation scopes and any\n * earlier selectors; `._isolateModule` the DOM driver's isolate module).\n * onBusEmit(type, emitterName?) (additive, 1A)\n * from the EVENTS driver (src/extra/eventDriver.ts) for every bus event.\n * onBusSelect(type) (additive, 1A)\n * from EVENTS.select(type); type is the raw argument (string, string[]\n * or undefined for \"all events\").\n *\n * Checks live in the separate 'sygnal/diagnostics' entry\n * (src/extra/diagnostics/checks). That bundle reaches THIS module instance\n * through globalThis.__SYGNAL_DIAGNOSTICS__ = { registerCheck, report }\n * (set below), so it never carries a second copy of the core state.\n *\n * onIntent and onModel are each called exactly once per component instance,\n * in that order, during construction (also when the component has no\n * intent → actionNames [], or no model → modelMap {}).\n *\n * `component` is the internal Component instance (stable identity per\n * instance; `.name` is the component name).\n *\n * Every hook starts with a single boolean check and returns immediately\n * when the mode is 'off'.\n *\n * Hooks NEVER throw synchronously into Sygnal's stream pipeline (a throw\n * there would kill the state/view stream for good). Every exception from a\n * check is caught. In 'error' mode a DiagnosticError raised during a hook —\n * by a check's report() call, or by the SYG900 report for a check that\n * threw a plain Error — is rethrown ASYNCHRONOUSLY (queueMicrotask, falling\n * back to setTimeout), so test runners still see an uncaught error while\n * the app's streams keep running. The remaining checks still run.\n * `_setAsyncThrow(fn?)` replaces the async rethrow (test seam; no argument\n * restores the default; `_resetDiagnostics()` also restores it).\n *\n * (This comment is attached to the type-only import below so the TypeScript\n * emit drops it — keeps it out of the published bundle and the size gate.)\n */\nimport type { DiagnosticSeverity } from './codes'\nimport { CODE_SEVERITY, docsUrlFor } from './codes'\n\n\nexport type DiagnosticsMode = 'off' | 'collect' | 'warn' | 'error'\n\nexport interface DiagnosticDetails {\n component?: string | { name?: string }\n message: string\n fix?: string\n data?: any\n severity?: DiagnosticSeverity\n}\n\nexport interface Diagnostic {\n code: string\n severity: DiagnosticSeverity\n component?: string\n message: string\n fix?: string\n data?: any\n docsUrl: string\n text: string\n timestamp: number\n}\n\nexport interface DiagnosticsOptions {\n mode?: DiagnosticsMode\n ignore?: string[]\n}\n\nexport interface DiagnosticCheck {\n id: string\n onIntent?: (component: any, actionNames: string[], selectorsUsed: string[] | undefined) => void\n onModel?: (component: any, modelMap: Record<string, string[]>) => void\n onRender?: (component: any, rootVnode: any) => void\n onReducer?: (component: any, action: string, prevState: any, nextState: any, sinkName: string) => void\n onDispose?: (component: any) => void\n onSelector?: (domSource: any, selector: string) => void\n onBusEmit?: (type: string, emitterName?: string) => void\n onBusSelect?: (type: string | string[] | undefined) => void\n}\n\nexport class DiagnosticError extends Error {\n diagnostic: Diagnostic\n constructor(diagnostic: Diagnostic) {\n super(diagnostic.text)\n this.diagnostic = diagnostic\n }\n}\n\nlet explicitMode: DiagnosticsMode | undefined\nlet mode: DiagnosticsMode = 'off'\nlet enabled = false\nlet ignored = new Set<string>()\nlet collected: Diagnostic[] = []\nlet listeners: Array<(d: Diagnostic) => void> = []\nlet checks: DiagnosticCheck[] = []\n\nexport function resolveDiagnosticsMode(): DiagnosticsMode {\n mode = explicitMode || ((globalThis as any).__SYGNAL_DEV__ === true ? 'warn' : 'off')\n enabled = mode !== 'off'\n return mode\n}\n\nexport function configureDiagnostics(options: DiagnosticsOptions = {}): void {\n if ('mode' in options) explicitMode = options.mode\n if (options.ignore) ignored = new Set(options.ignore)\n resolveDiagnosticsMode()\n}\n\n/** Internal: the explicit configuration (not the resolved mode), so it can be restored exactly. */\nexport function _getDiagnosticsConfig(): { mode: DiagnosticsMode | undefined, ignore: string[] } {\n return { mode: explicitMode, ignore: [...ignored] }\n}\n\nexport function getDiagnosticsMode(): DiagnosticsMode {\n return mode\n}\n\nexport function isDiagnosticsEnabled(): boolean {\n return enabled\n}\n\nconst nameOf = (c: DiagnosticDetails['component']) => (c && typeof c === 'object' ? c.name : c) || undefined\nconst sentence = (s: string) => /[.!?]$/.test(s) ? s : s + '.'\n\nexport function formatDiagnostic(code: string, details: DiagnosticDetails): string {\n const name = nameOf(details.component)\n return `[Sygnal ${code}] ${name ? name + ': ' : ''}${sentence(details.message)}` +\n (details.fix ? ' ' + sentence(details.fix) : '') + ' ' + docsUrlFor(code)\n}\n\nexport function report(code: string, details: DiagnosticDetails): Diagnostic | undefined {\n if (!enabled || ignored.has(code)) return\n const severity = details.severity || CODE_SEVERITY[code] || 'warn'\n const d: Diagnostic = {\n code,\n severity,\n component: nameOf(details.component),\n message: details.message,\n fix: details.fix,\n data: details.data,\n docsUrl: docsUrlFor(code),\n get text() { return formatDiagnostic(code, this) },\n timestamp: Date.now(),\n }\n if (collected.push(d) > 500) collected.shift()\n listeners.forEach(cb => { try { cb(d) } catch (_) {} })\n if (severity !== 'info') {\n if (mode === 'error') throw new DiagnosticError(d)\n if (mode === 'warn') console[severity](d.text)\n }\n return d\n}\n\nexport function getDiagnostics(): Diagnostic[] {\n return collected.slice()\n}\n\nexport function clearDiagnostics(): void {\n collected = []\n}\n\nexport function onDiagnostic(cb: (d: Diagnostic) => void): () => void {\n listeners = [...listeners, cb]\n return () => { listeners = listeners.filter(l => l !== cb) }\n}\n\nexport function registerCheck(check: DiagnosticCheck): () => void {\n checks = [...checks, check]\n return () => { checks = checks.filter(c => c !== check) }\n}\n\ntype HookName = Exclude<keyof DiagnosticCheck, 'id'>\n\nconst defaultAsyncThrow = (err: any): void => {\n const raise = () => { throw err }\n typeof queueMicrotask === 'function' ? queueMicrotask(raise) : setTimeout(raise)\n}\nlet asyncThrow = defaultAsyncThrow\n\n/** Test seam: replace the async rethrow used for 'error'-mode diagnostics raised in hooks. */\nexport function _setAsyncThrow(fn?: (err: any) => void): void {\n asyncThrow = fn || defaultAsyncThrow\n}\n\nconst hook = (name: HookName) => (component: any, ...args: any[]): void => {\n if (!enabled) return\n for (const check of checks) {\n try {\n (check[name] as any)?.(component, ...args)\n } catch (err: any) {\n // Never throw into the stream pipeline: 'error'-mode diagnostics (also a\n // SYG900 escalated by 'error' mode) are rethrown asynchronously.\n try {\n if (err instanceof DiagnosticError) throw err\n report('SYG900', {\n component,\n message: `Diagnostics check '${check.id}' threw in ${name}: ${err?.message}`,\n data: { check: check.id, hook: name, error: err },\n })\n } catch (e) {\n asyncThrow(e)\n }\n }\n }\n}\n\nexport const onIntent: (component: any, actionNames: string[], selectorsUsed?: string[]) => void = hook('onIntent')\nexport const onModel: (component: any, modelMap: Record<string, string[]>) => void = hook('onModel')\nexport const onRender: (component: any, rootVnode: any) => void = hook('onRender')\nexport const onReducer: (component: any, action: string, prevState: any, nextState: any, sinkName: string) => void = hook('onReducer')\nexport const onDispose: (component: any) => void = hook('onDispose')\nexport const onSelector: (domSource: any, selector: string) => void = hook('onSelector')\nexport const onBusEmit: (type: string, emitterName?: string) => void = hook('onBusEmit')\nexport const onBusSelect: (type: string | string[] | undefined) => void = hook('onBusSelect')\n\n// Bridge for the separately bundled 'sygnal/diagnostics' checks entry.\n;(globalThis as any).__SYGNAL_DIAGNOSTICS__ = { registerCheck, report }\n\nexport function _resetDiagnostics(): void {\n explicitMode = undefined\n ignored = new Set()\n collected = []\n listeners = []\n checks = []\n asyncThrow = defaultAsyncThrow\n resolveDiagnosticsMode()\n}\n\nresolveDiagnosticsMode()\n","import xs from 'xstream';\nimport {Stream, MemoryStream} from 'xstream';\nimport {DevToolEnabledSource} from '../run/types';\nimport {adapt} from '../run/adapt';\nimport {DOMSource, EventsFnOptions} from './DOMSource';\nimport {DocumentDOMSource} from './DocumentDOMSource';\nimport {BodyDOMSource} from './BodyDOMSource';\nimport {VNode} from './snabbdom';\nimport {enrichEventStream, EnrichedEventStream} from './enrichEventStream';\nimport {ElementFinder} from './ElementFinder';\nimport {makeIsolateSink, getScopeObj, Scope, IsolateSink} from './isolate';\nimport {IsolateModule} from './IsolateModule';\nimport {EventDelegator} from './EventDelegator';\n// [diagnostics hook] no-op when diagnostics are off\nimport {onSelector} from '../../extra/diagnostics/index';\n\nexport interface SpecialSelector {\n body: BodyDOMSource;\n document: DocumentDOMSource;\n}\n\nexport class MainDOMSource {\n constructor(\n private _rootElement$: Stream<Element>,\n private _sanitation$: Stream<null>,\n private _namespace: Array<Scope> = [],\n public _isolateModule: IsolateModule,\n private _eventDelegator: EventDelegator,\n private _name: string\n ) {\n this.isolateSource = (source, scope) =>\n new MainDOMSource(\n source._rootElement$,\n source._sanitation$,\n source._namespace.concat(getScopeObj(scope)),\n source._isolateModule,\n source._eventDelegator,\n source._name\n );\n this.isolateSink = makeIsolateSink(this._namespace) as any;\n }\n\n private _elements(): Stream<Array<Element>> {\n if (this._namespace.length === 0) {\n return this._rootElement$.map(x => [x]);\n } else {\n const elementFinder = new ElementFinder(\n this._namespace,\n this._isolateModule\n );\n return this._rootElement$.map(() => elementFinder.call());\n }\n }\n\n public elements(): MemoryStream<Array<Element>> {\n const out: DevToolEnabledSource & MemoryStream<Array<Element>> = adapt(\n this._elements().remember()\n );\n out._isCycleSource = this._name;\n return out;\n }\n\n public element(): MemoryStream<Element> {\n const out: DevToolEnabledSource & MemoryStream<Element> = adapt(\n this._elements()\n .filter(arr => arr.length > 0)\n .map(arr => arr[0])\n .remember()\n );\n out._isCycleSource = this._name;\n return out;\n }\n\n get namespace(): Array<Scope> {\n return this._namespace;\n }\n\n public select<T extends keyof SpecialSelector>(\n selector: T\n ): SpecialSelector[T];\n public select(selector: string): MainDOMSource;\n public select(selector: string): DOMSource {\n if (typeof selector !== 'string') {\n throw new Error(\n `DOM driver's select() expects the argument to be a ` +\n `string as a CSS selector`\n );\n }\n if (selector === 'document') {\n return new DocumentDOMSource(this._name);\n }\n if (selector === 'body') {\n return new BodyDOMSource(this._name);\n }\n\n if (selector !== ':root') onSelector(this, selector.trim());\n\n const namespace =\n selector === ':root'\n ? []\n : this._namespace.concat({type: 'selector', scope: selector.trim()});\n\n return new MainDOMSource(\n this._rootElement$,\n this._sanitation$,\n namespace,\n this._isolateModule,\n this._eventDelegator,\n this._name\n ) as DOMSource;\n }\n\n public events<K extends keyof HTMLElementEventMap>(\n eventType: K,\n options?: EventsFnOptions,\n bubbles?: boolean\n ): EnrichedEventStream<HTMLElementEventMap[K]>;\n public events(\n eventType: string,\n options: EventsFnOptions = {},\n bubbles?: boolean\n ): EnrichedEventStream<Event> {\n if (typeof eventType !== `string`) {\n throw new Error(\n `DOM driver's events() expects argument to be a ` +\n `string representing the event type to listen for.`\n );\n }\n const event$: Stream<Event> = this._eventDelegator.addEventListener(\n eventType,\n this._namespace,\n options,\n bubbles\n );\n\n const out: DevToolEnabledSource & EnrichedEventStream<Event> = enrichEventStream(adapt(event$));\n out._isCycleSource = this._name;\n return out as EnrichedEventStream<Event>;\n }\n\n public dispose(): void {\n this._sanitation$.shamefullySendNext(null);\n }\n\n public isolateSource: (source: MainDOMSource, scope: string) => MainDOMSource;\n public isolateSink: IsolateSink<VNode>;\n}\n","import {h, VNode, vnode as vnodeFn} from './snabbdom';\nimport {isDocFrag} from './utils';\n\nfunction selectorParser(node: VNode) {\n if (!node.sel) {\n return { tagName: '', id: '', className: '' };\n }\n const sel = node.sel as string;\n const hashIdx = sel.indexOf('#');\n const dotIdx = sel.indexOf('.', hashIdx);\n const hash = hashIdx > 0 ? hashIdx : sel.length;\n const dot = dotIdx > 0 ? dotIdx : sel.length;\n const tagName = hashIdx !== -1 || dotIdx !== -1\n ? sel.slice(0, Math.min(hash, dot))\n : sel;\n const id = hash < dot ? sel.slice(hash + 1, dot) : void 0;\n const className = dotIdx > 0 ? sel.slice(dot + 1).replace(/\\./g, ' ') : void 0;\n return { tagName, id, className };\n}\n\nfunction classNameFromVNode(vNode: VNode): string {\n let { className: cn = '' } = selectorParser(vNode);\n if (!vNode.data) return cn;\n const { class: dataClass, props } = vNode.data;\n if (dataClass) {\n const c = Object.keys(dataClass).filter((cl: string) => dataClass[cl]);\n cn += ` ${c.join(` `)}`;\n }\n if (props && props.className) {\n cn += ` ${props.className}`;\n }\n return cn && cn.trim();\n}\n\nexport class VNodeWrapper {\n constructor(public rootElement: Element | DocumentFragment) {}\n\n public call(vnode: VNode | null): VNode {\n if (isDocFrag(this.rootElement)) {\n return this.wrapDocFrag(vnode === null ? [] : [vnode]);\n }\n if (vnode === null) {\n return this.wrap([]);\n }\n const {tagName: selTagName, id: selId} = selectorParser(vnode);\n const vNodeClassName = classNameFromVNode(vnode);\n const vNodeData = vnode.data || {};\n const vNodeDataProps = vNodeData.props || {};\n const {id: vNodeId = selId} = vNodeDataProps;\n\n const isVNodeAndRootElementIdentical =\n typeof vNodeId === 'string' &&\n vNodeId.toUpperCase() === this.rootElement.id.toUpperCase() &&\n selTagName.toUpperCase() === this.rootElement.tagName.toUpperCase() &&\n vNodeClassName.toUpperCase() === this.rootElement.className.toUpperCase();\n\n if (isVNodeAndRootElementIdentical) {\n return vnode;\n }\n\n return this.wrap([vnode]);\n }\n\n private wrapDocFrag(children: Array<VNode>) {\n return vnodeFn('', {isolate: []}, children, undefined, this\n .rootElement as any);\n }\n\n private wrap(children: Array<VNode>) {\n const {tagName, id, className} = this.rootElement as Element;\n const selId = id ? `#${id}` : '';\n const selClass = className ? `.${className.split(` `).join(`.`)}` : '';\n const vnode = h(\n `${tagName.toLowerCase()}${selId}${selClass}`,\n {},\n children\n );\n vnode.data = vnode.data || {};\n (vnode.data as any).isolate = (vnode.data as any).isolate || [];\n return vnode;\n }\n}\n","/**\n * Local copy of snabbdom's styleModule with a fixed `window` guard.\n *\n * snabbdom 3.6.3 introduced a regression where the top-level `raf` assignment\n * evaluates `window` directly (via `window === null || window === void 0`)\n * before the `typeof` check, causing a ReferenceError in Node.js environments.\n *\n * This copy restores the safe `typeof window !== \"undefined\"` guard while\n * keeping all other 3.6.x improvements (arrow functions, `in` operator for\n * style removal checks, etc.).\n */\n\nimport {Module} from './snabbdom';\n\ntype VNode = { elm?: any; data?: any };\n\n// Safe guard: `typeof window` never throws, even if `window` is undeclared.\nconst raf =\n (typeof window !== 'undefined' &&\n typeof window.requestAnimationFrame === 'function' &&\n window.requestAnimationFrame.bind(window)) ||\n setTimeout;\n\nconst nextFrame = (fn: () => void) => {\n raf(() => {\n raf(fn);\n });\n};\n\nlet reflowForced = false;\n\nfunction setNextFrame(obj: any, prop: string, val: string) {\n nextFrame(() => {\n obj[prop] = val;\n });\n}\n\nfunction updateStyle(oldVnode: VNode, vnode: VNode) {\n let cur: any;\n let name: string;\n const elm = vnode.elm as HTMLElement;\n let oldStyle = (oldVnode.data as any).style as Record<string, any> | undefined;\n let style = (vnode.data as any).style as Record<string, any> | undefined;\n if (!oldStyle && !style) return;\n if (oldStyle === style) return;\n oldStyle = oldStyle || {};\n style = style || {};\n const oldHasDel = 'delayed' in oldStyle;\n for (name in oldStyle) {\n if (!(name in style)) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.removeProperty(name);\n } else {\n (elm.style as any)[name] = '';\n }\n }\n }\n for (name in style) {\n cur = style[name];\n if (name === 'delayed' && style.delayed) {\n for (const name2 in style.delayed) {\n cur = style.delayed[name2];\n if (!oldHasDel || cur !== (oldStyle as any).delayed[name2]) {\n setNextFrame(elm.style, name2, cur);\n }\n }\n } else if (name !== 'remove' && cur !== (oldStyle as any)[name]) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.setProperty(name, cur);\n } else {\n (elm.style as any)[name] = cur;\n }\n }\n }\n}\n\nfunction applyDestroyStyle(vnode: VNode) {\n let style: Record<string, string>;\n let name: string;\n const elm = vnode.elm as HTMLElement;\n const s = (vnode.data as any).style;\n if (!s || !(style = s.destroy)) return;\n for (name in style) {\n (elm.style as any)[name] = style[name];\n }\n}\n\nfunction applyRemoveStyle(vnode: VNode, rm: () => void) {\n const s = (vnode.data as any).style;\n if (!s || !s.remove) {\n rm();\n return;\n }\n if (!reflowForced) {\n // Force reflow so transition styles apply immediately\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n (vnode.elm as HTMLElement).offsetLeft;\n reflowForced = true;\n }\n let name: string;\n const elm = vnode.elm as HTMLElement;\n let i = 0;\n const style = s.remove;\n let amount = 0;\n const applied: string[] = [];\n for (name in style) {\n applied.push(name);\n (elm.style as any)[name] = style[name];\n }\n const compStyle = getComputedStyle(elm);\n const props = (compStyle as any)['transition-property'].split(', ');\n for (; i < props.length; ++i) {\n if (applied.indexOf(props[i]) !== -1) amount++;\n }\n elm.addEventListener('transitionend', (ev: TransitionEvent) => {\n if (ev.target === elm) --amount;\n if (amount === 0) rm();\n });\n}\n\nfunction forceReflow() {\n reflowForced = false;\n}\n\nexport const styleModule: Module = {\n pre: forceReflow,\n create: updateStyle,\n update: updateStyle,\n destroy: applyDestroyStyle,\n remove: applyRemoveStyle,\n};\n","/**\n * Snabbdom module that fixes <select> value assignment.\n *\n * Problem: snabbdom's createElm() fires the propsModule create hook\n * (which sets elm.value) BEFORE appending child <option> elements.\n * The browser silently ignores the value assignment because no matching\n * option exists yet, so <select> always shows the first option.\n *\n * Fix: collect <select> elements that have a value prop during create,\n * then re-apply the value in the post hook (after all elements and\n * children have been inserted).\n */\n\nimport type {VNode} from 'snabbdom/build/vnode.js';\n\nlet pendingSelects: Array<{elm: HTMLSelectElement; value: any}> = [];\n\nfunction createSelect(_oldVnode: VNode, vnode: VNode): void {\n const elm = vnode.elm as Element;\n if (elm && elm.tagName === 'SELECT' && vnode.data?.props?.value !== undefined) {\n pendingSelects.push({elm: elm as HTMLSelectElement, value: vnode.data.props.value});\n }\n}\n\nfunction postPatch(): void {\n for (let i = 0; i < pendingSelects.length; i++) {\n const {elm, value} = pendingSelects[i];\n elm.value = value;\n }\n pendingSelects = [];\n}\n\nexport const selectModule = {create: createSelect, post: postPatch};\n","/**\n * Snabbdom module that keeps controlled form fields in sync with the vnode (B-004).\n *\n * Problem: snabbdom's propsModule only writes `value`/`checked` when the prop\n * differs from the previous vnode's prop. If the user types 'x' and an action\n * resets the state to '' within one render window, the 'x' render is\n * coalesced away: the vnodes go '' -> '' and the typed text stays in the DOM.\n *\n * Fix: after propsModule has run, compare `value`/`checked` props against the\n * live element and write them when they differ. Only form fields (INPUT,\n * TEXTAREA, SELECT; not input type=file) are controlled: `value` compares as a\n * string, `checked` as a boolean (1H-7). Other elements with a value prop\n * (<progress>, <meter>, custom elements with object values) are left alone.\n */\n\nimport type {VNode} from 'snabbdom/build/vnode.js';\n\nfunction syncControlled(oldVnode: VNode, vnode: VNode): void {\n const props = vnode.data?.props;\n const elm = vnode.elm as any;\n if (!props || !elm || !/^(INPUT|TEXTAREA|SELECT)$/.test(elm.tagName) || elm.type == 'file') return;\n const oldProps: any = oldVnode.data?.props || {};\n const {value, checked} = props;\n // Only the case propsModule skipped (prop unchanged); it handles real changes.\n if (value === oldProps.value && value != null && elm.value !== String(value)) {\n elm.value = String(value);\n }\n if (checked === oldProps.checked && checked != null && elm.checked !== !!checked) {\n elm.checked = !!checked;\n }\n}\n\nexport const controlledInputModule = {update: syncControlled};\n","/**\n * Snabbdom module that unsets a removed `className` prop (B-012).\n *\n * Problem: `className` goes through snabbdom's propsModule, which writes new\n * and changed props but never unsets a prop that disappears. So when snabbdom\n * reuses an element (`<p className=\"placeholder\">` -> `<p>`), the old class\n * stays. A nullish `className` is worse: propsModule writes the string\n * \"null\"/\"false\".\n *\n * Fix: runs after propsModule. When `className` is gone (or nullish/false),\n * drop the classes it had set, keeping the classes from the selector\n * (`p.foo`) and the truthy `class={{...}}` entries.\n */\n\nimport type {VNode} from 'snabbdom/build/vnode.js';\n\nfunction classObject(vnode: VNode): Array<string> {\n const out: Array<string> = [];\n const klass: any = vnode.data?.class;\n if (klass && typeof klass === 'object') {\n for (const name in klass) if (klass[name]) out.push(name);\n }\n return out;\n}\n\nfunction baseClasses(vnode: VNode): Array<string> {\n const sel = vnode.sel || '';\n const hashIdx = sel.indexOf('#');\n const dotIdx = sel.indexOf('.', hashIdx);\n const fromSel = dotIdx > 0 ? sel.slice(dotIdx + 1).split('.') : [];\n return fromSel.concat(classObject(vnode));\n}\n\nfunction addAll(elm: any, names: Array<string>): void {\n for (const name of names) if (name) elm.classList.add(name);\n}\n\nconst isSet = (cn: any) => cn != null && cn !== false;\nconst tokens = (cn: any) => (typeof cn === 'string' ? cn.split(/\\s+/).filter(Boolean) : []);\n\nfunction syncClassName(oldVnode: VNode, vnode: VNode): void {\n const elm = vnode.elm as any;\n if (!elm || !elm.classList) return;\n const props: any = vnode.data?.props;\n const oldProps: any = oldVnode.data?.props;\n const hasKey = !!props && 'className' in props;\n const cn = hasKey ? props.className : undefined;\n if (isSet(cn)) {\n // propsModule replaced the whole attribute: put the class={{...}} entries back\n if (!oldProps || oldProps.className !== cn) addAll(elm, classObject(vnode));\n return;\n }\n if (hasKey) {\n // propsModule wrote String(cn) over the whole attribute: rebuild it\n if (!oldProps || oldProps.className !== cn) {\n elm.className = baseClasses(vnode).join(' ');\n if (elm.className === '') elm.removeAttribute('class');\n }\n return;\n }\n const oldCn = oldProps ? oldProps.className : undefined;\n if (!isSet(oldCn)) return;\n const keep = baseClasses(vnode);\n for (const name of tokens(oldCn)) {\n if (keep.indexOf(name) === -1) elm.classList.remove(name);\n }\n addAll(elm, keep);\n if (elm.getAttribute('class') === '') elm.removeAttribute('class');\n}\n\nexport const classNameModule = {\n create: (emptyVnode: VNode, vnode: VNode) => syncClassName(emptyVnode, vnode),\n update: syncClassName,\n};\n","import {Module, classModule, propsModule, attributesModule, datasetModule} from './snabbdom';\nimport {styleModule} from './styleModule';\nimport {selectModule} from './selectModule';\nimport {controlledInputModule} from './controlledInputModule';\nimport {classNameModule} from './classNameModule';\n\nconst modules: Array<Module> = [\n styleModule,\n classModule,\n propsModule,\n classNameModule, // after propsModule (B-012)\n attributesModule,\n datasetModule,\n selectModule,\n controlledInputModule,\n];\n\nexport {styleModule, classModule, propsModule, attributesModule, datasetModule, selectModule, controlledInputModule, classNameModule};\n\nexport default modules;\n","type Node<Payload> = [Payload | undefined, InternalTree<Payload>];\n\ninterface InternalTree<Payload> {\n [name: string]: Node<Payload>;\n}\n\nexport default class SymbolTree<Payload, T> {\n private tree: Node<Payload> = [undefined, {}];\n\n constructor(private mapper: (t: T) => string) {}\n\n public set(path: Array<T>, element: Payload | undefined, max?: number): void {\n let curr = this.tree;\n const _max = max !== undefined ? max : path.length;\n for (let i = 0; i < _max; i++) {\n const n = this.mapper(path[i]);\n let child: Node<Payload> = curr[1][n];\n if (!child) {\n child = [undefined, {}];\n curr[1][n] = child;\n }\n curr = child;\n }\n curr[0] = element;\n }\n\n public getDefault(\n path: Array<T>,\n mkDefaultElement: () => Payload,\n max?: number\n ): Payload {\n return this.get(path, mkDefaultElement, max) as Payload;\n }\n\n public get(\n path: Array<T>,\n mkDefaultElement?: () => Payload,\n max?: number\n ): Payload | undefined {\n let curr = this.tree;\n const _max = max !== undefined ? max : path.length;\n for (let i = 0; i < _max; i++) {\n const n = this.mapper(path[i]);\n let child: Node<Payload> = curr[1][n];\n if (!child) {\n if (mkDefaultElement) {\n child = [undefined, {}];\n curr[1][n] = child;\n } else {\n return undefined;\n }\n }\n curr = child;\n }\n if (mkDefaultElement && !curr[0]) {\n curr[0] = mkDefaultElement();\n }\n return curr[0];\n }\n\n public delete(path: Array<T>): void {\n let curr = this.tree;\n for (let i = 0; i < path.length - 1; i++) {\n const child = curr[1][this.mapper(path[i])];\n if (!child) {\n return;\n }\n curr = child;\n }\n delete curr[1][this.mapper(path[path.length - 1])];\n }\n}\n","import {VNode} from './snabbdom';\nimport {EventDelegator} from './EventDelegator';\nimport {Scope} from './isolate';\nimport {isEqualNamespace} from './utils';\nimport SymbolTree from './SymbolTree';\n\nexport class IsolateModule {\n private namespaceTree = new SymbolTree<Element, Scope>(x => x.scope);\n private namespaceByElement: Map<Element, Array<Scope>>;\n private eventDelegator: EventDelegator | undefined;\n\n private vnodesBeingRemoved: Array<VNode>;\n\n constructor() {\n this.namespaceByElement = new Map<Element, Array<Scope>>();\n this.vnodesBeingRemoved = [];\n }\n\n public setEventDelegator(del: EventDelegator): void {\n this.eventDelegator = del;\n }\n\n private insertElement(namespace: Array<Scope>, el: Element): void {\n this.namespaceByElement.set(el, namespace);\n this.namespaceTree.set(namespace, el);\n }\n\n private removeElement(elm: Element): void {\n this.namespaceByElement.delete(elm);\n const namespace = this.getNamespace(elm);\n if (namespace) {\n this.namespaceTree.delete(namespace);\n }\n }\n\n public getElement(\n namespace: Array<Scope>,\n max?: number\n ): Element | undefined {\n return this.namespaceTree.get(namespace, undefined, max);\n }\n\n public getRootElement(elm: Element): Element | undefined {\n if (this.namespaceByElement.has(elm)) {\n return elm;\n }\n\n let curr = elm;\n while (!this.namespaceByElement.has(curr)) {\n curr = curr.parentNode as Element;\n if (!curr) {\n return undefined;\n } else if (curr.tagName === 'HTML') {\n throw new Error('No root element found, this should not happen at all');\n }\n }\n return curr;\n }\n\n public getNamespace(elm: Element): Array<Scope> | undefined {\n const rootElement = this.getRootElement(elm);\n if (!rootElement) {\n return undefined;\n }\n return this.namespaceByElement.get(rootElement) as Array<Scope>;\n }\n\n public createModule() {\n const self = this;\n return {\n create(emptyVNode: VNode, vNode: VNode) {\n const {elm, data = {}} = vNode;\n const namespace: Array<Scope> = (data as any).isolate;\n\n if (Array.isArray(namespace)) {\n self.insertElement(namespace, elm as Element);\n }\n },\n\n update(oldVNode: VNode, vNode: VNode) {\n const {elm: oldElm, data: oldData = {}} = oldVNode;\n const {elm, data = {}} = vNode;\n const oldNamespace: Array<Scope> = (oldData as any).isolate;\n const namespace: Array<Scope> = (data as any).isolate;\n\n if (!isEqualNamespace(oldNamespace, namespace)) {\n if (Array.isArray(oldNamespace)) {\n self.removeElement(oldElm as Element);\n }\n }\n if (Array.isArray(namespace)) {\n self.insertElement(namespace, elm as Element);\n }\n },\n\n destroy(vNode: VNode) {\n self.vnodesBeingRemoved.push(vNode);\n },\n\n remove(vNode: VNode, cb: Function) {\n self.vnodesBeingRemoved.push(vNode);\n cb();\n },\n\n post() {\n const vnodesBeingRemoved = self.vnodesBeingRemoved;\n for (let i = vnodesBeingRemoved.length - 1; i >= 0; i--) {\n const vnode = vnodesBeingRemoved[i];\n const namespace =\n vnode.data !== undefined\n ? (vnode.data as any).isolation\n : undefined;\n if (namespace !== undefined) {\n self.removeElement(namespace);\n }\n (self.eventDelegator as EventDelegator).removeElement(\n vnode.elm as Element,\n namespace\n );\n }\n self.vnodesBeingRemoved = [];\n },\n };\n }\n}\n","export default class PriorityQueue<T> {\n private arr: Array<T> = [];\n private prios: Array<number> = [];\n\n public add(t: T, prio: number): void {\n for (let i = 0; i < this.arr.length; i++) {\n if (this.prios[i] < prio) {\n this.arr.splice(i, 0, t);\n this.prios.splice(i, 0, prio);\n return;\n }\n }\n this.arr.push(t);\n this.prios.push(prio);\n }\n\n public forEach(f: (t: T, i: number, arr: Array<T>) => void): void {\n for (let i = 0; i < this.arr.length; i++) {\n f(this.arr[i], i, this.arr);\n }\n }\n\n public delete(t: T): void {\n for (let i = 0; i < this.arr.length; i++) {\n if (this.arr[i] === t) {\n this.arr.splice(i, 1);\n this.prios.splice(i, 1);\n return;\n }\n }\n }\n}\n","import xs, {Stream, Subscription} from 'xstream';\nimport {ScopeChecker} from './ScopeChecker';\nimport {IsolateModule} from './IsolateModule';\nimport {getSelectors, isEqualNamespace} from './utils';\nimport {ElementFinder} from './ElementFinder';\nimport {EventsFnOptions} from './DOMSource';\nimport {Scope} from './isolate';\nimport SymbolTree from './SymbolTree';\nimport PriorityQueue from './PriorityQueue';\nimport {\n fromEvent,\n preventDefaultConditional,\n PreventDefaultOpt,\n} from './fromEvent';\n\ndeclare var requestIdleCallback: any;\n\ninterface Destination {\n useCapture: boolean;\n bubbles: boolean;\n passive: boolean;\n scopeChecker: ScopeChecker;\n subject: Stream<Event>;\n preventDefault?: PreventDefaultOpt;\n}\n\nexport interface CycleDOMEvent extends Event {\n propagationHasBeenStopped: boolean;\n ownerTarget: Element;\n}\n\nexport const eventTypesThatDontBubble = [\n // Focus\n `blur`,\n `focus`,\n // Mouse\n `mouseenter`,\n `mouseleave`,\n // Pointer\n `pointerenter`,\n `pointerleave`,\n `gotpointercapture`,\n `lostpointercapture`,\n // Media\n `canplay`,\n `canplaythrough`,\n `durationchange`,\n `emptied`,\n `ended`,\n `loadeddata`,\n `loadedmetadata`,\n `pause`,\n `play`,\n `playing`,\n `ratechange`,\n `seeked`,\n `seeking`,\n `stalled`,\n `suspend`,\n `timeupdate`,\n `volumechange`,\n `waiting`,\n // Resource\n `load`,\n `unload`,\n // Form\n `invalid`,\n `reset`,\n `submit`,\n `formdata`,\n `toggle`,\n // Animation / Transition\n `animationstart`,\n `animationend`,\n `animationiteration`,\n `transitionrun`,\n `transitionstart`,\n `transitionend`,\n // Scroll\n `scroll`,\n `scrollend`,\n];\n\ninterface DOMListener {\n sub: Subscription;\n passive: boolean;\n}\n\ninterface NonBubblingListener {\n sub: Subscription | undefined;\n destination: Destination;\n}\n\ntype NonBubblingMeta = [Stream<Event>, string, ElementFinder, Destination]\n\nexport class EventDelegator {\n private virtualListeners = new SymbolTree<\n Map<string, PriorityQueue<Destination>>,\n Scope\n >(x => x.scope);\n private origin: Element | undefined;\n\n private domListeners: Map<string, DOMListener>;\n private nonBubblingListeners: Map<string, Map<Element, NonBubblingListener>>;\n private domListenersToAdd: Map<string, boolean>;\n private nonBubblingListenersToAdd = new Set<NonBubblingMeta>();\n\n private virtualNonBubblingListener: Array<Destination> = [];\n\n constructor(\n private rootElement$: Stream<Element>,\n public isolateModule: IsolateModule\n ) {\n this.isolateModule.setEventDelegator(this);\n this.domListeners = new Map<string, DOMListener>();\n this.domListenersToAdd = new Map<string, boolean>();\n this.nonBubblingListeners = new Map<\n string,\n Map<Element, NonBubblingListener>\n >();\n rootElement$.addListener({\n next: (el: Element) => {\n if (this.origin !== el) {\n this.origin = el;\n this.resetEventListeners();\n this.domListenersToAdd.forEach((passive, type) =>\n this.setupDOMListener(type, passive)\n );\n this.domListenersToAdd.clear();\n }\n\n this.nonBubblingListenersToAdd.forEach(arr => {\n this.setupNonBubblingListener(arr);\n });\n },\n });\n }\n\n public addEventListener(\n eventType: string,\n namespace: Array<Scope>,\n options: EventsFnOptions,\n bubbles?: boolean\n ): Stream<Event> {\n const subject = xs.never();\n let dest;\n\n const scopeChecker = new ScopeChecker(namespace, this.isolateModule);\n\n const shouldBubble =\n bubbles === undefined\n ? eventTypesThatDontBubble.indexOf(eventType) === -1\n : bubbles;\n\n if (shouldBubble) {\n if (!this.domListeners.has(eventType)) {\n this.setupDOMListener(eventType, !!options.passive);\n }\n\n dest = this.insertListener(subject, scopeChecker, eventType, options);\n return subject;\n } else {\n const setArray: Array<NonBubblingMeta> = [];\n this.nonBubblingListenersToAdd.forEach(v => setArray.push(v));\n let found = undefined, index = 0;\n const length = setArray.length;\n const tester = (x: NonBubblingMeta) => {\n const [_sub, et, ef, _] = x;\n return eventType === et && isEqualNamespace(ef.namespace, namespace);\n }\n\n while (!found && index < length) {\n const item = setArray[index]\n found = tester(item) ? item : found;\n index++;\n }\n\n let input: NonBubblingMeta = found as NonBubblingMeta;\n\n let nonBubbleSubject: Stream<Event>;\n if (!input) {\n const finder = new ElementFinder(namespace, this.isolateModule);\n dest = this.insertListener(subject, scopeChecker, eventType, options);\n input = [subject, eventType, finder, dest];\n nonBubbleSubject = subject;\n this.nonBubblingListenersToAdd.add(input);\n this.setupNonBubblingListener(input);\n } else {\n const [sub] = input;\n nonBubbleSubject = sub;\n }\n\n const self = this;\n\n let subscription: any = null;\n return xs.create({\n start: listener => {\n subscription = nonBubbleSubject.subscribe(listener);\n },\n stop: () => {\n const [_s, et, ef, _d] = input;\n const elements = ef.call();\n\n elements.forEach(function(element: any) {\n const subs = element.subs;\n if (subs && subs[et]) {\n subs[et].unsubscribe();\n delete subs[et];\n }\n });\n\n self.nonBubblingListenersToAdd.delete(input as any);\n\n subscription.unsubscribe();\n }\n });\n }\n }\n\n public removeElement(element: Element, namespace?: Array<Scope>): void {\n if (namespace !== undefined) {\n this.virtualListeners.delete(namespace);\n }\n const toRemove: Array<[string, Element]> = [];\n this.nonBubblingListeners.forEach((map, type) => {\n if (map.has(element)) {\n toRemove.push([type, element]);\n const subs = (element as any).subs;\n if (subs) {\n Object.keys(subs).forEach((key: any) => {\n subs[key].unsubscribe();\n });\n }\n }\n });\n for (let i = 0; i < toRemove.length; i++) {\n const map = this.nonBubblingListeners.get(toRemove[i][0]);\n if (!map) {\n continue;\n }\n map.delete(toRemove[i][1]);\n if (map.size === 0) {\n this.nonBubblingListeners.delete(toRemove[i][0]);\n } else {\n this.nonBubblingListeners.set(toRemove[i][0], map);\n }\n }\n }\n\n private insertListener(\n subject: Stream<Event>,\n scopeChecker: ScopeChecker,\n eventType: string,\n options: EventsFnOptions\n ): Destination {\n const relevantSets: Array<PriorityQueue<Destination>> = [];\n const n = scopeChecker._namespace;\n let max = n.length;\n\n do {\n relevantSets.push(this.getVirtualListeners(eventType, n, true, max));\n max--;\n } while (max >= 0 && n[max].type !== 'total');\n\n const destination = {\n ...options,\n scopeChecker,\n subject,\n bubbles: !!options.bubbles,\n useCapture: !!options.useCapture,\n passive: !!options.passive,\n };\n\n for (let i = 0; i < relevantSets.length; i++) {\n relevantSets[i].add(destination, n.length);\n }\n\n return destination;\n }\n\n private getVirtualListeners(\n eventType: string,\n namespace: Array<Scope>,\n exact = false,\n max?: number\n ): PriorityQueue<Destination> {\n let _max = max !== undefined ? max : namespace.length;\n if (!exact) {\n for (let i = _max - 1; i >= 0; i--) {\n if (namespace[i].type === 'total') {\n _max = i + 1;\n break;\n }\n _max = i;\n }\n }\n\n const map = this.virtualListeners.getDefault(\n namespace,\n () => new Map<string, PriorityQueue<Destination>>(),\n _max\n );\n\n if (!map.has(eventType)) {\n map.set(eventType, new PriorityQueue<Destination>());\n }\n return map.get(eventType) as PriorityQueue<Destination>;\n }\n\n private setupDOMListener(eventType: string, passive: boolean): void {\n if (this.origin) {\n const sub = fromEvent(\n this.origin,\n eventType,\n false,\n false,\n passive\n ).subscribe({\n next: (event: Event) => this.onEvent(eventType, event, passive),\n error: () => {},\n complete: () => {},\n });\n this.domListeners.set(eventType, {sub, passive});\n } else {\n this.domListenersToAdd.set(eventType, passive);\n }\n }\n\n private setupNonBubblingListener(\n input: NonBubblingMeta\n ): void {\n const [_, eventType, elementFinder, destination] = input;\n if (!this.origin) {\n return;\n }\n\n const elements = elementFinder.call();\n if (elements.length) {\n const self = this;\n elements.forEach((element: Element) => {\n const subs = (element as any).subs;\n if (!subs || !subs[eventType]) {\n const sub = fromEvent(\n element,\n eventType,\n false,\n false,\n destination.passive\n ).subscribe({\n next: (ev: Event) =>\n self.onEvent(eventType, ev, !!destination.passive, false),\n error: () => {},\n complete: () => {},\n });\n if (!self.nonBubblingListeners.has(eventType)) {\n self.nonBubblingListeners.set(\n eventType,\n new Map<Element, NonBubblingListener>()\n );\n }\n const map = self.nonBubblingListeners.get(eventType);\n if (!map) {\n return;\n }\n map.set(element, {sub, destination});\n\n (element as any).subs = {\n ...subs,\n [eventType]: sub,\n };\n }\n });\n }\n }\n\n private resetEventListeners(): void {\n const iter = this.domListeners.entries();\n let curr = iter.next();\n while (!curr.done) {\n const [type, {sub, passive}] = curr.value;\n sub.unsubscribe();\n this.setupDOMListener(type, passive);\n curr = iter.next();\n }\n }\n\n private putNonBubblingListener(\n eventType: string,\n elm: Element,\n useCapture: boolean,\n passive: boolean\n ): void {\n const map = this.nonBubblingListeners.get(eventType);\n if (!map) {\n return;\n }\n const listener = map.get(elm);\n if (\n listener &&\n listener.destination.passive === passive &&\n listener.destination.useCapture === useCapture\n ) {\n this.virtualNonBubblingListener[0] = listener.destination;\n }\n }\n\n private onEvent(\n eventType: string,\n event: Event,\n passive: boolean,\n bubbles = true\n ): void {\n const cycleEvent = this.patchEvent(event);\n const rootElement = this.isolateModule.getRootElement(\n event.target as Element\n );\n\n if (bubbles) {\n const namespace = this.isolateModule.getNamespace(\n event.target as Element\n );\n if (!namespace) {\n return;\n }\n const listeners = this.getVirtualListeners(eventType, namespace);\n this.bubble(\n eventType,\n event.target as Element,\n rootElement,\n cycleEvent,\n listeners,\n namespace,\n namespace.length - 1,\n true,\n passive\n );\n\n this.bubble(\n eventType,\n event.target as Element,\n rootElement,\n cycleEvent,\n listeners,\n namespace,\n namespace.length - 1,\n false,\n passive\n );\n } else {\n this.putNonBubblingListener(\n eventType,\n event.target as Element,\n true,\n passive\n );\n this.doBubbleStep(\n eventType,\n event.target as Element,\n rootElement,\n cycleEvent,\n this.virtualNonBubblingListener,\n true,\n passive\n );\n\n this.putNonBubblingListener(\n eventType,\n event.target as Element,\n false,\n passive\n );\n this.doBubbleStep(\n eventType,\n event.target as Element,\n rootElement,\n cycleEvent,\n this.virtualNonBubblingListener,\n false,\n passive\n );\n event.stopPropagation();\n }\n }\n\n private bubble(\n eventType: string,\n elm: Element,\n rootElement: Element | undefined,\n event: CycleDOMEvent,\n listeners: PriorityQueue<Destination>,\n namespace: Array<Scope>,\n index: number,\n useCapture: boolean,\n passive: boolean\n ): void {\n if (!useCapture && !event.propagationHasBeenStopped) {\n this.doBubbleStep(\n eventType,\n elm,\n rootElement,\n event,\n listeners,\n useCapture,\n passive\n );\n }\n\n let newRoot: Element | undefined = rootElement;\n let newIndex = index;\n if (elm === rootElement) {\n if (index >= 0 && namespace[index].type === 'sibling') {\n newRoot = this.isolateModule.getElement(namespace, index);\n newIndex--;\n } else {\n return;\n }\n }\n\n if (elm.parentNode && newRoot) {\n this.bubble(\n eventType,\n elm.parentNode as Element,\n newRoot,\n event,\n listeners,\n namespace,\n newIndex,\n useCapture,\n passive\n );\n }\n\n if (useCapture && !event.propagationHasBeenStopped) {\n this.doBubbleStep(\n eventType,\n elm,\n rootElement,\n event,\n listeners,\n useCapture,\n passive\n );\n }\n }\n\n private doBubbleStep(\n eventType: string,\n elm: Element,\n rootElement: Element | undefined,\n event: CycleDOMEvent,\n listeners: PriorityQueue<Destination> | Array<Destination>,\n useCapture: boolean,\n passive: boolean\n ): void {\n if (!rootElement) {\n return;\n }\n this.mutateEventCurrentTarget(event, elm);\n listeners.forEach(dest => {\n if (dest.passive === passive && dest.useCapture === useCapture) {\n const sel = getSelectors(dest.scopeChecker.namespace);\n if (\n !event.propagationHasBeenStopped &&\n dest.scopeChecker.isDirectlyInScope(elm) &&\n ((sel !== '' && elm.matches(sel)) ||\n (sel === '' && elm === rootElement))\n ) {\n preventDefaultConditional(\n event,\n dest.preventDefault as PreventDefaultOpt\n );\n\n dest.subject.shamefullySendNext(event);\n }\n }\n });\n }\n\n private patchEvent(event: Event): CycleDOMEvent {\n const pEvent = event as CycleDOMEvent;\n pEvent.propagationHasBeenStopped = false;\n const oldStopPropagation = pEvent.stopPropagation;\n pEvent.stopPropagation = function stopPropagation() {\n oldStopPropagation.call(this);\n this.propagationHasBeenStopped = true;\n };\n return pEvent;\n }\n\n private mutateEventCurrentTarget(\n event: CycleDOMEvent,\n currentTargetElement: Element\n ) {\n try {\n Object.defineProperty(event, `currentTarget`, {\n value: currentTargetElement,\n configurable: true,\n });\n } catch (err) {\n // Some browsers don't allow redefining currentTarget.\n // event.ownerTarget is always set as a reliable alternative.\n }\n event.ownerTarget = currentTargetElement;\n }\n}\n","import {Driver} from '../run/types';\nimport {init, Module, Options as SnabbdomOptions, VNode, toVNode} from './snabbdom';\nimport xs, {Stream, Listener} from 'xstream';\nimport {concat, sampleCombine} from '../../extra/xstreamExtras';\nimport {MainDOMSource} from './MainDOMSource';\nimport {VNodeWrapper} from './VNodeWrapper';\nimport {getValidNode, checkValidContainer} from './utils';\nimport defaultModules from './modules';\nimport {IsolateModule} from './IsolateModule';\nimport {EventDelegator} from './EventDelegator';\n\nfunction makeDOMDriverInputGuard(modules: Array<Partial<Module>> | unknown) {\n if (!Array.isArray(modules)) {\n throw new Error(\n `Optional modules option must be an array for snabbdom modules`\n );\n }\n}\n\nfunction domDriverInputGuard(view$: Stream<VNode>): void {\n if (\n !view$ ||\n typeof view$.addListener !== `function` ||\n typeof view$.fold !== `function`\n ) {\n throw new Error(\n `The DOM driver function expects as input a Stream of ` +\n `virtual DOM elements`\n );\n }\n}\n\nexport interface DOMDriverOptions {\n modules?: Array<Partial<Module>>;\n reportSnabbdomError?(err: unknown): void;\n snabbdomOptions?: SnabbdomOptions;\n}\n\nfunction dropCompletion<T>(input: Stream<T>): Stream<T> {\n return xs.merge(input, xs.never());\n}\n\nfunction unwrapElementFromVNode(vnode: VNode): Element {\n return vnode.elm as Element;\n}\n\nfunction defaultReportSnabbdomError(err: any): void {\n (console.error || console.log)(err);\n}\n\nfunction makeDOMReady$(): Stream<null> {\n return xs.create<null>({\n start(lis: Listener<null>) {\n if (document.readyState === 'loading') {\n document.addEventListener('readystatechange', () => {\n const state = document.readyState;\n if (state === 'interactive' || state === 'complete') {\n lis.next(null);\n lis.complete();\n }\n });\n } else {\n lis.next(null);\n lis.complete();\n }\n },\n stop() {},\n });\n}\n\nfunction addRootScope(vnode: VNode): VNode {\n vnode.data = vnode.data || {};\n (vnode.data as any).isolate = [];\n return vnode;\n}\n\nfunction makeDOMDriver(\n container: string | Element | DocumentFragment,\n options: DOMDriverOptions = {}\n): Driver<Stream<VNode>, MainDOMSource> {\n checkValidContainer(container);\n const modules = options.modules || defaultModules;\n makeDOMDriverInputGuard(modules);\n const isolateModule = new IsolateModule();\n const snabbdomOptions = options && options.snabbdomOptions || undefined;\n const patch = init([isolateModule.createModule() as Partial<Module>].concat(modules), undefined, snabbdomOptions);\n const domReady$ = makeDOMReady$();\n let vnodeWrapper: VNodeWrapper;\n let mutationObserver: MutationObserver;\n const mutationConfirmed$ = xs.create<null>({\n start(listener) {\n mutationObserver = new MutationObserver(() => listener.next(null));\n },\n stop() {\n mutationObserver.disconnect();\n },\n });\n\n function DOMDriver(vnode$: Stream<VNode>, name = 'DOM'): MainDOMSource {\n domDriverInputGuard(vnode$);\n const sanitation$ = xs.create<null>();\n\n const firstRoot$ = domReady$.map(() => {\n const firstRoot = getValidNode(container) || document.body;\n vnodeWrapper = new VNodeWrapper(firstRoot);\n return firstRoot;\n });\n\n const rememberedVNode$ = vnode$.remember();\n rememberedVNode$.addListener({});\n\n mutationConfirmed$.addListener({});\n\n const elementAfterPatch$ = firstRoot$\n .map(\n firstRoot =>\n xs\n .merge(rememberedVNode$.endWhen(sanitation$), sanitation$)\n .map(vnode => vnodeWrapper.call(vnode))\n .startWith(addRootScope(toVNode(firstRoot)))\n .fold(patch, toVNode(firstRoot))\n .drop(1)\n .map(unwrapElementFromVNode)\n .startWith(firstRoot as any)\n .map(el => {\n mutationObserver.observe(el, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n attributeOldValue: true,\n characterDataOldValue: true,\n });\n return el;\n })\n .compose(dropCompletion)\n )\n .flatten();\n\n const rootElement$ = concat(domReady$, mutationConfirmed$)\n .endWhen(sanitation$)\n .compose(sampleCombine(elementAfterPatch$))\n .map(arr => arr[1])\n .remember();\n\n rootElement$.addListener({\n error: options.reportSnabbdomError || defaultReportSnabbdomError,\n });\n\n const delegator = new EventDelegator(rootElement$, isolateModule);\n\n return new MainDOMSource(\n rootElement$,\n sanitation$,\n [],\n isolateModule,\n delegator,\n name\n );\n }\n\n return DOMDriver as any;\n}\n\nexport {makeDOMDriver};\n","import xs, {Stream, MemoryStream} from 'xstream';\nimport {DevToolEnabledSource, FantasyObservable} from '../run/types';\nimport {VNode} from './snabbdom';\nimport {EventsFnOptions} from './DOMSource';\nimport {adapt} from '../run/adapt';\nimport {enrichEventStream} from './enrichEventStream';\n\n/**\n * Optional simulated-event hub (used by renderComponent's simulateEvent): a\n * stream of `{type, event, match(path)}`; each source's events(type) also emits\n * the hub events whose `match` accepts its selector path (isolation scopes\n * included as '.___scope' segments).\n */\nexport type MockEventHub = Stream<{type: string; event: any; match: (path: string[]) => boolean}>;\n\n/**\n * Optional listener callback (renderComponent): called with `live` undefined when events() is\n * called (SYG103/104 checks), then with true / false when that hub listener is subscribed /\n * unsubscribed (simulateEvent waits for a just-mounted child's listeners, G-039).\n */\nexport type MockOnEvents = (path: string[], eventType: string, live?: boolean) => void;\n\nexport type MockConfig = {\n [name: string]: FantasyObservable<any> | MockConfig;\n};\n\nconst SCOPE_PREFIX = '___';\n\nexport class MockedDOMSource {\n private _elements: FantasyObservable<any>;\n\n constructor(\n private _mockConfig: MockConfig,\n private _hub?: MockEventHub,\n public _path: string[] = [],\n private _onEvents?: MockOnEvents\n ) {\n if (_mockConfig.elements) {\n this._elements = _mockConfig.elements as FantasyObservable<any>;\n } else {\n this._elements = adapt(xs.empty());\n }\n }\n\n public elements(): any {\n const out: Partial<DevToolEnabledSource> & FantasyObservable<any> = this\n ._elements;\n out._isCycleSource = 'MockedDOM';\n return out;\n }\n\n public element(): any {\n const output$: MemoryStream<Element> = this.elements()\n .filter((arr: Array<any>) => arr.length > 0)\n .map((arr: Array<any>) => arr[0])\n .remember();\n const out: DevToolEnabledSource & MemoryStream<Element> = adapt(output$);\n out._isCycleSource = 'MockedDOM';\n return out;\n }\n\n public events(\n eventType: string,\n options?: EventsFnOptions,\n bubbles?: boolean\n ): any {\n const configured = this._mockConfig[eventType] as any;\n const {_hub: hub, _path: path, _onEvents: on} = this;\n if (on) on(path, eventType);\n let hub$: Stream<any> | undefined;\n if (hub) {\n const ev$ = hub.filter(e => e.type === eventType && e.match(path)).map(e => e.event);\n let l: any;\n hub$ = on\n ? xs.create({\n start: (x: any) => {\n ev$.addListener(l = {next: (v: any) => x.next(v), error: (e: any) => x.error(e), complete: () => x.complete()});\n on(path, eventType, true);\n },\n stop: () => {\n ev$.removeListener(l);\n on(path, eventType, false);\n },\n })\n : ev$;\n }\n const out: DevToolEnabledSource & FantasyObservable<any> = enrichEventStream(adapt(\n hub$\n ? xs.merge(configured ? xs.fromObservable(configured) : xs.empty(), hub$)\n : configured || xs.empty()\n ));\n\n out._isCycleSource = 'MockedDOM';\n\n return out;\n }\n\n public select(selector: string): MockedDOMSource {\n const mockConfigForSelector = this._mockConfig[selector] || {};\n\n return new MockedDOMSource(\n mockConfigForSelector as MockConfig,\n this._hub,\n this._path.concat(selector),\n this._onEvents\n );\n }\n\n public isolateSource(\n source: MockedDOMSource,\n scope: string\n ): MockedDOMSource {\n return source.select('.' + SCOPE_PREFIX + scope);\n }\n\n public isolateSink(sink: any, scope: string): any {\n return adapt(\n xs.fromObservable<any>(sink).map((vnode: VNode) => {\n // B-025: a Switchable's DOM sink starts with undefined (nothing rendered yet); the\n // real DOM driver's isolateSink passes it through too\n if (!vnode) return vnode;\n if (vnode.sel && vnode.sel.indexOf(SCOPE_PREFIX + scope) !== -1) {\n return vnode;\n } else {\n vnode.sel += `.${SCOPE_PREFIX}${scope}`;\n return vnode;\n }\n })\n );\n }\n}\n\nexport function mockDOMSource(\n mockConfig: MockConfig,\n hub?: MockEventHub,\n onEvents?: MockOnEvents\n): MockedDOMSource {\n return new MockedDOMSource(mockConfig, hub, [], onEvents);\n}\n","/**\n * Coded console output for Sygnal's pre-existing warnings and errors\n * (PLAN-1 workstream 1E).\n *\n * warn(code, component, message, fix?, extra?)\n * error(code, component, message, fix?, extra?)\n * fail(code, component, message, fix?): never\n *\n * `component` is a component instance (anything with `.name`), a name string,\n * or undefined. `extra` (an Error, the offending value, ...) is passed to the\n * console after the formatted text, as the old messages did.\n *\n * Unlike report(), warn()/error() keep printing when diagnostics are 'off',\n * so production apps see the same messages as before (now with a code):\n * - 'off' → console.warn/error(formatDiagnostic(...), extra?)\n * - 'collect' → report(): collected; error severity is also printed with\n * console.error (so exceptions stay visible in tests), warn isn't\n * - 'warn' → report(): collected and printed once by report(); `extra`\n * (e.g. the caught Error with its stack) printed after it\n * - 'error' → report() throws a DiagnosticError; it is rethrown\n * asynchronously so the stream pipeline that hit the problem\n * keeps running (same contract as the hooks in ./index)\n * - code in the ignore list → nothing printed\n *\n * fail() always throws an Error whose message is the formatted text and whose\n * `.code` is the diagnostic code. It does not go through report(): the throw\n * itself is the signal, in every mode.\n *\n * (This comment is attached to the type-only import below so the TypeScript\n * emit drops it.)\n */\nimport type { DiagnosticSeverity } from './codes'\nimport { report, formatDiagnostic, getDiagnosticsMode } from './index'\n\nconst emit = (severity: Extract<DiagnosticSeverity, 'warn' | 'error'>) =>\n (code: string, component: any, message: string, fix?: string, ...extra: any[]): void => {\n const details = { component, message, fix, severity, data: extra[0] }\n const mode = getDiagnosticsMode()\n if (mode === 'off') {\n console[severity](formatDiagnostic(code, details), ...extra)\n return\n }\n try {\n const d = report(code, details)\n if (d && mode === 'collect' && severity === 'error') console.error(d.text, ...extra)\n else if (d && mode === 'warn' && extra.length) console[severity](...extra)\n } catch (err) {\n setTimeout(() => { throw err })\n }\n }\n\nexport const warn = emit('warn')\nexport const error = emit('error')\n\nexport function fail(code: string, component: any, message: string, fix?: string): never {\n const err: any = new Error(formatDiagnostic(code, { component, message, fix }))\n err.code = code\n throw err\n}\n","import isolate from './cycle/isolate/index';\nimport {makeCollection} from './cycle/state/index';\nimport {h} from './cycle/dom/index';\nimport type {Lens} from './cycle/state/types';\nimport {fail} from './extra/diagnostics/legacy';\n\nlet COLLECTION_COUNT = 0;\n\ninterface CollectionOptions {\n combineList?: string[];\n globalList?: string[];\n stateSourceName?: string;\n domSourceName?: string;\n container?: string;\n containerClass?: string;\n}\n\nexport default function collection(\n component: (...args: any[]) => any,\n stateLense: string | Lens<any, any>,\n opts: CollectionOptions = {}\n): (sources: any) => any {\n if (typeof component !== 'function') {\n fail('SYG411', 'collection', 'first argument (component) must be a function', 'Pass a component function');\n }\n const {\n combineList = ['DOM'],\n globalList = ['EVENTS'],\n stateSourceName = 'STATE',\n domSourceName = 'DOM',\n container = 'div',\n containerClass,\n } = opts;\n\n return (sources: any) => {\n const key = `sygnal-collection-${COLLECTION_COUNT++}`;\n const collectionOpts = {\n item: component,\n itemKey: (state: any, ind: number) =>\n typeof state.id !== 'undefined' ? state.id : ind,\n // B-009: prefix with the collection instance so two Collections in one parent whose\n // items share ids get different DOM isolation scopes\n itemScope: (itemKey: any) => `${key}-${itemKey}`,\n channel: stateSourceName,\n collectSinks: (instances: any) => {\n return Object.entries(sources).reduce<Record<string, any>>(\n (acc, [name]) => {\n if (combineList.includes(name)) {\n const combined = instances.pickCombine(name);\n if (name === domSourceName && container) {\n acc[domSourceName] = combined.map((children: any) => {\n const data = containerClass\n ? {props: {className: containerClass}}\n : {};\n return {\n sel: container,\n data,\n children,\n key,\n text: undefined,\n elm: undefined,\n };\n });\n } else {\n acc[name] = combined;\n }\n } else {\n acc[name] = instances.pickMerge(name);\n }\n return acc;\n },\n {}\n );\n },\n };\n\n const isolateOpts: Record<string, any> = {[stateSourceName]: stateLense};\n\n globalList.forEach((global) => (isolateOpts[global] = null));\n combineList.forEach((combine) => (isolateOpts[combine] = null));\n\n return makeIsolatedCollection(collectionOpts, isolateOpts, sources);\n };\n}\n\nfunction makeIsolatedCollection(\n collectionOpts: any,\n isolateOpts: any,\n sources: any\n): any {\n return isolate(makeCollection(collectionOpts), isolateOpts)(sources);\n}\n\nconst Collection = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('collection', {props: sanitizedProps}, children);\n};\n(Collection as any).label = 'collection';\n(Collection as any).preventInstantiation = true;\n\nexport {Collection};\n","import * as xstreamNamespace from 'xstream';\n\nexport function resolveInteropDefault(namespaceValue: any): any {\n if (\n namespaceValue &&\n namespaceValue.default &&\n namespaceValue.default.default &&\n typeof namespaceValue.default.default === 'function'\n ) {\n return namespaceValue.default.default;\n }\n\n if (namespaceValue && namespaceValue.default) {\n return namespaceValue.default;\n }\n\n return namespaceValue;\n}\n\nfunction getXs(namespaceValue: any): any {\n const value = resolveInteropDefault(namespaceValue);\n\n if (\n value &&\n value.default &&\n typeof value.default.create === 'function'\n ) {\n return value.default;\n }\n\n return value;\n}\n\nconst xs = getXs(xstreamNamespace);\nconst Stream =\n (xstreamNamespace as any).Stream ||\n ((xstreamNamespace as any).default && (xstreamNamespace as any).default.Stream) ||\n (xs && xs.Stream);\n\nexport {Stream};\nexport default xs;\n","import xs, {Stream} from './extra/xstreamCompat';\nimport {dropRepeats} from './extra/xstreamExtras';\nimport {h} from './cycle/dom/index';\nimport {fail} from './extra/diagnostics/legacy';\n\n\ninterface SwitchableOptions {\n switched?: string | string[];\n stateSourceName?: string;\n}\n\nconst NAME_FIX = 'Pass a stream, a state key string, or a state => name function';\n\nexport default function switchable(\n factories: Record<string, (sources: any) => any>,\n name$: any,\n initial: string,\n opts: SwitchableOptions = {}\n): (sources: any) => any {\n const {switched = ['DOM'], stateSourceName = 'STATE'} = opts;\n const nameType = typeof name$;\n\n if (!name$) fail('SYG419', 'switchable', \"Missing 'name$' parameter\", NAME_FIX);\n if (\n !(\n nameType === 'string' ||\n nameType === 'function' ||\n name$ instanceof Stream\n )\n ) {\n fail('SYG419', 'switchable', `Invalid 'name$' parameter: got ${nameType}`, NAME_FIX);\n }\n\n if (name$ instanceof Stream) {\n const withInitial$ = name$\n .compose(dropRepeats())\n .startWith(initial)\n .remember();\n return (sources: any) =>\n _switchable(factories, sources, withInitial$, switched);\n } else {\n const mapFunction =\n (nameType === 'function' && (name$ as (state: any) => string)) ||\n ((state: any) => state[name$ as string]);\n return (sources: any) => {\n const state$ =\n sources &&\n (\n (typeof stateSourceName === 'string' && sources[stateSourceName]) ||\n sources.STATE ||\n sources.state\n ).stream;\n if (!(state$ instanceof Stream))\n fail('SYG607', 'switchable', `State source '${stateSourceName}' not found`, 'Pass the state source in sources, or set stateSourceName');\n const _name$ = state$\n .map(mapFunction)\n .filter((name: any) => typeof name === 'string')\n .compose(dropRepeats())\n .startWith(initial)\n .remember();\n return _switchable(factories, sources, _name$, switched, stateSourceName);\n };\n }\n}\n\nfunction _switchable(\n factories: Record<string, (sources: any) => any>,\n sources: any,\n name$: any,\n switched: string | string[] = ['DOM'],\n stateSourceName: string = 'STATE'\n): Record<string, any> {\n if (typeof switched === 'string') switched = [switched];\n\n const sinks = Object.entries(factories).map(([name, factory]) => {\n if (sources[stateSourceName]) {\n const state$ = sources[stateSourceName].stream;\n const switchedState = xs\n .combine(name$, state$)\n .filter(([newComponentName]: [string, any]) => newComponentName == name)\n .map(([, state]: [string, any]) => state)\n .remember();\n\n const state = new sources[stateSourceName].constructor(\n switchedState,\n sources[stateSourceName]._name\n );\n return [name, factory({...sources, state})] as [string, any];\n }\n return [name, factory(sources)] as [string, any];\n });\n\n const switchedSinks = Object.keys(sources).reduce<Record<string, any>>(\n (obj, sinkName) => {\n if ((switched as string[]).includes(sinkName)) {\n obj[sinkName] = name$\n .map((newComponentName: string) => {\n const sink = sinks.find(\n ([componentName]) => componentName === newComponentName\n );\n return (sink && sink[1][sinkName]) || xs.never();\n })\n .flatten()\n .remember()\n .startWith(undefined);\n } else {\n const definedSinks = sinks\n .filter(([, sink]) => sink[sinkName] !== undefined)\n .map(([, sink]) => sink[sinkName]);\n obj[sinkName] = xs.merge(...definedSinks);\n }\n return obj;\n },\n {}\n );\n // B-024: every factory was instantiated above; dispose them all with the switchable\n switchedSinks.__dispose = () => sinks.forEach(([, s]) => s.__dispose?.());\n\n return switchedSinks;\n}\n\nconst Switchable = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('switchable', {props: sanitizedProps}, children);\n};\n(Switchable as any).label = 'switchable';\n(Switchable as any).preventInstantiation = true;\n\nexport {Switchable};\n","import xs from './xstreamCompat';\nimport type {Stream} from 'xstream';\n\nexport interface CommandMessage {\n type: string;\n data?: any;\n}\n\nexport interface CommandSource {\n select(type: string): Stream<any>;\n}\n\nexport interface Command {\n send(type: string, data?: any): void;\n /** @internal — raw stream used by component wiring */\n _stream: Stream<CommandMessage>;\n /** @internal — marker for component.ts detection */\n __sygnalCommand: true;\n /** @internal — stamped by component.ts when wired to a child */\n _targetComponentId?: number;\n /** @internal — stamped by component.ts when wired to a child */\n _targetComponentName?: string;\n}\n\nexport function createCommand(): Command {\n const listener: { next: (val: CommandMessage) => void } = { next: () => {} };\n\n const _stream: Stream<CommandMessage> = xs.create({\n start(l: any) { listener.next = (val) => l.next(val); },\n stop() { listener.next = () => {}; },\n });\n\n const cmd: Command = {\n send: (type: string, data?: any) => {\n listener.next({ type, data });\n if (typeof window !== 'undefined' && (window as any).__SYGNAL_DEVTOOLS__?.connected) {\n (window as any).__SYGNAL_DEVTOOLS__.onCommandSent(type, data, cmd._targetComponentId, cmd._targetComponentName);\n }\n },\n _stream,\n __sygnalCommand: true as const,\n };\n\n return cmd;\n}\n\nexport function makeCommandSource(cmd: Command): CommandSource {\n return {\n select(type: string): Stream<any> {\n return cmd._stream.filter(msg => msg.type === type).map(msg => msg.data);\n },\n };\n}\n","import isolate from './cycle/isolate/index';\nimport collection from './collection';\nimport switchable from './switchable';\nimport {StateSource} from './cycle/state/index';\nimport {init as snabbdomInit} from './cycle/dom/snabbdom';\nimport defaultModules from './cycle/dom/modules';\nimport {makeCommandSource} from './extra/command';\nimport type {Command} from './extra/command';\n// [diagnostics hook] shared diagnostics core — hooks are no-ops when diagnostics are off\nimport * as diag from './extra/diagnostics/index';\nimport {warn, error as logError, fail} from './extra/diagnostics/legacy';\n\nimport xs, {Stream} from './extra/xstreamCompat';\nimport {delay, concat, debounce, dropRepeats} from './extra/xstreamExtras';\n\ndeclare var process: { env: Record<string, any> };\n\nconst ENVIRONMENT: any =\n (typeof window != 'undefined' && window) || (typeof process !== 'undefined' && process.env) || {};\n\nconst BOOTSTRAP_ACTION = 'BOOTSTRAP';\nconst INITIALIZE_ACTION = 'INITIALIZE';\nconst HYDRATE_ACTION = 'HYDRATE';\nconst DISPOSE_ACTION = 'DISPOSE';\nconst PARENT_SINK_NAME = 'PARENT';\nconst CHILD_SOURCE_NAME = 'CHILD';\nconst READY_SINK_NAME = 'READY';\nconst EFFECT_SINK_NAME = 'EFFECT';\n// fix hint for coded messages that carry the caught error (printed after the text, or diagnostic.data)\nconst ERR_FIX = 'See the attached error'\n// B-003: the state an action's non-STATE sinks see (stamped by initModel$)\nconst STATE_SNAPSHOT = Symbol('sygnal.stateSnapshot');\n\nlet COMPONENT_COUNT = 0;\n// 1H-1: STATE reducers emitted but not applied yet (in any component)\nlet pendingReducers = 0;\n\nfunction wrapDOMSource(domSource: any): any {\n return new Proxy(domSource, {\n get(target, prop, receiver) {\n if (typeof prop === 'symbol' || prop in target) {\n return Reflect.get(target, prop, receiver)\n }\n return (selector: any) => target.select(selector).events(prop)\n }\n })\n}\n\n\nexport const ABORT = Symbol.for('sygnal.ABORT')\n\n/**\n * Check if a value is the ABORT sentinel.\n * Uses Symbol.for() identity first, then falls back to description check\n * in case bundlers (e.g. Vite) create duplicate module instances with\n * separate Symbol.for() registries.\n */\nfunction isAbort(value: any): boolean {\n if (value === ABORT) return true\n return typeof value === 'symbol' && value.description === 'sygnal.ABORT'\n}\n\n\nfunction normalizeCalculatedEntry(field: string, entry: any): {fn: (...args: any[]) => any; deps: string[] | null} {\n if (typeof entry === 'function') {\n return { fn: entry, deps: null }\n }\n if (Array.isArray(entry) && entry.length === 2\n && Array.isArray(entry[0]) && typeof entry[1] === 'function') {\n return { fn: entry[1], deps: entry[0] }\n }\n fail('SYG206', undefined, `Invalid calculated field '${field}'`, 'Use fn or [deps, fn]')\n}\n\nexport interface ComponentOptions {\n name?: string;\n sources?: Record<string, any>;\n intent?: ((sources: Record<string, any>) => any) | Record<string, any>;\n model?: Record<string, any>;\n hmrActions?: string | string[];\n context?: Record<string, boolean | ((state: any) => any)>;\n response?: Record<string, any>;\n view?: (...args: any[]) => any;\n peers?: Record<string, (...args: any[]) => any>;\n components?: Record<string, any>;\n initialState?: Record<string, any>;\n calculated?: Record<string, ((state: any) => any) | [string[], (...args: any[]) => any]>;\n storeCalculatedInState?: boolean;\n DOMSourceName?: string;\n stateSourceName?: string;\n requestSourceName?: string;\n isolateOpts?: string | boolean | Record<string, any>;\n isolatedState?: boolean;\n onError?: (error: Error, info: { componentName: string }) => any;\n debug?: boolean;\n}\n\nexport default function component(opts: ComponentOptions): any {\n const { name, sources, isolateOpts, stateSourceName='STATE' } = opts\n\n if (sources && !isObj(sources)) {\n fail('SYG601', name, 'Invalid sources', 'Pass sources from run()')\n }\n\n let fixedIsolateOpts\n if (typeof isolateOpts == 'string') {\n fixedIsolateOpts = { [stateSourceName]: isolateOpts }\n } else {\n if (isolateOpts === true) {\n fixedIsolateOpts = {}\n } else {\n fixedIsolateOpts = isolateOpts\n }\n }\n\n const currySources = typeof sources === 'undefined'\n let returnFunction\n\n if (isObj(fixedIsolateOpts)) {\n const wrapped = (sources: any) => {\n const fixedOpts = { ...opts, sources }\n const instance = new Component(fixedOpts)\n instance.sinks.__dispose = () => instance.dispose()\n return instance.sinks\n }\n returnFunction = currySources ? isolate(wrapped, fixedIsolateOpts) : isolate(wrapped, fixedIsolateOpts)(sources)\n } else {\n if (currySources) {\n returnFunction = (sources: any) => {\n const instance = new Component({ ...opts, sources })\n instance.sinks.__dispose = () => instance.dispose()\n return instance.sinks\n }\n } else {\n const instance = new Component(opts)\n instance.sinks.__dispose = () => instance.dispose()\n returnFunction = instance.sinks\n }\n }\n\n returnFunction.componentName = name\n returnFunction.isSygnalComponent = true\n\n return returnFunction\n}\n\n\n\n\n\nclass Component {\n _componentNumber: number;\n name: string;\n sources: any;\n intent: any;\n model: any;\n hmrActions: any;\n context: any;\n response: any;\n view: any;\n peers: Record<string, any>;\n components: Record<string, any>;\n initialState: any;\n calculated: any;\n storeCalculatedInState: boolean;\n DOMSourceName: string;\n stateSourceName: string;\n requestSourceName: string;\n sourceNames: string[];\n _debug: boolean;\n onError: ((error: Error, info: { componentName: string }) => any) | undefined;\n isolatedState: boolean;\n isSubComponent: boolean;\n currentState: any;\n currentProps: any;\n currentChildren: any;\n currentSlots: Record<string, any[]>;\n currentContext: any;\n intent$: any;\n hmrAction$: any;\n action$: any;\n model$: any;\n context$: any;\n peers$: any;\n subComponentSink$: any;\n subComponentsRendered$: any;\n vdom$: any;\n sinks: any;\n log: any;\n addCalculated: (state: any) => any;\n newChildSources!: (sources: any) => void;\n newSubComponentSinks!: (sinks: any) => void;\n triggerSubComponentsRendered!: (() => void);\n _calculatedNormalized: Record<string, {fn: (...args: any[]) => any; deps: string[] | null}> | null;\n _calculatedFieldNames: Set<string> | null;\n _calculatedOrder: Array<[string, {fn: (...args: any[]) => any; deps: string[] | null}]> | null;\n _calculatedFieldCache: Record<string, {lastDepValues: any; lastResult: any}> | null;\n _subscriptions: any[];\n _processedChildren$: any;\n _disposeListener: any;\n _dispose$: any;\n _disposed?: boolean;\n _activeSubComponents: Map<string, any>;\n _childReadyState: Record<string, boolean>;\n _readyChanged$: any;\n _readyChangedListener: any;\n\n constructor({name = 'NO NAME', sources, intent, model, hmrActions, context, response, view, peers = {}, components = {}, initialState, calculated, storeCalculatedInState = true, DOMSourceName = 'DOM', stateSourceName = 'STATE', requestSourceName = 'HTTP', isolatedState = false, onError, debug = false}: ComponentOptions) {\n if (!sources || !isObj(sources)) fail('SYG601', name, 'Missing or invalid sources', 'Pass sources from run()')\n\n this._componentNumber = COMPONENT_COUNT++\n\n this.name = name\n this.sources = sources\n this.intent = intent\n this.model = model\n this.hmrActions = hmrActions\n this.context = context\n this.response = response\n this.view = view\n this.peers = peers\n this.components = components\n this.initialState = initialState\n this.calculated = calculated\n this.storeCalculatedInState = storeCalculatedInState\n this.DOMSourceName = DOMSourceName\n this.stateSourceName = stateSourceName\n this.requestSourceName = requestSourceName\n this.sourceNames = Object.keys(sources)\n this.onError = onError\n this.isolatedState = isolatedState\n this._debug = debug\n\n // Warn if calculated fields shadow base state keys\n if (this.calculated && this.initialState\n && isObj(this.calculated) && isObj(this.initialState)) {\n for (const key of Object.keys(this.calculated)) {\n if (key in this.initialState) {\n warn('SYG207', name, `Calculated field '${key}' overwrites the initialState key of the same name`, 'Rename one of them')\n }\n }\n }\n\n // Normalize calculated entries, build dependency graph, topological sort\n if (this.calculated && isObj(this.calculated)) {\n const calcEntries = Object.entries(this.calculated)\n\n // Normalize all entries to { fn, deps } shape\n this._calculatedNormalized = {}\n for (const [field, entry] of calcEntries) {\n this._calculatedNormalized[field] = normalizeCalculatedEntry(field, entry)\n }\n\n this._calculatedFieldNames = new Set(Object.keys(this._calculatedNormalized))\n\n // Warn on deps referencing nonexistent keys\n for (const [field, { deps }] of Object.entries(this._calculatedNormalized)) {\n if (deps !== null) {\n for (const dep of deps) {\n if (!this._calculatedFieldNames.has(dep)\n && this.initialState && !(dep in this.initialState)) {\n warn('SYG208', name, `Calculated field '${field}' depends on unknown key '${dep}'`, 'Add it to initialState')\n }\n }\n }\n }\n\n // Build adjacency: for each field, which other calculated fields must run first?\n const calcDeps: Record<string, string[]> = {}\n for (const [field, { deps }] of Object.entries(this._calculatedNormalized)) {\n if (deps === null) {\n calcDeps[field] = []\n } else {\n calcDeps[field] = deps.filter(d => this._calculatedFieldNames!.has(d))\n }\n }\n\n // Kahn's algorithm for topological sort\n const inDegree: Record<string, number> = {}\n const reverseGraph: Record<string, string[]> = {}\n for (const field of this._calculatedFieldNames) {\n inDegree[field] = 0\n reverseGraph[field] = []\n }\n for (const [field, depList] of Object.entries(calcDeps)) {\n inDegree[field] = depList.length\n for (const dep of depList) {\n reverseGraph[dep].push(field)\n }\n }\n\n const queue = []\n for (const [field, degree] of Object.entries(inDegree)) {\n if (degree === 0) queue.push(field)\n }\n\n const sorted: string[] = []\n while (queue.length > 0) {\n const current: string = queue.shift()!\n sorted.push(current)\n for (const dependent of reverseGraph[current]) {\n inDegree[dependent]--\n if (inDegree[dependent] === 0) queue.push(dependent)\n }\n }\n\n if (sorted.length !== this._calculatedFieldNames.size) {\n // Cycle detected — build error message with cycle path\n const inCycle = [...this._calculatedFieldNames].filter(f => !sorted.includes(f))\n const visited = new Set()\n const path: string[] = []\n const traceCycle = (node: any) => {\n if (visited.has(node)) { path.push(node); return true }\n visited.add(node)\n path.push(node)\n for (const dep of calcDeps[node]) {\n if (inCycle.includes(dep) && traceCycle(dep)) return true\n }\n path.pop()\n visited.delete(node)\n return false\n }\n traceCycle(inCycle[0])\n const start = path[path.length - 1]\n const cycle = path.slice(path.indexOf(start))\n fail('SYG209', name, `Circular calculated dependency: ${cycle.join(' \\u2192 ')}`, 'Break the cycle')\n }\n\n this._calculatedOrder = sorted.map(f => [f, this._calculatedNormalized![f]])\n\n // Initialize per-field memoization caches for fields with declared deps\n this._calculatedFieldCache = {}\n for (const [field, { deps }] of this._calculatedOrder) {\n if (deps !== null) {\n this._calculatedFieldCache[field] = { lastDepValues: undefined, lastResult: undefined }\n }\n }\n } else {\n this._calculatedOrder = null\n this._calculatedNormalized = null\n this._calculatedFieldNames = null\n this._calculatedFieldCache = null\n }\n\n this.isSubComponent = this.sourceNames.includes('props$')\n\n const state$ = sources[stateSourceName] && sources[stateSourceName].stream\n\n this.currentSlots = {}\n\n if (state$) {\n this.currentState = initialState || {}\n this.sources[stateSourceName] = new StateSource(state$.map((val: any) => {\n this.currentState = val\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__?.connected) {\n window.__SYGNAL_DEVTOOLS__.onStateChanged(this._componentNumber, this.name, val)\n }\n return val\n }), stateSourceName)\n }\n\n const props$ = sources.props$\n if (props$) {\n this.sources.props$ = props$.map((val: any) => {\n const { sygnalFactory, sygnalOptions, ...sanitizedProps }: any = val\n this.currentProps = sanitizedProps\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__?.connected) {\n window.__SYGNAL_DEVTOOLS__.onPropsChanged(this._componentNumber, this.name, sanitizedProps)\n }\n return val\n })\n }\n\n const children$ = sources.children$\n if (children$) {\n // Process children and extract slots once, share across subscribers\n this._processedChildren$ = children$.map((val: any) => {\n if (Array.isArray(val)) {\n const { slots, defaultChildren } = extractSlots(val)\n this.currentSlots = slots\n this.currentChildren = defaultChildren\n return { children: defaultChildren, slots }\n } else {\n this.currentSlots = {}\n this.currentChildren = val\n return { children: val, slots: {} }\n }\n })\n this.sources.children$ = this._processedChildren$.map((p: any) => p.children)\n }\n\n if (this.sources[DOMSourceName]) {\n this.sources[DOMSourceName] = wrapDOMSource(this.sources[DOMSourceName])\n }\n\n // Ensure that the root component has an intent and model\n // This is necessary to ensure that the component tree's state sink is subscribed to\n if (!this.isSubComponent && typeof this.intent === 'undefined' && typeof this.model === 'undefined') {\n this.initialState = initialState || true\n this.intent = (_: any) => ({__NOOP_ACTION__:xs.never()})\n this.model = {\n __NOOP_ACTION__: (state: any) => state\n }\n }\n\n this._subscriptions = []\n this._activeSubComponents = new Map()\n this._childReadyState = {}\n this._readyChangedListener = null\n this._readyChanged$ = xs.create({\n start: (listener: any) => { this._readyChangedListener = listener },\n stop: () => {},\n })\n this._disposeListener = null\n this._dispose$ = xs.create({\n start: (listener: any) => { this._disposeListener = listener },\n stop: () => {},\n })\n this.sources.dispose$ = this._dispose$\n\n this.addCalculated = this.createMemoizedAddCalculated()\n this.log = makeLog(`${this._componentNumber} | ${name}`)\n\n this.initChildSources$()\n this.initIntent$()\n this.initHmrActions()\n this.initAction$()\n this.initState()\n this.initContext()\n this.initModel$()\n this.initPeers$()\n this.initSubComponentSink$()\n this.initSubComponentsRendered$()\n this.initVdom$()\n this.initSinks()\n\n this.sinks.__index = this._componentNumber\n\n this.log(`Instantiated`, true)\n\n // Hook 1: Register with DevTools\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__) {\n window.__SYGNAL_DEVTOOLS__.onComponentCreated(this._componentNumber, name, this)\n\n // Hook 1b: Register parent-child relationship\n const parentNum = sources?.__parentComponentNumber\n if (typeof parentNum === 'number') {\n window.__SYGNAL_DEVTOOLS__.onSubComponentRegistered(parentNum, this._componentNumber)\n }\n }\n }\n\n dispose(): void {\n if (this._disposed) return\n this._disposed = true\n // [diagnostics hook]\n diag.onDispose(this)\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__?.connected) {\n window.__SYGNAL_DEVTOOLS__.onComponentDisposed(this._componentNumber, this.name)\n }\n // Fire the DISPOSE built-in action so model handlers can run cleanup logic\n const hasDispose = this.model && (this.model[DISPOSE_ACTION] || Object.keys(this.model).some(k => k.includes('|') && k.split('|')[0].trim() === DISPOSE_ACTION))\n if (hasDispose && this.action$ && typeof this.action$.shamefullySendNext === 'function') {\n try {\n this.action$.shamefullySendNext({ type: DISPOSE_ACTION })\n } catch (_) {}\n }\n // Signal disposal to the component via dispose$ stream (for advanced use cases)\n if (this._disposeListener) {\n try {\n this._disposeListener.next(true)\n this._disposeListener.complete()\n } catch (_) {}\n this._disposeListener = null\n }\n // Dispose the sub-components now (R3), so the whole subtree's DISPOSE actions and\n // onDispose hooks run within this call (e.g. before renderComponent restores diagnostics)\n this._activeSubComponents.forEach((entry) => entry?.sink$?.__dispose?.())\n this._activeSubComponents.clear()\n // Tear down streams on next macrotask to allow DISPOSE/cleanup actions to process\n setTimeout(() => {\n // Complete the action$ stream to stop the entire component cycle\n if (this.action$ && typeof this.action$.shamefullySendComplete === 'function') {\n try { this.action$.shamefullySendComplete() } catch (_) {}\n }\n // Complete the vdom$ stream to stop rendering\n if (this.vdom$ && typeof this.vdom$.shamefullySendComplete === 'function') {\n try { this.vdom$.shamefullySendComplete() } catch (_) {}\n }\n // Unsubscribe tracked internal subscriptions\n for (const sub of this._subscriptions) {\n if (sub && typeof sub.unsubscribe === 'function') {\n try { sub.unsubscribe() } catch (_) {}\n }\n }\n this._subscriptions = []\n }, 0)\n }\n\n get debug(): boolean {\n return this._debug || (ENVIRONMENT.SYGNAL_DEBUG === 'true' || ENVIRONMENT.SYGNAL_DEBUG === true)\n }\n\n initIntent$(): void {\n if (!this.intent) {\n // [diagnostics hook]\n diag.onIntent(this, [], undefined)\n return\n }\n if (typeof this.intent != 'function') {\n fail('SYG602', this, 'intent must be a function', 'Use intent = sources => ({ ACTION: stream$ })')\n }\n\n this.intent$ = this.intent(this.sources)\n\n if (!(this.intent$ instanceof Stream) && (!isObj(this.intent$))) {\n fail('SYG603', this, 'intent must return a stream or an object of streams', 'Return { ACTION: stream$ }')\n }\n\n // [diagnostics hook] TODO(1A): selectorsUsed via MainDOMSource.select instrumentation\n diag.onIntent(this, this.intent$ instanceof Stream ? [] : Object.keys(this.intent$), undefined)\n }\n\n initHmrActions(): void {\n if (typeof this.hmrActions === 'undefined') {\n this.hmrAction$ = xs.of().filter((_: any) => false)\n return\n }\n if (typeof this.hmrActions === 'string') {\n this.hmrActions = [this.hmrActions]\n }\n if (!Array.isArray(this.hmrActions) || this.hmrActions.some(action => typeof action !== 'string')) {\n fail('SYG604', this, 'hmrActions must be an action name or an array of action names', \"Use hmrActions = ['ACTION']\")\n }\n this.hmrAction$ = xs.fromArray(this.hmrActions.map(action => ({ type: action })))\n }\n\n initAction$(): void {\n const requestSource = (this.sources && this.sources[this.requestSourceName]) || null\n\n if (!this.intent$) {\n this.action$ = xs.never()\n return\n }\n\n let runner\n if (this.intent$ instanceof Stream) {\n runner = this.intent$\n } else {\n // Validate that no intent action names contain '|' (reserved for model shorthand)\n for (const key of Object.keys(this.intent$)) {\n if (key.includes('|')) {\n fail('SYG605', this, `Intent action '${key}' contains '|', which is reserved for model shorthand`, 'Rename the action')\n }\n }\n const mapped = Object.entries(this.intent$)\n .map(([type, data$]: [string, any]) => data$.map((data: any) => ({type, data})))\n runner = mapped.length > 0 ? xs.merge(...mapped) : xs.never()\n }\n\n const action$ = ((runner instanceof Stream) ? runner : (runner.apply && runner(this.sources) || xs.never()))\n const bootstrap$ = xs.of({ type: BOOTSTRAP_ACTION }).compose(delay(10))\n const _hmrUpdating = typeof window !== 'undefined' && window.__SYGNAL_HMR_UPDATING === true\n const hmrAction$ = _hmrUpdating ? this.hmrAction$ : xs.of().filter((_: any) => false)\n const wrapped$ = (this.model[BOOTSTRAP_ACTION] && !_hmrUpdating) ? concat(bootstrap$, action$) : concat(xs.of().compose(delay(1)).filter((_: any) => false), hmrAction$, action$)\n\n\n let initialApiData\n if (!_hmrUpdating && requestSource && typeof requestSource.select == 'function') {\n initialApiData = requestSource.select('initial')\n .flatten()\n } else {\n initialApiData = xs.never()\n }\n\n const hydrate$ = initialApiData.map((data: any) => ({ type: HYDRATE_ACTION, data }))\n\n this.action$ = xs.merge(wrapped$, hydrate$)\n .compose(this.log(({ type }: any) => `<${type}> Action triggered`))\n .map((action: any) => {\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__?.connected) {\n window.__SYGNAL_DEVTOOLS__.onActionDispatched(\n this._componentNumber, this.name, action.type, action.data\n )\n }\n return action\n })\n }\n\n initState(): void {\n if (this.model !== undefined) {\n if (this.model[INITIALIZE_ACTION] === undefined) {\n this.model[INITIALIZE_ACTION] = {\n [this.stateSourceName]: (_: any, data: any) => ({ ...this.addCalculated(data) })\n }\n } else if (isObj(this.model[INITIALIZE_ACTION])) {\n Object.keys(this.model[INITIALIZE_ACTION]).forEach(name => {\n if (name !== this.stateSourceName) {\n warn('SYG210', this, `${INITIALIZE_ACTION} only supports the ${this.stateSourceName} sink; ignoring '${name}'`, 'Use another action')\n delete this.model[INITIALIZE_ACTION][name]\n }\n })\n }\n }\n }\n\n initContext(): void {\n if (!this.context && !this.sources.__parentContext$) {\n this.context$ = xs.of({})\n return\n }\n\n const state$ = this.sources[this.stateSourceName]?.stream.startWith({}).compose(dropRepeats(objIsEqual)) || xs.never()\n const parentContext$ = this.sources.__parentContext$?.startWith({}).compose(dropRepeats(objIsEqual)) || xs.of({})\n if (this.context && !isObj(this.context)) {\n logError('SYG402', this, `context must be an object, got ${typeof this.context}; ignoring it`, 'Use context = { name: state => value }')\n }\n this.context$ = xs.combine(state$, parentContext$)\n .map(([_, parent]: [any, any]) => {\n const _parent = isObj(parent) ? parent : {}\n const context = isObj(this.context) ? this.context : {}\n const state = this.currentState\n const values = Object.entries(context).reduce((acc, current) => {\n const [name, value] = current\n let _value\n const valueType = typeof value\n if (valueType === 'string') {\n _value = state[value]\n } else if (valueType === 'boolean') {\n _value = state[name]\n } else if (valueType === 'function') {\n _value = value(state)\n } else {\n logError('SYG403', this, `Invalid context entry '${name}'; skipping it`, 'Use a state key or state => value')\n return acc\n }\n acc[name] = _value\n return acc\n }, {} as Record<string, any>)\n const newContext = { ..._parent, ...values }\n this.currentContext = newContext\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__?.connected) {\n window.__SYGNAL_DEVTOOLS__.onContextChanged(this._componentNumber, this.name, newContext)\n }\n return newContext\n })\n .compose(dropRepeats(objIsEqual))\n .startWith({})\n this._subscriptions.push(this.context$.subscribe({ next: (_: any) => _, error: (err: any) => logError('SYG404', this, 'Context stream errored; context stops updating', 'Check the context functions', err) }))\n }\n\n initModel$(): void {\n if (typeof this.model == 'undefined') {\n this.model$ = this.sourceNames.reduce((a: Record<string, any>, s) => {\n a[s] = xs.never()\n return a\n }, {} as Record<string, any>)\n // [diagnostics hook]\n diag.onModel(this, {})\n return\n }\n\n const hmrState = ENVIRONMENT?.__SYGNAL_HMR_STATE\n const effectiveInitialState = (typeof hmrState !== 'undefined') ? hmrState : this.initialState\n const initial = { type: INITIALIZE_ACTION, data: effectiveInitialState }\n if (this.isSubComponent && this.initialState && !this.isolatedState) {\n warn('SYG405', this, 'Sub-component initialState replaces the state its parent passes in', 'Remove initialState, or set isolatedState = true')\n }\n const hasInitialState = (typeof effectiveInitialState !== 'undefined')\n const shouldInjectInitialState = hasInitialState && (ENVIRONMENT?.__SYGNAL_HMR_UPDATING !== true || typeof hmrState !== 'undefined')\n // Only INITIALIZE is delayed (user actions start >= 1ms later), so the other actions, and\n // their non-STATE sinks, stay synchronous with the event that caused them (1H-1).\n const shimmed$ = shouldInjectInitialState ? xs.merge(xs.of(initial).compose(delay(0)), this.action$) : this.action$\n // B-003: STATE reducers are applied later (withState queues each one in a microtask), so\n // while one is pending a non-STATE sink must not read this.currentState. Then, before the\n // action reaches any reducer, queue a microtask (ahead of this action's own STATE reducer,\n // behind every earlier one) that snapshots the state and runs the non-STATE sinks.\n // Otherwise run them now, so EFFECT can still preventDefault() the live event (1H-1).\n let snapListener: any = null\n const sequenced$ = shimmed$.map((action: any) => {\n const l = snapListener\n const run = () => l.next({ ...action, [STATE_SNAPSHOT]: this.currentState })\n if (l) pendingReducers ? queueMicrotask(run) : run()\n return action\n })\n let snapSub: any\n const snapshotted$ = xs.create({\n start: (l: any) => { snapListener = l; snapSub = sequenced$.subscribe({}) },\n stop: () => { snapListener = null; snapSub?.unsubscribe() },\n })\n const onState = () => this.makeOnAction(sequenced$, true, this.action$)\n const onNormal = () => this.makeOnAction(snapshotted$, false, this.action$)\n\n\n const modelEntries = Object.entries(this.model)\n\n const reducers: Record<string, any[]> = {}\n const seenActionSinks = new Set<string>()\n const modelMap: Record<string, string[]> = {} // [diagnostics hook]\n\n modelEntries.forEach((entry) => {\n let [action, sinks]: [string, any] = entry\n\n // ACTION | DRIVER shorthand: 'MY_ACTION | EVENTS': (state) => ({ type: 'foo', data: 'bar' })\n if (action.includes('|')) {\n const parts = action.split('|').map((s: string) => s.trim())\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n fail('SYG211', this, `Invalid shorthand model entry '${action}'`, \"Use 'ACTION | SINK'\")\n }\n action = parts[0]\n sinks = { [parts[1]]: sinks }\n }\n\n if (typeof sinks === 'function') {\n sinks = { [this.stateSourceName]: sinks }\n }\n\n if (!isObj(sinks)) {\n fail('SYG212', this, `Model entry '${action}' must be a function or an object`, 'Use { STATE: reducer }')\n }\n\n const sinkEntries = Object.entries(sinks)\n\n sinkEntries.forEach((entry) => {\n const [sink, reducer] = entry\n\n const actionSinkKey = `${action}::${sink}`\n if (seenActionSinks.has(actionSinkKey)) {\n warn('SYG213', this, `Duplicate model entry for action '${action}' on sink '${sink}'; both run`, 'Remove the duplicate')\n }\n seenActionSinks.add(actionSinkKey)\n ;(modelMap[action] ||= []).push(sink) // [diagnostics hook]\n\n // EFFECT sink: run the reducer for side effects only, no state change or sink output\n if (sink === EFFECT_SINK_NAME) {\n const effect$ = this.makeEffectHandler(snapshotted$, action, reducer, this.action$)\n if (Array.isArray(reducers[sink])) {\n reducers[sink].push(effect$)\n } else {\n reducers[sink] = [effect$]\n }\n return\n }\n\n const isStateSink = (sink === this.stateSourceName)\n const isParentSink = (sink === PARENT_SINK_NAME)\n\n const on = isStateSink ? onState() : onNormal()\n const on$ = isParentSink ? on(action, reducer).map((value: any) => ({ name: this.name, component: this.view, value })) : on(action, reducer)\n\n const wrapped$ = on$\n .compose(this.log((data: any) => {\n if (isStateSink) {\n return `<${action}> State reducer added`\n } else if (isParentSink) {\n return `<${action}> Data sent to parent component: ${JSON.stringify(data.value).replaceAll('\"', '')}`\n } else {\n const extra = data && (data.type || data.command || data.name || data.key || (Array.isArray(data) && 'Array') || data)\n return `<${action}> Data sent to [${sink}]: ${JSON.stringify(extra).replaceAll('\"', '')}`\n }\n }))\n\n if (Array.isArray(reducers[sink])) {\n reducers[sink].push(wrapped$)\n } else {\n reducers[sink] = [wrapped$]\n }\n })\n })\n\n const model$ = Object.entries(reducers).reduce((acc: Record<string, any>, entry: [string, any]) => {\n const [sink, streams] = entry\n acc[sink] = streams.length === 1 ? streams[0] : xs.merge(...streams)\n return acc\n }, {} as Record<string, any>)\n\n this.model$ = model$\n\n // [diagnostics hook]\n diag.onModel(this, modelMap)\n }\n\n initPeers$(): void {\n const initial: Record<string, any> = this.sourceNames.reduce((acc: Record<string, any>, name) => {\n if (name == this.DOMSourceName) {\n acc[name] = {}\n } else {\n acc[name] = []\n }\n return acc\n }, {} as Record<string, any>)\n\n this.peers$ = Object.entries(this.peers).reduce((acc: Record<string, any>, [peerName, peerFactory]) => {\n const peer$ = peerFactory(this.sources)\n this.sourceNames.forEach(source => {\n if (source == this.DOMSourceName) {\n acc[source][peerName] = peer$[source]\n } else {\n acc[source].push(peer$[source])\n }\n })\n return acc\n }, initial)\n }\n\n initChildSources$(): void {\n let newSourcesNext: any\n const childSources$ = xs.create({\n start: (listener: any) => {\n newSourcesNext = listener.next.bind(listener)\n },\n stop: (_: any) => {\n\n }\n }).map((sources: any) => xs.merge(...sources)).flatten()\n\n this.sources[CHILD_SOURCE_NAME] = {\n select: (nameOrComponent: any) => {\n const all$ = childSources$\n const filtered$ = typeof nameOrComponent === 'function'\n ? all$.filter((entry: any) => entry.component === nameOrComponent)\n : nameOrComponent\n ? all$.filter((entry: any) => entry.name === nameOrComponent)\n : all$\n const unwrapped$ = filtered$.map((entry: any) => entry.value)\n return unwrapped$\n }\n }\n\n this.newChildSources = (sources: any) => {\n if (typeof newSourcesNext === 'function') newSourcesNext(sources)\n }\n }\n\n initSubComponentSink$(): void {\n const subComponentSink$ = xs.create({\n start: (listener: any) => {\n this.newSubComponentSinks = listener.next.bind(listener)\n },\n stop: (_: any) => {\n\n }\n })\n this._subscriptions.push(subComponentSink$.subscribe({ next: (_: any) => _, error: (err: any) => logError('SYG901', this, 'Sub-component sink stream errored', ERR_FIX, err) }))\n this.subComponentSink$ = subComponentSink$.filter((sinks: any) => Object.keys(sinks).length > 0)\n }\n\n initSubComponentsRendered$(): void {\n const stream = xs.create({\n start: (listener: any) => {\n this.triggerSubComponentsRendered = listener.next.bind(listener)\n },\n stop: (_: any) => {\n\n }\n })\n this.subComponentsRendered$ = stream.startWith(null)\n }\n\n initVdom$(): void {\n if (typeof this.view != 'function') {\n this.vdom$ = xs.of(null)\n return\n }\n\n const renderParameters$ = this.collectRenderParameters()\n\n this.vdom$ = renderParameters$\n .map((params: any) => {\n const { props, state, children, slots, context, ...peers }: any = params\n const { sygnalFactory, sygnalOptions, ...sanitizedProps}: any = props || {}\n try {\n return this.view({ ...sanitizedProps, state, children, slots: slots || {}, context, peers }, state, context, peers)\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n // B-022: an error handled by .onError is a warning, without the \"add .onError\" hint\n if (typeof this.onError === 'function') {\n try {\n const fallback = this.onError(error, { componentName: this.name })\n warn('SYG406', this, 'View threw; rendered the onError fallback', undefined, error)\n return fallback\n } catch (fallbackErr) {\n logError('SYG406', this, 'View threw; rendering the error fallback', undefined, error)\n logError('SYG407', this, 'onError threw; rendering an empty error <div>', 'Make onError return a vnode', fallbackErr)\n }\n } else logError('SYG406', this, 'View threw; rendering the error fallback', 'Add .onError for a custom fallback', error)\n return { sel: 'div', data: { attrs: { 'data-sygnal-error': this.name } }, children: [] }\n }\n })\n .compose(this.log('View rendered'))\n .map((vDom: any) => vDom || { sel: 'div', data: {}, children: [] })\n .map((vdom: any) => preprocessVdom(vdom, this))\n .compose(this.instantiateSubComponents.bind(this))\n .filter((val: any) => val !== undefined)\n .compose(this.renderVdom.bind(this))\n\n }\n\n initSinks(): void {\n // Stamp this component's own EVENTS emissions with its info for devtools, before they are\n // merged with the sub-components' (B-023: stamping the merged sink made every ancestor\n // re-stamp, so the emitter was always the root). Non-enumerable (G-020), so sink values\n // still toEqual what the model returned.\n const ev$ = this.model$.EVENTS\n if (ev$) this.model$.EVENTS = ev$.map((ev: any) => Object.defineProperties({...ev}, {\n __emitterId: { value: this._componentNumber, configurable: true },\n __emitterName: { value: this.name, configurable: true },\n }))\n this.sinks = this.sourceNames.reduce((acc: Record<string, any>, name) => {\n if (name == this.DOMSourceName) return acc\n const subComponentSink$ = (this.subComponentSink$ && name !== PARENT_SINK_NAME) ? this.subComponentSink$.map((sinks: any) => sinks[name]).filter((sink: any) => !!sink).flatten() : xs.never()\n if (name === this.stateSourceName) {\n acc[name] = xs.merge((this.model$[name] || xs.never()), subComponentSink$, this.sources[this.stateSourceName].stream.filter((_: any) => false), ...(this.peers$[name] || []))\n } else {\n acc[name] = xs.merge((this.model$[name] || xs.never()), subComponentSink$, ...(this.peers$[name] || []))\n }\n return acc\n }, {} as Record<string, any>)\n\n this.sinks[this.DOMSourceName] = this.vdom$\n this.sinks[PARENT_SINK_NAME] = this.model$[PARENT_SINK_NAME] || xs.never()\n\n // EFFECT sink: subscribe to trigger side effects but don't expose as a driver sink\n if (this.model$[EFFECT_SINK_NAME]) {\n const effectSub = this.model$[EFFECT_SINK_NAME].subscribe({\n next: () => {},\n error: (err: any) => logError('SYG902', this, 'EFFECT stream errored; effects stop running', ERR_FIX, err),\n })\n this._subscriptions.push(effectSub)\n delete this.sinks[EFFECT_SINK_NAME]\n }\n // READY sink: if the component explicitly defined READY model entries, use them;\n // otherwise auto-emit true. Check the raw model object, not model$ (which always has keys for all sources).\n const hasExplicitReady = this.model && isObj(this.model) && Object.values(this.model).some(\n (sinks: any) => {\n if (isObj(sinks) && READY_SINK_NAME in sinks) return true\n return false\n }\n )\n if (hasExplicitReady) {\n this.sinks[READY_SINK_NAME] = this.model$[READY_SINK_NAME]\n this.sinks[READY_SINK_NAME].__explicitReady = true\n } else {\n this.sinks[READY_SINK_NAME] = xs.of(true)\n }\n }\n\n makeOnAction(action$: any, isStateSink: boolean = true, rootAction$?: any): (name: string, reducer: any) => any {\n rootAction$ = rootAction$ || action$\n return (name, reducer) => {\n const filtered$ = action$.filter(({type}: any) => type == name)\n\n let returnStream$\n if (typeof reducer === 'function') {\n returnStream$ = filtered$.map((action: any) => {\n const next = (type: any, data: any, delay=10) => {\n if (typeof delay !== 'number') fail('SYG215', this, `next() delay in '${name}' must be a number`, \"Use next('ACTION', data, ms)\")\n // put the \"next\" action request at the end of the event loop so the \"current\" action completes first\n setTimeout(() => {\n // push the \"next\" action request into the action$ stream\n rootAction$.shamefullySendNext({ type, data })\n }, delay)\n this.log(`<${name}> Triggered a next() action: <${type}> ${delay}ms delay`, true)\n }\n\n const props = { ...this.currentProps, children: this.currentChildren, slots: this.currentSlots || {}, context: this.currentContext }\n\n let data = action.data\n if (isStateSink) {\n // withState applies reducers in microtasks, so none is legitimately pending at the\n // next macrotask: reset then, in case one was never applied (e.g. app disposed)\n if (!pendingReducers++) setTimeout(() => { pendingReducers = 0 })\n let applied = false\n return (state: any) => {\n if (!applied && pendingReducers) { applied = true; pendingReducers-- }\n // Reduce from the fresh argument, not currentState (B-013, 1H-3): below a\n // Collection, currentState lags behind instantiateCollection's debounce, so a\n // second same-tick action would start from the pre-update state. The parents'\n // lenses add their calculated fields, so it matches what the view gets.\n const fresh = typeof state !== 'undefined'\n const _state = this.isSubComponent && !fresh ? this.currentState : state\n try {\n const enhancedState = this.addCalculated(_state)\n props.state = enhancedState\n const newState = reducer(enhancedState, data, next, props)\n if (isAbort(newState)) return _state\n // [diagnostics hook]\n diag.onReducer(this, name, _state, newState, this.stateSourceName)\n const result = this.cleanupCalculated(newState)\n // B-013: later same-tick actions' non-STATE sinks snapshot currentState (B-003)\n if (fresh) this.currentState = result\n return result\n } catch (err) {\n logError('SYG216', this, `Reducer for '${name}' threw; state unchanged`, ERR_FIX, err)\n return _state\n }\n }\n } else {\n try {\n const enhancedState = this.addCalculated(STATE_SNAPSHOT in action ? action[STATE_SNAPSHOT] : this.currentState)\n props.state = enhancedState\n const reduced = reducer(enhancedState, data, next, props)\n // B-029: ABORT = send nothing (filtered below), before the type checks\n if (isAbort(reduced)) return reduced\n const type = typeof reduced\n if (isObj(reduced) || ['string', 'number', 'boolean', 'function'].includes(type)) return reduced\n if (type === 'undefined') {\n warn('SYG217', this, `Reducer for '${name}' sent undefined to the driver`, 'Return a value, or ABORT to send nothing')\n return reduced\n }\n fail('SYG218', this, `Reducer for '${name}' returned a ${type}`, 'Return a value, or ABORT to send nothing')\n } catch (err) {\n logError('SYG216', this, `Reducer for '${name}' threw; nothing sent`, ERR_FIX, err)\n return ABORT\n }\n }\n }).filter((result: any) => !isAbort(result))\n } else if (reducer === undefined || reducer === true) {\n returnStream$ = filtered$.map(({data}: any) => data)\n } else {\n const value = reducer\n returnStream$ = filtered$.mapTo(value)\n }\n\n return returnStream$\n }\n }\n\n makeEffectHandler(action$: any, name: string, reducer: any, rootAction$: any = action$): any {\n const filtered$ = action$.filter(({type}: any) => type == name)\n\n return filtered$.map((action: any) => {\n if (typeof reducer === 'function') {\n const next = (type: any, data: any, delay=10) => {\n if (typeof delay !== 'number') fail('SYG215', this, `next() delay in '${name}' must be a number`, \"Use next('ACTION', data, ms)\")\n setTimeout(() => {\n rootAction$.shamefullySendNext({ type, data })\n }, delay)\n this.log(`<${name}> EFFECT triggered a next() action: <${type}> ${delay}ms delay`, true)\n }\n\n try {\n const enhancedState = this.addCalculated(STATE_SNAPSHOT in action ? action[STATE_SNAPSHOT] : this.currentState)\n const props = { ...this.currentProps, children: this.currentChildren, slots: this.currentSlots || {}, context: this.currentContext, state: enhancedState }\n const result = reducer(enhancedState, action.data, next, props)\n if (result !== undefined && !isAbort(result)) {\n warn('SYG219', this, `EFFECT handler '${name}' returned a value, which is ignored`, 'Use a STATE or driver sink')\n }\n } catch (err) {\n logError('SYG214', this, `EFFECT handler '${name}' threw`, ERR_FIX, err)\n }\n }\n return null\n }).filter((_: any) => false) // EFFECT never emits — stream is consumed but produces no output\n }\n\n createMemoizedAddCalculated(): (state: any) => any {\n let lastState: any\n let lastResult: any\n\n return function(this: Component, state: any) {\n if (!this.calculated || !isObj(state) || Array.isArray(state)) return state\n if (state === lastState) {\n return lastResult\n }\n if (!isObj(this.calculated)) fail('SYG606', this, 'calculated must be an object', 'Use calculated = { field: state => value }')\n\n const calculated = this.getCalculatedValues(state)\n if (!calculated) {\n lastState = state\n lastResult = state\n return state\n }\n\n const newState = { ...state, ...calculated }\n\n lastState = state\n lastResult = newState\n\n return newState\n }\n }\n\n getCalculatedValues(state: any): Record<string, any> | undefined {\n if (!this._calculatedOrder || this._calculatedOrder.length === 0) {\n return\n }\n\n const mergedState: Record<string, any> = { ...state }\n const computedSoFar: Record<string, any> = {}\n\n for (const [field, { fn, deps }] of this._calculatedOrder) {\n if (deps !== null && this._calculatedFieldCache) {\n const cache = this._calculatedFieldCache[field]\n const currentDepValues = deps.map(d => mergedState[d])\n\n if (cache.lastDepValues !== undefined) {\n let unchanged = true\n for (let i = 0; i < currentDepValues.length; i++) {\n if (currentDepValues[i] !== cache.lastDepValues[i]) {\n unchanged = false\n break\n }\n }\n if (unchanged) {\n computedSoFar[field] = cache.lastResult\n mergedState[field] = cache.lastResult\n continue\n }\n }\n\n try {\n const result = fn(mergedState)\n cache.lastDepValues = currentDepValues\n cache.lastResult = result\n computedSoFar[field] = result\n mergedState[field] = result\n } catch (e: unknown) {\n warn('SYG220', this, `Calculated field '${field}' threw (${e instanceof Error ? e.message : e}); skipped this update`, 'Guard against missing data')\n }\n } else {\n // No deps declared — always recompute\n try {\n const result = fn(mergedState)\n computedSoFar[field] = result\n mergedState[field] = result\n } catch (e: unknown) {\n warn('SYG220', this, `Calculated field '${field}' threw (${e instanceof Error ? e.message : e}); skipped this update`, 'Guard against missing data')\n }\n }\n }\n\n return computedSoFar\n }\n\n cleanupCalculated(incomingState: any): any {\n if (!incomingState || !isObj(incomingState) || Array.isArray(incomingState)) return incomingState\n const state = this.storeCalculatedInState ? this.addCalculated(incomingState) : incomingState\n const copy = { ...state }\n if (!this.calculated || this.storeCalculatedInState) return copy\n const keys = Object.keys(this.calculated)\n keys.forEach(key => {\n if (this.initialState && typeof this.initialState[key] !== 'undefined') {\n copy[key] = this.initialState[key]\n } else {\n delete copy[key]\n }\n })\n return copy\n }\n\n collectRenderParameters(): any {\n const state = this.sources[this.stateSourceName]\n const renderParams = { ...this.peers$[this.DOMSourceName] }\n\n const enhancedState = state && state.isolateSource(state, { get: (state: any) => this.addCalculated(state) })\n const stateStream = (enhancedState && enhancedState.stream) || xs.never()\n\n \n renderParams.state = stateStream.compose(dropRepeats(objIsEqual))\n\n if (this.sources.props$) {\n renderParams.props = this.sources.props$.compose(dropRepeats(propsIsEqual))\n }\n\n if (this._processedChildren$) {\n renderParams.children = this._processedChildren$.map((p: any) => p.children).compose(dropRepeats(objIsEqual))\n renderParams.slots = this._processedChildren$.map((p: any) => p.slots).compose(dropRepeats(objIsEqual))\n }\n\n if (this.context$) {\n renderParams.context = this.context$.compose(dropRepeats(objIsEqual))\n }\n\n const names: string[] = []\n const streams: any[] = []\n\n Object.entries(renderParams).forEach(([name, stream]: [string, any]) => {\n names.push(name)\n streams.push(stream)\n })\n\n const combined = xs.combine(...streams)\n .compose(debounce(1))\n // map the streams from an array back to an object with the render parameter names as the keys\n .map((arr: any) => {\n const params = names.reduce((acc: Record<string, any>, name, index) => {\n acc[name] = arr[index]\n if (name === 'state') {\n acc[this.stateSourceName] = arr[index]\n acc.calculated = (arr[index] && this.getCalculatedValues(arr[index])) || {}\n }\n return acc\n }, {} as Record<string, any>)\n return params\n })\n\n return combined\n }\n\n instantiateSubComponents(vDom$: any): any {\n // Build the component name Set once outside the fold — avoids rebuilding per render\n const componentNameSet = new Set(['collection', 'switchable', 'sygnal-factory', ...Object.keys(this.components)])\n\n return vDom$.fold((previousComponents: any, vDom: any) => {\n const foundComponents = getComponents(vDom, componentNameSet)\n const entries = Object.entries(foundComponents)\n\n const rootEntry: Record<string, any> = { '::ROOT::': vDom }\n\n if (entries.length === 0) {\n // Dispose any previously active sub-components\n this._activeSubComponents.forEach((entry) => {\n if (entry?.sink$?.__dispose) entry.sink$.__dispose()\n })\n this._activeSubComponents.clear()\n return rootEntry\n }\n\n const sinkArrsByType: Record<string, any[]> = {}\n const childSources: any[] = []\n let newInstanceCount = 0\n\n const newComponents = entries.reduce((acc, [id, el]) => {\n const data = el.data\n const props = data.props || {}\n // a string-tag component with a single text child is a text-only vnode (B-011)\n const children = el.children || (el.text != null ? [{ text: el.text }] : [])\n\n const isCollection = data.isCollection || false\n const isSwitchable = data.isSwitchable || false\n\n const addSinks = (sinks: any) => {\n Object.entries(sinks).forEach(([name, stream]: [string, any]) => {\n sinkArrsByType[name] ||= []\n if (name === PARENT_SINK_NAME) {\n childSources.push(stream)\n } else if (name !== this.DOMSourceName && name !== READY_SINK_NAME) {\n sinkArrsByType[name].push(stream)\n }\n })\n }\n\n\n if (previousComponents[id]) {\n const entry = previousComponents[id]\n acc[id] = entry\n entry.props$.shamefullySendNext(props)\n entry.children$.shamefullySendNext(children)\n addSinks(entry.sink$)\n return acc\n }\n\n const props$ = xs.create().startWith(props)\n const children$ = xs.create().startWith(children)\n\n let instantiator\n\n if (isCollection) {\n instantiator = this.instantiateCollection.bind(this)\n } else if (isSwitchable) {\n instantiator = this.instantiateSwitchable.bind(this)\n } else {\n instantiator = this.instantiateCustomComponent.bind(this)\n }\n\n newInstanceCount++\n\n let sink$\n try {\n sink$ = instantiator(el, props$, children$)\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n logError('SYG408', this, 'Sub-component threw; rendering the error fallback', ERR_FIX, error)\n let fallbackVNode = { sel: 'div', data: { attrs: { 'data-sygnal-error': this.name } }, children: [] }\n if (typeof this.onError === 'function') {\n try {\n fallbackVNode = this.onError(error, { componentName: this.name }) || fallbackVNode\n } catch (fallbackErr) {\n logError('SYG407', this, 'onError threw; rendering an empty error <div>', 'Make onError return a vnode', fallbackErr)\n }\n }\n sink$ = { [this.DOMSourceName]: xs.of(fallbackVNode) }\n }\n\n sink$[this.DOMSourceName] = sink$[this.DOMSourceName] ? this.makeCoordinatedSubComponentDomSink(sink$[this.DOMSourceName]) : xs.never()\n\n acc[id] = { sink$, props$, children$ }\n this._activeSubComponents.set(id, acc[id])\n\n addSinks(sink$)\n\n return acc\n }, rootEntry)\n\n const mergedSinksByType = Object.entries(sinkArrsByType).reduce((acc: Record<string, any>, [name, streamArr]: [string, any]) => {\n if (streamArr.length === 0) return acc\n acc[name] = streamArr.length === 1 ? streamArr[0] : xs.merge(...streamArr)\n return acc\n }, {} as Record<string, any>)\n\n // Dispose removed sub-components\n const currentIds = new Set(Object.keys(newComponents))\n this._activeSubComponents.forEach((entry, id) => {\n if (!currentIds.has(id)) {\n if (entry?.sink$?.__dispose) entry.sink$.__dispose()\n this._activeSubComponents.delete(id)\n delete this._childReadyState[id]\n }\n })\n\n this.newSubComponentSinks(mergedSinksByType)\n this.newChildSources(childSources)\n\n\n if (newInstanceCount > 0) this.log(`New sub components instantiated: ${newInstanceCount}`, true)\n\n return newComponents\n }, {})\n }\n\n makeCoordinatedSubComponentDomSink(domSink$: any): any {\n return domSink$\n .debug((_: any) => this.triggerSubComponentsRendered())\n .remember()\n }\n\n // A child's reducers get their state through its lens from this component's raw reducer\n // state; adding the calculated fields here gives them what the child's view gets (1H-3).\n withCalculated(lense: any): any {\n return this.calculated ? { get: (state: any) => lense.get(isObj(state) ? this.addCalculated(state) : state), set: lense.set } : lense\n }\n\n createSubComponentLense(stateField: any, componentType: string, defaultState?: any): any {\n const baseLense = {\n get: (state: any) => state,\n set: (_oldState: any, newState: any) => newState\n }\n\n if (typeof stateField === 'undefined') return baseLense\n\n if (typeof stateField === 'string') {\n return {\n get: (state: any) => {\n const slice = state[stateField]\n if (typeof slice === 'undefined' && defaultState) return defaultState\n return slice\n },\n set: (oldState: any, newState: any) => {\n if (this.calculated && stateField in this.calculated) {\n warn('SYG409', this, `${componentType} tried to update calculated field '${stateField}'; ignored`, 'Bind it to a non-calculated field')\n return oldState\n }\n return { ...oldState, [stateField]: newState }\n }\n }\n }\n\n if (isObj(stateField)) {\n if (typeof stateField.get !== 'function') {\n logError('SYG410', this, `${componentType} 'state' prop has no get(); it gets the parent's whole state`, 'Use a state key string or { get, set }')\n return baseLense\n }\n return { get: stateField.get, set: stateField.set }\n }\n\n logError('SYG410', this, `${componentType} 'state' prop is a ${typeof stateField}; it gets the parent's whole state`, 'Use a state key string or { get, set }')\n return baseLense\n }\n\n instantiateCollection(el: any, props$: any, children$: any): any {\n const data = el.data\n const props = data.props || {}\n let filter = typeof props.filter === 'function' ? props.filter : undefined\n let sort = sortFunctionFromProp(props.sort)\n\n const arrayOperators = {\n filter,\n sort\n }\n \n const state$ = xs.combine(this.sources[this.stateSourceName].stream.startWith(this.currentState), props$.startWith(props))\n // this debounce is important. it forces state and prop updates to happen at the same time\n // without this, changes to sort or filter won't happen properly\n .compose(debounce(1))\n .map(([state, props]: [any, any]) => {\n if (props.filter !== arrayOperators.filter) {\n arrayOperators.filter = typeof props.filter === 'function' ? props.filter : undefined\n }\n if (props.sort !== arrayOperators.sort) {\n arrayOperators.sort = sortFunctionFromProp(props.sort)\n }\n // calculated fields are added by the lens (B-013)\n return state\n })\n\n const stateSource = new StateSource(state$, this.stateSourceName)\n const stateField = props.from\n const collectionOf = props.of\n const idField = props.idfield || 'id'\n\n let lense\n let factory\n\n if (typeof collectionOf === 'function') {\n if (collectionOf.isSygnalComponent) {\n factory = collectionOf\n } else {\n const name = collectionOf.componentName || collectionOf.label || collectionOf.name || 'FUNCTION_COMPONENT'\n const view = collectionOf\n const { model, intent, hmrActions, context, peers, components, initialState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug } = collectionOf\n const options = { name, view, model, intent, hmrActions, context, peers, components, initialState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug }\n factory = component(options)\n }\n } else if (this.components[collectionOf]) {\n factory = this.components[collectionOf]\n } else {\n fail('SYG411', this, `Collection 'of' is not a component: ${collectionOf}`, 'Use of={ItemComponent}')\n }\n\n const fieldLense = {\n get: (state: any) => {\n if (!Array.isArray(state[stateField])) return []\n const items = state[stateField]\n const filtered = typeof arrayOperators.filter === 'function' ? items.filter(arrayOperators.filter) : items\n const sorted = typeof arrayOperators.sort === 'function' ? filtered.sort(arrayOperators.sort) : filtered\n const mapped = sorted.map((item: any, index: any) => {\n return (isObj(item)) ? { ...item, [idField]: item[idField] || index } : { value: item, [idField]: index }\n })\n\n return mapped\n },\n set: (oldState: any, newState: any) => {\n if (this.calculated && stateField in this.calculated) {\n warn('SYG409', this, `Collection tried to update calculated field '${stateField}'; ignored`, 'Bind it to a non-calculated field')\n return oldState\n }\n const updated = []\n for (const oldItem of oldState[stateField].map((item: any, index: any) => (isObj(item) ? { ...item, [idField]: item[idField] || index } : { __primitive: true, value: item, [idField]: index }))) {\n if (typeof arrayOperators.filter === 'function' && !arrayOperators.filter(oldItem)) {\n updated.push(oldItem.__primitive ? oldItem.value : oldItem)\n } else {\n const newItem = newState.find((item: any) => item[idField] === oldItem[idField])\n if (typeof newItem !== 'undefined') updated.push(oldItem.__primitive ? newItem.value : newItem)\n }\n }\n return { ...oldState, [stateField]: updated }\n }\n }\n\n if (stateField === undefined) {\n lense = {\n get: (state: any) => {\n if (!(state instanceof Array) && state.value && state.value instanceof Array) return state.value\n return state\n },\n set: (oldState: any, newState: any) => {\n return newState\n }\n }\n } else if (typeof stateField === 'string') {\n if (isObj(this.currentState)) {\n if(!(this.currentState && stateField in this.currentState) && !(this.calculated && stateField in this.calculated)) {\n const arrayFields = Object.keys(this.currentState).filter(k => Array.isArray(this.currentState[k]))\n logError('SYG401', this, `Collection from=\"${stateField}\" is not in state${arrayFields.length ? ` (array fields: '${arrayFields.join(\"', '\")}')` : ''}; it renders nothing`, 'Set it to an array in initialState')\n lense = undefined\n } else if (!Array.isArray(this.currentState[stateField])) {\n warn('SYG401', this, `Collection 'from' field '${stateField}' is not an array; it renders nothing`, 'Set it to an array in initialState')\n lense = fieldLense\n } else {\n lense = fieldLense\n }\n } else {\n if (!Array.isArray(this.currentState[stateField])) {\n warn('SYG401', this, `Collection 'from' field '${stateField}' is not an array; it renders nothing`, 'Set it to an array in initialState')\n lense = fieldLense\n } else {\n lense = fieldLense\n }\n }\n } else if (isObj(stateField)) {\n if (typeof stateField.get !== 'function') {\n logError('SYG412', this, \"Collection 'from' prop is invalid; it renders nothing\", 'Use a state key string or { get, set }', stateField)\n lense = undefined\n } else {\n lense = {\n get: (state: any) => {\n const newState = stateField.get(state)\n if (!Array.isArray(newState)) {\n warn('SYG401', this, \"Collection 'from' getter returned a non-array; it renders nothing\", 'Return an array from get()', newState)\n return []\n }\n return newState\n },\n set: stateField.set\n }\n }\n } else {\n logError('SYG412', this, \"Collection 'from' prop is invalid; it renders nothing\", 'Use a state key string or { get, set }', stateField)\n lense = undefined\n }\n\n // B-013: add this component's calculated fields inside the lens, not on state$, so the\n // items' reducers (which read through the lens from the raw state) see the same item\n // array as their views, e.g. for from={calculatedField} or a custom get().\n if (lense) lense = this.withCalculated(lense)\n\n // Strip collection-specific props and forward only user-defined extra props to each item\n const collectionKeys = ['of', 'from', 'filter', 'sort', 'idfield', 'className']\n const itemProps$ = props$.map((p: any) => {\n if (!p || typeof p !== 'object') return {}\n const itemProps: Record<string, any> = {}\n for (const key in p) {\n if (!collectionKeys.includes(key)) itemProps[key] = p[key]\n }\n return itemProps\n })\n\n const sources = { ...this.sources, [this.stateSourceName]: stateSource, props$: itemProps$, children$, __parentContext$: this.context$, PARENT: null, __parentComponentNumber: this._componentNumber }\n const sink$ = collection(factory, lense as any, { container: null as any })(sources)\n if (!isObj(sink$)) {\n fail('SYG903', this, 'Collection factory returned invalid sinks', 'Return a sinks object')\n }\n\n // Notify devtools of collection mount\n if (typeof window !== 'undefined' && (window as any).__SYGNAL_DEVTOOLS__?.connected) {\n const itemName = typeof collectionOf === 'function'\n ? (collectionOf.componentName || collectionOf.label || collectionOf.name || 'anonymous')\n : String(collectionOf)\n ;(window as any).__SYGNAL_DEVTOOLS__.onCollectionMounted(\n this._componentNumber, this.name, itemName,\n typeof stateField === 'string' ? stateField : null\n )\n }\n\n return sink$\n }\n\n instantiateSwitchable(el: any, props$: any, children$: any): any {\n const data = el.data\n const props = data.props || {}\n\n const state$ = this.sources[this.stateSourceName].stream.startWith(this.currentState)\n .map((state: any) => {\n return isObj(state) ? this.addCalculated(state) : state\n })\n\n const stateSource = new StateSource(state$, this.stateSourceName)\n const stateField = props.state\n const lense = this.withCalculated(this.createSubComponentLense(stateField, 'Switchable sub-component'))\n\n const switchableComponents = props.of\n const keys = Object.keys(switchableComponents)\n keys.forEach(key => {\n const current = switchableComponents[key]\n if (!current.isSygnalComponent) {\n const name = current.componentName || current.label || current.name || 'FUNCTION_COMPONENT'\n const view = current\n const { model, intent, hmrActions, context, peers, components, initialState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug } = current\n const options = { name, view, model, intent, hmrActions, context, peers, components, initialState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug }\n switchableComponents[key] = component(options)\n }\n })\n const sources = { ...this.sources, [this.stateSourceName]: stateSource, props$, children$, __parentContext$: this.context$, __parentComponentNumber: this._componentNumber }\n\n const sink$ = isolate(switchable(switchableComponents, props$.map((props: any) => props.current), ''), { [this.stateSourceName]: lense })(sources)\n\n if (!isObj(sink$)) {\n fail('SYG903', this, 'Switchable factory returned invalid sinks', 'Return a sinks object')\n }\n\n return sink$\n }\n\n instantiateCustomComponent(el: any, props$: any, children$: any): any {\n const componentName = el.sel\n const data = el.data\n const props = data.props || {}\n\n const state$ = this.sources[this.stateSourceName].stream.startWith(this.currentState)\n .map((state: any) => {\n return isObj(state) ? this.addCalculated(state) : state\n })\n\n let stateSource = new StateSource(state$, this.stateSourceName)\n const stateField = props.state\n\n if (typeof props.sygnalFactory !== 'function' && isObj(props.sygnalOptions)) {\n props.sygnalFactory = component(props.sygnalOptions)\n }\n\n const factory = componentName === 'sygnal-factory' ? props.sygnalFactory : (this.components[componentName] || props.sygnalFactory)\n if (!factory) {\n if (componentName === 'sygnal-factory') fail('SYG413', this, 'Unnamed component has no factory', 'Name the function, or set Comp.componentName')\n fail('SYG414', this, `Component '${componentName}' not found`, 'Import it, or add it to .components')\n }\n\n // Guard against sub-components accidentally overwriting parent state with .initialState\n const subInitialState = props.sygnalOptions?.initialState\n const subIsolatedState = props.sygnalOptions?.isolatedState\n if (subInitialState && !subIsolatedState) {\n const subName = props.sygnalOptions?.name || componentName\n fail('SYG405', subName, 'Sub-component initialState replaces the state its parent passes in', 'Remove initialState, or set isolatedState = true')\n }\n\n const subInitState = subIsolatedState ? subInitialState : undefined\n let lense = this.createSubComponentLense(stateField, 'Sub-component', subInitState)\n // B-008: isolatedState without a `state` prop = state local to this instance; the\n // parent's state is never replaced. It's kept off the parent's state stream (1H-9): the\n // child's reducers are applied below and feed its own state source, so a child write\n // doesn't produce a new parent state. Until the child first writes (INITIALIZE; never,\n // without a model) it reads the parent's state, as before.\n let local: any, local$: any\n if (subIsolatedState && typeof stateField === 'undefined') {\n local$ = xs.create()\n stateSource = new StateSource(xs.merge(state$.filter(() => local === undefined), local$), this.stateSourceName)\n }\n\n const sources: Record<string, any> = { ...this.sources, [this.stateSourceName]: stateSource, props$, children$, __parentContext$: this.context$, __parentComponentNumber: this._componentNumber }\n lense = local$ ? null : this.withCalculated(lense)\n\n // Detect Command objects in props and expose as commands$ source\n for (const key of Object.keys(props)) {\n const val = props[key]\n if (val && val.__sygnalCommand) {\n val._targetComponentName = componentName\n sources.commands$ = makeCommandSource(val as Command)\n break\n }\n }\n\n const sink$ = isolate(factory, { [this.stateSourceName]: lense })(sources)\n\n if (!isObj(sink$)) {\n const name = componentName === 'sygnal-factory' ? 'custom element' : componentName\n fail('SYG903', this, `Factory for ${name} returned invalid sinks`, 'Return a sinks object')\n }\n if (local$ && sink$[this.stateSourceName]) {\n sink$[this.stateSourceName] = sink$[this.stateSourceName]\n .map((reducer: any) => local$.shamefullySendNext(local = reducer(local === undefined ? this.addCalculated(this.currentState) : local)))\n .filter(() => false)\n }\n\n return sink$\n }\n\n renderVdom(componentInstances$: any): any {\n // Build the component name Set once — avoids rebuilding per render cycle\n const componentNameSet = new Set(['collection', 'switchable', 'sygnal-factory', ...Object.keys(this.components)])\n\n return xs.combine(this.subComponentsRendered$, componentInstances$, this._readyChanged$.startWith(null))\n .compose(debounce(1))\n .map(([_, components]: [any, any]) => {\n const root = components['::ROOT::']\n const entries = Object.entries(components).filter(([id]) => id !== '::ROOT::')\n\n if (entries.length === 0) {\n return xs.of(processSuspensePost(root))\n }\n\n const ids: string[] = []\n const vdom$ = entries\n .map(([id, val]: [string, any]) => {\n ids.push(id)\n return val.sink$[this.DOMSourceName].startWith(undefined)\n })\n\n if (vdom$.length === 0) return xs.of(root)\n\n // Track READY state on the component instance (persists across folds)\n for (const [id, val] of entries as [string, any]) {\n if (this._childReadyState[id] !== undefined) continue // already tracking\n const readySink = val.sink$[READY_SINK_NAME]\n if (readySink) {\n const isExplicit = readySink.__explicitReady\n this._childReadyState[id] = isExplicit ? false : true\n readySink.addListener({\n next: (ready: any) => {\n const wasReady = this._childReadyState[id]\n this._childReadyState[id] = !!ready\n // When READY state changes, trigger a re-render\n if (wasReady !== !!ready) {\n if (this._readyChangedListener) {\n setTimeout(() => {\n this._readyChangedListener?.next(null)\n }, 0)\n }\n if (typeof window !== 'undefined' && (window as any).__SYGNAL_DEVTOOLS__?.connected) {\n (window as any).__SYGNAL_DEVTOOLS__.onReadyChanged(this._componentNumber, this.name, id, !!ready)\n }\n }\n },\n error: () => {},\n complete: () => {},\n })\n } else {\n this._childReadyState[id] = true\n }\n }\n\n return xs.combine(...vdom$)\n .filter((vdoms: any) => vdoms.every((v: any) => v !== undefined))\n .map((vdoms: any) => {\n const withIds = vdoms.reduce((acc: Record<string, any>, vdom: any, index: any) => {\n acc[ids[index]] = vdom\n return acc\n }, {} as Record<string, any>)\n const injected = injectComponents(root, withIds, componentNameSet, 'r', undefined, this._childReadyState)\n return processSuspensePost(injected)\n })\n })\n .flatten()\n .filter((val: any) => !!val)\n // [diagnostics hook]\n .map((vdom: any) => { diag.onRender(this, vdom); return vdom })\n .remember()\n }\n\n}\n\n\n\n\n\n\n\n/**\n * factory to create a logging function meant to be used inside of an xstream .compose()\n *\n * @param {String} context name of the component or file to be prepended to any messages\n * @return {Function}\n *\n * returned function accepts either a `String` of `Function`\n * `String` values will be logged to `console` as is\n * `Function` values will be called with the current `stream` value and the result will be logged to `console`\n * all output will be prepended with the `context` (ex. \"[CONTEXT] My output\")\n * ONLY outputs if the global `DEBUG` variable is set to `true`\n */\n function makeLog(context: string): any {\n return function (this: Component, msg: any, immediate: boolean = false) {\n const fixedMsg = (typeof msg === 'function') ? msg : (_: any) => msg\n if (immediate) {\n if (this.debug) {\n const text = `[${context}] ${fixedMsg(msg)}`\n console.log(text)\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__?.connected) {\n window.__SYGNAL_DEVTOOLS__.onDebugLog(this._componentNumber, text)\n }\n }\n return\n } else {\n return (stream: any) => {\n return stream.debug((msg: any) => {\n if (this.debug) {\n const text = `[${context}] ${fixedMsg(msg)}`\n console.log(text)\n if (typeof window !== 'undefined' && window.__SYGNAL_DEVTOOLS__?.connected) {\n window.__SYGNAL_DEVTOOLS__.onDebugLog(this._componentNumber, text)\n }\n }\n })\n }\n }\n }\n}\n\n\n\nfunction getComponents(currentElement: any, componentNameSet: Set<string>, path: string = 'r', parentId?: string, found?: Record<string, any>): Record<string, any> {\n if (!currentElement) return found || {}\n\n if (currentElement.data?.componentsProcessed) return found || {}\n if (path === 'r') currentElement.data.componentsProcessed = true\n\n // Allocate the result object only at the root call\n if (!found) found = {}\n\n const sel = currentElement.sel\n const isCollection = sel && sel.toLowerCase() === 'collection'\n const isSwitchable = sel && sel.toLowerCase() === 'switchable'\n const isComponent = (sel && componentNameSet.has(sel)) || typeof currentElement.data?.props?.sygnalFactory === 'function' || isObj(currentElement.data?.props?.sygnalOptions)\n const props = (currentElement.data && currentElement.data.props) || {}\n const children = currentElement.children || []\n\n let id = parentId\n if (isComponent) {\n id = getComponentIdFromElement(currentElement, path, parentId)\n if (isCollection) {\n if (!props.of) fail('SYG411', undefined, \"Collection is missing 'of'\", 'Use of={ItemComponent}')\n if (typeof props.of !== 'string' && typeof props.of !== 'function') fail('SYG411', undefined, `Collection 'of' is a ${typeof props.of}`, 'Use of={ItemComponent}')\n if (typeof props.of !== 'function' && !componentNameSet.has(props.of)) fail('SYG411', undefined, `Collection 'of' component not found: ${props.of}`, 'Use of={ItemComponent}')\n // an invalid 'from' is reported once, with the component name, by instantiateCollection (G-026)\n currentElement.data.isCollection = true\n currentElement.data.props ||= {}\n } else if (isSwitchable) {\n if (!props.of) fail('SYG415', undefined, \"Switchable is missing 'of'\", 'Use of={{ name: Component }}')\n if (!isObj(props.of)) fail('SYG415', undefined, `Switchable 'of' is a ${typeof props.of}`, 'Use of={{ name: Component }}')\n const switchableComponents = Object.values(props.of)\n if (!switchableComponents.every(comp => typeof comp === 'function')) fail('SYG415', undefined, \"Switchable 'of' has a value that is not a component\", 'Use of={{ name: Component }}')\n if (!props.current || (typeof props.current !== 'string' && typeof props.current !== 'function')) fail('SYG416', undefined, `Switchable 'current' is missing or a ${typeof props.current}`, \"Set current to a key of 'of'\")\n const switchableComponentNames = Object.keys(props.of)\n if (!switchableComponentNames.includes(props.current)) fail('SYG416', undefined, `Switchable 'current' '${props.current}' is not a key of 'of'`, \"Set current to a key of 'of'\")\n currentElement.data.isSwitchable = true\n }\n if (typeof props.key === 'undefined') (currentElement.data.props ||= {}).key = id\n found[id] = currentElement\n }\n\n for (let i = 0; i < children.length; i++) {\n getComponents(children[i], componentNameSet, `${path}.${i}`, id, found)\n }\n\n return found\n}\n\nfunction injectComponents(currentElement: any, components: Record<string, any>, componentNameSet: Set<string>, path: string = 'r', parentId?: string, readyMap?: Record<string, boolean>): any {\n if (!currentElement) return undefined\n\n const sel = currentElement.sel || 'NO SELECTOR'\n const isComponent = componentNameSet.has(sel) || typeof currentElement.data?.props?.sygnalFactory === 'function' || isObj(currentElement.data?.props?.sygnalOptions)\n const isCollection = currentElement?.data?.isCollection\n const children = currentElement.children || []\n\n let id = parentId\n if (isComponent) {\n id = getComponentIdFromElement(currentElement, path, parentId)\n let component = components[id]\n // Mark an injected VNode that is NOT ready (non-mutating) so Suspense can find it.\n // Ready children get no attribute (G-018): moving markup into a child component\n // must not change the DOM.\n if (readyMap && id && readyMap[id] === false && component && typeof component === 'object' && component.sel) {\n component = {\n ...component,\n data: {\n ...(component.data || {}),\n attrs: {\n ...(component.data?.attrs || {}),\n 'data-sygnal-ready': 'false'\n }\n }\n }\n }\n if (isCollection) {\n return {\n ...currentElement,\n sel: 'div',\n children: Array.isArray(component) ? component : [component]\n }\n } else {\n return component\n }\n } else if (children.length > 0) {\n const newChildren = children.map((child: any, i: any) => injectComponents(child, components, componentNameSet, `${path}.${i}`, id, readyMap)).flat()\n return { ...currentElement, children: newChildren }\n } else {\n return currentElement\n }\n}\n\nfunction getComponentIdFromElement(el: any, path: string, parentId?: string): string {\n const sel = el.sel\n const name = typeof sel === 'string' ? sel : 'functionComponent'\n const props = el.data?.props || {}\n const id = (props.id && JSON.stringify(props.id).replaceAll('\"', '')) || path\n const parentString = parentId ? `${parentId}|` : ''\n const fullId = `${parentString}${name}::${id}`\n return fullId\n}\n\n\nfunction hasNotReadyChild(vnode: any): boolean {\n if (!vnode || !vnode.sel) return false\n // Check for data-sygnal-ready=\"false\" on injected sub-components\n if (vnode.data?.attrs?.['data-sygnal-ready'] === 'false') return true\n // Check for lazy-loading placeholder (not yet instantiated as a component)\n if (vnode.data?.attrs?.['data-sygnal-lazy'] === 'loading') return true\n // Stop at inner Suspense boundaries — they handle their own children\n if (vnode.sel === 'suspense') return false\n if (Array.isArray(vnode.children)) {\n for (const child of vnode.children) {\n if (hasNotReadyChild(child)) return true\n }\n }\n return false\n}\n\nfunction processSuspensePost(vnode: any): any {\n if (!vnode || !vnode.sel) return vnode\n if (vnode.sel === 'suspense') {\n const props = vnode.data?.props || {}\n const fallback = props.fallback\n const children = vnode.children || []\n\n // Check if any child within this boundary is not ready\n const isPending = children.some(hasNotReadyChild)\n\n if (isPending && fallback) {\n // Render fallback\n if (typeof fallback === 'string') {\n return { sel: 'div', data: { attrs: { 'data-sygnal-suspense': 'pending' } }, children: [{ text: fallback }], text: undefined, elm: undefined, key: undefined }\n }\n return { sel: 'div', data: { attrs: { 'data-sygnal-suspense': 'pending' } }, children: [fallback], text: undefined, elm: undefined, key: undefined }\n }\n\n // All children ready or no fallback — render children directly\n if (children.length === 1) return processSuspensePost(children[0])\n return { sel: 'div', data: { attrs: { 'data-sygnal-suspense': 'resolved' } }, children: children.map((c: any) => processSuspensePost(c)), text: undefined, elm: undefined, key: undefined }\n }\n if (vnode.children && vnode.children.length > 0) {\n const newChildren = vnode.children.map((c: any) => processSuspensePost(c))\n return { ...vnode, children: newChildren }\n }\n return vnode\n}\n\nconst portalPatch = snabbdomInit(defaultModules);\n\nfunction applyTransitionHooks(vnode: any, name: string, duration?: number): any {\n const existingInsert = vnode.data?.hook?.insert\n const existingRemove = vnode.data?.hook?.remove\n\n vnode.data = vnode.data || {}\n vnode.data.hook = vnode.data.hook || {}\n\n vnode.data.hook.insert = (vn: any) => {\n if (existingInsert) existingInsert(vn)\n const el = vn.elm\n if (!el || !el.classList) return\n el.classList.add(`${name}-enter-from`, `${name}-enter-active`)\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.classList.remove(`${name}-enter-from`)\n el.classList.add(`${name}-enter-to`)\n onTransitionEnd(el, duration, () => {\n el.classList.remove(`${name}-enter-active`, `${name}-enter-to`)\n })\n })\n })\n }\n\n vnode.data.hook.remove = (vn: any, rm: () => void) => {\n if (existingRemove) existingRemove(vn, () => {})\n const el = vn.elm\n if (!el || !el.classList) { rm(); return }\n el.classList.add(`${name}-leave-from`, `${name}-leave-active`)\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.classList.remove(`${name}-leave-from`)\n el.classList.add(`${name}-leave-to`)\n onTransitionEnd(el, duration, () => {\n el.classList.remove(`${name}-leave-active`, `${name}-leave-to`)\n rm()\n })\n })\n })\n }\n\n return vnode\n}\n\n/**\n * Single-pass VNode preprocessor that handles lazy, portal, transition, and clientonly\n * nodes in one recursive walk instead of four separate passes.\n */\nfunction preprocessVdom(vnode: any, componentInstance: any): any {\n if (!vnode || !vnode.sel) return vnode\n\n // Handle lazy components\n const view = vnode.data?.props?.sygnalOptions?.view\n if (view && view.__sygnalLazy) {\n if (view.__sygnalLazyLoaded()) {\n const loaded = view.__sygnalLazyLoadedComponent\n if (loaded) {\n const props = vnode.data?.props || {}\n const name = loaded.componentName || loaded.label || loaded.name || 'LazyLoaded'\n const { model, intent, hmrActions, context, peers, components, initialState, isolatedState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug } = loaded\n const options = { name, view: loaded, model, intent, hmrActions, context, peers, components, initialState, isolatedState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug }\n const cleanProps = { ...props }\n delete cleanProps.sygnalOptions\n return {\n sel: name,\n data: { props: { ...cleanProps, sygnalOptions: options } },\n children: vnode.children || [],\n text: undefined, elm: undefined, key: undefined,\n }\n }\n } else {\n if (!view.__sygnalLazyReRenderScheduled && view.__sygnalLazyPromise && componentInstance) {\n view.__sygnalLazyReRenderScheduled = true\n view.__sygnalLazyPromise.then(() => {\n setTimeout(() => {\n const stateSource = componentInstance.sources?.[componentInstance.stateSourceName]\n if (stateSource && stateSource.stream) {\n const stateCopy = { ...componentInstance.currentState, __sygnalLazyTick: Date.now() }\n stateSource.stream.shamefullySendNext(stateCopy)\n }\n }, 0)\n })\n }\n }\n }\n\n // Handle portals\n if (vnode.sel === 'portal') {\n const target = vnode.data?.props?.target\n const children = vnode.children || []\n return createPortalPlaceholder(target, children)\n }\n\n // Handle transitions — recursively preprocess the child before applying hooks\n if (vnode.sel === 'transition') {\n const props = vnode.data?.props || {}\n const name = props.name || 'v'\n const duration = props.duration\n const children = vnode.children || []\n const child = children[0]\n if (!child || !child.sel) return child || vnode\n return applyTransitionHooks(preprocessVdom(child, componentInstance), name, duration)\n }\n\n // Handle clientonly — unwrap to children on client\n if (vnode.sel === 'clientonly') {\n const children = vnode.children || []\n if (children.length === 0) return { sel: 'div', data: {}, children: [] }\n if (children.length === 1) return preprocessVdom(children[0], componentInstance)\n return {\n sel: 'div',\n data: {},\n children: children.map((c: any) => preprocessVdom(c, componentInstance)),\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n }\n\n // Recurse into children\n if (vnode.children && vnode.children.length > 0) {\n vnode.children = vnode.children.map((child: any) => preprocessVdom(child, componentInstance))\n }\n return vnode\n}\n\n\nfunction onTransitionEnd(el: any, duration: number | undefined, cb: () => void): void {\n if (typeof duration === 'number') {\n setTimeout(cb, duration)\n } else {\n const handler = () => {\n el.removeEventListener('transitionend', handler)\n cb()\n }\n el.addEventListener('transitionend', handler)\n }\n}\n\n\nfunction portalMount(vnode: any, target: string, children: any[]): void {\n const container = document.querySelector(target)\n if (!container) {\n warn('SYG417', 'Portal', `Target '${target}' not found; content not rendered`, 'Render the target first')\n return\n }\n const anchor = document.createElement('div')\n container.appendChild(anchor)\n vnode.data._portalVnode = portalPatch(anchor, {\n sel: 'div', data: {}, children,\n text: undefined, elm: undefined, key: undefined,\n })\n vnode.data._portalContainer = container\n}\n\nfunction createPortalPlaceholder(target: string, children: any[]): any {\n const portalChildren = children || []\n\n return {\n sel: 'div',\n data: {\n style: { display: 'none' },\n attrs: { 'data-sygnal-portal': target },\n portalChildren,\n hook: {\n insert: (vnode: any) => {\n // Try synchronously first (target outside component tree or\n // plain element in the same patch cycle).\n const container = document.querySelector(target)\n if (container) {\n portalMount(vnode, target, portalChildren)\n return\n }\n // Target may be rendered by a sub-component whose streams\n // haven't settled yet (debounced). Retry a few times to\n // allow sub-component rendering to complete.\n let attempts = 0\n const tryMount = () => {\n if (vnode.data._portalVnode) return // already mounted\n if (document.querySelector(target)) {\n portalMount(vnode, target, portalChildren)\n } else if (++attempts < 10) {\n setTimeout(tryMount, 5)\n } else {\n warn('SYG417', 'Portal', `Target '${target}' not found; content not rendered`, 'Render the target first')\n }\n }\n setTimeout(tryMount, 5)\n },\n postpatch: (oldVnode: any, newVnode: any) => {\n const prevPortalVnode = oldVnode.data?._portalVnode\n const container = oldVnode.data?._portalContainer\n const newChildren = newVnode.data?.portalChildren || []\n if (!prevPortalVnode || !container) {\n // insert was deferred and hasn't fired yet, or target\n // wasn't found. Try mounting now with updated children.\n if (!newVnode.data._portalVnode) {\n portalMount(newVnode, target, newChildren)\n }\n return\n }\n newVnode.data._portalVnode = portalPatch(prevPortalVnode, {\n sel: 'div', data: {}, children: newChildren,\n text: undefined, elm: undefined, key: undefined,\n })\n newVnode.data._portalContainer = container\n },\n destroy: (vnode: any) => {\n const pv = vnode.data?._portalVnode\n if (pv && pv.elm && pv.elm.parentNode) {\n pv.elm.parentNode.removeChild(pv.elm)\n }\n },\n },\n },\n children: [],\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n}\n\n\nfunction propsIsEqual(obj1: any, obj2: any): boolean {\n return objIsEqual(sanitizeObject(obj1), sanitizeObject(obj2))\n}\n\nfunction objIsEqual(obj1: any, obj2?: any, maxDepth: number = 5, depth: number = 0): boolean {\n // Base case: if the current depth exceeds maxDepth, return true\n if (depth > maxDepth) {\n return false;\n }\n\n // If both are the same object or are both exactly null or undefined\n if (obj1 === obj2) {\n return true;\n }\n\n // If either is not an object (null, undefined, or primitive), directly compare\n if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {\n return false;\n }\n\n // Special handling for arrays\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) {\n return false;\n }\n for (let i = 0; i < obj1.length; i++) {\n if (!objIsEqual(obj1[i], obj2[i], maxDepth, depth + 1)) {\n return false;\n }\n }\n return true;\n }\n\n // Get keys of both objects\n const keys1 = Object.keys(obj1);\n\n // Check if the number of properties is different\n if (keys1.length !== Object.keys(obj2).length) {\n return false;\n }\n\n // Recursively check each property\n for (const key of keys1) {\n if (!(key in obj2)) {\n return false;\n }\n if (!objIsEqual(obj1[key], obj2[key], maxDepth, depth + 1)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction sanitizeObject(obj: any): any {\n if (!isObj(obj)) return obj\n const {state, of, from, filter, ...sanitized} = obj\n return sanitized\n}\n\nfunction isObj(obj: any): obj is Record<string, any> {\n return typeof obj === 'object' && obj !== null && !Array.isArray(obj)\n}\n\nconst SORT_FIX = \"Use a field name, { field: 'asc'|'desc'|1|-1 }, or a function\"\n\nfunction __baseSort(a: any, b: any, ascending: boolean = true): number {\n const direction = ascending ? 1 : -1\n switch(true) {\n case a > b: return 1 * direction\n case a < b: return -1 * direction\n default: return 0\n }\n}\n\nfunction __sortFunctionFromObj(item: Record<string, any>): ((a: any, b: any) => number) | undefined {\n const entries = Object.entries(item)\n if (entries.length > 1) {\n logError('SYG418', 'Collection', 'sort object must have one key; ignored', SORT_FIX, item)\n return undefined\n }\n const entry = entries[0]\n const [field, directionRaw] = entry\n if (!['string', 'number'].includes(typeof directionRaw)) {\n logError('SYG418', 'Collection', 'sort direction must be a string or number; ignored', SORT_FIX, item)\n return undefined\n }\n let ascending = true\n if (typeof directionRaw === 'string') {\n if (!['asc', 'desc'].includes(directionRaw.toLowerCase())) {\n logError('SYG418', 'Collection', \"sort direction must be 'asc' or 'desc'; ignored\", SORT_FIX, item)\n return undefined\n }\n ascending = directionRaw.toLowerCase() !== 'desc'\n }\n if (typeof directionRaw === 'number') {\n if (directionRaw !== 1 && directionRaw !== -1) {\n logError('SYG418', 'Collection', 'sort direction must be 1 or -1; ignored', SORT_FIX, item)\n return undefined\n }\n ascending = directionRaw === 1\n }\n return (a, b) => __baseSort(a[field], b[field], ascending)\n}\n\nfunction sortFunctionFromProp(sortProp: any): ((a: any, b: any) => number) | undefined {\n if (!sortProp) return undefined\n const propType = typeof sortProp\n // if function do nothing\n if (propType === 'function') return sortProp\n if (propType === 'string') {\n // if passed either 'asc' or 'desc' sort on the entire item\n if (sortProp.toLowerCase() === 'asc' || sortProp.toLowerCase() === 'desc') {\n const ascending = sortProp.toLowerCase() !== 'desc'\n return (a, b) => __baseSort(a, b, ascending)\n }\n // assume it's a field/property name, and sort it ascending\n const field = sortProp\n return (a, b) => __baseSort(a[field], b[field], true)\n } else if (Array.isArray(sortProp)) {\n const sorters = sortProp.map(item => {\n if (typeof item === 'function') return item\n if (typeof item === 'string' && !['asc', 'desc'].includes(item.toLowerCase())) return (a: any, b: any) => __baseSort(a[item], b[item], true)\n if (isObj(item)) {\n return __sortFunctionFromObj(item)\n }\n })\n \n return (a, b) => sorters.filter(sorter => typeof sorter === 'function').reduce((comparisonSoFar, currentSorter) => {\n if (comparisonSoFar !== 0) return comparisonSoFar\n return currentSorter(a, b)\n }, 0)\n } else if (isObj(sortProp)) {\n return __sortFunctionFromObj(sortProp)\n } else {\n logError('SYG418', 'Collection', 'Invalid sort prop; ignored', SORT_FIX, sortProp)\n return undefined\n }\n}\n\nfunction extractSlots(children: any[]): { slots: Record<string, any[]>, defaultChildren: any[] } {\n const slots: Record<string, any[]> = {}\n const defaultChildren: any[] = []\n\n for (const child of children) {\n if (child && child.sel === 'slot') {\n const name = (child.data?.props?.name) || 'default'\n if (!slots[name]) slots[name] = []\n const slotChildren = Array.isArray(child.children) ? child.children : (child.children ? [child.children] : [])\n slots[name].push(...slotChildren)\n } else {\n defaultChildren.push(child)\n }\n }\n\n if (defaultChildren.length > 0) {\n if (!slots['default']) slots['default'] = []\n slots['default'].push(...defaultChildren)\n }\n\n return { slots, defaultChildren: slots['default'] || [] }\n}\n","import {h} from './cycle/dom/snabbdom';\n\nconst Portal = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('portal', {props: sanitizedProps}, children);\n};\n(Portal as any).label = 'portal';\n(Portal as any).preventInstantiation = true;\n\nexport {Portal};\nexport default Portal;\n","import {h} from './cycle/dom/snabbdom';\n\nconst Transition = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('transition', {props: sanitizedProps}, children);\n};\n(Transition as any).label = 'transition';\n(Transition as any).preventInstantiation = true;\n\nexport {Transition};\nexport default Transition;\n","import {h} from './cycle/dom/snabbdom';\n\nconst Suspense = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('suspense', {props: sanitizedProps}, children);\n};\n(Suspense as any).label = 'suspense';\n(Suspense as any).preventInstantiation = true;\n\nexport {Suspense};\nexport default Suspense;\n","import {h} from './cycle/dom/snabbdom';\n\nconst Slot = (props: any) => {\n const {children, ...sanitizedProps} = props;\n return h('slot', {props: sanitizedProps}, children);\n};\n(Slot as any).label = 'slot';\n(Slot as any).preventInstantiation = true;\n\nexport {Slot};\nexport default Slot;\n","import xs, {Stream} from 'xstream';\n\nexport interface DragConfig {\n category: string;\n draggable?: string;\n dropZone?: string;\n accepts?: string;\n dragImage?: string;\n}\n\n// ─── Enriched DND Event Streams ──────────────────────────────────────────────\n\nexport interface EnrichedDragStream<T = any> extends Stream<T> {\n /** Extract a `data-*` attribute value from the payload's element/dataset.\n * Optional transform fn: `.data('id', Number)` */\n data(name: string): EnrichedDragStream<string | undefined>;\n data<R>(name: string, fn: (val: string | undefined) => R): EnrichedDragStream<R>;\n\n /** Extract the dragged element (dragstart) or dropZone element (drop) */\n element(): EnrichedDragStream<Element | null>;\n element<R>(fn: (el: Element | null) => R): EnrichedDragStream<R>;\n}\n\n/**\n * Adds chainable convenience methods to a DND event stream,\n * mirroring the DOM driver's `enrichEventStream` pattern.\n *\n * DND.dragstart('task').data('taskId')\n * DND.dragstart('task').data('taskId', Number)\n * DND.drop('lane').data('laneId')\n * DND.dragstart('task').element()\n */\nfunction enrichDragStream(stream$: any): any {\n // .data(name, fn?) — extract dataset[name] from dragstart payload,\n // or dropZone.dataset[name] from drop payload\n stream$.data = function data(name: string, fn?: (val: any) => any): any {\n const mapped = stream$.map((e: any) => {\n // dragstart payload: { element, dataset }\n // drop payload: { dropZone, insertBefore }\n const val = e?.dataset?.[name]\n ?? (e?.dropZone as HTMLElement)?.dataset?.[name]\n ?? (e?.element as HTMLElement)?.dataset?.[name]\n return fn ? fn(val) : val\n });\n return enrichDragStream(mapped);\n }\n\n // .element(fn?) — extract the primary element from the payload\n stream$.element = function element(fn?: (el: any) => any): any {\n const mapped = stream$.map((e: any) => {\n const el = e?.element ?? e?.dropZone ?? null\n return fn ? fn(el) : el\n });\n return enrichDragStream(mapped);\n }\n\n return stream$\n}\n\n// ─── DND Source Interfaces ───────────────────────────────────────────────────\n\nexport interface DragSourceEvents {\n events(eventType: string): EnrichedDragStream<any>;\n}\n\nexport interface DragSource {\n select(category: string): DragSourceEvents;\n dragstart(category: string): EnrichedDragStream<any>;\n dragend(category: string): Stream<any>;\n drop(category: string): EnrichedDragStream<any>;\n dragover(category: string): Stream<any>;\n dispose(): void;\n}\n\n// ─── Driver Factory ──────────────────────────────────────────────────────────\n\nexport function makeDragDriver(): (sink$: Stream<any>) => DragSource {\n return function dragDriver(sink$: Stream<any>): DragSource {\n const categories = new Map<string, DragConfig>();\n const bus = new EventTarget();\n const domListeners: Array<[string, EventListener]> = [];\n let draggingCategory: string | null = null;\n\n const register = (config: any) => {\n if (!config?.category) return;\n const existing = categories.get(config.category) ?? {};\n categories.set(config.category, {...existing, ...config});\n };\n\n sink$.subscribe({\n next(incoming: any) {\n const items = incoming?.configs ?? (Array.isArray(incoming) ? incoming : [incoming]);\n items.forEach(register);\n },\n error() {},\n complete() {},\n });\n\n const emit = (name: string, detail: any) =>\n bus.dispatchEvent(new CustomEvent(name, {detail}));\n\n const on = (type: string, fn: EventListener) => {\n document.addEventListener(type, fn);\n domListeners.push([type, fn]);\n };\n\n on('dragstart', (e: Event) => {\n const de = e as DragEvent;\n for (const [category, config] of categories) {\n if (!config.draggable) continue;\n const el = (de.target as Element).closest(config.draggable);\n if (!el) continue;\n draggingCategory = category;\n de.dataTransfer!.effectAllowed = 'move';\n\n if (config.dragImage) {\n const imgEl = el.closest(config.dragImage);\n if (imgEl) {\n const rect = imgEl.getBoundingClientRect();\n de.dataTransfer!.setDragImage(imgEl, de.clientX - rect.left, de.clientY - rect.top);\n }\n }\n\n emit(`${category}:dragstart`, {element: el, dataset: {...(el as HTMLElement).dataset}});\n return;\n }\n });\n\n on('dragend', () => {\n if (!draggingCategory) return;\n emit(`${draggingCategory}:dragend`, null);\n draggingCategory = null;\n });\n\n on('dragover', (e: Event) => {\n const de = e as DragEvent;\n for (const [, config] of categories) {\n if (!config.dropZone) continue;\n if (draggingCategory && config.accepts && config.accepts !== draggingCategory) continue;\n if ((de.target as Element).closest(config.dropZone)) {\n de.preventDefault();\n return;\n }\n }\n });\n\n on('drop', (e: Event) => {\n const de = e as DragEvent;\n for (const [category, config] of categories) {\n if (!config.dropZone) continue;\n if (draggingCategory && config.accepts && config.accepts !== draggingCategory) continue;\n const zone = (de.target as Element).closest(config.dropZone);\n if (!zone) continue;\n de.preventDefault();\n\n let insertBefore: Element | null = null;\n const draggingConfig = draggingCategory ? categories.get(draggingCategory) : null;\n if (draggingConfig?.draggable) {\n insertBefore = (de.target as Element).closest(draggingConfig.draggable) ?? null;\n }\n\n emit(`${category}:drop`, {dropZone: zone, insertBefore});\n return;\n }\n });\n\n const source: DragSource = {\n select(category: string): DragSourceEvents {\n return {\n events(eventType: string): EnrichedDragStream<any> {\n const busEventName = `${category}:${eventType}`;\n let handler: ((e: Event) => void) | undefined;\n const stream$ = xs.create({\n start(listener) {\n handler = ({detail}: any) => listener.next(detail);\n bus.addEventListener(busEventName, handler);\n },\n stop() {\n if (handler) bus.removeEventListener(busEventName, handler);\n },\n });\n return enrichDragStream(stream$);\n },\n };\n },\n\n dragstart(category: string) { return source.select(category).events('dragstart'); },\n dragend(category: string) { return source.select(category).events('dragend'); },\n drop(category: string) { return source.select(category).events('drop'); },\n dragover(category: string) { return source.select(category).events('dragover'); },\n\n dispose() {\n domListeners.forEach(([type, fn]) => document.removeEventListener(type, fn));\n },\n };\n\n return source;\n };\n}\n","import xs, {Stream} from 'xstream';\nimport {adapt} from './adapt';\nimport {\n DevToolEnabledSource,\n DisposeFunction,\n Drivers,\n SinkProxies,\n Sources,\n} from './types';\n\nexport function makeSinkProxies<D extends Drivers>(drivers: D): SinkProxies<D> {\n const sinkProxies: SinkProxies<D> = {} as SinkProxies<D>;\n for (const name in drivers) {\n if (Object.prototype.hasOwnProperty.call(drivers, name)) {\n (sinkProxies as any)[name] = xs.create<any>();\n }\n }\n return sinkProxies;\n}\n\nexport function callDrivers<D extends Drivers>(\n drivers: D,\n sinkProxies: SinkProxies<D>\n): Sources<D> {\n const sources: Sources<D> = {} as Sources<D>;\n for (const name in drivers) {\n if (Object.prototype.hasOwnProperty.call(drivers, name)) {\n (sources as any)[name] = (drivers[name] as any)((sinkProxies as any)[name], name);\n if ((sources as any)[name] && typeof (sources as any)[name] === 'object') {\n ((sources as any)[name] as DevToolEnabledSource)._isCycleSource = name;\n }\n }\n }\n return sources;\n}\n\n// NOTE: this will mutate `sources`.\nexport function adaptSources<So>(sources: So): So {\n for (const name in sources) {\n if (\n Object.prototype.hasOwnProperty.call(sources, name) &&\n (sources as any)[name] &&\n typeof ((sources as any)[name] as Stream<any>).shamefullySendNext ===\n 'function'\n ) {\n (sources as any)[name] = adapt((sources as any)[name] as Stream<any>);\n }\n }\n return sources;\n}\n\n/**\n * Notice that we do not replicate 'complete' from real sinks, in\n * SinksReplicators and ReplicationBuffers.\n * Complete is triggered only on disposeReplication. See discussion in #425\n * for details.\n */\ntype SinkReplicators<Si> = {\n [P in keyof Si]: {\n next(x: any): void;\n _n?(x: any): void;\n error(err: any): void;\n _e?(err: any): void;\n complete(): void;\n };\n};\n\ntype ReplicationBuffers<Si> = {\n [P in keyof Si]: {\n _n: Array<any>;\n _e: Array<any>;\n };\n};\n\nexport function replicateMany<Si extends any>(\n sinks: Si,\n sinkProxies: SinkProxies<Si>\n): DisposeFunction {\n const sinkNames: Array<keyof Si> = Object.keys(sinks as any).filter(\n name => !!(sinkProxies as any)[name]\n ) as Array<keyof Si>;\n\n let buffers: ReplicationBuffers<Si> = {} as ReplicationBuffers<Si>;\n const replicators: SinkReplicators<Si> = {} as SinkReplicators<Si>;\n sinkNames.forEach(name => {\n buffers[name] = {_n: [], _e: []};\n replicators[name] = {\n next: (x: any) => buffers[name]._n.push(x),\n error: (err: any) => buffers[name]._e.push(err),\n complete: () => {},\n };\n });\n\n const subscriptions = sinkNames.map(name =>\n xs.fromObservable(sinks[name] as any).subscribe(replicators[name])\n );\n\n sinkNames.forEach(name => {\n const listener = (sinkProxies as any)[name];\n const next = (x: any) => {\n queueMicrotask(() => listener._n(x));\n };\n const error = (err: any) => {\n queueMicrotask(() => {\n (console.error || console.log)(err);\n listener._e(err);\n });\n };\n buffers[name]._n.forEach(next);\n buffers[name]._e.forEach(error);\n replicators[name].next = next;\n replicators[name].error = error;\n // because sink.subscribe(replicator) had mutated replicator to add\n // _n, _e, _c, we must also update these:\n replicators[name]._n = next;\n replicators[name]._e = error;\n });\n buffers = null as any; // free up for GC\n\n return function disposeReplication() {\n subscriptions.forEach(s => s.unsubscribe());\n };\n}\n\nexport function disposeSinkProxies<Si>(sinkProxies: SinkProxies<Si>) {\n Object.keys(sinkProxies as any).forEach(name => (sinkProxies as any)[name]._c());\n}\n\nexport function disposeSources<So>(sources: So) {\n for (const k in sources) {\n if (\n Object.prototype.hasOwnProperty.call(sources, k) &&\n (sources as any)[k] &&\n (sources as any)[k].dispose\n ) {\n (sources as any)[k].dispose();\n }\n }\n}\n\nexport function isObjectEmpty(obj: any): boolean {\n return Object.keys(obj).length === 0;\n}\n","import {\n CycleProgram,\n DisposeFunction,\n Drivers,\n Sinks,\n MatchingDrivers,\n MatchingMain,\n Engine,\n} from './types';\nimport {\n adaptSources,\n callDrivers,\n makeSinkProxies,\n disposeSources,\n disposeSinkProxies,\n isObjectEmpty,\n replicateMany,\n} from './internals';\n\nexport {\n FantasyObserver,\n FantasySubscription,\n FantasyObservable,\n DevToolEnabledSource,\n Sources,\n Sinks,\n SinkProxies,\n Driver,\n Drivers,\n DisposeFunction,\n MatchingDrivers,\n MatchingMain,\n Main,\n CycleProgram,\n Engine,\n WidenStream,\n GetValidInputs,\n} from './types';\n\n/**\n * A function that prepares the Cycle application to be executed. Takes a `main`\n * function and prepares to circularly connects it to the given collection of\n * driver functions. As an output, `setup()` returns an object with three\n * properties: `sources`, `sinks` and `run`. Only when `run()` is called will\n * the application actually execute. Refer to the documentation of `run()` for\n * more details.\n *\n * @param {Function} main a function that takes `sources` as input and outputs `sinks`.\n * @param {Object} drivers an object where keys are driver names and values are driver functions.\n * @return {Object} an object with three properties: `sources`, `sinks` and `run`.\n * @function setup\n */\nexport function setup<\n D extends MatchingDrivers<D, M>,\n M extends MatchingMain<D, M>\n>(main: M, drivers: D): CycleProgram<D, M> {\n if (typeof main !== `function`) {\n throw new Error(\n `First argument given to Cycle must be the 'main' ` + `function.`\n );\n }\n if (typeof drivers !== `object` || drivers === null) {\n throw new Error(\n `Second argument given to Cycle must be an object ` +\n `with driver functions as properties.`\n );\n }\n if (isObjectEmpty(drivers)) {\n throw new Error(\n `Second argument given to Cycle must be an object ` +\n `with at least one driver function declared as a property.`\n );\n }\n\n const engine = setupReusable(drivers);\n const sinks = main(engine.sources);\n if (typeof window !== 'undefined') {\n window.Cyclejs = window.Cyclejs || {};\n window.Cyclejs.sinks = sinks;\n }\n function _run(): DisposeFunction {\n const disposeRun = engine.run(sinks);\n return function dispose() {\n disposeRun();\n engine.dispose();\n };\n }\n return {sinks, sources: engine.sources, run: _run};\n}\n\n/**\n * A partially-applied variant of setup() which accepts only the drivers, and\n * allows many `main` functions to execute and reuse this same set of drivers.\n *\n * @param {Object} drivers an object where keys are driver names and values are driver functions.\n * @return {Object} an object with three properties: `sources`, `run` and `dispose`.\n * @function setupReusable\n */\nexport function setupReusable<D extends Drivers>(drivers: D): Engine<D> {\n if (typeof drivers !== `object` || drivers === null) {\n throw new Error(\n `Argument given to setupReusable must be an object ` +\n `with driver functions as properties.`\n );\n }\n if (isObjectEmpty(drivers)) {\n throw new Error(\n `Argument given to setupReusable must be an object ` +\n `with at least one driver function declared as a property.`\n );\n }\n\n const sinkProxies = makeSinkProxies(drivers);\n const rawSources = callDrivers(drivers, sinkProxies);\n const sources = adaptSources(rawSources);\n function _run<M extends MatchingMain<D, M>>(\n sinks: Sinks<M>\n ): DisposeFunction {\n return replicateMany(sinks, sinkProxies as any);\n }\n function disposeEngine() {\n disposeSources(sources);\n disposeSinkProxies(sinkProxies);\n }\n return {sources, run: _run, dispose: disposeEngine};\n}\n\n/**\n * Takes a `main` function and circularly connects it to the given collection\n * of driver functions.\n *\n * @param {Function} main a function that takes `sources` as input and outputs `sinks`.\n * @param {Object} drivers an object where keys are driver names and values are driver functions.\n * @return {Function} a dispose function, used to terminate the execution of the Cycle.js program.\n * @function run\n */\nexport function run<\n D extends MatchingDrivers<D, M>,\n M extends MatchingMain<D, M>\n>(main: M, drivers: D): DisposeFunction {\n const program = setup(main, drivers);\n if (\n typeof window !== 'undefined' &&\n window.CyclejsDevTool_startGraphSerializer\n ) {\n window.CyclejsDevTool_startGraphSerializer(program.sinks);\n }\n return program.run();\n}\n\nexport default run;\n","import xs, {Stream} from 'xstream';\nimport {adapt} from '../cycle/run/adapt';\n// [diagnostics hook] no-op when diagnostics are off\nimport {onBusEmit, onBusSelect} from './diagnostics/index';\n\nexport interface EventBusSource {\n select(type?: string | string[]): any;\n}\n\nexport interface BusEvent {\n type: string;\n data?: any;\n}\n\nexport default function eventBusDriver(out$: Stream<BusEvent>): EventBusSource {\n const events = new EventTarget();\n\n out$.subscribe({\n next: (event: BusEvent) => {\n onBusEmit(event && event.type, (event as any)?.__emitterName);\n events.dispatchEvent(new CustomEvent('data', {detail: event}));\n if (typeof window !== 'undefined' && (window as any).__SYGNAL_DEVTOOLS__?.connected) {\n (window as any).__SYGNAL_DEVTOOLS__.onBusEvent(event);\n }\n },\n error: (err: any) =>\n console.error('[EVENTS driver] Error in sink stream:', err),\n });\n\n return {\n select: (type?: string | string[]) => {\n onBusSelect(type);\n const all = !type;\n const _type = Array.isArray(type) ? type : [type];\n let cb: ((e: Event) => void) | undefined;\n const in$ = xs.create<any>({\n start: (listener) => {\n cb = ({detail: event}: any) => {\n const data = (event && event.data) || null;\n if (all || _type.includes(event.type)) listener.next(data);\n };\n events.addEventListener('data', cb);\n },\n stop: () => {\n if (cb) events.removeEventListener('data', cb);\n },\n });\n\n return adapt(in$);\n },\n };\n}\n","import {Stream} from 'xstream';\n\nexport default function logDriver(out$: Stream<any>): void {\n out$.addListener({\n next: (val: any) => {\n console.log(val);\n },\n error: (err: any) => {\n console.error('[LOG driver] Error in sink stream:', err);\n },\n });\n}\n","import {getDiagnostics} from './diagnostics/index';\nimport type {Diagnostic} from './diagnostics/index';\n\nconst DEVTOOLS_SOURCE = '__SYGNAL_DEVTOOLS_PAGE__';\nconst EXTENSION_SOURCE = '__SYGNAL_DEVTOOLS_EXTENSION__';\nconst DEFAULT_MAX_HISTORY = 200;\n\ndeclare global {\n interface Window {\n __SYGNAL_DEVTOOLS__?: SygnalDevTools;\n __SYGNAL_DEVTOOLS_APP__?: {\n sinks?: { STATE?: { shamefullySendNext: (fn: any) => void } };\n };\n __SYGNAL_DEVTOOLS_PAGE__?: boolean;\n SYGNAL_DEBUG?: string | false;\n __SYGNAL_HMR_UPDATING?: boolean;\n __SYGNAL_HMR_STATE?: unknown;\n __SYGNAL_HMR_PERSISTED_STATE?: unknown;\n __SYGNAL_HMR_LAST_CAPTURED_STATE?: unknown;\n Cyclejs?: { sinks?: any };\n CyclejsDevTool_startGraphSerializer?: (sinks: any) => void;\n }\n}\n\ninterface StateHistoryEntry {\n componentId: number;\n componentName: string;\n timestamp: number;\n state: any;\n}\n\ninterface MviGraphData {\n sources: string[];\n actions: {name: string; sinks: string[]}[];\n contextProvides: string[];\n}\n\ninterface ComponentMeta {\n id: number;\n name: string;\n isSubComponent: boolean;\n hasModel: boolean;\n hasIntent: boolean;\n hasContext: boolean;\n hasCalculated: boolean;\n components: string[];\n parentId: number | null;\n children: number[];\n debug: boolean;\n createdAt: number;\n mviGraph: MviGraphData | null;\n _instanceRef: WeakRef<any>;\n}\n\ninterface ExtensionMessage {\n type: string;\n payload?: any;\n source?: string;\n}\n\nclass SygnalDevTools {\n _connected: boolean;\n _components: Map<number, ComponentMeta>;\n _stateHistory: StateHistoryEntry[];\n _maxHistory: number;\n\n constructor() {\n this._connected = false;\n this._components = new Map();\n this._stateHistory = [];\n this._maxHistory = DEFAULT_MAX_HISTORY;\n }\n\n /** Diagnostics collected by the shared diagnostics core (see src/extra/diagnostics). */\n getDiagnostics(): Diagnostic[] {\n return getDiagnostics();\n }\n\n get connected(): boolean {\n return this._connected && typeof window !== 'undefined';\n }\n\n init(): void {\n if (typeof window === 'undefined') return;\n\n window.__SYGNAL_DEVTOOLS__ = this;\n\n window.addEventListener('message', (event: MessageEvent) => {\n if (event.source !== window) return;\n if (event.data?.source === EXTENSION_SOURCE) {\n this._handleExtensionMessage(event.data);\n }\n });\n }\n\n _handleExtensionMessage(msg: ExtensionMessage): void {\n switch (msg.type) {\n case 'CONNECT':\n this._connected = true;\n if (msg.payload?.maxHistory) this._maxHistory = msg.payload.maxHistory;\n this._sendFullTree();\n break;\n case 'DISCONNECT':\n this._connected = false;\n break;\n case 'SET_DEBUG':\n this._setDebug(msg.payload);\n break;\n case 'TIME_TRAVEL':\n this._timeTravel(msg.payload);\n break;\n case 'SNAPSHOT':\n this._takeSnapshot();\n break;\n case 'RESTORE_SNAPSHOT':\n this._restoreSnapshot(msg.payload);\n break;\n case 'GET_STATE':\n this._sendComponentState(msg.payload.componentId);\n break;\n }\n }\n\n onComponentCreated(componentNumber: number, name: string, instance: any): void {\n const meta: ComponentMeta = {\n id: componentNumber,\n name: name,\n isSubComponent: instance.isSubComponent,\n hasModel: !!instance.model,\n hasIntent: !!instance.intent,\n hasContext: !!instance.context,\n hasCalculated: !!instance.calculated,\n components: Object.keys(instance.components || {}),\n parentId: null,\n children: [],\n debug: instance._debug,\n createdAt: Date.now(),\n mviGraph: this._extractMviGraph(instance),\n _instanceRef: new WeakRef(instance),\n };\n this._components.set(componentNumber, meta);\n\n if (!this.connected) return;\n this._post('COMPONENT_CREATED', this._serializeMeta(meta));\n }\n\n onStateChanged(componentNumber: number, name: string, state: any): void {\n if (!this.connected) return;\n\n const entry: StateHistoryEntry = {\n componentId: componentNumber,\n componentName: name,\n timestamp: Date.now(),\n state: this._safeClone(state),\n };\n\n this._stateHistory.push(entry);\n if (this._stateHistory.length > this._maxHistory) {\n this._stateHistory.shift();\n }\n\n this._post('STATE_CHANGED', {\n componentId: componentNumber,\n componentName: name,\n state: entry.state,\n });\n }\n\n onActionDispatched(componentNumber: number, name: string, actionType: string, data: any): void {\n if (!this.connected) return;\n this._post('ACTION_DISPATCHED', {\n componentId: componentNumber,\n componentName: name,\n actionType: actionType,\n data: this._safeClone(data),\n timestamp: Date.now(),\n });\n }\n\n onSubComponentRegistered(parentNumber: number, childNumber: number): void {\n const parent = this._components.get(parentNumber);\n const child = this._components.get(childNumber);\n if (parent && child) {\n child.parentId = parentNumber;\n if (!parent.children.includes(childNumber)) {\n parent.children.push(childNumber);\n }\n }\n\n if (!this.connected) return;\n this._post('TREE_UPDATED', {\n parentId: parentNumber,\n childId: childNumber,\n });\n }\n\n onContextChanged(componentNumber: number, name: string, context: any): void {\n if (!this.connected) return;\n this._post('CONTEXT_CHANGED', {\n componentId: componentNumber,\n componentName: name,\n context: this._safeClone(context),\n contextTrace: this._buildContextTrace(componentNumber, context),\n });\n }\n\n onPropsChanged(componentNumber: number, name: string, props: any): void {\n if (!this.connected) return;\n this._post('PROPS_CHANGED', {\n componentId: componentNumber,\n componentName: name,\n props: this._safeClone(props),\n });\n }\n\n onBusEvent(event: {type: string; data?: any; __emitterId?: number; __emitterName?: string}): void {\n if (!this.connected) return;\n this._post('BUS_EVENT', {\n type: event.type,\n data: this._safeClone(event.data),\n componentId: event.__emitterId ?? null,\n componentName: event.__emitterName ?? null,\n timestamp: Date.now(),\n });\n }\n\n onCommandSent(type: string, data: any, targetComponentId?: number, targetComponentName?: string): void {\n if (!this.connected) return;\n this._post('COMMAND_SENT', {\n type,\n data: this._safeClone(data),\n targetComponentName: targetComponentName ?? null,\n timestamp: Date.now(),\n });\n }\n\n onReadyChanged(parentId: number, parentName: string, childKey: string, ready: boolean): void {\n if (!this.connected) return;\n this._post('READY_CHANGED', {\n parentId,\n parentName,\n childKey,\n ready,\n timestamp: Date.now(),\n });\n }\n\n onCollectionMounted(parentId: number, parentName: string, itemComponentName: string, stateField: string | null): void {\n const meta = this._components.get(parentId);\n if (meta) {\n (meta as any).collection = {itemComponent: itemComponentName, stateField};\n }\n if (!this.connected) return;\n this._post('COLLECTION_MOUNTED', {\n parentId,\n parentName,\n itemComponent: itemComponentName,\n stateField,\n });\n }\n\n onComponentDisposed(componentNumber: number, name: string): void {\n const meta = this._components.get(componentNumber);\n if (meta) {\n (meta as any).disposed = true;\n (meta as any).disposedAt = Date.now();\n }\n\n if (!this.connected) return;\n this._post('COMPONENT_DISPOSED', {\n componentId: componentNumber,\n componentName: name,\n timestamp: Date.now(),\n });\n }\n\n onDebugLog(componentNumber: number, message: string): void {\n if (!this.connected) return;\n this._post('DEBUG_LOG', {\n componentId: componentNumber,\n message: message,\n timestamp: Date.now(),\n });\n }\n\n _setDebug({componentId, enabled}: {componentId?: number; enabled: boolean}): void {\n if (typeof componentId === 'undefined' || componentId === null) {\n if (typeof window !== 'undefined') window.SYGNAL_DEBUG = enabled ? 'true' : false;\n this._post('DEBUG_TOGGLED', {global: true, enabled});\n return;\n }\n\n const meta = this._components.get(componentId);\n if (meta && meta._instanceRef) {\n const instance = meta._instanceRef.deref();\n if (instance) {\n instance._debug = enabled;\n meta.debug = enabled;\n this._post('DEBUG_TOGGLED', {componentId, enabled});\n }\n }\n }\n\n _timeTravel({componentId, componentName, state}: {componentId: number; componentName: string; state: any}): void {\n if (componentId == null || !state) {\n console.warn('[Sygnal DevTools] _timeTravel: missing componentId or state', {componentId, hasState: !!state});\n return;\n }\n\n if (typeof window === 'undefined') return;\n\n const newState = this._safeClone(state);\n\n // Try per-component time-travel via the component's STATE sink (reducer stream)\n const meta = this._components.get(componentId);\n if (meta) {\n const instance = meta._instanceRef?.deref();\n if (!instance) {\n console.warn(`[Sygnal DevTools] _timeTravel: WeakRef for component #${componentId} (${componentName}) has been GC'd`);\n } else {\n // sinks[stateSourceName] is the reducer stream — push a reducer that replaces state\n const stateSinkName = instance.stateSourceName || 'STATE';\n const stateSink = instance.sinks?.[stateSinkName];\n if (stateSink?.shamefullySendNext) {\n stateSink.shamefullySendNext(() => ({...newState}));\n this._post('TIME_TRAVEL_APPLIED', {\n componentId,\n componentName,\n state: newState,\n });\n return;\n }\n console.warn(`[Sygnal DevTools] _timeTravel: component #${componentId} (${componentName}) has no STATE sink with shamefullySendNext. sinkName=${stateSinkName}, hasSinks=${!!instance.sinks}, sinkKeys=${instance.sinks ? Object.keys(instance.sinks).join(',') : 'none'}`);\n }\n } else {\n console.warn(`[Sygnal DevTools] _timeTravel: no meta for componentId ${componentId}`);\n }\n\n // Fall back to root STATE sink for root-level components\n const app = window.__SYGNAL_DEVTOOLS_APP__;\n if (app?.sinks?.STATE?.shamefullySendNext) {\n app.sinks.STATE.shamefullySendNext(() => ({...newState}));\n this._post('TIME_TRAVEL_APPLIED', {\n componentId,\n componentName,\n state: newState,\n });\n } else {\n console.warn(`[Sygnal DevTools] _timeTravel: no fallback root STATE sink available`);\n }\n }\n\n _takeSnapshot(): void {\n const entries: {componentId: number; componentName: string; state: any}[] = [];\n for (const [id, meta] of this._components) {\n if ((meta as any).disposed) continue;\n const instance = meta._instanceRef?.deref();\n if (instance?.currentState != null) {\n entries.push({\n componentId: id,\n componentName: meta.name,\n state: this._safeClone(instance.currentState),\n });\n }\n }\n this._post('SNAPSHOT_TAKEN', {\n entries,\n timestamp: Date.now(),\n });\n }\n\n _restoreSnapshot(snapshot: {entries: {componentId: number; componentName: string; state: any}[]}): void {\n if (!snapshot?.entries) return;\n for (const entry of snapshot.entries) {\n this._timeTravel(entry);\n }\n }\n\n _sendComponentState(componentId: number): void {\n const meta = this._components.get(componentId);\n if (meta && meta._instanceRef) {\n const instance = meta._instanceRef.deref();\n if (instance) {\n this._post('COMPONENT_STATE', {\n componentId,\n state: this._safeClone(instance.currentState),\n context: this._safeClone(instance.currentContext),\n contextTrace: this._buildContextTrace(componentId, instance.currentContext),\n props: this._safeClone(instance.currentProps),\n });\n }\n }\n }\n\n _buildContextTrace(componentId: number, context: any): {field: string; providerId: number; providerName: string}[] {\n if (!context || typeof context !== 'object') return [];\n const trace: {field: string; providerId: number; providerName: string}[] = [];\n const fields = Object.keys(context);\n\n for (const field of fields) {\n // Walk up parent chain to find which component provides this field\n let currentId: number | null = componentId;\n let found = false;\n while (currentId != null) {\n const meta = this._components.get(currentId);\n if (!meta) break;\n if (meta.mviGraph?.contextProvides?.includes(field)) {\n trace.push({field, providerId: meta.id, providerName: meta.name});\n found = true;\n break;\n }\n currentId = meta.parentId;\n }\n if (!found) {\n trace.push({field, providerId: -1, providerName: 'unknown'});\n }\n }\n return trace;\n }\n\n _sendFullTree(): void {\n const tree: any[] = [];\n for (const [, meta] of this._components) {\n const instance = meta._instanceRef?.deref();\n tree.push({\n ...this._serializeMeta(meta),\n state: instance ? this._safeClone(instance.currentState) : null,\n context: instance ? this._safeClone(instance.currentContext) : null,\n });\n }\n this._post('FULL_TREE', {\n components: tree,\n history: this._stateHistory,\n });\n }\n\n _post(type: string, payload: any): void {\n if (typeof window === 'undefined') return;\n window.postMessage(\n {\n source: DEVTOOLS_SOURCE,\n type,\n payload,\n },\n '*'\n );\n }\n\n _safeClone(obj: any): any {\n if (obj === undefined || obj === null) return obj;\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch (e) {\n return '[unserializable]';\n }\n }\n\n _extractMviGraph(instance: any): MviGraphData | null {\n if (!instance.model) return null;\n try {\n const sources = instance.sourceNames ? [...instance.sourceNames] : [];\n const actions: {name: string; sinks: string[]}[] = [];\n const model = instance.model;\n\n for (const key of Object.keys(model)) {\n let actionName = key;\n let entry = model[key];\n\n // Handle shorthand 'ACTION | SINK'\n if (key.includes('|')) {\n const parts = key.split('|').map((s: string) => s.trim());\n if (parts.length === 2 && parts[0] && parts[1]) {\n actionName = parts[0];\n actions.push({name: actionName, sinks: [parts[1]]});\n continue;\n }\n }\n\n // Function → targets STATE\n if (typeof entry === 'function') {\n actions.push({name: actionName, sinks: [instance.stateSourceName || 'STATE']});\n continue;\n }\n\n // Object → keys are sink names\n if (entry && typeof entry === 'object') {\n actions.push({name: actionName, sinks: Object.keys(entry)});\n continue;\n }\n }\n\n const contextProvides = instance.context && typeof instance.context === 'object'\n ? Object.keys(instance.context) : [];\n\n return {sources, actions, contextProvides};\n } catch (e) {\n return null;\n }\n }\n\n _serializeMeta(meta: ComponentMeta): Omit<ComponentMeta, '_instanceRef'> {\n const {_instanceRef, ...rest} = meta;\n return rest;\n }\n}\n\nlet instance: SygnalDevTools | null = null;\n\nexport function getDevTools(): SygnalDevTools {\n if (!instance) instance = new SygnalDevTools();\n return instance;\n}\n\nexport default getDevTools;\n","interface ModuleWithDefault {\n default: (...args: any[]) => any;\n}\n\ninterface HotModule {\n accept: (...args: any[]) => void;\n dispose?: (cb: () => void) => void;\n}\n\ninterface SygnalApp {\n hmr: (next: any, state?: any) => void;\n dispose?: () => void;\n sources?: {STATE?: {stream?: {_v?: any}}};\n}\n\nfunction normalizeModule(maybeModule: any): ModuleWithDefault | null {\n if (!maybeModule) return null;\n const candidate = maybeModule.default || maybeModule;\n if (typeof candidate !== 'function') return null;\n return maybeModule.default ? maybeModule : {default: candidate};\n}\n\nexport default function enableHMR(\n app: SygnalApp,\n hot: HotModule,\n loadComponent?: () => Promise<any>,\n acceptDependencies?: string | string[]\n): SygnalApp {\n if (!app || typeof app.hmr !== 'function') return app;\n if (!hot || typeof hot.accept !== 'function') return app;\n\n let applying = false;\n\n const apply = async (acceptedModules: any) => {\n if (applying) return;\n applying = true;\n const incoming = Array.isArray(acceptedModules)\n ? acceptedModules.find(Boolean)\n : acceptedModules;\n try {\n let next = normalizeModule(incoming);\n if (!next && typeof loadComponent === 'function') {\n const loaded = await loadComponent();\n next = normalizeModule(loaded);\n }\n if (next) {\n const explicitState = app?.sources?.STATE?.stream?._v;\n app.hmr(next, explicitState);\n }\n } finally {\n applying = false;\n }\n };\n\n const invoke = (modules: any) => {\n Promise.resolve(apply(modules)).catch(() => {});\n };\n\n if (typeof acceptDependencies !== 'undefined') {\n hot.accept(acceptDependencies, invoke);\n }\n // Fallback boundary for bundlers/environments where dependency accept is not triggered as expected.\n hot.accept(invoke);\n\n if (typeof hot.dispose === 'function' && typeof app.dispose === 'function') {\n hot.dispose(() => app.dispose!());\n }\n\n return app;\n}\n","type ClassArg = string | string[] | Record<string, boolean | (() => boolean)>;\n\n/**\n * Return a validated and properly separated string of CSS class names from\n * any number of strings, arrays, and objects.\n */\nexport default function classes(...args: ClassArg[]): string {\n return args\n .reduce<string[]>((acc, arg) => {\n if (typeof arg === 'string' && !acc.includes(arg)) {\n acc.push(...classes_processString(arg));\n } else if (Array.isArray(arg)) {\n acc.push(...classes_processArray(arg));\n } else if (typeof arg === 'object') {\n acc.push(...classes_processObject(arg));\n }\n return acc;\n }, [])\n .join(' ');\n}\n\nfunction isValidClassName(className: string): boolean {\n return /^[a-zA-Z0-9-_]+$/.test(className);\n}\n\nfunction classes_processString(str: string): string[] {\n if (typeof str !== 'string') throw new Error('Class name must be a string');\n return str\n .trim()\n .split(' ')\n .reduce<string[]>((acc, item) => {\n if (item.trim().length === 0) return acc;\n if (!isValidClassName(item))\n throw new Error(`${item} is not a valid CSS class name`);\n acc.push(item);\n return acc;\n }, []);\n}\n\nfunction classes_processArray(arr: string[]): string[] {\n return arr.map(classes_processString).flat();\n}\n\nfunction classes_processObject(\n obj: Record<string, boolean | (() => boolean)>\n): string[] {\n return Object.entries(obj)\n .filter(([_key, predicate]) =>\n typeof predicate === 'function' ? predicate() : !!predicate\n )\n .map(([key, _]) => {\n const trimmed = key.trim();\n if (!isValidClassName(trimmed))\n throw new Error(`${trimmed} is not a valid CSS class name`);\n return trimmed;\n });\n}\n","\nexport const nullv = (v: any): v is null => v === null\n\nexport const undefinedv = (v: any): v is undefined => v === undefined\n\nexport const number = (v: any): v is number => typeof v === 'number'\n\nexport const string = (v: any): v is string => typeof v === 'string'\n\nexport const text = (v: any): v is string | number => string(v) || number(v)\n\nexport const array = (v: any): v is any[] => Array.isArray(v)\n\nexport const object = (v: any): v is Record<string, any> => typeof v === 'object' && v !== null\n\nexport const fun = (v: any): v is Function => typeof v === 'function'\n\nexport const vnode = (v: any): boolean => object(v) && 'sel' in v && 'data' in v && 'children' in v && 'text' in v\n\nconst svgPropsMap: Record<string, number> = {\n // Container / structural\n svg: 1, g: 1, defs: 1, symbol: 1, use: 1,\n // Shape\n circle: 1, ellipse: 1, line: 1, path: 1, polygon: 1, polyline: 1, rect: 1,\n // Text (no HTML collision: HTML has no <text>, <tspan>, or <textPath>)\n text: 1, tspan: 1, textPath: 1,\n // Gradient / paint\n linearGradient: 1, radialGradient: 1, stop: 1, pattern: 1,\n // Clipping / masking\n clipPath: 1, mask: 1,\n // Marker\n marker: 1,\n // Filter primitives\n filter: 1, feBlend: 1, feColorMatrix: 1, feComponentTransfer: 1,\n feComposite: 1, feConvolveMatrix: 1, feDiffuseLighting: 1,\n feDisplacementMap: 1, feDropShadow: 1, feFlood: 1, feGaussianBlur: 1,\n feImage: 1, feMerge: 1, feMergeNode: 1, feMorphology: 1, feOffset: 1,\n fePointLight: 1, feSpecularLighting: 1, feSpotLight: 1, feTile: 1,\n feTurbulence: 1, feFuncR: 1, feFuncG: 1, feFuncB: 1, feFuncA: 1,\n // Descriptive (excluding 'title' — collides with HTML <title>)\n desc: 1, metadata: 1,\n // Other (excluding 'a', 'image', 'style', 'script' — collide with HTML)\n foreignObject: 1, switch: 1,\n // Animation\n animate: 1, animateMotion: 1, animateTransform: 1, set: 1, mpath: 1,\n}\n\nexport const svg = (v: any): boolean => v.sel in svgPropsMap\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","// TODO: stop using extend here\n// @ts-ignore — no type declarations for 'extend'\nimport _extend from 'extend'\n\nimport * as is from './is'\n\nexport const extend = (...objs: any[]): any => _extend(true, ...objs)\n\nexport const assign = (...objs: any[]): any => _extend(false, ...objs)\n\nexport const reduceDeep = <T>(arr: any[], fn: (acc: T, value: any) => T, initial: T): T => {\n let result = initial\n for (let i = 0; i < arr.length; i++) {\n const value = arr[i]\n if (is.array(value)) {\n result = reduceDeep(value, fn, result)\n } else {\n result = fn(result, value)\n }\n }\n return result\n}\n\nexport const mapObject = (obj: Record<string, any>, fn: (key: string, val: any) => any): any => Object.keys(obj).map(\n (key) => fn(key, obj[key])\n).reduce(\n (acc: any, curr: any) => extend(acc, curr),\n {}\n)\n\nexport const deepifyKeys = (obj: Record<string, any>, modules: Record<string, any>): any => mapObject(obj,\n (key: string, val: any) => {\n const dashIndex = key.indexOf('-')\n if (dashIndex > -1 && modules[key.slice(0, dashIndex)] !== undefined) {\n const moduleData = {\n [key.slice(dashIndex + 1)]: val\n }\n return {\n [key.slice(0, dashIndex)]: moduleData\n }\n }\n return { [key]: val }\n }\n)\n\nexport const flatifyKeys = (obj: Record<string, any>): any => mapObject(obj,\n (mod: string, data: any) => !is.object(data) ? ({ [mod]: data }) : mapObject(\n flatifyKeys(data),\n (key: string, val: any) => ({ [`${mod}-${key}`]: val })\n )\n)\n\nexport const omit = (key: string, obj: Record<string, any>): any => mapObject(obj,\n (mod: string, data: any) => mod !== key ? ({ [mod]: data }) : {}\n)\n","\nimport * as is from './is'\nimport * as fn from './fn'\n\nconst createTextElement = (text: any): any => !is.text(text) ? undefined : {\n text,\n sel: undefined,\n data: undefined,\n children: undefined,\n elm: undefined,\n key: undefined\n}\n\nconst applySvg = (vnode: any): any => {\n // Skip text vnodes (sel is undefined) and nullish values\n if (!vnode || is.undefinedv(vnode.sel)) return vnode\n\n const data = vnode.data || {}\n const props = data.props || {}\n const propsWithoutClassName = fn.omit('className', props)\n const classAttr = props.className !== undefined ? { class: props.className } : {}\n const mergedAttrs = fn.assign({}, propsWithoutClassName, classAttr, data.attrs || {})\n\n return fn.assign(vnode,\n { data: fn.omit('props', fn.assign({}, data,\n { ns: 'http://www.w3.org/2000/svg', attrs: mergedAttrs }\n )) },\n // foreignObject contains HTML, not SVG — do not recurse into its children\n { children: (!Array.isArray(vnode.children) || vnode.sel === 'foreignObject')\n ? vnode.children\n : vnode.children.map((child: any) => applySvg(child))\n }\n )\n}\n\nconst considerSvg = (vnode: any): any => !is.svg(vnode) ? vnode : applySvg(vnode)\n\nconst rewrites: Record<string, string | null> = {\n for: 'attrs',\n role: 'attrs',\n tabindex: 'attrs',\n 'aria-*': 'attrs',\n key: null\n}\n\nconst rewriteModules = (data: any, modules: Record<string, any>): any => fn.mapObject(data, (key: string, val: any) => {\n const inner = { [key]: val }\n if (rewrites[key] && modules[rewrites[key] as string] !== undefined) {\n return { [rewrites[key] as string]: inner }\n }\n if (rewrites[key] === null) {\n return {}\n }\n const keys = Object.keys(rewrites)\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]\n if (k.charAt(k.length - 1) === '*' && key.indexOf(k.slice(0, -1)) === 0 && modules[rewrites[k] as string] !== undefined) {\n return { [rewrites[k] as string]: inner }\n }\n }\n if (modules[key] !== undefined) {\n return { [modules[key] ? modules[key] : key]: val }\n }\n if (modules.props !== undefined) {\n return { props: inner }\n }\n return inner\n})\n\nconst applyFocusProps = (data: any): any => {\n if (!data.props) return data\n const { autoFocus, autoSelect, ...rest } = data.props\n if (!autoFocus && !autoSelect) return data\n\n data.props = rest\n data._autoFocus = !!autoFocus\n data._autoSelect = !!autoSelect\n\n const doFocus = (elm: any) => {\n if (elm && typeof elm.focus === 'function') {\n requestAnimationFrame(() => {\n elm.focus()\n if (autoSelect && typeof elm.select === 'function') {\n elm.select()\n }\n })\n }\n }\n\n const existingInsert = data.hook?.insert\n const existingPostpatch = data.hook?.postpatch\n data.hook = {\n ...data.hook,\n insert: (vnode: any) => {\n if (existingInsert) existingInsert(vnode)\n if (autoFocus || autoSelect) doFocus(vnode.elm)\n },\n postpatch: (oldVnode: any, vnode: any) => {\n if (existingPostpatch) existingPostpatch(oldVnode, vnode)\n const wasFocused = oldVnode.data?._autoFocus\n const isFocused = vnode.data?._autoFocus\n if (!wasFocused && isFocused) doFocus(vnode.elm)\n },\n }\n return data\n}\n\nconst applyRefProps = (data: any, ref: any): any => {\n if (!ref) return data\n\n const setRef = (elm: any) => {\n if (typeof ref === 'function') {\n ref(elm)\n } else if (ref && typeof ref === 'object' && 'current' in ref) {\n ref.current = elm\n }\n }\n\n const existingInsert = data.hook?.insert\n const existingDestroy = data.hook?.destroy\n const existingPostpatch = data.hook?.postpatch\n data.hook = {\n ...data.hook,\n insert: (vnode: any) => {\n if (existingInsert) existingInsert(vnode)\n setRef(vnode.elm)\n },\n postpatch: (_oldVnode: any, vnode: any) => {\n if (existingPostpatch) existingPostpatch(_oldVnode, vnode)\n setRef(vnode.elm)\n },\n destroy: (vnode: any) => {\n if (existingDestroy) existingDestroy(vnode)\n setRef(null)\n },\n }\n return data\n}\n\nconst sanitizeData = (data: any, modules: Record<string, any>): any => {\n const { ref, ...rest } = data\n const sanitized = applyFocusProps(rewriteModules(fn.deepifyKeys(rest, modules), modules))\n return applyRefProps(sanitized, ref)\n}\n\nconst sanitizeText = (children: any[]): string | undefined => children.length > 1 || !is.text(children[0]) ? undefined : children[0].toString()\n\nconst sanitizeChildren = (children: any[]): any[] => fn.reduceDeep(children, (acc: any[], child: any) => {\n const vnode = is.vnode(child) ? child : createTextElement(child)\n acc.push(vnode)\n return acc\n}\n, [])\n\nconst defaultModules: Record<string, string> = {\n attrs: '',\n props: '',\n class: '',\n data: 'dataset',\n style: '',\n hook: '',\n on: ''\n}\n\nexport const createElementWithModules = (modules: Record<string, any>) => {\n return (sel: any, data: any, ...children: any[]) => {\n if (typeof sel === 'undefined') {\n sel = 'UNDEFINED'\n // Pre-formatted (formatDiagnostic output) instead of diagnostics/legacy: the JSX\n // runtime entries bundle this file standalone and must not carry a second diagnostics core.\n console.error('[Sygnal SYG420] JSX: A JSX tag is undefined, so <UNDEFINED> is rendered instead. Import or define the component in this file. https://sygnal.js.org/reference/errors#syg420')\n }\n const isComponent = is.fun(sel)\n if (isComponent) {\n if ((sel as any).__sygnalFragment || sel.name === 'Fragment') {\n return sel(data || {}, children)\n }\n data ||= {}\n if (!(sel as any).isSygnalComponent) {\n const name = (sel as any).componentName || (sel as any).label || sel.name || 'FUNCTION_COMPONENT'\n const view = sel\n const { model, intent, hmrActions, context, peers, components, initialState, isolatedState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug, preventInstantiation } = sel as any\n if (preventInstantiation) {\n // children always stay an array here: Portal/Suspense/... read vnode.children\n return considerSvg({\n sel: name,\n data: data ? sanitizeData(data, modules) : {},\n children: sanitizeChildren(children),\n text: undefined,\n elm: undefined,\n key: data ? data.key : undefined\n })\n }\n const options = { name, view, model, intent, hmrActions, context, peers, components, initialState, isolatedState, calculated, storeCalculatedInState, DOMSourceName, stateSourceName, onError, debug }\n data.sygnalOptions = options\n sel = name\n } else {\n const factory = sel\n sel = (sel as any).componentName || (sel as any).label || sel.name || 'sygnal-factory'\n data.sygnalFactory = factory\n }\n }\n // B-011: a vnode is either text-only (`text`, no children) or has a children array,\n // never both; snabbdom's diff mishandles a vnode with both. A component placeholder\n // keeps an array so the component receives its text child via `children`.\n const text = isComponent ? undefined : sanitizeText(children)\n return considerSvg({\n sel,\n data: data ? sanitizeData(data, modules) : {},\n children: typeof text !== 'undefined' ? undefined : sanitizeChildren(children),\n text,\n elm: undefined,\n key: data ? data.key : undefined\n })\n }\n}\n\nexport const createElement = createElementWithModules(defaultModules)\n\nexport default {\n createElement,\n createElementWithModules\n}\n","/**\n * Server-Side Rendering utilities for Sygnal components.\n *\n * Renders Sygnal component trees to HTML strings without a browser DOM.\n * Handles sub-components, Collections, Suspense boundaries, and Portals.\n */\n\n// Void elements that must not have closing tags\nconst VOID_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr',\n])\n\n// Characters that need escaping in HTML text and attribute values\nconst ESC_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n}\n\nfunction escapeHtml(str: string): string {\n return String(str).replace(/[&<>\"']/g, (ch) => ESC_MAP[ch])\n}\n\n/**\n * Convert a CSS property name from camelCase to kebab-case.\n * E.g. \"backgroundColor\" → \"background-color\"\n * Handles vendor prefixes: \"WebkitTransform\" → \"-webkit-transform\"\n */\nfunction camelToKebab(str: string): string {\n return str\n .replace(/^(Webkit|Moz|Ms|O)/, (m) => '-' + m.toLowerCase())\n .replace(/([A-Z])/g, '-$1')\n .toLowerCase()\n}\n\n/**\n * Serialize an inline style object to a CSS string.\n */\nfunction serializeStyle(style: Record<string, any>): string {\n const parts: string[] = []\n for (const key of Object.keys(style)) {\n const val = style[key]\n if (val == null || val === '') continue\n // Skip snabbdom's delayed/remove/destroy style hooks\n if (key === 'delayed' || key === 'remove' || key === 'destroy') continue\n const cssKey = camelToKebab(key)\n parts.push(`${cssKey}: ${val}`)\n }\n return parts.join('; ')\n}\n\nexport interface RenderToStringOptions {\n /** Initial state for the root component */\n state?: any\n /** Props to pass to the root component */\n props?: Record<string, any>\n /** Context from a parent (for nested rendering) */\n context?: Record<string, any>\n /**\n * Embed serialized state in a <script> tag for client hydration.\n * When true, appends `<script>window.__SYGNAL_STATE__=...</script>`.\n * When a string, uses that as the variable name instead.\n */\n hydrateState?: boolean | string\n}\n\n/**\n * Render a Sygnal component to an HTML string.\n *\n * Calls the component's view function with the provided (or initial) state,\n * recursively renders sub-components, and serializes the VNode tree to HTML.\n *\n * ```ts\n * import { renderToString } from 'sygnal'\n *\n * const html = renderToString(App, { state: { count: 0 } })\n * // → '<div><h1>Count: 0</h1></div>'\n * ```\n */\nexport function renderToString(\n componentDef: any,\n options: RenderToStringOptions = {}\n): string {\n const {state, props = {}, context = {}, hydrateState} = options\n\n const resolvedState = state !== undefined ? state : componentDef.initialState\n\n // Build context: merge parent context with component's own context definitions\n const componentContext = componentDef.context || {}\n const mergedContext: Record<string, any> = {...context}\n for (const key of Object.keys(componentContext)) {\n const contextFn = componentContext[key]\n if (typeof contextFn === 'function' && resolvedState != null) {\n try {\n mergedContext[key] = contextFn(resolvedState)\n } catch (_) {}\n }\n }\n\n // Call the view function\n let vnode: any\n try {\n vnode = componentDef({\n ...props,\n state: resolvedState,\n children: props.children || [],\n slots: props.slots || {},\n context: mergedContext,\n peers: {},\n }, resolvedState, mergedContext, {})\n } catch (err: any) {\n // Error boundary\n if (typeof componentDef.onError === 'function') {\n const name = componentDef.componentName || componentDef.name || 'Component'\n try {\n vnode = componentDef.onError(err, {componentName: name})\n } catch (_) {\n vnode = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n } else {\n vnode = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n }\n\n if (!vnode) {\n vnode = {sel: 'div', data: {}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n\n // Process special components in the VNode tree\n vnode = processSSRTree(vnode, mergedContext, resolvedState)\n\n // Serialize to HTML\n let html = vnodeToHtml(vnode)\n\n // Optionally embed state for hydration\n if (hydrateState && resolvedState != null) {\n const varName = typeof hydrateState === 'string' ? hydrateState : '__SYGNAL_STATE__'\n const serialized = escapeHtml(JSON.stringify(resolvedState))\n html += `<script>window.${varName}=${JSON.stringify(resolvedState)}</script>`\n }\n\n return html\n}\n\n/**\n * Walk the VNode tree and recursively render sub-components,\n * handle Suspense/Portal/Transition markers, and process Collections.\n */\nfunction processSSRTree(vnode: any, context: Record<string, any>, parentState?: any): any {\n if (!vnode) return vnode\n if (typeof vnode === 'string' || vnode.text != null) return vnode\n\n const sel = vnode.sel\n\n // Fragment: no selector, recurse into children\n if (!sel && vnode.children && Array.isArray(vnode.children)) {\n vnode.children = vnode.children\n .map((c: any) => processSSRTree(c, context, parentState))\n .filter((c: any) => c != null)\n return vnode\n }\n\n // Portal: render children inline (no target container on server)\n if (sel === 'portal') {\n const children = vnode.children || []\n if (children.length === 0) return null\n if (children.length === 1) return processSSRTree(children[0], context, parentState)\n return {\n sel: 'div',\n data: {attrs: {'data-sygnal-portal': ''}},\n children: children.map((c: any) => processSSRTree(c, context, parentState)),\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n }\n\n // Transition: unwrap to child (no animation on server)\n if (sel === 'transition') {\n const children = vnode.children || []\n const child = children[0]\n if (!child) return null\n return processSSRTree(child, context, parentState)\n }\n\n // Suspense: render children (SSR always shows content, not fallback)\n if (sel === 'suspense') {\n const children = vnode.children || []\n if (children.length === 0) return null\n if (children.length === 1) return processSSRTree(children[0], context, parentState)\n return {\n sel: 'div',\n data: {attrs: {'data-sygnal-suspense': 'resolved'}},\n children: children.map((c: any) => processSSRTree(c, context, parentState)),\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n }\n\n // ClientOnly: render fallback during SSR, skip children (they need a browser)\n if (sel === 'clientonly') {\n const props = vnode.data?.props || {}\n const fallback = props.fallback\n if (fallback) {\n // fallback can be a VNode or a string\n return processSSRTree(fallback, context, parentState)\n }\n // No fallback — render an empty placeholder div\n return {\n sel: 'div',\n data: {attrs: {'data-sygnal-clientonly': ''}},\n children: [],\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n }\n\n // Slot: unwrap to children\n if (sel === 'slot') {\n const children = vnode.children || []\n if (children.length === 0) return null\n if (children.length === 1) return processSSRTree(children[0], context, parentState)\n return {\n sel: 'div',\n data: {},\n children: children.map((c: any) => processSSRTree(c, context, parentState)),\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n }\n\n // Sub-component: render recursively\n const props = vnode.data?.props || {}\n if (props.sygnalOptions || typeof props.sygnalFactory === 'function') {\n return renderSubComponent(vnode, context, parentState)\n }\n\n // Collection: render each item\n if (sel === 'collection') {\n return renderCollection(vnode, context, parentState)\n }\n\n // Switchable: render the active component\n if (sel === 'switchable') {\n return renderSwitchable(vnode, context, parentState)\n }\n\n // Regular element: recurse into children\n if (vnode.children) {\n if (Array.isArray(vnode.children)) {\n if (vnode.children.length > 0) {\n vnode.children = vnode.children\n .map((c: any) => processSSRTree(c, context, parentState))\n .filter((c: any) => c != null)\n }\n } else if (vnode.children && typeof vnode.children === 'object') {\n // Single child object (text element)\n vnode.children = processSSRTree(vnode.children, context, parentState)\n }\n }\n\n return vnode\n}\n\n/**\n * Render a sub-component (identified by sygnalOptions or sygnalFactory in props).\n */\nfunction renderSubComponent(vnode: any, context: Record<string, any>, parentState?: any): any {\n const props = vnode.data?.props || {}\n const {sygnalOptions, sygnalFactory, ...childProps} = props\n\n // Get the component definition (view function with static properties)\n let componentDef: any\n if (sygnalOptions) {\n componentDef = sygnalOptions.view\n // Copy static properties\n if (!componentDef.initialState && sygnalOptions.initialState) {\n componentDef = Object.assign(componentDef, {\n initialState: sygnalOptions.initialState,\n model: sygnalOptions.model,\n intent: sygnalOptions.intent,\n context: sygnalOptions.context,\n onError: sygnalOptions.onError,\n calculated: sygnalOptions.calculated,\n })\n }\n } else if (sygnalFactory && sygnalFactory.componentName) {\n // Factory-created component — we can't easily extract the view from an already-wrapped factory.\n // Return a placeholder.\n return {\n sel: 'div',\n data: {attrs: {'data-sygnal-ssr': vnode.sel || 'component'}},\n children: vnode.children || [],\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n }\n\n if (!componentDef || typeof componentDef !== 'function') {\n // Can't render — return children or empty div\n return {\n sel: 'div',\n data: {attrs: {'data-sygnal-ssr': vnode.sel || 'component'}},\n children: vnode.children || [],\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n }\n\n // Determine child state via state lens\n let childState = componentDef.initialState\n const stateProp = childProps.state\n if (typeof stateProp === 'string' && parentState != null && parentState[stateProp] != null) {\n childState = parentState[stateProp]\n } else if (stateProp != null && typeof stateProp !== 'string') {\n // State passed directly\n childState = stateProp\n }\n\n // Build child context\n const childContext: Record<string, any> = {...context}\n const componentContext = componentDef.context || {}\n for (const key of Object.keys(componentContext)) {\n const contextFn = componentContext[key]\n if (typeof contextFn === 'function' && childState != null) {\n try {\n childContext[key] = contextFn(childState)\n } catch (_) {}\n }\n }\n\n // Extract slots from children\n const slots: Record<string, any[]> = {}\n const defaultSlotChildren: any[] = []\n const vnodeChildren = vnode.children || []\n for (const child of vnodeChildren) {\n if (child && child.sel === 'slot') {\n const slotName = child.data?.props?.name || 'default'\n if (!slots[slotName]) slots[slotName] = []\n const slotChildren = child.children || []\n slots[slotName].push(...slotChildren)\n } else {\n defaultSlotChildren.push(child)\n }\n }\n if (defaultSlotChildren.length > 0) {\n if (!slots.default) slots.default = []\n slots.default.push(...defaultSlotChildren)\n }\n\n // Call the view function\n let result: any\n try {\n result = componentDef({\n ...childProps,\n state: childState,\n children: slots.default || vnodeChildren,\n slots,\n context: childContext,\n peers: {},\n }, childState, childContext, {})\n } catch (err: any) {\n if (typeof componentDef.onError === 'function') {\n const name = componentDef.componentName || componentDef.name || 'Component'\n try {\n result = componentDef.onError(err, {componentName: name})\n } catch (_) {\n result = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n } else {\n result = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n }\n\n if (!result) {\n result = {sel: 'div', data: {}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n\n // Recursively process the rendered sub-tree\n return processSSRTree(result, childContext, childState)\n}\n\n/**\n * Render a Collection by iterating over the state array.\n */\nfunction renderCollection(vnode: any, context: Record<string, any>, parentState?: any): any {\n const props = vnode.data?.props || {}\n const {of: itemComponent, from, className} = props\n\n if (!itemComponent || !from || !parentState) {\n return {sel: 'div', data: {}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n\n const items = parentState[from]\n if (!Array.isArray(items)) {\n return {sel: 'div', data: {}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n\n const renderedItems = items.map((itemState: any, index: number) => {\n // Build context for this item\n const itemContext: Record<string, any> = {...context}\n const componentContext = itemComponent.context || {}\n for (const key of Object.keys(componentContext)) {\n const contextFn = componentContext[key]\n if (typeof contextFn === 'function') {\n try {\n itemContext[key] = contextFn(itemState)\n } catch (_) {}\n }\n }\n\n let itemVnode: any\n try {\n itemVnode = itemComponent({\n state: itemState,\n children: [],\n slots: {},\n context: itemContext,\n peers: {},\n }, itemState, itemContext, {})\n } catch (err: any) {\n if (typeof itemComponent.onError === 'function') {\n try {\n itemVnode = itemComponent.onError(err, {componentName: itemComponent.name || 'CollectionItem'})\n } catch (_) {\n itemVnode = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n } else {\n itemVnode = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n }\n\n return processSSRTree(itemVnode, itemContext, itemState)\n }).filter((v: any) => v != null)\n\n const containerData: any = {}\n if (className) {\n containerData.props = {className}\n }\n\n return {\n sel: 'div',\n data: containerData,\n children: renderedItems,\n text: undefined,\n elm: undefined,\n key: undefined,\n }\n}\n\n/**\n * Render a Switchable by determining the active component from state.\n */\nfunction renderSwitchable(vnode: any, context: Record<string, any>, parentState?: any): any {\n const props = vnode.data?.props || {}\n const {components, active, initial} = props\n\n if (!components) {\n return {sel: 'div', data: {}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n\n // Determine which component to render\n let activeName: string | undefined\n if (typeof active === 'string') {\n // Direct name or state property\n if (components[active]) {\n activeName = active\n } else if (parentState && typeof parentState[active] === 'string') {\n activeName = parentState[active]\n }\n }\n if (!activeName && initial) {\n activeName = initial\n }\n if (!activeName) {\n activeName = Object.keys(components)[0]\n }\n\n const activeComponent = components[activeName]\n if (!activeComponent || typeof activeComponent !== 'function') {\n return {sel: 'div', data: {}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n\n return renderToStringInternal(activeComponent, parentState, context)\n}\n\n/**\n * Internal helper: render a component def to a VNode (not HTML string).\n */\nfunction renderToStringInternal(componentDef: any, state: any, context: Record<string, any>): any {\n const resolvedState = state !== undefined ? state : componentDef.initialState\n\n const componentContext = componentDef.context || {}\n const mergedContext: Record<string, any> = {...context}\n for (const key of Object.keys(componentContext)) {\n const contextFn = componentContext[key]\n if (typeof contextFn === 'function' && resolvedState != null) {\n try {\n mergedContext[key] = contextFn(resolvedState)\n } catch (_) {}\n }\n }\n\n let vnode: any\n try {\n vnode = componentDef({\n state: resolvedState,\n children: [],\n slots: {},\n context: mergedContext,\n peers: {},\n }, resolvedState, mergedContext, {})\n } catch (err: any) {\n if (typeof componentDef.onError === 'function') {\n try {\n vnode = componentDef.onError(err, {componentName: componentDef.name || 'Component'})\n } catch (_) {\n vnode = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n } else {\n vnode = {sel: 'div', data: {attrs: {'data-sygnal-error': ''}}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n }\n\n if (!vnode) {\n vnode = {sel: 'div', data: {}, children: [], text: undefined, elm: undefined, key: undefined}\n }\n\n return processSSRTree(vnode, mergedContext, resolvedState)\n}\n\n/**\n * Serialize a VNode tree to an HTML string.\n */\nfunction vnodeToHtml(vnode: any): string {\n if (vnode == null) return ''\n\n // Text node\n if (typeof vnode === 'string') return escapeHtml(vnode)\n if (vnode.text != null && !vnode.sel) return escapeHtml(String(vnode.text))\n\n // VNode with text content and a selector\n const sel = vnode.sel\n if (!sel) {\n if (vnode.text != null) return escapeHtml(String(vnode.text))\n // Fragment: no selector, but has children — concatenate child HTML\n if (vnode.children && Array.isArray(vnode.children)) {\n return vnode.children.map((c: any) => vnodeToHtml(c)).join('')\n }\n return ''\n }\n\n // Parse selector: tag#id.class1.class2\n const {tag, id, selectorClasses} = parseSelector(sel)\n\n // Build attributes from VNode data\n const attrs = buildAttributes(vnode.data || {}, id, selectorClasses)\n\n // Opening tag\n let html = `<${tag}`\n for (const [key, val] of attrs) {\n if (val === true) {\n html += ` ${key}`\n } else if (val !== false && val != null) {\n html += ` ${key}=\"${escapeHtml(String(val))}\"`\n }\n }\n html += '>'\n\n // Void elements\n if (VOID_ELEMENTS.has(tag)) {\n return html\n }\n\n // If innerHTML is set via props, use it as raw content (no escaping)\n if (vnode.data?.props?.innerHTML != null) {\n html += String(vnode.data.props.innerHTML)\n html += `</${tag}>`\n return html\n }\n\n // Children — snabbdom uses `text` for single text children (even when\n // `children` holds a text element object). Prioritize `text` when set.\n if (vnode.text != null) {\n html += escapeHtml(String(vnode.text))\n } else if (vnode.children) {\n // children can be an array or a single text element object\n const kids = Array.isArray(vnode.children) ? vnode.children : [vnode.children]\n for (const child of kids) {\n html += vnodeToHtml(child)\n }\n }\n\n html += `</${tag}>`\n return html\n}\n\n/**\n * Parse a snabbdom selector string like \"div#myId.foo.bar\" into parts.\n */\nfunction parseSelector(sel: string): {tag: string; id: string | null; selectorClasses: string[]} {\n let tag = sel\n let id: string | null = null\n const selectorClasses: string[] = []\n\n // Extract id\n const hashIdx = sel.indexOf('#')\n if (hashIdx !== -1) {\n const rest = sel.slice(hashIdx + 1)\n const dotIdx = rest.indexOf('.')\n if (dotIdx !== -1) {\n id = rest.slice(0, dotIdx)\n tag = sel.slice(0, hashIdx)\n // Classes after #id\n const classStr = rest.slice(dotIdx + 1)\n if (classStr) selectorClasses.push(...classStr.split('.'))\n } else {\n id = rest\n tag = sel.slice(0, hashIdx)\n }\n } else {\n // Extract classes from selector\n const dotIdx = sel.indexOf('.')\n if (dotIdx !== -1) {\n tag = sel.slice(0, dotIdx)\n const classStr = sel.slice(dotIdx + 1)\n if (classStr) selectorClasses.push(...classStr.split('.'))\n }\n }\n\n if (!tag) tag = 'div'\n\n return {tag, id, selectorClasses}\n}\n\n/**\n * Build an ordered list of [attrName, attrValue] from VNode data.\n */\nfunction buildAttributes(\n data: any,\n selectorId: string | null,\n selectorClasses: string[]\n): Array<[string, any]> {\n const result: Array<[string, any]> = []\n const classNames: string[] = [...selectorClasses]\n\n // From data.props (DOM properties like className, htmlFor, etc.)\n if (data.props) {\n for (const [key, val] of Object.entries(data.props)) {\n if (key === 'className') {\n if (typeof val === 'string' && val) classNames.push(val)\n } else if (key === 'htmlFor') {\n result.push(['for', val])\n } else if (key === 'innerHTML' || key === 'textContent') {\n // Skip — handled separately if needed\n } else if (key === 'sygnalOptions' || key === 'sygnalFactory') {\n // Internal — skip\n } else if (typeof val === 'boolean') {\n if (val) result.push([key, true])\n } else if (val != null) {\n result.push([key, val])\n }\n }\n }\n\n // From data.attrs (HTML attributes)\n if (data.attrs) {\n for (const [key, val] of Object.entries(data.attrs)) {\n if (key === 'class') {\n if (typeof val === 'string' && val) classNames.push(val)\n } else if (typeof val === 'boolean') {\n if (val) result.push([key, true])\n } else if (val != null) {\n result.push([key, val])\n }\n }\n }\n\n // From data.class (conditional class map: { active: true, disabled: false })\n if (data.class) {\n for (const [key, val] of Object.entries(data.class)) {\n if (val) classNames.push(key)\n }\n }\n\n // From data.dataset (data-* attributes)\n if (data.dataset) {\n for (const [key, val] of Object.entries(data.dataset)) {\n if (val != null) {\n result.push([`data-${camelToKebab(key)}`, val])\n }\n }\n }\n\n // ID (selector id takes precedence, then props/attrs)\n if (selectorId) {\n result.unshift(['id', selectorId])\n }\n\n // Class attribute\n if (classNames.length > 0) {\n const unique = [...new Set(classNames)]\n result.unshift(['class', unique.join(' ')])\n }\n\n // Style\n if (data.style && typeof data.style === 'object') {\n const styleStr = serializeStyle(data.style)\n if (styleStr) {\n result.push(['style', styleStr])\n }\n }\n\n return result\n}\n","import {setup} from '../cycle/run/index';\nimport {withState} from '../cycle/state/index';\nimport {mockDOMSource} from '../cycle/dom/mockDOMSource';\nimport eventBusDriver from './eventDriver';\nimport logDriver from './logDriver';\nimport component from '../component';\nimport {renderToString} from './ssr';\nimport {_getDiagnosticsConfig, configureDiagnostics, getDiagnosticsMode, isDiagnosticsEnabled, onDiagnostic, registerCheck, report} from './diagnostics/index';\nimport xs from './xstreamCompat';\nimport type {Stream} from 'xstream';\nimport type {Diagnostic, DiagnosticsMode} from './diagnostics/index';\nimport type {InspectGraph} from './diagnostics/checks/public';\n\n/*\n * (Docs live on these type-only declarations so the TypeScript emit drops\n * them — keeps them out of the published bundle.)\n *\n * renderComponent(Component, options?) runs a component on a minimal runtime\n * (mock DOM, EVENTS, LOG, STATE + any `drivers`).\n *\n * - simulateEvent(selector, type, init?) sends a synthetic DOM event through\n * the mock DOM source, so the component's real intent streams fire\n * (DOM.click('.x'), DOM.select('.x').events('click'), .value(), .data(), ...).\n * The target is the first rendered element matching `selector`; it is\n * delivered to every listener whose selector matches that element or one of\n * its ancestors in the same isolation scope (bubbling), and to\n * DOM.select('document'|'body') listeners. `simulateEvent('document'|'body', ...)`\n * goes to the listeners with exactly that selector. Selectors match the\n * rendered vnode tree like the real DOM: tag, .class, #id, [attr], [attr=v]\n * (^= $= *= ~=), :first-child, :last-child, :only-child, :nth-child(an+b),\n * :nth-last-child, :*-of-type, :not(), ' ' and '>' combinators, ',' lists\n * (G-070); other syntax (:has(), '+', '~', ...) throws at the call. If no\n * rendered element matches yet, the event waits (up to 300ms, re-tried on\n * every render) for one, then targets the first match. If none appears, the\n * test fails (G-070): the error rejects the pending next()/waitForState()/\n * settle(), or is thrown by the next t.* call or dispose(); when nothing is\n * pending and the tree is quiet it is thrown by simulateEvent itself. With\n * `{allowMissing: true}` it is dropped with SYG103 instead (it is never sent\n * to every listener with that selector string, G-049).\n * It also waits until the listeners it would reach are subscribed (a\n * just-mounted child subscribes a few ms after it renders, G-039).\n * `target.value/checked/dataset` default from the element's\n * vnode (as strings, like the DOM) and are overridden by `init`.\n * - simulateAction(name, data?) pushes `{type: name, data}` into the real\n * intent → model pipeline, so every sink of the model entry runs and hooks /\n * diagnostics see the real action name. (Model actions that have no intent\n * stream get one added under their real name; the injected names are listed\n * on the intent object's non-enumerable `__sygnalTestActions` property.)\n * - simulateAction/simulateEvent calls are delivered in call order. Calls made\n * before the component is subscribed are buffered and replayed once it is\n * ready; `await t.ready()` is an explicit sync point. An event that waits\n * (see above) holds the calls after it.\n * - Waiting: waitForState(pred) matches the recorded history too; next(pred)\n * matches only states emitted after the call; both resolve once the whole\n * tree has rendered the state. settle() resolves once nothing is pending.\n * - Diagnostics: `diagnostics` (default 'collect', or the already-active\n * mode when diagnostics are on) is applied with configureDiagnostics. The\n * explicit config from before the first live instance is restored when the\n * last live instance is disposed (overlapping/nested instances are fine). Most runtime checks live\n * in a separate entry: `import 'sygnal/diagnostics'` in the test (or vitest\n * setupFiles) to enable them. Two DOM checks are built in (G-024), since the\n * real-DOM versions can't run on the mock DOM:\n * - SYG104 (warn): an intent selector matches nothing in its component's own\n * scope but matches elements inside a child component / Collection item\n * (parents can't see those events). Checked after every render and when\n * simulateEvent targets such an element; reported once per component +\n * selector.\n * - SYG103 (info): simulateEvent's selector matches no rendered element and\n * no intent listens on it (typo?).\n *\n * ```js\n * const t = renderComponent(Counter, { initialState: { count: 0 } })\n * t.simulateEvent('.inc', 'click')\n * await t.waitForState(s => s.count === 1)\n * t.dispose()\n * ```\n *\n * Implementation notes:\n * - parse() turns a selector into compounds + combinators (cached; unsupported\n * syntax throws); index() records each vnode's parent and element siblings\n * on every render (for '>' and :nth-*); is(v, compound) matches one vnode;\n * matches(sel, chain) matches the last vnode of an ancestor chain; find()\n * returns the root → element chain of the first match.\n * - port(): producer-backed stream; emitting with no listener is a silent drop.\n * - Sinks named in the model without a driver get a no-op driver so their\n * output stays observable. sinkValues: EVENTS entries drop the devtools\n * stamps, PARENT entries are unwrapped from {name, component, value}.\n * - Input is buffered until 12ms after the first render: root and child\n * action streams subscribe 1-10ms (BOOTSTRAP) after construction. With no\n * render within 30ms (e.g. a model but no initialState), the 12ms start then.\n * dispose() before ready leaves the buffered calls undelivered.\n * - \"Rendered by the whole tree\" = the root rendered the state and no render,\n * reducer, state or input happened anywhere for 10ms (checked twice; capped at\n * 250ms). Child renders are seen through the onRender diagnostics hook.\n * - dispose() fires the component's DISPOSE action via sinks.__dispose.\n * - SYG103/104: the mock DOM source reports each events() call (selector path,\n * isolation scopes included as '.___scope'); a diagnostics check's onIntent\n * maps each component's innermost scope to its name. The nearest '.___'\n * class on a vnode or its ancestors is the scope that owns it.\n */\n\nexport interface SimulatedEventInit {\n /** Merged into `event.target` (value, checked, dataset, ...) */\n target?: Record<string, any>;\n /** Shorthand for target.value */\n value?: any;\n /** Shorthand for target.checked */\n checked?: boolean;\n /** Merged into target.dataset (values become strings, like the DOM) */\n dataset?: Record<string, any>;\n /** Alias for dataset */\n data?: Record<string, any>;\n /** Keyboard key (e.key) */\n key?: string;\n /**\n * Don't fail when the selector matches no rendered element: wait up to 300ms for it, then\n * drop the event with SYG103 (info). Not copied onto the event.\n */\n allowMissing?: boolean;\n /** Any other event properties are copied onto the event */\n [prop: string]: any;\n}\n\nexport interface RenderOptions {\n /** Override or provide initial state (defaults to component's .initialState) */\n initialState?: any;\n /** Mock DOM configuration — maps selectors to event streams */\n mockConfig?: Record<string, any>;\n /** Additional drivers beyond DOM, EVENTS, STATE, and LOG */\n drivers?: Record<string, any>;\n /**\n * Diagnostics mode while the component is rendered. Default: 'collect', or\n * the current mode when diagnostics are already on (e.g. 'error' set in a\n * setup file). Restored on dispose(). SYG103/SYG104 (selector typos and\n * parent selectors that only match inside child components) are checked\n * built in; the other checks require `import 'sygnal/diagnostics'`.\n */\n diagnostics?: DiagnosticsMode;\n /**\n * Strict mode (canonical-form checks SYG501/502/504) while the component is\n * rendered; restored on dispose(). Requires `import 'sygnal/diagnostics'`.\n * Default: unchanged (off unless configureStrict(true) was called).\n */\n strict?: boolean;\n}\n\nexport interface RenderResult {\n /** Stream of state values */\n state$: Stream<any>;\n /** Stream of rendered VNode trees */\n dom$: Stream<any>;\n /** Event bus source — call .select(type) to filter */\n events$: any;\n /** All sink streams by driver name */\n sinks: Record<string, any>;\n /** All source objects by driver name */\n sources: Record<string, any>;\n /** Push an action into the intent→model pipeline (all sinks of the entry run) */\n simulateAction: (actionName: string, data?: any) => void;\n /** Dispatch a synthetic DOM event through the mock DOM source */\n simulateEvent: (selector: string, eventType: string, eventInit?: SimulatedEventInit) => void;\n /** Resolves once the component is subscribed and rendered (earlier calls are buffered) */\n ready: () => Promise<void>;\n /**\n * Wait for a state that satisfies the predicate, searching the HISTORY first: a state\n * recorded before the call matches too (e.g. `count === 0` right after a reset resolves\n * at once with the initial state). Resolves with the matching state once the whole tree\n * (children included) has rendered it. Use next() to match only new states.\n */\n waitForState: (predicate: (state: any) => boolean, timeoutMs?: number) => Promise<any>;\n /**\n * Wait for the next state emitted AFTER this call that satisfies the predicate (default:\n * any). Resolves with it once the whole tree (children included) has rendered it.\n */\n next: (predicate?: (state: any) => boolean, timeoutMs?: number) => Promise<any>;\n /**\n * Resolves when the component is quiet: ready, no simulated input pending, and no render,\n * reducer or state change anywhere in the tree for a short window (20ms; covers next()'s\n * default delay). Rejects after timeoutMs (default 2000) if it never calms down.\n */\n settle: (timeoutMs?: number) => Promise<void>;\n /** Collected state values — grows as new states are emitted */\n states: any[];\n /** Live array of values emitted on a sink (EVENTS, PARENT, custom drivers, ...) */\n sinkValues: (sinkName: string) => any[];\n /** Live array of EVENTS sink emissions ({type, data}) */\n emitted: any[];\n /** Live array of diagnostics reported while rendered */\n diagnostics: Diagnostic[];\n /** Throws (with the formatted texts) if any warn/error diagnostics were collected */\n expectNoDiagnostics: () => void;\n /** Latest rendered VNode serialized to HTML ('' before the first render) */\n html: () => string;\n /** Tear down the component, clean up listeners and restore the diagnostics mode */\n dispose: () => void;\n /**\n * The app graph (2B) of the rendered tree: components, actions, selectors (with the mock DOM's\n * match / isolation results), EVENTS and diagnostics. Requires `import 'sygnal/diagnostics'`.\n */\n inspect: () => InspectGraph;\n}\n\nconst isScope = (s: string) => s.startsWith('.___');\n/** a listener path's selector text (isolation scopes dropped, whitespace normalized) */\nconst selText = (path: string[]) => norm(path.filter(s => !isScope(s)).join(' '));\nconst norm = (s: string) => s.trim().replace(/\\s*>\\s*/g, ' > ').replace(/\\s+/g, ' ');\n/** 'document' / 'body' (optionally followed by more) name a page listener, not an element */\nconst PAGE = /^(document|body)(\\s+|$)/;\nconst str = (o: any) => {\n const r: any = {};\n for (const k in o) if (o[k] != null) r[k] = String(o[k]);\n return r;\n};\n\n// ── Selector engine (G-070) ──────────────────────────────────────────────────\n// Matches the rendered vnode tree with real-DOM semantics. Anything not listed in\n// SUPPORTED throws \"unsupported selector syntax\" instead of silently matching nothing.\ntype Pseudo = {k: string; a: number; b: number; last?: boolean; type?: boolean; not?: Sel};\ntype Compound = {tag?: string; id?: string; cls: string[]; attrs: [string, string, string?][]; ps: Pseudo[]};\ntype Complex = {parts: Compound[]; combs: string[]};\ntype Sel = Complex[];\nconst SUPPORTED = \"tag, *, .class, #id, [attr], [attr=\\\"v\\\"] (also ^= $= *= ~=), :first-child, :last-child, :only-child, :nth-child(an+b|odd|even), :nth-last-child(), :first-of-type, :last-of-type, :only-of-type, :nth-of-type(), :nth-last-of-type(), :not(...), the descendant (' ') and child ('>') combinators, ',' lists\";\nconst IDENT = /^(?:[\\w-]|\\\\.)+/;\nconst unesc = (x: string) => x.replace(/\\\\(.)/g, '$1');\nconst parsed = new Map<string, Sel | Error>();\nfunction parse(src: string): Sel {\n let r = parsed.get(src);\n if (!r) {\n try { r = parseSel(src); } catch (e: any) { r = e; }\n parsed.set(src, r!);\n }\n if (r instanceof Error) throw r;\n return r!;\n}\nconst tryParse = (src: string): Sel | undefined => { try { return parse(src); } catch (_) { return undefined; } };\nfunction parseSel(src: string): Sel {\n let i = 0;\n const bad = (what: string): never => {\n const e: any = new Error(`[Sygnal] Unsupported selector syntax in '${src}': ${what}. Supported: ${SUPPORTED}. Or give the element an attribute and select it, e.g. [data-id=\"3\"]`);\n e.unsupported = true;\n throw e;\n };\n const ws = () => { const n = src.slice(i).match(/^\\s*/)![0].length; i += n; return n > 0; };\n const ident = (what: string) => {\n const m = src.slice(i).match(IDENT);\n if (!m) return bad(`expected ${what} at '${src.slice(i) || 'end'}'`);\n i += m[0].length;\n return unesc(m[0]);\n };\n const anb = (arg: string): [number, number] => {\n const x = arg.trim().toLowerCase().replace(/\\s+/g, '');\n if (x == 'odd') return [2, 1];\n if (x == 'even') return [2, 0];\n if (/^[+-]?\\d+$/.test(x)) return [0, +x];\n const m = x.match(/^([+-]?\\d*)n([+-]\\d+)?$/);\n if (!m) return bad(`'${arg}' is not an+b`);\n return [m[1] == '' || m[1] == '+' ? 1 : m[1] == '-' ? -1 : +m[1], m[2] ? +m[2] : 0];\n };\n const compound = (): Compound => {\n const c: Compound = {cls: [], attrs: [], ps: []};\n const from = i;\n if (src[i] == '*') i++;\n else if (IDENT.test(src.slice(i))) c.tag = ident('tag').toLowerCase();\n for (;;) {\n const ch = src[i];\n if (ch == '.') { i++; c.cls.push(ident('a class name')); }\n else if (ch == '#') { i++; c.id = ident('an id'); }\n else if (ch == '[') {\n const m = src.slice(i).match(/^\\[\\s*((?:[\\w-]|\\\\.)+)\\s*(?:([~^$*|]?=)\\s*(?:\"([^\"]*)\"|'([^']*)'|((?:[\\w-]|\\\\.)+))\\s*)?\\]/);\n if (!m) return bad(`attribute selector '${src.slice(i)}'`);\n if (m[2] == '|=') bad(\"the '|=' attribute operator\");\n i += m[0].length;\n c.attrs.push([unesc(m[1]), m[2] || '', m[2] ? (m[3] ?? m[4] ?? unesc(m[5])) : undefined]);\n } else if (ch == ':') {\n if (src[i + 1] == ':') bad('pseudo-elements');\n i++;\n const k = ident('a pseudo-class').toLowerCase();\n let arg: string | undefined;\n if (src[i] == '(') {\n let depth = 0, j = i;\n for (; j < src.length; j++) {\n if (src[j] == '(') depth++;\n else if (src[j] == ')' && !--depth) break;\n }\n if (j >= src.length) bad(`unclosed ':${k}('`);\n arg = src.slice(i + 1, j);\n i = j + 1;\n }\n const p: Pseudo = {k, a: 0, b: 1};\n const m = k.match(/^(?:(first|last|only)|nth(-last)?)-(child|of-type)$/);\n if (m && (arg === undefined) == !!m[1]) {\n p.type = m[3] == 'of-type';\n if (m[1] == 'only') p.k = 'only';\n else if (m[1]) p.last = m[1] == 'last';\n else {\n if (/\\bof\\b/.test(arg!)) bad(`':${k}(... of S)'`);\n [p.a, p.b] = anb(arg!);\n p.last = !!m[2];\n }\n } else if (k == 'not' && arg !== undefined) {\n p.not = parse(arg);\n if (p.not.some(cx => cx.parts.length > 1)) bad(\"combinators inside ':not()'\");\n } else bad(`':${k}${arg === undefined ? '' : '(' + arg + ')'}'`);\n c.ps.push(p);\n } else break;\n }\n if (i == from) bad(`unexpected '${src[i] || 'end of selector'}'`);\n return c;\n };\n const out: Sel = [];\n ws();\n if (i >= src.length) return out;\n for (;;) {\n const cx: Complex = {parts: [compound()], combs: []};\n for (;;) {\n const space = ws();\n const ch = src[i];\n if (i >= src.length || ch == ',') break;\n if (ch == '+' || ch == '~') bad(`the '${ch}' combinator`);\n if (ch == '>') { i++; ws(); cx.combs.push('>'); }\n else if (space) cx.combs.push(' ');\n else bad(`unexpected '${ch}'`);\n cx.parts.push(compound());\n }\n out.push(cx);\n if (i >= src.length) return out;\n i++; // ','\n ws();\n }\n}\n\n/** element children of a vnode (fragments flattened, text and comments skipped) */\nfunction kids(v: any): any[] {\n const out: any[] = [];\n for (const k of [].concat(v.children || [])) {\n if (!k || typeof k != 'object') continue;\n if ((k as any).sel) { if ((k as any).sel != '!') out.push(k); }\n else if ((k as any).children) out.push(...kids(k));\n }\n return out;\n}\n// parent + element siblings of each vnode of the latest rendered tree (for '>' and :nth-*)\nconst meta = new WeakMap<any, {p: any; sibs: any[]}>();\nfunction index(root: any) {\n if (!root || typeof root != 'object') return;\n const walk = (v: any) => {\n for (const ks of [kids(v), kids({children: v.data?.portalChildren || []})]) {\n for (const k of ks) { meta.set(k, {p: v, sibs: ks}); walk(k); }\n }\n };\n const tops = root.sel ? [root] : kids(root);\n for (const t of tops) { meta.set(t, {p: undefined, sibs: tops}); walk(t); }\n}\nconst tagOf = (v: any) => v.sel.split(/[.#]/)[0].toLowerCase();\nfunction is(v: any, c: Compound): boolean {\n const d = v.data || {}, p = d.props || {}, a = d.attrs || {};\n const [tagId, ...cls] = v.sel.split('.');\n const [tag, sid] = tagId.split('#');\n if (c.tag && tag.toLowerCase() != c.tag) return false;\n const id = sid || p.id || a.id;\n if (c.id !== undefined && id != c.id) return false;\n if (c.cls.length) {\n const classes = cls.concat(\n `${p.className || ''} ${a.class || ''}`.split(' '),\n Object.keys(d.class || {}).filter(k => d.class[k])\n );\n if (!c.cls.every(n => classes.includes(n))) return false;\n }\n for (const [name, op, val] of c.attrs) {\n const raw = name == 'id' ? id\n : name in a ? a[name]\n : name in p ? p[name]\n : name.startsWith('data-') ? str(d.dataset)[name.slice(5).replace(/-(\\w)/g, (_: any, l: string) => l.toUpperCase())]\n : undefined;\n if (raw == null || raw === false) return false;\n const x = String(raw);\n if (op && !(op == '=' ? x == val\n : !val ? false\n : op == '^=' ? x.startsWith(val)\n : op == '$=' ? x.endsWith(val)\n : op == '*=' ? x.includes(val)\n : x.split(/\\s+/).includes(val))) return false;\n }\n for (const ps of c.ps) {\n if (ps.not) { if (matches(ps.not, [v])) return false; continue; }\n let sibs = (meta.get(v) || {sibs: [v]}).sibs;\n if (ps.type) sibs = sibs.filter(s => tagOf(s) == tagOf(v));\n if (ps.k == 'only') { if (sibs.length != 1) return false; continue; }\n const n = sibs.indexOf(v), pos = ps.last ? sibs.length - n : n + 1;\n if (ps.a == 0 ? pos != ps.b : (pos - ps.b) / ps.a < 0 || (pos - ps.b) % ps.a != 0) return false;\n }\n return true;\n}\n/** does the last of `els` (an ancestor chain, root first, maybe scope-filtered) match `sel`? */\nfunction matches(sel: Sel, els: any[]): boolean {\n const at = (cx: Complex, j: number, i: number): boolean => {\n if (i < 0 || !is(els[i], cx.parts[j])) return false;\n if (j == 0) return true;\n if (cx.combs[j - 1] == '>') {\n const m = meta.get(els[i]);\n return i > 0 && (!m || els[i - 1] === m.p) && at(cx, j - 1, i - 1);\n }\n for (let k = i - 1; k >= 0; k--) if (at(cx, j - 1, k)) return true;\n return false;\n };\n return sel.some(cx => at(cx, cx.parts.length - 1, els.length - 1));\n}\n/** root → element chain of the first element (document order) matching `sel` */\nfunction find(v: any, sel: Sel, chain: any[] = []): any[] | undefined {\n if (!v || typeof v != 'object') return;\n const c = v.sel ? chain.concat(v) : chain;\n if (v.sel && matches(sel, c)) return c;\n // a <Portal>'s content is rendered elsewhere; it is kept on its placeholder\n for (const k of [].concat(v.children || [], v.data?.portalChildren || [])) {\n const r = find(k, sel, c);\n if (r) return r;\n }\n}\n\n/** Internal (perf-guard tests): number of SYG104 tree walks */\nexport const _testingStats = {walks: 0};\n\n// 1H-5: live renderComponent instances; the explicit diagnostics config and the strict flag\n// (R4) from before the outermost one are restored when the last one is disposed\nlet active = 0;\n/** simulateEvent: how long an event waits for its element / listeners (G-049, G-039) */\nconst WAIT_MS = 300;\n/** quiet window after which the whole tree counts as rendered (G-047) */\nconst QUIET_MS = 10;\n/** quiet window for settle(): longer than next()'s default 10ms delay */\nconst SETTLE_MS = 20;\nlet savedConfig: ReturnType<typeof _getDiagnosticsConfig>;\nlet savedStrict: any;\n\nexport function renderComponent(\n componentDef: any,\n options: RenderOptions = {}\n): RenderResult {\n const {initialState, mockConfig = {}, drivers = {}, diagnostics, strict} = options;\n const {intent, model = {}} = componentDef;\n\n const prevMode = getDiagnosticsMode();\n // 2A: strict flag on the core bridge (read by the 'sygnal/diagnostics' strict checks)\n const core = (globalThis as any).__SYGNAL_DIAGNOSTICS__;\n if (!active++) {\n savedConfig = _getDiagnosticsConfig();\n savedStrict = core.strict;\n // G-051: forget the checks' report dedupe (once()), so a finding from an earlier test is\n // reported again. Only that set: resetChecks() would also drop inspect()'s records of\n // other live instances / apps.\n core.resetOnce?.();\n }\n configureDiagnostics({mode: diagnostics || (prevMode == 'off' ? 'collect' : prevMode)});\n if (strict !== undefined) core.strict = strict;\n const collected: Diagnostic[] = [];\n const offDiag = onDiagnostic(d => collected.push(d));\n\n // G-024: SYG103/SYG104 on the mock DOM\n const rootName = componentDef.name || componentDef.componentName || 'TestComponent';\n const listeners = new Map<string, string[]>();\n // G-039: subscribed listener count per path + event type\n const live = new Map<string, number>();\n let disposed = false;\n const owners = new Map<string, string>([['', rootName]]);\n const scopeIds = new Map<string, number>();\n const evTypes: Record<string, string[]> = {};\n const done = new Set<string>();\n // the innermost isolation scope of a component's DOM source on this hub\n const scopeOf = (c: any) => {\n const d = c && c.sources && c.sources[c.DOMSourceName || 'DOM'];\n return d && d._hub === hub.$ && (d._path || []).filter(isScope).pop();\n };\n // G-047: activity anywhere in the tree (any component's render/reducer, state, input), for\n // the \"the full tree has rendered\" / settle() quiet windows\n let activity = 0, lastActivity = Date.now();\n const bump = () => { activity++; lastActivity = Date.now(); };\n const offCheck = registerCheck({\n id: 'renderComponent',\n onRender: bump,\n onReducer: bump,\n onIntent(c: any) {\n bump();\n const sc = scopeOf(c);\n if (sc) owners.set(sc, c.name);\n if (c.sources[c.DOMSourceName || 'DOM']?._hub == hub.$) scopeIds.set(sc || '', c._componentNumber);\n },\n // 1H-11: forget a disposed child's listeners, so they aren't checked on every render\n onDispose(c: any) {\n const sc = scopeOf(c);\n if (!sc) return;\n owners.delete(sc);\n scopeIds.delete(sc);\n listeners.forEach((path, k) => { if (path.filter(isScope).pop() == sc) listeners.delete(k); });\n },\n });\n const raise = (code: string, component: string, message: string, fix: string, data: any) => {\n try { report(code, {component, message, fix, data}); } catch (e) { setTimeout(() => { throw e; }); }\n };\n // 1H-11: a render with the same tree and no new listener can't change the result\n let checkedTree: any, newListener = false;\n // sels: the selector (inspect() passes it split into words)\n const probe = (sels: string | string[], scope?: string, target?: any) => {\n let own = false, child: string | undefined, hit = !target;\n const sel = tryParse(Array.isArray(sels) ? sels.join(' ') : sels);\n if (!sel || !sel.length) return {own, child, hit: false};\n const desc = (_: any, els: any[]) => matches(sel, els);\n // chain: [vnode, nearest scope][] from the root; inside: under this component's root\n const walk = (v: any, chain: any[], cur: any, inside: boolean, boundary: any): void => {\n if (!v || !v.sel || own) return;\n const sc = (v.sel.match(/\\.___[^.#]+/) || [])[0] || cur;\n const c = chain.concat([[v, sc]]);\n inside = inside || sc == scope;\n if (inside) {\n if (sc == scope) {\n if (desc(sels, c.filter(x => x[1] == scope).map(x => x[0]))) own = true;\n } else {\n boundary = boundary || sc;\n if (desc(sels, c.map(x => x[0]))) {\n child = child || boundary;\n if (v === target) hit = true;\n }\n }\n }\n for (const k of [].concat(v.children || [])) walk(k, c, sc, inside, sc == scope ? undefined : boundary);\n };\n _testingStats.walks++;\n walk(vtree, [], undefined, !scope, undefined);\n return {own, child, hit};\n };\n const check104 = (target?: any) => {\n if (!vtree || !isDiagnosticsEnabled() || (!target && vtree === checkedTree && !newListener)) return;\n if (!target) checkedTree = vtree, newListener = false;\n listeners.forEach(path => {\n const selector = selText(path);\n const scope = path.filter(isScope).pop();\n const name = owners.get(scope || '') || 'Component';\n const key = name + '\\u0000' + selector;\n if (!selector || PAGE.test(selector) || done.has(key)) return;\n const {own, child, hit} = probe(selector, scope, target);\n if (own) return done.add(key);\n if (!child || !hit) return;\n done.add(key);\n const childName = owners.get(child) || 'a child component';\n raise('SYG104', name,\n `DOM.select('${selector}') in ${name} matches elements inside ${childName} (isolated), so ${name} never receives their events`,\n `Handle the event in ${childName} and send it up with PARENT (read it here with CHILD.select(${childName})), or use EVENTS`,\n {selector, child: childName});\n });\n };\n\n const restore = () => {\n offCheck();\n offDiag();\n if (!--active) {\n configureDiagnostics(savedConfig);\n core.strict = savedStrict;\n }\n };\n\n const noop = () => {};\n const port = () => {\n const p = {emit: noop as (v: any) => void, $: null as any};\n p.$ = xs.create({\n start: (l: any) => { p.emit = v => l.next(v); },\n stop: () => { p.emit = noop; },\n });\n return p;\n };\n const actions = port();\n const hub = port();\n\n const names = Object.keys(model)\n .map(k => k.split('|')[0].trim())\n .filter(n => n != 'INITIALIZE');\n const actionStream = (type: string) =>\n actions.$.filter((a: any) => a.type == type).map((a: any) => a.data);\n\n const wrappedIntent = (sources: any) => {\n const res = intent ? intent(sources) : {};\n if (res && typeof res.addListener == 'function') return xs.merge(res, actions.$);\n const out: any = {...res};\n const added = names.filter(n => !(n in out));\n for (const n of new Set([...Object.keys(out), ...added])) {\n out[n] = out[n] ? xs.merge(out[n], actionStream(n)) : actionStream(n);\n }\n Object.defineProperty(out, '__sygnalTestActions', {value: added});\n return out;\n };\n\n const {context, calculated, storeCalculatedInState, onError, hmrActions, components} = componentDef;\n const init = initialState !== undefined ? initialState : componentDef.initialState;\n // G-028: with no intent, model or initialState nothing would ever emit state, so the view\n // never renders. Leave intent/model unset so the component falls back to the same no-op\n // model run() uses, and renders.\n const bare = !intent && !Object.keys(model).length && init === undefined;\n const app = component({\n name: componentDef.name || componentDef.componentName || 'TestComponent',\n view: componentDef,\n intent: bare ? undefined : wrappedIntent,\n model: bare ? undefined : model,\n hmrActions,\n components,\n context,\n calculated,\n storeCalculatedInState,\n onError,\n initialState: init,\n });\n const allDrivers: any = {\n DOM: () => mockDOMSource(mockConfig, hub.$, (path, type, on) => {\n const k = path.join('\\u0000');\n if (on === undefined) {\n if (!listeners.has(k)) listeners.set(k, path), newListener = true;\n (evTypes[k] = evTypes[k] || []).push(type);\n } else {\n // G-039: subscribed / unsubscribed listeners (a just-mounted child subscribes late)\n const lk = k + '\\u0000' + type;\n live.set(lk, (live.get(lk) || 0) + (on ? 1 : -1));\n if (on) retry(0);\n }\n }),\n EVENTS: eventBusDriver,\n LOG: logDriver,\n ...drivers,\n };\n for (const k in model) {\n const e = model[k], [, sink] = k.split('|');\n for (const n of sink ? [sink.trim()] : e && typeof e == 'object' ? Object.keys(e) : []) {\n if (!allDrivers[n] && !/^(STATE|EFFECT|PARENT|READY)$/.test(n)) {\n allDrivers[n] = () => ({select: () => xs.never()});\n }\n }\n }\n let sources: any, sinks: any, rawDispose: () => void;\n try {\n const p: any = setup(withState(app, 'STATE') as any, allDrivers);\n ({sources, sinks} = p);\n rawDispose = p.run();\n } catch (e) {\n restore();\n throw e;\n }\n\n const subs: Array<[any, any]> = [];\n const listen = (s: any, next: (v: any) => void) => {\n const l = {next, error: noop, complete: noop};\n s.addListener(l);\n subs.push([s, l]);\n };\n\n const states: any[] = [];\n const stateStream: Stream<any> = sources.STATE?.stream || xs.never();\n listen(stateStream, s => { states.push(s); bump(); });\n\n const values: Record<string, any[]> = {};\n const sinkValues = (k: string) => (values[k] = values[k] || []);\n for (const k in sinks) {\n if (k != 'DOM' && k != 'STATE' && typeof sinks[k]?.addListener == 'function') {\n listen(sinks[k], v => sinkValues(k).push(\n k == 'EVENTS' ? {type: v.type, data: v.data} : k == 'PARENT' ? v.value : v\n ));\n }\n }\n // Input queue (G-049/G-039): simulateAction/simulateEvent calls are delivered in order,\n // once the component is ready. An event whose selector matches no rendered element yet, or\n // whose matching listeners aren't subscribed yet, holds the queue until it can be delivered\n // (re-tried on every render), at most WAIT_MS; then it is delivered to the live listeners\n // (or, with no matching element, fails the test, G-070; with allowMissing it is dropped\n // with SYG103).\n type Input = {go: (last: boolean) => boolean, until?: number, missing?: () => Error | undefined};\n const inputs: Input[] = [];\n let isReady = false, retryTimer: any;\n const pump = () => {\n if (!isReady || disposed) return;\n while (inputs.length) {\n const head = inputs[0];\n head.until = head.until || Date.now() + WAIT_MS;\n if (!head.go(Date.now() >= head.until)) return retry(5);\n inputs.shift();\n bump();\n }\n };\n const retry = (ms: number) => {\n if (!retryTimer && inputs.length) retryTimer = setTimeout(() => { retryTimer = 0; pump(); }, ms);\n };\n let markReady: () => void;\n const readyPromise = new Promise<void>(r => {\n markReady = () => {\n isReady = true;\n pump();\n r();\n };\n });\n const later = (go: Input['go'], missing?: Input['missing']) => { inputs.push({go, missing}); pump(); };\n\n let vtree: any;\n let timer: any;\n // states[0 .. renderedUpTo) were recorded before the latest render (1H-12)\n let renderedUpTo = 0;\n const arm = () => timer || (timer = setTimeout(() => markReady(), 12));\n if (sinks.DOM) {\n listen(sinks.DOM, v => {\n vtree = v;\n index(v);\n renderedUpTo = states.length;\n bump();\n check104();\n arm();\n pump();\n });\n }\n // 1H-4: a component that never renders on its own (a model but no initialState: no state\n // until an action sets it) still becomes ready, so buffered input is delivered\n const fallback = setTimeout(arm, sinks.DOM ? 30 : 0);\n\n const tick = (ms: number) => new Promise(r => setTimeout(r, ms));\n /**\n * G-047: resolves once the root has rendered states[0 .. n) and the whole tree has been\n * quiet (no render, reducer, state or input anywhere) for `quiet` ms, checked twice, so\n * child components have rendered them too. Gives up after `cap` ms (an app that never\n * goes quiet): false.\n */\n const quiesce = async (n: number, quiet: number, cap: number, busy = () => false): Promise<boolean> => {\n const start = Date.now();\n let seen = -1;\n while (!disposed) {\n const idle = Date.now() - lastActivity;\n if (Date.now() - start > cap) return false;\n if ((!sinks.DOM || renderedUpTo >= n || Date.now() - start > 100) && idle >= quiet && !busy()) {\n if (seen === activity) return true;\n seen = activity;\n await tick(3);\n } else {\n seen = -1;\n await tick(Math.max(1, quiet - idle));\n }\n }\n return true;\n };\n const treeRendered = (n: number) => quiesce(n, QUIET_MS, 250);\n\n // G-070: a simulateEvent whose selector matches nothing fails the test. The error rejects\n // the pending next()/waitForState()/settle() calls; with none pending it is kept and thrown\n // by the next simulate*/wait/expectNoDiagnostics()/dispose() call.\n let failure: Error | undefined;\n const waiters = new Set<(e: Error) => void>();\n const failWith = (e: Error) => {\n if (!waiters.size) return void (failure = failure || e);\n const ws = [...waiters];\n waiters.clear();\n ws.forEach(r => r(e));\n };\n const takeFailure = () => { const f = failure; failure = undefined; return f; };\n const throwFailure = () => { const f = takeFailure(); if (f) throw f; };\n const noMatch = (selector: string, type: string, waited: boolean) => {\n const out = html();\n return new Error(`[Sygnal] simulateEvent('${selector}', '${type}'): the selector matched nothing in the rendered output` +\n (waited ? ` (waited ${WAIT_MS}ms for it to render)` : '') +\n `. Check t.html() to see what rendered, or give the element an attribute and select it, e.g. [data-id=\"3\"]` +\n ` (pass { allowMissing: true } to drop the event instead).\\nRendered: ${out.length > 600 ? out.slice(0, 600) + '…' : out || '(nothing)'}`);\n };\n\n const simulateAction = (type: string, data?: any) => {\n throwFailure();\n later(() => (actions.emit({type, data}), true));\n };\n\n const simulateEvent = (selector: string, type: string, init: SimulatedEventInit = {}) => {\n throwFailure();\n const {allowMissing, ...evInit} = init;\n const text = norm(String(selector));\n // 'document' / 'body' (and '') name a listener, not an element\n const page = !text || PAGE.test(text);\n // unsupported syntax throws here, at the call (G-070)\n const sel = page ? [] : parse(text);\n // nothing pending and the tree is quiet (as settle() would see it): fail at the call\n if (!page && !allowMissing && isReady && !inputs.length && vtree && renderedUpTo >= states.length &&\n Date.now() - lastActivity >= SETTLE_MS && !find(vtree, sel)) {\n throw noMatch(selector, type, false);\n }\n later(last => {\n const chain = page ? undefined : find(vtree, sel);\n const el = chain?.[chain.length - 1];\n if (!page && !el) {\n if (!last) return false;\n if (!allowMissing) {\n failWith(noMatch(selector, type, true));\n return true;\n }\n raise('SYG103', rootName,\n `simulateEvent('${selector}', '${type}') matched no rendered element within ${WAIT_MS}ms, so the event was dropped`,\n `Check the selector against the view's className/id, or wait until the element is rendered (await t.next(...) or t.settle())`,\n {selector, type});\n return true;\n }\n const match = (path: string[]) => {\n let ls = selText(path);\n if (!chain) return ls == text;\n let els = chain;\n if (PAGE.test(ls)) ls = ls.replace(PAGE, '');\n else {\n const scope = path.filter(isScope).pop();\n let cur: string | undefined;\n els = chain.filter(v => {\n const m = v.sel.match(/\\.___[^.#]+/);\n if (m) cur = m[0];\n return cur == scope;\n });\n }\n if (!ls) return true;\n const lsel = tryParse(ls);\n return !!lsel && els.some((_, k) => matches(lsel, els.slice(0, k + 1)));\n };\n // G-039: wait until every listener this event would reach is subscribed\n if (!last) {\n for (const [k, path] of listeners) {\n if ((evTypes[k] || []).includes(type) && !live.get(k + '\\u0000' + type) && match(path)) return false;\n }\n }\n if (el) check104(el);\n const d = el?.data || {}, p = d.props || {};\n const {target: t = {}, value, checked, dataset, data, ...rest} = evInit;\n const vval = p.value ?? d.attrs?.value;\n const target: any = {\n tagName: el?.sel.split(/[.#]/)[0].toUpperCase(),\n value: vval == null ? vval : String(vval),\n checked: p.checked ?? d.attrs?.checked,\n ...('value' in init && {value}),\n ...('checked' in init && {checked}),\n ...t,\n };\n target.dataset = str({...d.dataset, ...dataset, ...data, ...t.dataset});\n // 3E/R2: element.closest(sel) over the rendered ancestor chain, so helpers that look\n // up ancestors (e.g. `.data('taskId')` on a click inside the row carrying the data)\n // behave like the real DOM. Ancestors are element-like: tagName, dataset, closest.\n if (chain && !('closest' in t)) {\n const like = (i: number): any => {\n const v = chain[i];\n return {tagName: v.sel.split(/[.#]/)[0].toUpperCase(), dataset: str(v.data?.dataset), closest: closestFrom(i)};\n };\n const closestFrom = (from: number) => (s: string): any => {\n const cs = parse(String(s));\n for (let i = from; i >= 0; i--) {\n if (matches(cs, chain.slice(0, i + 1))) return i == chain.length - 1 ? target : like(i);\n }\n return null;\n };\n target.closest = closestFrom(chain.length - 1);\n }\n const event = {\n type,\n target,\n currentTarget: target,\n ownerTarget: target,\n dataTransfer: {},\n preventDefault: noop,\n stopPropagation: noop,\n ...rest,\n };\n hub.emit({type, event, match});\n return true;\n }, page || allowMissing ? undefined : () => (find(vtree, sel) ? undefined : noMatch(selector, type, false)));\n };\n\n // first state at index >= from matching predicate; resolves after the full tree rendered it\n const waitMatch = (from: number, predicate: (state: any) => boolean, timeoutMs: number, name: string): Promise<any> =>\n new Promise((resolve, reject) => {\n const f = takeFailure();\n if (f) return reject(f);\n const found = (i: number) => {\n clearTimeout(timer);\n stateStream.removeListener(listener);\n treeRendered(i + 1).then(() => { waiters.delete(fail); resolve(states[i]); });\n };\n const test = (i: number) => { try { return predicate(states[i]); } catch (_) { return false; } };\n const fail = (err: Error) => { clearTimeout(timer); stateStream.removeListener(listener); waiters.delete(fail); reject(err); };\n waiters.add(fail);\n const base = states.length;\n const listener = {\n // the recording listener (added first) has already pushed the new state; a\n // remembered state replayed on addListener isn't new (states.length == base)\n next: () => { if (states.length > base && test(states.length - 1)) found(states.length - 1); },\n error: (err: any) => fail(err),\n complete: () => fail(new Error(`${name}: state stream completed without matching`)),\n };\n const timer = setTimeout(() => fail(new Error(`${name} timed out after ${timeoutMs}ms`)), timeoutMs);\n for (let i = from; i < states.length; i++) if (test(i)) return found(i);\n stateStream.addListener(listener);\n });\n\n const waitForState = (predicate: (state: any) => boolean, timeoutMs: number = 2000) =>\n waitMatch(0, predicate, timeoutMs, 'waitForState');\n const next = (predicate: (state: any) => boolean = () => true, timeoutMs: number = 2000) =>\n waitMatch(states.length, predicate, timeoutMs, 'next');\n const settle = (timeoutMs: number = 2000): Promise<void> => new Promise((resolve, reject) => {\n const f = takeFailure();\n if (f) return reject(f);\n const done = (e?: Error) => { waiters.delete(done); e ? reject(e) : resolve(); };\n waiters.add(done);\n (async () => {\n await Promise.race([readyPromise, tick(timeoutMs)]);\n if (!await quiesce(states.length, SETTLE_MS, timeoutMs, () => !isReady || inputs.length > 0)) {\n throw new Error(`settle timed out after ${timeoutMs}ms: ${inputs.length ? `${inputs.length} simulated input(s) still pending` : 'the component kept rendering'}`);\n }\n })().then(() => done(), done);\n });\n\n const expectNoDiagnostics = () => {\n throwFailure();\n const bad = collected.filter(d => d.severity != 'info');\n if (bad.length) {\n throw new Error(`Expected no diagnostics, got ${bad.length}:\\n` + bad.map(d => d.text).join('\\n'));\n }\n };\n\n // G-040: a Collection's container keeps its marker props (of, from, filter, item props...)\n // as snabbdom props, i.e. DOM properties, not attributes: drop them, like the real DOM\n const unmark = (v: any): any => {\n if (!v || typeof v != 'object' || !v.sel) return v;\n let d = v.data;\n if (d?.isCollection) {\n const {className, id} = d.props || {};\n d = {...d, props: {className, id}};\n }\n return {...v, data: d, children: v.children && v.children.map(unmark)};\n };\n const html = () =>\n vtree\n ? renderToString(() => unmark(vtree)).replace(/ class=\"([^\"]*)\"/g, (_, c: string) =>\n (c = c.split(' ').filter(x => !x.startsWith('___')).join(' ')) ? ` class=\"${c}\"` : ''\n )\n : '';\n\n const inspect = (): InspectGraph => {\n if (!core.inspect) throw Error(`[Sygnal] t.inspect() needs import 'sygnal/diagnostics'`);\n return core.inspect({ids: [...scopeIds.values()], diagnostics: collected, mock: {listeners, evTypes, owners, scopeIds, probe, vtree}});\n };\n\n const dispose = () => {\n if (disposed) return;\n disposed = true;\n clearTimeout(timer);\n clearTimeout(fallback);\n clearTimeout(retryTimer);\n // G-070: an event still waiting for an element that never rendered fails the test\n const head = inputs[0];\n if (head && head.until && head.missing && !failure) failure = head.missing();\n inputs.length = 0;\n subs.forEach(([s, l]) => {\n try { s.removeListener(l); } catch (_) {}\n });\n try { sinks.__dispose?.(); } catch (_) {}\n rawDispose();\n restore();\n waiters.clear();\n throwFailure();\n };\n\n return {\n state$: stateStream,\n dom$: sinks.DOM || xs.never(),\n events$: sources.EVENTS || {select: () => xs.never()},\n sinks,\n sources,\n simulateAction,\n simulateEvent,\n ready: () => readyPromise,\n waitForState,\n next,\n settle,\n states,\n sinkValues,\n emitted: sinkValues('EVENTS'),\n diagnostics: collected,\n expectNoDiagnostics,\n html,\n dispose,\n inspect,\n };\n}\n","/**\n * Reducer helpers for common state update patterns.\n *\n * These reduce boilerplate in model definitions by providing\n * shorthand factories for the most frequent reducer shapes.\n */\n\n// ── set() ──────────────────────────────────────────────────────────\n/**\n * Create a reducer that merges a partial update into state.\n *\n * Static form — merge a fixed object:\n * set({ isEditing: true })\n *\n * Dynamic form — function receives (state, data, next, props) and\n * returns the partial update to merge:\n * set((state, title) => ({ title }))\n */\nexport function set<S = any>(\n partial: Partial<S> | ((state: S, data: any, next: Function, props: any) => Partial<S>)\n): (state: S, data: any, next: Function, props: any) => S {\n if (typeof partial === 'function') {\n return (state, data, next, props) => ({\n ...state,\n ...partial(state, data, next, props),\n })\n }\n return (state) => ({ ...state, ...partial })\n}\n\n// ── toggle() ───────────────────────────────────────────────────────\n/**\n * Create a reducer that toggles a boolean field on state.\n *\n * toggle('showModal')\n * // equivalent to: (state) => ({ ...state, showModal: !state.showModal })\n */\nexport function toggle<S = any>(field: keyof S & string): (state: S) => S {\n return (state) => ({ ...state, [field]: !state[field] })\n}\n\n// event(type, payload?) → EVENTS sink fn for the object form:\n// `ACTION: { EVENTS: event('TYPE', (state, data) => payload) }` (static payloads allowed)\nexport function event(\n type: string,\n payload?: any | ((state: any, data: any, next: Function, props: any) => any)\n): (state: any, data: any, next: Function, props: any) => { type: string; data: any } {\n return typeof payload === 'function'\n ? (state, data, next, props) => ({ type, data: payload(state, data, next, props) })\n : () => ({ type, data: payload })\n}\n\n// ── emit() ─────────────────────────────────────────────────────────\n/**\n * Create a model entry that emits an EVENTS bus event.\n *\n * With static data:\n * emit('DELETE_LANE', { laneId: 42 })\n *\n * With dynamic data derived from state:\n * emit('DELETE_LANE', (state) => ({ laneId: state.id }))\n *\n * Fire-and-forget (no data):\n * emit('REFRESH')\n */\nexport function emit(\n type: string,\n data?: any | ((state: any, actionData: any, next: Function, props: any) => any)\n): { EVENTS: (state: any, actionData: any, next: Function, props: any) => { type: string; data: any } } {\n return { EVENTS: event(type, data) }\n}\n","import _xs from './xstreamCompat';\nimport type {Stream, Listener} from 'xstream';\nimport type xsType from 'xstream';\nimport {adapt} from '../cycle/run/adapt';\n\nconst xs = _xs as typeof xsType;\n\n// ── Types ────────────────────────────────────────────────────\n\nexport interface ServiceWorkerSource {\n select(type?: string): any;\n}\n\nexport interface ServiceWorkerCommand {\n action: 'skipWaiting' | 'postMessage' | 'unregister';\n data?: any;\n}\n\nexport interface ServiceWorkerOptions {\n scope?: string;\n}\n\nexport interface InstallPrompt {\n select(type: 'beforeinstallprompt' | 'appinstalled'): any;\n prompt(): Promise<any> | undefined;\n}\n\n// ── makeServiceWorkerDriver ──────────────────────────────────\n\nfunction trackWorker(worker: ServiceWorker, events: EventTarget) {\n const emit = (type: string, data: any) =>\n events.dispatchEvent(new CustomEvent('data', {detail: {type, data}}));\n\n worker.addEventListener('statechange', () => {\n if (worker.state === 'installed') emit('installed', true);\n if (worker.state === 'activated') emit('activated', true);\n });\n\n if (worker.state === 'installed') emit('waiting', worker);\n if (worker.state === 'activated') emit('activated', true);\n}\n\nexport function makeServiceWorkerDriver(\n scriptUrl: string,\n options: ServiceWorkerOptions = {},\n): (sink$: Stream<ServiceWorkerCommand>) => ServiceWorkerSource {\n return function serviceWorkerDriver(sink$: Stream<ServiceWorkerCommand>): ServiceWorkerSource {\n const events = new EventTarget();\n\n if (typeof navigator !== 'undefined' && 'serviceWorker' in navigator) {\n navigator.serviceWorker\n .register(scriptUrl, {scope: options.scope})\n .then((reg) => {\n const emit = (type: string, data: any) =>\n events.dispatchEvent(new CustomEvent('data', {detail: {type, data}}));\n\n if (reg.installing) trackWorker(reg.installing, events);\n if (reg.waiting) emit('waiting', reg.waiting);\n if (reg.active) emit('activated', true);\n\n reg.addEventListener('updatefound', () => {\n if (reg.installing) trackWorker(reg.installing, events);\n });\n\n navigator.serviceWorker.addEventListener('controllerchange', () => {\n emit('controlling', true);\n });\n\n navigator.serviceWorker.addEventListener('message', (e) => {\n emit('message', (e as MessageEvent).data);\n });\n })\n .catch((err) => {\n events.dispatchEvent(new CustomEvent('data', {detail: {type: 'error', data: err}}));\n });\n\n sink$.addListener({\n next: (cmd: ServiceWorkerCommand) => {\n if (cmd.action === 'skipWaiting') {\n navigator.serviceWorker.ready.then((r) => {\n if (r.waiting) r.waiting.postMessage({type: 'SKIP_WAITING'});\n });\n } else if (cmd.action === 'postMessage') {\n navigator.serviceWorker.ready.then((r) => {\n if (r.active) r.active.postMessage(cmd.data);\n });\n } else if (cmd.action === 'unregister') {\n navigator.serviceWorker.ready.then((r) => r.unregister());\n }\n },\n error: (err: any) => console.error('[SW driver] Error in sink stream:', err),\n });\n }\n\n return {\n select(type?: string) {\n let cb: ((e: Event) => void) | undefined;\n const in$ = xs.create<any>({\n start: (listener) => {\n cb = ({detail}: any) => {\n if (!type || detail.type === type) listener.next(detail.data);\n };\n events.addEventListener('data', cb);\n },\n stop: () => {\n if (cb) events.removeEventListener('data', cb);\n },\n });\n return adapt(in$);\n },\n };\n };\n}\n\n// ── onlineStatus$ ────────────────────────────────────────────\n// Lazy — the real stream is created on first subscribe so importing\n// sygnal in SSR doesn't eagerly reference window/navigator.\n\nlet _onlineCleanup: (() => void) | undefined;\n\nexport const onlineStatus$: Stream<boolean> = xs.create<boolean>({\n start(listener: Listener<boolean>) {\n if (typeof window === 'undefined') {\n listener.next(true);\n return;\n }\n listener.next(navigator.onLine);\n const on = () => listener.next(true);\n const off = () => listener.next(false);\n window.addEventListener('online', on);\n window.addEventListener('offline', off);\n _onlineCleanup = () => {\n window.removeEventListener('online', on);\n window.removeEventListener('offline', off);\n };\n },\n stop() {\n _onlineCleanup?.();\n _onlineCleanup = undefined;\n },\n});\n\n// ── createInstallPrompt ──────────────────────────────────────\n\nexport function createInstallPrompt(): InstallPrompt {\n let deferredPrompt: any = null;\n const events = new EventTarget();\n\n if (typeof window !== 'undefined') {\n window.addEventListener('beforeinstallprompt', (e) => {\n e.preventDefault();\n deferredPrompt = e;\n events.dispatchEvent(new CustomEvent('data', {detail: {type: 'beforeinstallprompt', data: true}}));\n });\n\n window.addEventListener('appinstalled', () => {\n deferredPrompt = null;\n events.dispatchEvent(new CustomEvent('data', {detail: {type: 'appinstalled', data: true}}));\n });\n }\n\n return {\n select(type: 'beforeinstallprompt' | 'appinstalled') {\n let cb: ((e: Event) => void) | undefined;\n const in$ = xs.create<any>({\n start: (listener) => {\n cb = ({detail}: any) => {\n if (detail.type === type) listener.next(detail.data);\n };\n events.addEventListener('data', cb);\n },\n stop: () => {\n if (cb) events.removeEventListener('data', cb);\n },\n });\n return adapt(in$);\n },\n\n prompt() {\n return deferredPrompt?.prompt();\n },\n };\n}\n","/**\n * ESM ports of xstream's `flattenConcurrently` and `flattenSequentially` extras\n * (xstream, MIT, André Staltz), behaviour-identical.\n *\n * Why not re-export 'xstream/extra/*': those modules are CommonJS, and a bundler keeps a\n * CJS module that an ESM module re-exports even when the app never uses it (G-055: +300 B\n * gzip in the kanban bundle). ESM classes are tree-shaken when unused.\n */\nimport {Stream} from 'xstream'\n\nclass Inner {\n constructor(public out: any, public op: any) {}\n _n(t: any) { this.out._n(t) }\n _e(err: any) { this.out._e(err) }\n _c() { this.op.less() }\n}\n\nclass FlattenConcOperator {\n type = 'flattenConcurrently'\n active = 1 // outers and inners that have not yet ended\n out: any = null\n constructor(public ins: any) {}\n _start(out: any) { this.out = out; this.ins._add(this) }\n _stop() { this.ins._remove(this); this.active = 1; this.out = null }\n less() { if (--this.active === 0 && this.out) this.out._c() }\n _n(s: any) { if (this.out) { this.active++; s._add(new Inner(this.out, this)) } }\n _e(err: any) { if (this.out) this.out._e(err) }\n _c() { this.less() }\n}\n\nclass FlattenSeqOperator {\n type = 'flattenSequentially'\n out: any = null\n open = true\n active: any = null\n activeIL: any = null\n seq: any[] = []\n constructor(public ins: any) {}\n _start(out: any) {\n this.out = out; this.open = true; this.active = null\n this.activeIL = new Inner(out, this); this.seq = []\n this.ins._add(this)\n }\n _stop() {\n this.ins._remove(this)\n if (this.active && this.activeIL) this.active._remove(this.activeIL)\n this.open = true; this.active = null; this.activeIL = null; this.seq = []; this.out = null\n }\n less() {\n this.active = null\n if (this.seq.length > 0) this._n(this.seq.shift())\n if (!this.open && !this.active) this.out._c()\n }\n _n(s: any) {\n if (!this.out) return\n if (this.active) this.seq.push(s)\n else { this.active = s; s._add(this.activeIL) }\n }\n _e(err: any) { if (this.out) this.out._e(err) }\n _c() {\n if (!this.out) return\n this.open = false\n if (!this.active && this.seq.length === 0) this.out._c()\n }\n}\n\n/** Flattens a stream of streams, imitating every nested stream at once (RxJS mergeAll). */\nexport function flattenConcurrently<T>(ins: Stream<Stream<T>>): Stream<T> {\n return new Stream<T>(new FlattenConcOperator(ins) as any)\n}\n\n/** Flattens a stream of streams one at a time, buffering the rest in order (RxJS concatAll). */\nexport function flattenSequentially<T>(ins: Stream<Stream<T>>): Stream<T> {\n return new Stream<T>(new FlattenSeqOperator(ins) as any)\n}\n","import xs from './xstreamCompat';\nimport type {MemoryStream} from 'xstream';\n\nexport interface Ref<T = HTMLElement> {\n current: T | null;\n}\n\nexport interface Ref$<T = HTMLElement> extends Ref<T> {\n stream: MemoryStream<T | null>;\n}\n\nexport function createRef<T = HTMLElement>(): Ref<T> {\n return { current: null };\n}\n\nexport function createRef$<T = HTMLElement>(): Ref$<T> {\n const listener: { next: (val: T | null) => void } = { next: () => {} };\n const stream: MemoryStream<T | null> = xs.createWithMemory({\n start(l: any) { listener.next = (val) => l.next(val); },\n stop() { listener.next = () => {}; },\n });\n\n const ref: Ref$<T> = {\n current: null,\n stream,\n };\n\n return new Proxy(ref, {\n set(target, prop, value) {\n if (prop === 'current') {\n (target as any).current = value;\n listener.next(value);\n return true;\n }\n (target as any)[prop] = value;\n return true;\n },\n });\n}\n","import xs, {Stream} from 'xstream';\n\ninterface DriverFromAsyncOptions {\n selector?: string;\n args?: string | string[] | ((val: any) => any);\n return?: string;\n pre?: (val: any) => any;\n post?: (val: any, incoming?: any) => any;\n}\n\n/**\n * Create a driver from a promise-returning function.\n *\n * Each value the app sends to the driver calls the function (arguments picked\n * by `args`, after `pre`). The resolved value, after `post`, is delivered as\n * `{ [return]: value, [selector]: request[selector] }` (defaults:\n * `{ value, category }`) and read with `source.select(category)`. A promise\n * that resolves to `null`/`undefined` is delivered the same way.\n *\n * Errors: if the function's promise (or a promise returned by `post`)\n * rejects, or `post` throws, the error is delivered on `source.errors()`,\n * never on `select()`:\n *\n * ```js\n * // payload: { error, category: request.category, request }\n * intent: ({ QUOTE }) => ({\n * GOT_QUOTE: QUOTE.select('quote'),\n * QUOTE_ERROR: QUOTE.errors('quote'), // or .errors() / .errors(e => ...)\n * })\n * ```\n *\n * `errors(selector?)` filters like `select()`: no argument = all errors, a\n * string matches the request's selector property, a function is a predicate on\n * the error payload. While nothing listens to `errors()`, failures are only\n * logged with console.error (the pre-existing behavior).\n */\nfunction driverFromAsync(\n promiseReturningFunction: (...args: any[]) => Promise<any>,\n opts: DriverFromAsyncOptions = {}\n): (fromApp$: Stream<any>) => {select: (selector?: any) => Stream<any>; errors: (selector?: any) => Stream<any>} {\n const {\n selector: selectorProperty = 'category',\n args: functionArgs = 'value',\n return: returnProperty = 'value',\n pre: preFunction = (val: any) => val,\n post: postFunction = (val: any) => val,\n } = opts;\n\n const functionName = promiseReturningFunction.name || '[anonymous function]';\n const functionArgsType = typeof functionArgs;\n if (\n functionArgsType !== 'string' &&\n functionArgsType !== 'function' &&\n !(Array.isArray(functionArgs) && functionArgs.every((arg: any) => typeof arg === 'string'))\n ) {\n throw new Error(\n `The 'args' option for driverFromAsync(${functionName}) must be a string, array of strings, or a function. Received ${functionArgsType}`\n );\n }\n\n if (typeof selectorProperty !== 'string') {\n throw new Error(\n `The 'selector' option for driverFromAsync(${functionName}) must be a string. Received ${typeof selectorProperty}`\n );\n }\n\n return (fromApp$: Stream<any>) => {\n let sendFn: ((val: any) => void) | null = null;\n\n const toApp$ = xs.create<any>({\n start: (listener) => {\n sendFn = listener.next.bind(listener);\n },\n stop: () => {},\n });\n\n // Active errors(selector) streams (1H-6): an error goes to the ones it matches, and is\n // logged when none matches.\n const errorSubs = new Set<{listener: any; selector: any}>();\n const matches = (selector: any, val: any) =>\n selector === undefined ||\n (typeof selector === 'function' ? selector(val) : val?.[selectorProperty] === selector);\n const filterBy = (stream: Stream<any>, selector?: any) =>\n selector === undefined ? stream : stream.filter((val: any) => matches(selector, val));\n\n // 3E/R11: set by the source's dispose(), which Cycle's engine calls on teardown just\n // before it completes the sink proxies; that completion is expected, not worth a warning.\n let disposing = false;\n\n fromApp$.addListener({\n next: (incoming: any) => {\n const preProcessed = preFunction(incoming);\n let argArr: any[] = [];\n if (typeof preProcessed === 'object' && preProcessed !== null) {\n if (typeof functionArgs === 'function') {\n const extractedArgs = functionArgs(preProcessed);\n argArr = Array.isArray(extractedArgs) ? extractedArgs : [extractedArgs];\n }\n if (typeof functionArgs === 'string') {\n argArr = [preProcessed[functionArgs]];\n }\n if (Array.isArray(functionArgs)) {\n argArr = functionArgs.map((arg: string) => preProcessed[arg]);\n }\n }\n const errMsg = `Error in driver created using driverFromAsync(${functionName})`;\n const constructReply = (rawVal: any) => {\n let outgoing: any;\n if (returnProperty === undefined) {\n outgoing = rawVal;\n if (typeof outgoing === 'object' && outgoing !== null) {\n outgoing[selectorProperty] = incoming[selectorProperty];\n } else {\n console.warn(\n `The 'return' option for driverFromAsync(${functionName}) was not set, but the promise returned an non-object. The result will be returned as-is, but the '${selectorProperty}' property will not be set, so will not be filtered by the 'select' method of the driver.`\n );\n }\n } else if (typeof returnProperty === 'string') {\n outgoing = {\n [returnProperty]: rawVal,\n [selectorProperty]: incoming[selectorProperty],\n };\n } else {\n throw new Error(\n `The 'return' option for driverFromAsync(${functionName}) must be a string. Received ${typeof returnProperty}`\n );\n }\n return outgoing;\n };\n // Rejections (of the function, a thenable it resolves to, or post()) go to errors();\n // an error no active errors() selector matches is logged, as before.\n const reportError = (err: any) => {\n const val = {error: err, [selectorProperty]: incoming?.[selectorProperty], request: incoming};\n let handled = false;\n errorSubs.forEach(sub => {\n let hit = false;\n try { hit = matches(sub.selector, val); } catch (_) {}\n if (hit) {\n handled = true;\n sub.listener.next(val);\n }\n });\n if (!handled) console.error(`${errMsg}: ${err}`);\n };\n const isThenable = (val: any) => val != null && typeof val.then === 'function';\n promiseReturningFunction(...argArr)\n .then((innerVal: any) =>\n isThenable(innerVal)\n ? innerVal.then((innerOutgoing: any) => postFunction(innerOutgoing, incoming))\n : postFunction(innerVal, incoming)\n )\n .then(constructReply)\n .then((reply: any) => {\n try {\n sendFn!(reply);\n } catch (err) {\n console.error(`${errMsg}: ${err}`);\n }\n }, reportError);\n },\n error: (err: any) => {\n console.error(\n `Error received from sink stream in driver created using driverFromAsync(${functionName}):`,\n err\n );\n },\n complete: () => {\n if (disposing) return;\n console.warn(\n `Unexpected completion of sink stream to driver created using driverFromAsync(${functionName})`\n );\n },\n });\n\n return {\n dispose: () => {\n disposing = true;\n },\n select: (selector?: any) => filterBy(toApp$, selector),\n errors: (selector?: any) => {\n let sub: any;\n return xs.create<any>({\n start: (listener) => {\n errorSubs.add((sub = {listener, selector}));\n },\n stop: () => {\n errorSubs.delete(sub);\n },\n });\n },\n };\n };\n}\n\nexport {driverFromAsync};\n","export default function exactState<S>(): (state: S) => S {\n return (state: S) => state;\n}\n","export function lazy(loadFn: () => Promise<any>): any {\n let cachedComponent: any = null;\n let loadError: any = null;\n\n // View function that delegates to the loaded component\n function LazyWrapper(viewArgs: any) {\n if (loadError) {\n return {\n sel: 'div', data: { attrs: { 'data-sygnal-error': 'lazy' } },\n children: [], text: undefined, elm: undefined, key: undefined,\n };\n }\n if (!cachedComponent) {\n return {\n sel: 'div', data: { attrs: { 'data-sygnal-lazy': 'loading' } },\n children: [], text: undefined, elm: undefined, key: undefined,\n };\n }\n return cachedComponent(viewArgs);\n }\n\n // Start loading eagerly and copy static properties when done\n const loadPromise = loadFn()\n .then((mod: any) => {\n cachedComponent = mod.default || mod;\n (LazyWrapper as any).__sygnalLazyLoadedComponent = cachedComponent;\n // Copy static properties so the component works on next render\n const statics = ['model', 'intent', 'hmrActions', 'context', 'peers', 'components',\n 'initialState', 'calculated', 'storeCalculatedInState', 'DOMSourceName',\n 'stateSourceName', 'onError', 'debug', 'componentName'];\n for (const key of statics) {\n if (cachedComponent[key] !== undefined && (LazyWrapper as any)[key] === undefined) {\n (LazyWrapper as any)[key] = cachedComponent[key];\n }\n }\n })\n .catch((err: any) => {\n loadError = err;\n console.error('[lazy] Failed to load component:', err);\n });\n\n // Expose lazy loading metadata for Suspense detection\n (LazyWrapper as any).__sygnalLazy = true;\n (LazyWrapper as any).__sygnalLazyLoaded = () => cachedComponent !== null;\n (LazyWrapper as any).__sygnalLazyLoadedComponent = null;\n (LazyWrapper as any).__sygnalLazyPromise = loadPromise;\n (LazyWrapper as any).__sygnalLazyReRenderScheduled = false;\n\n return LazyWrapper;\n}\n","import xs, {Stream} from 'xstream';\n\ninterface DOMSelector {\n events(eventType: string): Stream<any>;\n}\n\ninterface ProcessDragSources {\n draggable?: DOMSelector;\n dropZone?: DOMSelector;\n}\n\ninterface ProcessDragOptions {\n effectAllowed?: DataTransfer['effectAllowed'];\n}\n\ninterface ProcessDragStreams {\n dragStart$: Stream<DragEvent>;\n dragEnd$: Stream<null>;\n dragOver$: Stream<null>;\n drop$: Stream<DragEvent>;\n}\n\nexport default function processDrag(\n {draggable, dropZone}: ProcessDragSources = {},\n options: ProcessDragOptions = {}\n): ProcessDragStreams {\n if (draggable && typeof draggable.events !== 'function') {\n throw new Error(\n 'processDrag: draggable must have an .events() method (e.g. DOM.select(...))'\n );\n }\n if (dropZone && typeof dropZone.events !== 'function') {\n throw new Error(\n 'processDrag: dropZone must have an .events() method (e.g. DOM.select(...))'\n );\n }\n const {effectAllowed = 'move'} = options;\n\n const dragStart$ = draggable\n ? draggable.events('dragstart').map((e: DragEvent) => {\n e.dataTransfer!.effectAllowed = effectAllowed;\n return e;\n })\n : xs.never();\n\n const dragEnd$ = draggable\n ? draggable.events('dragend').mapTo(null)\n : xs.never();\n\n const dragOver$ = dropZone\n ? dropZone.events('dragover').map((e: DragEvent) => {\n e.preventDefault();\n return null;\n })\n : xs.never();\n\n const drop$ = dropZone\n ? dropZone.events('drop').map((e: DragEvent) => {\n e.preventDefault();\n return e;\n })\n : xs.never();\n\n return {dragStart$, dragEnd$, dragOver$, drop$};\n}\n","import xs, {Stream} from 'xstream';\n\ninterface DOMSelector {\n events(eventType: string): Stream<any>;\n}\n\ninterface ProcessFormOptions {\n events?: string | string[];\n preventDefault?: boolean;\n}\n\ninterface FormEntries {\n event: Event;\n eventType: string;\n [key: string]: any;\n}\n\nexport default function processForm(\n form: DOMSelector,\n options: ProcessFormOptions = {}\n): Stream<FormEntries> {\n if (!form || typeof form.events !== 'function') {\n throw new Error(\n 'processForm: first argument must have an .events() method (e.g. DOM.select(...))'\n );\n }\n let {events = ['input', 'submit'], preventDefault = true} = options;\n if (typeof events === 'string') events = [events];\n\n const eventStream$ = (events as string[]).map((event) => form.events(event));\n const merged$ = xs.merge(...eventStream$);\n\n return merged$.map((e: any) => {\n if (preventDefault) e.preventDefault();\n const formEl = e.type === 'submit' ? e.srcElement : e.currentTarget;\n const formData = new FormData(formEl);\n const entries: FormEntries = {event: e, eventType: e.type};\n const submitBtn = formEl.querySelector('input[type=submit]:focus');\n if (submitBtn) {\n const {name, value} = submitBtn;\n entries[name || 'submit'] = value;\n }\n for (const [name, value] of formData.entries()) {\n entries[name] = value;\n }\n return entries;\n });\n}\n","import {setup} from '../cycle/run/index';\nimport {withState} from '../cycle/state/index';\nimport {makeDOMDriver} from '../cycle/dom/index';\nimport eventBusDriver from './eventDriver';\nimport logDriver from './logDriver';\nimport component, {ABORT} from '../component';\nimport {getDevTools} from './devtools';\nimport {configureDiagnostics} from './diagnostics/index';\nimport type {DiagnosticsMode, DiagnosticsOptions} from './diagnostics/index';\n\ninterface RunOptions {\n mountPoint?: string;\n fragments?: boolean;\n useDefaultDrivers?: boolean;\n /** Diagnostics mode (or mode + ignore list). Overrides globalThis.__SYGNAL_DEV__. */\n diagnostics?: DiagnosticsMode | DiagnosticsOptions;\n}\n\ninterface SygnalRunResult {\n sources: any;\n sinks: any;\n dispose: () => void;\n hmr?: (newComponent: any, explicitState?: any) => void;\n}\n\nexport default function run(\n app: any,\n drivers: Record<string, any> = {},\n options: RunOptions = {}\n): SygnalRunResult {\n // Initialize DevTools instrumentation bridge early (before component creation)\n if (typeof window !== 'undefined') {\n const dt = getDevTools();\n dt.init();\n }\n\n // Resolve diagnostics mode: explicit option > globalThis.__SYGNAL_DEV__ > 'off'.\n // Each run() is authoritative: without the option, mode and ignore list\n // reset to defaults (no leakage from an earlier run()/configureDiagnostics()).\n const {diagnostics} = options;\n const diagOptions: DiagnosticsOptions = typeof diagnostics === 'string' ? {mode: diagnostics} : diagnostics || {};\n configureDiagnostics({mode: diagOptions.mode, ignore: diagOptions.ignore || []});\n\n const {mountPoint = '#root', fragments = true, useDefaultDrivers = true} = options;\n if (!app.isSygnalComponent) {\n const name = app.name || app.componentName || app.label || 'FUNCTIONAL_COMPONENT';\n const view = app;\n const {\n model,\n intent,\n hmrActions,\n context,\n peers,\n components,\n initialState,\n calculated,\n storeCalculatedInState,\n DOMSourceName,\n stateSourceName,\n onError,\n debug,\n } = app;\n const componentOptions = {\n name,\n view,\n model,\n intent,\n hmrActions,\n context,\n peers,\n components,\n initialState,\n calculated,\n storeCalculatedInState,\n DOMSourceName,\n stateSourceName,\n onError,\n debug,\n };\n\n app = component(componentOptions);\n }\n\n if (\n typeof window !== 'undefined' &&\n window.__SYGNAL_HMR_UPDATING === true &&\n typeof window.__SYGNAL_HMR_PERSISTED_STATE !== 'undefined'\n ) {\n app.initialState = window.__SYGNAL_HMR_PERSISTED_STATE;\n }\n\n const wrapped = withState(app, 'STATE');\n\n const baseDrivers = useDefaultDrivers\n ? {\n EVENTS: eventBusDriver,\n DOM: makeDOMDriver(mountPoint, {snabbdomOptions: {experimental: {fragments}}} as any),\n LOG: logDriver,\n }\n : {};\n\n const combinedDrivers = {...baseDrivers, ...drivers};\n\n const {sources, sinks, run: _run} = setup(wrapped, combinedDrivers as any);\n const rawDispose = _run();\n let persistListener: any = null;\n\n if (\n typeof window !== 'undefined' &&\n (sources as any)?.STATE?.stream &&\n typeof (sources as any).STATE.stream.addListener === 'function'\n ) {\n persistListener = {\n next: (state: any) => {\n window.__SYGNAL_HMR_PERSISTED_STATE = state;\n },\n error: () => {},\n complete: () => {},\n };\n (sources as any).STATE.stream.addListener(persistListener);\n }\n\n const dispose = () => {\n if (\n persistListener &&\n (sources as any)?.STATE?.stream &&\n typeof (sources as any).STATE.stream.removeListener === 'function'\n ) {\n (sources as any).STATE.stream.removeListener(persistListener);\n persistListener = null;\n }\n // Trigger the component's dispose() which fires the DISPOSE action and dispose$ stream\n if (typeof (sinks as any).__dispose === 'function') {\n try { (sinks as any).__dispose(); } catch (_) {}\n }\n rawDispose();\n };\n\n const exposed: SygnalRunResult = {sources, sinks, dispose};\n\n // Store app reference for time-travel\n if (typeof window !== 'undefined') {\n window.__SYGNAL_DEVTOOLS_APP__ = exposed;\n }\n\n const swapToComponent = (newComponent: any, state?: any) => {\n const persistedState =\n typeof window !== 'undefined' ? window.__SYGNAL_HMR_PERSISTED_STATE : undefined;\n const fallbackState = typeof persistedState !== 'undefined' ? persistedState : app.initialState;\n const resolvedState = typeof state === 'undefined' ? fallbackState : state;\n if (typeof window !== 'undefined') {\n window.__SYGNAL_HMR_UPDATING = true;\n window.__SYGNAL_HMR_STATE = resolvedState;\n window.__SYGNAL_HMR_PERSISTED_STATE = resolvedState;\n }\n exposed.dispose();\n const App = newComponent.default || newComponent;\n App.initialState = resolvedState;\n const updated = run(App, drivers, options);\n exposed.sources = updated.sources;\n exposed.sinks = updated.sinks;\n exposed.dispose = updated.dispose;\n\n if (\n typeof resolvedState !== 'undefined' &&\n updated?.sinks?.STATE &&\n typeof updated.sinks.STATE.shamefullySendNext === 'function'\n ) {\n const restore = () => updated.sinks.STATE.shamefullySendNext(() => ({...resolvedState}));\n setTimeout(restore, 0);\n setTimeout(restore, 20);\n }\n\n if (\n typeof window !== 'undefined' &&\n updated?.sources?.STATE?.stream &&\n typeof updated.sources.STATE.stream.setDebugListener === 'function'\n ) {\n updated.sources.STATE.stream.setDebugListener({\n next: () => {\n updated.sources.STATE.stream.setDebugListener(null);\n window.__SYGNAL_HMR_STATE = undefined;\n setTimeout(() => {\n window.__SYGNAL_HMR_UPDATING = false;\n }, 100);\n },\n });\n } else if (typeof window !== 'undefined') {\n window.__SYGNAL_HMR_STATE = undefined;\n window.__SYGNAL_HMR_UPDATING = false;\n }\n };\n\n const resolveHotModule = (incoming: any): any => {\n if (!incoming) return null;\n if (Array.isArray(incoming)) return resolveHotModule(incoming.find(Boolean));\n if (incoming.default && typeof incoming.default === 'function') return incoming;\n if (typeof incoming === 'function') return {default: incoming};\n return null;\n };\n\n const hmr = (newComponent: any, explicitState?: any) => {\n const normalizedModule = resolveHotModule(newComponent);\n const moduleToUse = normalizedModule || {default: app};\n\n if (typeof explicitState !== 'undefined') {\n if (typeof window !== 'undefined')\n window.__SYGNAL_HMR_LAST_CAPTURED_STATE = explicitState;\n swapToComponent(moduleToUse, explicitState);\n return;\n }\n\n const persistedState =\n typeof window !== 'undefined' ? window.__SYGNAL_HMR_PERSISTED_STATE : undefined;\n if (typeof persistedState !== 'undefined') {\n if (typeof window !== 'undefined')\n window.__SYGNAL_HMR_LAST_CAPTURED_STATE = persistedState;\n swapToComponent(moduleToUse, persistedState);\n return;\n }\n\n const sourceState = exposed?.sources?.STATE?.stream?._v;\n if (typeof sourceState !== 'undefined') {\n if (typeof window !== 'undefined')\n window.__SYGNAL_HMR_LAST_CAPTURED_STATE = sourceState;\n swapToComponent(moduleToUse, sourceState);\n return;\n }\n\n if (\n exposed?.sinks?.STATE &&\n typeof exposed.sinks.STATE.shamefullySendNext === 'function'\n ) {\n exposed.sinks.STATE.shamefullySendNext((state: any) => {\n if (typeof window !== 'undefined')\n window.__SYGNAL_HMR_LAST_CAPTURED_STATE = state;\n swapToComponent(moduleToUse, state);\n return ABORT;\n });\n return;\n }\n\n swapToComponent(moduleToUse);\n };\n\n exposed.hmr = hmr;\n\n return exposed;\n}\n"],"names":["Object","defineProperty","exports","value","root","result","_Symbol","Symbol","observable","err","ponyfill","require$$0","toStr","prototype","toString","isArguments","str","call","isArgs","length","callee","slice","Array","origKeys","keys","keysShim","o","has","hasOwnProperty","isEnumerable","propertyIsEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","constructor","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","window","k","e","object","isObject","isFunction","isString","theKeys","TypeError","skipProto","i","push","String","j","name","skipConstructor","equalsConstructorPrototypeIfNotBuggy","implementation","require$$1","originalKeys","shim","keysWorksWithArguments","args","arguments","undefined","objectKeys","origSymbol","hasSymbolSham","getOwnPropertySymbols","iterator","obj","sym","symObj","getOwnPropertyNames","syms","getOwnPropertyDescriptor","descriptor","enumerable","test","foo","$Object","that","target","this","bound","boundLength","Math","max","boundArgs","Function","join","apply","concat","Empty","functionBind","bind","src","$SyntaxError","SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","calleeThrows","get","gOPDthrows","hasSymbols","hasProto","__proto__","getProto","getPrototypeOf","x","needsEval","TypedArray","Uint8Array","INTRINSICS","AggregateError","ArrayBuffer","Atomics","BigInt","BigInt64Array","BigUint64Array","Boolean","DataView","Date","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","Error","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","isFinite","isNaN","JSON","Map","Number","parseFloat","parseInt","Promise","Proxy","RangeError","ReferenceError","Reflect","RegExp","Set","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakRef","WeakSet","error","errorProto","doEval","fn","gen","LEGACY_ALIASES","require$$2","hasOwn","require$$3","$concat","$spliceApply","splice","$replace","replace","$strSlice","$exec","exec","rePropName","reEscapeChar","getBaseIntrinsic","allowMissing","alias","intrinsicName","GetIntrinsic","parts","string","first","last","match","number","quote","subString","stringToPath","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","isOwn","part","desc","$defineProperty","hasPropertyDescriptors","hasArrayLengthDefineBug","hasPropertyDescriptors_1","origDefineProperty","supportsDescriptors","predicate","configurable","writable","defineProperties","map","predicates","props","global","polyfill","define","getPolyfill","globalThis","getGlobal","extendStatics","globalthis","__extends","d","b","setPrototypeOf","p","__","create","xstream","NO_IL_1","NO_IL","MemoryStream","Stream_1","Stream","$$observable","default","NO","NO_1","noop","cp","a","l","_try","c","t","u","f","_e","_n","_c","internalizeProducer","producer","_start","il","next","complete","start","_stop","stop","StreamSub","_stream","_listener","unsubscribe","_remove","Observer","FromObservable","type","ins","active","out","_sub","subscribe","Merge","insArr","ac","s","L","_add","CombineListener","ils","up","vals","Nc","Combine","Nn","v","n","FromArray","FromPromise","on","prod","then","setTimeout","Periodic","period","intervalID","self","setInterval","clearInterval","Debug","arg","console","log","Drop","dropped","EndWhenListener","op","end","EndWhen","oil","Filter","passes","r","FlattenListener","inner","less","Flatten","open","Fold","seed","_this","acc","Last","val","MapOp","project","Remember","ReplaceError","replacer","StartWith","Take","taken","m","_prod","_ils","_stopID","_dl","_d","_target","_err","_x","_stopNow","ta","clearTimeout","indexOf","_pruneCycles","_hasNoSinks","trace","N","addListener","listener","removeListener","createWithMemory","never","empty","throw","from","input","fromObservable","fromPromise","isArray","fromArray","of","items","_i","array","promise","obs","endWhen","periodic","_map","mapTo","projectedValue","filter","f1","f2","take","amount","drop","startWith","initial","other","fold","accumulate","replaceError","flatten","compose","operator","remember","debug","labelOrSpy","imitate","shamefullySendNext","shamefullySendError","shamefullySendComplete","setDebugListener","merge","streams","combine","_super","_has","_v","MemoryStream_1","xs","_default","adapt","stream","globalObj","Cyclejs","adaptStream","counter","newScope","isolate","component","scope","dataflowComponent","checkIsolateArgs","randomScope","scopes","outerSources","rest","scopesPerChannel","sources","perChannel","forEach","channel","candidate","wildcard","normalizeScopes","innerSources","outerSource","isolateSource","isolateAllSources","outerSinks","innerSinks","source","innerSink","isolateSink","isolateAllSinks","reset","ConcatProducer","NO_VALUE","DebounceOperator","dt","id","debounce","ThrottleOperator","DelayOperator","delay","EMPTY","DropRepeatsOperator","isEq","y","dropRepeats","isEqual","SampleCombineListener","down","SampleCombineOperator","others","sampleCombine","sampler","makeGetter","state","makeSetter","childState","newVal","index","_val","updateArrayEntry","set","select","innerReducer$","innerReducer","outer","prevInner","nextInner","StateSource","_name","_isCycleSource","PickMergeListener","PickMerge","sel","inst","key","delete","clear","arrSinks","arr","sinks","_key","sink","dict","PickCombineListener","PickCombine","outArr","removed","reordered","prev","same","seen","isReordered","Instances","instances$","_instances$","pickMerge","selector","inst$","pickCombine","defaultItemScope","instanceLens","itemKey","item","identityLens","withState","main","reducerMimic$","state$","reducer","queueMicrotask","vnode","data","children","text","elm","primitive","addNS","ns","child","childData","h","is.array","is.primitive","startsWith","parentNode","node","isDocumentFragment","parseFragment","parent","nodeType","fragmentNode","_a","_b","fragment","firstChildNode","firstChild","lastChildNode","lastChild","htmlDomApi","createElement","tagName","options","document","createElementNS","namespaceURI","qualifiedName","createTextNode","createDocumentFragment","createComment","insertBefore","newNode","referenceNode","removeChild","appendChild","nextSibling","childNodes","setTextContent","textContent","getTextContent","isElement","isText","isComment","emptyNode","sameVnode","vnode1","vnode2","isSameKey","isSameIs","is","isSameSel","isSameTextOrFragment","documentFragmentIsNotSupported","createKeyToOldIdx","beginIdx","endIdx","hooks","init","modules","domApi","cbs","update","remove","destroy","pre","post","api","hook","module","currentHook","createRmCb","childElm","listeners","createElm","insertedVnodeQueue","hashIdx","dotIdx","hash","dot","tag","min","setAttribute","ch","insert","experimental","fragments","addVnodes","parentElm","before","vnodes","startIdx","invokeDestroyHook","removeVnodes","rm","removeHook","patchVnode","oldVnode","_f","_g","_h","prepatch","oldCh","newCh","oldKeyToIdx","idxInOld","elmToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","updateChildren","postpatch","classes","getAttribute","split","toLowerCase","emptyNodeAt","toVNode","cn","attrs","dataset","elmAttrs","attributes","elmChildren","nodeName","attributeName","_","toUpperCase","nodeValue","updateClass","cur","oldClass","class","klass","classList","classModule","updateProps","old","oldProps","propsModule","updateAttrs","oldAttrs","removeAttribute","charCodeAt","setAttributeNS","attributesModule","CAPS_REGEX","updateDataset","oldDataset","datasetModule","copyToThunk","thunkVNode","oldArgs","fromEvent","element","eventName","useCapture","preventDefault","passive","event","preventDefaultConditional","addEventListener","capture","removeEventListener","matchObject","matcher","enrichEventStream","stream$","checked","attr","el","closest","DocumentDOMSource","_selector","elements","querySelectorAll","querySelector","events","eventType","bubbles","ev","Element","matches","BodyDOMSource","body","isClassOrId","checkValidContainer","container","HTMLElement","DocumentFragment","getSelectors","namespace","res","trim","isEqualNamespace","ScopeChecker","isolateModule","_namespace","isDirectlyInScope","leaf","getNamespace","ElementFinder","scopeChecker","topNode","getElement","getScopeObj","DOCS_BASE_URL","CODE_SEVERITY","SYG101","SYG102","SYG103","SYG104","SYG105","SYG106","SYG110","SYG111","SYG201","SYG202","SYG301","SYG401","SYG900","SYG206","SYG207","SYG208","SYG209","SYG210","SYG211","SYG212","SYG213","SYG214","SYG215","SYG216","SYG217","SYG218","SYG219","SYG220","SYG402","SYG403","SYG404","SYG405","SYG406","SYG407","SYG408","SYG409","SYG410","SYG411","SYG412","SYG413","SYG414","SYG415","SYG416","SYG417","SYG418","SYG419","SYG420","SYG601","SYG602","SYG603","SYG604","SYG605","SYG606","SYG607","SYG901","SYG902","SYG903","docsUrlFor","code","DiagnosticError","diagnostic","super","explicitMode","mode","enabled","ignored","collected","checks","resolveDiagnosticsMode","__SYGNAL_DEV__","configureDiagnostics","ignore","getDiagnosticsMode","nameOf","sentence","formatDiagnostic","details","message","fix","report","severity","docsUrl","timestamp","now","shift","cb","getDiagnostics","onDiagnostic","registerCheck","check","asyncThrow","raise","onIntent","onModel","onRender","onReducer","onDispose","onSelector","onBusEmit","onBusSelect","__SYGNAL_DIAGNOSTICS__","MainDOMSource","_rootElement$","_sanitation$","_isolateModule","_eventDelegator","scopeObj","stringify","_elements","elementFinder","dispose","selectorParser","className","VNodeWrapper","rootElement","wrapDocFrag","wrap","selTagName","selId","vNodeClassName","vNode","dataClass","cl","classNameFromVNode","vNodeDataProps","vNodeId","vnodeFn","selClass","raf","requestAnimationFrame","nextFrame","reflowForced","setNextFrame","prop","updateStyle","oldStyle","style","oldHasDel","removeProperty","delayed","name2","setProperty","styleModule","offsetLeft","applied","getComputedStyle","pendingSelects","selectModule","_oldVnode","controlledInputModule","classObject","baseClasses","addAll","names","add","isSet","syncClassName","hasKey","oldCn","keep","tokens","classNameModule","emptyVnode","SymbolTree","mapper","tree","path","curr","_max","getDefault","mkDefaultElement","IsolateModule","namespaceTree","namespaceByElement","vnodesBeingRemoved","setEventDelegator","del","eventDelegator","insertElement","removeElement","getRootElement","createModule","emptyVNode","oldVNode","oldElm","oldData","oldNamespace","isolation","PriorityQueue","prios","prio","eventTypesThatDontBubble","EventDelegator","rootElement$","virtualListeners","nonBubblingListenersToAdd","virtualNonBubblingListener","domListeners","domListenersToAdd","nonBubblingListeners","origin","resetEventListeners","setupDOMListener","setupNonBubblingListener","subject","dest","insertListener","setArray","found","tester","et","ef","nonBubbleSubject","sub","finder","subscription","_s","subs","toRemove","size","relevantSets","getVirtualListeners","destination","exact","onEvent","iter","entries","done","putNonBubblingListener","cycleEvent","patchEvent","bubble","doBubbleStep","stopPropagation","propagationHasBeenStopped","newRoot","newIndex","mutateEventCurrentTarget","pEvent","oldStopPropagation","currentTargetElement","ownerTarget","dropCompletion","unwrapElementFromVNode","defaultReportSnabbdomError","makeDOMDriver","defaultModules","makeDOMDriverInputGuard","snabbdomOptions","patch","domReady$","lis","readyState","vnodeWrapper","mutationObserver","mutationConfirmed$","MutationObserver","disconnect","vnode$","view$","domDriverInputGuard","sanitation$","firstRoot$","firstRoot","selectors","domElement","getValidNode","rememberedVNode$","elementAfterPatch$","addRootScope","observe","childList","characterData","subtree","attributeOldValue","characterDataOldValue","reportSnabbdomError","delegator","SCOPE_PREFIX","MockedDOMSource","_mockConfig","_hub","_path","_onEvents","configured","hub","hub$","ev$","mockConfigForSelector","mockDOMSource","mockConfig","onEvents","emit","extra","warn","fail","COLLECTION_COUNT","collection","stateLense","opts","combineList","globalList","stateSourceName","domSourceName","containerClass","collectionOpts","ind","itemScope","collectSinks","instances","reduce","includes","combined","isolateOpts","disposed","nextState","nextInstArray","nextKeys","stateScope","otherScopes","itemFactory","__dispose","makeCollection","makeIsolatedCollection","Collection","sanitizedProps","label","preventInstantiation","namespaceValue","resolveInteropDefault","getXs","xstreamNamespace","xstreamNamespace.Stream","xstreamNamespace.default","NAME_FIX","switchable","factories","name$","switched","nameType","withInitial$","_switchable","mapFunction","STATE","_name$","factory","switchedState","newComponentName","switchedSinks","sinkName","find","componentName","definedSinks","Switchable","makeCommandSource","cmd","msg","ENVIRONMENT","process","env","BOOTSTRAP_ACTION","INITIALIZE_ACTION","DISPOSE_ACTION","PARENT_SINK_NAME","READY_SINK_NAME","EFFECT_SINK_NAME","ERR_FIX","STATE_SNAPSHOT","COMPONENT_COUNT","pendingReducers","ABORT","for","isAbort","description","normalizeCalculatedEntry","field","entry","deps","fixedIsolateOpts","isObj","currySources","returnFunction","wrapped","fixedOpts","instance","Component","isSygnalComponent","intent","model","hmrActions","context","response","view","peers","components","initialState","calculated","storeCalculatedInState","DOMSourceName","requestSourceName","isolatedState","onError","_componentNumber","sourceNames","_debug","calcEntries","_calculatedNormalized","_calculatedFieldNames","dep","calcDeps","inDegree","reverseGraph","depList","queue","degree","sorted","current","dependent","inCycle","visited","traceCycle","pop","_calculatedOrder","_calculatedFieldCache","lastDepValues","lastResult","isSubComponent","currentSlots","currentState","__SYGNAL_DEVTOOLS__","connected","onStateChanged","props$","sygnalFactory","sygnalOptions","currentProps","onPropsChanged","children$","domSource","_processedChildren$","slots","defaultChildren","slotChildren","extractSlots","currentChildren","receiver","__NOOP_ACTION__","_subscriptions","_activeSubComponents","_childReadyState","_readyChangedListener","_readyChanged$","_disposeListener","_dispose$","dispose$","addCalculated","createMemoizedAddCalculated","immediate","fixedMsg","onDebugLog","makeLog","initChildSources$","initIntent$","initHmrActions","initAction$","initState","initContext","initModel$","initPeers$","initSubComponentSink$","initSubComponentsRendered$","initVdom$","initSinks","__index","onComponentCreated","parentNum","__parentComponentNumber","onSubComponentRegistered","_disposed","diag.onDispose","onComponentDisposed","some","action$","sink$","vdom$","SYGNAL_DEBUG","intent$","diag.onIntent","action","hmrAction$","requestSource","runner","mapped","data$","bootstrap$","_hmrUpdating","__SYGNAL_HMR_UPDATING","wrapped$","initialApiData","hydrate$","onActionDispatched","__parentContext$","context$","objIsEqual","parentContext$","logError","_parent","newContext","_value","valueType","currentContext","onContextChanged","model$","diag.onModel","hmrState","__SYGNAL_HMR_STATE","effectiveInitialState","shimmed$","snapListener","sequenced$","run","snapSub","snapshotted$","onState","makeOnAction","onNormal","modelEntries","reducers","seenActionSinks","modelMap","actionSinkKey","effect$","makeEffectHandler","isStateSink","isParentSink","replaceAll","command","peers$","peerName","peerFactory","peer$","newSourcesNext","childSources$","nameOrComponent","all$","newChildSources","subComponentSink$","newSubComponentSinks","triggerSubComponentsRendered","subComponentsRendered$","renderParameters$","collectRenderParameters","params","fallback","fallbackErr","vDom","vdom","preprocessVdom","instantiateSubComponents","renderVdom","EVENTS","__emitterId","__emitterName","effectSub","values","__explicitReady","rootAction$","filtered$","returnStream$","fresh","_state","enhancedState","newState","diag.onReducer","cleanupCalculated","reduced","lastState","getCalculatedValues","mergedState","computedSoFar","cache","currentDepValues","unchanged","incomingState","copy","renderParams","stateStream","propsIsEqual","vDom$","componentNameSet","previousComponents","foundComponents","getComponents","rootEntry","sinkArrsByType","childSources","newInstanceCount","newComponents","isCollection","isSwitchable","addSinks","instantiator","instantiateCollection","instantiateSwitchable","instantiateCustomComponent","fallbackVNode","makeCoordinatedSubComponentDomSink","mergedSinksByType","streamArr","currentIds","domSink$","withCalculated","lense","createSubComponentLense","stateField","componentType","defaultState","baseLense","_oldState","oldState","arrayOperators","sort","sortFunctionFromProp","stateSource","collectionOf","idField","idfield","fieldLense","filtered","updated","oldItem","__primitive","newItem","arrayFields","collectionKeys","itemProps$","itemProps","PARENT","itemName","onCollectionMounted","switchableComponents","subInitialState","subIsolatedState","subInitState","local","local$","__sygnalCommand","_targetComponentName","commands$","componentInstances$","processSuspensePost","ids","readySink","isExplicit","ready","wasReady","onReadyChanged","vdoms","every","withIds","injectComponents","diag.onRender","currentElement","parentId","componentsProcessed","isComponent","getComponentIdFromElement","comp","readyMap","newChildren","flat","hasNotReadyChild","portalPatch","snabbdomInit","componentInstance","__sygnalLazy","__sygnalLazyLoaded","loaded","__sygnalLazyLoadedComponent","cleanProps","__sygnalLazyReRenderScheduled","__sygnalLazyPromise","stateCopy","__sygnalLazyTick","portalChildren","display","portalMount","attempts","tryMount","_portalVnode","newVnode","prevPortalVnode","_portalContainer","pv","createPortalPlaceholder","duration","existingInsert","existingRemove","vn","onTransitionEnd","applyTransitionHooks","handler","anchor","obj1","obj2","sanitizeObject","maxDepth","depth","keys1","sanitized","SORT_FIX","__baseSort","ascending","direction","__sortFunctionFromObj","directionRaw","sortProp","propType","sorters","sorter","comparisonSoFar","currentSorter","Portal","Transition","Suspense","Slot","enrichDragStream","dropZone","isObjectEmpty","setup","drivers","engine","sinkProxies","makeSinkProxies","rawSources","callDrivers","adaptSources","_run","sinkNames","buffers","replicators","subscriptions","replicateMany","disposeEngine","disposeSources","disposeSinkProxies","setupReusable","disposeRun","eventBusDriver","out$","EventTarget","dispatchEvent","CustomEvent","detail","onBusEvent","all","_type","in$","logDriver","SygnalDevTools","_connected","_components","_stateHistory","_maxHistory","_handleExtensionMessage","payload","maxHistory","_sendFullTree","_setDebug","_timeTravel","_takeSnapshot","_restoreSnapshot","_sendComponentState","componentId","componentNumber","meta","hasModel","hasIntent","hasContext","hasCalculated","createdAt","mviGraph","_extractMviGraph","_instanceRef","_post","_serializeMeta","_safeClone","actionType","parentNumber","childNumber","childId","contextTrace","_buildContextTrace","onCommandSent","targetComponentId","targetComponentName","parentName","childKey","itemComponentName","itemComponent","disposedAt","deref","hasState","stateSinkName","stateSink","app","__SYGNAL_DEVTOOLS_APP__","snapshot","fields","currentId","contextProvides","providerId","providerName","history","postMessage","parse","actions","actionName","getDevTools","normalizeModule","maybeModule","isValidClassName","classes_processString","svgPropsMap","svg","g","defs","symbol","use","circle","ellipse","line","polygon","polyline","rect","tspan","textPath","linearGradient","radialGradient","pattern","clipPath","mask","marker","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDropShadow","feFlood","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","feFuncR","feFuncG","feFuncB","feFuncA","metadata","foreignObject","switch","animate","animateMotion","animateTransform","mpath","gOPD","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","newValue","getProperty","extend","copyIsArray","clone","deep","assign","objs","_extend","reduceDeep","mapObject","omit","mod","applySvg","propsWithoutClassName","fn.omit","classAttr","mergedAttrs","fn.assign","considerSvg","rewrites","role","tabindex","sanitizeData","ref","autoFocus","autoSelect","_autoFocus","_autoSelect","doFocus","focus","existingPostpatch","wasFocused","isFocused","applyFocusProps","fn.mapObject","charAt","rewriteModules","dashIndex","moduleData","fn.deepifyKeys","setRef","existingDestroy","applyRefProps","sanitizeText","is.text","sanitizeChildren","fn.reduceDeep","__sygnalFragment","createElementWithModules","VOID_ELEMENTS","ESC_MAP","escapeHtml","camelToKebab","renderToString","componentDef","hydrateState","resolvedState","componentContext","mergedContext","contextFn","processSSRTree","html","vnodeToHtml","varName","parentState","childProps","stateProp","childContext","defaultSlotChildren","vnodeChildren","slotName","renderSubComponent","renderedItems","itemState","itemContext","itemVnode","containerData","renderCollection","activeName","activeComponent","renderToStringInternal","renderSwitchable","selectorClasses","classStr","parseSelector","selectorId","classNames","unshift","unique","styleStr","cssKey","serializeStyle","buildAttributes","innerHTML","kids","isScope","selText","norm","PAGE","SUPPORTED","IDENT","unesc","parsed","bad","what","unsupported","ws","ident","anb","compound","cls","ps","not","cx","combs","space","parseSel","tryParse","tagOf","els","at","tagId","sid","raw","endsWith","sibs","pos","chain","savedConfig","savedStrict","_xs","trackWorker","worker","_onlineCleanup","onlineStatus$","navigator","onLine","off","Inner","FlattenConcOperator","FlattenSeqOperator","activeIL","seq","trimmed","send","_targetComponentId","deferredPrompt","prompt","promiseReturningFunction","selectorProperty","functionArgs","return","returnProperty","preFunction","postFunction","functionName","functionArgsType","fromApp$","sendFn","toApp$","errorSubs","disposing","incoming","preProcessed","argArr","extractedArgs","errMsg","innerVal","isThenable","innerOutgoing","rawVal","outgoing","reply","request","handled","hit","filterBy","errors","hot","loadComponent","acceptDependencies","hmr","accept","applying","invoke","resolve","async","acceptedModules","explicitState","catch","loadFn","cachedComponent","loadError","LazyWrapper","viewArgs","loadPromise","statics","categories","bus","draggingCategory","register","config","category","existing","configs","de","draggable","dataTransfer","effectAllowed","dragImage","imgEl","getBoundingClientRect","setDragImage","clientX","left","clientY","top","accepts","zone","draggingConfig","busEventName","dragstart","dragend","dragover","scriptUrl","serviceWorker","reg","installing","waiting","unregister","dragStart$","dragEnd$","dragOver$","drop$","form","eventStream$","formEl","srcElement","currentTarget","formData","FormData","submitBtn","diagnostics","strict","prevMode","core","resetOnce","offDiag","rootName","live","owners","scopeIds","evTypes","scopeOf","$","activity","lastActivity","bump","offCheck","sc","checkedTree","newListener","probe","sels","own","walk","inside","boundary","vtree","check104","childName","restore","port","actionStream","bare","added","allDrivers","DOM","lk","retry","LOG","rawDispose","listen","states","sinkValues","inputs","retryTimer","isReady","pump","head","until","go","ms","markReady","readyPromise","later","missing","timer","renderedUpTo","arm","ks","tops","tick","quiesce","quiet","cap","busy","idle","failure","waiters","takeFailure","throwFailure","noMatch","waited","waitMatch","timeoutMs","reject","base","unmark","dom$","events$","simulateAction","simulateEvent","evInit","page","failWith","ls","lsel","vval","like","closestFrom","cs","waitForState","settle","race","emitted","expectNoDiagnostics","inspect","mock","diagOptions","mountPoint","useDefaultDrivers","__SYGNAL_HMR_PERSISTED_STATE","combinedDrivers","persistListener","exposed","swapToComponent","newComponent","persistedState","fallbackState","App","resolveHotModule","moduleToUse","__SYGNAL_HMR_LAST_CAPTURED_STATE","sourceState","partial"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,27,28,29,30,31,32,33,34,35,36,80]}