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