@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,557 @@
1
+ /** @import { ArrayExpression, Expression, Literal, ObjectExpression } from 'estree' */
2
+ /** @import { AST } from '#compiler' */
3
+ /** @import { ComponentContext, ComponentServerTransformState } from '../../types.js' */
4
+ import { is_event_attribute, is_text_attribute } from '../../../../../utils/ast.js';
5
+ import { binding_properties } from '../../../../bindings.js';
6
+ import { create_attribute, ExpressionMetadata, is_custom_element_node } from '../../../../nodes.js';
7
+ import { regex_starts_with_newline } from '../../../../patterns.js';
8
+ import * as b from '#compiler/builders';
9
+ import {
10
+ ELEMENT_IS_INPUT,
11
+ ELEMENT_IS_NAMESPACED,
12
+ ELEMENT_PRESERVE_ATTRIBUTE_CASE
13
+ } from '../../../../../../constants.js';
14
+ import { build_attribute_value } from './utils.js';
15
+ import {
16
+ is_boolean_attribute,
17
+ is_content_editable_binding,
18
+ is_load_error_element
19
+ } from '../../../../../../utils.js';
20
+ import { escape_html } from '../../../../../../escaping.js';
21
+
22
+ const WHITESPACE_INSENSITIVE_ATTRIBUTES = ['class', 'style'];
23
+
24
+ /**
25
+ * Writes the output to the template output. Some elements may have attributes on them that require the
26
+ * their output to be the child content instead. In this case, an object is returned.
27
+ * @param {AST.RegularElement | AST.SvelteElement} node
28
+ * @param {import('zimmerframe').Context<AST.SvelteNode, ComponentServerTransformState>} context
29
+ * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform
30
+ */
31
+ export function build_element_attributes(node, context, transform) {
32
+ /** @type {Array<AST.Attribute | AST.SpreadAttribute>} */
33
+ const attributes = [];
34
+
35
+ /** @type {AST.ClassDirective[]} */
36
+ const class_directives = [];
37
+
38
+ /** @type {AST.StyleDirective[]} */
39
+ const style_directives = [];
40
+
41
+ /** @type {Expression | null} */
42
+ let content = null;
43
+
44
+ let has_spread = false;
45
+ let events_to_capture = new Set();
46
+
47
+ for (const attribute of node.attributes) {
48
+ if (attribute.type === 'Attribute') {
49
+ if (attribute.name === 'value') {
50
+ if (node.name === 'textarea') {
51
+ if (
52
+ attribute.value !== true &&
53
+ Array.isArray(attribute.value) &&
54
+ attribute.value[0].type === 'Text' &&
55
+ regex_starts_with_newline.test(attribute.value[0].data)
56
+ ) {
57
+ // Two or more leading newlines are required to restore the leading newline immediately after `<textarea>`.
58
+ // see https://html.spec.whatwg.org/multipage/syntax.html#element-restrictions
59
+ // also see related code in analysis phase
60
+ attribute.value[0].data = '\n' + attribute.value[0].data;
61
+ }
62
+
63
+ content = b.call('$.escape', build_attribute_value(attribute.value, context, transform));
64
+ } else if (node.name !== 'select') {
65
+ // omit value attribute for select elements, it's irrelevant for the initially selected value and has no
66
+ // effect on the selected value after the user interacts with the select element (the value _property_ does, but not the attribute)
67
+ attributes.push(attribute);
68
+ }
69
+
70
+ // omit event handlers except for special cases
71
+ } else if (is_event_attribute(attribute)) {
72
+ if (
73
+ (attribute.name === 'onload' || attribute.name === 'onerror') &&
74
+ is_load_error_element(node.name)
75
+ ) {
76
+ events_to_capture.add(attribute.name);
77
+ }
78
+ // the defaultValue/defaultChecked properties don't exist as attributes
79
+ } else if (attribute.name !== 'defaultValue' && attribute.name !== 'defaultChecked') {
80
+ if (attribute.name === 'class') {
81
+ if (attribute.metadata.needs_clsx) {
82
+ attributes.push({
83
+ ...attribute,
84
+ value: {
85
+ .../** @type {AST.ExpressionTag} */ (attribute.value),
86
+ expression: b.call(
87
+ '$.clsx',
88
+ /** @type {AST.ExpressionTag} */ (attribute.value).expression
89
+ )
90
+ }
91
+ });
92
+ } else {
93
+ attributes.push(attribute);
94
+ }
95
+ } else {
96
+ attributes.push(attribute);
97
+ }
98
+ }
99
+ } else if (attribute.type === 'BindDirective') {
100
+ if (attribute.name === 'value' && node.name === 'select') continue;
101
+ if (
102
+ attribute.name === 'value' &&
103
+ attributes.some(
104
+ (attr) =>
105
+ attr.type === 'Attribute' &&
106
+ attr.name === 'type' &&
107
+ is_text_attribute(attr) &&
108
+ attr.value[0].data === 'file'
109
+ )
110
+ ) {
111
+ continue;
112
+ }
113
+ if (attribute.name === 'this') continue;
114
+
115
+ const binding = binding_properties[attribute.name];
116
+ if (binding?.omit_in_ssr) continue;
117
+
118
+ let expression = /** @type {Expression} */ (context.visit(attribute.expression));
119
+
120
+ if (expression.type === 'SequenceExpression') {
121
+ expression = b.call(expression.expressions[0]);
122
+ }
123
+
124
+ expression = transform(expression, attribute.metadata.expression);
125
+
126
+ if (is_content_editable_binding(attribute.name)) {
127
+ content = expression;
128
+ } else if (attribute.name === 'value' && node.name === 'textarea') {
129
+ content = b.call('$.escape', expression);
130
+ } else if (attribute.name === 'group' && attribute.expression.type !== 'SequenceExpression') {
131
+ const value_attribute = /** @type {AST.Attribute | undefined} */ (
132
+ node.attributes.find((attr) => attr.type === 'Attribute' && attr.name === 'value')
133
+ );
134
+ if (!value_attribute) continue;
135
+
136
+ const is_checkbox = node.attributes.some(
137
+ (attr) =>
138
+ attr.type === 'Attribute' &&
139
+ attr.name === 'type' &&
140
+ is_text_attribute(attr) &&
141
+ attr.value[0].data === 'checkbox'
142
+ );
143
+
144
+ attributes.push(
145
+ create_attribute('checked', null, -1, -1, [
146
+ {
147
+ type: 'ExpressionTag',
148
+ start: -1,
149
+ end: -1,
150
+ expression: is_checkbox
151
+ ? b.call(
152
+ b.member(attribute.expression, 'includes'),
153
+ build_attribute_value(value_attribute.value, context, transform)
154
+ )
155
+ : b.binary(
156
+ '===',
157
+ attribute.expression,
158
+ build_attribute_value(value_attribute.value, context, transform)
159
+ ),
160
+ metadata: {
161
+ expression: new ExpressionMetadata()
162
+ }
163
+ }
164
+ ])
165
+ );
166
+ } else {
167
+ attributes.push(
168
+ create_attribute(attribute.name, null, -1, -1, [
169
+ {
170
+ type: 'ExpressionTag',
171
+ start: -1,
172
+ end: -1,
173
+ expression,
174
+ metadata: {
175
+ expression: new ExpressionMetadata()
176
+ }
177
+ }
178
+ ])
179
+ );
180
+ }
181
+ } else if (attribute.type === 'SpreadAttribute') {
182
+ attributes.push(attribute);
183
+ has_spread = true;
184
+ if (is_load_error_element(node.name)) {
185
+ events_to_capture.add('onload');
186
+ events_to_capture.add('onerror');
187
+ }
188
+ } else if (attribute.type === 'UseDirective') {
189
+ if (is_load_error_element(node.name)) {
190
+ events_to_capture.add('onload');
191
+ events_to_capture.add('onerror');
192
+ }
193
+ } else if (attribute.type === 'ClassDirective') {
194
+ class_directives.push(attribute);
195
+ } else if (attribute.type === 'StyleDirective') {
196
+ style_directives.push(attribute);
197
+ } else if (attribute.type === 'LetDirective') {
198
+ // do nothing, these are handled inside `build_inline_component`
199
+ } else {
200
+ context.visit(attribute);
201
+ }
202
+ }
203
+
204
+ if (has_spread) {
205
+ build_element_spread_attributes(
206
+ node,
207
+ attributes,
208
+ style_directives,
209
+ class_directives,
210
+ context,
211
+ transform
212
+ );
213
+ } else {
214
+ const css_hash = node.metadata.scoped ? context.state.analysis.css.hash : null;
215
+
216
+ for (const attribute of /** @type {AST.Attribute[]} */ (attributes)) {
217
+ const name = get_attribute_name(node, attribute);
218
+ const can_use_literal =
219
+ (name !== 'class' || class_directives.length === 0) &&
220
+ (name !== 'style' || style_directives.length === 0);
221
+
222
+ if (can_use_literal && (attribute.value === true || is_text_attribute(attribute))) {
223
+ let literal_value = /** @type {Literal} */ (
224
+ build_attribute_value(
225
+ attribute.value,
226
+ context,
227
+ transform,
228
+ WHITESPACE_INSENSITIVE_ATTRIBUTES.includes(name)
229
+ )
230
+ ).value;
231
+
232
+ if (name === 'class' && css_hash) {
233
+ literal_value = (String(literal_value) + ' ' + css_hash).trim();
234
+ }
235
+
236
+ if (name !== 'class' || literal_value) {
237
+ context.state.template.push(
238
+ b.literal(` ${name}="${literal_value === true ? '' : String(literal_value)}"`)
239
+ );
240
+ }
241
+
242
+ continue;
243
+ }
244
+
245
+ const value = build_attribute_value(
246
+ attribute.value,
247
+ context,
248
+ transform,
249
+ WHITESPACE_INSENSITIVE_ATTRIBUTES.includes(name)
250
+ );
251
+
252
+ // pre-escape and inline literal attributes :
253
+ if (can_use_literal && value.type === 'Literal' && typeof value.value === 'string') {
254
+ if (name === 'class' && css_hash) {
255
+ value.value = (value.value + ' ' + css_hash).trim();
256
+ }
257
+ context.state.template.push(b.literal(` ${name}="${escape_html(value.value, true)}"`));
258
+ } else if (name === 'class') {
259
+ context.state.template.push(
260
+ build_attr_class(class_directives, value, context, css_hash, transform)
261
+ );
262
+ } else if (name === 'style') {
263
+ context.state.template.push(build_attr_style(style_directives, value, context, transform));
264
+ } else {
265
+ context.state.template.push(
266
+ b.call('$.attr', b.literal(name), value, is_boolean_attribute(name) && b.true)
267
+ );
268
+ }
269
+ }
270
+ }
271
+
272
+ if (events_to_capture.size !== 0) {
273
+ for (const event of events_to_capture) {
274
+ context.state.template.push(b.literal(` ${event}="this.__e=event"`));
275
+ }
276
+ }
277
+
278
+ return content;
279
+ }
280
+
281
+ /**
282
+ * @param {AST.RegularElement | AST.SvelteElement} element
283
+ * @param {AST.Attribute | AST.BindDirective} attribute
284
+ */
285
+ function get_attribute_name(element, attribute) {
286
+ let name = attribute.name;
287
+ if (!element.metadata.svg && !element.metadata.mathml) {
288
+ name = name.toLowerCase();
289
+ // don't lookup boolean aliases here, the server runtime function does only
290
+ // check for the lowercase variants of boolean attributes
291
+ }
292
+ return name;
293
+ }
294
+
295
+ /**
296
+ * @param {AST.RegularElement | AST.SvelteElement} element
297
+ * @param {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} attributes
298
+ * @param {ComponentContext} context
299
+ * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform
300
+ */
301
+ export function build_spread_object(element, attributes, context, transform) {
302
+ const object = b.object(
303
+ attributes.map((attribute) => {
304
+ if (attribute.type === 'Attribute') {
305
+ const name = get_attribute_name(element, attribute);
306
+ const value = build_attribute_value(
307
+ attribute.value,
308
+ context,
309
+ transform,
310
+ WHITESPACE_INSENSITIVE_ATTRIBUTES.includes(name)
311
+ );
312
+
313
+ return b.prop('init', b.key(name), value);
314
+ } else if (attribute.type === 'BindDirective') {
315
+ const name = get_attribute_name(element, attribute);
316
+ const value =
317
+ attribute.expression.type === 'SequenceExpression'
318
+ ? b.call(attribute.expression.expressions[0])
319
+ : /** @type {Expression} */ (context.visit(attribute.expression));
320
+
321
+ return b.prop('init', b.key(name), value);
322
+ }
323
+
324
+ return b.spread(
325
+ transform(
326
+ /** @type {Expression} */ (context.visit(attribute)),
327
+ attribute.metadata.expression
328
+ )
329
+ );
330
+ })
331
+ );
332
+
333
+ return object;
334
+ }
335
+
336
+ /**
337
+ *
338
+ * @param {AST.RegularElement | AST.SvelteElement} element
339
+ * @param {Array<AST.Attribute | AST.SpreadAttribute>} attributes
340
+ * @param {AST.StyleDirective[]} style_directives
341
+ * @param {AST.ClassDirective[]} class_directives
342
+ * @param {ComponentContext} context
343
+ * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform
344
+ */
345
+ function build_element_spread_attributes(
346
+ element,
347
+ attributes,
348
+ style_directives,
349
+ class_directives,
350
+ context,
351
+ transform
352
+ ) {
353
+ const args = prepare_element_spread(
354
+ element,
355
+ /** @type {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} */ (attributes),
356
+ style_directives,
357
+ class_directives,
358
+ context,
359
+ transform
360
+ );
361
+
362
+ let call = b.call('$.attributes', ...args);
363
+
364
+ context.state.template.push(call);
365
+ }
366
+
367
+ /**
368
+ * Prepare args for $.attributes(...): compute object, css_hash, classes, styles and flags.
369
+ * @param {AST.RegularElement | AST.SvelteElement} element
370
+ * @param {ComponentContext} context
371
+ * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform
372
+ * @returns {[ObjectExpression,Literal | undefined, ObjectExpression | undefined, ObjectExpression | undefined, Literal | undefined]}
373
+ */
374
+ export function prepare_element_spread_object(element, context, transform) {
375
+ /** @type {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} */
376
+ const select_attributes = [];
377
+ /** @type {AST.ClassDirective[]} */
378
+ const class_directives = [];
379
+ /** @type {AST.StyleDirective[]} */
380
+ const style_directives = [];
381
+
382
+ for (const attribute of element.attributes) {
383
+ if (
384
+ attribute.type === 'Attribute' ||
385
+ attribute.type === 'BindDirective' ||
386
+ attribute.type === 'SpreadAttribute'
387
+ ) {
388
+ select_attributes.push(attribute);
389
+ } else if (attribute.type === 'ClassDirective') {
390
+ class_directives.push(attribute);
391
+ } else if (attribute.type === 'StyleDirective') {
392
+ style_directives.push(attribute);
393
+ }
394
+ }
395
+
396
+ return prepare_element_spread(
397
+ element,
398
+ select_attributes,
399
+ style_directives,
400
+ class_directives,
401
+ context,
402
+ transform
403
+ );
404
+ }
405
+
406
+ /**
407
+ * Prepare args for $.attributes(...): compute object, css_hash, classes, styles and flags.
408
+ * @param {AST.RegularElement | AST.SvelteElement} element
409
+ * @param {Array<AST.Attribute | AST.SpreadAttribute | AST.BindDirective>} attributes
410
+ * @param {AST.StyleDirective[]} style_directives
411
+ * @param {AST.ClassDirective[]} class_directives
412
+ * @param {ComponentContext} context
413
+ * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform
414
+ * @returns {[ObjectExpression,Literal | undefined, ObjectExpression | undefined, ObjectExpression | undefined, Literal | undefined]}
415
+ */
416
+ export function prepare_element_spread(
417
+ element,
418
+ attributes,
419
+ style_directives,
420
+ class_directives,
421
+ context,
422
+ transform
423
+ ) {
424
+ /** @type {ObjectExpression | undefined} */
425
+ let classes;
426
+ /** @type {ObjectExpression | undefined} */
427
+ let styles;
428
+ let flags = 0;
429
+
430
+ if (class_directives.length) {
431
+ const properties = class_directives.map((directive) =>
432
+ b.init(
433
+ directive.name,
434
+ directive.expression.type === 'Identifier' && directive.expression.name === directive.name
435
+ ? b.id(directive.name)
436
+ : transform(
437
+ /** @type {Expression} */ (context.visit(directive.expression)),
438
+ directive.metadata.expression
439
+ )
440
+ )
441
+ );
442
+
443
+ classes = b.object(properties);
444
+ }
445
+
446
+ if (style_directives.length > 0) {
447
+ const properties = style_directives.map((directive) =>
448
+ b.init(
449
+ directive.name,
450
+ directive.value === true
451
+ ? b.id(directive.name)
452
+ : build_attribute_value(directive.value, context, transform, true)
453
+ )
454
+ );
455
+ styles = b.object(properties);
456
+ }
457
+
458
+ if (element.metadata.svg || element.metadata.mathml) {
459
+ flags |= ELEMENT_IS_NAMESPACED | ELEMENT_PRESERVE_ATTRIBUTE_CASE;
460
+ } else if (is_custom_element_node(element)) {
461
+ flags |= ELEMENT_PRESERVE_ATTRIBUTE_CASE;
462
+ } else if (element.type === 'RegularElement' && element.name === 'input') {
463
+ flags |= ELEMENT_IS_INPUT;
464
+ }
465
+
466
+ const object = build_spread_object(element, attributes, context, transform);
467
+ const css_hash =
468
+ element.metadata.scoped && context.state.analysis.css.hash
469
+ ? b.literal(context.state.analysis.css.hash)
470
+ : undefined;
471
+
472
+ return [object, css_hash, classes, styles, flags ? b.literal(flags) : undefined];
473
+ }
474
+
475
+ /**
476
+ *
477
+ * @param {AST.ClassDirective[]} class_directives
478
+ * @param {Expression} expression
479
+ * @param {ComponentContext} context
480
+ * @param {string | null} hash
481
+ * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform
482
+ */
483
+ function build_attr_class(class_directives, expression, context, hash, transform) {
484
+ /** @type {ObjectExpression | undefined} */
485
+ let directives;
486
+
487
+ if (class_directives.length) {
488
+ directives = b.object(
489
+ class_directives.map((directive) =>
490
+ b.prop(
491
+ 'init',
492
+ b.literal(directive.name),
493
+ transform(
494
+ /** @type {Expression} */ (context.visit(directive.expression, context.state)),
495
+ directive.metadata.expression
496
+ )
497
+ )
498
+ )
499
+ );
500
+ }
501
+
502
+ let css_hash;
503
+
504
+ if (hash) {
505
+ if (expression.type === 'Literal' && typeof expression.value === 'string') {
506
+ expression.value = (expression.value + ' ' + hash).trim();
507
+ } else {
508
+ css_hash = b.literal(hash);
509
+ }
510
+ }
511
+
512
+ return b.call('$.attr_class', expression, css_hash, directives);
513
+ }
514
+
515
+ /**
516
+ *
517
+ * @param {AST.StyleDirective[]} style_directives
518
+ * @param {Expression} expression
519
+ * @param {ComponentContext} context,
520
+ * @param {(expression: Expression, metadata: ExpressionMetadata) => Expression} transform
521
+ */
522
+ function build_attr_style(style_directives, expression, context, transform) {
523
+ /** @type {ArrayExpression | ObjectExpression | undefined} */
524
+ let directives;
525
+
526
+ if (style_directives.length) {
527
+ let normal_properties = [];
528
+ let important_properties = [];
529
+
530
+ for (const directive of style_directives) {
531
+ const expression =
532
+ directive.value === true
533
+ ? b.id(directive.name)
534
+ : build_attribute_value(directive.value, context, transform, true);
535
+
536
+ let name = directive.name;
537
+ if (name[0] !== '-' || name[1] !== '-') {
538
+ name = name.toLowerCase();
539
+ }
540
+
541
+ const property = b.init(name, expression);
542
+ if (directive.modifiers.includes('important')) {
543
+ important_properties.push(property);
544
+ } else {
545
+ normal_properties.push(property);
546
+ }
547
+ }
548
+
549
+ if (important_properties.length) {
550
+ directives = b.array([b.object(normal_properties), b.object(important_properties)]);
551
+ } else {
552
+ directives = b.object(normal_properties);
553
+ }
554
+ }
555
+
556
+ return b.call('$.attr_style', expression, directives);
557
+ }