@depup/svelte 5.53.3-depup.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 (386) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +41 -0
  3. package/action.d.ts +1 -0
  4. package/animate.d.ts +1 -0
  5. package/compiler/index.js +1 -0
  6. package/compiler/package.json +3 -0
  7. package/compiler.d.ts +1 -0
  8. package/easing.d.ts +1 -0
  9. package/elements.d.ts +2078 -0
  10. package/index.d.ts +1 -0
  11. package/legacy.d.ts +1 -0
  12. package/motion.d.ts +1 -0
  13. package/package.json +185 -0
  14. package/src/animate/index.js +78 -0
  15. package/src/attachments/index.js +113 -0
  16. package/src/compiler/errors.js +1719 -0
  17. package/src/compiler/index.js +198 -0
  18. package/src/compiler/legacy.js +637 -0
  19. package/src/compiler/migrate/index.js +1996 -0
  20. package/src/compiler/phases/1-parse/acorn.js +198 -0
  21. package/src/compiler/phases/1-parse/index.js +326 -0
  22. package/src/compiler/phases/1-parse/read/context.js +116 -0
  23. package/src/compiler/phases/1-parse/read/expression.js +93 -0
  24. package/src/compiler/phases/1-parse/read/options.js +263 -0
  25. package/src/compiler/phases/1-parse/read/script.js +97 -0
  26. package/src/compiler/phases/1-parse/read/style.js +637 -0
  27. package/src/compiler/phases/1-parse/remove_typescript_nodes.js +180 -0
  28. package/src/compiler/phases/1-parse/state/element.js +937 -0
  29. package/src/compiler/phases/1-parse/state/fragment.js +17 -0
  30. package/src/compiler/phases/1-parse/state/tag.js +751 -0
  31. package/src/compiler/phases/1-parse/state/text.js +23 -0
  32. package/src/compiler/phases/1-parse/utils/bracket.js +213 -0
  33. package/src/compiler/phases/1-parse/utils/create.js +16 -0
  34. package/src/compiler/phases/1-parse/utils/entities.js +2234 -0
  35. package/src/compiler/phases/1-parse/utils/fuzzymatch.js +281 -0
  36. package/src/compiler/phases/1-parse/utils/html.js +127 -0
  37. package/src/compiler/phases/2-analyze/css/css-analyze.js +331 -0
  38. package/src/compiler/phases/2-analyze/css/css-prune.js +1206 -0
  39. package/src/compiler/phases/2-analyze/css/css-warn.js +47 -0
  40. package/src/compiler/phases/2-analyze/css/utils.js +177 -0
  41. package/src/compiler/phases/2-analyze/index.js +1300 -0
  42. package/src/compiler/phases/2-analyze/utils/check_graph_for_cycles.js +47 -0
  43. package/src/compiler/phases/2-analyze/visitors/AnimateDirective.js +15 -0
  44. package/src/compiler/phases/2-analyze/visitors/ArrowFunctionExpression.js +11 -0
  45. package/src/compiler/phases/2-analyze/visitors/AssignmentExpression.js +31 -0
  46. package/src/compiler/phases/2-analyze/visitors/AttachTag.js +17 -0
  47. package/src/compiler/phases/2-analyze/visitors/Attribute.js +66 -0
  48. package/src/compiler/phases/2-analyze/visitors/AwaitBlock.js +48 -0
  49. package/src/compiler/phases/2-analyze/visitors/AwaitExpression.js +150 -0
  50. package/src/compiler/phases/2-analyze/visitors/BindDirective.js +280 -0
  51. package/src/compiler/phases/2-analyze/visitors/CallExpression.js +339 -0
  52. package/src/compiler/phases/2-analyze/visitors/ClassBody.js +156 -0
  53. package/src/compiler/phases/2-analyze/visitors/ClassDeclaration.js +25 -0
  54. package/src/compiler/phases/2-analyze/visitors/ClassDirective.js +13 -0
  55. package/src/compiler/phases/2-analyze/visitors/Component.js +26 -0
  56. package/src/compiler/phases/2-analyze/visitors/ConstTag.js +45 -0
  57. package/src/compiler/phases/2-analyze/visitors/DebugTag.js +15 -0
  58. package/src/compiler/phases/2-analyze/visitors/EachBlock.js +97 -0
  59. package/src/compiler/phases/2-analyze/visitors/ExportDefaultDeclaration.js +20 -0
  60. package/src/compiler/phases/2-analyze/visitors/ExportNamedDeclaration.js +70 -0
  61. package/src/compiler/phases/2-analyze/visitors/ExportSpecifier.js +30 -0
  62. package/src/compiler/phases/2-analyze/visitors/ExpressionStatement.js +38 -0
  63. package/src/compiler/phases/2-analyze/visitors/ExpressionTag.js +26 -0
  64. package/src/compiler/phases/2-analyze/visitors/Fragment.js +10 -0
  65. package/src/compiler/phases/2-analyze/visitors/FunctionDeclaration.js +16 -0
  66. package/src/compiler/phases/2-analyze/visitors/FunctionExpression.js +11 -0
  67. package/src/compiler/phases/2-analyze/visitors/HtmlTag.js +19 -0
  68. package/src/compiler/phases/2-analyze/visitors/Identifier.js +194 -0
  69. package/src/compiler/phases/2-analyze/visitors/IfBlock.js +46 -0
  70. package/src/compiler/phases/2-analyze/visitors/ImportDeclaration.js +31 -0
  71. package/src/compiler/phases/2-analyze/visitors/KeyBlock.js +21 -0
  72. package/src/compiler/phases/2-analyze/visitors/LabeledStatement.js +95 -0
  73. package/src/compiler/phases/2-analyze/visitors/LetDirective.js +24 -0
  74. package/src/compiler/phases/2-analyze/visitors/Literal.js +14 -0
  75. package/src/compiler/phases/2-analyze/visitors/MemberExpression.js +28 -0
  76. package/src/compiler/phases/2-analyze/visitors/NewExpression.js +17 -0
  77. package/src/compiler/phases/2-analyze/visitors/OnDirective.js +28 -0
  78. package/src/compiler/phases/2-analyze/visitors/PropertyDefinition.js +21 -0
  79. package/src/compiler/phases/2-analyze/visitors/RegularElement.js +240 -0
  80. package/src/compiler/phases/2-analyze/visitors/RenderTag.js +68 -0
  81. package/src/compiler/phases/2-analyze/visitors/SlotElement.js +42 -0
  82. package/src/compiler/phases/2-analyze/visitors/SnippetBlock.js +113 -0
  83. package/src/compiler/phases/2-analyze/visitors/SpreadAttribute.js +13 -0
  84. package/src/compiler/phases/2-analyze/visitors/SpreadElement.js +16 -0
  85. package/src/compiler/phases/2-analyze/visitors/StyleDirective.js +39 -0
  86. package/src/compiler/phases/2-analyze/visitors/SvelteBody.js +22 -0
  87. package/src/compiler/phases/2-analyze/visitors/SvelteBoundary.js +30 -0
  88. package/src/compiler/phases/2-analyze/visitors/SvelteComponent.js +18 -0
  89. package/src/compiler/phases/2-analyze/visitors/SvelteDocument.js +24 -0
  90. package/src/compiler/phases/2-analyze/visitors/SvelteElement.js +78 -0
  91. package/src/compiler/phases/2-analyze/visitors/SvelteFragment.js +27 -0
  92. package/src/compiler/phases/2-analyze/visitors/SvelteHead.js +18 -0
  93. package/src/compiler/phases/2-analyze/visitors/SvelteSelf.js +36 -0
  94. package/src/compiler/phases/2-analyze/visitors/SvelteWindow.js +24 -0
  95. package/src/compiler/phases/2-analyze/visitors/TaggedTemplateExpression.js +16 -0
  96. package/src/compiler/phases/2-analyze/visitors/TemplateElement.js +12 -0
  97. package/src/compiler/phases/2-analyze/visitors/Text.js +52 -0
  98. package/src/compiler/phases/2-analyze/visitors/TitleElement.js +21 -0
  99. package/src/compiler/phases/2-analyze/visitors/TransitionDirective.js +19 -0
  100. package/src/compiler/phases/2-analyze/visitors/UpdateExpression.js +29 -0
  101. package/src/compiler/phases/2-analyze/visitors/UseDirective.js +18 -0
  102. package/src/compiler/phases/2-analyze/visitors/VariableDeclarator.js +160 -0
  103. package/src/compiler/phases/2-analyze/visitors/shared/a11y/constants.js +334 -0
  104. package/src/compiler/phases/2-analyze/visitors/shared/a11y/index.js +981 -0
  105. package/src/compiler/phases/2-analyze/visitors/shared/attribute.js +125 -0
  106. package/src/compiler/phases/2-analyze/visitors/shared/component.js +177 -0
  107. package/src/compiler/phases/2-analyze/visitors/shared/element.js +160 -0
  108. package/src/compiler/phases/2-analyze/visitors/shared/fragment.js +15 -0
  109. package/src/compiler/phases/2-analyze/visitors/shared/function.js +24 -0
  110. package/src/compiler/phases/2-analyze/visitors/shared/snippets.js +17 -0
  111. package/src/compiler/phases/2-analyze/visitors/shared/special-element.js +16 -0
  112. package/src/compiler/phases/2-analyze/visitors/shared/utils.js +301 -0
  113. package/src/compiler/phases/3-transform/client/transform-client.js +719 -0
  114. package/src/compiler/phases/3-transform/client/transform-template/fix-attribute-casing.js +18 -0
  115. package/src/compiler/phases/3-transform/client/transform-template/index.js +67 -0
  116. package/src/compiler/phases/3-transform/client/transform-template/template.js +164 -0
  117. package/src/compiler/phases/3-transform/client/utils.js +181 -0
  118. package/src/compiler/phases/3-transform/client/visitors/AnimateDirective.js +38 -0
  119. package/src/compiler/phases/3-transform/client/visitors/ArrowFunctionExpression.js +11 -0
  120. package/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js +247 -0
  121. package/src/compiler/phases/3-transform/client/visitors/AttachTag.js +26 -0
  122. package/src/compiler/phases/3-transform/client/visitors/Attribute.js +14 -0
  123. package/src/compiler/phases/3-transform/client/visitors/AwaitBlock.js +124 -0
  124. package/src/compiler/phases/3-transform/client/visitors/AwaitExpression.js +25 -0
  125. package/src/compiler/phases/3-transform/client/visitors/BinaryExpression.js +34 -0
  126. package/src/compiler/phases/3-transform/client/visitors/BindDirective.js +290 -0
  127. package/src/compiler/phases/3-transform/client/visitors/BlockStatement.js +32 -0
  128. package/src/compiler/phases/3-transform/client/visitors/BreakStatement.js +20 -0
  129. package/src/compiler/phases/3-transform/client/visitors/CallExpression.js +136 -0
  130. package/src/compiler/phases/3-transform/client/visitors/ClassBody.js +111 -0
  131. package/src/compiler/phases/3-transform/client/visitors/Comment.js +11 -0
  132. package/src/compiler/phases/3-transform/client/visitors/Component.js +12 -0
  133. package/src/compiler/phases/3-transform/client/visitors/ConstTag.js +134 -0
  134. package/src/compiler/phases/3-transform/client/visitors/DebugTag.js +28 -0
  135. package/src/compiler/phases/3-transform/client/visitors/EachBlock.js +362 -0
  136. package/src/compiler/phases/3-transform/client/visitors/ExportNamedDeclaration.js +19 -0
  137. package/src/compiler/phases/3-transform/client/visitors/ExpressionStatement.js +20 -0
  138. package/src/compiler/phases/3-transform/client/visitors/ForOfStatement.js +25 -0
  139. package/src/compiler/phases/3-transform/client/visitors/Fragment.js +186 -0
  140. package/src/compiler/phases/3-transform/client/visitors/FunctionDeclaration.js +12 -0
  141. package/src/compiler/phases/3-transform/client/visitors/FunctionExpression.js +11 -0
  142. package/src/compiler/phases/3-transform/client/visitors/HtmlTag.js +53 -0
  143. package/src/compiler/phases/3-transform/client/visitors/Identifier.js +45 -0
  144. package/src/compiler/phases/3-transform/client/visitors/IfBlock.js +131 -0
  145. package/src/compiler/phases/3-transform/client/visitors/KeyBlock.js +45 -0
  146. package/src/compiler/phases/3-transform/client/visitors/LabeledStatement.js +64 -0
  147. package/src/compiler/phases/3-transform/client/visitors/LetDirective.js +55 -0
  148. package/src/compiler/phases/3-transform/client/visitors/MemberExpression.js +23 -0
  149. package/src/compiler/phases/3-transform/client/visitors/OnDirective.js +38 -0
  150. package/src/compiler/phases/3-transform/client/visitors/Program.js +153 -0
  151. package/src/compiler/phases/3-transform/client/visitors/RegularElement.js +725 -0
  152. package/src/compiler/phases/3-transform/client/visitors/RenderTag.js +95 -0
  153. package/src/compiler/phases/3-transform/client/visitors/SlotElement.js +94 -0
  154. package/src/compiler/phases/3-transform/client/visitors/SnippetBlock.js +94 -0
  155. package/src/compiler/phases/3-transform/client/visitors/SpreadAttribute.js +10 -0
  156. package/src/compiler/phases/3-transform/client/visitors/SvelteBody.js +11 -0
  157. package/src/compiler/phases/3-transform/client/visitors/SvelteBoundary.js +126 -0
  158. package/src/compiler/phases/3-transform/client/visitors/SvelteComponent.js +13 -0
  159. package/src/compiler/phases/3-transform/client/visitors/SvelteDocument.js +11 -0
  160. package/src/compiler/phases/3-transform/client/visitors/SvelteElement.js +161 -0
  161. package/src/compiler/phases/3-transform/client/visitors/SvelteFragment.js +17 -0
  162. package/src/compiler/phases/3-transform/client/visitors/SvelteHead.js +23 -0
  163. package/src/compiler/phases/3-transform/client/visitors/SvelteSelf.js +13 -0
  164. package/src/compiler/phases/3-transform/client/visitors/SvelteWindow.js +11 -0
  165. package/src/compiler/phases/3-transform/client/visitors/TitleElement.js +48 -0
  166. package/src/compiler/phases/3-transform/client/visitors/TransitionDirective.js +41 -0
  167. package/src/compiler/phases/3-transform/client/visitors/UpdateExpression.js +55 -0
  168. package/src/compiler/phases/3-transform/client/visitors/UseDirective.js +49 -0
  169. package/src/compiler/phases/3-transform/client/visitors/VariableDeclaration.js +422 -0
  170. package/src/compiler/phases/3-transform/client/visitors/shared/component.js +536 -0
  171. package/src/compiler/phases/3-transform/client/visitors/shared/declarations.js +53 -0
  172. package/src/compiler/phases/3-transform/client/visitors/shared/element.js +263 -0
  173. package/src/compiler/phases/3-transform/client/visitors/shared/events.js +180 -0
  174. package/src/compiler/phases/3-transform/client/visitors/shared/fragment.js +185 -0
  175. package/src/compiler/phases/3-transform/client/visitors/shared/function.js +17 -0
  176. package/src/compiler/phases/3-transform/client/visitors/shared/special_element.js +22 -0
  177. package/src/compiler/phases/3-transform/client/visitors/shared/utils.js +513 -0
  178. package/src/compiler/phases/3-transform/css/index.js +479 -0
  179. package/src/compiler/phases/3-transform/index.js +118 -0
  180. package/src/compiler/phases/3-transform/server/transform-server.js +428 -0
  181. package/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js +124 -0
  182. package/src/compiler/phases/3-transform/server/visitors/AwaitBlock.js +36 -0
  183. package/src/compiler/phases/3-transform/server/visitors/AwaitExpression.js +40 -0
  184. package/src/compiler/phases/3-transform/server/visitors/CallExpression.js +71 -0
  185. package/src/compiler/phases/3-transform/server/visitors/ClassBody.js +81 -0
  186. package/src/compiler/phases/3-transform/server/visitors/Component.js +13 -0
  187. package/src/compiler/phases/3-transform/server/visitors/ConstTag.js +49 -0
  188. package/src/compiler/phases/3-transform/server/visitors/DebugTag.js +24 -0
  189. package/src/compiler/phases/3-transform/server/visitors/EachBlock.js +76 -0
  190. package/src/compiler/phases/3-transform/server/visitors/ExpressionStatement.js +23 -0
  191. package/src/compiler/phases/3-transform/server/visitors/Fragment.js +53 -0
  192. package/src/compiler/phases/3-transform/server/visitors/HtmlTag.js +25 -0
  193. package/src/compiler/phases/3-transform/server/visitors/Identifier.js +24 -0
  194. package/src/compiler/phases/3-transform/server/visitors/IfBlock.js +48 -0
  195. package/src/compiler/phases/3-transform/server/visitors/KeyBlock.js +22 -0
  196. package/src/compiler/phases/3-transform/server/visitors/LabeledStatement.js +24 -0
  197. package/src/compiler/phases/3-transform/server/visitors/MemberExpression.js +19 -0
  198. package/src/compiler/phases/3-transform/server/visitors/Program.js +25 -0
  199. package/src/compiler/phases/3-transform/server/visitors/PropertyDefinition.js +37 -0
  200. package/src/compiler/phases/3-transform/server/visitors/RegularElement.js +216 -0
  201. package/src/compiler/phases/3-transform/server/visitors/RenderTag.js +45 -0
  202. package/src/compiler/phases/3-transform/server/visitors/SlotElement.js +68 -0
  203. package/src/compiler/phases/3-transform/server/visitors/SnippetBlock.js +29 -0
  204. package/src/compiler/phases/3-transform/server/visitors/SpreadAttribute.js +10 -0
  205. package/src/compiler/phases/3-transform/server/visitors/SvelteBoundary.js +139 -0
  206. package/src/compiler/phases/3-transform/server/visitors/SvelteComponent.js +12 -0
  207. package/src/compiler/phases/3-transform/server/visitors/SvelteElement.js +89 -0
  208. package/src/compiler/phases/3-transform/server/visitors/SvelteFragment.js +11 -0
  209. package/src/compiler/phases/3-transform/server/visitors/SvelteHead.js +25 -0
  210. package/src/compiler/phases/3-transform/server/visitors/SvelteSelf.js +12 -0
  211. package/src/compiler/phases/3-transform/server/visitors/TitleElement.js +21 -0
  212. package/src/compiler/phases/3-transform/server/visitors/UpdateExpression.js +35 -0
  213. package/src/compiler/phases/3-transform/server/visitors/VariableDeclaration.js +247 -0
  214. package/src/compiler/phases/3-transform/server/visitors/shared/component.js +359 -0
  215. package/src/compiler/phases/3-transform/server/visitors/shared/element.js +557 -0
  216. package/src/compiler/phases/3-transform/server/visitors/shared/utils.js +408 -0
  217. package/src/compiler/phases/3-transform/shared/assignments.js +92 -0
  218. package/src/compiler/phases/3-transform/shared/transform-async.js +114 -0
  219. package/src/compiler/phases/3-transform/utils.js +451 -0
  220. package/src/compiler/phases/bindings.js +227 -0
  221. package/src/compiler/phases/css.js +14 -0
  222. package/src/compiler/phases/nodes.js +258 -0
  223. package/src/compiler/phases/patterns.js +27 -0
  224. package/src/compiler/phases/scope.js +1432 -0
  225. package/src/compiler/preprocess/decode_sourcemap.js +96 -0
  226. package/src/compiler/preprocess/index.js +368 -0
  227. package/src/compiler/preprocess/replace_in_code.js +72 -0
  228. package/src/compiler/print/index.js +911 -0
  229. package/src/compiler/state.js +144 -0
  230. package/src/compiler/utils/assert.js +9 -0
  231. package/src/compiler/utils/ast.js +639 -0
  232. package/src/compiler/utils/builders.js +698 -0
  233. package/src/compiler/utils/compile_diagnostic.js +107 -0
  234. package/src/compiler/utils/extract_svelte_ignore.js +104 -0
  235. package/src/compiler/utils/mapped_code.js +454 -0
  236. package/src/compiler/utils/push_array.js +13 -0
  237. package/src/compiler/utils/sanitize_template_string.js +7 -0
  238. package/src/compiler/utils/slot.js +20 -0
  239. package/src/compiler/utils/string.js +9 -0
  240. package/src/compiler/validate-options.js +324 -0
  241. package/src/compiler/warnings.js +845 -0
  242. package/src/constants.js +66 -0
  243. package/src/easing/index.js +286 -0
  244. package/src/escaping.js +26 -0
  245. package/src/events/index.js +1 -0
  246. package/src/html-tree-validation.js +238 -0
  247. package/src/index-client.js +255 -0
  248. package/src/index-server.js +56 -0
  249. package/src/internal/client/constants.js +77 -0
  250. package/src/internal/client/context.js +258 -0
  251. package/src/internal/client/dev/assign.js +79 -0
  252. package/src/internal/client/dev/console-log.js +37 -0
  253. package/src/internal/client/dev/css.js +31 -0
  254. package/src/internal/client/dev/debug.js +500 -0
  255. package/src/internal/client/dev/elements.js +63 -0
  256. package/src/internal/client/dev/equality.js +101 -0
  257. package/src/internal/client/dev/hmr.js +89 -0
  258. package/src/internal/client/dev/inspect.js +72 -0
  259. package/src/internal/client/dev/legacy.js +25 -0
  260. package/src/internal/client/dev/ownership.js +81 -0
  261. package/src/internal/client/dev/tracing.js +162 -0
  262. package/src/internal/client/dev/validation.js +16 -0
  263. package/src/internal/client/dom/blocks/async.js +71 -0
  264. package/src/internal/client/dom/blocks/await.js +142 -0
  265. package/src/internal/client/dom/blocks/boundary.js +534 -0
  266. package/src/internal/client/dom/blocks/branches.js +227 -0
  267. package/src/internal/client/dom/blocks/css-props.js +28 -0
  268. package/src/internal/client/dom/blocks/each.js +723 -0
  269. package/src/internal/client/dom/blocks/html.js +128 -0
  270. package/src/internal/client/dom/blocks/if.js +82 -0
  271. package/src/internal/client/dom/blocks/key.js +40 -0
  272. package/src/internal/client/dom/blocks/slot.js +44 -0
  273. package/src/internal/client/dom/blocks/snippet.js +103 -0
  274. package/src/internal/client/dom/blocks/svelte-component.js +61 -0
  275. package/src/internal/client/dom/blocks/svelte-element.js +152 -0
  276. package/src/internal/client/dom/blocks/svelte-head.js +61 -0
  277. package/src/internal/client/dom/css.js +33 -0
  278. package/src/internal/client/dom/elements/actions.js +43 -0
  279. package/src/internal/client/dom/elements/attachments.js +33 -0
  280. package/src/internal/client/dom/elements/attributes.js +657 -0
  281. package/src/internal/client/dom/elements/bindings/document.js +17 -0
  282. package/src/internal/client/dom/elements/bindings/input.js +312 -0
  283. package/src/internal/client/dom/elements/bindings/media.js +233 -0
  284. package/src/internal/client/dom/elements/bindings/navigator.js +11 -0
  285. package/src/internal/client/dom/elements/bindings/props.js +22 -0
  286. package/src/internal/client/dom/elements/bindings/select.js +159 -0
  287. package/src/internal/client/dom/elements/bindings/shared.js +76 -0
  288. package/src/internal/client/dom/elements/bindings/size.js +107 -0
  289. package/src/internal/client/dom/elements/bindings/this.js +61 -0
  290. package/src/internal/client/dom/elements/bindings/universal.js +75 -0
  291. package/src/internal/client/dom/elements/bindings/window.js +66 -0
  292. package/src/internal/client/dom/elements/class.js +51 -0
  293. package/src/internal/client/dom/elements/custom-element.js +344 -0
  294. package/src/internal/client/dom/elements/customizable-select.js +99 -0
  295. package/src/internal/client/dom/elements/events.js +355 -0
  296. package/src/internal/client/dom/elements/misc.js +58 -0
  297. package/src/internal/client/dom/elements/style.js +57 -0
  298. package/src/internal/client/dom/elements/transitions.js +471 -0
  299. package/src/internal/client/dom/hydration.js +125 -0
  300. package/src/internal/client/dom/legacy/event-modifiers.js +127 -0
  301. package/src/internal/client/dom/legacy/lifecycle.js +82 -0
  302. package/src/internal/client/dom/legacy/misc.js +68 -0
  303. package/src/internal/client/dom/operations.js +293 -0
  304. package/src/internal/client/dom/reconciler.js +25 -0
  305. package/src/internal/client/dom/task.js +42 -0
  306. package/src/internal/client/dom/template.js +401 -0
  307. package/src/internal/client/error-handling.js +118 -0
  308. package/src/internal/client/errors.js +510 -0
  309. package/src/internal/client/hydratable.js +33 -0
  310. package/src/internal/client/index.js +183 -0
  311. package/src/internal/client/legacy.js +46 -0
  312. package/src/internal/client/loop.js +48 -0
  313. package/src/internal/client/proxy.js +432 -0
  314. package/src/internal/client/reactivity/async.js +306 -0
  315. package/src/internal/client/reactivity/batch.js +1057 -0
  316. package/src/internal/client/reactivity/deriveds.js +426 -0
  317. package/src/internal/client/reactivity/effects.js +718 -0
  318. package/src/internal/client/reactivity/equality.js +31 -0
  319. package/src/internal/client/reactivity/props.js +430 -0
  320. package/src/internal/client/reactivity/sources.js +370 -0
  321. package/src/internal/client/reactivity/status.js +25 -0
  322. package/src/internal/client/reactivity/store.js +203 -0
  323. package/src/internal/client/reactivity/utils.js +40 -0
  324. package/src/internal/client/render.js +335 -0
  325. package/src/internal/client/runtime.js +827 -0
  326. package/src/internal/client/timing.js +16 -0
  327. package/src/internal/client/validate.js +54 -0
  328. package/src/internal/client/warnings.js +271 -0
  329. package/src/internal/disclose-version.js +6 -0
  330. package/src/internal/flags/async.js +3 -0
  331. package/src/internal/flags/index.js +23 -0
  332. package/src/internal/flags/legacy.js +3 -0
  333. package/src/internal/flags/tracing.js +3 -0
  334. package/src/internal/index.js +5 -0
  335. package/src/internal/server/abort-signal.js +13 -0
  336. package/src/internal/server/blocks/html.js +11 -0
  337. package/src/internal/server/blocks/snippet.js +24 -0
  338. package/src/internal/server/context.js +132 -0
  339. package/src/internal/server/crypto.js +45 -0
  340. package/src/internal/server/dev.js +115 -0
  341. package/src/internal/server/errors.js +131 -0
  342. package/src/internal/server/hydratable.js +142 -0
  343. package/src/internal/server/hydration.js +6 -0
  344. package/src/internal/server/index.js +544 -0
  345. package/src/internal/server/render-context.js +86 -0
  346. package/src/internal/server/renderer.js +923 -0
  347. package/src/internal/server/warnings.js +29 -0
  348. package/src/internal/shared/attributes.js +225 -0
  349. package/src/internal/shared/clone.js +137 -0
  350. package/src/internal/shared/dev.js +65 -0
  351. package/src/internal/shared/errors.js +134 -0
  352. package/src/internal/shared/utils.js +144 -0
  353. package/src/internal/shared/validate.js +47 -0
  354. package/src/internal/shared/warnings.js +40 -0
  355. package/src/legacy/legacy-client.js +281 -0
  356. package/src/legacy/legacy-server.js +112 -0
  357. package/src/motion/index.js +32 -0
  358. package/src/motion/spring.js +369 -0
  359. package/src/motion/tweened.js +306 -0
  360. package/src/motion/utils.js +7 -0
  361. package/src/reactivity/create-subscriber.js +95 -0
  362. package/src/reactivity/date.js +118 -0
  363. package/src/reactivity/index-client.js +7 -0
  364. package/src/reactivity/index-server.js +23 -0
  365. package/src/reactivity/map.js +273 -0
  366. package/src/reactivity/media-query.js +55 -0
  367. package/src/reactivity/reactive-value.js +24 -0
  368. package/src/reactivity/set.js +213 -0
  369. package/src/reactivity/url-search-params.js +174 -0
  370. package/src/reactivity/url.js +205 -0
  371. package/src/reactivity/window/index.js +161 -0
  372. package/src/server/index.js +1 -0
  373. package/src/store/index-client.js +169 -0
  374. package/src/store/index-server.js +101 -0
  375. package/src/store/shared/index.js +209 -0
  376. package/src/store/utils.js +36 -0
  377. package/src/transition/index.js +300 -0
  378. package/src/utils.js +504 -0
  379. package/src/version.js +8 -0
  380. package/store.d.ts +1 -0
  381. package/svelte-html.d.ts +245 -0
  382. package/transition.d.ts +1 -0
  383. package/types/compiler/interfaces.d.ts +1 -0
  384. package/types/compiler/preprocess.d.ts +1 -0
  385. package/types/index.d.ts +3744 -0
  386. package/types/index.d.ts.map +280 -0
