svelte 5.0.0-next.99 → 5.0.1
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.
- package/compiler/index.js +1 -1
- package/elements.d.ts +102 -33
- package/package.json +31 -34
- package/src/action/public.d.ts +0 -4
- package/src/ambient.d.ts +179 -12
- package/src/animate/index.js +40 -14
- package/src/compiler/errors.js +1461 -510
- package/src/compiler/index.js +107 -93
- package/src/compiler/legacy.js +110 -80
- package/src/compiler/migrate/index.js +1598 -0
- package/src/compiler/phases/1-parse/acorn.js +56 -9
- package/src/compiler/phases/1-parse/index.js +21 -38
- package/src/compiler/phases/1-parse/read/context.js +18 -23
- package/src/compiler/phases/1-parse/read/expression.js +11 -5
- package/src/compiler/phases/1-parse/read/options.js +95 -81
- package/src/compiler/phases/1-parse/read/script.js +53 -30
- package/src/compiler/phases/1-parse/read/style.js +52 -56
- package/src/compiler/phases/1-parse/remove_typescript_nodes.js +74 -1
- package/src/compiler/phases/1-parse/state/element.js +221 -255
- package/src/compiler/phases/1-parse/state/fragment.js +2 -1
- package/src/compiler/phases/1-parse/state/tag.js +88 -72
- package/src/compiler/phases/1-parse/state/text.js +4 -2
- package/src/compiler/phases/1-parse/utils/create.js +7 -2
- package/src/compiler/phases/1-parse/utils/html.js +0 -46
- package/src/compiler/phases/2-analyze/css/css-analyze.js +210 -87
- package/src/compiler/phases/2-analyze/css/css-prune.js +361 -122
- package/src/compiler/phases/2-analyze/css/css-warn.js +15 -7
- package/src/compiler/phases/2-analyze/css/utils.js +4 -2
- package/src/compiler/phases/2-analyze/index.js +460 -1083
- package/src/compiler/phases/2-analyze/types.d.ts +7 -11
- package/src/compiler/phases/2-analyze/visitors/ArrowFunctionExpression.js +11 -0
- package/src/compiler/phases/2-analyze/visitors/AssignmentExpression.js +28 -0
- package/src/compiler/phases/2-analyze/visitors/Attribute.js +219 -0
- package/src/compiler/phases/2-analyze/visitors/AwaitBlock.js +45 -0
- package/src/compiler/phases/2-analyze/visitors/BindDirective.js +222 -0
- package/src/compiler/phases/2-analyze/visitors/CallExpression.js +183 -0
- package/src/compiler/phases/2-analyze/visitors/ClassBody.js +27 -0
- package/src/compiler/phases/2-analyze/visitors/ClassDeclaration.js +25 -0
- package/src/compiler/phases/2-analyze/visitors/ClassDirective.js +13 -0
- package/src/compiler/phases/2-analyze/visitors/Component.js +20 -0
- package/src/compiler/phases/2-analyze/visitors/ConstTag.js +34 -0
- package/src/compiler/phases/2-analyze/visitors/DebugTag.js +15 -0
- package/src/compiler/phases/2-analyze/visitors/EachBlock.js +42 -0
- package/src/compiler/phases/2-analyze/visitors/ExportDefaultDeclaration.js +15 -0
- package/src/compiler/phases/2-analyze/visitors/ExportNamedDeclaration.js +61 -0
- package/src/compiler/phases/2-analyze/visitors/ExportSpecifier.js +44 -0
- package/src/compiler/phases/2-analyze/visitors/ExpressionStatement.js +38 -0
- package/src/compiler/phases/2-analyze/visitors/ExpressionTag.js +23 -0
- package/src/compiler/phases/2-analyze/visitors/FunctionDeclaration.js +16 -0
- package/src/compiler/phases/2-analyze/visitors/FunctionExpression.js +11 -0
- package/src/compiler/phases/2-analyze/visitors/HtmlTag.js +19 -0
- package/src/compiler/phases/2-analyze/visitors/Identifier.js +125 -0
- package/src/compiler/phases/2-analyze/visitors/IfBlock.js +21 -0
- package/src/compiler/phases/2-analyze/visitors/ImportDeclaration.js +30 -0
- package/src/compiler/phases/2-analyze/visitors/KeyBlock.js +20 -0
- package/src/compiler/phases/2-analyze/visitors/LabeledStatement.js +95 -0
- package/src/compiler/phases/2-analyze/visitors/LetDirective.js +24 -0
- package/src/compiler/phases/2-analyze/visitors/MemberExpression.js +54 -0
- package/src/compiler/phases/2-analyze/visitors/NewExpression.js +15 -0
- package/src/compiler/phases/2-analyze/visitors/OnDirective.js +28 -0
- package/src/compiler/phases/2-analyze/visitors/RegularElement.js +175 -0
- package/src/compiler/phases/2-analyze/visitors/RenderTag.js +42 -0
- package/src/compiler/phases/2-analyze/visitors/SlotElement.js +42 -0
- package/src/compiler/phases/2-analyze/visitors/SnippetBlock.js +55 -0
- package/src/compiler/phases/2-analyze/visitors/SpreadAttribute.js +13 -0
- package/src/compiler/phases/2-analyze/visitors/StyleDirective.js +37 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteBody.js +22 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteComponent.js +18 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteDocument.js +12 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteElement.js +65 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteFragment.js +27 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteHead.js +18 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteSelf.js +36 -0
- package/src/compiler/phases/2-analyze/visitors/SvelteWindow.js +12 -0
- package/src/compiler/phases/2-analyze/visitors/TaggedTemplateExpression.js +23 -0
- package/src/compiler/phases/2-analyze/visitors/Text.js +17 -0
- package/src/compiler/phases/2-analyze/visitors/TitleElement.js +21 -0
- package/src/compiler/phases/2-analyze/visitors/UpdateExpression.js +25 -0
- package/src/compiler/phases/2-analyze/visitors/UseDirective.js +12 -0
- package/src/compiler/phases/2-analyze/visitors/VariableDeclarator.js +120 -0
- package/src/compiler/phases/2-analyze/{a11y.js → visitors/shared/a11y.js} +191 -184
- package/src/compiler/phases/2-analyze/visitors/shared/attribute.js +123 -0
- package/src/compiler/phases/2-analyze/visitors/shared/component.js +108 -0
- package/src/compiler/phases/2-analyze/visitors/shared/element.js +160 -0
- package/src/compiler/phases/2-analyze/visitors/shared/fragment.js +15 -0
- package/src/compiler/phases/2-analyze/visitors/shared/function.js +20 -0
- package/src/compiler/phases/2-analyze/visitors/shared/special-element.js +16 -0
- package/src/compiler/phases/2-analyze/visitors/shared/utils.js +227 -0
- package/src/compiler/phases/3-transform/client/transform-client.js +365 -311
- package/src/compiler/phases/3-transform/client/types.d.ts +32 -9
- package/src/compiler/phases/3-transform/client/utils.js +173 -571
- package/src/compiler/phases/3-transform/client/visitors/AnimateDirective.js +28 -0
- package/src/compiler/phases/3-transform/client/visitors/ArrowFunctionExpression.js +11 -0
- package/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js +117 -0
- package/src/compiler/phases/3-transform/client/visitors/Attribute.js +14 -0
- package/src/compiler/phases/3-transform/client/visitors/AwaitBlock.js +67 -0
- package/src/compiler/phases/3-transform/client/visitors/BinaryExpression.js +34 -0
- package/src/compiler/phases/3-transform/client/visitors/BindDirective.js +252 -0
- package/src/compiler/phases/3-transform/client/visitors/BlockStatement.js +12 -0
- package/src/compiler/phases/3-transform/client/visitors/BreakStatement.js +20 -0
- package/src/compiler/phases/3-transform/client/visitors/CallExpression.js +62 -0
- package/src/compiler/phases/3-transform/client/visitors/ClassBody.js +215 -0
- package/src/compiler/phases/3-transform/client/visitors/Comment.js +11 -0
- package/src/compiler/phases/3-transform/client/visitors/Component.js +32 -0
- package/src/compiler/phases/3-transform/client/visitors/ConstTag.js +76 -0
- package/src/compiler/phases/3-transform/client/visitors/DebugTag.js +22 -0
- package/src/compiler/phases/3-transform/client/visitors/EachBlock.js +346 -0
- package/src/compiler/phases/3-transform/client/visitors/ExportNamedDeclaration.js +19 -0
- package/src/compiler/phases/3-transform/client/visitors/ExpressionStatement.js +26 -0
- package/src/compiler/phases/3-transform/client/visitors/Fragment.js +267 -0
- package/src/compiler/phases/3-transform/client/visitors/FunctionDeclaration.js +23 -0
- package/src/compiler/phases/3-transform/client/visitors/FunctionExpression.js +11 -0
- package/src/compiler/phases/3-transform/client/visitors/HtmlTag.js +27 -0
- package/src/compiler/phases/3-transform/client/visitors/Identifier.js +41 -0
- package/src/compiler/phases/3-transform/client/visitors/IfBlock.js +55 -0
- package/src/compiler/phases/3-transform/client/visitors/ImportDeclaration.js +16 -0
- package/src/compiler/phases/3-transform/client/visitors/KeyBlock.js +19 -0
- package/src/compiler/phases/3-transform/client/visitors/LabeledStatement.js +64 -0
- package/src/compiler/phases/3-transform/client/visitors/LetDirective.js +54 -0
- package/src/compiler/phases/3-transform/client/visitors/MemberExpression.js +19 -0
- package/src/compiler/phases/3-transform/client/visitors/OnDirective.js +38 -0
- package/src/compiler/phases/3-transform/client/visitors/Program.js +139 -0
- package/src/compiler/phases/3-transform/client/visitors/RegularElement.js +717 -0
- package/src/compiler/phases/3-transform/client/visitors/RenderTag.js +52 -0
- package/src/compiler/phases/3-transform/client/visitors/SlotElement.js +70 -0
- package/src/compiler/phases/3-transform/client/visitors/SnippetBlock.js +90 -0
- package/src/compiler/phases/3-transform/client/visitors/SpreadAttribute.js +10 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteBody.js +11 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteComponent.js +12 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteDocument.js +11 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteElement.js +155 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteFragment.js +17 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteHead.js +20 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteSelf.js +12 -0
- package/src/compiler/phases/3-transform/client/visitors/SvelteWindow.js +11 -0
- package/src/compiler/phases/3-transform/client/visitors/TitleElement.js +24 -0
- package/src/compiler/phases/3-transform/client/visitors/TransitionDirective.js +29 -0
- package/src/compiler/phases/3-transform/client/visitors/UpdateExpression.js +69 -0
- package/src/compiler/phases/3-transform/client/visitors/UseDirective.js +34 -0
- package/src/compiler/phases/3-transform/client/visitors/VariableDeclaration.js +317 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/component.js +379 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/declarations.js +53 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/element.js +220 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/events.js +185 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/fragment.js +159 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/function.js +30 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/special_element.js +22 -0
- package/src/compiler/phases/3-transform/client/visitors/shared/utils.js +266 -0
- package/src/compiler/phases/3-transform/css/index.js +80 -44
- package/src/compiler/phases/3-transform/index.js +30 -67
- package/src/compiler/phases/3-transform/server/transform-server.js +155 -2178
- package/src/compiler/phases/3-transform/server/types.d.ts +5 -35
- package/src/compiler/phases/3-transform/server/visitors/AssignmentExpression.js +68 -0
- package/src/compiler/phases/3-transform/server/visitors/AwaitBlock.js +33 -0
- package/src/compiler/phases/3-transform/server/visitors/CallExpression.js +41 -0
- package/src/compiler/phases/3-transform/server/visitors/ClassBody.js +121 -0
- package/src/compiler/phases/3-transform/server/visitors/Component.js +12 -0
- package/src/compiler/phases/3-transform/server/visitors/ConstTag.js +16 -0
- package/src/compiler/phases/3-transform/server/visitors/DebugTag.js +24 -0
- package/src/compiler/phases/3-transform/server/visitors/EachBlock.js +62 -0
- package/src/compiler/phases/3-transform/server/visitors/ExpressionStatement.js +18 -0
- package/src/compiler/phases/3-transform/server/visitors/Fragment.js +46 -0
- package/src/compiler/phases/3-transform/server/visitors/HtmlTag.js +13 -0
- package/src/compiler/phases/3-transform/server/visitors/Identifier.js +19 -0
- package/src/compiler/phases/3-transform/server/visitors/IfBlock.js +28 -0
- package/src/compiler/phases/3-transform/server/visitors/KeyBlock.js +16 -0
- package/src/compiler/phases/3-transform/server/visitors/LabeledStatement.js +24 -0
- package/src/compiler/phases/3-transform/server/visitors/MemberExpression.js +23 -0
- package/src/compiler/phases/3-transform/server/visitors/PropertyDefinition.js +36 -0
- package/src/compiler/phases/3-transform/server/visitors/RegularElement.js +104 -0
- package/src/compiler/phases/3-transform/server/visitors/RenderTag.js +35 -0
- package/src/compiler/phases/3-transform/server/visitors/SlotElement.js +54 -0
- package/src/compiler/phases/3-transform/server/visitors/SnippetBlock.js +22 -0
- package/src/compiler/phases/3-transform/server/visitors/SpreadAttribute.js +10 -0
- package/src/compiler/phases/3-transform/server/visitors/SvelteComponent.js +12 -0
- package/src/compiler/phases/3-transform/server/visitors/SvelteElement.js +72 -0
- package/src/compiler/phases/3-transform/server/visitors/SvelteFragment.js +11 -0
- package/src/compiler/phases/3-transform/server/visitors/SvelteHead.js +16 -0
- package/src/compiler/phases/3-transform/server/visitors/SvelteSelf.js +12 -0
- package/src/compiler/phases/3-transform/server/visitors/TitleElement.js +17 -0
- package/src/compiler/phases/3-transform/server/visitors/UpdateExpression.js +26 -0
- package/src/compiler/phases/3-transform/server/visitors/VariableDeclaration.js +185 -0
- package/src/compiler/phases/3-transform/server/visitors/shared/component.js +275 -0
- package/src/compiler/phases/3-transform/server/visitors/shared/element.js +430 -0
- package/src/compiler/phases/3-transform/server/visitors/shared/utils.js +243 -0
- package/src/compiler/phases/3-transform/shared/assignments.js +74 -0
- package/src/compiler/phases/3-transform/utils.js +283 -177
- package/src/compiler/phases/bindings.js +64 -25
- package/src/compiler/phases/css.js +2 -1
- package/src/compiler/phases/nodes.js +20 -8
- package/src/compiler/phases/patterns.js +2 -0
- package/src/compiler/phases/scope.js +171 -186
- package/src/compiler/phases/types.d.ts +25 -27
- package/src/compiler/preprocess/decode_sourcemap.js +2 -1
- package/src/compiler/preprocess/index.js +22 -20
- package/src/compiler/preprocess/public.d.ts +1 -1
- package/src/compiler/preprocess/replace_in_code.js +7 -6
- package/src/compiler/public.d.ts +14 -4
- package/src/compiler/state.js +97 -0
- package/src/compiler/types/css.d.ts +39 -4
- package/src/compiler/types/index.d.ts +57 -43
- package/src/compiler/types/legacy-nodes.d.ts +22 -3
- package/src/compiler/types/template.d.ts +443 -398
- package/src/compiler/utils/assert.js +1 -12
- package/src/compiler/utils/ast.js +264 -59
- package/src/compiler/utils/builders.js +196 -175
- package/src/compiler/utils/compile_diagnostic.js +106 -0
- package/src/compiler/utils/extract_svelte_ignore.js +87 -38
- package/src/compiler/utils/mapped_code.js +23 -19
- package/src/compiler/utils/slot.js +20 -0
- package/src/compiler/utils/string.js +9 -0
- package/src/compiler/validate-options.js +56 -40
- package/src/compiler/warnings.js +812 -311
- package/src/constants.js +32 -240
- package/src/easing/index.js +0 -31
- package/src/escaping.js +26 -0
- package/src/events/index.js +1 -0
- package/src/events/public.d.ts +57 -0
- package/src/html-tree-validation.js +215 -0
- package/src/index-client.js +36 -35
- package/src/index-server.js +8 -14
- package/src/index.d.ts +153 -70
- package/src/internal/client/constants.js +15 -6
- package/src/internal/client/dev/console-log.js +35 -0
- package/src/internal/client/dev/css.js +31 -0
- package/src/internal/client/dev/elements.js +60 -0
- package/src/internal/client/dev/equality.js +104 -0
- package/src/internal/client/dev/hmr.js +62 -39
- package/src/internal/client/dev/inspect.js +36 -0
- package/src/internal/client/dev/legacy.js +28 -0
- package/src/internal/client/dev/ownership.js +139 -102
- package/src/internal/client/dom/blocks/await.js +119 -63
- package/src/internal/client/dom/blocks/css-props.js +19 -52
- package/src/internal/client/dom/blocks/each.js +220 -157
- package/src/internal/client/dom/blocks/html.js +106 -48
- package/src/internal/client/dom/blocks/if.js +37 -26
- package/src/internal/client/dom/blocks/key.js +18 -6
- package/src/internal/client/dom/blocks/slot.js +44 -0
- package/src/internal/client/dom/blocks/snippet.js +102 -9
- package/src/internal/client/dom/blocks/svelte-component.js +21 -10
- package/src/internal/client/dom/blocks/svelte-element.js +132 -123
- package/src/internal/client/dom/blocks/svelte-head.js +27 -16
- package/src/internal/client/dom/css.js +32 -0
- package/src/internal/client/dom/elements/actions.js +7 -2
- package/src/internal/client/dom/elements/attributes.js +247 -127
- package/src/internal/client/dom/elements/bindings/document.js +17 -0
- package/src/internal/client/dom/elements/bindings/input.js +104 -54
- package/src/internal/client/dom/elements/bindings/media.js +78 -116
- package/src/internal/client/dom/elements/bindings/props.js +3 -3
- package/src/internal/client/dom/elements/bindings/select.js +11 -8
- package/src/internal/client/dom/elements/bindings/shared.js +9 -31
- package/src/internal/client/dom/elements/bindings/size.js +10 -9
- package/src/internal/client/dom/elements/bindings/this.js +10 -6
- package/src/internal/client/dom/elements/bindings/universal.js +33 -27
- package/src/internal/client/dom/elements/bindings/window.js +19 -15
- package/src/internal/client/dom/elements/class.js +32 -2
- package/src/internal/client/dom/elements/custom-element.js +37 -23
- package/src/internal/client/dom/elements/events.js +201 -55
- package/src/internal/client/dom/elements/misc.js +30 -4
- package/src/internal/client/dom/elements/style.js +15 -7
- package/src/internal/client/dom/elements/transitions.js +202 -138
- package/src/internal/client/dom/hydration.js +72 -37
- package/src/internal/client/dom/legacy/event-modifiers.js +51 -6
- package/src/internal/client/dom/legacy/lifecycle.js +38 -26
- package/src/internal/client/dom/legacy/misc.js +3 -3
- package/src/internal/client/dom/operations.js +90 -130
- package/src/internal/client/dom/reconciler.js +0 -18
- package/src/internal/client/dom/task.js +44 -16
- package/src/internal/client/dom/template.js +140 -80
- package/src/internal/client/errors.js +359 -0
- package/src/internal/client/index.js +49 -29
- package/src/internal/client/loop.js +4 -3
- package/src/internal/client/proxy.js +280 -288
- package/src/internal/client/reactivity/deriveds.js +105 -64
- package/src/internal/client/reactivity/effects.js +326 -107
- package/src/internal/client/reactivity/equality.js +3 -2
- package/src/internal/client/reactivity/props.js +192 -50
- package/src/internal/client/reactivity/sources.js +175 -74
- package/src/internal/client/reactivity/store.js +53 -64
- package/src/internal/client/reactivity/types.d.ts +24 -19
- package/src/internal/client/render.js +159 -196
- package/src/internal/client/runtime.js +541 -673
- package/src/internal/client/timing.js +5 -4
- package/src/internal/client/types.d.ts +62 -46
- package/src/internal/client/validate.js +82 -73
- package/src/internal/client/warnings.js +166 -0
- package/src/internal/server/blocks/html.js +11 -0
- package/src/internal/server/blocks/snippet.js +22 -0
- package/src/internal/server/context.js +26 -14
- package/src/internal/server/dev.js +97 -0
- package/src/internal/server/errors.js +13 -0
- package/src/internal/server/hydration.js +3 -2
- package/src/internal/server/index.js +188 -292
- package/src/internal/server/types.d.ts +22 -0
- package/src/internal/shared/clone.js +114 -0
- package/src/internal/shared/errors.js +69 -0
- package/src/internal/shared/types.d.ts +10 -0
- package/src/internal/shared/utils.js +35 -0
- package/src/internal/shared/validate.js +18 -38
- package/src/internal/shared/warnings.js +38 -0
- package/src/legacy/legacy-client.js +154 -19
- package/src/legacy/legacy-server.js +31 -3
- package/src/motion/spring.js +12 -10
- package/src/motion/tweened.js +9 -7
- package/src/reactivity/date.js +48 -79
- package/src/reactivity/index-client.js +5 -3
- package/src/reactivity/index-server.js +5 -3
- package/src/reactivity/map.js +78 -55
- package/src/reactivity/set.js +47 -42
- package/src/reactivity/url-search-params.js +146 -0
- package/src/reactivity/url.js +165 -0
- package/src/reactivity/utils.js +5 -22
- package/src/server/index.d.ts +21 -0
- package/src/store/index-client.js +165 -0
- package/src/store/index-server.js +101 -0
- package/src/store/private.d.ts +5 -9
- package/src/store/public.d.ts +2 -4
- package/src/store/{index.js → shared/index.js} +30 -44
- package/src/store/utils.js +2 -1
- package/src/transition/index.js +19 -26
- package/src/utils.js +426 -0
- package/src/version.js +1 -1
- package/svelte-html.d.ts +1 -1
- package/types/index.d.ts +1161 -1219
- package/types/index.d.ts.map +60 -97
- package/src/compiler/phases/1-parse/utils/names.js +0 -74
- package/src/compiler/phases/2-analyze/utils.js +0 -14
- package/src/compiler/phases/2-analyze/validation.js +0 -1161
- package/src/compiler/phases/3-transform/client/visitors/global.js +0 -125
- package/src/compiler/phases/3-transform/client/visitors/javascript-legacy.js +0 -201
- package/src/compiler/phases/3-transform/client/visitors/javascript-runes.js +0 -404
- package/src/compiler/phases/3-transform/client/visitors/javascript.js +0 -40
- package/src/compiler/phases/3-transform/client/visitors/template.js +0 -3012
- package/src/compiler/phases/constants.js +0 -201
- package/src/compiler/phases/visitors.js +0 -72
- package/src/internal/client/utils.js +0 -49
|
@@ -1,73 +1,129 @@
|
|
|
1
|
+
/** @import { Context } from 'zimmerframe' */
|
|
2
|
+
/** @import { TransformState } from './types.js' */
|
|
3
|
+
/** @import { AST, Binding, Namespace, SvelteNode, ValidatedCompileOptions } from '#compiler' */
|
|
4
|
+
/** @import { Node, Expression, CallExpression } from 'estree' */
|
|
1
5
|
import {
|
|
2
6
|
regex_ends_with_whitespaces,
|
|
3
7
|
regex_not_whitespace,
|
|
4
8
|
regex_starts_with_whitespaces
|
|
5
9
|
} from '../patterns.js';
|
|
6
10
|
import * as b from '../../utils/builders.js';
|
|
11
|
+
import * as e from '../../errors.js';
|
|
7
12
|
import { walk } from 'zimmerframe';
|
|
13
|
+
import { extract_identifiers } from '../../utils/ast.js';
|
|
14
|
+
import check_graph_for_cycles from '../2-analyze/utils/check_graph_for_cycles.js';
|
|
15
|
+
import is_reference from 'is-reference';
|
|
16
|
+
import { set_scope } from '../scope.js';
|
|
17
|
+
import { dev } from '../../state.js';
|
|
8
18
|
|
|
9
19
|
/**
|
|
10
|
-
* @param {
|
|
11
|
-
* @
|
|
20
|
+
* @param {Node} node
|
|
21
|
+
* @returns {boolean}
|
|
22
|
+
*/
|
|
23
|
+
export function is_hoisted_function(node) {
|
|
24
|
+
if (
|
|
25
|
+
node.type === 'ArrowFunctionExpression' ||
|
|
26
|
+
node.type === 'FunctionExpression' ||
|
|
27
|
+
node.type === 'FunctionDeclaration'
|
|
28
|
+
) {
|
|
29
|
+
return node.metadata?.hoisted === true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Match Svelte 4 behaviour by sorting ConstTag nodes in topological order
|
|
36
|
+
* @param {SvelteNode[]} nodes
|
|
37
|
+
* @param {TransformState} state
|
|
12
38
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
39
|
+
function sort_const_tags(nodes, state) {
|
|
40
|
+
/**
|
|
41
|
+
* @typedef {{
|
|
42
|
+
* node: AST.ConstTag;
|
|
43
|
+
* deps: Set<Binding>;
|
|
44
|
+
* }} Tag
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
const other = [];
|
|
48
|
+
|
|
49
|
+
/** @type {Map<Binding, Tag>} */
|
|
50
|
+
const tags = new Map();
|
|
51
|
+
|
|
52
|
+
for (const node of nodes) {
|
|
53
|
+
if (node.type === 'ConstTag') {
|
|
54
|
+
const declaration = node.declaration.declarations[0];
|
|
55
|
+
|
|
56
|
+
const bindings = extract_identifiers(declaration.id).map((id) => {
|
|
57
|
+
return /** @type {Binding} */ (state.scope.get(id.name));
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
/** @type {Set<Binding>} */
|
|
61
|
+
const deps = new Set();
|
|
62
|
+
|
|
63
|
+
walk(declaration.init, state, {
|
|
64
|
+
// @ts-expect-error don't know, don't care
|
|
65
|
+
_: set_scope,
|
|
66
|
+
Identifier(node, context) {
|
|
67
|
+
const parent = /** @type {Expression} */ (context.path.at(-1));
|
|
68
|
+
|
|
69
|
+
if (is_reference(node, parent)) {
|
|
70
|
+
const binding = context.state.scope.get(node.name);
|
|
71
|
+
if (binding) deps.add(binding);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
for (const binding of bindings) {
|
|
77
|
+
tags.set(binding, { node, deps });
|
|
78
|
+
}
|
|
31
79
|
} else {
|
|
32
|
-
|
|
33
|
-
out += '&';
|
|
34
|
-
left = i_ampersand + 1;
|
|
35
|
-
i_ampersand = s.indexOf('&', left);
|
|
80
|
+
other.push(node);
|
|
36
81
|
}
|
|
37
82
|
}
|
|
38
83
|
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
i_ampersand = s.indexOf('&', left);
|
|
84
|
+
if (tags.size === 0) {
|
|
85
|
+
return nodes;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** @type {Array<[Binding, Binding]>} */
|
|
89
|
+
const edges = [];
|
|
90
|
+
|
|
91
|
+
for (const [id, tag] of tags) {
|
|
92
|
+
for (const dep of tag.deps) {
|
|
93
|
+
if (tags.has(dep)) {
|
|
94
|
+
edges.push([id, dep]);
|
|
95
|
+
}
|
|
52
96
|
}
|
|
53
97
|
}
|
|
54
98
|
|
|
55
|
-
|
|
56
|
-
|
|
99
|
+
const cycle = check_graph_for_cycles(edges);
|
|
100
|
+
if (cycle?.length) {
|
|
101
|
+
const tag = /** @type {Tag} */ (tags.get(cycle[0]));
|
|
102
|
+
e.const_tag_cycle(tag.node, cycle.map((binding) => binding.node.name).join(' → '));
|
|
103
|
+
}
|
|
57
104
|
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
105
|
+
/** @type {AST.ConstTag[]} */
|
|
106
|
+
const sorted = [];
|
|
107
|
+
|
|
108
|
+
/** @param {Tag} tag */
|
|
109
|
+
function add(tag) {
|
|
110
|
+
if (sorted.includes(tag.node)) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (const dep of tag.deps) {
|
|
115
|
+
const dep_tag = tags.get(dep);
|
|
116
|
+
if (dep_tag) add(dep_tag);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
sorted.push(tag.node);
|
|
69
120
|
}
|
|
70
|
-
|
|
121
|
+
|
|
122
|
+
for (const tag of tags.values()) {
|
|
123
|
+
add(tag);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return [...sorted, ...other];
|
|
71
127
|
}
|
|
72
128
|
|
|
73
129
|
/**
|
|
@@ -77,10 +133,11 @@ export function is_hoistable_function(node) {
|
|
|
77
133
|
* unless it's whitespace-only, in which case collapse to a single whitespace for all cases
|
|
78
134
|
* except when it's children of certain elements where we know ignore whitespace (like td/option/head),
|
|
79
135
|
* in which case we remove it entirely
|
|
80
|
-
* @param {
|
|
81
|
-
* @param {
|
|
82
|
-
* @param {
|
|
83
|
-
* @param {
|
|
136
|
+
* @param {SvelteNode} parent
|
|
137
|
+
* @param {SvelteNode[]} nodes
|
|
138
|
+
* @param {SvelteNode[]} path
|
|
139
|
+
* @param {Namespace} namespace
|
|
140
|
+
* @param {TransformState & { options: ValidatedCompileOptions }} state
|
|
84
141
|
* @param {boolean} preserve_whitespace
|
|
85
142
|
* @param {boolean} preserve_comments
|
|
86
143
|
*/
|
|
@@ -89,13 +146,21 @@ export function clean_nodes(
|
|
|
89
146
|
nodes,
|
|
90
147
|
path,
|
|
91
148
|
namespace = 'html',
|
|
149
|
+
state,
|
|
150
|
+
// TODO give these defaults (state.options.preserveWhitespace and state.options.preserveComments).
|
|
151
|
+
// first, we need to make `Component(Client|Server)TransformState` inherit from a new `ComponentTransformState`
|
|
152
|
+
// rather than from `ClientTransformState` and `ServerTransformState`
|
|
92
153
|
preserve_whitespace,
|
|
93
154
|
preserve_comments
|
|
94
155
|
) {
|
|
95
|
-
|
|
156
|
+
if (!state.analysis.runes) {
|
|
157
|
+
nodes = sort_const_tags(nodes, state);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** @type {SvelteNode[]} */
|
|
96
161
|
const hoisted = [];
|
|
97
162
|
|
|
98
|
-
/** @type {
|
|
163
|
+
/** @type {SvelteNode[]} */
|
|
99
164
|
const regular = [];
|
|
100
165
|
|
|
101
166
|
for (const node of nodes) {
|
|
@@ -120,121 +185,165 @@ export function clean_nodes(
|
|
|
120
185
|
}
|
|
121
186
|
}
|
|
122
187
|
|
|
123
|
-
|
|
124
|
-
return { hoisted, trimmed: regular };
|
|
125
|
-
}
|
|
188
|
+
let trimmed = regular;
|
|
126
189
|
|
|
127
|
-
|
|
190
|
+
if (!preserve_whitespace) {
|
|
191
|
+
trimmed = [];
|
|
128
192
|
|
|
129
|
-
|
|
130
|
-
regular.shift();
|
|
131
|
-
}
|
|
193
|
+
let first, last;
|
|
132
194
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
195
|
+
while (
|
|
196
|
+
(first = regular[0]) &&
|
|
197
|
+
first.type === 'Text' &&
|
|
198
|
+
!regex_not_whitespace.test(first.data)
|
|
199
|
+
) {
|
|
200
|
+
regular.shift();
|
|
201
|
+
}
|
|
137
202
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
203
|
+
if (first?.type === 'Text') {
|
|
204
|
+
first.raw = first.raw.replace(regex_starts_with_whitespaces, '');
|
|
205
|
+
first.data = first.data.replace(regex_starts_with_whitespaces, '');
|
|
206
|
+
}
|
|
141
207
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
208
|
+
while (
|
|
209
|
+
(last = regular.at(-1)) &&
|
|
210
|
+
last.type === 'Text' &&
|
|
211
|
+
!regex_not_whitespace.test(last.data)
|
|
212
|
+
) {
|
|
213
|
+
regular.pop();
|
|
214
|
+
}
|
|
146
215
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
(
|
|
154
|
-
parent.name
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
parent.name === '
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
216
|
+
if (last?.type === 'Text') {
|
|
217
|
+
last.raw = last.raw.replace(regex_ends_with_whitespaces, '');
|
|
218
|
+
last.data = last.data.replace(regex_ends_with_whitespaces, '');
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const can_remove_entirely =
|
|
222
|
+
(namespace === 'svg' &&
|
|
223
|
+
(parent.type !== 'RegularElement' || parent.name !== 'text') &&
|
|
224
|
+
!path.some((n) => n.type === 'RegularElement' && n.name === 'text')) ||
|
|
225
|
+
(parent.type === 'RegularElement' &&
|
|
226
|
+
// TODO others?
|
|
227
|
+
(parent.name === 'select' ||
|
|
228
|
+
parent.name === 'tr' ||
|
|
229
|
+
parent.name === 'table' ||
|
|
230
|
+
parent.name === 'tbody' ||
|
|
231
|
+
parent.name === 'thead' ||
|
|
232
|
+
parent.name === 'tfoot' ||
|
|
233
|
+
parent.name === 'colgroup' ||
|
|
234
|
+
parent.name === 'datalist'));
|
|
235
|
+
|
|
236
|
+
// Replace any whitespace between a text and non-text node with a single spaceand keep whitespace
|
|
237
|
+
// as-is within text nodes, or between text nodes and expression tags (because in the end they count
|
|
238
|
+
// as one text). This way whitespace is mostly preserved when using CSS with `white-space: pre-line`
|
|
239
|
+
// and default slot content going into a pre tag (which we can't see).
|
|
240
|
+
for (let i = 0; i < regular.length; i++) {
|
|
241
|
+
const prev = regular[i - 1];
|
|
242
|
+
const node = regular[i];
|
|
243
|
+
const next = regular[i + 1];
|
|
244
|
+
|
|
245
|
+
if (node.type === 'Text') {
|
|
246
|
+
if (prev?.type !== 'ExpressionTag') {
|
|
247
|
+
const prev_is_text_ending_with_whitespace =
|
|
248
|
+
prev?.type === 'Text' && regex_ends_with_whitespaces.test(prev.data);
|
|
249
|
+
node.data = node.data.replace(
|
|
250
|
+
regex_starts_with_whitespaces,
|
|
251
|
+
prev_is_text_ending_with_whitespace ? '' : ' '
|
|
252
|
+
);
|
|
253
|
+
node.raw = node.raw.replace(
|
|
254
|
+
regex_starts_with_whitespaces,
|
|
255
|
+
prev_is_text_ending_with_whitespace ? '' : ' '
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
if (next?.type !== 'ExpressionTag') {
|
|
259
|
+
node.data = node.data.replace(regex_ends_with_whitespaces, ' ');
|
|
260
|
+
node.raw = node.raw.replace(regex_ends_with_whitespaces, ' ');
|
|
261
|
+
}
|
|
262
|
+
if (node.data && (node.data !== ' ' || !can_remove_entirely)) {
|
|
263
|
+
trimmed.push(node);
|
|
264
|
+
}
|
|
265
|
+
} else {
|
|
192
266
|
trimmed.push(node);
|
|
193
267
|
}
|
|
194
|
-
} else {
|
|
195
|
-
trimmed.push(node);
|
|
196
268
|
}
|
|
197
269
|
}
|
|
198
270
|
|
|
199
|
-
|
|
271
|
+
var first = trimmed[0];
|
|
272
|
+
|
|
273
|
+
// Special case: Add a comment if this is a lone script tag. This ensures that our run_scripts logic in template.js
|
|
274
|
+
// will always be able to call node.replaceWith() on the script tag in order to make it run. If we don't add this
|
|
275
|
+
// and would still call node.replaceWith() on the script tag, it would be a no-op because the script tag has no parent.
|
|
276
|
+
if (trimmed.length === 1 && first.type === 'RegularElement' && first.name === 'script') {
|
|
277
|
+
trimmed.push({
|
|
278
|
+
type: 'Comment',
|
|
279
|
+
data: '',
|
|
280
|
+
parent: first.parent,
|
|
281
|
+
start: -1,
|
|
282
|
+
end: -1
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return {
|
|
287
|
+
hoisted,
|
|
288
|
+
trimmed,
|
|
289
|
+
/**
|
|
290
|
+
* In a case like `{#if x}<Foo />{/if}`, we don't need to wrap the child in
|
|
291
|
+
* comments — we can just use the parent block's anchor for the component.
|
|
292
|
+
* TODO extend this optimisation to other cases
|
|
293
|
+
*/
|
|
294
|
+
is_standalone:
|
|
295
|
+
trimmed.length === 1 &&
|
|
296
|
+
((first.type === 'RenderTag' && !first.metadata.dynamic) ||
|
|
297
|
+
(first.type === 'Component' &&
|
|
298
|
+
!state.options.hmr &&
|
|
299
|
+
!first.metadata.dynamic &&
|
|
300
|
+
!first.attributes.some(
|
|
301
|
+
(attribute) => attribute.type === 'Attribute' && attribute.name.startsWith('--')
|
|
302
|
+
))),
|
|
303
|
+
/** if a component/snippet/each block starts with text, we need to add an anchor comment so that its text node doesn't get fused with its surroundings */
|
|
304
|
+
is_text_first:
|
|
305
|
+
(parent.type === 'Fragment' ||
|
|
306
|
+
parent.type === 'SnippetBlock' ||
|
|
307
|
+
parent.type === 'EachBlock' ||
|
|
308
|
+
parent.type === 'SvelteComponent' ||
|
|
309
|
+
parent.type === 'Component' ||
|
|
310
|
+
parent.type === 'SvelteSelf') &&
|
|
311
|
+
first &&
|
|
312
|
+
(first?.type === 'Text' || first?.type === 'ExpressionTag')
|
|
313
|
+
};
|
|
200
314
|
}
|
|
201
315
|
|
|
202
316
|
/**
|
|
203
317
|
* Infers the namespace for the children of a node that should be used when creating the `$.template(...)`.
|
|
204
|
-
* @param {
|
|
205
|
-
* @param {
|
|
206
|
-
* @param {
|
|
207
|
-
* @param {import('#compiler').SvelteNode[]} path
|
|
318
|
+
* @param {Namespace} namespace
|
|
319
|
+
* @param {SvelteNode} parent
|
|
320
|
+
* @param {SvelteNode[]} nodes
|
|
208
321
|
*/
|
|
209
|
-
export function infer_namespace(namespace, parent, nodes
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
path.at(-1)
|
|
214
|
-
: parent;
|
|
215
|
-
|
|
216
|
-
if (namespace !== 'foreign') {
|
|
217
|
-
if (parent_node?.type === 'RegularElement' && parent_node.name === 'foreignObject') {
|
|
218
|
-
return 'html';
|
|
219
|
-
}
|
|
322
|
+
export function infer_namespace(namespace, parent, nodes) {
|
|
323
|
+
if (parent.type === 'RegularElement' && parent.name === 'foreignObject') {
|
|
324
|
+
return 'html';
|
|
325
|
+
}
|
|
220
326
|
|
|
221
|
-
|
|
222
|
-
|
|
327
|
+
if (parent.type === 'RegularElement' || parent.type === 'SvelteElement') {
|
|
328
|
+
if (parent.metadata.svg) {
|
|
329
|
+
return 'svg';
|
|
223
330
|
}
|
|
331
|
+
return parent.metadata.mathml ? 'mathml' : 'html';
|
|
332
|
+
}
|
|
224
333
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
334
|
+
// Re-evaluate the namespace inside slot nodes that reset the namespace
|
|
335
|
+
if (
|
|
336
|
+
parent.type === 'Fragment' ||
|
|
337
|
+
parent.type === 'Root' ||
|
|
338
|
+
parent.type === 'Component' ||
|
|
339
|
+
parent.type === 'SvelteComponent' ||
|
|
340
|
+
parent.type === 'SvelteFragment' ||
|
|
341
|
+
parent.type === 'SnippetBlock' ||
|
|
342
|
+
parent.type === 'SlotElement'
|
|
343
|
+
) {
|
|
344
|
+
const new_namespace = check_nodes_for_namespace(nodes, 'keep');
|
|
345
|
+
if (new_namespace !== 'keep' && new_namespace !== 'maybe_html') {
|
|
346
|
+
return new_namespace;
|
|
238
347
|
}
|
|
239
348
|
}
|
|
240
349
|
|
|
@@ -245,20 +354,20 @@ export function infer_namespace(namespace, parent, nodes, path) {
|
|
|
245
354
|
* Heuristic: Keep current namespace, unless we find a regular element,
|
|
246
355
|
* in which case we always want html, or we only find svg nodes,
|
|
247
356
|
* in which case we assume svg.
|
|
248
|
-
* @param {
|
|
249
|
-
* @param {
|
|
357
|
+
* @param {SvelteNode[]} nodes
|
|
358
|
+
* @param {Namespace | 'keep' | 'maybe_html'} namespace
|
|
250
359
|
*/
|
|
251
360
|
function check_nodes_for_namespace(nodes, namespace) {
|
|
252
361
|
/**
|
|
253
|
-
* @param {
|
|
362
|
+
* @param {AST.SvelteElement | AST.RegularElement} node}
|
|
254
363
|
* @param {{stop: () => void}} context
|
|
255
364
|
*/
|
|
256
365
|
const RegularElement = (node, { stop }) => {
|
|
257
|
-
if (!node.metadata.svg) {
|
|
366
|
+
if (!node.metadata.svg && !node.metadata.mathml) {
|
|
258
367
|
namespace = 'html';
|
|
259
368
|
stop();
|
|
260
369
|
} else if (namespace === 'keep') {
|
|
261
|
-
namespace = 'svg';
|
|
370
|
+
namespace = node.metadata.svg ? 'svg' : 'mathml';
|
|
262
371
|
}
|
|
263
372
|
};
|
|
264
373
|
|
|
@@ -299,40 +408,39 @@ function check_nodes_for_namespace(nodes, namespace) {
|
|
|
299
408
|
|
|
300
409
|
/**
|
|
301
410
|
* Determines the namespace the children of this node are in.
|
|
302
|
-
* @param {
|
|
303
|
-
* @param {
|
|
304
|
-
* @returns {
|
|
411
|
+
* @param {AST.RegularElement | AST.SvelteElement} node
|
|
412
|
+
* @param {Namespace} namespace
|
|
413
|
+
* @returns {Namespace}
|
|
305
414
|
*/
|
|
306
415
|
export function determine_namespace_for_children(node, namespace) {
|
|
307
|
-
if (namespace === 'foreign') {
|
|
308
|
-
return namespace;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
416
|
if (node.name === 'foreignObject') {
|
|
312
417
|
return 'html';
|
|
313
418
|
}
|
|
314
419
|
|
|
315
|
-
|
|
420
|
+
if (node.metadata.svg) {
|
|
421
|
+
return 'svg';
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
return node.metadata.mathml ? 'mathml' : 'html';
|
|
316
425
|
}
|
|
317
426
|
|
|
318
427
|
/**
|
|
319
|
-
* @template {
|
|
320
|
-
* @param {
|
|
321
|
-
* @param {
|
|
428
|
+
* @template {TransformState} T
|
|
429
|
+
* @param {CallExpression} node
|
|
430
|
+
* @param {Context<any, T>} context
|
|
322
431
|
*/
|
|
323
432
|
export function transform_inspect_rune(node, context) {
|
|
324
433
|
const { state, visit } = context;
|
|
325
434
|
const as_fn = state.options.generate === 'client';
|
|
326
435
|
|
|
327
|
-
if (!
|
|
436
|
+
if (!dev) return b.empty;
|
|
328
437
|
|
|
329
438
|
if (node.callee.type === 'MemberExpression') {
|
|
330
|
-
const raw_inspect_args = /** @type {
|
|
331
|
-
.arguments;
|
|
439
|
+
const raw_inspect_args = /** @type {CallExpression} */ (node.callee.object).arguments;
|
|
332
440
|
const inspect_args =
|
|
333
|
-
/** @type {Array<
|
|
441
|
+
/** @type {Array<Expression>} */
|
|
334
442
|
(raw_inspect_args.map((arg) => visit(arg)));
|
|
335
|
-
const with_arg = /** @type {
|
|
443
|
+
const with_arg = /** @type {Expression} */ (visit(node.arguments[0]));
|
|
336
444
|
|
|
337
445
|
return b.call(
|
|
338
446
|
'$.inspect',
|
|
@@ -340,9 +448,7 @@ export function transform_inspect_rune(node, context) {
|
|
|
340
448
|
with_arg
|
|
341
449
|
);
|
|
342
450
|
} else {
|
|
343
|
-
const arg = node.arguments.map(
|
|
344
|
-
(arg) => /** @type {import('estree').Expression} */ (visit(arg))
|
|
345
|
-
);
|
|
451
|
+
const arg = node.arguments.map((arg) => /** @type {Expression} */ (visit(arg)));
|
|
346
452
|
return b.call('$.inspect', as_fn ? b.thunk(b.array(arg)) : b.array(arg));
|
|
347
453
|
}
|
|
348
454
|
}
|