@typed/template 0.9.6 → 0.10.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 (300) hide show
  1. package/RenderQueue/package.json +6 -0
  2. package/dist/cjs/Directive.js +1 -1
  3. package/dist/cjs/Directive.js.map +1 -1
  4. package/dist/cjs/ElementRef.js +1 -1
  5. package/dist/cjs/ElementRef.js.map +1 -1
  6. package/dist/cjs/ElementSource.js +1 -1
  7. package/dist/cjs/ElementSource.js.map +1 -1
  8. package/dist/cjs/EventHandler.js +11 -4
  9. package/dist/cjs/EventHandler.js.map +1 -1
  10. package/dist/cjs/Html.js +84 -44
  11. package/dist/cjs/Html.js.map +1 -1
  12. package/dist/cjs/HtmlChunk.js +67 -21
  13. package/dist/cjs/HtmlChunk.js.map +1 -1
  14. package/dist/cjs/Hydrate.js +6 -6
  15. package/dist/cjs/Hydrate.js.map +1 -1
  16. package/dist/cjs/Many.js +4 -4
  17. package/dist/cjs/Many.js.map +1 -1
  18. package/dist/cjs/Meta.js +10 -3
  19. package/dist/cjs/Meta.js.map +1 -1
  20. package/dist/cjs/Parser.js +1 -1
  21. package/dist/cjs/Placeholder.js +5 -9
  22. package/dist/cjs/Placeholder.js.map +1 -1
  23. package/dist/cjs/Platform.js +7 -5
  24. package/dist/cjs/Platform.js.map +1 -1
  25. package/dist/cjs/Render.js +8 -7
  26. package/dist/cjs/Render.js.map +1 -1
  27. package/dist/cjs/RenderContext.js +8 -92
  28. package/dist/cjs/RenderContext.js.map +1 -1
  29. package/dist/cjs/RenderEvent.js +9 -1
  30. package/dist/cjs/RenderEvent.js.map +1 -1
  31. package/dist/cjs/RenderQueue.js +341 -0
  32. package/dist/cjs/RenderQueue.js.map +1 -0
  33. package/dist/cjs/RenderTemplate.js +1 -1
  34. package/dist/cjs/RenderTemplate.js.map +1 -1
  35. package/dist/cjs/Template.js +12 -0
  36. package/dist/cjs/Template.js.map +1 -1
  37. package/dist/cjs/Test.js +64 -33
  38. package/dist/cjs/Test.js.map +1 -1
  39. package/dist/cjs/Vitest.js +12 -20
  40. package/dist/cjs/Vitest.js.map +1 -1
  41. package/dist/cjs/index.js +6 -3
  42. package/dist/cjs/index.js.map +1 -1
  43. package/dist/cjs/internal/EventSource.js +16 -9
  44. package/dist/cjs/internal/EventSource.js.map +1 -1
  45. package/dist/cjs/internal/HydrateContext.js.map +1 -1
  46. package/dist/cjs/internal/browser.js +11 -10
  47. package/dist/cjs/internal/browser.js.map +1 -1
  48. package/dist/cjs/internal/character-entities.js +2141 -0
  49. package/dist/cjs/internal/character-entities.js.map +1 -0
  50. package/dist/cjs/internal/errors.js +19 -2
  51. package/dist/cjs/internal/errors.js.map +1 -1
  52. package/dist/cjs/internal/indexRefCounter.js +36 -63
  53. package/dist/cjs/internal/indexRefCounter.js.map +1 -1
  54. package/dist/cjs/internal/parser.js +18 -17
  55. package/dist/cjs/internal/parser.js.map +1 -1
  56. package/dist/cjs/internal/parser2.js +382 -0
  57. package/dist/cjs/internal/parser2.js.map +1 -0
  58. package/dist/cjs/internal/server-parts.js +124 -0
  59. package/dist/cjs/internal/server-parts.js.map +1 -0
  60. package/dist/cjs/internal/server.js +15 -185
  61. package/dist/cjs/internal/server.js.map +1 -1
  62. package/dist/cjs/internal/utils.js +73 -9
  63. package/dist/cjs/internal/utils.js.map +1 -1
  64. package/dist/cjs/internal/v2/SyncPart.js +6 -0
  65. package/dist/cjs/internal/v2/SyncPart.js.map +1 -0
  66. package/dist/cjs/internal/v2/helpers.js +15 -0
  67. package/dist/cjs/internal/v2/helpers.js.map +1 -0
  68. package/dist/cjs/internal/v2/hydrate.js +202 -0
  69. package/dist/cjs/internal/v2/hydrate.js.map +1 -0
  70. package/dist/cjs/internal/v2/hydration-template.js +269 -0
  71. package/dist/cjs/internal/v2/hydration-template.js.map +1 -0
  72. package/dist/cjs/internal/v2/parts.js +169 -0
  73. package/dist/cjs/internal/v2/parts.js.map +1 -0
  74. package/dist/cjs/internal/v2/render-entry.js +110 -0
  75. package/dist/cjs/internal/v2/render-entry.js.map +1 -0
  76. package/dist/cjs/internal/v2/render-sync-parts.js +318 -0
  77. package/dist/cjs/internal/v2/render-sync-parts.js.map +1 -0
  78. package/dist/cjs/internal/v2/render.js +417 -0
  79. package/dist/cjs/internal/v2/render.js.map +1 -0
  80. package/dist/cjs/internal/v2/sync-parts.js +115 -0
  81. package/dist/cjs/internal/v2/sync-parts.js.map +1 -0
  82. package/dist/dts/ElementRef.d.ts +1 -1
  83. package/dist/dts/ElementRef.d.ts.map +1 -1
  84. package/dist/dts/ElementSource.d.ts +1 -1
  85. package/dist/dts/ElementSource.d.ts.map +1 -1
  86. package/dist/dts/EventHandler.d.ts +12 -8
  87. package/dist/dts/EventHandler.d.ts.map +1 -1
  88. package/dist/dts/Html.d.ts +6 -5
  89. package/dist/dts/Html.d.ts.map +1 -1
  90. package/dist/dts/HtmlChunk.d.ts.map +1 -1
  91. package/dist/dts/Hydrate.d.ts +1 -3
  92. package/dist/dts/Hydrate.d.ts.map +1 -1
  93. package/dist/dts/Many.d.ts +9 -11
  94. package/dist/dts/Many.d.ts.map +1 -1
  95. package/dist/dts/Meta.d.ts +5 -1
  96. package/dist/dts/Meta.d.ts.map +1 -1
  97. package/dist/dts/Parser.d.ts +1 -1
  98. package/dist/dts/Parser.d.ts.map +1 -1
  99. package/dist/dts/Part.d.ts +20 -56
  100. package/dist/dts/Part.d.ts.map +1 -1
  101. package/dist/dts/Placeholder.d.ts +6 -10
  102. package/dist/dts/Placeholder.d.ts.map +1 -1
  103. package/dist/dts/Platform.d.ts +2 -4
  104. package/dist/dts/Platform.d.ts.map +1 -1
  105. package/dist/dts/Render.d.ts +4 -8
  106. package/dist/dts/Render.d.ts.map +1 -1
  107. package/dist/dts/RenderContext.d.ts +3 -22
  108. package/dist/dts/RenderContext.d.ts.map +1 -1
  109. package/dist/dts/RenderEvent.d.ts +6 -1
  110. package/dist/dts/RenderEvent.d.ts.map +1 -1
  111. package/dist/dts/RenderQueue.d.ts +103 -0
  112. package/dist/dts/RenderQueue.d.ts.map +1 -0
  113. package/dist/dts/RenderTemplate.d.ts +3 -2
  114. package/dist/dts/RenderTemplate.d.ts.map +1 -1
  115. package/dist/dts/Renderable.d.ts +1 -1
  116. package/dist/dts/Template.d.ts +14 -1
  117. package/dist/dts/Template.d.ts.map +1 -1
  118. package/dist/dts/Test.d.ts +14 -1
  119. package/dist/dts/Test.d.ts.map +1 -1
  120. package/dist/dts/Vitest.d.ts +11 -8
  121. package/dist/dts/Vitest.d.ts.map +1 -1
  122. package/dist/dts/index.d.ts +4 -0
  123. package/dist/dts/index.d.ts.map +1 -1
  124. package/dist/dts/internal/EventSource.d.ts +2 -1
  125. package/dist/dts/internal/EventSource.d.ts.map +1 -1
  126. package/dist/dts/internal/browser.d.ts +3 -3
  127. package/dist/dts/internal/browser.d.ts.map +1 -1
  128. package/dist/dts/internal/character-entities.d.ts +2133 -0
  129. package/dist/dts/internal/character-entities.d.ts.map +1 -0
  130. package/dist/dts/internal/errors.d.ts +9 -1
  131. package/dist/dts/internal/errors.d.ts.map +1 -1
  132. package/dist/dts/internal/indexRefCounter.d.ts +0 -4
  133. package/dist/dts/internal/indexRefCounter.d.ts.map +1 -1
  134. package/dist/dts/internal/parser.d.ts +13 -0
  135. package/dist/dts/internal/parser.d.ts.map +1 -1
  136. package/dist/dts/internal/parser2.d.ts +12 -0
  137. package/dist/dts/internal/parser2.d.ts.map +1 -0
  138. package/dist/dts/internal/server-parts.d.ts +223 -0
  139. package/dist/dts/internal/server-parts.d.ts.map +1 -0
  140. package/dist/dts/internal/server.d.ts +2 -28
  141. package/dist/dts/internal/server.d.ts.map +1 -1
  142. package/dist/dts/internal/utils.d.ts +4 -1
  143. package/dist/dts/internal/utils.d.ts.map +1 -1
  144. package/dist/dts/internal/v2/SyncPart.d.ts +87 -0
  145. package/dist/dts/internal/v2/SyncPart.d.ts.map +1 -0
  146. package/dist/dts/internal/v2/helpers.d.ts +3 -0
  147. package/dist/dts/internal/v2/helpers.d.ts.map +1 -0
  148. package/dist/dts/internal/v2/hydrate.d.ts +7 -0
  149. package/dist/dts/internal/v2/hydrate.d.ts.map +1 -0
  150. package/dist/dts/internal/v2/hydration-template.d.ts +54 -0
  151. package/dist/dts/internal/v2/hydration-template.d.ts.map +1 -0
  152. package/dist/dts/internal/v2/parts.d.ts +245 -0
  153. package/dist/dts/internal/v2/parts.d.ts.map +1 -0
  154. package/dist/dts/internal/v2/render-entry.d.ts +6 -0
  155. package/dist/dts/internal/v2/render-entry.d.ts.map +1 -0
  156. package/dist/dts/internal/v2/render-sync-parts.d.ts +22 -0
  157. package/dist/dts/internal/v2/render-sync-parts.d.ts.map +1 -0
  158. package/dist/dts/internal/v2/render.d.ts +62 -0
  159. package/dist/dts/internal/v2/render.d.ts.map +1 -0
  160. package/dist/dts/internal/v2/sync-parts.d.ts +129 -0
  161. package/dist/dts/internal/v2/sync-parts.d.ts.map +1 -0
  162. package/dist/esm/ElementRef.js.map +1 -1
  163. package/dist/esm/EventHandler.js +14 -4
  164. package/dist/esm/EventHandler.js.map +1 -1
  165. package/dist/esm/Html.js +91 -50
  166. package/dist/esm/Html.js.map +1 -1
  167. package/dist/esm/HtmlChunk.js +75 -24
  168. package/dist/esm/HtmlChunk.js.map +1 -1
  169. package/dist/esm/Hydrate.js +5 -5
  170. package/dist/esm/Hydrate.js.map +1 -1
  171. package/dist/esm/Many.js +3 -3
  172. package/dist/esm/Many.js.map +1 -1
  173. package/dist/esm/Meta.js +7 -1
  174. package/dist/esm/Meta.js.map +1 -1
  175. package/dist/esm/Parser.js +1 -1
  176. package/dist/esm/Parser.js.map +1 -1
  177. package/dist/esm/Placeholder.js +4 -8
  178. package/dist/esm/Placeholder.js.map +1 -1
  179. package/dist/esm/Platform.js +3 -1
  180. package/dist/esm/Platform.js.map +1 -1
  181. package/dist/esm/Render.js +6 -5
  182. package/dist/esm/Render.js.map +1 -1
  183. package/dist/esm/RenderContext.js +5 -85
  184. package/dist/esm/RenderContext.js.map +1 -1
  185. package/dist/esm/RenderEvent.js +8 -1
  186. package/dist/esm/RenderEvent.js.map +1 -1
  187. package/dist/esm/RenderQueue.js +336 -0
  188. package/dist/esm/RenderQueue.js.map +1 -0
  189. package/dist/esm/RenderTemplate.js.map +1 -1
  190. package/dist/esm/Template.js +12 -0
  191. package/dist/esm/Template.js.map +1 -1
  192. package/dist/esm/Test.js +71 -30
  193. package/dist/esm/Test.js.map +1 -1
  194. package/dist/esm/Vitest.js +11 -8
  195. package/dist/esm/Vitest.js.map +1 -1
  196. package/dist/esm/index.js +4 -0
  197. package/dist/esm/index.js.map +1 -1
  198. package/dist/esm/internal/EventSource.js +12 -7
  199. package/dist/esm/internal/EventSource.js.map +1 -1
  200. package/dist/esm/internal/HydrateContext.js.map +1 -1
  201. package/dist/esm/internal/browser.js +10 -9
  202. package/dist/esm/internal/browser.js.map +1 -1
  203. package/dist/esm/internal/character-entities.js +2134 -0
  204. package/dist/esm/internal/character-entities.js.map +1 -0
  205. package/dist/esm/internal/errors.js +22 -2
  206. package/dist/esm/internal/errors.js.map +1 -1
  207. package/dist/esm/internal/indexRefCounter.js +36 -61
  208. package/dist/esm/internal/indexRefCounter.js.map +1 -1
  209. package/dist/esm/internal/parser.js +18 -18
  210. package/dist/esm/internal/parser.js.map +1 -1
  211. package/dist/esm/internal/parser2.js +393 -0
  212. package/dist/esm/internal/parser2.js.map +1 -0
  213. package/dist/esm/internal/server-parts.js +109 -0
  214. package/dist/esm/internal/server-parts.js.map +1 -0
  215. package/dist/esm/internal/server.js +12 -161
  216. package/dist/esm/internal/server.js.map +1 -1
  217. package/dist/esm/internal/utils.js +71 -7
  218. package/dist/esm/internal/utils.js.map +1 -1
  219. package/dist/esm/internal/v2/SyncPart.js +5 -0
  220. package/dist/esm/internal/v2/SyncPart.js.map +1 -0
  221. package/dist/esm/internal/v2/helpers.js +12 -0
  222. package/dist/esm/internal/v2/helpers.js.map +1 -0
  223. package/dist/esm/internal/v2/hydrate.js +195 -0
  224. package/dist/esm/internal/v2/hydrate.js.map +1 -0
  225. package/dist/esm/internal/v2/hydration-template.js +265 -0
  226. package/dist/esm/internal/v2/hydration-template.js.map +1 -0
  227. package/dist/esm/internal/v2/parts.js +150 -0
  228. package/dist/esm/internal/v2/parts.js.map +1 -0
  229. package/dist/esm/internal/v2/render-entry.js +102 -0
  230. package/dist/esm/internal/v2/render-entry.js.map +1 -0
  231. package/dist/esm/internal/v2/render-sync-parts.js +265 -0
  232. package/dist/esm/internal/v2/render-sync-parts.js.map +1 -0
  233. package/dist/esm/internal/v2/render.js +353 -0
  234. package/dist/esm/internal/v2/render.js.map +1 -0
  235. package/dist/esm/internal/v2/sync-parts.js +102 -0
  236. package/dist/esm/internal/v2/sync-parts.js.map +1 -0
  237. package/package.json +20 -13
  238. package/src/ElementRef.ts +1 -1
  239. package/src/ElementSource.ts +1 -1
  240. package/src/EventHandler.ts +29 -11
  241. package/src/Html.ts +199 -90
  242. package/src/HtmlChunk.ts +77 -30
  243. package/src/Hydrate.ts +20 -14
  244. package/src/Many.ts +17 -14
  245. package/src/Meta.ts +8 -1
  246. package/src/Parser.ts +1 -1
  247. package/src/Part.ts +22 -66
  248. package/src/Placeholder.ts +17 -15
  249. package/src/Platform.ts +5 -5
  250. package/src/Render.ts +23 -26
  251. package/src/RenderContext.ts +14 -142
  252. package/src/RenderEvent.ts +10 -1
  253. package/src/RenderQueue.ts +445 -0
  254. package/src/RenderTemplate.ts +7 -2
  255. package/src/Renderable.ts +1 -1
  256. package/src/Template.ts +15 -1
  257. package/src/Test.ts +122 -38
  258. package/src/Vitest.ts +20 -10
  259. package/src/index.ts +4 -0
  260. package/src/internal/EventSource.ts +14 -8
  261. package/src/internal/HydrateContext.ts +3 -4
  262. package/src/internal/browser.ts +26 -21
  263. package/src/internal/character-entities.ts +2136 -0
  264. package/src/internal/errors.ts +30 -3
  265. package/src/internal/indexRefCounter.ts +38 -70
  266. package/src/internal/parser.ts +19 -19
  267. package/src/internal/parser2.ts +468 -0
  268. package/src/internal/server-parts.ts +161 -0
  269. package/src/internal/server.ts +16 -272
  270. package/src/internal/utils.ts +83 -7
  271. package/src/internal/v2/SyncPart.ts +112 -0
  272. package/src/internal/v2/helpers.ts +13 -0
  273. package/src/internal/v2/hydrate.ts +289 -0
  274. package/src/internal/v2/hydration-template.ts +308 -0
  275. package/src/internal/v2/parts.ts +254 -0
  276. package/src/internal/v2/render-entry.ts +131 -0
  277. package/src/internal/v2/render-sync-parts.ts +440 -0
  278. package/src/internal/v2/render.ts +588 -0
  279. package/src/internal/v2/sync-parts.ts +133 -0
  280. package/dist/cjs/internal/hydrate.js +0 -274
  281. package/dist/cjs/internal/hydrate.js.map +0 -1
  282. package/dist/cjs/internal/parts.js +0 -451
  283. package/dist/cjs/internal/parts.js.map +0 -1
  284. package/dist/cjs/internal/render.js +0 -704
  285. package/dist/cjs/internal/render.js.map +0 -1
  286. package/dist/dts/internal/hydrate.d.ts +0 -33
  287. package/dist/dts/internal/hydrate.d.ts.map +0 -1
  288. package/dist/dts/internal/parts.d.ts +0 -314
  289. package/dist/dts/internal/parts.d.ts.map +0 -1
  290. package/dist/dts/internal/render.d.ts +0 -16
  291. package/dist/dts/internal/render.d.ts.map +0 -1
  292. package/dist/esm/internal/hydrate.js +0 -239
  293. package/dist/esm/internal/hydrate.js.map +0 -1
  294. package/dist/esm/internal/parts.js +0 -373
  295. package/dist/esm/internal/parts.js.map +0 -1
  296. package/dist/esm/internal/render.js +0 -689
  297. package/dist/esm/internal/render.js.map +0 -1
  298. package/src/internal/hydrate.ts +0 -366
  299. package/src/internal/parts.ts +0 -609
  300. package/src/internal/render.ts +0 -971
