diff --git a/.changeset/brave-cats-tan.md b/.changeset/brave-cats-tan.md new file mode 100644 index 000000000000..5ca5c1527151 --- /dev/null +++ b/.changeset/brave-cats-tan.md @@ -0,0 +1,5 @@ +--- +"@sveltejs/kit": patch +--- + +fix: remove internal `__sveltekit/` module declarations from types diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index 8eeffb5b2f82..b6d7bd23d5b2 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -1,6 +1,7 @@ import { createBundle } from 'dts-buddy'; +import { readFileSync } from 'fs'; -createBundle({ +await createBundle({ output: 'types/index.d.ts', modules: { '@sveltejs/kit': 'src/exports/public.d.ts', @@ -16,3 +17,12 @@ createBundle({ }, include: ['src'] }); + +// dts-buddy doesn't inline imports of module declaration in ambient-private.d.ts but also doesn't include them, resulting in broken types - guard against that +const types = readFileSync('./types/index.d.ts', 'utf-8'); +if (types.includes('__sveltekit/')) { + throw new Error( + 'Found __sveltekit/ in types/index.d.ts - make sure to hide internal modules by not just reexporting them. Contents:\n\n' + + types + ); +} diff --git a/packages/kit/src/runtime/app/environment.js b/packages/kit/src/runtime/app/environment.js index 8393ee6dbda6..9705116dc51e 100644 --- a/packages/kit/src/runtime/app/environment.js +++ b/packages/kit/src/runtime/app/environment.js @@ -1,5 +1,15 @@ import { BROWSER, DEV } from 'esm-env'; -export { building, version } from '__sveltekit/environment'; +import { building as _building, version as _version } from '__sveltekit/environment'; + +/** + * SvelteKit analyses your app during the `build` step by running it. During this process, `building` is `true`. This also applies during prerendering. + */ +export const building = _building; + +/** + * The value of `config.kit.version.name`. + */ +export const version = _version; /** * `true` if the app is running in the browser. diff --git a/packages/kit/src/runtime/app/paths.js b/packages/kit/src/runtime/app/paths.js index 32df2e1b3eda..35abd73f6768 100644 --- a/packages/kit/src/runtime/app/paths.js +++ b/packages/kit/src/runtime/app/paths.js @@ -1,7 +1,22 @@ -export { base, assets } from '__sveltekit/paths'; -import { base } from '__sveltekit/paths'; +import { base as _base, assets as _assets } from '__sveltekit/paths'; import { resolve_route } from '../../utils/routing.js'; +/** + * An absolute path that matches [`config.kit.paths.assets`](https://kit.svelte.dev/docs/configuration#paths). + * + * > If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL. + * @type {'' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets'} + */ +export const assets = _assets; + +/** + * A string that matches [`config.kit.paths.base`](https://kit.svelte.dev/docs/configuration#paths). + * + * Example usage: `Link` + * @type {'' | `/${string}`} + */ +export const base = _base; + /** * Populate a route ID with params to resolve a pathname. * @example diff --git a/packages/kit/src/types/ambient-private.d.ts b/packages/kit/src/types/ambient-private.d.ts index 843cc94d342b..8c56f2901359 100644 --- a/packages/kit/src/types/ambient-private.d.ts +++ b/packages/kit/src/types/ambient-private.d.ts @@ -1,11 +1,37 @@ -declare global { - const __SVELTEKIT_ADAPTER_NAME__: string; - const __SVELTEKIT_APP_VERSION_FILE__: string; - const __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: number; - const __SVELTEKIT_DEV__: boolean; - const __SVELTEKIT_EMBEDDED__: boolean; - var Bun: object; - var Deno: object; +/** Internal version of $app/environment */ +declare module '__sveltekit/environment' { + /** + * SvelteKit analyses your app during the `build` step by running it. During this process, `building` is `true`. This also applies during prerendering. + */ + export const building: boolean; + /** + * True during prerendering, false otherwise. + */ + export const prerendering: boolean; + /** + * The value of `config.kit.version.name`. + */ + export const version: string; + export function set_building(): void; + export function set_prerendering(): void; } -export {}; +/** Internal version of $app/paths */ +declare module '__sveltekit/paths' { + /** + * A string that matches [`config.kit.paths.base`](https://kit.svelte.dev/docs/configuration#paths). + * + * Example usage: `Link` + */ + export let base: '' | `/${string}`; + /** + * An absolute path that matches [`config.kit.paths.assets`](https://kit.svelte.dev/docs/configuration#paths). + * + * > If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL. + */ + export let assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets'; + export let relative: boolean; + export function reset(): void; + export function override(paths: { base: string; assets: string }): void; + export function set_assets(path: string): void; +} diff --git a/packages/kit/src/types/ambient.d.ts b/packages/kit/src/types/ambient.d.ts index 2c8b7427f763..00730946b980 100644 --- a/packages/kit/src/types/ambient.d.ts +++ b/packages/kit/src/types/ambient.d.ts @@ -79,41 +79,3 @@ declare module '$service-worker' { */ export const version: string; } - -/** Internal version of $app/environment */ -declare module '__sveltekit/environment' { - /** - * SvelteKit analyses your app during the `build` step by running it. During this process, `building` is `true`. This also applies during prerendering. - */ - export const building: boolean; - /** - * True during prerendering, false otherwise. - */ - export const prerendering: boolean; - /** - * The value of `config.kit.version.name`. - */ - export const version: string; - export function set_building(): void; - export function set_prerendering(): void; -} - -/** Internal version of $app/paths */ -declare module '__sveltekit/paths' { - /** - * A string that matches [`config.kit.paths.base`](https://kit.svelte.dev/docs/configuration#paths). - * - * Example usage: `Link` - */ - export let base: '' | `/${string}`; - /** - * An absolute path that matches [`config.kit.paths.assets`](https://kit.svelte.dev/docs/configuration#paths). - * - * > If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL. - */ - export let assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets'; - export let relative: boolean; - export function reset(): void; - export function override(paths: { base: string; assets: string }): void; - export function set_assets(path: string): void; -} diff --git a/packages/kit/src/types/global-private.d.ts b/packages/kit/src/types/global-private.d.ts new file mode 100644 index 000000000000..843cc94d342b --- /dev/null +++ b/packages/kit/src/types/global-private.d.ts @@ -0,0 +1,11 @@ +declare global { + const __SVELTEKIT_ADAPTER_NAME__: string; + const __SVELTEKIT_APP_VERSION_FILE__: string; + const __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: number; + const __SVELTEKIT_DEV__: boolean; + const __SVELTEKIT_EMBEDDED__: boolean; + var Bun: object; + var Deno: object; +} + +export {}; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index a983b4433561..0dd1b2f1ca9a 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1892,7 +1892,14 @@ declare module '@sveltejs/kit/vite' { } declare module '$app/environment' { - export { building, version } from '__sveltekit/environment'; + /** + * SvelteKit analyses your app during the `build` step by running it. During this process, `building` is `true`. This also applies during prerendering. + */ + export const building: boolean; + /** + * The value of `config.kit.version.name`. + */ + export const version: string; /** * `true` if the app is running in the browser. */ @@ -2067,7 +2074,6 @@ declare module '$app/navigation' { } declare module '$app/paths' { - export { base, assets } from '__sveltekit/paths'; /** * Populate a route ID with params to resolve a pathname. * @example @@ -2082,6 +2088,18 @@ declare module '$app/paths' { * ``` * */ export function resolveRoute(id: string, params: Record): string; + /** + * An absolute path that matches [`config.kit.paths.assets`](https://kit.svelte.dev/docs/configuration#paths). + * + * > If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL. + * */ + export const assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets'; + /** + * A string that matches [`config.kit.paths.base`](https://kit.svelte.dev/docs/configuration#paths). + * + * Example usage: `Link` + * */ + export const base: '' | `/${string}`; } declare module '$app/stores' { @@ -2198,42 +2216,4 @@ declare module '$service-worker' { export const version: string; } -/** Internal version of $app/environment */ -declare module '__sveltekit/environment' { - /** - * SvelteKit analyses your app during the `build` step by running it. During this process, `building` is `true`. This also applies during prerendering. - */ - export const building: boolean; - /** - * True during prerendering, false otherwise. - */ - export const prerendering: boolean; - /** - * The value of `config.kit.version.name`. - */ - export const version: string; - export function set_building(): void; - export function set_prerendering(): void; -} - -/** Internal version of $app/paths */ -declare module '__sveltekit/paths' { - /** - * A string that matches [`config.kit.paths.base`](https://kit.svelte.dev/docs/configuration#paths). - * - * Example usage: `Link` - */ - export let base: '' | `/${string}`; - /** - * An absolute path that matches [`config.kit.paths.assets`](https://kit.svelte.dev/docs/configuration#paths). - * - * > If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL. - */ - export let assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets'; - export let relative: boolean; - export function reset(): void; - export function override(paths: { base: string; assets: string }): void; - export function set_assets(path: string): void; -} - //# sourceMappingURL=index.d.ts.map \ No newline at end of file