@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,370 @@
|
|
|
1
|
+
/** @import { Derived, Effect, Source, Value } from '#client' */
|
|
2
|
+
import { DEV } from 'esm-env';
|
|
3
|
+
import {
|
|
4
|
+
active_reaction,
|
|
5
|
+
active_effect,
|
|
6
|
+
untracked_writes,
|
|
7
|
+
get,
|
|
8
|
+
set_untracked_writes,
|
|
9
|
+
untrack,
|
|
10
|
+
increment_write_version,
|
|
11
|
+
update_effect,
|
|
12
|
+
current_sources,
|
|
13
|
+
is_dirty,
|
|
14
|
+
untracking,
|
|
15
|
+
is_destroying_effect,
|
|
16
|
+
push_reaction_value
|
|
17
|
+
} from '../runtime.js';
|
|
18
|
+
import { equals, safe_equals } from './equality.js';
|
|
19
|
+
import {
|
|
20
|
+
CLEAN,
|
|
21
|
+
DERIVED,
|
|
22
|
+
DIRTY,
|
|
23
|
+
BRANCH_EFFECT,
|
|
24
|
+
EAGER_EFFECT,
|
|
25
|
+
MAYBE_DIRTY,
|
|
26
|
+
BLOCK_EFFECT,
|
|
27
|
+
ROOT_EFFECT,
|
|
28
|
+
ASYNC,
|
|
29
|
+
WAS_MARKED,
|
|
30
|
+
CONNECTED
|
|
31
|
+
} from '#client/constants';
|
|
32
|
+
import * as e from '../errors.js';
|
|
33
|
+
import { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';
|
|
34
|
+
import { includes } from '../../shared/utils.js';
|
|
35
|
+
import { tag_proxy } from '../dev/tracing.js';
|
|
36
|
+
import { get_error } from '../../shared/dev.js';
|
|
37
|
+
import { component_context, is_runes } from '../context.js';
|
|
38
|
+
import { Batch, batch_values, eager_block_effects, schedule_effect } from './batch.js';
|
|
39
|
+
import { proxy } from '../proxy.js';
|
|
40
|
+
import { execute_derived } from './deriveds.js';
|
|
41
|
+
import { set_signal_status, update_derived_status } from './status.js';
|
|
42
|
+
|
|
43
|
+
/** @type {Set<any>} */
|
|
44
|
+
export let eager_effects = new Set();
|
|
45
|
+
|
|
46
|
+
/** @type {Map<Source, any>} */
|
|
47
|
+
export const old_values = new Map();
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @param {Set<any>} v
|
|
51
|
+
*/
|
|
52
|
+
export function set_eager_effects(v) {
|
|
53
|
+
eager_effects = v;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
let eager_effects_deferred = false;
|
|
57
|
+
|
|
58
|
+
export function set_eager_effects_deferred() {
|
|
59
|
+
eager_effects_deferred = true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @template V
|
|
64
|
+
* @param {V} v
|
|
65
|
+
* @param {Error | null} [stack]
|
|
66
|
+
* @returns {Source<V>}
|
|
67
|
+
*/
|
|
68
|
+
// TODO rename this to `state` throughout the codebase
|
|
69
|
+
export function source(v, stack) {
|
|
70
|
+
/** @type {Value} */
|
|
71
|
+
var signal = {
|
|
72
|
+
f: 0, // TODO ideally we could skip this altogether, but it causes type errors
|
|
73
|
+
v,
|
|
74
|
+
reactions: null,
|
|
75
|
+
equals,
|
|
76
|
+
rv: 0,
|
|
77
|
+
wv: 0
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
if (DEV && tracing_mode_flag) {
|
|
81
|
+
signal.created = stack ?? get_error('created at');
|
|
82
|
+
signal.updated = null;
|
|
83
|
+
signal.set_during_effect = false;
|
|
84
|
+
signal.trace = null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return signal;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @template V
|
|
92
|
+
* @param {V} v
|
|
93
|
+
* @param {Error | null} [stack]
|
|
94
|
+
*/
|
|
95
|
+
/*#__NO_SIDE_EFFECTS__*/
|
|
96
|
+
export function state(v, stack) {
|
|
97
|
+
const s = source(v, stack);
|
|
98
|
+
|
|
99
|
+
push_reaction_value(s);
|
|
100
|
+
|
|
101
|
+
return s;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @template V
|
|
106
|
+
* @param {V} initial_value
|
|
107
|
+
* @param {boolean} [immutable]
|
|
108
|
+
* @returns {Source<V>}
|
|
109
|
+
*/
|
|
110
|
+
/*#__NO_SIDE_EFFECTS__*/
|
|
111
|
+
export function mutable_source(initial_value, immutable = false, trackable = true) {
|
|
112
|
+
const s = source(initial_value);
|
|
113
|
+
if (!immutable) {
|
|
114
|
+
s.equals = safe_equals;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// bind the signal to the component context, in case we need to
|
|
118
|
+
// track updates to trigger beforeUpdate/afterUpdate callbacks
|
|
119
|
+
if (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {
|
|
120
|
+
(component_context.l.s ??= []).push(s);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return s;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @template V
|
|
128
|
+
* @param {Value<V>} source
|
|
129
|
+
* @param {V} value
|
|
130
|
+
*/
|
|
131
|
+
export function mutate(source, value) {
|
|
132
|
+
set(
|
|
133
|
+
source,
|
|
134
|
+
untrack(() => get(source))
|
|
135
|
+
);
|
|
136
|
+
return value;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @template V
|
|
141
|
+
* @param {Source<V>} source
|
|
142
|
+
* @param {V} value
|
|
143
|
+
* @param {boolean} [should_proxy]
|
|
144
|
+
* @returns {V}
|
|
145
|
+
*/
|
|
146
|
+
export function set(source, value, should_proxy = false) {
|
|
147
|
+
if (
|
|
148
|
+
active_reaction !== null &&
|
|
149
|
+
// since we are untracking the function inside `$inspect.with` we need to add this check
|
|
150
|
+
// to ensure we error if state is set inside an inspect effect
|
|
151
|
+
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) &&
|
|
152
|
+
is_runes() &&
|
|
153
|
+
(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&
|
|
154
|
+
(current_sources === null || !includes.call(current_sources, source))
|
|
155
|
+
) {
|
|
156
|
+
e.state_unsafe_mutation();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
let new_value = should_proxy ? proxy(value) : value;
|
|
160
|
+
|
|
161
|
+
if (DEV) {
|
|
162
|
+
tag_proxy(new_value, /** @type {string} */ (source.label));
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return internal_set(source, new_value);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @template V
|
|
170
|
+
* @param {Source<V>} source
|
|
171
|
+
* @param {V} value
|
|
172
|
+
* @returns {V}
|
|
173
|
+
*/
|
|
174
|
+
export function internal_set(source, value) {
|
|
175
|
+
if (!source.equals(value)) {
|
|
176
|
+
var old_value = source.v;
|
|
177
|
+
|
|
178
|
+
if (is_destroying_effect) {
|
|
179
|
+
old_values.set(source, value);
|
|
180
|
+
} else {
|
|
181
|
+
old_values.set(source, old_value);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
source.v = value;
|
|
185
|
+
|
|
186
|
+
var batch = Batch.ensure();
|
|
187
|
+
batch.capture(source, old_value);
|
|
188
|
+
|
|
189
|
+
if (DEV) {
|
|
190
|
+
if (tracing_mode_flag || active_effect !== null) {
|
|
191
|
+
source.updated ??= new Map();
|
|
192
|
+
|
|
193
|
+
// For performance reasons, when not using $inspect.trace, we only start collecting stack traces
|
|
194
|
+
// after the same source has been updated more than 5 times in the same flush cycle.
|
|
195
|
+
const count = (source.updated.get('')?.count ?? 0) + 1;
|
|
196
|
+
source.updated.set('', { error: /** @type {any} */ (null), count });
|
|
197
|
+
|
|
198
|
+
if (tracing_mode_flag || count > 5) {
|
|
199
|
+
const error = get_error('updated at');
|
|
200
|
+
|
|
201
|
+
if (error !== null) {
|
|
202
|
+
let entry = source.updated.get(error.stack);
|
|
203
|
+
|
|
204
|
+
if (!entry) {
|
|
205
|
+
entry = { error, count: 0 };
|
|
206
|
+
source.updated.set(error.stack, entry);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
entry.count++;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (active_effect !== null) {
|
|
215
|
+
source.set_during_effect = true;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if ((source.f & DERIVED) !== 0) {
|
|
220
|
+
const derived = /** @type {Derived} */ (source);
|
|
221
|
+
|
|
222
|
+
// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies
|
|
223
|
+
if ((source.f & DIRTY) !== 0) {
|
|
224
|
+
execute_derived(derived);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
update_derived_status(derived);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
source.wv = increment_write_version();
|
|
231
|
+
|
|
232
|
+
// For debugging, in case you want to know which reactions are being scheduled:
|
|
233
|
+
// log_reactions(source);
|
|
234
|
+
mark_reactions(source, DIRTY);
|
|
235
|
+
|
|
236
|
+
// It's possible that the current reaction might not have up-to-date dependencies
|
|
237
|
+
// whilst it's actively running. So in the case of ensuring it registers the reaction
|
|
238
|
+
// properly for itself, we need to ensure the current effect actually gets
|
|
239
|
+
// scheduled. i.e: `$effect(() => x++)`
|
|
240
|
+
if (
|
|
241
|
+
is_runes() &&
|
|
242
|
+
active_effect !== null &&
|
|
243
|
+
(active_effect.f & CLEAN) !== 0 &&
|
|
244
|
+
(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0
|
|
245
|
+
) {
|
|
246
|
+
if (untracked_writes === null) {
|
|
247
|
+
set_untracked_writes([source]);
|
|
248
|
+
} else {
|
|
249
|
+
untracked_writes.push(source);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
|
|
254
|
+
flush_eager_effects();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return value;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export function flush_eager_effects() {
|
|
262
|
+
eager_effects_deferred = false;
|
|
263
|
+
|
|
264
|
+
for (const effect of eager_effects) {
|
|
265
|
+
// Mark clean inspect-effects as maybe dirty and then check their dirtiness
|
|
266
|
+
// instead of just updating the effects - this way we avoid overfiring.
|
|
267
|
+
if ((effect.f & CLEAN) !== 0) {
|
|
268
|
+
set_signal_status(effect, MAYBE_DIRTY);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (is_dirty(effect)) {
|
|
272
|
+
update_effect(effect);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
eager_effects.clear();
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* @template {number | bigint} T
|
|
281
|
+
* @param {Source<T>} source
|
|
282
|
+
* @param {1 | -1} [d]
|
|
283
|
+
* @returns {T}
|
|
284
|
+
*/
|
|
285
|
+
export function update(source, d = 1) {
|
|
286
|
+
var value = get(source);
|
|
287
|
+
var result = d === 1 ? value++ : value--;
|
|
288
|
+
|
|
289
|
+
set(source, value);
|
|
290
|
+
|
|
291
|
+
// @ts-expect-error
|
|
292
|
+
return result;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* @template {number | bigint} T
|
|
297
|
+
* @param {Source<T>} source
|
|
298
|
+
* @param {1 | -1} [d]
|
|
299
|
+
* @returns {T}
|
|
300
|
+
*/
|
|
301
|
+
export function update_pre(source, d = 1) {
|
|
302
|
+
var value = get(source);
|
|
303
|
+
|
|
304
|
+
// @ts-expect-error
|
|
305
|
+
// eslint-disable-next-line no-useless-assignment -- `++`/`--` used for return value, not side effect on `value`
|
|
306
|
+
return set(source, d === 1 ? ++value : --value);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Silently (without using `get`) increment a source
|
|
311
|
+
* @param {Source<number>} source
|
|
312
|
+
*/
|
|
313
|
+
export function increment(source) {
|
|
314
|
+
set(source, source.v + 1);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* @param {Value} signal
|
|
319
|
+
* @param {number} status should be DIRTY or MAYBE_DIRTY
|
|
320
|
+
* @returns {void}
|
|
321
|
+
*/
|
|
322
|
+
function mark_reactions(signal, status) {
|
|
323
|
+
var reactions = signal.reactions;
|
|
324
|
+
if (reactions === null) return;
|
|
325
|
+
|
|
326
|
+
var runes = is_runes();
|
|
327
|
+
var length = reactions.length;
|
|
328
|
+
|
|
329
|
+
for (var i = 0; i < length; i++) {
|
|
330
|
+
var reaction = reactions[i];
|
|
331
|
+
var flags = reaction.f;
|
|
332
|
+
|
|
333
|
+
// In legacy mode, skip the current effect to prevent infinite loops
|
|
334
|
+
if (!runes && reaction === active_effect) continue;
|
|
335
|
+
|
|
336
|
+
// Inspect effects need to run immediately, so that the stack trace makes sense
|
|
337
|
+
if (DEV && (flags & EAGER_EFFECT) !== 0) {
|
|
338
|
+
eager_effects.add(reaction);
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
var not_dirty = (flags & DIRTY) === 0;
|
|
343
|
+
|
|
344
|
+
// don't set a DIRTY reaction to MAYBE_DIRTY
|
|
345
|
+
if (not_dirty) {
|
|
346
|
+
set_signal_status(reaction, status);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
if ((flags & DERIVED) !== 0) {
|
|
350
|
+
var derived = /** @type {Derived} */ (reaction);
|
|
351
|
+
|
|
352
|
+
batch_values?.delete(derived);
|
|
353
|
+
|
|
354
|
+
if ((flags & WAS_MARKED) === 0) {
|
|
355
|
+
// Only connected deriveds can be reliably unmarked right away
|
|
356
|
+
if (flags & CONNECTED) {
|
|
357
|
+
reaction.f |= WAS_MARKED;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
mark_reactions(derived, MAYBE_DIRTY);
|
|
361
|
+
}
|
|
362
|
+
} else if (not_dirty) {
|
|
363
|
+
if ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
|
|
364
|
+
eager_block_effects.add(/** @type {Effect} */ (reaction));
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
schedule_effect(/** @type {Effect} */ (reaction));
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** @import { Derived, Signal } from '#client' */
|
|
2
|
+
import { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';
|
|
3
|
+
|
|
4
|
+
const STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @param {Signal} signal
|
|
8
|
+
* @param {number} status
|
|
9
|
+
*/
|
|
10
|
+
export function set_signal_status(signal, status) {
|
|
11
|
+
signal.f = (signal.f & STATUS_MASK) | status;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.
|
|
16
|
+
* @param {Derived} derived
|
|
17
|
+
*/
|
|
18
|
+
export function update_derived_status(derived) {
|
|
19
|
+
// Only mark as MAYBE_DIRTY if disconnected and has dependencies.
|
|
20
|
+
if ((derived.f & CONNECTED) !== 0 || derived.deps === null) {
|
|
21
|
+
set_signal_status(derived, CLEAN);
|
|
22
|
+
} else {
|
|
23
|
+
set_signal_status(derived, MAYBE_DIRTY);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/** @import { StoreReferencesContainer } from '#client' */
|
|
2
|
+
/** @import { Store } from '#shared' */
|
|
3
|
+
import { subscribe_to_store } from '../../../store/utils.js';
|
|
4
|
+
import { get as get_store } from '../../../store/shared/index.js';
|
|
5
|
+
import { define_property, noop } from '../../shared/utils.js';
|
|
6
|
+
import { get } from '../runtime.js';
|
|
7
|
+
import { teardown } from './effects.js';
|
|
8
|
+
import { mutable_source, set } from './sources.js';
|
|
9
|
+
import { DEV } from 'esm-env';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Whether or not the prop currently being read is a store binding, as in
|
|
13
|
+
* `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in
|
|
14
|
+
* runes mode, and skip `binding_property_non_reactive` validation
|
|
15
|
+
*/
|
|
16
|
+
let is_store_binding = false;
|
|
17
|
+
|
|
18
|
+
let IS_UNMOUNTED = Symbol();
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy
|
|
22
|
+
* signal that will be updated when the store is. The store references container is needed to
|
|
23
|
+
* track reassignments to stores and to track the correct component context.
|
|
24
|
+
* @template V
|
|
25
|
+
* @param {Store<V> | null | undefined} store
|
|
26
|
+
* @param {string} store_name
|
|
27
|
+
* @param {StoreReferencesContainer} stores
|
|
28
|
+
* @returns {V}
|
|
29
|
+
*/
|
|
30
|
+
export function store_get(store, store_name, stores) {
|
|
31
|
+
const entry = (stores[store_name] ??= {
|
|
32
|
+
store: null,
|
|
33
|
+
source: mutable_source(undefined),
|
|
34
|
+
unsubscribe: noop
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
if (DEV) {
|
|
38
|
+
entry.source.label = store_name;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// if the component that setup this is already unmounted we don't want to register a subscription
|
|
42
|
+
if (entry.store !== store && !(IS_UNMOUNTED in stores)) {
|
|
43
|
+
entry.unsubscribe();
|
|
44
|
+
entry.store = store ?? null;
|
|
45
|
+
|
|
46
|
+
if (store == null) {
|
|
47
|
+
entry.source.v = undefined; // see synchronous callback comment below
|
|
48
|
+
entry.unsubscribe = noop;
|
|
49
|
+
} else {
|
|
50
|
+
var is_synchronous_callback = true;
|
|
51
|
+
|
|
52
|
+
entry.unsubscribe = subscribe_to_store(store, (v) => {
|
|
53
|
+
if (is_synchronous_callback) {
|
|
54
|
+
// If the first updates to the store value (possibly multiple of them) are synchronously
|
|
55
|
+
// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value
|
|
56
|
+
entry.source.v = v;
|
|
57
|
+
} else {
|
|
58
|
+
set(entry.source, v);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
is_synchronous_callback = false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// if the component that setup this stores is already unmounted the source will be out of sync
|
|
67
|
+
// so we just use the `get` for the stores, less performant but it avoids to create a memory leak
|
|
68
|
+
// and it will keep the value consistent
|
|
69
|
+
if (store && IS_UNMOUNTED in stores) {
|
|
70
|
+
return get_store(store);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return get(entry.source);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Unsubscribe from a store if it's not the same as the one in the store references container.
|
|
78
|
+
* We need this in addition to `store_get` because someone could unsubscribe from a store but
|
|
79
|
+
* then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.
|
|
80
|
+
* @param {Store<any> | null | undefined} store
|
|
81
|
+
* @param {string} store_name
|
|
82
|
+
* @param {StoreReferencesContainer} stores
|
|
83
|
+
*/
|
|
84
|
+
export function store_unsub(store, store_name, stores) {
|
|
85
|
+
/** @type {StoreReferencesContainer[''] | undefined} */
|
|
86
|
+
let entry = stores[store_name];
|
|
87
|
+
|
|
88
|
+
if (entry && entry.store !== store) {
|
|
89
|
+
// Don't reset store yet, so that store_get above can resubscribe to new store if necessary
|
|
90
|
+
entry.unsubscribe();
|
|
91
|
+
entry.unsubscribe = noop;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return store;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Sets the new value of a store and returns that value.
|
|
99
|
+
* @template V
|
|
100
|
+
* @param {Store<V>} store
|
|
101
|
+
* @param {V} value
|
|
102
|
+
* @returns {V}
|
|
103
|
+
*/
|
|
104
|
+
export function store_set(store, value) {
|
|
105
|
+
store.set(value);
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @param {StoreReferencesContainer} stores
|
|
111
|
+
* @param {string} store_name
|
|
112
|
+
*/
|
|
113
|
+
export function invalidate_store(stores, store_name) {
|
|
114
|
+
var entry = stores[store_name];
|
|
115
|
+
if (entry.store !== null) {
|
|
116
|
+
store_set(entry.store, entry.source.v);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Unsubscribes from all auto-subscribed stores on destroy
|
|
122
|
+
* @returns {[StoreReferencesContainer, ()=>void]}
|
|
123
|
+
*/
|
|
124
|
+
export function setup_stores() {
|
|
125
|
+
/** @type {StoreReferencesContainer} */
|
|
126
|
+
const stores = {};
|
|
127
|
+
|
|
128
|
+
function cleanup() {
|
|
129
|
+
teardown(() => {
|
|
130
|
+
for (var store_name in stores) {
|
|
131
|
+
const ref = stores[store_name];
|
|
132
|
+
ref.unsubscribe();
|
|
133
|
+
}
|
|
134
|
+
define_property(stores, IS_UNMOUNTED, {
|
|
135
|
+
enumerable: false,
|
|
136
|
+
value: true
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return [stores, cleanup];
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Updates a store with a new value.
|
|
146
|
+
* @param {Store<V>} store the store to update
|
|
147
|
+
* @param {any} expression the expression that mutates the store
|
|
148
|
+
* @param {V} new_value the new store value
|
|
149
|
+
* @template V
|
|
150
|
+
*/
|
|
151
|
+
export function store_mutate(store, expression, new_value) {
|
|
152
|
+
store.set(new_value);
|
|
153
|
+
return expression;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @param {Store<number>} store
|
|
158
|
+
* @param {number} store_value
|
|
159
|
+
* @param {1 | -1} [d]
|
|
160
|
+
* @returns {number}
|
|
161
|
+
*/
|
|
162
|
+
export function update_store(store, store_value, d = 1) {
|
|
163
|
+
store.set(store_value + d);
|
|
164
|
+
return store_value;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @param {Store<number>} store
|
|
169
|
+
* @param {number} store_value
|
|
170
|
+
* @param {1 | -1} [d]
|
|
171
|
+
* @returns {number}
|
|
172
|
+
*/
|
|
173
|
+
export function update_pre_store(store, store_value, d = 1) {
|
|
174
|
+
const value = store_value + d;
|
|
175
|
+
store.set(value);
|
|
176
|
+
return value;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Called inside prop getters to communicate that the prop is a store binding
|
|
181
|
+
*/
|
|
182
|
+
export function mark_store_binding() {
|
|
183
|
+
is_store_binding = true;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.
|
|
188
|
+
* Used to prevent `binding_property_non_reactive` validation false positives and
|
|
189
|
+
* ensure that these props are treated as mutable even in runes mode
|
|
190
|
+
* @template T
|
|
191
|
+
* @param {() => T} fn
|
|
192
|
+
* @returns {[T, boolean]}
|
|
193
|
+
*/
|
|
194
|
+
export function capture_store_binding(fn) {
|
|
195
|
+
var previous_is_store_binding = is_store_binding;
|
|
196
|
+
|
|
197
|
+
try {
|
|
198
|
+
is_store_binding = false;
|
|
199
|
+
return [fn(), is_store_binding];
|
|
200
|
+
} finally {
|
|
201
|
+
is_store_binding = previous_is_store_binding;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** @import { Derived, Effect, Value } from '#client' */
|
|
2
|
+
import { CLEAN, DERIVED, DIRTY, MAYBE_DIRTY, WAS_MARKED } from '#client/constants';
|
|
3
|
+
import { set_signal_status } from './status.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {Value[] | null} deps
|
|
7
|
+
*/
|
|
8
|
+
function clear_marked(deps) {
|
|
9
|
+
if (deps === null) return;
|
|
10
|
+
|
|
11
|
+
for (const dep of deps) {
|
|
12
|
+
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
dep.f ^= WAS_MARKED;
|
|
17
|
+
|
|
18
|
+
clear_marked(/** @type {Derived} */ (dep).deps);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {Effect} effect
|
|
24
|
+
* @param {Set<Effect>} dirty_effects
|
|
25
|
+
* @param {Set<Effect>} maybe_dirty_effects
|
|
26
|
+
*/
|
|
27
|
+
export function defer_effect(effect, dirty_effects, maybe_dirty_effects) {
|
|
28
|
+
if ((effect.f & DIRTY) !== 0) {
|
|
29
|
+
dirty_effects.add(effect);
|
|
30
|
+
} else if ((effect.f & MAYBE_DIRTY) !== 0) {
|
|
31
|
+
maybe_dirty_effects.add(effect);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Since we're not executing these effects now, we need to clear any WAS_MARKED flags
|
|
35
|
+
// so that other batches can correctly reach these effects during their own traversal
|
|
36
|
+
clear_marked(effect.deps);
|
|
37
|
+
|
|
38
|
+
// mark as clean so they get scheduled if they depend on pending async state
|
|
39
|
+
set_signal_status(effect, CLEAN);
|
|
40
|
+
}
|