@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,911 @@
1
+ /** @import { AST } from '#compiler'; */
2
+ /** @import { Context, Visitors } from 'esrap' */
3
+ import * as esrap from 'esrap';
4
+ import ts from 'esrap/languages/ts';
5
+ import { is_void } from '../../utils.js';
6
+
7
+ /** Threshold for when content should be formatted on separate lines */
8
+ const LINE_BREAK_THRESHOLD = 50;
9
+
10
+ /**
11
+ * `print` converts a Svelte AST node back into Svelte source code.
12
+ * It is primarily intended for tools that parse and transform components using the compiler’s modern AST representation.
13
+ *
14
+ * `print(ast)` requires an AST node produced by parse with modern: true, or any sub-node within that modern AST.
15
+ * The result contains the generated source and a corresponding source map.
16
+ * The output is valid Svelte, but formatting details such as whitespace or quoting may differ from the original.
17
+ * @param {AST.SvelteNode} ast
18
+ * @param {import('./types.js').Options | undefined} options
19
+ */
20
+ export function print(ast, options = undefined) {
21
+ const comments = (ast.type === 'Root' && ast.comments) || [];
22
+
23
+ return esrap.print(
24
+ ast,
25
+ /** @type {Visitors<AST.SvelteNode>} */ ({
26
+ ...ts({
27
+ comments,
28
+ getLeadingComments: options?.getLeadingComments,
29
+ getTrailingComments: options?.getTrailingComments
30
+ }),
31
+ ...svelte_visitors(comments),
32
+ ...css_visitors
33
+ })
34
+ );
35
+ }
36
+
37
+ /**
38
+ * @param {Context} context
39
+ * @param {AST.SvelteNode} node
40
+ * @param {boolean} allow_inline
41
+ */
42
+ function block(context, node, allow_inline = false) {
43
+ const child_context = context.new();
44
+ child_context.visit(node);
45
+
46
+ if (child_context.empty()) {
47
+ return;
48
+ }
49
+
50
+ if (allow_inline && !child_context.multiline) {
51
+ context.append(child_context);
52
+ } else {
53
+ context.indent();
54
+ context.newline();
55
+ context.append(child_context);
56
+ context.dedent();
57
+ context.newline();
58
+ }
59
+ }
60
+
61
+ /**
62
+ * @param {AST.BaseNode} node
63
+ * @param {AST.BaseElement['attributes']} attributes
64
+ * @param {Context} context
65
+ * @param {AST.JSComment[]} comments
66
+ * @returns {boolean} true if attributes were formatted on multiple lines
67
+ */
68
+ function attributes(node, attributes, context, comments) {
69
+ if (attributes.length === 0) {
70
+ return false;
71
+ }
72
+
73
+ let length = -1;
74
+
75
+ let comment_index = comments.findIndex((comment) => comment.start > node.start);
76
+
77
+ if (comment_index === -1) {
78
+ comment_index = comments.length;
79
+ }
80
+
81
+ const separator = context.new();
82
+
83
+ const children = attributes.map((attribute) => {
84
+ const child_context = context.new();
85
+
86
+ while (comment_index < comments.length) {
87
+ const comment = comments[comment_index];
88
+
89
+ if (comment.start < attribute.start) {
90
+ if (comment.type === 'Line') {
91
+ child_context.write('//' + comment.value);
92
+ child_context.newline();
93
+ } else {
94
+ child_context.write('/*' + comment.value + '*/'); // TODO match indentation?
95
+ child_context.append(separator);
96
+ }
97
+
98
+ comment_index += 1;
99
+ } else {
100
+ break;
101
+ }
102
+ }
103
+
104
+ child_context.visit(attribute);
105
+
106
+ length += child_context.measure() + 1;
107
+
108
+ return child_context;
109
+ });
110
+
111
+ let multiline = context.multiline || length > LINE_BREAK_THRESHOLD;
112
+
113
+ if (multiline) {
114
+ separator.newline();
115
+ context.indent();
116
+ for (const child of children) {
117
+ context.newline();
118
+ context.append(child);
119
+ }
120
+ context.dedent();
121
+ context.newline();
122
+ } else {
123
+ separator.write(' ');
124
+ for (const child of children) {
125
+ context.write(' ');
126
+ context.append(child);
127
+ }
128
+ }
129
+
130
+ return multiline;
131
+ }
132
+
133
+ /**
134
+ * @param {AST.BaseElement} node
135
+ * @param {Context} context
136
+ * @param {AST.JSComment[]} comments
137
+ */
138
+ function base_element(node, context, comments) {
139
+ const child_context = context.new();
140
+
141
+ child_context.write('<' + node.name);
142
+
143
+ // Handle special Svelte components/elements that need 'this' attribute
144
+ if (node.type === 'SvelteComponent') {
145
+ child_context.write(' this={');
146
+ child_context.visit(/** @type {AST.SvelteComponent} */ (node).expression);
147
+ child_context.write('}');
148
+ } else if (node.type === 'SvelteElement') {
149
+ child_context.write(' this={');
150
+ child_context.visit(/** @type {AST.SvelteElement} */ (node).tag);
151
+ child_context.write('}');
152
+ }
153
+
154
+ const multiline_attributes = attributes(node, node.attributes, child_context, comments);
155
+ const is_doctype_node = node.name.toLowerCase() === '!doctype';
156
+ const is_self_closing =
157
+ is_void(node.name) || (node.type === 'Component' && node.fragment.nodes.length === 0);
158
+
159
+ if (is_doctype_node) child_context.write(`>`);
160
+ else if (is_self_closing) {
161
+ child_context.write(`${multiline_attributes ? '' : ' '}/>`);
162
+ } else {
163
+ child_context.write('>');
164
+ block(child_context, node.fragment, true);
165
+ child_context.write(`</${node.name}>`);
166
+ }
167
+
168
+ context.append(child_context);
169
+ }
170
+
171
+ /** @type {Visitors<AST.SvelteNode>} */
172
+ const css_visitors = {
173
+ Atrule(node, context) {
174
+ context.write(`@${node.name}`);
175
+ if (node.prelude) context.write(` ${node.prelude}`);
176
+
177
+ if (node.block) {
178
+ context.write(' ');
179
+ context.visit(node.block);
180
+ } else {
181
+ context.write(';');
182
+ }
183
+ },
184
+
185
+ AttributeSelector(node, context) {
186
+ context.write(`[${node.name}`);
187
+ if (node.matcher) {
188
+ context.write(node.matcher);
189
+ context.write(`"${node.value}"`);
190
+ if (node.flags) {
191
+ context.write(` ${node.flags}`);
192
+ }
193
+ }
194
+ context.write(']');
195
+ },
196
+
197
+ Block(node, context) {
198
+ context.write('{');
199
+
200
+ if (node.children.length > 0) {
201
+ context.indent();
202
+ context.newline();
203
+
204
+ let started = false;
205
+
206
+ for (const child of node.children) {
207
+ if (started) {
208
+ context.newline();
209
+ }
210
+
211
+ context.visit(child);
212
+
213
+ started = true;
214
+ }
215
+
216
+ context.dedent();
217
+ context.newline();
218
+ }
219
+
220
+ context.write('}');
221
+ },
222
+
223
+ ClassSelector(node, context) {
224
+ context.write(`.${node.name}`);
225
+ },
226
+
227
+ ComplexSelector(node, context) {
228
+ for (const selector of node.children) {
229
+ context.visit(selector);
230
+ }
231
+ },
232
+
233
+ Declaration(node, context) {
234
+ context.write(`${node.property}: ${node.value};`);
235
+ },
236
+
237
+ IdSelector(node, context) {
238
+ context.write(`#${node.name}`);
239
+ },
240
+
241
+ NestingSelector(node, context) {
242
+ context.write('&');
243
+ },
244
+
245
+ Nth(node, context) {
246
+ context.write(node.value);
247
+ },
248
+
249
+ Percentage(node, context) {
250
+ context.write(`${node.value}%`);
251
+ },
252
+
253
+ PseudoClassSelector(node, context) {
254
+ context.write(`:${node.name}`);
255
+
256
+ if (node.args) {
257
+ context.write('(');
258
+
259
+ let started = false;
260
+
261
+ for (const arg of node.args.children) {
262
+ if (started) {
263
+ context.write(', ');
264
+ }
265
+
266
+ context.visit(arg);
267
+
268
+ started = true;
269
+ }
270
+
271
+ context.write(')');
272
+ }
273
+ },
274
+
275
+ PseudoElementSelector(node, context) {
276
+ context.write(`::${node.name}`);
277
+ },
278
+
279
+ RelativeSelector(node, context) {
280
+ if (node.combinator) {
281
+ if (node.combinator.name === ' ') {
282
+ context.write(' ');
283
+ } else {
284
+ context.write(` ${node.combinator.name} `);
285
+ }
286
+ }
287
+
288
+ for (const selector of node.selectors) {
289
+ context.visit(selector);
290
+ }
291
+ },
292
+
293
+ Rule(node, context) {
294
+ let started = false;
295
+
296
+ for (const selector of node.prelude.children) {
297
+ if (started) {
298
+ context.write(',');
299
+ context.newline();
300
+ }
301
+
302
+ context.visit(selector);
303
+ started = true;
304
+ }
305
+
306
+ context.write(' ');
307
+ context.visit(node.block);
308
+ },
309
+
310
+ SelectorList(node, context) {
311
+ let started = false;
312
+ for (const selector of node.children) {
313
+ if (started) {
314
+ context.write(', ');
315
+ }
316
+
317
+ context.visit(selector);
318
+ started = true;
319
+ }
320
+ },
321
+
322
+ TypeSelector(node, context) {
323
+ context.write(node.name);
324
+ }
325
+ };
326
+
327
+ /**
328
+ * @param {AST.JSComment[]} comments
329
+ * @returns {Visitors<AST.SvelteNode>}
330
+ */
331
+ const svelte_visitors = (comments) => ({
332
+ Root(node, context) {
333
+ if (node.options) {
334
+ context.write('<svelte:options');
335
+
336
+ for (const attribute of node.options.attributes) {
337
+ context.write(' ');
338
+ context.visit(attribute);
339
+ }
340
+
341
+ context.write(' />');
342
+ }
343
+
344
+ let started = false;
345
+
346
+ for (const item of [node.module, node.instance, node.fragment, node.css]) {
347
+ if (!item) continue;
348
+
349
+ if (started) {
350
+ context.margin();
351
+ context.newline();
352
+ }
353
+
354
+ context.visit(item);
355
+ started = true;
356
+ }
357
+ },
358
+
359
+ Script(node, context) {
360
+ context.write('<script');
361
+ attributes(node, node.attributes, context, comments);
362
+ context.write('>');
363
+ block(context, node.content);
364
+ context.write('</script>');
365
+ },
366
+
367
+ Fragment(node, context) {
368
+ /** @type {AST.SvelteNode[][]} */
369
+ const items = [];
370
+
371
+ /** @type {AST.SvelteNode[]} */
372
+ let sequence = [];
373
+
374
+ const flush = () => {
375
+ items.push(sequence);
376
+ sequence = [];
377
+ };
378
+
379
+ for (let i = 0; i < node.nodes.length; i += 1) {
380
+ let child_node = node.nodes[i];
381
+
382
+ const prev = node.nodes[i - 1];
383
+ const next = node.nodes[i + 1];
384
+
385
+ if (child_node.type === 'Text') {
386
+ child_node = { ...child_node }; // always clone, so we can safely mutate
387
+
388
+ child_node.data = child_node.data.replace(/[^\S]+/g, ' ');
389
+
390
+ // trim fragment
391
+ if (i === 0) {
392
+ child_node.data = child_node.data.trimStart();
393
+ }
394
+
395
+ if (i === node.nodes.length - 1) {
396
+ child_node.data = child_node.data.trimEnd();
397
+ }
398
+
399
+ if (child_node.data === '') {
400
+ continue;
401
+ }
402
+
403
+ if (child_node.data.startsWith(' ') && prev && prev.type !== 'ExpressionTag') {
404
+ flush();
405
+ child_node.data = child_node.data.trimStart();
406
+ }
407
+
408
+ if (child_node.data !== '') {
409
+ sequence.push({ ...child_node, data: child_node.data });
410
+
411
+ if (child_node.data.endsWith(' ') && next && next.type !== 'ExpressionTag') {
412
+ flush();
413
+ child_node.data = child_node.data.trimStart();
414
+ }
415
+ }
416
+ } else {
417
+ const is_block_element =
418
+ child_node.type === 'RegularElement' ||
419
+ child_node.type === 'Component' ||
420
+ child_node.type === 'SvelteHead' ||
421
+ child_node.type === 'SvelteFragment' ||
422
+ child_node.type === 'SvelteBoundary' ||
423
+ child_node.type === 'SvelteDocument' ||
424
+ child_node.type === 'SvelteSelf' ||
425
+ child_node.type === 'SvelteWindow' ||
426
+ child_node.type === 'SvelteComponent' ||
427
+ child_node.type === 'SvelteElement' ||
428
+ child_node.type === 'SlotElement' ||
429
+ child_node.type === 'TitleElement';
430
+
431
+ if (is_block_element && sequence.length > 0) flush();
432
+ sequence.push(child_node);
433
+ if (is_block_element) flush();
434
+ }
435
+ }
436
+
437
+ flush();
438
+
439
+ let multiline = false;
440
+ let width = 0;
441
+
442
+ const child_contexts = items
443
+ .filter((x) => x.length > 0)
444
+ .map((sequence) => {
445
+ const child_context = context.new();
446
+
447
+ for (const node of sequence) {
448
+ child_context.visit(node);
449
+ multiline ||= child_context.multiline;
450
+ }
451
+
452
+ width += child_context.measure();
453
+
454
+ return child_context;
455
+ });
456
+
457
+ multiline ||= width > LINE_BREAK_THRESHOLD;
458
+
459
+ for (let i = 0; i < child_contexts.length; i += 1) {
460
+ const prev = child_contexts[i];
461
+ const next = child_contexts[i + 1];
462
+
463
+ context.append(prev);
464
+
465
+ if (next) {
466
+ if (prev.multiline || next.multiline) {
467
+ context.margin();
468
+ context.newline();
469
+ } else if (multiline) {
470
+ context.newline();
471
+ }
472
+ }
473
+ }
474
+ },
475
+
476
+ AnimateDirective(node, context) {
477
+ context.write(`animate:${node.name}`);
478
+ if (
479
+ node.expression !== null &&
480
+ !(node.expression.type === 'Identifier' && node.expression.name === node.name)
481
+ ) {
482
+ context.write('={');
483
+ context.visit(node.expression);
484
+ context.write('}');
485
+ }
486
+ },
487
+
488
+ AttachTag(node, context) {
489
+ context.write('{@attach ');
490
+ context.visit(node.expression);
491
+ context.write('}');
492
+ },
493
+
494
+ Attribute(node, context) {
495
+ context.write(node.name);
496
+
497
+ if (node.value === true) return;
498
+
499
+ context.write('=');
500
+
501
+ if (Array.isArray(node.value)) {
502
+ if (node.value.length > 1 || node.value[0].type === 'Text') {
503
+ context.write('"');
504
+ }
505
+
506
+ for (const chunk of node.value) {
507
+ context.visit(chunk);
508
+ }
509
+
510
+ if (node.value.length > 1 || node.value[0].type === 'Text') {
511
+ context.write('"');
512
+ }
513
+ } else {
514
+ context.visit(node.value);
515
+ }
516
+ },
517
+
518
+ AwaitBlock(node, context) {
519
+ context.write(`{#await `);
520
+ context.visit(node.expression);
521
+
522
+ if (node.pending) {
523
+ context.write('}');
524
+ block(context, node.pending);
525
+ context.write('{:');
526
+ } else {
527
+ context.write(' ');
528
+ }
529
+
530
+ if (node.then) {
531
+ context.write(node.value ? 'then ' : 'then');
532
+ if (node.value) context.visit(node.value);
533
+ context.write('}');
534
+
535
+ block(context, node.then);
536
+
537
+ if (node.catch) {
538
+ context.write('{:');
539
+ }
540
+ }
541
+
542
+ if (node.catch) {
543
+ context.write(node.value ? 'catch ' : 'catch');
544
+ if (node.error) context.visit(node.error);
545
+ context.write('}');
546
+
547
+ block(context, node.catch);
548
+ }
549
+
550
+ context.write('{/await}');
551
+ },
552
+
553
+ BindDirective(node, context) {
554
+ context.write(`bind:${node.name}`);
555
+
556
+ if (node.expression.type === 'Identifier' && node.expression.name === node.name) {
557
+ // shorthand
558
+ return;
559
+ }
560
+
561
+ context.write('={');
562
+
563
+ if (node.expression.type === 'SequenceExpression') {
564
+ context.visit(node.expression.expressions[0]);
565
+ context.write(', ');
566
+ context.visit(node.expression.expressions[1]);
567
+ } else {
568
+ context.visit(node.expression);
569
+ }
570
+
571
+ context.write('}');
572
+ },
573
+
574
+ ClassDirective(node, context) {
575
+ context.write(`class:${node.name}`);
576
+ if (
577
+ node.expression !== null &&
578
+ !(node.expression.type === 'Identifier' && node.expression.name === node.name)
579
+ ) {
580
+ context.write('={');
581
+ context.visit(node.expression);
582
+ context.write('}');
583
+ }
584
+ },
585
+
586
+ Comment(node, context) {
587
+ context.write('<!--' + node.data + '-->');
588
+ },
589
+
590
+ Component(node, context) {
591
+ base_element(node, context, comments);
592
+ },
593
+
594
+ ConstTag(node, context) {
595
+ context.write('{@');
596
+ context.visit(node.declaration);
597
+ context.write('}');
598
+ },
599
+
600
+ DebugTag(node, context) {
601
+ context.write('{@debug ');
602
+ let started = false;
603
+ for (const identifier of node.identifiers) {
604
+ if (started) {
605
+ context.write(', ');
606
+ }
607
+ context.visit(identifier);
608
+ started = true;
609
+ }
610
+ context.write('}');
611
+ },
612
+
613
+ EachBlock(node, context) {
614
+ context.write('{#each ');
615
+ context.visit(node.expression);
616
+
617
+ if (node.context) {
618
+ context.write(' as ');
619
+ context.visit(node.context);
620
+ }
621
+
622
+ if (node.index) {
623
+ context.write(`, ${node.index}`);
624
+ }
625
+
626
+ if (node.key) {
627
+ context.write(' (');
628
+ context.visit(node.key);
629
+ context.write(')');
630
+ }
631
+
632
+ context.write('}');
633
+
634
+ block(context, node.body);
635
+
636
+ if (node.fallback) {
637
+ context.write('{:else}');
638
+ block(context, node.fallback);
639
+ }
640
+
641
+ context.write('{/each}');
642
+ },
643
+
644
+ ExpressionTag(node, context) {
645
+ context.write('{');
646
+ context.visit(node.expression);
647
+ context.write('}');
648
+ },
649
+
650
+ HtmlTag(node, context) {
651
+ context.write('{@html ');
652
+ context.visit(node.expression);
653
+ context.write('}');
654
+ },
655
+
656
+ IfBlock(node, context) {
657
+ if (node.elseif) {
658
+ context.write('{:else if ');
659
+ context.visit(node.test);
660
+ context.write('}');
661
+
662
+ block(context, node.consequent);
663
+ } else {
664
+ context.write('{#if ');
665
+ context.visit(node.test);
666
+ context.write('}');
667
+
668
+ block(context, node.consequent);
669
+ }
670
+
671
+ if (node.alternate !== null) {
672
+ if (
673
+ !(
674
+ node.alternate.nodes.length === 1 &&
675
+ node.alternate.nodes[0].type === 'IfBlock' &&
676
+ node.alternate.nodes[0].elseif
677
+ )
678
+ ) {
679
+ context.write('{:else}');
680
+ block(context, node.alternate);
681
+ } else {
682
+ context.visit(node.alternate);
683
+ }
684
+ }
685
+
686
+ if (!node.elseif) {
687
+ context.write('{/if}');
688
+ }
689
+ },
690
+
691
+ KeyBlock(node, context) {
692
+ context.write('{#key ');
693
+ context.visit(node.expression);
694
+ context.write('}');
695
+ block(context, node.fragment);
696
+ context.write('{/key}');
697
+ },
698
+
699
+ LetDirective(node, context) {
700
+ context.write(`let:${node.name}`);
701
+ if (
702
+ node.expression !== null &&
703
+ !(node.expression.type === 'Identifier' && node.expression.name === node.name)
704
+ ) {
705
+ context.write('={');
706
+ context.visit(node.expression);
707
+ context.write('}');
708
+ }
709
+ },
710
+
711
+ OnDirective(node, context) {
712
+ context.write(`on:${node.name}`);
713
+ for (const modifier of node.modifiers) {
714
+ context.write(`|${modifier}`);
715
+ }
716
+ if (
717
+ node.expression !== null &&
718
+ !(node.expression.type === 'Identifier' && node.expression.name === node.name)
719
+ ) {
720
+ context.write('={');
721
+ context.visit(node.expression);
722
+ context.write('}');
723
+ }
724
+ },
725
+
726
+ RegularElement(node, context) {
727
+ base_element(node, context, comments);
728
+ },
729
+
730
+ RenderTag(node, context) {
731
+ context.write('{@render ');
732
+ context.visit(node.expression);
733
+ context.write('}');
734
+ },
735
+
736
+ SlotElement(node, context) {
737
+ base_element(node, context, comments);
738
+ },
739
+
740
+ SnippetBlock(node, context) {
741
+ context.write('{#snippet ');
742
+ context.visit(node.expression);
743
+
744
+ if (node.typeParams) {
745
+ context.write(`<${node.typeParams}>`);
746
+ }
747
+
748
+ context.write('(');
749
+
750
+ for (let i = 0; i < node.parameters.length; i += 1) {
751
+ if (i > 0) context.write(', ');
752
+ context.visit(node.parameters[i]);
753
+ }
754
+
755
+ context.write(')}');
756
+ block(context, node.body);
757
+ context.write('{/snippet}');
758
+ },
759
+
760
+ SpreadAttribute(node, context) {
761
+ context.write('{...');
762
+ context.visit(node.expression);
763
+ context.write('}');
764
+ },
765
+
766
+ StyleDirective(node, context) {
767
+ context.write(`style:${node.name}`);
768
+ for (const modifier of node.modifiers) {
769
+ context.write(`|${modifier}`);
770
+ }
771
+
772
+ if (node.value === true) {
773
+ return;
774
+ }
775
+
776
+ context.write('=');
777
+
778
+ if (Array.isArray(node.value)) {
779
+ context.write('"');
780
+
781
+ for (const tag of node.value) {
782
+ context.visit(tag);
783
+ }
784
+
785
+ context.write('"');
786
+ } else {
787
+ context.visit(node.value);
788
+ }
789
+ },
790
+
791
+ StyleSheet(node, context) {
792
+ context.write('<style');
793
+ attributes(node, node.attributes, context, comments);
794
+ context.write('>');
795
+
796
+ if (node.children.length > 0) {
797
+ context.indent();
798
+ context.newline();
799
+
800
+ let started = false;
801
+
802
+ for (const child of node.children) {
803
+ if (started) {
804
+ context.margin();
805
+ context.newline();
806
+ }
807
+
808
+ context.visit(child);
809
+ started = true;
810
+ }
811
+
812
+ context.dedent();
813
+ context.newline();
814
+ }
815
+
816
+ context.write('</style>');
817
+ },
818
+
819
+ SvelteBoundary(node, context) {
820
+ base_element(node, context, comments);
821
+ },
822
+
823
+ SvelteComponent(node, context) {
824
+ context.write('<svelte:component');
825
+
826
+ context.write(' this={');
827
+ context.visit(node.expression);
828
+ context.write('}');
829
+ attributes(node, node.attributes, context, comments);
830
+ if (node.fragment && node.fragment.nodes.length > 0) {
831
+ context.write('>');
832
+ block(context, node.fragment, true);
833
+ context.write(`</svelte:component>`);
834
+ } else {
835
+ context.write(' />');
836
+ }
837
+ },
838
+
839
+ SvelteDocument(node, context) {
840
+ base_element(node, context, comments);
841
+ },
842
+
843
+ SvelteElement(node, context) {
844
+ context.write('<svelte:element ');
845
+
846
+ context.write('this={');
847
+ context.visit(node.tag);
848
+ context.write('}');
849
+ attributes(node, node.attributes, context, comments);
850
+
851
+ if (node.fragment && node.fragment.nodes.length > 0) {
852
+ context.write('>');
853
+ block(context, node.fragment);
854
+ context.write(`</svelte:element>`);
855
+ } else {
856
+ context.write(' />');
857
+ }
858
+ },
859
+
860
+ SvelteFragment(node, context) {
861
+ base_element(node, context, comments);
862
+ },
863
+
864
+ SvelteHead(node, context) {
865
+ base_element(node, context, comments);
866
+ },
867
+
868
+ SvelteSelf(node, context) {
869
+ base_element(node, context, comments);
870
+ },
871
+
872
+ SvelteWindow(node, context) {
873
+ base_element(node, context, comments);
874
+ },
875
+
876
+ Text(node, context) {
877
+ context.write(node.data);
878
+ },
879
+
880
+ TitleElement(node, context) {
881
+ base_element(node, context, comments);
882
+ },
883
+
884
+ TransitionDirective(node, context) {
885
+ const directive = node.intro && node.outro ? 'transition' : node.intro ? 'in' : 'out';
886
+ context.write(`${directive}:${node.name}`);
887
+ for (const modifier of node.modifiers) {
888
+ context.write(`|${modifier}`);
889
+ }
890
+ if (
891
+ node.expression !== null &&
892
+ !(node.expression.type === 'Identifier' && node.expression.name === node.name)
893
+ ) {
894
+ context.write('={');
895
+ context.visit(node.expression);
896
+ context.write('}');
897
+ }
898
+ },
899
+
900
+ UseDirective(node, context) {
901
+ context.write(`use:${node.name}`);
902
+ if (
903
+ node.expression !== null &&
904
+ !(node.expression.type === 'Identifier' && node.expression.name === node.name)
905
+ ) {
906
+ context.write('={');
907
+ context.visit(node.expression);
908
+ context.write('}');
909
+ }
910
+ }
911
+ });