@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,723 @@
1
+ /** @import { EachItem, EachOutroGroup, EachState, Effect, EffectNodes, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */
2
+ /** @import { Batch } from '../../reactivity/batch.js'; */
3
+ import {
4
+ EACH_INDEX_REACTIVE,
5
+ EACH_IS_ANIMATED,
6
+ EACH_IS_CONTROLLED,
7
+ EACH_ITEM_IMMUTABLE,
8
+ EACH_ITEM_REACTIVE,
9
+ HYDRATION_END,
10
+ HYDRATION_START_ELSE
11
+ } from '../../../../constants.js';
12
+ import {
13
+ hydrate_next,
14
+ hydrate_node,
15
+ hydrating,
16
+ read_hydration_instruction,
17
+ skip_nodes,
18
+ set_hydrate_node,
19
+ set_hydrating
20
+ } from '../hydration.js';
21
+ import {
22
+ clear_text_content,
23
+ create_text,
24
+ get_first_child,
25
+ get_next_sibling,
26
+ should_defer_append
27
+ } from '../operations.js';
28
+ import {
29
+ block,
30
+ branch,
31
+ destroy_effect,
32
+ pause_effect,
33
+ resume_effect
34
+ } from '../../reactivity/effects.js';
35
+ import { source, mutable_source, internal_set } from '../../reactivity/sources.js';
36
+ import { array_from, is_array } from '../../../shared/utils.js';
37
+ import { BRANCH_EFFECT, COMMENT_NODE, EFFECT_OFFSCREEN, INERT } from '#client/constants';
38
+ import { queue_micro_task } from '../task.js';
39
+ import { get } from '../../runtime.js';
40
+ import { DEV } from 'esm-env';
41
+ import { derived_safe_equal } from '../../reactivity/deriveds.js';
42
+ import { current_batch } from '../../reactivity/batch.js';
43
+ import * as e from '../../errors.js';
44
+
45
+ // When making substantive changes to this file, validate them with the each block stress test:
46
+ // https://svelte.dev/playground/1972b2cf46564476ad8c8c6405b23b7b
47
+ // This test also exists in this repo, as `packages/svelte/tests/manual/each-stress-test`
48
+
49
+ /**
50
+ * @param {any} _
51
+ * @param {number} i
52
+ */
53
+ export function index(_, i) {
54
+ return i;
55
+ }
56
+
57
+ /**
58
+ * Pause multiple effects simultaneously, and coordinate their
59
+ * subsequent destruction. Used in each blocks
60
+ * @param {EachState} state
61
+ * @param {Effect[]} to_destroy
62
+ * @param {null | Node} controlled_anchor
63
+ */
64
+ function pause_effects(state, to_destroy, controlled_anchor) {
65
+ /** @type {TransitionManager[]} */
66
+ var transitions = [];
67
+ var length = to_destroy.length;
68
+
69
+ /** @type {EachOutroGroup} */
70
+ var group;
71
+ var remaining = to_destroy.length;
72
+
73
+ for (var i = 0; i < length; i++) {
74
+ let effect = to_destroy[i];
75
+
76
+ pause_effect(
77
+ effect,
78
+ () => {
79
+ if (group) {
80
+ group.pending.delete(effect);
81
+ group.done.add(effect);
82
+
83
+ if (group.pending.size === 0) {
84
+ var groups = /** @type {Set<EachOutroGroup>} */ (state.outrogroups);
85
+
86
+ destroy_effects(array_from(group.done));
87
+ groups.delete(group);
88
+
89
+ if (groups.size === 0) {
90
+ state.outrogroups = null;
91
+ }
92
+ }
93
+ } else {
94
+ remaining -= 1;
95
+ }
96
+ },
97
+ false
98
+ );
99
+ }
100
+
101
+ if (remaining === 0) {
102
+ // If we're in a controlled each block (i.e. the block is the only child of an
103
+ // element), and we are removing all items, _and_ there are no out transitions,
104
+ // we can use the fast path — emptying the element and replacing the anchor
105
+ var fast_path = transitions.length === 0 && controlled_anchor !== null;
106
+
107
+ if (fast_path) {
108
+ var anchor = /** @type {Element} */ (controlled_anchor);
109
+ var parent_node = /** @type {Element} */ (anchor.parentNode);
110
+
111
+ clear_text_content(parent_node);
112
+ parent_node.append(anchor);
113
+
114
+ state.items.clear();
115
+ }
116
+
117
+ destroy_effects(to_destroy, !fast_path);
118
+ } else {
119
+ group = {
120
+ pending: new Set(to_destroy),
121
+ done: new Set()
122
+ };
123
+
124
+ (state.outrogroups ??= new Set()).add(group);
125
+ }
126
+ }
127
+
128
+ /**
129
+ * @param {Effect[]} to_destroy
130
+ * @param {boolean} remove_dom
131
+ */
132
+ function destroy_effects(to_destroy, remove_dom = true) {
133
+ // TODO only destroy effects if no pending batch needs them. otherwise,
134
+ // just re-add the `EFFECT_OFFSCREEN` flag
135
+ for (var i = 0; i < to_destroy.length; i++) {
136
+ destroy_effect(to_destroy[i], remove_dom);
137
+ }
138
+ }
139
+
140
+ /** @type {TemplateNode} */
141
+ var offscreen_anchor;
142
+
143
+ /**
144
+ * @template V
145
+ * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block
146
+ * @param {number} flags
147
+ * @param {() => V[]} get_collection
148
+ * @param {(value: V, index: number) => any} get_key
149
+ * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn
150
+ * @param {null | ((anchor: Node) => void)} fallback_fn
151
+ * @returns {void}
152
+ */
153
+ export function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {
154
+ var anchor = node;
155
+
156
+ /** @type {Map<any, EachItem>} */
157
+ var items = new Map();
158
+
159
+ var is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;
160
+
161
+ if (is_controlled) {
162
+ var parent_node = /** @type {Element} */ (node);
163
+
164
+ anchor = hydrating
165
+ ? set_hydrate_node(get_first_child(parent_node))
166
+ : parent_node.appendChild(create_text());
167
+ }
168
+
169
+ if (hydrating) {
170
+ hydrate_next();
171
+ }
172
+
173
+ /** @type {Effect | null} */
174
+ var fallback = null;
175
+
176
+ // TODO: ideally we could use derived for runes mode but because of the ability
177
+ // to use a store which can be mutated, we can't do that here as mutating a store
178
+ // will still result in the collection array being the same from the store
179
+ var each_array = derived_safe_equal(() => {
180
+ var collection = get_collection();
181
+
182
+ return is_array(collection) ? collection : collection == null ? [] : array_from(collection);
183
+ });
184
+
185
+ /** @type {V[]} */
186
+ var array;
187
+
188
+ var first_run = true;
189
+
190
+ function commit() {
191
+ state.fallback = fallback;
192
+ reconcile(state, array, anchor, flags, get_key);
193
+
194
+ if (fallback !== null) {
195
+ if (array.length === 0) {
196
+ if ((fallback.f & EFFECT_OFFSCREEN) === 0) {
197
+ resume_effect(fallback);
198
+ } else {
199
+ fallback.f ^= EFFECT_OFFSCREEN;
200
+ move(fallback, null, anchor);
201
+ }
202
+ } else {
203
+ pause_effect(fallback, () => {
204
+ // TODO only null out if no pending batch needs it,
205
+ // otherwise re-add `fallback.fragment` and move the
206
+ // effect into it
207
+ fallback = null;
208
+ });
209
+ }
210
+ }
211
+ }
212
+
213
+ var effect = block(() => {
214
+ array = /** @type {V[]} */ (get(each_array));
215
+ var length = array.length;
216
+
217
+ /** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */
218
+ let mismatch = false;
219
+
220
+ if (hydrating) {
221
+ var is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;
222
+
223
+ if (is_else !== (length === 0)) {
224
+ // hydration mismatch — remove the server-rendered DOM and start over
225
+ anchor = skip_nodes();
226
+
227
+ set_hydrate_node(anchor);
228
+ set_hydrating(false);
229
+ mismatch = true;
230
+ }
231
+ }
232
+
233
+ var keys = new Set();
234
+ var batch = /** @type {Batch} */ (current_batch);
235
+ var defer = should_defer_append();
236
+
237
+ for (var index = 0; index < length; index += 1) {
238
+ if (
239
+ hydrating &&
240
+ hydrate_node.nodeType === COMMENT_NODE &&
241
+ /** @type {Comment} */ (hydrate_node).data === HYDRATION_END
242
+ ) {
243
+ // The server rendered fewer items than expected,
244
+ // so break out and continue appending non-hydrated items
245
+ anchor = /** @type {Comment} */ (hydrate_node);
246
+ mismatch = true;
247
+ set_hydrating(false);
248
+ }
249
+
250
+ var value = array[index];
251
+ var key = get_key(value, index);
252
+
253
+ if (DEV) {
254
+ // Check that the key function is idempotent (returns the same value when called twice)
255
+ var key_again = get_key(value, index);
256
+ if (key !== key_again) {
257
+ e.each_key_volatile(String(index), String(key), String(key_again));
258
+ }
259
+ }
260
+
261
+ var item = first_run ? null : items.get(key);
262
+
263
+ if (item) {
264
+ // update before reconciliation, to trigger any async updates
265
+ if (item.v) internal_set(item.v, value);
266
+ if (item.i) internal_set(item.i, index);
267
+
268
+ if (defer) {
269
+ batch.unskip_effect(item.e);
270
+ }
271
+ } else {
272
+ item = create_item(
273
+ items,
274
+ first_run ? anchor : (offscreen_anchor ??= create_text()),
275
+ value,
276
+ key,
277
+ index,
278
+ render_fn,
279
+ flags,
280
+ get_collection
281
+ );
282
+
283
+ if (!first_run) {
284
+ item.e.f |= EFFECT_OFFSCREEN;
285
+ }
286
+
287
+ items.set(key, item);
288
+ }
289
+
290
+ keys.add(key);
291
+ }
292
+
293
+ if (length === 0 && fallback_fn && !fallback) {
294
+ if (first_run) {
295
+ fallback = branch(() => fallback_fn(anchor));
296
+ } else {
297
+ fallback = branch(() => fallback_fn((offscreen_anchor ??= create_text())));
298
+ fallback.f |= EFFECT_OFFSCREEN;
299
+ }
300
+ }
301
+
302
+ if (length > keys.size) {
303
+ if (DEV) {
304
+ validate_each_keys(array, get_key);
305
+ } else {
306
+ // in prod, the additional information isn't printed, so don't bother computing it
307
+ e.each_key_duplicate('', '', '');
308
+ }
309
+ }
310
+
311
+ // remove excess nodes
312
+ if (hydrating && length > 0) {
313
+ set_hydrate_node(skip_nodes());
314
+ }
315
+
316
+ if (!first_run) {
317
+ if (defer) {
318
+ for (const [key, item] of items) {
319
+ if (!keys.has(key)) {
320
+ batch.skip_effect(item.e);
321
+ }
322
+ }
323
+
324
+ batch.oncommit(commit);
325
+ batch.ondiscard(() => {
326
+ // TODO presumably we need to do something here?
327
+ });
328
+ } else {
329
+ commit();
330
+ }
331
+ }
332
+
333
+ if (mismatch) {
334
+ // continue in hydration mode
335
+ set_hydrating(true);
336
+ }
337
+
338
+ // When we mount the each block for the first time, the collection won't be
339
+ // connected to this effect as the effect hasn't finished running yet and its deps
340
+ // won't be assigned. However, it's possible that when reconciling the each block
341
+ // that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the
342
+ // collection again can provide consistency to the reactive graph again as the deriveds
343
+ // will now be `CLEAN`.
344
+ get(each_array);
345
+ });
346
+
347
+ /** @type {EachState} */
348
+ var state = { effect, flags, items, outrogroups: null, fallback };
349
+
350
+ first_run = false;
351
+
352
+ if (hydrating) {
353
+ anchor = hydrate_node;
354
+ }
355
+ }
356
+
357
+ /**
358
+ * Skip past any non-branch effects (which could be created with `createSubscriber`, for example) to find the next branch effect
359
+ * @param {Effect | null} effect
360
+ * @returns {Effect | null}
361
+ */
362
+ function skip_to_branch(effect) {
363
+ while (effect !== null && (effect.f & BRANCH_EFFECT) === 0) {
364
+ effect = effect.next;
365
+ }
366
+ return effect;
367
+ }
368
+
369
+ /**
370
+ * Add, remove, or reorder items output by an each block as its input changes
371
+ * @template V
372
+ * @param {EachState} state
373
+ * @param {Array<V>} array
374
+ * @param {Element | Comment | Text} anchor
375
+ * @param {number} flags
376
+ * @param {(value: V, index: number) => any} get_key
377
+ * @returns {void}
378
+ */
379
+ function reconcile(state, array, anchor, flags, get_key) {
380
+ var is_animated = (flags & EACH_IS_ANIMATED) !== 0;
381
+
382
+ var length = array.length;
383
+ var items = state.items;
384
+ var current = skip_to_branch(state.effect.first);
385
+
386
+ /** @type {undefined | Set<Effect>} */
387
+ var seen;
388
+
389
+ /** @type {Effect | null} */
390
+ var prev = null;
391
+
392
+ /** @type {undefined | Set<Effect>} */
393
+ var to_animate;
394
+
395
+ /** @type {Effect[]} */
396
+ var matched = [];
397
+
398
+ /** @type {Effect[]} */
399
+ var stashed = [];
400
+
401
+ /** @type {V} */
402
+ var value;
403
+
404
+ /** @type {any} */
405
+ var key;
406
+
407
+ /** @type {Effect | undefined} */
408
+ var effect;
409
+
410
+ /** @type {number} */
411
+ var i;
412
+
413
+ if (is_animated) {
414
+ for (i = 0; i < length; i += 1) {
415
+ value = array[i];
416
+ key = get_key(value, i);
417
+ effect = /** @type {EachItem} */ (items.get(key)).e;
418
+
419
+ // offscreen == coming in now, no animation in that case,
420
+ // else this would happen https://github.com/sveltejs/svelte/issues/17181
421
+ if ((effect.f & EFFECT_OFFSCREEN) === 0) {
422
+ effect.nodes?.a?.measure();
423
+ (to_animate ??= new Set()).add(effect);
424
+ }
425
+ }
426
+ }
427
+
428
+ for (i = 0; i < length; i += 1) {
429
+ value = array[i];
430
+ key = get_key(value, i);
431
+
432
+ effect = /** @type {EachItem} */ (items.get(key)).e;
433
+
434
+ if (state.outrogroups !== null) {
435
+ for (const group of state.outrogroups) {
436
+ group.pending.delete(effect);
437
+ group.done.delete(effect);
438
+ }
439
+ }
440
+
441
+ if ((effect.f & EFFECT_OFFSCREEN) !== 0) {
442
+ effect.f ^= EFFECT_OFFSCREEN;
443
+
444
+ if (effect === current) {
445
+ move(effect, null, anchor);
446
+ } else {
447
+ var next = prev ? prev.next : current;
448
+
449
+ if (effect === state.effect.last) {
450
+ state.effect.last = effect.prev;
451
+ }
452
+
453
+ if (effect.prev) effect.prev.next = effect.next;
454
+ if (effect.next) effect.next.prev = effect.prev;
455
+ link(state, prev, effect);
456
+ link(state, effect, next);
457
+
458
+ move(effect, next, anchor);
459
+ prev = effect;
460
+
461
+ matched = [];
462
+ stashed = [];
463
+
464
+ current = skip_to_branch(prev.next);
465
+ continue;
466
+ }
467
+ }
468
+
469
+ if ((effect.f & INERT) !== 0) {
470
+ resume_effect(effect);
471
+ if (is_animated) {
472
+ effect.nodes?.a?.unfix();
473
+ (to_animate ??= new Set()).delete(effect);
474
+ }
475
+ }
476
+
477
+ if (effect !== current) {
478
+ if (seen !== undefined && seen.has(effect)) {
479
+ if (matched.length < stashed.length) {
480
+ // more efficient to move later items to the front
481
+ var start = stashed[0];
482
+ var j;
483
+
484
+ prev = start.prev;
485
+
486
+ var a = matched[0];
487
+ var b = matched[matched.length - 1];
488
+
489
+ for (j = 0; j < matched.length; j += 1) {
490
+ move(matched[j], start, anchor);
491
+ }
492
+
493
+ for (j = 0; j < stashed.length; j += 1) {
494
+ seen.delete(stashed[j]);
495
+ }
496
+
497
+ link(state, a.prev, b.next);
498
+ link(state, prev, a);
499
+ link(state, b, start);
500
+
501
+ current = start;
502
+ prev = b;
503
+ i -= 1;
504
+
505
+ matched = [];
506
+ stashed = [];
507
+ } else {
508
+ // more efficient to move earlier items to the back
509
+ seen.delete(effect);
510
+ move(effect, current, anchor);
511
+
512
+ link(state, effect.prev, effect.next);
513
+ link(state, effect, prev === null ? state.effect.first : prev.next);
514
+ link(state, prev, effect);
515
+
516
+ prev = effect;
517
+ }
518
+
519
+ continue;
520
+ }
521
+
522
+ matched = [];
523
+ stashed = [];
524
+
525
+ while (current !== null && current !== effect) {
526
+ (seen ??= new Set()).add(current);
527
+ stashed.push(current);
528
+ current = skip_to_branch(current.next);
529
+ }
530
+
531
+ if (current === null) {
532
+ continue;
533
+ }
534
+ }
535
+
536
+ if ((effect.f & EFFECT_OFFSCREEN) === 0) {
537
+ matched.push(effect);
538
+ }
539
+
540
+ prev = effect;
541
+ current = skip_to_branch(effect.next);
542
+ }
543
+
544
+ if (state.outrogroups !== null) {
545
+ for (const group of state.outrogroups) {
546
+ if (group.pending.size === 0) {
547
+ destroy_effects(array_from(group.done));
548
+ state.outrogroups?.delete(group);
549
+ }
550
+ }
551
+
552
+ if (state.outrogroups.size === 0) {
553
+ state.outrogroups = null;
554
+ }
555
+ }
556
+
557
+ if (current !== null || seen !== undefined) {
558
+ /** @type {Effect[]} */
559
+ var to_destroy = [];
560
+
561
+ if (seen !== undefined) {
562
+ for (effect of seen) {
563
+ if ((effect.f & INERT) === 0) {
564
+ to_destroy.push(effect);
565
+ }
566
+ }
567
+ }
568
+
569
+ while (current !== null) {
570
+ // If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished
571
+ if ((current.f & INERT) === 0 && current !== state.fallback) {
572
+ to_destroy.push(current);
573
+ }
574
+
575
+ current = skip_to_branch(current.next);
576
+ }
577
+
578
+ var destroy_length = to_destroy.length;
579
+
580
+ if (destroy_length > 0) {
581
+ var controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;
582
+
583
+ if (is_animated) {
584
+ for (i = 0; i < destroy_length; i += 1) {
585
+ to_destroy[i].nodes?.a?.measure();
586
+ }
587
+
588
+ for (i = 0; i < destroy_length; i += 1) {
589
+ to_destroy[i].nodes?.a?.fix();
590
+ }
591
+ }
592
+
593
+ pause_effects(state, to_destroy, controlled_anchor);
594
+ }
595
+ }
596
+
597
+ if (is_animated) {
598
+ queue_micro_task(() => {
599
+ if (to_animate === undefined) return;
600
+ for (effect of to_animate) {
601
+ effect.nodes?.a?.apply();
602
+ }
603
+ });
604
+ }
605
+ }
606
+
607
+ /**
608
+ * @template V
609
+ * @param {Map<any, EachItem>} items
610
+ * @param {Node} anchor
611
+ * @param {V} value
612
+ * @param {unknown} key
613
+ * @param {number} index
614
+ * @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>, collection: () => V[]) => void} render_fn
615
+ * @param {number} flags
616
+ * @param {() => V[]} get_collection
617
+ * @returns {EachItem}
618
+ */
619
+ function create_item(items, anchor, value, key, index, render_fn, flags, get_collection) {
620
+ var v =
621
+ (flags & EACH_ITEM_REACTIVE) !== 0
622
+ ? (flags & EACH_ITEM_IMMUTABLE) === 0
623
+ ? mutable_source(value, false, false)
624
+ : source(value)
625
+ : null;
626
+
627
+ var i = (flags & EACH_INDEX_REACTIVE) !== 0 ? source(index) : null;
628
+
629
+ if (DEV && v) {
630
+ // For tracing purposes, we need to link the source signal we create with the
631
+ // collection + index so that tracing works as intended
632
+ v.trace = () => {
633
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
634
+ get_collection()[i?.v ?? index];
635
+ };
636
+ }
637
+
638
+ return {
639
+ v,
640
+ i,
641
+ e: branch(() => {
642
+ render_fn(anchor, v ?? value, i ?? index, get_collection);
643
+
644
+ return () => {
645
+ items.delete(key);
646
+ };
647
+ })
648
+ };
649
+ }
650
+
651
+ /**
652
+ * @param {Effect} effect
653
+ * @param {Effect | null} next
654
+ * @param {Text | Element | Comment} anchor
655
+ */
656
+ function move(effect, next, anchor) {
657
+ if (!effect.nodes) return;
658
+
659
+ var node = effect.nodes.start;
660
+ var end = effect.nodes.end;
661
+
662
+ var dest =
663
+ next && (next.f & EFFECT_OFFSCREEN) === 0
664
+ ? /** @type {EffectNodes} */ (next.nodes).start
665
+ : anchor;
666
+
667
+ while (node !== null) {
668
+ var next_node = /** @type {TemplateNode} */ (get_next_sibling(node));
669
+ dest.before(node);
670
+
671
+ if (node === end) {
672
+ return;
673
+ }
674
+
675
+ node = next_node;
676
+ }
677
+ }
678
+
679
+ /**
680
+ * @param {EachState} state
681
+ * @param {Effect | null} prev
682
+ * @param {Effect | null} next
683
+ */
684
+ function link(state, prev, next) {
685
+ if (prev === null) {
686
+ state.effect.first = next;
687
+ } else {
688
+ prev.next = next;
689
+ }
690
+
691
+ if (next === null) {
692
+ state.effect.last = prev;
693
+ } else {
694
+ next.prev = prev;
695
+ }
696
+ }
697
+
698
+ /**
699
+ * @param {Array<any>} array
700
+ * @param {(item: any, index: number) => string} key_fn
701
+ * @returns {void}
702
+ */
703
+ function validate_each_keys(array, key_fn) {
704
+ const keys = new Map();
705
+ const length = array.length;
706
+
707
+ for (let i = 0; i < length; i++) {
708
+ const key = key_fn(array[i], i);
709
+
710
+ if (keys.has(key)) {
711
+ const a = String(keys.get(key));
712
+ const b = String(i);
713
+
714
+ /** @type {string | null} */
715
+ let k = String(key);
716
+ if (k.startsWith('[object ')) k = null;
717
+
718
+ e.each_key_duplicate(a, b, k);
719
+ }
720
+
721
+ keys.set(key, i);
722
+ }
723
+ }