From e6bf16e35fa01593a9c2ea5bcdfc7a5c7c0ab75d Mon Sep 17 00:00:00 2001 From: Conduitry Date: Fri, 19 Aug 2022 15:40:27 -0400 Subject: [PATCH 1/5] keep browser stores in always-accessible singleton --- packages/kit/src/core/sync/write_root.js | 5 ++++- packages/kit/src/runtime/app/stores.js | 3 ++- packages/kit/src/runtime/client/client.js | 18 ++---------------- packages/kit/src/runtime/client/singletons.js | 10 ++++++++++ 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/kit/src/core/sync/write_root.js b/packages/kit/src/core/sync/write_root.js index c71e30f5b9d4..0dd8536bdd37 100644 --- a/packages/kit/src/core/sync/write_root.js +++ b/packages/kit/src/core/sync/write_root.js @@ -43,6 +43,7 @@ export function write_root(manifest_data, output) { + +

{pathname}

+ + diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js index 05be5cf424ec..f95a9568de7c 100644 --- a/packages/kit/test/apps/basics/test/client.test.js +++ b/packages/kit/test/apps/basics/test/client.test.js @@ -585,3 +585,10 @@ test('Can use browser-only global on client-only page', async ({ page, read_erro await expect(page.locator('p')).toHaveText('Works'); expect(read_errors('/no-ssr/browser-only-global')).toBe(undefined); }); + +test('can use $app/stores from anywhere on client', async ({ page }) => { + await page.goto('/store/client-access'); + await expect(page.locator('h1')).toHaveText('undefined'); + await page.click('button'); + await expect(page.locator('h1')).toHaveText('/store/client-access'); +}); From 41537d233ad74a44d6261c72fa1056db0a43ce36 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Sat, 20 Aug 2022 09:06:54 -0400 Subject: [PATCH 4/5] add changeset --- .changeset/gentle-years-leave.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/gentle-years-leave.md diff --git a/.changeset/gentle-years-leave.md b/.changeset/gentle-years-leave.md new file mode 100644 index 000000000000..9b512b8dce33 --- /dev/null +++ b/.changeset/gentle-years-leave.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Allow `$app/stores` to be used from anywhere on the browser From ce51908c94b6276075522fa054ab1450e3c6092c Mon Sep 17 00:00:00 2001 From: Conduitry Date: Sat, 20 Aug 2022 09:30:17 -0400 Subject: [PATCH 5/5] update getStores docs --- packages/kit/types/ambient.d.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/kit/types/ambient.d.ts b/packages/kit/types/ambient.d.ts index aee0b123cb82..678de3ebe48d 100644 --- a/packages/kit/types/ambient.d.ts +++ b/packages/kit/types/ambient.d.ts @@ -226,16 +226,6 @@ declare module '$app/stores' { import { Readable } from 'svelte/store'; import { Navigation, Page } from '@sveltejs/kit'; - /** - * A convenience function around `getContext`. Must be called during component initialization. - * Only use this if you need to defer store subscription until after the component has mounted, for some reason. - */ - export function getStores(): { - navigating: typeof navigating; - page: typeof page; - updated: typeof updated; - }; - /** * A readable store whose value contains page data. */ @@ -250,6 +240,16 @@ declare module '$app/stores' { * A readable store whose initial value is `false`. If [`version.pollInterval`](https://kit.svelte.dev/docs/configuration#version) is a non-zero value, SvelteKit will poll for new versions of the app and update the store value to `true` when it detects one. `updated.check()` will force an immediate check, regardless of polling. */ export const updated: Readable & { check: () => boolean }; + + /** + * A function that returns all of the contextual stores. On the server, this must be called during component initialization. + * Only use this if you need to defer store subscription until after the component has mounted, for some reason. + */ + export function getStores(): { + navigating: typeof navigating; + page: typeof page; + updated: typeof updated; + }; } /**