@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,827 @@
1
+ /** @import { Derived, Effect, Reaction, Source, Value } from '#client' */
2
+ import { DEV } from 'esm-env';
3
+ import { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';
4
+ import {
5
+ destroy_block_effect_children,
6
+ destroy_effect_children,
7
+ effect_tracking,
8
+ execute_effect_teardown
9
+ } from './reactivity/effects.js';
10
+ import {
11
+ DIRTY,
12
+ MAYBE_DIRTY,
13
+ CLEAN,
14
+ DERIVED,
15
+ DESTROYED,
16
+ BRANCH_EFFECT,
17
+ STATE_SYMBOL,
18
+ BLOCK_EFFECT,
19
+ ROOT_EFFECT,
20
+ CONNECTED,
21
+ REACTION_IS_UPDATING,
22
+ STALE_REACTION,
23
+ ERROR_VALUE,
24
+ WAS_MARKED,
25
+ MANAGED_EFFECT,
26
+ REACTION_RAN
27
+ } from './constants.js';
28
+ import { old_values } from './reactivity/sources.js';
29
+ import {
30
+ destroy_derived_effects,
31
+ execute_derived,
32
+ freeze_derived_effects,
33
+ recent_async_deriveds,
34
+ unfreeze_derived_effects,
35
+ update_derived
36
+ } from './reactivity/deriveds.js';
37
+ import { async_mode_flag, tracing_mode_flag } from '../flags/index.js';
38
+ import { tracing_expressions } from './dev/tracing.js';
39
+ import { get_error } from '../shared/dev.js';
40
+ import {
41
+ component_context,
42
+ dev_current_component_function,
43
+ dev_stack,
44
+ is_runes,
45
+ set_component_context,
46
+ set_dev_current_component_function,
47
+ set_dev_stack
48
+ } from './context.js';
49
+ import {
50
+ Batch,
51
+ batch_values,
52
+ current_batch,
53
+ flushSync,
54
+ schedule_effect
55
+ } from './reactivity/batch.js';
56
+ import { handle_error } from './error-handling.js';
57
+ import { UNINITIALIZED } from '../../constants.js';
58
+ import { captured_signals } from './legacy.js';
59
+ import { without_reactive_context } from './dom/elements/bindings/shared.js';
60
+ import { set_signal_status, update_derived_status } from './reactivity/status.js';
61
+
62
+ let is_updating_effect = false;
63
+
64
+ export let is_destroying_effect = false;
65
+
66
+ /** @param {boolean} value */
67
+ export function set_is_destroying_effect(value) {
68
+ is_destroying_effect = value;
69
+ }
70
+
71
+ /** @type {null | Reaction} */
72
+ export let active_reaction = null;
73
+
74
+ export let untracking = false;
75
+
76
+ /** @param {null | Reaction} reaction */
77
+ export function set_active_reaction(reaction) {
78
+ active_reaction = reaction;
79
+ }
80
+
81
+ /** @type {null | Effect} */
82
+ export let active_effect = null;
83
+
84
+ /** @param {null | Effect} effect */
85
+ export function set_active_effect(effect) {
86
+ active_effect = effect;
87
+ }
88
+
89
+ /**
90
+ * When sources are created within a reaction, reading and writing
91
+ * them within that reaction should not cause a re-run
92
+ * @type {null | Source[]}
93
+ */
94
+ export let current_sources = null;
95
+
96
+ /** @param {Value} value */
97
+ export function push_reaction_value(value) {
98
+ if (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {
99
+ if (current_sources === null) {
100
+ current_sources = [value];
101
+ } else {
102
+ current_sources.push(value);
103
+ }
104
+ }
105
+ }
106
+
107
+ /**
108
+ * The dependencies of the reaction that is currently being executed. In many cases,
109
+ * the dependencies are unchanged between runs, and so this will be `null` unless
110
+ * and until a new dependency is accessed — we track this via `skipped_deps`
111
+ * @type {null | Value[]}
112
+ */
113
+ let new_deps = null;
114
+
115
+ let skipped_deps = 0;
116
+
117
+ /**
118
+ * Tracks writes that the effect it's executed in doesn't listen to yet,
119
+ * so that the dependency can be added to the effect later on if it then reads it
120
+ * @type {null | Source[]}
121
+ */
122
+ export let untracked_writes = null;
123
+
124
+ /** @param {null | Source[]} value */
125
+ export function set_untracked_writes(value) {
126
+ untracked_writes = value;
127
+ }
128
+
129
+ /**
130
+ * @type {number} Used by sources and deriveds for handling updates.
131
+ * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing
132
+ **/
133
+ export let write_version = 1;
134
+
135
+ /** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */
136
+ let read_version = 0;
137
+
138
+ export let update_version = read_version;
139
+
140
+ /** @param {number} value */
141
+ export function set_update_version(value) {
142
+ update_version = value;
143
+ }
144
+
145
+ export function increment_write_version() {
146
+ return ++write_version;
147
+ }
148
+
149
+ /**
150
+ * Determines whether a derived or effect is dirty.
151
+ * If it is MAYBE_DIRTY, will set the status to CLEAN
152
+ * @param {Reaction} reaction
153
+ * @returns {boolean}
154
+ */
155
+ export function is_dirty(reaction) {
156
+ var flags = reaction.f;
157
+
158
+ if ((flags & DIRTY) !== 0) {
159
+ return true;
160
+ }
161
+
162
+ if (flags & DERIVED) {
163
+ reaction.f &= ~WAS_MARKED;
164
+ }
165
+
166
+ if ((flags & MAYBE_DIRTY) !== 0) {
167
+ var dependencies = /** @type {Value[]} */ (reaction.deps);
168
+ var length = dependencies.length;
169
+
170
+ for (var i = 0; i < length; i++) {
171
+ var dependency = dependencies[i];
172
+
173
+ if (is_dirty(/** @type {Derived} */ (dependency))) {
174
+ update_derived(/** @type {Derived} */ (dependency));
175
+ }
176
+
177
+ if (dependency.wv > reaction.wv) {
178
+ return true;
179
+ }
180
+ }
181
+
182
+ if (
183
+ (flags & CONNECTED) !== 0 &&
184
+ // During time traveling we don't want to reset the status so that
185
+ // traversal of the graph in the other batches still happens
186
+ batch_values === null
187
+ ) {
188
+ set_signal_status(reaction, CLEAN);
189
+ }
190
+ }
191
+
192
+ return false;
193
+ }
194
+
195
+ /**
196
+ * @param {Value} signal
197
+ * @param {Effect} effect
198
+ * @param {boolean} [root]
199
+ */
200
+ function schedule_possible_effect_self_invalidation(signal, effect, root = true) {
201
+ var reactions = signal.reactions;
202
+ if (reactions === null) return;
203
+
204
+ if (!async_mode_flag && current_sources !== null && includes.call(current_sources, signal)) {
205
+ return;
206
+ }
207
+
208
+ for (var i = 0; i < reactions.length; i++) {
209
+ var reaction = reactions[i];
210
+
211
+ if ((reaction.f & DERIVED) !== 0) {
212
+ schedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);
213
+ } else if (effect === reaction) {
214
+ if (root) {
215
+ set_signal_status(reaction, DIRTY);
216
+ } else if ((reaction.f & CLEAN) !== 0) {
217
+ set_signal_status(reaction, MAYBE_DIRTY);
218
+ }
219
+ schedule_effect(/** @type {Effect} */ (reaction));
220
+ }
221
+ }
222
+ }
223
+
224
+ /** @param {Reaction} reaction */
225
+ export function update_reaction(reaction) {
226
+ var previous_deps = new_deps;
227
+ var previous_skipped_deps = skipped_deps;
228
+ var previous_untracked_writes = untracked_writes;
229
+ var previous_reaction = active_reaction;
230
+ var previous_sources = current_sources;
231
+ var previous_component_context = component_context;
232
+ var previous_untracking = untracking;
233
+ var previous_update_version = update_version;
234
+
235
+ var flags = reaction.f;
236
+
237
+ new_deps = /** @type {null | Value[]} */ (null);
238
+ skipped_deps = 0;
239
+ untracked_writes = null;
240
+ active_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
241
+
242
+ current_sources = null;
243
+ set_component_context(reaction.ctx);
244
+ untracking = false;
245
+ update_version = ++read_version;
246
+
247
+ if (reaction.ac !== null) {
248
+ without_reactive_context(() => {
249
+ /** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);
250
+ });
251
+
252
+ reaction.ac = null;
253
+ }
254
+
255
+ try {
256
+ reaction.f |= REACTION_IS_UPDATING;
257
+ var fn = /** @type {Function} */ (reaction.fn);
258
+ var result = fn();
259
+ reaction.f |= REACTION_RAN;
260
+ var deps = reaction.deps;
261
+
262
+ // Don't remove reactions during fork;
263
+ // they must remain for when fork is discarded
264
+ var is_fork = current_batch?.is_fork;
265
+
266
+ if (new_deps !== null) {
267
+ var i;
268
+
269
+ if (!is_fork) {
270
+ remove_reactions(reaction, skipped_deps);
271
+ }
272
+
273
+ if (deps !== null && skipped_deps > 0) {
274
+ deps.length = skipped_deps + new_deps.length;
275
+ for (i = 0; i < new_deps.length; i++) {
276
+ deps[skipped_deps + i] = new_deps[i];
277
+ }
278
+ } else {
279
+ reaction.deps = deps = new_deps;
280
+ }
281
+
282
+ if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
283
+ for (i = skipped_deps; i < deps.length; i++) {
284
+ (deps[i].reactions ??= []).push(reaction);
285
+ }
286
+ }
287
+ } else if (!is_fork && deps !== null && skipped_deps < deps.length) {
288
+ remove_reactions(reaction, skipped_deps);
289
+ deps.length = skipped_deps;
290
+ }
291
+
292
+ // If we're inside an effect and we have untracked writes, then we need to
293
+ // ensure that if any of those untracked writes result in re-invalidation
294
+ // of the current effect, then that happens accordingly
295
+ if (
296
+ is_runes() &&
297
+ untracked_writes !== null &&
298
+ !untracking &&
299
+ deps !== null &&
300
+ (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0
301
+ ) {
302
+ for (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {
303
+ schedule_possible_effect_self_invalidation(
304
+ untracked_writes[i],
305
+ /** @type {Effect} */ (reaction)
306
+ );
307
+ }
308
+ }
309
+
310
+ // If we are returning to an previous reaction then
311
+ // we need to increment the read version to ensure that
312
+ // any dependencies in this reaction aren't marked with
313
+ // the same version
314
+ if (previous_reaction !== null && previous_reaction !== reaction) {
315
+ read_version++;
316
+
317
+ // update the `rv` of the previous reaction's deps — both existing and new —
318
+ // so that they are not added again
319
+ if (previous_reaction.deps !== null) {
320
+ for (let i = 0; i < previous_skipped_deps; i += 1) {
321
+ previous_reaction.deps[i].rv = read_version;
322
+ }
323
+ }
324
+
325
+ if (previous_deps !== null) {
326
+ for (const dep of previous_deps) {
327
+ dep.rv = read_version;
328
+ }
329
+ }
330
+
331
+ if (untracked_writes !== null) {
332
+ if (previous_untracked_writes === null) {
333
+ previous_untracked_writes = untracked_writes;
334
+ } else {
335
+ previous_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));
336
+ }
337
+ }
338
+ }
339
+
340
+ if ((reaction.f & ERROR_VALUE) !== 0) {
341
+ reaction.f ^= ERROR_VALUE;
342
+ }
343
+
344
+ return result;
345
+ } catch (error) {
346
+ return handle_error(error);
347
+ } finally {
348
+ reaction.f ^= REACTION_IS_UPDATING;
349
+ new_deps = previous_deps;
350
+ skipped_deps = previous_skipped_deps;
351
+ untracked_writes = previous_untracked_writes;
352
+ active_reaction = previous_reaction;
353
+ current_sources = previous_sources;
354
+ set_component_context(previous_component_context);
355
+ untracking = previous_untracking;
356
+ update_version = previous_update_version;
357
+ }
358
+ }
359
+
360
+ /**
361
+ * @template V
362
+ * @param {Reaction} signal
363
+ * @param {Value<V>} dependency
364
+ * @returns {void}
365
+ */
366
+ function remove_reaction(signal, dependency) {
367
+ let reactions = dependency.reactions;
368
+ if (reactions !== null) {
369
+ var index = index_of.call(reactions, signal);
370
+ if (index !== -1) {
371
+ var new_length = reactions.length - 1;
372
+ if (new_length === 0) {
373
+ reactions = dependency.reactions = null;
374
+ } else {
375
+ // Swap with last element and then remove.
376
+ reactions[index] = reactions[new_length];
377
+ reactions.pop();
378
+ }
379
+ }
380
+ }
381
+
382
+ // If the derived has no reactions, then we can disconnect it from the graph,
383
+ // allowing it to either reconnect in the future, or be GC'd by the VM.
384
+ if (
385
+ reactions === null &&
386
+ (dependency.f & DERIVED) !== 0 &&
387
+ // Destroying a child effect while updating a parent effect can cause a dependency to appear
388
+ // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
389
+ // allows us to skip the expensive work of disconnecting and immediately reconnecting it
390
+ (new_deps === null || !includes.call(new_deps, dependency))
391
+ ) {
392
+ var derived = /** @type {Derived} */ (dependency);
393
+
394
+ // If we are working with a derived that is owned by an effect, then mark it as being
395
+ // disconnected and remove the mark flag, as it cannot be reliably removed otherwise
396
+ if ((derived.f & CONNECTED) !== 0) {
397
+ derived.f ^= CONNECTED;
398
+ derived.f &= ~WAS_MARKED;
399
+ }
400
+
401
+ update_derived_status(derived);
402
+
403
+ // freeze any effects inside this derived
404
+ freeze_derived_effects(derived);
405
+
406
+ // Disconnect any reactions owned by this reaction
407
+ remove_reactions(derived, 0);
408
+ }
409
+ }
410
+
411
+ /**
412
+ * @param {Reaction} signal
413
+ * @param {number} start_index
414
+ * @returns {void}
415
+ */
416
+ export function remove_reactions(signal, start_index) {
417
+ var dependencies = signal.deps;
418
+ if (dependencies === null) return;
419
+
420
+ for (var i = start_index; i < dependencies.length; i++) {
421
+ remove_reaction(signal, dependencies[i]);
422
+ }
423
+ }
424
+
425
+ /**
426
+ * @param {Effect} effect
427
+ * @returns {void}
428
+ */
429
+ export function update_effect(effect) {
430
+ var flags = effect.f;
431
+
432
+ if ((flags & DESTROYED) !== 0) {
433
+ return;
434
+ }
435
+
436
+ set_signal_status(effect, CLEAN);
437
+
438
+ var previous_effect = active_effect;
439
+ var was_updating_effect = is_updating_effect;
440
+
441
+ active_effect = effect;
442
+ is_updating_effect = true;
443
+
444
+ if (DEV) {
445
+ var previous_component_fn = dev_current_component_function;
446
+ set_dev_current_component_function(effect.component_function);
447
+ var previous_stack = /** @type {any} */ (dev_stack);
448
+ // only block effects have a dev stack, keep the current one otherwise
449
+ set_dev_stack(effect.dev_stack ?? dev_stack);
450
+ }
451
+
452
+ try {
453
+ if ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
454
+ destroy_block_effect_children(effect);
455
+ } else {
456
+ destroy_effect_children(effect);
457
+ }
458
+
459
+ execute_effect_teardown(effect);
460
+ var teardown = update_reaction(effect);
461
+ effect.teardown = typeof teardown === 'function' ? teardown : null;
462
+ effect.wv = write_version;
463
+
464
+ // In DEV, increment versions of any sources that were written to during the effect,
465
+ // so that they are correctly marked as dirty when the effect re-runs
466
+ if (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {
467
+ for (var dep of effect.deps) {
468
+ if (dep.set_during_effect) {
469
+ dep.wv = increment_write_version();
470
+ dep.set_during_effect = false;
471
+ }
472
+ }
473
+ }
474
+ } finally {
475
+ is_updating_effect = was_updating_effect;
476
+ active_effect = previous_effect;
477
+
478
+ if (DEV) {
479
+ set_dev_current_component_function(previous_component_fn);
480
+ set_dev_stack(previous_stack);
481
+ }
482
+ }
483
+ }
484
+
485
+ /**
486
+ * Returns a promise that resolves once any pending state changes have been applied.
487
+ * @returns {Promise<void>}
488
+ */
489
+ export async function tick() {
490
+ if (async_mode_flag) {
491
+ return new Promise((f) => {
492
+ // Race them against each other - in almost all cases requestAnimationFrame will fire first,
493
+ // but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame
494
+ // will be delayed and setTimeout helps us resolve fast enough in that case
495
+ requestAnimationFrame(() => f());
496
+ setTimeout(() => f());
497
+ });
498
+ }
499
+
500
+ await Promise.resolve();
501
+
502
+ // By calling flushSync we guarantee that any pending state changes are applied after one tick.
503
+ // TODO look into whether we can make flushing subsequent updates synchronously in the future.
504
+ flushSync();
505
+ }
506
+
507
+ /**
508
+ * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,
509
+ * have resolved and the DOM has been updated
510
+ * @returns {Promise<void>}
511
+ * @since 5.36
512
+ */
513
+ export function settled() {
514
+ return Batch.ensure().settled();
515
+ }
516
+
517
+ /**
518
+ * @template V
519
+ * @param {Value<V>} signal
520
+ * @returns {V}
521
+ */
522
+ export function get(signal) {
523
+ var flags = signal.f;
524
+ var is_derived = (flags & DERIVED) !== 0;
525
+
526
+ captured_signals?.add(signal);
527
+
528
+ // Register the dependency on the current reaction signal.
529
+ if (active_reaction !== null && !untracking) {
530
+ // if we're in a derived that is being read inside an _async_ derived,
531
+ // it's possible that the effect was already destroyed. In this case,
532
+ // we don't add the dependency, because that would create a memory leak
533
+ var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
534
+
535
+ if (!destroyed && (current_sources === null || !includes.call(current_sources, signal))) {
536
+ var deps = active_reaction.deps;
537
+
538
+ if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
539
+ // we're in the effect init/update cycle
540
+ if (signal.rv < read_version) {
541
+ signal.rv = read_version;
542
+
543
+ // If the signal is accessing the same dependencies in the same
544
+ // order as it did last time, increment `skipped_deps`
545
+ // rather than updating `new_deps`, which creates GC cost
546
+ if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
547
+ skipped_deps++;
548
+ } else if (new_deps === null) {
549
+ new_deps = [signal];
550
+ } else {
551
+ new_deps.push(signal);
552
+ }
553
+ }
554
+ } else {
555
+ // we're adding a dependency outside the init/update cycle
556
+ // (i.e. after an `await`)
557
+ (active_reaction.deps ??= []).push(signal);
558
+
559
+ var reactions = signal.reactions;
560
+
561
+ if (reactions === null) {
562
+ signal.reactions = [active_reaction];
563
+ } else if (!includes.call(reactions, active_reaction)) {
564
+ reactions.push(active_reaction);
565
+ }
566
+ }
567
+ }
568
+ }
569
+
570
+ if (DEV) {
571
+ // TODO reinstate this, but make it actually work
572
+ // if (current_async_effect) {
573
+ // var tracking = (current_async_effect.f & REACTION_IS_UPDATING) !== 0;
574
+ // var was_read = current_async_effect.deps?.includes(signal);
575
+
576
+ // if (!tracking && !untracking && !was_read) {
577
+ // w.await_reactivity_loss(/** @type {string} */ (signal.label));
578
+
579
+ // var trace = get_error('traced at');
580
+ // // eslint-disable-next-line no-console
581
+ // if (trace) console.warn(trace);
582
+ // }
583
+ // }
584
+
585
+ recent_async_deriveds.delete(signal);
586
+
587
+ if (
588
+ tracing_mode_flag &&
589
+ !untracking &&
590
+ tracing_expressions !== null &&
591
+ active_reaction !== null &&
592
+ tracing_expressions.reaction === active_reaction
593
+ ) {
594
+ // Used when mapping state between special blocks like `each`
595
+ if (signal.trace) {
596
+ signal.trace();
597
+ } else {
598
+ var trace = get_error('traced at');
599
+
600
+ if (trace) {
601
+ var entry = tracing_expressions.entries.get(signal);
602
+
603
+ if (entry === undefined) {
604
+ entry = { traces: [] };
605
+ tracing_expressions.entries.set(signal, entry);
606
+ }
607
+
608
+ var last = entry.traces[entry.traces.length - 1];
609
+
610
+ // traces can be duplicated, e.g. by `snapshot` invoking both
611
+ // both `getOwnPropertyDescriptor` and `get` traps at once
612
+ if (trace.stack !== last?.stack) {
613
+ entry.traces.push(trace);
614
+ }
615
+ }
616
+ }
617
+ }
618
+ }
619
+
620
+ if (is_destroying_effect && old_values.has(signal)) {
621
+ return old_values.get(signal);
622
+ }
623
+
624
+ if (is_derived) {
625
+ var derived = /** @type {Derived} */ (signal);
626
+
627
+ if (is_destroying_effect) {
628
+ var value = derived.v;
629
+
630
+ // if the derived is dirty and has reactions, or depends on the values that just changed, re-execute
631
+ // (a derived can be maybe_dirty due to the effect destroy removing its last reaction)
632
+ if (
633
+ ((derived.f & CLEAN) === 0 && derived.reactions !== null) ||
634
+ depends_on_old_values(derived)
635
+ ) {
636
+ value = execute_derived(derived);
637
+ }
638
+
639
+ old_values.set(derived, value);
640
+
641
+ return value;
642
+ }
643
+
644
+ // connect disconnected deriveds if we are reading them inside an effect,
645
+ // or inside another derived that is already connected
646
+ var should_connect =
647
+ (derived.f & CONNECTED) === 0 &&
648
+ !untracking &&
649
+ active_reaction !== null &&
650
+ (is_updating_effect || (active_reaction.f & CONNECTED) !== 0);
651
+
652
+ var is_new = (derived.f & REACTION_RAN) === 0;
653
+
654
+ if (is_dirty(derived)) {
655
+ if (should_connect) {
656
+ // set the flag before `update_derived`, so that the derived
657
+ // is added as a reaction to its dependencies
658
+ derived.f |= CONNECTED;
659
+ }
660
+
661
+ update_derived(derived);
662
+ }
663
+
664
+ if (should_connect && !is_new) {
665
+ unfreeze_derived_effects(derived);
666
+ reconnect(derived);
667
+ }
668
+ }
669
+
670
+ if (batch_values?.has(signal)) {
671
+ return batch_values.get(signal);
672
+ }
673
+
674
+ if ((signal.f & ERROR_VALUE) !== 0) {
675
+ throw signal.v;
676
+ }
677
+
678
+ return signal.v;
679
+ }
680
+
681
+ /**
682
+ * (Re)connect a disconnected derived, so that it is notified
683
+ * of changes in `mark_reactions`
684
+ * @param {Derived} derived
685
+ */
686
+ function reconnect(derived) {
687
+ derived.f |= CONNECTED;
688
+
689
+ if (derived.deps === null) return;
690
+
691
+ for (const dep of derived.deps) {
692
+ (dep.reactions ??= []).push(derived);
693
+
694
+ if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
695
+ unfreeze_derived_effects(/** @type {Derived} */ (dep));
696
+ reconnect(/** @type {Derived} */ (dep));
697
+ }
698
+ }
699
+ }
700
+
701
+ /** @param {Derived} derived */
702
+ function depends_on_old_values(derived) {
703
+ if (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst
704
+ if (derived.deps === null) return false;
705
+
706
+ for (const dep of derived.deps) {
707
+ if (old_values.has(dep)) {
708
+ return true;
709
+ }
710
+
711
+ if ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {
712
+ return true;
713
+ }
714
+ }
715
+
716
+ return false;
717
+ }
718
+
719
+ /**
720
+ * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared
721
+ * @template V
722
+ * @param {Value<V> | undefined} signal
723
+ * @returns {V | undefined}
724
+ */
725
+ export function safe_get(signal) {
726
+ return signal && get(signal);
727
+ }
728
+
729
+ /**
730
+ * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),
731
+ * any state read inside `fn` will not be treated as a dependency.
732
+ *
733
+ * ```ts
734
+ * $effect(() => {
735
+ * // this will run when `data` changes, but not when `time` changes
736
+ * save(data, {
737
+ * timestamp: untrack(() => time)
738
+ * });
739
+ * });
740
+ * ```
741
+ * @template T
742
+ * @param {() => T} fn
743
+ * @returns {T}
744
+ */
745
+ export function untrack(fn) {
746
+ var previous_untracking = untracking;
747
+ try {
748
+ untracking = true;
749
+ return fn();
750
+ } finally {
751
+ untracking = previous_untracking;
752
+ }
753
+ }
754
+
755
+ /**
756
+ * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.
757
+ * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).
758
+ * @param {any} value
759
+ * @returns {void}
760
+ */
761
+ export function deep_read_state(value) {
762
+ if (typeof value !== 'object' || !value || value instanceof EventTarget) {
763
+ return;
764
+ }
765
+
766
+ if (STATE_SYMBOL in value) {
767
+ deep_read(value);
768
+ } else if (!Array.isArray(value)) {
769
+ for (let key in value) {
770
+ const prop = value[key];
771
+ if (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {
772
+ deep_read(prop);
773
+ }
774
+ }
775
+ }
776
+ }
777
+
778
+ /**
779
+ * Deeply traverse an object and read all its properties
780
+ * so that they're all reactive in case this is `$state`
781
+ * @param {any} value
782
+ * @param {Set<any>} visited
783
+ * @returns {void}
784
+ */
785
+ export function deep_read(value, visited = new Set()) {
786
+ if (
787
+ typeof value === 'object' &&
788
+ value !== null &&
789
+ // We don't want to traverse DOM elements
790
+ !(value instanceof EventTarget) &&
791
+ !visited.has(value)
792
+ ) {
793
+ visited.add(value);
794
+ // When working with a possible SvelteDate, this
795
+ // will ensure we capture changes to it.
796
+ if (value instanceof Date) {
797
+ value.getTime();
798
+ }
799
+ for (let key in value) {
800
+ try {
801
+ deep_read(value[key], visited);
802
+ } catch (e) {
803
+ // continue
804
+ }
805
+ }
806
+ const proto = get_prototype_of(value);
807
+ if (
808
+ proto !== Object.prototype &&
809
+ proto !== Array.prototype &&
810
+ proto !== Map.prototype &&
811
+ proto !== Set.prototype &&
812
+ proto !== Date.prototype
813
+ ) {
814
+ const descriptors = get_descriptors(proto);
815
+ for (let key in descriptors) {
816
+ const get = descriptors[key].get;
817
+ if (get) {
818
+ try {
819
+ get.call(value);
820
+ } catch (e) {
821
+ // continue
822
+ }
823
+ }
824
+ }
825
+ }
826
+ }
827
+ }