@@ -0,0 +1,101 @@
1
+ import * as w from '../warnings.js';
2
+ import { get_proxied_value } from '../proxy.js';
3
+
4
+ export function init_array_prototype_warnings() {
5
+ const array_prototype = Array.prototype;
6
+ // The REPL ends up here over and over, and this prevents it from adding more and more patches
7
+ // of the same kind to the prototype, which would slow down everything over time.
8
+ // @ts-expect-error
9
+ const cleanup = Array.__svelte_cleanup;
10
+ if (cleanup) {
11
+ cleanup();
12
+ }
13
+
14
+ const { indexOf, lastIndexOf, includes } = array_prototype;
15
+
16
+ array_prototype.indexOf = function (item, from_index) {
17
+ const index = indexOf.call(this, item, from_index);
18
+
19
+ if (index === -1) {
20
+ for (let i = from_index ?? 0; i < this.length; i += 1) {
21
+ if (get_proxied_value(this[i]) === item) {
22
+ w.state_proxy_equality_mismatch('array.indexOf(...)');
23
+ break;
24
+ }
25
+ }
26
+ }
27
+
28
+ return index;
29
+ };
30
+
31
+ array_prototype.lastIndexOf = function (item, from_index) {
32
+ // we need to specify this.length - 1 because it's probably using something like
33
+ // `arguments` inside so passing undefined is different from not passing anything
34
+ const index = lastIndexOf.call(this, item, from_index ?? this.length - 1);
35
+
36
+ if (index === -1) {
37
+ for (let i = 0; i <= (from_index ?? this.length - 1); i += 1) {
38
+ if (get_proxied_value(this[i]) === item) {
39
+ w.state_proxy_equality_mismatch('array.lastIndexOf(...)');
40
+ break;
41
+ }
42
+ }
43
+ }
44
+
45
+ return index;
46
+ };
47
+
48
+ array_prototype.includes = function (item, from_index) {
49
+ const has = includes.call(this, item, from_index);
50
+
51
+ if (!has) {
52
+ for (let i = 0; i < this.length; i += 1) {
53
+ if (get_proxied_value(this[i]) === item) {
54
+ w.state_proxy_equality_mismatch('array.includes(...)');
55
+ break;
56
+ }
57
+ }
58
+ }
59
+
60
+ return has;
61
+ };
62
+
63
+ // @ts-expect-error
64
+ Array.__svelte_cleanup = () => {
65
+ array_prototype.indexOf = indexOf;
66
+ array_prototype.lastIndexOf = lastIndexOf;
67
+ array_prototype.includes = includes;
68
+ };
69
+ }
70
+
71
+ /**
72
+ * @param {any} a
73
+ * @param {any} b
74
+ * @param {boolean} equal
75
+ * @returns {boolean}
76
+ */
77
+ export function strict_equals(a, b, equal = true) {
78
+ // try-catch needed because this tries to read properties of `a` and `b`,
79
+ // which could be disallowed for example in a secure context
80
+ try {
81
+ if ((a === b) !== (get_proxied_value(a) === get_proxied_value(b))) {
82
+ w.state_proxy_equality_mismatch(equal ? '===' : '!==');
83
+ }
84
+ } catch {}
85
+
86
+ return (a === b) === equal;
87
+ }
88
+
89
+ /**
90
+ * @param {any} a
91
+ * @param {any} b
92
+ * @param {boolean} equal
93
+ * @returns {boolean}
94
+ */
95
+ export function equals(a, b, equal = true) {
96
+ if ((a == b) !== (get_proxied_value(a) == get_proxied_value(b))) {
97
+ w.state_proxy_equality_mismatch(equal ? '==' : '!=');
98
+ }
99
+
100
+ return (a == b) === equal;
101
+ }
@@ -0,0 +1,89 @@
1
+ /** @import { Effect, TemplateNode } from '#client' */
2
+ import { FILENAME, HMR } from '../../../constants.js';
3
+ import { EFFECT_TRANSPARENT } from '#client/constants';
4
+ import { hydrate_node, hydrating } from '../dom/hydration.js';
5
+ import { block, branch, destroy_effect } from '../reactivity/effects.js';
6
+ import { set, source } from '../reactivity/sources.js';
7
+ import { set_should_intro } from '../render.js';
8
+ import { get } from '../runtime.js';
9
+
10
+ /**
11
+ * @template {(anchor: Comment, props: any) => any} Component
12
+ * @param {Component} fn
13
+ */
14
+ export function hmr(fn) {
15
+ const current = source(fn);
16
+
17
+ /**
18
+ * @param {TemplateNode} anchor
19
+ * @param {any} props
20
+ */
21
+ function wrapper(anchor, props) {
22
+ let component = {};
23
+ let instance = {};
24
+
25
+ /** @type {Effect} */
26
+ let effect;
27
+
28
+ let ran = false;
29
+
30
+ block(() => {
31
+ if (component === (component = get(current))) {
32
+ return;
33
+ }
34
+
35
+ if (effect) {
36
+ // @ts-ignore
37
+ for (var k in instance) delete instance[k];
38
+ destroy_effect(effect);
39
+ }
40
+
41
+ effect = branch(() => {
42
+ // when the component is invalidated, replace it without transitions
43
+ if (ran) set_should_intro(false);
44
+
45
+ // preserve getters/setters
46
+ Object.defineProperties(
47
+ instance,
48
+ Object.getOwnPropertyDescriptors(
49
+ // @ts-expect-error
50
+ new.target ? new component(anchor, props) : component(anchor, props)
51
+ )
52
+ );
53
+
54
+ if (ran) set_should_intro(true);
55
+ });
56
+ }, EFFECT_TRANSPARENT);
57
+
58
+ ran = true;
59
+
60
+ if (hydrating) {
61
+ anchor = hydrate_node;
62
+ }
63
+
64
+ return instance;
65
+ }
66
+
67
+ // @ts-expect-error
68
+ wrapper[FILENAME] = fn[FILENAME];
69
+
70
+ // @ts-ignore
71
+ wrapper[HMR] = {
72
+ fn,
73
+ current,
74
+ update: (/** @type {any} */ incoming) => {
75
+ // This logic ensures that the first version of the component is the one
76
+ // whose update function and therefore block effect is preserved across updates.
77
+ // If we don't do this dance and instead just use `incoming` as the new component
78
+ // and then update, we'll create an ever-growing stack of block effects.
79
+
80
+ // Trigger the original block effect
81
+ set(wrapper[HMR].current, incoming[HMR].fn);
82
+
83
+ // Replace the incoming source with the original one
84
+ incoming[HMR].current = wrapper[HMR].current;
85
+ }
86
+ };
87
+
88
+ return wrapper;
89
+ }
@@ -0,0 +1,72 @@
1
+ import { UNINITIALIZED } from '../../../constants.js';
2
+ import { snapshot } from '../../shared/clone.js';
3
+ import { eager_effect, render_effect, validate_effect } from '../reactivity/effects.js';
4
+ import { untrack } from '../runtime.js';
5
+ import { get_error } from '../../shared/dev.js';
6
+
7
+ /**
8
+ * @param {() => any[]} get_value
9
+ * @param {Function} inspector
10
+ * @param {boolean} show_stack
11
+ */
12
+ export function inspect(get_value, inspector, show_stack = false) {
13
+ validate_effect('$inspect');
14
+
15
+ let initial = true;
16
+ let error = /** @type {any} */ (UNINITIALIZED);
17
+
18
+ // Inspect effects runs synchronously so that we can capture useful
19
+ // stack traces. As a consequence, reading the value might result
20
+ // in an error (an `$inspect(object.property)` will run before the
21
+ // `{#if object}...{/if}` that contains it)
22
+ eager_effect(() => {
23
+ try {
24
+ var value = get_value();
25
+ } catch (e) {
26
+ error = e;
27
+ return;
28
+ }
29
+
30
+ var snap = snapshot(value, true, true);
31
+ untrack(() => {
32
+ if (show_stack) {
33
+ inspector(...snap);
34
+
35
+ if (!initial) {
36
+ const stack = get_error('$inspect(...)');
37
+ if (stack) {
38
+ // eslint-disable-next-line no-console
39
+ console.groupCollapsed('stack trace');
40
+ // eslint-disable-next-line no-console
41
+ console.log(stack);
42
+ // eslint-disable-next-line no-console
43
+ console.groupEnd();
44
+ }
45
+ }
46
+ } else {
47
+ inspector(initial ? 'init' : 'update', ...snap);
48
+ }
49
+ });
50
+
51
+ initial = false;
52
+ });
53
+
54
+ // If an error occurs, we store it (along with its stack trace).
55
+ // If the render effect subsequently runs, we log the error,
56
+ // but if it doesn't run it's because the `$inspect` was
57
+ // destroyed, meaning we don't need to bother
58
+ render_effect(() => {
59
+ try {
60
+ // call `get_value` so that this runs alongside the inspect effect
61
+ get_value();
62
+ } catch {
63
+ // ignore
64
+ }
65
+
66
+ if (error !== UNINITIALIZED) {
67
+ // eslint-disable-next-line no-console
68
+ console.error(error);
69
+ error = UNINITIALIZED;
70
+ }
71
+ });
72
+ }
@@ -0,0 +1,25 @@
1
+ import * as e from '../errors.js';
2
+ import { component_context } from '../context.js';
3
+ import { FILENAME } from '../../../constants.js';
4
+
5
+ /** @param {Function & { [FILENAME]: string }} target */
6
+ export function check_target(target) {
7
+ if (target) {
8
+ e.component_api_invalid_new(target[FILENAME] ?? 'a component', target.name);
9
+ }
10
+ }
11
+
12
+ export function legacy_api() {
13
+ const component = component_context?.function;
14
+
15
+ /** @param {string} method */
16
+ function error(method) {
17
+ e.component_api_changed(method, component[FILENAME]);
18
+ }
19
+
20
+ return {
21
+ $destroy: () => error('$destroy()'),
22
+ $on: () => error('$on(...)'),
23
+ $set: () => error('$set(...)')
24
+ };
25
+ }
@@ -0,0 +1,81 @@
1
+ /** @typedef {{ file: string, line: number, column: number }} Location */
2
+
3
+ import { get_descriptor } from '../../shared/utils.js';
4
+ import { LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';
5
+ import { FILENAME } from '../../../constants.js';
6
+ import { component_context } from '../context.js';
7
+ import * as w from '../warnings.js';
8
+ import { sanitize_location } from '../../../utils.js';
9
+
10
+ /**
11
+ * Sets up a validator that
12
+ * - traverses the path of a prop to find out if it is allowed to be mutated
13
+ * - checks that the binding chain is not interrupted
14
+ * @param {Record<string, any>} props
15
+ */
16
+ export function create_ownership_validator(props) {
17
+ const component = component_context?.function;
18
+ const parent = component_context?.p?.function;
19
+
20
+ return {
21
+ /**
22
+ * @param {string} prop
23
+ * @param {any[]} path
24
+ * @param {any} result
25
+ * @param {number} line
26
+ * @param {number} column
27
+ */
28
+ mutation: (prop, path, result, line, column) => {
29
+ const name = path[0];
30
+ if (is_bound_or_unset(props, name) || !parent) {
31
+ return result;
32
+ }
33
+
34
+ /** @type {any} */
35
+ let value = props;
36
+
37
+ for (let i = 0; i < path.length - 1; i++) {
38
+ value = value[path[i]];
39
+ if (!value?.[STATE_SYMBOL]) {
40
+ return result;
41
+ }
42
+ }
43
+
44
+ const location = sanitize_location(`${component[FILENAME]}:${line}:${column}`);
45
+
46
+ w.ownership_invalid_mutation(name, location, prop, parent[FILENAME]);
47
+
48
+ return result;
49
+ },
50
+ /**
51
+ * @param {any} key
52
+ * @param {any} child_component
53
+ * @param {() => any} value
54
+ */
55
+ binding: (key, child_component, value) => {
56
+ if (!is_bound_or_unset(props, key) && parent && value()?.[STATE_SYMBOL]) {
57
+ w.ownership_invalid_binding(
58
+ component[FILENAME],
59
+ key,
60
+ child_component[FILENAME],
61
+ parent[FILENAME]
62
+ );
63
+ }
64
+ }
65
+ };
66
+ }
67
+
68
+ /**
69
+ * @param {Record<string, any>} props
70
+ * @param {string} prop_name
71
+ */
72
+ function is_bound_or_unset(props, prop_name) {
73
+ // Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`
74
+ // or `createClassComponent(Component, props)`
75
+ const is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;
76
+ return (
77
+ !!get_descriptor(props, prop_name)?.set ||
78
+ (is_entry_props && prop_name in props) ||
79
+ !(prop_name in props)
80
+ );
81
+ }
@@ -0,0 +1,162 @@
1
+ /** @import { Derived, Reaction, Value } from '#client' */
2
+ import { UNINITIALIZED } from '../../../constants.js';
3
+ import { snapshot } from '../../shared/clone.js';
4
+ import { DERIVED, ASYNC, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';
5
+ import { effect_tracking } from '../reactivity/effects.js';
6
+ import { active_reaction, untrack } from '../runtime.js';
7
+
8
+ /**
9
+ * @typedef {{
10
+ * traces: Error[];
11
+ * }} TraceEntry
12
+ */
13
+
14
+ /** @type {{ reaction: Reaction | null, entries: Map<Value, TraceEntry> } | null} */
15
+ export let tracing_expressions = null;
16
+
17
+ /**
18
+ * @param {Value} signal
19
+ * @param {TraceEntry} [entry]
20
+ */
21
+ function log_entry(signal, entry) {
22
+ const value = signal.v;
23
+
24
+ if (value === UNINITIALIZED) {
25
+ return;
26
+ }
27
+
28
+ const type = get_type(signal);
29
+ const current_reaction = /** @type {Reaction} */ (active_reaction);
30
+ const dirty = signal.wv > current_reaction.wv || current_reaction.wv === 0;
31
+ const style = dirty
32
+ ? 'color: CornflowerBlue; font-weight: bold'
33
+ : 'color: grey; font-weight: normal';
34
+
35
+ // eslint-disable-next-line no-console
36
+ console.groupCollapsed(
37
+ signal.label ? `%c${type}%c ${signal.label}` : `%c${type}%c`,
38
+ style,
39
+ dirty ? 'font-weight: normal' : style,
40
+ typeof value === 'object' && value !== null && STATE_SYMBOL in value
41
+ ? snapshot(value, true)
42
+ : value
43
+ );
44
+
45
+ if (type === '$derived') {
46
+ const deps = new Set(/** @type {Derived} */ (signal).deps);
47
+ for (const dep of deps) {
48
+ log_entry(dep);
49
+ }
50
+ }
51
+
52
+ if (signal.created) {
53
+ // eslint-disable-next-line no-console
54
+ console.log(signal.created);
55
+ }
56
+
57
+ if (dirty && signal.updated) {
58
+ for (const updated of signal.updated.values()) {
59
+ if (updated.error) {
60
+ // eslint-disable-next-line no-console
61
+ console.log(updated.error);
62
+ }
63
+ }
64
+ }
65
+
66
+ if (entry) {
67
+ for (var trace of entry.traces) {
68
+ // eslint-disable-next-line no-console
69
+ console.log(trace);
70
+ }
71
+ }
72
+
73
+ // eslint-disable-next-line no-console
74
+ console.groupEnd();
75
+ }
76
+
77
+ /**
78
+ * @param {Value} signal
79
+ * @returns {'$state' | '$derived' | 'store'}
80
+ */
81
+ function get_type(signal) {
82
+ if ((signal.f & (DERIVED | ASYNC)) !== 0) return '$derived';
83
+ return signal.label?.startsWith('$') ? 'store' : '$state';
84
+ }
85
+
86
+ /**
87
+ * @template T
88
+ * @param {() => string} label
89
+ * @param {() => T} fn
90
+ */
91
+ export function trace(label, fn) {
92
+ var previously_tracing_expressions = tracing_expressions;
93
+
94
+ try {
95
+ tracing_expressions = { entries: new Map(), reaction: active_reaction };
96
+
97
+ var start = performance.now();
98
+ var value = fn();
99
+ var time = (performance.now() - start).toFixed(2);
100
+
101
+ var prefix = untrack(label);
102
+
103
+ if (!effect_tracking()) {
104
+ // eslint-disable-next-line no-console
105
+ console.log(`${prefix} %cran outside of an effect (${time}ms)`, 'color: grey');
106
+ } else if (tracing_expressions.entries.size === 0) {
107
+ // eslint-disable-next-line no-console
108
+ console.log(`${prefix} %cno reactive dependencies (${time}ms)`, 'color: grey');
109
+ } else {
110
+ // eslint-disable-next-line no-console
111
+ console.group(`${prefix} %c(${time}ms)`, 'color: grey');
112
+
113
+ var entries = tracing_expressions.entries;
114
+
115
+ untrack(() => {
116
+ for (const [signal, traces] of entries) {
117
+ log_entry(signal, traces);
118
+ }
119
+ });
120
+
121
+ tracing_expressions = null;
122
+
123
+ // eslint-disable-next-line no-console
124
+ console.groupEnd();
125
+ }
126
+
127
+ return value;
128
+ } finally {
129
+ tracing_expressions = previously_tracing_expressions;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * @param {Value} source
135
+ * @param {string} label
136
+ */
137
+ export function tag(source, label) {
138
+ source.label = label;
139
+ tag_proxy(source.v, label);
140
+
141
+ return source;
142
+ }
143
+
144
+ /**
145
+ * @param {unknown} value
146
+ * @param {string} label
147
+ */
148
+ export function tag_proxy(value, label) {
149
+ // @ts-expect-error
150
+ value?.[PROXY_PATH_SYMBOL]?.(label);
151
+ return value;
152
+ }
153
+
154
+ /**
155
+ * @param {unknown} value
156
+ */
157
+ export function label(value) {
158
+ if (typeof value === 'symbol') return `Symbol(${value.description})`;
159
+ if (typeof value === 'function') return '<function>';
160
+ if (typeof value === 'object' && value) return '<object>';
161
+ return String(value);
162
+ }
@@ -0,0 +1,16 @@
1
+ import * as e from '../errors.js';
2
+ /**
3
+ * @param {Node} anchor
4
+ * @param {...(()=>any)[]} args
5
+ */
6
+ export function validate_snippet_args(anchor, ...args) {
7
+ if (typeof anchor !== 'object' || !(anchor instanceof Node)) {
8
+ e.invalid_snippet_arguments();
9
+ }
10
+
11
+ for (let arg of args) {
12
+ if (typeof arg !== 'function') {
13
+ e.invalid_snippet_arguments();
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,71 @@
1
+ /** @import { Blocker, TemplateNode, Value } from '#client' */
2
+ import { flatten, increment_pending } from '../../reactivity/async.js';
3
+ import { get } from '../../runtime.js';
4
+ import {
5
+ hydrate_next,
6
+ hydrate_node,
7
+ hydrating,
8
+ set_hydrate_node,
9
+ set_hydrating,
10
+ skip_nodes
11
+ } from '../hydration.js';
12
+
13
+ /**
14
+ * @param {TemplateNode} node
15
+ * @param {Blocker[]} blockers
16
+ * @param {Array<() => Promise<any>>} expressions
17
+ * @param {(anchor: TemplateNode, ...deriveds: Value[]) => void} fn
18
+ */
19
+ export function async(node, blockers = [], expressions = [], fn) {
20
+ var was_hydrating = hydrating;
21
+ var end = null;
22
+
23
+ if (was_hydrating) {
24
+ hydrate_next();
25
+ end = skip_nodes(false);
26
+ }
27
+
28
+ if (expressions.length === 0 && blockers.every((b) => b.settled)) {
29
+ fn(node);
30
+
31
+ // This is necessary because it is not guaranteed that the render function will
32
+ // advance the hydration node to $.async's end marker: it may stop at an inner
33
+ // block's end marker (in case of an inner if block for example), but it also may
34
+ // stop at the correct $.async end marker (in case of component child) - hence
35
+ // we can't just use hydrate_next()
36
+ // TODO this feels indicative of a bug elsewhere; ideally we wouldn't need
37
+ // to double-traverse in the already-resolved case
38
+ if (was_hydrating) {
39
+ set_hydrate_node(end);
40
+ }
41
+
42
+ return;
43
+ }
44
+
45
+ const decrement_pending = increment_pending();
46
+
47
+ if (was_hydrating) {
48
+ var previous_hydrate_node = hydrate_node;
49
+ set_hydrate_node(end);
50
+ }
51
+
52
+ flatten(blockers, [], expressions, (values) => {
53
+ if (was_hydrating) {
54
+ set_hydrating(true);
55
+ set_hydrate_node(previous_hydrate_node);
56
+ }
57
+
58
+ try {
59
+ // get values eagerly to avoid creating blocks if they reject
60
+ for (const d of values) get(d);
61
+
62
+ fn(node, ...values);
63
+ } finally {
64
+ if (was_hydrating) {
65
+ set_hydrating(false);
66
+ }
67
+
68
+ decrement_pending();
69
+ }
70
+ });
71
+ }