@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,95 @@
|
|
|
1
|
+
import { get, tick, untrack } from '../internal/client/runtime.js';
|
|
2
|
+
import { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';
|
|
3
|
+
import { source, increment } from '../internal/client/reactivity/sources.js';
|
|
4
|
+
import { tag } from '../internal/client/dev/tracing.js';
|
|
5
|
+
import { DEV } from 'esm-env';
|
|
6
|
+
import { queue_micro_task } from '../internal/client/dom/task.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.
|
|
10
|
+
* It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.
|
|
11
|
+
*
|
|
12
|
+
* If `subscribe` is called inside an effect (including indirectly, for example inside a getter),
|
|
13
|
+
* the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.
|
|
14
|
+
*
|
|
15
|
+
* If `start` returns a cleanup function, it will be called when the effect is destroyed.
|
|
16
|
+
*
|
|
17
|
+
* If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects
|
|
18
|
+
* are active, and the returned teardown function will only be called when all effects are destroyed.
|
|
19
|
+
*
|
|
20
|
+
* It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):
|
|
21
|
+
*
|
|
22
|
+
* ```js
|
|
23
|
+
* import { createSubscriber } from 'svelte/reactivity';
|
|
24
|
+
* import { on } from 'svelte/events';
|
|
25
|
+
*
|
|
26
|
+
* export class MediaQuery {
|
|
27
|
+
* #query;
|
|
28
|
+
* #subscribe;
|
|
29
|
+
*
|
|
30
|
+
* constructor(query) {
|
|
31
|
+
* this.#query = window.matchMedia(`(${query})`);
|
|
32
|
+
*
|
|
33
|
+
* this.#subscribe = createSubscriber((update) => {
|
|
34
|
+
* // when the `change` event occurs, re-run any effects that read `this.current`
|
|
35
|
+
* const off = on(this.#query, 'change', update);
|
|
36
|
+
*
|
|
37
|
+
* // stop listening when all the effects are destroyed
|
|
38
|
+
* return () => off();
|
|
39
|
+
* });
|
|
40
|
+
* }
|
|
41
|
+
*
|
|
42
|
+
* get current() {
|
|
43
|
+
* // This makes the getter reactive, if read in an effect
|
|
44
|
+
* this.#subscribe();
|
|
45
|
+
*
|
|
46
|
+
* // Return the current state of the query, whether or not we're in an effect
|
|
47
|
+
* return this.#query.matches;
|
|
48
|
+
* }
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
* @param {(update: () => void) => (() => void) | void} start
|
|
52
|
+
* @since 5.7.0
|
|
53
|
+
*/
|
|
54
|
+
export function createSubscriber(start) {
|
|
55
|
+
let subscribers = 0;
|
|
56
|
+
let version = source(0);
|
|
57
|
+
/** @type {(() => void) | void} */
|
|
58
|
+
let stop;
|
|
59
|
+
|
|
60
|
+
if (DEV) {
|
|
61
|
+
tag(version, 'createSubscriber version');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return () => {
|
|
65
|
+
if (effect_tracking()) {
|
|
66
|
+
get(version);
|
|
67
|
+
|
|
68
|
+
render_effect(() => {
|
|
69
|
+
if (subscribers === 0) {
|
|
70
|
+
stop = untrack(() => start(() => increment(version)));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
subscribers += 1;
|
|
74
|
+
|
|
75
|
+
return () => {
|
|
76
|
+
queue_micro_task(() => {
|
|
77
|
+
// Only count down after a microtask, else we would reach 0 before our own render effect reruns,
|
|
78
|
+
// but reach 1 again when the tick callback of the prior teardown runs. That would mean we
|
|
79
|
+
// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.
|
|
80
|
+
subscribers -= 1;
|
|
81
|
+
|
|
82
|
+
if (subscribers === 0) {
|
|
83
|
+
stop?.();
|
|
84
|
+
stop = undefined;
|
|
85
|
+
// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.
|
|
86
|
+
// If we didn't do this then the comparison of write versions would determine that the derived has a later version than
|
|
87
|
+
// the subscriber, and it would not be re-run.
|
|
88
|
+
increment(version);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** @import { Source } from '#client' */
|
|
2
|
+
import { derived } from '../internal/client/index.js';
|
|
3
|
+
import { set, state } from '../internal/client/reactivity/sources.js';
|
|
4
|
+
import { tag } from '../internal/client/dev/tracing.js';
|
|
5
|
+
import { active_reaction, get, set_active_reaction } from '../internal/client/runtime.js';
|
|
6
|
+
import { DEV } from 'esm-env';
|
|
7
|
+
|
|
8
|
+
var inited = false;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A reactive version of the built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object.
|
|
12
|
+
* Reading the date (whether with methods like `date.getTime()` or `date.toString()`, or via things like [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat))
|
|
13
|
+
* in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)
|
|
14
|
+
* will cause it to be re-evaluated when the value of the date changes.
|
|
15
|
+
*
|
|
16
|
+
* ```svelte
|
|
17
|
+
* <script>
|
|
18
|
+
* import { SvelteDate } from 'svelte/reactivity';
|
|
19
|
+
*
|
|
20
|
+
* const date = new SvelteDate();
|
|
21
|
+
*
|
|
22
|
+
* const formatter = new Intl.DateTimeFormat(undefined, {
|
|
23
|
+
* hour: 'numeric',
|
|
24
|
+
* minute: 'numeric',
|
|
25
|
+
* second: 'numeric'
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* $effect(() => {
|
|
29
|
+
* const interval = setInterval(() => {
|
|
30
|
+
* date.setTime(Date.now());
|
|
31
|
+
* }, 1000);
|
|
32
|
+
*
|
|
33
|
+
* return () => {
|
|
34
|
+
* clearInterval(interval);
|
|
35
|
+
* };
|
|
36
|
+
* });
|
|
37
|
+
* </script>
|
|
38
|
+
*
|
|
39
|
+
* <p>The time is {formatter.format(date)}</p>
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export class SvelteDate extends Date {
|
|
43
|
+
#time = state(super.getTime());
|
|
44
|
+
|
|
45
|
+
/** @type {Map<keyof Date, Source<unknown>>} */
|
|
46
|
+
#deriveds = new Map();
|
|
47
|
+
|
|
48
|
+
#reaction = active_reaction;
|
|
49
|
+
|
|
50
|
+
/** @param {any[]} params */
|
|
51
|
+
constructor(...params) {
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
super(...params);
|
|
54
|
+
|
|
55
|
+
if (DEV) {
|
|
56
|
+
tag(this.#time, 'SvelteDate.#time');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!inited) this.#init();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#init() {
|
|
63
|
+
inited = true;
|
|
64
|
+
|
|
65
|
+
var proto = SvelteDate.prototype;
|
|
66
|
+
var date_proto = Date.prototype;
|
|
67
|
+
|
|
68
|
+
var methods = /** @type {Array<keyof Date & string>} */ (
|
|
69
|
+
Object.getOwnPropertyNames(date_proto)
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
for (const method of methods) {
|
|
73
|
+
if (method.startsWith('get') || method.startsWith('to') || method === 'valueOf') {
|
|
74
|
+
// @ts-ignore
|
|
75
|
+
proto[method] = function (...args) {
|
|
76
|
+
// don't memoize if there are arguments
|
|
77
|
+
// @ts-ignore
|
|
78
|
+
if (args.length > 0) {
|
|
79
|
+
get(this.#time);
|
|
80
|
+
// @ts-ignore
|
|
81
|
+
return date_proto[method].apply(this, args);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
var d = this.#deriveds.get(method);
|
|
85
|
+
|
|
86
|
+
if (d === undefined) {
|
|
87
|
+
// lazily create the derived, but as though it were being
|
|
88
|
+
// created at the same time as the class instance
|
|
89
|
+
const reaction = active_reaction;
|
|
90
|
+
set_active_reaction(this.#reaction);
|
|
91
|
+
|
|
92
|
+
d = derived(() => {
|
|
93
|
+
get(this.#time);
|
|
94
|
+
// @ts-ignore
|
|
95
|
+
return date_proto[method].apply(this, args);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
this.#deriveds.set(method, d);
|
|
99
|
+
|
|
100
|
+
set_active_reaction(reaction);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return get(d);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (method.startsWith('set')) {
|
|
108
|
+
// @ts-ignore
|
|
109
|
+
proto[method] = function (...args) {
|
|
110
|
+
// @ts-ignore
|
|
111
|
+
var result = date_proto[method].apply(this, args);
|
|
112
|
+
set(this.#time, date_proto.getTime.call(this));
|
|
113
|
+
return result;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SvelteDate } from './date.js';
|
|
2
|
+
export { SvelteSet } from './set.js';
|
|
3
|
+
export { SvelteMap } from './map.js';
|
|
4
|
+
export { SvelteURL } from './url.js';
|
|
5
|
+
export { SvelteURLSearchParams } from './url-search-params.js';
|
|
6
|
+
export { MediaQuery } from './media-query.js';
|
|
7
|
+
export { createSubscriber } from './create-subscriber.js';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const SvelteDate = globalThis.Date;
|
|
2
|
+
export const SvelteSet = globalThis.Set;
|
|
3
|
+
export const SvelteMap = globalThis.Map;
|
|
4
|
+
export const SvelteURL = globalThis.URL;
|
|
5
|
+
export const SvelteURLSearchParams = globalThis.URLSearchParams;
|
|
6
|
+
|
|
7
|
+
export class MediaQuery {
|
|
8
|
+
current;
|
|
9
|
+
/**
|
|
10
|
+
* @param {string} query
|
|
11
|
+
* @param {boolean} [matches]
|
|
12
|
+
*/
|
|
13
|
+
constructor(query, matches = false) {
|
|
14
|
+
this.current = matches;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @param {any} _
|
|
20
|
+
*/
|
|
21
|
+
export function createSubscriber(_) {
|
|
22
|
+
return () => {};
|
|
23
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/** @import { Source } from '#client' */
|
|
2
|
+
import { DEV } from 'esm-env';
|
|
3
|
+
import { set, source, state, increment } from '../internal/client/reactivity/sources.js';
|
|
4
|
+
import { label, tag } from '../internal/client/dev/tracing.js';
|
|
5
|
+
import { get, update_version } from '../internal/client/runtime.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.
|
|
9
|
+
* Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)
|
|
10
|
+
* will cause it to be re-evaluated as necessary when the map is updated.
|
|
11
|
+
*
|
|
12
|
+
* Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).
|
|
13
|
+
*
|
|
14
|
+
* ```svelte
|
|
15
|
+
* <script>
|
|
16
|
+
* import { SvelteMap } from 'svelte/reactivity';
|
|
17
|
+
* import { result } from './game.js';
|
|
18
|
+
*
|
|
19
|
+
* let board = new SvelteMap();
|
|
20
|
+
* let player = $state('x');
|
|
21
|
+
* let winner = $derived(result(board));
|
|
22
|
+
*
|
|
23
|
+
* function reset() {
|
|
24
|
+
* player = 'x';
|
|
25
|
+
* board.clear();
|
|
26
|
+
* }
|
|
27
|
+
* </script>
|
|
28
|
+
*
|
|
29
|
+
* <div class="board">
|
|
30
|
+
* {#each Array(9), i}
|
|
31
|
+
* <button
|
|
32
|
+
* disabled={board.has(i) || winner}
|
|
33
|
+
* onclick={() => {
|
|
34
|
+
* board.set(i, player);
|
|
35
|
+
* player = player === 'x' ? 'o' : 'x';
|
|
36
|
+
* }}
|
|
37
|
+
* >{board.get(i)}</button>
|
|
38
|
+
* {/each}
|
|
39
|
+
* </div>
|
|
40
|
+
*
|
|
41
|
+
* {#if winner}
|
|
42
|
+
* <p>{winner} wins!</p>
|
|
43
|
+
* <button onclick={reset}>reset</button>
|
|
44
|
+
* {:else}
|
|
45
|
+
* <p>{player} is next</p>
|
|
46
|
+
* {/if}
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @template K
|
|
50
|
+
* @template V
|
|
51
|
+
* @extends {Map<K, V>}
|
|
52
|
+
*/
|
|
53
|
+
export class SvelteMap extends Map {
|
|
54
|
+
/** @type {Map<K, Source<number>>} */
|
|
55
|
+
#sources = new Map();
|
|
56
|
+
#version = state(0);
|
|
57
|
+
#size = state(0);
|
|
58
|
+
#update_version = update_version || -1;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param {Iterable<readonly [K, V]> | null | undefined} [value]
|
|
62
|
+
*/
|
|
63
|
+
constructor(value) {
|
|
64
|
+
super();
|
|
65
|
+
|
|
66
|
+
if (DEV) {
|
|
67
|
+
// If the value is invalid then the native exception will fire here
|
|
68
|
+
value = new Map(value);
|
|
69
|
+
|
|
70
|
+
tag(this.#version, 'SvelteMap version');
|
|
71
|
+
tag(this.#size, 'SvelteMap.size');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (value) {
|
|
75
|
+
for (var [key, v] of value) {
|
|
76
|
+
super.set(key, v);
|
|
77
|
+
}
|
|
78
|
+
this.#size.v = super.size;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* If the source is being created inside the same reaction as the SvelteMap instance,
|
|
84
|
+
* we use `state` so that it will not be a dependency of the reaction. Otherwise we
|
|
85
|
+
* use `source` so it will be.
|
|
86
|
+
*
|
|
87
|
+
* @template T
|
|
88
|
+
* @param {T} value
|
|
89
|
+
* @returns {Source<T>}
|
|
90
|
+
*/
|
|
91
|
+
#source(value) {
|
|
92
|
+
return update_version === this.#update_version ? state(value) : source(value);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** @param {K} key */
|
|
96
|
+
has(key) {
|
|
97
|
+
var sources = this.#sources;
|
|
98
|
+
var s = sources.get(key);
|
|
99
|
+
|
|
100
|
+
if (s === undefined) {
|
|
101
|
+
var ret = super.get(key);
|
|
102
|
+
if (ret !== undefined) {
|
|
103
|
+
s = this.#source(0);
|
|
104
|
+
|
|
105
|
+
if (DEV) {
|
|
106
|
+
tag(s, `SvelteMap get(${label(key)})`);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
sources.set(key, s);
|
|
110
|
+
} else {
|
|
111
|
+
// We should always track the version in case
|
|
112
|
+
// the Set ever gets this value in the future.
|
|
113
|
+
get(this.#version);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
get(s);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @param {(value: V, key: K, map: Map<K, V>) => void} callbackfn
|
|
124
|
+
* @param {any} [this_arg]
|
|
125
|
+
*/
|
|
126
|
+
forEach(callbackfn, this_arg) {
|
|
127
|
+
this.#read_all();
|
|
128
|
+
super.forEach(callbackfn, this_arg);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** @param {K} key */
|
|
132
|
+
get(key) {
|
|
133
|
+
var sources = this.#sources;
|
|
134
|
+
var s = sources.get(key);
|
|
135
|
+
|
|
136
|
+
if (s === undefined) {
|
|
137
|
+
var ret = super.get(key);
|
|
138
|
+
if (ret !== undefined) {
|
|
139
|
+
s = this.#source(0);
|
|
140
|
+
|
|
141
|
+
if (DEV) {
|
|
142
|
+
tag(s, `SvelteMap get(${label(key)})`);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
sources.set(key, s);
|
|
146
|
+
} else {
|
|
147
|
+
// We should always track the version in case
|
|
148
|
+
// the Set ever gets this value in the future.
|
|
149
|
+
get(this.#version);
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
get(s);
|
|
155
|
+
return super.get(key);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* @param {K} key
|
|
160
|
+
* @param {V} value
|
|
161
|
+
* */
|
|
162
|
+
set(key, value) {
|
|
163
|
+
var sources = this.#sources;
|
|
164
|
+
var s = sources.get(key);
|
|
165
|
+
var prev_res = super.get(key);
|
|
166
|
+
var res = super.set(key, value);
|
|
167
|
+
var version = this.#version;
|
|
168
|
+
|
|
169
|
+
if (s === undefined) {
|
|
170
|
+
s = this.#source(0);
|
|
171
|
+
|
|
172
|
+
if (DEV) {
|
|
173
|
+
tag(s, `SvelteMap get(${label(key)})`);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
sources.set(key, s);
|
|
177
|
+
set(this.#size, super.size);
|
|
178
|
+
increment(version);
|
|
179
|
+
} else if (prev_res !== value) {
|
|
180
|
+
increment(s);
|
|
181
|
+
|
|
182
|
+
// if not every reaction of s is a reaction of version we need to also include version
|
|
183
|
+
var v_reactions = version.reactions === null ? null : new Set(version.reactions);
|
|
184
|
+
var needs_version_increase =
|
|
185
|
+
v_reactions === null ||
|
|
186
|
+
!s.reactions?.every((r) =>
|
|
187
|
+
/** @type {NonNullable<typeof v_reactions>} */ (v_reactions).has(r)
|
|
188
|
+
);
|
|
189
|
+
if (needs_version_increase) {
|
|
190
|
+
increment(version);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return res;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/** @param {K} key */
|
|
198
|
+
delete(key) {
|
|
199
|
+
var sources = this.#sources;
|
|
200
|
+
var s = sources.get(key);
|
|
201
|
+
var res = super.delete(key);
|
|
202
|
+
|
|
203
|
+
if (s !== undefined) {
|
|
204
|
+
sources.delete(key);
|
|
205
|
+
set(this.#size, super.size);
|
|
206
|
+
set(s, -1);
|
|
207
|
+
increment(this.#version);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return res;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
clear() {
|
|
214
|
+
if (super.size === 0) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
// Clear first, so we get nice console.log outputs with $inspect
|
|
218
|
+
super.clear();
|
|
219
|
+
var sources = this.#sources;
|
|
220
|
+
set(this.#size, 0);
|
|
221
|
+
for (var s of sources.values()) {
|
|
222
|
+
set(s, -1);
|
|
223
|
+
}
|
|
224
|
+
increment(this.#version);
|
|
225
|
+
sources.clear();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
#read_all() {
|
|
229
|
+
get(this.#version);
|
|
230
|
+
|
|
231
|
+
var sources = this.#sources;
|
|
232
|
+
if (this.#size.v !== sources.size) {
|
|
233
|
+
for (var key of super.keys()) {
|
|
234
|
+
if (!sources.has(key)) {
|
|
235
|
+
var s = this.#source(0);
|
|
236
|
+
if (DEV) {
|
|
237
|
+
tag(s, `SvelteMap get(${label(key)})`);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
sources.set(key, s);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
for ([, s] of this.#sources) {
|
|
246
|
+
get(s);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
keys() {
|
|
251
|
+
get(this.#version);
|
|
252
|
+
return super.keys();
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
values() {
|
|
256
|
+
this.#read_all();
|
|
257
|
+
return super.values();
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
entries() {
|
|
261
|
+
this.#read_all();
|
|
262
|
+
return super.entries();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
[Symbol.iterator]() {
|
|
266
|
+
return this.entries();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
get size() {
|
|
270
|
+
get(this.#size);
|
|
271
|
+
return super.size;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { on } from '../events/index.js';
|
|
2
|
+
import { ReactiveValue } from './reactive-value.js';
|
|
3
|
+
|
|
4
|
+
const parenthesis_regex = /\(.+\)/;
|
|
5
|
+
|
|
6
|
+
// these keywords are valid media queries but they need to be without parenthesis
|
|
7
|
+
//
|
|
8
|
+
// eg: new MediaQuery('screen')
|
|
9
|
+
//
|
|
10
|
+
// however because of the auto-parenthesis logic in the constructor since there's no parenthesis
|
|
11
|
+
// in the media query they'll be surrounded by parenthesis
|
|
12
|
+
//
|
|
13
|
+
// however we can check if the media query is only composed of these keywords
|
|
14
|
+
// and skip the auto-parenthesis
|
|
15
|
+
//
|
|
16
|
+
// https://github.com/sveltejs/svelte/issues/15930
|
|
17
|
+
const non_parenthesized_keywords = new Set(['all', 'print', 'screen', 'and', 'or', 'not', 'only']);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Creates a media query and provides a `current` property that reflects whether or not it matches.
|
|
21
|
+
*
|
|
22
|
+
* Use it carefully — during server-side rendering, there is no way to know what the correct value should be, potentially causing content to change upon hydration.
|
|
23
|
+
* If you can use the media query in CSS to achieve the same effect, do that.
|
|
24
|
+
*
|
|
25
|
+
* ```svelte
|
|
26
|
+
* <script>
|
|
27
|
+
* import { MediaQuery } from 'svelte/reactivity';
|
|
28
|
+
*
|
|
29
|
+
* const large = new MediaQuery('min-width: 800px');
|
|
30
|
+
* </script>
|
|
31
|
+
*
|
|
32
|
+
* <h1>{large.current ? 'large screen' : 'small screen'}</h1>
|
|
33
|
+
* ```
|
|
34
|
+
* @extends {ReactiveValue<boolean>}
|
|
35
|
+
* @since 5.7.0
|
|
36
|
+
*/
|
|
37
|
+
export class MediaQuery extends ReactiveValue {
|
|
38
|
+
/**
|
|
39
|
+
* @param {string} query A media query string
|
|
40
|
+
* @param {boolean} [fallback] Fallback value for the server
|
|
41
|
+
*/
|
|
42
|
+
constructor(query, fallback) {
|
|
43
|
+
let final_query =
|
|
44
|
+
parenthesis_regex.test(query) ||
|
|
45
|
+
// we need to use `some` here because technically this `window.matchMedia('random,screen')` still returns true
|
|
46
|
+
query.split(/[\s,]+/).some((keyword) => non_parenthesized_keywords.has(keyword.trim()))
|
|
47
|
+
? query
|
|
48
|
+
: `(${query})`;
|
|
49
|
+
const q = window.matchMedia(final_query);
|
|
50
|
+
super(
|
|
51
|
+
() => q.matches,
|
|
52
|
+
(update) => on(q, 'change', update)
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createSubscriber } from './create-subscriber.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @template T
|
|
5
|
+
*/
|
|
6
|
+
export class ReactiveValue {
|
|
7
|
+
#fn;
|
|
8
|
+
#subscribe;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param {() => T} fn
|
|
13
|
+
* @param {(update: () => void) => void} onsubscribe
|
|
14
|
+
*/
|
|
15
|
+
constructor(fn, onsubscribe) {
|
|
16
|
+
this.#fn = fn;
|
|
17
|
+
this.#subscribe = createSubscriber(onsubscribe);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get current() {
|
|
21
|
+
this.#subscribe();
|
|
22
|
+
return this.#fn();
|
|
23
|
+
}
|
|
24
|
+
}
|