From f4c4d99e136831934364d89f032922881feb7bc0 Mon Sep 17 00:00:00 2001
From: Nguyen Tran <88808276+ngtr6788@users.noreply.github.com>
Date: Mon, 7 Aug 2023 03:35:16 -0400
Subject: [PATCH 01/65] fix: add test so #6009 doesn't regress (#9075)
closes #6009
---
.../input.svelte | 7 +++++++
.../warnings.json | 1 +
2 files changed, 8 insertions(+)
create mode 100644 packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/input.svelte
create mode 100644 packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/warnings.json
diff --git a/packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/input.svelte b/packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/input.svelte
new file mode 100644
index 0000000000..c3c3319309
--- /dev/null
+++ b/packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/input.svelte
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/warnings.json b/packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/warnings.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/packages/svelte/test/validator/samples/no-missing-declarations-for-same-node-let-variable/warnings.json
@@ -0,0 +1 @@
+[]
From 8b1cdde548b5eaee58380773eaae0d07c29251ab Mon Sep 17 00:00:00 2001
From: Artxe2 <60684815+Artxe2@users.noreply.github.com>
Date: Fri, 11 Aug 2023 21:26:31 +0900
Subject: [PATCH 02/65] fix:change typescript url (#9093)
---
packages/svelte/scripts/globals-extractor.js | 2 +-
packages/svelte/src/compiler/utils/globals.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/svelte/scripts/globals-extractor.js b/packages/svelte/scripts/globals-extractor.js
index 13f1c87f9a..c35a39a84f 100644
--- a/packages/svelte/scripts/globals-extractor.js
+++ b/packages/svelte/scripts/globals-extractor.js
@@ -16,7 +16,7 @@ const GLOBAL_TS_PATH = './src/compiler/utils/globals.js';
const SPECIALS = ['global', 'globalThis', 'InternalError', 'process', 'undefined'];
const get_url = (name) =>
- `https://raw.githubusercontent.com/microsoft/TypeScript/main/lib/lib.${name}.d.ts`;
+ `https://raw.githubusercontent.com/microsoft/TypeScript/main/src/lib/${name}.d.ts`;
const extract_name = (split) => split.match(/^[a-zA-Z0-9_$]+/)[0];
const extract_functions_and_references = (name, data) => {
diff --git a/packages/svelte/src/compiler/utils/globals.js b/packages/svelte/src/compiler/utils/globals.js
index 0d6d0642f9..87c7dfb9c2 100644
--- a/packages/svelte/src/compiler/utils/globals.js
+++ b/packages/svelte/src/compiler/utils/globals.js
@@ -1,6 +1,6 @@
/** ----------------------------------------------------------------------
This file is automatically generated by `scripts/globals-extractor.js`.
-Generated At: 2023-05-24T13:16:20.777Z
+Generated At: 2023-08-11T04:11:50.562Z
---------------------------------------------------------------------- */
export default new Set([
From 05f99d20f9030f56b4991d0a07c3919be5f529ee Mon Sep 17 00:00:00 2001
From: "Lyu, Wei-Da" <36730922+jasonlyu123@users.noreply.github.com>
Date: Fri, 11 Aug 2023 21:54:20 +0800
Subject: [PATCH 03/65] feat: move svelteHTML to load the correct
svelte/element (#9070)
Make IntrinsicElements extends SvelteHTMLElements
so it can be extend with declare module
converting to module so it can extend without needing another type alias
---------
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
---
.changeset/slimy-dingos-call.md | 5 +
documentation/docs/05-misc/03-typescript.md | 18 ++
packages/svelte/package.json | 1 +
packages/svelte/svelte-html.d.ts | 252 ++++++++++++++++++++
4 files changed, 276 insertions(+)
create mode 100644 .changeset/slimy-dingos-call.md
create mode 100644 packages/svelte/svelte-html.d.ts
diff --git a/.changeset/slimy-dingos-call.md b/.changeset/slimy-dingos-call.md
new file mode 100644
index 0000000000..4ecb122ae2
--- /dev/null
+++ b/.changeset/slimy-dingos-call.md
@@ -0,0 +1,5 @@
+---
+'svelte': minor
+---
+
+feat: move `svelteHTML` from language-tools into core to load the correct `svelte/element` types
diff --git a/documentation/docs/05-misc/03-typescript.md b/documentation/docs/05-misc/03-typescript.md
index d5772fa157..b88c6f5c9f 100644
--- a/documentation/docs/05-misc/03-typescript.md
+++ b/documentation/docs/05-misc/03-typescript.md
@@ -140,6 +140,24 @@ declare namespace svelteHTML {
Then make sure that `d.ts` file is referenced in your `tsconfig.json`. If it reads something like `"include": ["src/**/*"]` and your `d.ts` file is inside `src`, it should work. You may need to reload for the changes to take effect.
+Since Svelte version 4.2 / `svelte-check` version 3.5 / VS Code extension version 107.10.0 you can also declare the typings by augmenting the the `svelte/elements` module like this:
+
+```js
+/// file: additional-svelte-typings.d.ts
+import { HTMLButtonAttributes } from 'svelte/elements'
+
+declare module 'svelte/elements' {
+ export interface SvelteHTMLElements {
+ 'custom-button': HTMLButtonAttributes;
+ }
+
+ // allows for more granular control over what element to add the typings to
+ export interface HTMLButtonAttributes {
+ 'veryexperimentalattribute'?: string;
+ }
+}
+```
+
## Experimental advanced typings
A few features are missing from taking full advantage of TypeScript in more advanced use cases like typing that a component implements a certain interface, explicitly typing slots, or using generics. These things are possible using experimental advanced type capabilities. See [this RFC](https://github.com/dummdidumm/rfcs/blob/ts-typedefs-within-svelte-components/text/ts-typing-props-slots-events.md) for more information on how to make use of them.
diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index 8a294c6dff..cbc11b3da7 100644
--- a/packages/svelte/package.json
+++ b/packages/svelte/package.json
@@ -19,6 +19,7 @@
"motion.d.ts",
"action.d.ts",
"elements.d.ts",
+ "svelte-html.d.ts",
"README.md"
],
"exports": {
diff --git a/packages/svelte/svelte-html.d.ts b/packages/svelte/svelte-html.d.ts
new file mode 100644
index 0000000000..3547ad0d33
--- /dev/null
+++ b/packages/svelte/svelte-html.d.ts
@@ -0,0 +1,252 @@
+///
+// This file is deliberately not exposed through the exports map.
+// It's meant to be loaded directly by the Svelte language server
+/* eslint-disable @typescript-eslint/no-empty-interface */
+
+import * as svelteElements from './elements.js';
+
+/**
+ * @internal do not use
+ */
+type HTMLProps = Omit<
+ import('./elements.js').SvelteHTMLElements[Property],
+ keyof Override
+> &
+ Override;
+
+declare global {
+ /**
+ * This namespace does not exist in the runtime, it is only used for typings
+ */
+ namespace svelteHTML {
+ // Every namespace eligible for use needs to implement the following two functions
+ /**
+ * @internal do not use
+ */
+ function mapElementTag(tag: K): ElementTagNameMap[K];
+ function mapElementTag(tag: K): SVGElementTagNameMap[K];
+ function mapElementTag(tag: any): any; // needs to be any because used in context of
+
+ /**
+ * @internal do not use
+ */
+ function createElement(
+ // "undefined | null" because of
+ element: Key | undefined | null,
+ attrs: string extends Key ? svelteElements.HTMLAttributes : Elements[Key]
+ ): Key extends keyof ElementTagNameMap
+ ? ElementTagNameMap[Key]
+ : Key extends keyof SVGElementTagNameMap
+ ? SVGElementTagNameMap[Key]
+ : any;
+ function createElement(
+ // "undefined | null" because of
+ element: Key | undefined | null,
+ attrsEnhancers: T,
+ attrs: (string extends Key ? svelteElements.HTMLAttributes : Elements[Key]) & T
+ ): Key extends keyof ElementTagNameMap
+ ? ElementTagNameMap[Key]
+ : Key extends keyof SVGElementTagNameMap
+ ? SVGElementTagNameMap[Key]
+ : any;
+
+ // For backwards-compatibility and ease-of-use, in case someone enhanced the typings from import('svelte/elements').HTMLAttributes/SVGAttributes
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ interface HTMLAttributes {}
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ interface SVGAttributes {}
+
+ /**
+ * Avoid using this interface directly. Instead use the `SvelteHTMLElements` interface exported by `svelte/elements`
+ * This should only be used if you need to extend the interface with custom elements
+ */
+ interface IntrinsicElements extends svelteElements.SvelteHTMLElements {
+ a: HTMLProps<'a', HTMLAttributes>;
+ abbr: HTMLProps<'abbr', HTMLAttributes>;
+ address: HTMLProps<'address', HTMLAttributes>;
+ area: HTMLProps<'area', HTMLAttributes>;
+ article: HTMLProps<'article', HTMLAttributes>;
+ aside: HTMLProps<'aside', HTMLAttributes>;
+ audio: HTMLProps<'audio', HTMLAttributes>;
+ b: HTMLProps<'b', HTMLAttributes>;
+ base: HTMLProps<'base', HTMLAttributes>;
+ bdi: HTMLProps<'bdi', HTMLAttributes>;
+ bdo: HTMLProps<'bdo', HTMLAttributes>;
+ big: HTMLProps<'big', HTMLAttributes>;
+ blockquote: HTMLProps<'blockquote', HTMLAttributes>;
+ body: HTMLProps<'body', HTMLAttributes>;
+ br: HTMLProps<'br', HTMLAttributes>;
+ button: HTMLProps<'button', HTMLAttributes>;
+ canvas: HTMLProps<'canvas', HTMLAttributes>;
+ caption: HTMLProps<'caption', HTMLAttributes>;
+ cite: HTMLProps<'cite', HTMLAttributes>;
+ code: HTMLProps<'code', HTMLAttributes>;
+ col: HTMLProps<'col', HTMLAttributes>;
+ colgroup: HTMLProps<'colgroup', HTMLAttributes>;
+ data: HTMLProps<'data', HTMLAttributes>;
+ datalist: HTMLProps<'datalist', HTMLAttributes>;
+ dd: HTMLProps<'dd', HTMLAttributes>;
+ del: HTMLProps<'del', HTMLAttributes>;
+ details: HTMLProps<'details', HTMLAttributes>;
+ dfn: HTMLProps<'dfn', HTMLAttributes>;
+ dialog: HTMLProps<'dialog', HTMLAttributes>;
+ div: HTMLProps<'div', HTMLAttributes>;
+ dl: HTMLProps<'dl', HTMLAttributes>;
+ dt: HTMLProps<'dt', HTMLAttributes>;
+ em: HTMLProps<'em', HTMLAttributes>;
+ embed: HTMLProps<'embed', HTMLAttributes>;
+ fieldset: HTMLProps<'fieldset', HTMLAttributes>;
+ figcaption: HTMLProps<'figcaption', HTMLAttributes>;
+ figure: HTMLProps<'figure', HTMLAttributes>;
+ footer: HTMLProps<'footer', HTMLAttributes>;
+ form: HTMLProps<'form', HTMLAttributes>;
+ h1: HTMLProps<'h1', HTMLAttributes>;
+ h2: HTMLProps<'h2', HTMLAttributes>;
+ h3: HTMLProps<'h3', HTMLAttributes>;
+ h4: HTMLProps<'h4', HTMLAttributes>;
+ h5: HTMLProps<'h5', HTMLAttributes>;
+ h6: HTMLProps<'h6', HTMLAttributes>;
+ head: HTMLProps<'head', HTMLAttributes>;
+ header: HTMLProps<'header', HTMLAttributes>;
+ hgroup: HTMLProps<'hgroup', HTMLAttributes>;
+ hr: HTMLProps<'hr', HTMLAttributes>;
+ html: HTMLProps<'html', HTMLAttributes>;
+ i: HTMLProps<'i', HTMLAttributes>;
+ iframe: HTMLProps<'iframe', HTMLAttributes>;
+ img: HTMLProps<'img', HTMLAttributes>;
+ input: HTMLProps<'input', HTMLAttributes>;
+ ins: HTMLProps<'ins', HTMLAttributes>;
+ kbd: HTMLProps<'kbd', HTMLAttributes>;
+ keygen: HTMLProps<'keygen', HTMLAttributes>;
+ label: HTMLProps<'label', HTMLAttributes>;
+ legend: HTMLProps<'legend', HTMLAttributes>;
+ li: HTMLProps<'li', HTMLAttributes>;
+ link: HTMLProps<'link', HTMLAttributes>;
+ main: HTMLProps<'main', HTMLAttributes>;
+ map: HTMLProps<'map', HTMLAttributes>;
+ mark: HTMLProps<'mark', HTMLAttributes>;
+ menu: HTMLProps<'menu', HTMLAttributes>;
+ menuitem: HTMLProps<'menuitem', HTMLAttributes>;
+ meta: HTMLProps<'meta', HTMLAttributes>;
+ meter: HTMLProps<'meter', HTMLAttributes>;
+ nav: HTMLProps<'nav', HTMLAttributes>;
+ noscript: HTMLProps<'noscript', HTMLAttributes>;
+ object: HTMLProps<'object', HTMLAttributes>;
+ ol: HTMLProps<'ol', HTMLAttributes>;
+ optgroup: HTMLProps<'optgroup', HTMLAttributes>;
+ option: HTMLProps<'option', HTMLAttributes>;
+ output: HTMLProps<'output', HTMLAttributes>;
+ p: HTMLProps<'p', HTMLAttributes>;
+ param: HTMLProps<'param', HTMLAttributes>;
+ picture: HTMLProps<'picture', HTMLAttributes>;
+ pre: HTMLProps<'pre', HTMLAttributes>;
+ progress: HTMLProps<'progress', HTMLAttributes>;
+ q: HTMLProps<'q', HTMLAttributes>;
+ rp: HTMLProps<'rp', HTMLAttributes>;
+ rt: HTMLProps<'rt', HTMLAttributes>;
+ ruby: HTMLProps<'ruby', HTMLAttributes>;
+ s: HTMLProps<'s', HTMLAttributes>;
+ samp: HTMLProps<'samp', HTMLAttributes>;
+ slot: HTMLProps<'slot', HTMLAttributes>;
+ script: HTMLProps<'script', HTMLAttributes>;
+ section: HTMLProps<'section', HTMLAttributes>;
+ select: HTMLProps<'select', HTMLAttributes>;
+ small: HTMLProps<'small', HTMLAttributes>;
+ source: HTMLProps<'source', HTMLAttributes>;
+ span: HTMLProps<'span', HTMLAttributes>;
+ strong: HTMLProps<'strong', HTMLAttributes>;
+ style: HTMLProps<'style', HTMLAttributes>;
+ sub: HTMLProps<'sub', HTMLAttributes>;
+ summary: HTMLProps<'summary', HTMLAttributes>;
+ sup: HTMLProps<'sup', HTMLAttributes>;
+ table: HTMLProps<'table', HTMLAttributes>;
+ template: HTMLProps<'template', HTMLAttributes>;
+ tbody: HTMLProps<'tbody', HTMLAttributes>;
+ td: HTMLProps<'td', HTMLAttributes>;
+ textarea: HTMLProps<'textarea', HTMLAttributes>;
+ tfoot: HTMLProps<'tfoot', HTMLAttributes>;
+ th: HTMLProps<'th', HTMLAttributes>;
+ thead: HTMLProps<'thead', HTMLAttributes>;
+ time: HTMLProps<'time', HTMLAttributes>;
+ title: HTMLProps<'title', HTMLAttributes>;
+ tr: HTMLProps<'tr', HTMLAttributes>;
+ track: HTMLProps<'track', HTMLAttributes>;
+ u: HTMLProps<'u', HTMLAttributes>;
+ ul: HTMLProps<'ul', HTMLAttributes>;
+ var: HTMLProps<'var', HTMLAttributes>;
+ video: HTMLProps<'video', HTMLAttributes>;
+ wbr: HTMLProps<'wbr', HTMLAttributes>;
+ webview: HTMLProps<'webview', HTMLAttributes>;
+ // SVG
+ svg: HTMLProps<'svg', SVGAttributes>;
+
+ animate: HTMLProps<'animate', SVGAttributes>;
+ animateMotion: HTMLProps<'animateMotion', SVGAttributes>;
+ animateTransform: HTMLProps<'animateTransform', SVGAttributes>;
+ circle: HTMLProps<'circle', SVGAttributes>;
+ clipPath: HTMLProps<'clipPath', SVGAttributes>;
+ defs: HTMLProps<'defs', SVGAttributes>;
+ desc: HTMLProps<'desc', SVGAttributes>;
+ ellipse: HTMLProps<'ellipse', SVGAttributes>;
+ feBlend: HTMLProps<'feBlend', SVGAttributes>;
+ feColorMatrix: HTMLProps<'feColorMatrix', SVGAttributes>;
+ feComponentTransfer: HTMLProps<'feComponentTransfer', SVGAttributes>;
+ feComposite: HTMLProps<'feComposite', SVGAttributes>;
+ feConvolveMatrix: HTMLProps<'feConvolveMatrix', SVGAttributes>;
+ feDiffuseLighting: HTMLProps<'feDiffuseLighting', SVGAttributes>;
+ feDisplacementMap: HTMLProps<'feDisplacementMap', SVGAttributes>;
+ feDistantLight: HTMLProps<'feDistantLight', SVGAttributes>;
+ feDropShadow: HTMLProps<'feDropShadow', SVGAttributes>;
+ feFlood: HTMLProps<'feFlood', SVGAttributes>;
+ feFuncA: HTMLProps<'feFuncA', SVGAttributes>;
+ feFuncB: HTMLProps<'feFuncB', SVGAttributes>;
+ feFuncG: HTMLProps<'feFuncG', SVGAttributes>;
+ feFuncR: HTMLProps<'feFuncR', SVGAttributes>;
+ feGaussianBlur: HTMLProps<'feGaussianBlur', SVGAttributes>;
+ feImage: HTMLProps<'feImage', SVGAttributes>;
+ feMerge: HTMLProps<'feMerge', SVGAttributes>;
+ feMergeNode: HTMLProps<'feMergeNode', SVGAttributes>;
+ feMorphology: HTMLProps<'feMorphology', SVGAttributes>;
+ feOffset: HTMLProps<'feOffset', SVGAttributes>;
+ fePointLight: HTMLProps<'fePointLight', SVGAttributes>;
+ feSpecularLighting: HTMLProps<'feSpecularLighting', SVGAttributes>;
+ feSpotLight: HTMLProps<'feSpotLight', SVGAttributes>;
+ feTile: HTMLProps<'feTile', SVGAttributes>;
+ feTurbulence: HTMLProps<'feTurbulence', SVGAttributes>;
+ filter: HTMLProps<'filter', SVGAttributes>;
+ foreignObject: HTMLProps<'foreignObject', SVGAttributes>;
+ g: HTMLProps<'g', SVGAttributes>;
+ image: HTMLProps<'image', SVGAttributes>;
+ line: HTMLProps<'line', SVGAttributes>;
+ linearGradient: HTMLProps<'linearGradient', SVGAttributes>;
+ marker: HTMLProps<'marker', SVGAttributes>;
+ mask: HTMLProps<'mask', SVGAttributes>;
+ metadata: HTMLProps<'metadata', SVGAttributes>;
+ mpath: HTMLProps<'mpath', SVGAttributes>;
+ path: HTMLProps<'path', SVGAttributes>;
+ pattern: HTMLProps<'pattern', SVGAttributes>;
+ polygon: HTMLProps<'polygon', SVGAttributes>;
+ polyline: HTMLProps<'polyline', SVGAttributes>;
+ radialGradient: HTMLProps<'radialGradient', SVGAttributes>;
+ rect: HTMLProps<'rect', SVGAttributes>;
+ stop: HTMLProps<'stop', SVGAttributes>;
+ switch: HTMLProps<'switch', SVGAttributes>;
+ symbol: HTMLProps<'symbol', SVGAttributes>;
+ text: HTMLProps<'text', SVGAttributes>;
+ textPath: HTMLProps<'textPath', SVGAttributes>;
+ tspan: HTMLProps<'tspan', SVGAttributes>;
+ use: HTMLProps<'use', SVGAttributes>;
+ view: HTMLProps<'view', SVGAttributes>;
+
+ // Svelte specific
+ 'svelte:window': HTMLProps<'svelte:window', HTMLAttributes>;
+ 'svelte:body': HTMLProps<'svelte:body', HTMLAttributes>;
+ 'svelte:document': HTMLProps<'svelte:document', HTMLAttributes>;
+ 'svelte:fragment': { slot?: string };
+ 'svelte:options': HTMLProps<'svelte:options', HTMLAttributes>;
+ 'svelte:head': { [name: string]: any };
+
+ [name: string]: { [name: string]: any };
+ }
+ }
+}
From 50c270a54dfe8f7d27ca3a5f3d55c93791bab90b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 11 Aug 2023 16:32:25 +0200
Subject: [PATCH 04/65] Version Packages (#9096)
---------
Co-authored-by: github-actions[bot]
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
---
.changeset/slimy-dingos-call.md | 5 -----
documentation/docs/05-misc/03-typescript.md | 2 +-
packages/svelte/CHANGELOG.md | 6 ++++++
packages/svelte/package.json | 2 +-
packages/svelte/src/shared/version.js | 2 +-
5 files changed, 9 insertions(+), 8 deletions(-)
delete mode 100644 .changeset/slimy-dingos-call.md
diff --git a/.changeset/slimy-dingos-call.md b/.changeset/slimy-dingos-call.md
deleted file mode 100644
index 4ecb122ae2..0000000000
--- a/.changeset/slimy-dingos-call.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': minor
----
-
-feat: move `svelteHTML` from language-tools into core to load the correct `svelte/element` types
diff --git a/documentation/docs/05-misc/03-typescript.md b/documentation/docs/05-misc/03-typescript.md
index b88c6f5c9f..f525810cc6 100644
--- a/documentation/docs/05-misc/03-typescript.md
+++ b/documentation/docs/05-misc/03-typescript.md
@@ -142,7 +142,7 @@ Then make sure that `d.ts` file is referenced in your `tsconfig.json`. If it rea
Since Svelte version 4.2 / `svelte-check` version 3.5 / VS Code extension version 107.10.0 you can also declare the typings by augmenting the the `svelte/elements` module like this:
-```js
+```ts
/// file: additional-svelte-typings.d.ts
import { HTMLButtonAttributes } from 'svelte/elements'
diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md
index aa0313a68a..a7d6cc5e85 100644
--- a/packages/svelte/CHANGELOG.md
+++ b/packages/svelte/CHANGELOG.md
@@ -1,5 +1,11 @@
# svelte
+## 4.2.0
+
+### Minor Changes
+
+- feat: move `svelteHTML` from language-tools into core to load the correct `svelte/element` types ([#9070](https://github.com/sveltejs/svelte/pull/9070))
+
## 4.1.2
### Patch Changes
diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index cbc11b3da7..357bfba31b 100644
--- a/packages/svelte/package.json
+++ b/packages/svelte/package.json
@@ -1,6 +1,6 @@
{
"name": "svelte",
- "version": "4.1.2",
+ "version": "4.2.0",
"description": "Cybernetically enhanced web apps",
"type": "module",
"module": "src/runtime/index.js",
diff --git a/packages/svelte/src/shared/version.js b/packages/svelte/src/shared/version.js
index 755a1cac33..29e3707aa8 100644
--- a/packages/svelte/src/shared/version.js
+++ b/packages/svelte/src/shared/version.js
@@ -6,5 +6,5 @@
* https://svelte.dev/docs/svelte-compiler#svelte-version
* @type {string}
*/
-export const VERSION = '4.1.2';
+export const VERSION = '4.2.0';
export const PUBLIC_VERSION = '4';
From 3597cedbd8c57110a085e718ce44428ab2e385eb Mon Sep 17 00:00:00 2001
From: Eric Liu
Date: Sat, 12 Aug 2023 12:04:51 -0700
Subject: [PATCH 05/65] docs: fix typo in August newsletter (#9100)
---
.../blog/2023-08-01-whats-new-in-svelte-august-2023.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/documentation/blog/2023-08-01-whats-new-in-svelte-august-2023.md b/documentation/blog/2023-08-01-whats-new-in-svelte-august-2023.md
index d14e1a7a08..e7b27d65f7 100644
--- a/documentation/blog/2023-08-01-whats-new-in-svelte-august-2023.md
+++ b/documentation/blog/2023-08-01-whats-new-in-svelte-august-2023.md
@@ -46,7 +46,7 @@ For all the patches and performance updates from this month, check out the [Svel
**Learning Resources**
_Featuring Svelte Contributors and Ambassadors_
- [Exploring Svelte 4 w/ Kevin AK: Performance, Compatibility, & Web Component Support | Modern Web Pod](https://www.youtube.com/watch?v=YOL0HGGVib4) by This Dot Media
-- [Svelte Sirens Stream Design Systems: Lessons Learned](https://www.youtube.com/live/YHZaiIGSqsE?feature=share) featuring Eric Liu creator of Carbon Components Svelte and Svelde the docgen library
+- [Svelte Sirens Stream Design Systems: Lessons Learned](https://www.youtube.com/live/YHZaiIGSqsE?feature=share) featuring Eric Liu, creator of Carbon Components Svelte and the `sveld` docgen library
- This Week in Svelte:
- [2023 June 30](https://www.youtube.com/watch?v=sDz4_BLoYQ4) - Svelte 4.0.1, SK 1.21, lists, screen readers, loading
- [2023 July 7](https://www.youtube.com/watch?v=0tq1ph4DDFA) - Svelte 4.0.5, Kit 1.22.1, Svelte 5, local storage and markdown
From 037b6ce312bf5608d9dedfb7807a3e53e684e6e8 Mon Sep 17 00:00:00 2001
From: Andy Pan
Date: Sun, 13 Aug 2023 15:56:29 +0800
Subject: [PATCH 06/65] docs: Fix a regression for a quoted-attribute example
(#9103)
* Fix a doc regression for a quoted-attribute example
* Prettier ignore
---------
Co-authored-by: Puru Vijay <47742487+PuruVJ@users.noreply.github.com>
---
documentation/docs/02-template-syntax/02-basic-markup.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/documentation/docs/02-template-syntax/02-basic-markup.md b/documentation/docs/02-template-syntax/02-basic-markup.md
index 9e230078b5..dbdc55c060 100644
--- a/documentation/docs/02-template-syntax/02-basic-markup.md
+++ b/documentation/docs/02-template-syntax/02-basic-markup.md
@@ -56,8 +56,9 @@ All other attributes are included unless their value is [nullish](https://develo
An expression might include characters that would cause syntax highlighting to fail in regular HTML, so quoting the value is permitted. The quotes do not affect how the value is parsed:
+
```svelte
-
+
```
When the attribute name and value match (`name={name}`), they can be replaced with `{name}`.
From da3cc6c0a0a09df780e6479389165f1283424be5 Mon Sep 17 00:00:00 2001
From: Romain l'Ourson
Date: Mon, 14 Aug 2023 05:35:42 +0200
Subject: [PATCH 07/65] fix: typo (#9102)
---
documentation/docs/05-misc/03-typescript.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/documentation/docs/05-misc/03-typescript.md b/documentation/docs/05-misc/03-typescript.md
index f525810cc6..32580ca644 100644
--- a/documentation/docs/05-misc/03-typescript.md
+++ b/documentation/docs/05-misc/03-typescript.md
@@ -140,7 +140,7 @@ declare namespace svelteHTML {
Then make sure that `d.ts` file is referenced in your `tsconfig.json`. If it reads something like `"include": ["src/**/*"]` and your `d.ts` file is inside `src`, it should work. You may need to reload for the changes to take effect.
-Since Svelte version 4.2 / `svelte-check` version 3.5 / VS Code extension version 107.10.0 you can also declare the typings by augmenting the the `svelte/elements` module like this:
+Since Svelte version 4.2 / `svelte-check` version 3.5 / VS Code extension version 107.10.0 you can also declare the typings by augmenting the `svelte/elements` module like this:
```ts
/// file: additional-svelte-typings.d.ts
From d2ed2ca32918eab7da531a42021946f6149afdc4 Mon Sep 17 00:00:00 2001
From: Simon H <5968653+dummdidumm@users.noreply.github.com>
Date: Tue, 15 Aug 2023 16:07:33 +0200
Subject: [PATCH 08/65] docs: note ambient module info (#9106)
---
documentation/docs/05-misc/03-typescript.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/documentation/docs/05-misc/03-typescript.md b/documentation/docs/05-misc/03-typescript.md
index 32580ca644..00bf2e826b 100644
--- a/documentation/docs/05-misc/03-typescript.md
+++ b/documentation/docs/05-misc/03-typescript.md
@@ -156,6 +156,8 @@ declare module 'svelte/elements' {
'veryexperimentalattribute'?: string;
}
}
+
+export {}; // ensure this is not an ambient module, else types will be overridden instead of augmented
```
## Experimental advanced typings
From 5a8c1d2cafe8217aa1a6408b024571d3d655a431 Mon Sep 17 00:00:00 2001
From: Ben McCann <322311+benmccann@users.noreply.github.com>
Date: Fri, 18 Aug 2023 11:59:20 -0700
Subject: [PATCH 09/65] site: fix removal of tutorial from search engines
(#9117)
---
sites/svelte.dev/src/routes/tutorial/+layout.svelte | 5 +++++
sites/svelte.dev/static/robots.txt | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
create mode 100644 sites/svelte.dev/src/routes/tutorial/+layout.svelte
diff --git a/sites/svelte.dev/src/routes/tutorial/+layout.svelte b/sites/svelte.dev/src/routes/tutorial/+layout.svelte
new file mode 100644
index 0000000000..824d5fa141
--- /dev/null
+++ b/sites/svelte.dev/src/routes/tutorial/+layout.svelte
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/sites/svelte.dev/static/robots.txt b/sites/svelte.dev/static/robots.txt
index a70a37514a..eb0536286f 100644
--- a/sites/svelte.dev/static/robots.txt
+++ b/sites/svelte.dev/static/robots.txt
@@ -1,2 +1,2 @@
User-agent: *
-Disallow: /tutorial/* # new tutorial is at learn.svelte.dev
+Disallow:
From ba1e67844e268700406f81188c36d673d6339f35 Mon Sep 17 00:00:00 2001
From: gtmnayan <50981692+gtm-nayan@users.noreply.github.com>
Date: Sun, 20 Aug 2023 16:19:32 +0545
Subject: [PATCH 10/65] fix: css sourcemap generation with unicode filenames
(#9120)
* fix: css sourcemap generation with unicode filenames
* format
---
.changeset/eighty-poems-deliver.md | 5 +++++
packages/svelte/src/compiler/utils/mapped_code.js | 13 ++++++++++++-
2 files changed, 17 insertions(+), 1 deletion(-)
create mode 100644 .changeset/eighty-poems-deliver.md
diff --git a/.changeset/eighty-poems-deliver.md b/.changeset/eighty-poems-deliver.md
new file mode 100644
index 0000000000..a209b85bd4
--- /dev/null
+++ b/.changeset/eighty-poems-deliver.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: css sourcemap generation with unicode filenames
diff --git a/packages/svelte/src/compiler/utils/mapped_code.js b/packages/svelte/src/compiler/utils/mapped_code.js
index 0987b85ada..22645dd44b 100644
--- a/packages/svelte/src/compiler/utils/mapped_code.js
+++ b/packages/svelte/src/compiler/utils/mapped_code.js
@@ -292,7 +292,18 @@ export function apply_preprocessor_sourcemap(filename, svelte_map, preprocessor_
toUrl: {
enumerable: false,
value: function toUrl() {
- return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
+ let b64 = '';
+ if (typeof window !== 'undefined' && window.btoa) {
+ // btoa doesn't support multi-byte characters
+ b64 = window.btoa(unescape(encodeURIComponent(this.toString())));
+ } else if (typeof Buffer !== 'undefined') {
+ b64 = Buffer.from(this.toString(), 'utf8').toString('base64');
+ } else {
+ throw new Error(
+ 'Unsupported environment: `window.btoa` or `Buffer` should be present to use toUrl.'
+ );
+ }
+ return 'data:application/json;charset=utf-8;base64,' + b64;
}
}
});
From d06cfe37239ca64b1a9f9178cfbb8eeaf12f7ffb Mon Sep 17 00:00:00 2001
From: gtmnayan <50981692+gtm-nayan@users.noreply.github.com>
Date: Sun, 20 Aug 2023 19:02:40 +0545
Subject: [PATCH 11/65] chore: render head output in playground (#9123)
---
packages/playground/start.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/packages/playground/start.js b/packages/playground/start.js
index af37a40e26..ace479ac9f 100644
--- a/packages/playground/start.js
+++ b/packages/playground/start.js
@@ -69,11 +69,12 @@ const watcher = watch([
async generateBundle(_, bundle) {
const result = bundle['entry-server.js'];
const mod = (0, eval)(result.code);
- const { html } = mod.render();
+ const { html, head } = mod.render();
writeFileSync(
'dist/index.html',
readFileSync('src/template.html', 'utf-8')
+ .replace('', head)
.replace('', html)
.replace('', svelte.VERSION)
);
From 670200c78cba68f72a0157a552af6d87f36ae9d8 Mon Sep 17 00:00:00 2001
From: Ben McCann <322311+benmccann@users.noreply.github.com>
Date: Mon, 21 Aug 2023 02:03:18 -0700
Subject: [PATCH 12/65] site: remove unused font files (#9119)
---
.../src/routes/_components/Demo.svelte | 4 ----
.../fonts/fira-mono/fira-mono-latin-400.woff2 | Bin 16528 -> 0 bytes
.../fonts/overpass/overpass-latin-100.woff2 | Bin 18836 -> 0 bytes
.../fonts/overpass/overpass-latin-300.woff2 | Bin 19364 -> 0 bytes
.../fonts/overpass/overpass-latin-400.woff2 | Bin 19800 -> 0 bytes
.../fonts/overpass/overpass-latin-600.woff2 | Bin 19404 -> 0 bytes
.../fonts/overpass/overpass-latin-700.woff2 | Bin 19924 -> 0 bytes
.../static/fonts/roboto/roboto-latin-400.woff2 | Bin 15344 -> 0 bytes
.../fonts/roboto/roboto-latin-400italic.woff2 | Bin 16944 -> 0 bytes
.../static/fonts/roboto/roboto-latin-500.woff2 | Bin 15552 -> 0 bytes
.../fonts/roboto/roboto-latin-500italic.woff2 | Bin 16940 -> 0 bytes
11 files changed, 4 deletions(-)
delete mode 100644 sites/svelte.dev/static/fonts/fira-mono/fira-mono-latin-400.woff2
delete mode 100644 sites/svelte.dev/static/fonts/overpass/overpass-latin-100.woff2
delete mode 100644 sites/svelte.dev/static/fonts/overpass/overpass-latin-300.woff2
delete mode 100644 sites/svelte.dev/static/fonts/overpass/overpass-latin-400.woff2
delete mode 100644 sites/svelte.dev/static/fonts/overpass/overpass-latin-600.woff2
delete mode 100644 sites/svelte.dev/static/fonts/overpass/overpass-latin-700.woff2
delete mode 100644 sites/svelte.dev/static/fonts/roboto/roboto-latin-400.woff2
delete mode 100644 sites/svelte.dev/static/fonts/roboto/roboto-latin-400italic.woff2
delete mode 100644 sites/svelte.dev/static/fonts/roboto/roboto-latin-500.woff2
delete mode 100644 sites/svelte.dev/static/fonts/roboto/roboto-latin-500italic.woff2
diff --git a/sites/svelte.dev/src/routes/_components/Demo.svelte b/sites/svelte.dev/src/routes/_components/Demo.svelte
index 3ddab56964..ecee643a0a 100644
--- a/sites/svelte.dev/src/routes/_components/Demo.svelte
+++ b/sites/svelte.dev/src/routes/_components/Demo.svelte
@@ -31,10 +31,6 @@
let selected = examples[0];
-
-
-
-
build with ease
diff --git a/sites/svelte.dev/static/fonts/fira-mono/fira-mono-latin-400.woff2 b/sites/svelte.dev/static/fonts/fira-mono/fira-mono-latin-400.woff2
deleted file mode 100644
index e81b9f3c56ccc92bf6b0d80171fb29cdedcc6de3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 16528
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