@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,95 @@
1
+ import { get, tick, untrack } from '../internal/client/runtime.js';
2
+ import { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';
3
+ import { source, increment } from '../internal/client/reactivity/sources.js';
4
+ import { tag } from '../internal/client/dev/tracing.js';
5
+ import { DEV } from 'esm-env';
6
+ import { queue_micro_task } from '../internal/client/dom/task.js';
7
+
8
+ /**
9
+ * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.
10
+ * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.
11
+ *
12
+ * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),
13
+ * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.
14
+ *
15
+ * If `start` returns a cleanup function, it will be called when the effect is destroyed.
16
+ *
17
+ * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects
18
+ * are active, and the returned teardown function will only be called when all effects are destroyed.
19
+ *
20
+ * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):
21
+ *
22
+ * ```js
23
+ * import { createSubscriber } from 'svelte/reactivity';
24
+ * import { on } from 'svelte/events';
25
+ *
26
+ * export class MediaQuery {
27
+ * #query;
28
+ * #subscribe;
29
+ *
30
+ * constructor(query) {
31
+ * this.#query = window.matchMedia(`(${query})`);
32
+ *
33
+ * this.#subscribe = createSubscriber((update) => {
34
+ * // when the `change` event occurs, re-run any effects that read `this.current`
35
+ * const off = on(this.#query, 'change', update);
36
+ *
37
+ * // stop listening when all the effects are destroyed
38
+ * return () => off();
39
+ * });
40
+ * }
41
+ *
42
+ * get current() {
43
+ * // This makes the getter reactive, if read in an effect
44
+ * this.#subscribe();
45
+ *
46
+ * // Return the current state of the query, whether or not we're in an effect
47
+ * return this.#query.matches;
48
+ * }
49
+ * }
50
+ * ```
51
+ * @param {(update: () => void) => (() => void) | void} start
52
+ * @since 5.7.0
53
+ */
54
+ export function createSubscriber(start) {
55
+ let subscribers = 0;
56
+ let version = source(0);
57
+ /** @type {(() => void) | void} */
58
+ let stop;
59
+
60
+ if (DEV) {
61
+ tag(version, 'createSubscriber version');
62
+ }
63
+
64
+ return () => {
65
+ if (effect_tracking()) {
66
+ get(version);
67
+
68
+ render_effect(() => {
69
+ if (subscribers === 0) {
70
+ stop = untrack(() => start(() => increment(version)));
71
+ }
72
+
73
+ subscribers += 1;
74
+
75
+ return () => {
76
+ queue_micro_task(() => {
77
+ // Only count down after a microtask, else we would reach 0 before our own render effect reruns,
78
+ // but reach 1 again when the tick callback of the prior teardown runs. That would mean we
79
+ // re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.
80
+ subscribers -= 1;
81
+
82
+ if (subscribers === 0) {
83
+ stop?.();
84
+ stop = undefined;
85
+ // Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.
86
+ // If we didn't do this then the comparison of write versions would determine that the derived has a later version than
87
+ // the subscriber, and it would not be re-run.
88
+ increment(version);
89
+ }
90
+ });
91
+ };
92
+ });
93
+ }
94
+ };
95
+ }
@@ -0,0 +1,118 @@
1
+ /** @import { Source } from '#client' */
2
+ import { derived } from '../internal/client/index.js';
3
+ import { set, state } from '../internal/client/reactivity/sources.js';
4
+ import { tag } from '../internal/client/dev/tracing.js';
5
+ import { active_reaction, get, set_active_reaction } from '../internal/client/runtime.js';
6
+ import { DEV } from 'esm-env';
7
+
8
+ var inited = false;
9
+
10
+ /**
11
+ * A reactive version of the built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object.
12
+ * Reading the date (whether with methods like `date.getTime()` or `date.toString()`, or via things like [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat))
13
+ * in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)
14
+ * will cause it to be re-evaluated when the value of the date changes.
15
+ *
16
+ * ```svelte
17
+ * <script>
18
+ * import { SvelteDate } from 'svelte/reactivity';
19
+ *
20
+ * const date = new SvelteDate();
21
+ *
22
+ * const formatter = new Intl.DateTimeFormat(undefined, {
23
+ * hour: 'numeric',
24
+ * minute: 'numeric',
25
+ * second: 'numeric'
26
+ * });
27
+ *
28
+ * $effect(() => {
29
+ * const interval = setInterval(() => {
30
+ * date.setTime(Date.now());
31
+ * }, 1000);
32
+ *
33
+ * return () => {
34
+ * clearInterval(interval);
35
+ * };
36
+ * });
37
+ * </script>
38
+ *
39
+ * <p>The time is {formatter.format(date)}</p>
40
+ * ```
41
+ */
42
+ export class SvelteDate extends Date {
43
+ #time = state(super.getTime());
44
+
45
+ /** @type {Map<keyof Date, Source<unknown>>} */
46
+ #deriveds = new Map();
47
+
48
+ #reaction = active_reaction;
49
+
50
+ /** @param {any[]} params */
51
+ constructor(...params) {
52
+ // @ts-ignore
53
+ super(...params);
54
+
55
+ if (DEV) {
56
+ tag(this.#time, 'SvelteDate.#time');
57
+ }
58
+
59
+ if (!inited) this.#init();
60
+ }
61
+
62
+ #init() {
63
+ inited = true;
64
+
65
+ var proto = SvelteDate.prototype;
66
+ var date_proto = Date.prototype;
67
+
68
+ var methods = /** @type {Array<keyof Date & string>} */ (
69
+ Object.getOwnPropertyNames(date_proto)
70
+ );
71
+
72
+ for (const method of methods) {
73
+ if (method.startsWith('get') || method.startsWith('to') || method === 'valueOf') {
74
+ // @ts-ignore
75
+ proto[method] = function (...args) {
76
+ // don't memoize if there are arguments
77
+ // @ts-ignore
78
+ if (args.length > 0) {
79
+ get(this.#time);
80
+ // @ts-ignore
81
+ return date_proto[method].apply(this, args);
82
+ }
83
+
84
+ var d = this.#deriveds.get(method);
85
+
86
+ if (d === undefined) {
87
+ // lazily create the derived, but as though it were being
88
+ // created at the same time as the class instance
89
+ const reaction = active_reaction;
90
+ set_active_reaction(this.#reaction);
91
+
92
+ d = derived(() => {
93
+ get(this.#time);
94
+ // @ts-ignore
95
+ return date_proto[method].apply(this, args);
96
+ });
97
+
98
+ this.#deriveds.set(method, d);
99
+
100
+ set_active_reaction(reaction);
101
+ }
102
+
103
+ return get(d);
104
+ };
105
+ }
106
+
107
+ if (method.startsWith('set')) {
108
+ // @ts-ignore
109
+ proto[method] = function (...args) {
110
+ // @ts-ignore
111
+ var result = date_proto[method].apply(this, args);
112
+ set(this.#time, date_proto.getTime.call(this));
113
+ return result;
114
+ };
115
+ }
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,7 @@
1
+ export { SvelteDate } from './date.js';
2
+ export { SvelteSet } from './set.js';
3
+ export { SvelteMap } from './map.js';
4
+ export { SvelteURL } from './url.js';
5
+ export { SvelteURLSearchParams } from './url-search-params.js';
6
+ export { MediaQuery } from './media-query.js';
7
+ export { createSubscriber } from './create-subscriber.js';
@@ -0,0 +1,23 @@
1
+ export const SvelteDate = globalThis.Date;
2
+ export const SvelteSet = globalThis.Set;
3
+ export const SvelteMap = globalThis.Map;
4
+ export const SvelteURL = globalThis.URL;
5
+ export const SvelteURLSearchParams = globalThis.URLSearchParams;
6
+
7
+ export class MediaQuery {
8
+ current;
9
+ /**
10
+ * @param {string} query
11
+ * @param {boolean} [matches]
12
+ */
13
+ constructor(query, matches = false) {
14
+ this.current = matches;
15
+ }
16
+ }
17
+
18
+ /**
19
+ * @param {any} _
20
+ */
21
+ export function createSubscriber(_) {
22
+ return () => {};
23
+ }
@@ -0,0 +1,273 @@
1
+ /** @import { Source } from '#client' */
2
+ import { DEV } from 'esm-env';
3
+ import { set, source, state, increment } from '../internal/client/reactivity/sources.js';
4
+ import { label, tag } from '../internal/client/dev/tracing.js';
5
+ import { get, update_version } from '../internal/client/runtime.js';
6
+
7
+ /**
8
+ * A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.
9
+ * Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)
10
+ * will cause it to be re-evaluated as necessary when the map is updated.
11
+ *
12
+ * Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).
13
+ *
14
+ * ```svelte
15
+ * <script>
16
+ * import { SvelteMap } from 'svelte/reactivity';
17
+ * import { result } from './game.js';
18
+ *
19
+ * let board = new SvelteMap();
20
+ * let player = $state('x');
21
+ * let winner = $derived(result(board));
22
+ *
23
+ * function reset() {
24
+ * player = 'x';
25
+ * board.clear();
26
+ * }
27
+ * </script>
28
+ *
29
+ * <div class="board">
30
+ * {#each Array(9), i}
31
+ * <button
32
+ * disabled={board.has(i) || winner}
33
+ * onclick={() => {
34
+ * board.set(i, player);
35
+ * player = player === 'x' ? 'o' : 'x';
36
+ * }}
37
+ * >{board.get(i)}</button>
38
+ * {/each}
39
+ * </div>
40
+ *
41
+ * {#if winner}
42
+ * <p>{winner} wins!</p>
43
+ * <button onclick={reset}>reset</button>
44
+ * {:else}
45
+ * <p>{player} is next</p>
46
+ * {/if}
47
+ * ```
48
+ *
49
+ * @template K
50
+ * @template V
51
+ * @extends {Map<K, V>}
52
+ */
53
+ export class SvelteMap extends Map {
54
+ /** @type {Map<K, Source<number>>} */
55
+ #sources = new Map();
56
+ #version = state(0);
57
+ #size = state(0);
58
+ #update_version = update_version || -1;
59
+
60
+ /**
61
+ * @param {Iterable<readonly [K, V]> | null | undefined} [value]
62
+ */
63
+ constructor(value) {
64
+ super();
65
+
66
+ if (DEV) {
67
+ // If the value is invalid then the native exception will fire here
68
+ value = new Map(value);
69
+
70
+ tag(this.#version, 'SvelteMap version');
71
+ tag(this.#size, 'SvelteMap.size');
72
+ }
73
+
74
+ if (value) {
75
+ for (var [key, v] of value) {
76
+ super.set(key, v);
77
+ }
78
+ this.#size.v = super.size;
79
+ }
80
+ }
81
+
82
+ /**
83
+ * If the source is being created inside the same reaction as the SvelteMap instance,
84
+ * we use `state` so that it will not be a dependency of the reaction. Otherwise we
85
+ * use `source` so it will be.
86
+ *
87
+ * @template T
88
+ * @param {T} value
89
+ * @returns {Source<T>}
90
+ */
91
+ #source(value) {
92
+ return update_version === this.#update_version ? state(value) : source(value);
93
+ }
94
+
95
+ /** @param {K} key */
96
+ has(key) {
97
+ var sources = this.#sources;
98
+ var s = sources.get(key);
99
+
100
+ if (s === undefined) {
101
+ var ret = super.get(key);
102
+ if (ret !== undefined) {
103
+ s = this.#source(0);
104
+
105
+ if (DEV) {
106
+ tag(s, `SvelteMap get(${label(key)})`);
107
+ }
108
+
109
+ sources.set(key, s);
110
+ } else {
111
+ // We should always track the version in case
112
+ // the Set ever gets this value in the future.
113
+ get(this.#version);
114
+ return false;
115
+ }
116
+ }
117
+
118
+ get(s);
119
+ return true;
120
+ }
121
+
122
+ /**
123
+ * @param {(value: V, key: K, map: Map<K, V>) => void} callbackfn
124
+ * @param {any} [this_arg]
125
+ */
126
+ forEach(callbackfn, this_arg) {
127
+ this.#read_all();
128
+ super.forEach(callbackfn, this_arg);
129
+ }
130
+
131
+ /** @param {K} key */
132
+ get(key) {
133
+ var sources = this.#sources;
134
+ var s = sources.get(key);
135
+
136
+ if (s === undefined) {
137
+ var ret = super.get(key);
138
+ if (ret !== undefined) {
139
+ s = this.#source(0);
140
+
141
+ if (DEV) {
142
+ tag(s, `SvelteMap get(${label(key)})`);
143
+ }
144
+
145
+ sources.set(key, s);
146
+ } else {
147
+ // We should always track the version in case
148
+ // the Set ever gets this value in the future.
149
+ get(this.#version);
150
+ return undefined;
151
+ }
152
+ }
153
+
154
+ get(s);
155
+ return super.get(key);
156
+ }
157
+
158
+ /**
159
+ * @param {K} key
160
+ * @param {V} value
161
+ * */
162
+ set(key, value) {
163
+ var sources = this.#sources;
164
+ var s = sources.get(key);
165
+ var prev_res = super.get(key);
166
+ var res = super.set(key, value);
167
+ var version = this.#version;
168
+
169
+ if (s === undefined) {
170
+ s = this.#source(0);
171
+
172
+ if (DEV) {
173
+ tag(s, `SvelteMap get(${label(key)})`);
174
+ }
175
+
176
+ sources.set(key, s);
177
+ set(this.#size, super.size);
178
+ increment(version);
179
+ } else if (prev_res !== value) {
180
+ increment(s);
181
+
182
+ // if not every reaction of s is a reaction of version we need to also include version
183
+ var v_reactions = version.reactions === null ? null : new Set(version.reactions);
184
+ var needs_version_increase =
185
+ v_reactions === null ||
186
+ !s.reactions?.every((r) =>
187
+ /** @type {NonNullable<typeof v_reactions>} */ (v_reactions).has(r)
188
+ );
189
+ if (needs_version_increase) {
190
+ increment(version);
191
+ }
192
+ }
193
+
194
+ return res;
195
+ }
196
+
197
+ /** @param {K} key */
198
+ delete(key) {
199
+ var sources = this.#sources;
200
+ var s = sources.get(key);
201
+ var res = super.delete(key);
202
+
203
+ if (s !== undefined) {
204
+ sources.delete(key);
205
+ set(this.#size, super.size);
206
+ set(s, -1);
207
+ increment(this.#version);
208
+ }
209
+
210
+ return res;
211
+ }
212
+
213
+ clear() {
214
+ if (super.size === 0) {
215
+ return;
216
+ }
217
+ // Clear first, so we get nice console.log outputs with $inspect
218
+ super.clear();
219
+ var sources = this.#sources;
220
+ set(this.#size, 0);
221
+ for (var s of sources.values()) {
222
+ set(s, -1);
223
+ }
224
+ increment(this.#version);
225
+ sources.clear();
226
+ }
227
+
228
+ #read_all() {
229
+ get(this.#version);
230
+
231
+ var sources = this.#sources;
232
+ if (this.#size.v !== sources.size) {
233
+ for (var key of super.keys()) {
234
+ if (!sources.has(key)) {
235
+ var s = this.#source(0);
236
+ if (DEV) {
237
+ tag(s, `SvelteMap get(${label(key)})`);
238
+ }
239
+
240
+ sources.set(key, s);
241
+ }
242
+ }
243
+ }
244
+
245
+ for ([, s] of this.#sources) {
246
+ get(s);
247
+ }
248
+ }
249
+
250
+ keys() {
251
+ get(this.#version);
252
+ return super.keys();
253
+ }
254
+
255
+ values() {
256
+ this.#read_all();
257
+ return super.values();
258
+ }
259
+
260
+ entries() {
261
+ this.#read_all();
262
+ return super.entries();
263
+ }
264
+
265
+ [Symbol.iterator]() {
266
+ return this.entries();
267
+ }
268
+
269
+ get size() {
270
+ get(this.#size);
271
+ return super.size;
272
+ }
273
+ }
@@ -0,0 +1,55 @@
1
+ import { on } from '../events/index.js';
2
+ import { ReactiveValue } from './reactive-value.js';
3
+
4
+ const parenthesis_regex = /\(.+\)/;
5
+
6
+ // these keywords are valid media queries but they need to be without parenthesis
7
+ //
8
+ // eg: new MediaQuery('screen')
9
+ //
10
+ // however because of the auto-parenthesis logic in the constructor since there's no parenthesis
11
+ // in the media query they'll be surrounded by parenthesis
12
+ //
13
+ // however we can check if the media query is only composed of these keywords
14
+ // and skip the auto-parenthesis
15
+ //
16
+ // https://github.com/sveltejs/svelte/issues/15930
17
+ const non_parenthesized_keywords = new Set(['all', 'print', 'screen', 'and', 'or', 'not', 'only']);
18
+
19
+ /**
20
+ * Creates a media query and provides a `current` property that reflects whether or not it matches.
21
+ *
22
+ * Use it carefully — during server-side rendering, there is no way to know what the correct value should be, potentially causing content to change upon hydration.
23
+ * If you can use the media query in CSS to achieve the same effect, do that.
24
+ *
25
+ * ```svelte
26
+ * <script>
27
+ * import { MediaQuery } from 'svelte/reactivity';
28
+ *
29
+ * const large = new MediaQuery('min-width: 800px');
30
+ * </script>
31
+ *
32
+ * <h1>{large.current ? 'large screen' : 'small screen'}</h1>
33
+ * ```
34
+ * @extends {ReactiveValue<boolean>}
35
+ * @since 5.7.0
36
+ */
37
+ export class MediaQuery extends ReactiveValue {
38
+ /**
39
+ * @param {string} query A media query string
40
+ * @param {boolean} [fallback] Fallback value for the server
41
+ */
42
+ constructor(query, fallback) {
43
+ let final_query =
44
+ parenthesis_regex.test(query) ||
45
+ // we need to use `some` here because technically this `window.matchMedia('random,screen')` still returns true
46
+ query.split(/[\s,]+/).some((keyword) => non_parenthesized_keywords.has(keyword.trim()))
47
+ ? query
48
+ : `(${query})`;
49
+ const q = window.matchMedia(final_query);
50
+ super(
51
+ () => q.matches,
52
+ (update) => on(q, 'change', update)
53
+ );
54
+ }
55
+ }
@@ -0,0 +1,24 @@
1
+ import { createSubscriber } from './create-subscriber.js';
2
+
3
+ /**
4
+ * @template T
5
+ */
6
+ export class ReactiveValue {
7
+ #fn;
8
+ #subscribe;
9
+
10
+ /**
11
+ *
12
+ * @param {() => T} fn
13
+ * @param {(update: () => void) => void} onsubscribe
14
+ */
15
+ constructor(fn, onsubscribe) {
16
+ this.#fn = fn;
17
+ this.#subscribe = createSubscriber(onsubscribe);
18
+ }
19
+
20
+ get current() {
21
+ this.#subscribe();
22
+ return this.#fn();
23
+ }
24
+ }