@@ -1,704 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.attachRoot = attachRoot;
7
- exports.buildTemplate = buildTemplate;
8
- exports.getBrowserEntry = getBrowserEntry;
9
- exports.renderPart2 = renderPart2;
10
- exports.renderTemplate = void 0;
11
- var Fx = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@typed/fx/Fx"));
12
- var Sink = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@typed/fx/Sink"));
13
- var _TypeId = /*#__PURE__*/require("@typed/fx/TypeId");
14
- var _wire = /*#__PURE__*/require("@typed/wire");
15
- var _effect = /*#__PURE__*/require("effect");
16
- var Context = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Context"));
17
- var _Predicate = /*#__PURE__*/require("effect/Predicate");
18
- var Scope = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Scope"));
19
- var _String = /*#__PURE__*/require("effect/String");
20
- var _Directive = /*#__PURE__*/require("../Directive.js");
21
- var ElementRef = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("../ElementRef.js"));
22
- var ElementSource = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("../ElementSource.js"));
23
- var EventHandler = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("../EventHandler.js"));
24
- var _RenderEvent = /*#__PURE__*/require("../RenderEvent.js");
25
- var _browser = /*#__PURE__*/require("./browser.js");
26
- var _EventSource = /*#__PURE__*/require("./EventSource.js");
27
- var _HydrateContext = /*#__PURE__*/require("./HydrateContext.js");
28
- var _indexRefCounter = /*#__PURE__*/require("./indexRefCounter.js");
29
- var _parser = /*#__PURE__*/require("./parser.js");
30
- var _parts = /*#__PURE__*/require("./parts.js");
31
- var _utils = /*#__PURE__*/require("./utils.js");
32
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
33
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
34
- const RenderPartMap = {
35
- "attr": (templatePart, node, ctx) => {
36
- const {
37
- document,
38
- refCounter,
39
- renderContext,
40
- values
41
- } = ctx;
42
- const element = node;
43
- const attr = createAttribute(document, element, templatePart.name);
44
- const renderable = values[templatePart.index];
45
- let isSet = false;
46
- const setValue = value => {
47
- if (isNullOrUndefined(value)) {
48
- element.removeAttribute(templatePart.name);
49
- isSet = false;
50
- } else {
51
- attr.value = String(value);
52
- if (isSet === false) {
53
- element.setAttributeNode(attr);
54
- isSet = true;
55
- }
56
- }
57
- };
58
- return matchSettablePart(renderable, setValue, () => _parts.AttributePartImpl.browser(templatePart.index, element, templatePart.name, renderContext), f => _effect.Effect.zipRight(renderContext.queue.add(element, f), refCounter.release(templatePart.index)), () => ctx.expected++);
59
- },
60
- "boolean-part": (templatePart, node, ctx) => {
61
- const {
62
- refCounter,
63
- renderContext,
64
- values
65
- } = ctx;
66
- const element = node;
67
- const name = templatePart.name;
68
- const renderable = values[templatePart.index];
69
- const setValue = value => {
70
- element.toggleAttribute(name, isNullOrUndefined(value) ? false : Boolean(value));
71
- };
72
- return matchSettablePart(renderable, setValue, () => _parts.BooleanPartImpl.browser(templatePart.index, element, name, renderContext), f => _effect.Effect.zipRight(renderContext.queue.add(element, f), refCounter.release(templatePart.index)), () => ctx.expected++);
73
- },
74
- "className-part": (templatePart, node, ctx) => {
75
- const {
76
- refCounter,
77
- renderContext,
78
- values
79
- } = ctx;
80
- const element = node;
81
- const renderable = values[templatePart.index];
82
- let classNames = new Set();
83
- const setValue = value => {
84
- if (isNullOrUndefined(value)) {
85
- element.classList.remove(...classNames);
86
- classNames.clear();
87
- } else {
88
- const newClassNames = new Set(Array.isArray(value) ? value.flatMap(x => splitClassNames(String(x))) : splitClassNames(String(value)));
89
- const {
90
- added,
91
- removed
92
- } = diffClassNames(classNames, newClassNames);
93
- element.classList.remove(...removed);
94
- element.classList.add(...added);
95
- classNames = newClassNames;
96
- }
97
- };
98
- return matchSettablePart(renderable, setValue, () => _parts.ClassNamePartImpl.browser(templatePart.index, element, renderContext), f => _effect.Effect.zipRight(renderContext.queue.add(element, f), refCounter.release(templatePart.index)), () => ctx.expected++);
99
- },
100
- "comment-part": (templatePart, node, ctx) => {
101
- const {
102
- refCounter,
103
- renderContext,
104
- values
105
- } = ctx;
106
- const comment = node;
107
- const renderable = values[templatePart.index];
108
- const setValue = value => {
109
- comment.nodeValue = isNullOrUndefined(value) ? "" : String(value);
110
- };
111
- return matchSettablePart(renderable, setValue, () => _parts.CommentPartImpl.browser(templatePart.index, comment, renderContext), f => _effect.Effect.zipRight(renderContext.queue.add(comment, f), refCounter.release(templatePart.index)), () => ctx.expected++);
112
- },
113
- "data": (templatePart, node, ctx) => {
114
- const element = node;
115
- const renderable = ctx.values[templatePart.index];
116
- const previousKeys = new Set(Object.keys(element.dataset));
117
- const setValue = value => {
118
- if (isNullOrUndefined(value)) {
119
- for (const key of previousKeys) {
120
- delete element.dataset[key];
121
- }
122
- previousKeys.clear();
123
- } else {
124
- for (const key of previousKeys) {
125
- if (!(key in value)) {
126
- delete element.dataset[key];
127
- previousKeys.delete(key);
128
- }
129
- }
130
- for (const key of Object.keys(value)) {
131
- if (!previousKeys.has(key)) {
132
- previousKeys.add(key);
133
- }
134
- element.dataset[key] = value[key] || "";
135
- }
136
- }
137
- };
138
- return matchSettablePart(renderable, setValue, () => _parts.DataPartImpl.browser(templatePart.index, element, ctx.renderContext), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, f), ctx.refCounter.release(templatePart.index)), () => ctx.expected++);
139
- },
140
- "event": (templatePart, node, ctx) => {
141
- const element = node;
142
- const renderable = ctx.values[templatePart.index];
143
- const handler = getEventHandler(renderable, ctx.context, ctx.onCause);
144
- if (handler) {
145
- ctx.eventSource.addEventListener(element, templatePart.name, handler);
146
- }
147
- return null;
148
- },
149
- "node": (templatePart, node, ctx) => {
150
- const makeHydrateContext = ctx.makeHydrateContext;
151
- const renderable = ctx.values[templatePart.index];
152
- const part = (0, _browser.makeRenderNodePart)(templatePart.index, node, ctx.renderContext, ctx.document, !!makeHydrateContext);
153
- if ((0, _Directive.isDirective)(renderable)) {
154
- const effect = _effect.Effect.zipRight(renderable(part), ctx.refCounter.release(templatePart.index));
155
- if (makeHydrateContext) {
156
- return _effect.Effect.provideService(effect, _HydrateContext.HydrateContext, makeHydrateContext(templatePart.index));
157
- } else {
158
- return effect;
159
- }
160
- }
161
- ctx.expected++;
162
- const handle = handlePart(renderable, Sink.make(ctx.onCause, value => _effect.Effect.zipRight(part.update(value), ctx.refCounter.release(templatePart.index))));
163
- if (makeHydrateContext) {
164
- return _effect.Effect.provideService(handle, _HydrateContext.HydrateContext, makeHydrateContext(templatePart.index));
165
- } else {
166
- return handle;
167
- }
168
- },
169
- "property": (templatePart, node, ctx) => {
170
- const element = node;
171
- const renderable = ctx.values[templatePart.index];
172
- const setValue = value => {
173
- if (isNullOrUndefined(value)) {
174
- delete element[templatePart.name];
175
- } else {
176
- ;
177
- element[templatePart.name] = value;
178
- }
179
- };
180
- return matchSettablePart(renderable, setValue, () => _parts.PropertyPartImpl.browser(templatePart.index, element, templatePart.name, ctx.renderContext), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, f), ctx.refCounter.release(templatePart.index)), () => ctx.expected++);
181
- },
182
- "properties": (templatePart, node, ctx) => {
183
- const renderable = ctx.values[templatePart.index];
184
- if (isNullOrUndefined(renderable)) return null;else if (Fx.isFx(renderable) || _effect.Effect.isEffect(renderable)) {
185
- throw new Error(`Properties Part must utilize an Record of renderable values.`);
186
- } else if (typeof renderable === "object" && !Array.isArray(renderable)) {
187
- const element = node;
188
- const toggleBoolean = (key, value) => {
189
- element.toggleAttribute(key, isNullOrUndefined(value) ? false : Boolean(value));
190
- };
191
- const setAttribute = (key, value) => {
192
- if (isNullOrUndefined(value)) {
193
- element.removeAttribute(key);
194
- } else {
195
- element.setAttribute(key, String(value));
196
- }
197
- };
198
- const setProperty = (key, value) => {
199
- if (isNullOrUndefined(value)) {
200
- delete element[key];
201
- } else {
202
- ;
203
- element[key] = value;
204
- }
205
- };
206
- const setClassNames = (previous, updated) => {
207
- const {
208
- added,
209
- removed
210
- } = diffClassNames(previous, updated);
211
- element.classList.remove(...removed);
212
- element.classList.add(...added);
213
- removed.forEach(r => previous.delete(r));
214
- added.forEach(a => previous.add(a));
215
- };
216
- const effects = [];
217
- const entries = Object.entries(renderable);
218
- loop: for (const [key, value] of entries) {
219
- const index = ++ctx.spreadIndex;
220
- switch (key[0]) {
221
- case "?":
222
- {
223
- const name = key.slice(1);
224
- const eff = matchSettablePart(value, value => toggleBoolean(name, value), () => _parts.BooleanPartImpl.browser(index, element, name, ctx.renderContext), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, f), ctx.refCounter.release(index)), () => ctx.expected++);
225
- if (eff !== null) {
226
- effects.push(eff);
227
- }
228
- continue loop;
229
- }
230
- case ".":
231
- {
232
- const name = key.slice(1);
233
- const eff = matchSettablePart(value, value => setProperty(name, value), () => _parts.PropertyPartImpl.browser(index, element, name, ctx.renderContext), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, f), ctx.refCounter.release(index)), () => ctx.expected++);
234
- if (eff !== null) {
235
- effects.push(eff);
236
- }
237
- continue loop;
238
- }
239
- case "@":
240
- {
241
- const name = (0, _String.uncapitalize)(key.slice(1));
242
- const handler = getEventHandler(value, ctx.context, ctx.onCause);
243
- if (handler) {
244
- ctx.eventSource.addEventListener(element, name, handler);
245
- }
246
- continue loop;
247
- }
248
- case "o":
249
- {
250
- if (key[1] === "n") {
251
- const name = (0, _String.uncapitalize)(key.slice(2));
252
- const handler = getEventHandler(value, ctx.context, ctx.onCause);
253
- if (handler) {
254
- ctx.eventSource.addEventListener(element, name, handler);
255
- }
256
- }
257
- continue loop;
258
- }
259
- }
260
- const lowerCaseName = key.toLowerCase();
261
- const isClass = lowerCaseName === "class" || lowerCaseName === "classname";
262
- if (isClass) {
263
- const classNames = new Set();
264
- const eff = matchSettablePart(value, value => {
265
- if (isNullOrUndefined(value)) {
266
- element.classList.remove(...classNames);
267
- classNames.clear();
268
- } else {
269
- setClassNames(classNames, new Set(splitClassNames(String(value))));
270
- }
271
- }, () => _parts.ClassNamePartImpl.browser(index, element, ctx.renderContext), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, f), ctx.refCounter.release(index)), () => ctx.expected++);
272
- if (eff !== null) {
273
- effects.push(eff);
274
- }
275
- } else {
276
- const eff = matchSettablePart(value, value => setAttribute(key, value), () => _parts.AttributePartImpl.browser(index, element, key, ctx.renderContext), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, f), ctx.refCounter.release(index)), () => ctx.expected++);
277
- if (eff !== null) {
278
- effects.push(eff);
279
- }
280
- }
281
- }
282
- return effects;
283
- } else {
284
- return null;
285
- }
286
- },
287
- "ref": (templatePart, node, ctx) => {
288
- const element = node;
289
- const renderable = ctx.values[templatePart.index];
290
- if ((0, _Directive.isDirective)(renderable)) {
291
- return renderable(new _parts.RefPartImpl(ElementSource.fromElement(element), templatePart.index));
292
- } else if (ElementRef.isElementRef(renderable)) {
293
- return ElementRef.set(renderable, element);
294
- }
295
- return null;
296
- },
297
- "sparse-attr": (templatePart, node, ctx) => {
298
- const values = Array.from({
299
- length: templatePart.nodes.length
300
- }, () => "");
301
- const element = node;
302
- const attr = createAttribute(ctx.document, element, templatePart.name);
303
- const setValue = (value, index) => {
304
- values[index] = value ?? "";
305
- };
306
- const effects = [];
307
- for (let i = 0; i < templatePart.nodes.length; ++i) {
308
- const node = templatePart.nodes[i];
309
- if (node._tag === "text") {
310
- values[i] = node.value;
311
- } else {
312
- const renderable = ctx.values[node.index];
313
- const index = i;
314
- const effect = matchSettablePart(renderable, value => setValue(value, index), () => new _parts.AttributePartImpl(templatePart.name, node.index, ({
315
- value
316
- }) => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, () => setValue(value, index)), ctx.refCounter.release(node.index)), attr.value), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(element, f), ctx.refCounter.release(node.index)), () => ctx.expected++);
317
- if (effect !== null) {
318
- effects.push(effect);
319
- }
320
- }
321
- }
322
- if (effects.length === 0) {
323
- attr.value = values.join("");
324
- element.setAttributeNode(attr);
325
- }
326
- return effects;
327
- },
328
- "sparse-class-name": (templatePart, node, ctx) => {
329
- const element = node;
330
- const effects = templatePart.nodes.flatMap(node => {
331
- if (node._tag === "text") {
332
- const split = splitClassNames(node.value);
333
- if (split.length > 0) element.classList.add(...split);
334
- return [];
335
- } else {
336
- const eff = RenderPartMap[node._tag](node, element, ctx);
337
- if (eff === null) return [];
338
- return Array.isArray(eff) ? eff : [eff];
339
- }
340
- });
341
- return effects;
342
- },
343
- "sparse-comment": (templatePart, node, ctx) => {
344
- const values = Array.from({
345
- length: templatePart.nodes.length
346
- }, () => "");
347
- const comment = node;
348
- const setValue = (value, index) => {
349
- values[index] = value ?? "";
350
- };
351
- const flushValue = () => {
352
- comment.data = values.join("");
353
- };
354
- const effects = [];
355
- for (let i = 0; i < templatePart.nodes.length; ++i) {
356
- const node = templatePart.nodes[i];
357
- if (node._tag === "text") {
358
- values[i] = node.value;
359
- } else {
360
- const renderable = ctx.values[node.index];
361
- const index = i;
362
- const effect = matchSettablePart(renderable, value => {
363
- setValue(value, index);
364
- flushValue();
365
- }, () => new _parts.CommentPartImpl(node.index, ({
366
- value
367
- }) => (setValue(value, index), _effect.Effect.zipRight(ctx.renderContext.queue.add(comment, () => flushValue()), ctx.refCounter.release(node.index))), null), f => _effect.Effect.zipRight(ctx.renderContext.queue.add(comment, f), ctx.refCounter.release(node.index)), () => ctx.expected++);
368
- if (effect !== null) {
369
- effects.push(effect);
370
- }
371
- }
372
- }
373
- if (effects.length === 0) {
374
- flushValue();
375
- }
376
- return effects;
377
- },
378
- "text-part": (templatePart, node, ctx) => {
379
- const renderable = ctx.values[templatePart.index];
380
- const part = _parts.TextPartImpl.browser(ctx.document, templatePart.index, node, ctx.renderContext);
381
- if ((0, _Directive.isDirective)(renderable)) {
382
- return _effect.Effect.zipRight(renderable(part), ctx.refCounter.release(templatePart.index));
383
- }
384
- ctx.expected++;
385
- return handlePart(renderable, Sink.make(ctx.onCause, value => _effect.Effect.zipRight(part.update(value), ctx.refCounter.release(templatePart.index))));
386
- }
387
- };
388
- const SPACE_REGEXP = /\s+/g;
389
- function splitClassNames(value) {
390
- return value.split(SPACE_REGEXP).flatMap(a => {
391
- const trimmed = a.trim();
392
- return trimmed.length > 0 ? [trimmed] : [];
393
- });
394
- }
395
- function isNullOrUndefined(value) {
396
- return value === null || value === undefined;
397
- }
398
- function diffClassNames(oldClassNames, newClassNames) {
399
- const added = [];
400
- const removed = [];
401
- for (const className of oldClassNames) {
402
- if (!newClassNames.has(className)) {
403
- removed.push(className);
404
- }
405
- }
406
- for (const className of newClassNames) {
407
- if (!oldClassNames.has(className) && className.trim()) {
408
- added.push(className);
409
- }
410
- }
411
- return {
412
- added,
413
- removed
414
- };
415
- }
416
- /**
417
- * @internal
418
- */
419
- function renderPart2(part, content, path, ctx) {
420
- return RenderPartMap[part._tag](part, (0, _utils.findPath)(content, path), ctx);
421
- }
422
- /**
423
- * Here for "standard" browser rendering, a TemplateInstance is effectively a live
424
- * view into the contents rendered by the Template.
425
- */
426
- const renderTemplate = (document, renderContext) => (templateStrings, values) => {
427
- const entry = getBrowserEntry(document, renderContext, templateStrings);
428
- if (values.length === 0) {
429
- return Fx.sync(() => (0, _RenderEvent.DomRenderEvent)((0, _wire.persistent)(document.importNode(entry.content, true))));
430
- }
431
- return Fx.make(sink => {
432
- return _effect.Effect.gen(function* (_) {
433
- const runtime = yield* _(_effect.Effect.runtime());
434
- const runFork = _effect.Runtime.runFork(runtime);
435
- const parentScope = Context.get(runtime.context, Scope.Scope);
436
- const scope = yield* _(Scope.fork(parentScope, _effect.ExecutionStrategy.sequential));
437
- const refCounter = yield* _((0, _indexRefCounter.indexRefCounter2)());
438
- const content = document.importNode(entry.content, true);
439
- const ctx = {
440
- context: runtime.context,
441
- document,
442
- eventSource: (0, _EventSource.makeEventSource)(),
443
- expected: 0,
444
- refCounter,
445
- renderContext,
446
- onCause: sink.onFailure,
447
- spreadIndex: values.length,
448
- values
449
- };
450
- // Connect our interpolated values to our template parts
451
- const effects = [];
452
- for (const [part, path] of entry.template.parts) {
453
- const eff = renderPart2(part, content, path, ctx);
454
- if (eff !== null) {
455
- effects.push(...(Array.isArray(eff) ? eff : [eff]));
456
- }
457
- }
458
- // Fork any effects necessary
459
- if (effects.length > 0) {
460
- for (let i = 0; i < effects.length; ++i) {
461
- runFork(effects[i], {
462
- scope
463
- });
464
- }
465
- }
466
- // If there's anything to wait on and it's not already done, wait for an initial value
467
- // for all asynchronous sources.
468
- if (ctx.expected > 0 && (yield* _(refCounter.expect(ctx.expected)))) {
469
- yield* _(refCounter.wait);
470
- }
471
- // Create a persistent wire from our content
472
- const wire = (0, _wire.persistent)(content);
473
- // Setup our event listeners for our wire.
474
- // We use the parentScope to allow event listeners to exist
475
- // beyond the lifetime of the current Fiber, but no further than its parent template.
476
- yield* _(ctx.eventSource.setup(wire, parentScope));
477
- // Emit our DomRenderEvent
478
- yield* _(sink.onSuccess((0, _RenderEvent.DomRenderEvent)(wire)),
479
- // Ensure our templates last forever in the DOM environment
480
- // so event listeners are kept attached to the current Scope.
481
- _effect.Effect.zipRight(_effect.Effect.never),
482
- // Close our scope whenever the current Fiber is interrupted
483
- _effect.Effect.ensuring(Scope.close(scope, _effect.Exit.unit)));
484
- });
485
- });
486
- };
487
- exports.renderTemplate = renderTemplate;
488
- function getEventHandler(renderable, ctx, onCause) {
489
- if (renderable && typeof renderable === "object") {
490
- if (EventHandler.EventHandlerTypeId in renderable) {
491
- return EventHandler.make(ev => _effect.Effect.provide(_effect.Effect.catchAllCause(renderable.handler(ev), onCause), ctx), renderable.options);
492
- } else if (_effect.Effect.EffectTypeId in renderable) {
493
- return EventHandler.make(() => _effect.Effect.provide(_effect.Effect.catchAllCause(renderable, onCause), ctx));
494
- }
495
- }
496
- return null;
497
- }
498
- function handlePart(renderable, sink) {
499
- switch (typeof renderable) {
500
- case "undefined":
501
- case "object":
502
- {
503
- if (renderable === null || renderable === undefined) return sink.onSuccess(null);else if (Array.isArray(renderable)) {
504
- return renderable.length === 0 ? sink.onSuccess(null) : Fx.tuple(renderable.map(unwrapRenderable)).run(sink);
505
- } else if (_TypeId.TypeId in renderable) {
506
- return renderable.run(sink);
507
- } else if (_effect.Effect.EffectTypeId in renderable) {
508
- return _effect.Effect.matchCauseEffect(renderable, sink);
509
- } else return sink.onSuccess(renderable);
510
- }
511
- default:
512
- return sink.onSuccess(renderable);
513
- }
514
- }
515
- function unwrapRenderable(renderable) {
516
- switch (typeof renderable) {
517
- case "undefined":
518
- case "object":
519
- {
520
- if (renderable === null || renderable === undefined) return Fx.succeed(null);else if (Array.isArray(renderable)) {
521
- return renderable.length === 0 ? Fx.succeed(null) : Fx.map(Fx.tuple(renderable.map(unwrapRenderable)), xs => xs.flat());
522
- } else if (_TypeId.TypeId in renderable) {
523
- return renderable;
524
- } else if (_effect.Effect.EffectTypeId in renderable) {
525
- return Fx.fromFxEffect(_effect.Effect.map(renderable, unwrapRenderable));
526
- } else return Fx.succeed(renderable);
527
- }
528
- default:
529
- return Fx.succeed(renderable);
530
- }
531
- }
532
- function attachRoot(cache, where, what // TODO: Should we support HTML RenderEvents here too?
533
- ) {
534
- return _effect.Effect.sync(() => {
535
- const wire = what?.valueOf();
536
- const previous = cache.get(where);
537
- if (wire !== previous) {
538
- if (previous && !wire) removeChildren(where, previous);
539
- cache.set(where, wire || null);
540
- if (wire) replaceChildren(where, wire);
541
- return wire;
542
- }
543
- return previous;
544
- });
545
- }
546
- function removeChildren(where, previous) {
547
- for (const node of getNodes(previous)) {
548
- where.removeChild(node);
549
- }
550
- }
551
- function replaceChildren(where, wire) {
552
- where.replaceChildren(...getNodes(wire));
553
- }
554
- function getNodes(rendered) {
555
- const value = rendered.valueOf();
556
- return Array.isArray(value) ? value : [value];
557
- }
558
- function getBrowserEntry(document, ctx, templateStrings) {
559
- const cached = ctx.templateCache.get(templateStrings);
560
- if (cached === undefined || cached._tag === "Server") {
561
- const template = (0, _parser.parse)(templateStrings);
562
- const content = buildTemplate(document, template);
563
- const entry = {
564
- _tag: "Browser",
565
- template,
566
- content
567
- };
568
- ctx.templateCache.set(templateStrings, entry);
569
- return entry;
570
- } else {
571
- return cached;
572
- }
573
- }
574
- function buildTemplate(document, {
575
- nodes
576
- }) {
577
- const fragment = document.createDocumentFragment();
578
- for (let i = 0; i < nodes.length; ++i) {
579
- fragment.append(buildNode(document, nodes[i], false));
580
- }
581
- return fragment;
582
- }
583
- function buildNode(document, node, isSvgContext) {
584
- switch (node._tag) {
585
- case "element":
586
- case "self-closing-element":
587
- case "text-only-element":
588
- return buildElement(document, node, isSvgContext);
589
- case "text":
590
- return document.createTextNode(node.value);
591
- case "comment":
592
- return document.createComment(node.value);
593
- case "sparse-comment":
594
- return document.createComment(`hole${node.nodes.map(n => n._tag === "text" ? "" : n.index).join("")}`);
595
- // Create placeholders for these elements
596
- case "comment-part":
597
- case "node":
598
- return document.createComment(`hole${node.index}`);
599
- case "doctype":
600
- return document.implementation.createDocumentType(node.name, docTypeNameToPublicId(node.name), docTypeNameToSystemId(node.name));
601
- }
602
- }
603
- function docTypeNameToPublicId(name) {
604
- switch (name) {
605
- case "html":
606
- return "-//W3C//DTD HTML 4.01//EN";
607
- case "svg":
608
- return "-//W3C//DTD SVG 1.1//EN";
609
- case "math":
610
- return "-//W3C//DTD MathML 2.0//EN";
611
- default:
612
- return "";
613
- }
614
- }
615
- function docTypeNameToSystemId(name) {
616
- switch (name) {
617
- // HTML5
618
- case "html":
619
- return "http://www.w3.org/TR/html4/strict.dtd";
620
- case "svg":
621
- return "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";
622
- case "math":
623
- return "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd";
624
- default:
625
- return "";
626
- }
627
- }
628
- const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
629
- function buildElement(document, node, isSvgContext) {
630
- const {
631
- _tag,
632
- attributes,
633
- tagName
634
- } = node;
635
- const isSvg = isSvgContext ? tagName !== "foreignObject" : tagName === "svg";
636
- const element = isSvg ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName);
637
- for (let i = 0; i < attributes.length; ++i) {
638
- const attr = attributes[i];
639
- // We only handle static attributes here, parts are handled elsewhere
640
- if (attr._tag === "attribute") {
641
- element.setAttribute(attr.name, attr.value);
642
- } else if (attr._tag === "boolean") {
643
- element.toggleAttribute(attr.name, true);
644
- }
645
- }
646
- if (_tag === "element") {
647
- element.append(...node.children.map(child => buildNode(document, child, isSvg)));
648
- } else if (_tag === "text-only-element") {
649
- element.append(...node.children.map(child => buildTextChild(document, child)));
650
- }
651
- return element;
652
- }
653
- function buildTextChild(document, node) {
654
- if (node._tag === "text") {
655
- return document.createTextNode(node.value);
656
- }
657
- return document.createComment(`hole${node.index}`);
658
- }
659
- function createAttribute(document, element, name) {
660
- return element.getAttributeNode(name) ?? document.createAttribute(name);
661
- }
662
- function matchSettablePart(renderable, setValue, makePart, schedule, expect) {
663
- return matchRenderable(renderable, {
664
- Fx: fx => {
665
- expect();
666
- return Fx.observe(fx, a => schedule(() => setValue(a)));
667
- },
668
- Effect: effect => {
669
- expect();
670
- return _effect.Effect.flatMap(effect, a => schedule(() => setValue(a)));
671
- },
672
- Directive: directive => {
673
- expect();
674
- const part = makePart();
675
- return runDirective(directive, part, setValue, schedule);
676
- },
677
- Otherwise: otherwise => {
678
- setValue(otherwise);
679
- return null;
680
- }
681
- });
682
- }
683
- function matchRenderable(renderable, matches) {
684
- if (Fx.isFx(renderable)) {
685
- return matches.Fx(renderable);
686
- } else if (_effect.Effect.isEffect(renderable)) {
687
- return matches.Effect(renderable);
688
- } else if ((0, _Directive.isDirective)(renderable)) {
689
- return matches.Directive(renderable);
690
- } else {
691
- return matches.Otherwise(renderable);
692
- }
693
- }
694
- function runDirective(directive, part, setValue, schedule) {
695
- if ((0, _Predicate.hasProperty)(part, "update")) {
696
- return directive({
697
- ...part,
698
- update: value => schedule(() => setValue(value))
699
- });
700
- } else {
701
- return _effect.Effect.flatMap(directive(part), () => schedule(() => setValue(part.value)));
702
- }
703
- }
704
- //# sourceMappingURL=render.js.map