Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/pretty-fans-peel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@sveltejs/adapter-cloudflare': patch
'@sveltejs/adapter-netlify': patch
'@sveltejs/adapter-vercel': patch
'@sveltejs/adapter-node': patch
---

fix: avoid erroring on builder properties that only exist on the latest version of SvelteKit
14 changes: 13 additions & 1 deletion packages/adapter-auto/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,17 @@ import path from 'node:path';
import fs from 'node:fs';
import process from 'node:process';

/**
* @template T
* @template {keyof T} K
* @typedef {Partial<Omit<T, K>> & Required<Pick<T, K>>} PartialExcept
*/

/**
* We use a custom `Builder` type here to support the minimum version of SvelteKit.
* @typedef {PartialExcept<import('@sveltejs/kit').Builder, 'log' | 'rimraf' | 'mkdirp' | 'config' | 'prerendered' | 'routes' | 'createEntries' | 'generateFallback' | 'generateEnvModule' | 'generateManifest' | 'getBuildDirectory' | 'getClientDirectory' | 'getServerDirectory' | 'getAppPath' | 'writeClient' | 'writePrerendered' | 'writePrerendered' | 'writeServer' | 'copy' | 'compress'>} Builder2_0_0
*/

/** @type {Record<string, (name: string, version: string) => string>} */
const commands = {
npm: (name, version) => `npm install -D ${name}@${version}`,
Expand Down Expand Up @@ -138,10 +149,11 @@ async function get_adapter() {
/** @type {() => Adapter} */
export default () => ({
name: '@sveltejs/adapter-auto',
/** @param {Builder2_0_0} builder */
adapt: async (builder) => {
const adapter = await get_adapter();

if (adapter) return adapter.adapt(builder);
if (adapter) return adapter.adapt(/** @type {import('@sveltejs/kit').Builder} */ (builder));

builder.log.warn(
'Could not detect a supported production environment. See https://svelte.dev/docs/kit/adapters to learn how to configure your app to run on the platform of your choosing'
Expand Down
1 change: 1 addition & 0 deletions packages/adapter-auto/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"checkJs": true,
"noEmit": true,
"noImplicitAny": true,
"strictNullChecks": true,
"target": "es2022",
"module": "node16",
"moduleResolution": "node16",
Expand Down
24 changes: 19 additions & 5 deletions packages/adapter-cloudflare/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,22 @@ import { is_building_for_cloudflare_pages, validate_worker_settings } from './ut
const name = '@sveltejs/adapter-cloudflare';
const [kit_major, kit_minor] = VERSION.split('.');

/**
* @template T
* @template {keyof T} K
* @typedef {Partial<Omit<T, K>> & Required<Pick<T, K>>} PartialExcept
*/

/**
* We use a custom `Builder` type here to support the minimum version of SvelteKit.
* @typedef {PartialExcept<import('@sveltejs/kit').Builder, 'log' | 'rimraf' | 'mkdirp' | 'config' | 'prerendered' | 'routes' | 'createEntries' | 'generateFallback' | 'generateEnvModule' | 'generateManifest' | 'getBuildDirectory' | 'getClientDirectory' | 'getServerDirectory' | 'getAppPath' | 'writeClient' | 'writePrerendered' | 'writePrerendered' | 'writeServer' | 'copy' | 'compress'>} Builder2_0_0
*/

/** @type {import('./index.js').default} */
export default function (options = {}) {
return {
name,
/** @param {Builder2_0_0} builder */
async adapt(builder) {
if (existsSync('_routes.json')) {
throw new Error(
Expand Down Expand Up @@ -113,8 +125,8 @@ export default function (options = {}) {
ASSETS: assets_binding
}
});
if (builder.hasServerInstrumentationFile()) {
builder.instrument({
if (builder.hasServerInstrumentationFile?.()) {
builder.instrument?.({
entrypoint: worker_dest,
instrumentation: `${builder.getServerDirectory()}/instrumentation.server.js`
});
Expand Down Expand Up @@ -197,12 +209,14 @@ export default function (options = {}) {
}

/**
* @param {import('@sveltejs/kit').Builder} builder
* @param {Builder2_0_0} builder
* @param {string[]} assets
* @param {import('./index.js').AdapterOptions['routes']} routes
* @returns {import('./index.js').RoutesJSONSpec}
*/
function get_routes_json(builder, assets, { include = ['/*'], exclude = ['<all>'] }) {
function get_routes_json(builder, assets, routes) {
let { include = ['/*'], exclude = ['<all>'] } = routes || {};

if (!Array.isArray(include) || !Array.isArray(exclude)) {
throw new Error('routes.include and routes.exclude must be arrays');
}
Expand Down Expand Up @@ -297,7 +311,7 @@ _redirects
}

/**
* @param {string} config_file
* @param {string | undefined} config_file
* @returns {import('wrangler').Unstable_Config}
*/
function validate_wrangler_config(config_file = undefined) {
Expand Down
1 change: 1 addition & 0 deletions packages/adapter-cloudflare/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"checkJs": true,
"noEmit": true,
"noImplicitAny": true,
"strictNullChecks": true,
"target": "es2022",
"module": "node16",
"moduleResolution": "node16",
Expand Down
35 changes: 23 additions & 12 deletions packages/adapter-netlify/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@ const [kit_major, kit_minor] = VERSION.split('.');
* } & toml.JsonMap} NetlifyConfig
*/

/**
* @template T
* @template {keyof T} K
* @typedef {Partial<Omit<T, K>> & Required<Pick<T, K>>} PartialExcept
*/

/**
* We use a custom `Builder` type here to support the minimum version of SvelteKit.
* @typedef {PartialExcept<import('@sveltejs/kit').Builder, 'log' | 'rimraf' | 'mkdirp' | 'config' | 'prerendered' | 'routes' | 'createEntries' | 'findServerAssets' | 'generateFallback' | 'generateEnvModule' | 'generateManifest' | 'getBuildDirectory' | 'getClientDirectory' | 'getServerDirectory' | 'getAppPath' | 'writeClient' | 'writePrerendered' | 'writePrerendered' | 'writeServer' | 'copy' | 'compress'>} Builder2_4_0
*/

const name = '@sveltejs/adapter-netlify';
const files = fileURLToPath(new URL('./files', import.meta.url).href);

Expand All @@ -30,7 +41,7 @@ const FUNCTION_PREFIX = 'sveltekit-';
export default function ({ split = false, edge = edge_set_in_env_var } = {}) {
return {
name,

/** @param {Builder2_4_0} builder */
async adapt(builder) {
if (!builder.routes) {
throw new Error(
Expand Down Expand Up @@ -114,7 +125,7 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) {
}
/**
* @param { object } params
* @param {import('@sveltejs/kit').Builder} params.builder
* @param {Builder2_4_0} params.builder
*/
async function generate_edge_functions({ builder }) {
const tmp = builder.getBuildDirectory('netlify-tmp');
Expand Down Expand Up @@ -202,16 +213,16 @@ async function generate_edge_functions({ builder }) {
outfile: '.netlify/edge-functions/render.js',
...esbuild_config
}),
builder.hasServerInstrumentationFile() &&
builder.hasServerInstrumentationFile?.() &&
esbuild.build({
entryPoints: [`${builder.getServerDirectory()}/instrumentation.server.js`],
outfile: '.netlify/edge/instrumentation.server.js',
...esbuild_config
})
]);

if (builder.hasServerInstrumentationFile()) {
builder.instrument({
if (builder.hasServerInstrumentationFile?.()) {
builder.instrument?.({
entrypoint: '.netlify/edge-functions/render.js',
instrumentation: '.netlify/edge/instrumentation.server.js',
start: '.netlify/edge/start.js'
Expand All @@ -222,7 +233,7 @@ async function generate_edge_functions({ builder }) {
}
/**
* @param { object } params
* @param {import('@sveltejs/kit').Builder} params.builder
* @param {Builder2_4_0} params.builder
* @param { string } params.publish
* @param { boolean } params.split
*/
Expand Down Expand Up @@ -294,8 +305,8 @@ function generate_lambda_functions({ builder, publish, split }) {

writeFileSync(`.netlify/functions-internal/${name}.mjs`, fn);
writeFileSync(`.netlify/functions-internal/${name}.json`, fn_config);
if (builder.hasServerInstrumentationFile()) {
builder.instrument({
if (builder.hasServerInstrumentationFile?.()) {
builder.instrument?.({
entrypoint: `.netlify/functions-internal/${name}.mjs`,
instrumentation: '.netlify/server/instrumentation.server.js',
start: `.netlify/functions-start/${name}.start.mjs`,
Expand All @@ -318,8 +329,8 @@ function generate_lambda_functions({ builder, publish, split }) {

writeFileSync(`.netlify/functions-internal/${FUNCTION_PREFIX}render.json`, fn_config);
writeFileSync(`.netlify/functions-internal/${FUNCTION_PREFIX}render.mjs`, fn);
if (builder.hasServerInstrumentationFile()) {
builder.instrument({
if (builder.hasServerInstrumentationFile?.()) {
builder.instrument?.({
entrypoint: `.netlify/functions-internal/${FUNCTION_PREFIX}render.mjs`,
instrumentation: '.netlify/server/instrumentation.server.js',
start: `.netlify/functions-start/${FUNCTION_PREFIX}render.start.mjs`,
Expand Down Expand Up @@ -356,8 +367,8 @@ function get_netlify_config() {
}

/**
* @param {NetlifyConfig} netlify_config
* @param {import('@sveltejs/kit').Builder} builder
* @param {NetlifyConfig | null} netlify_config
* @param {Builder2_4_0} builder
**/
function get_publish_directory(netlify_config, builder) {
if (netlify_config) {
Expand Down
1 change: 1 addition & 0 deletions packages/adapter-netlify/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"checkJs": true,
"noEmit": true,
"noImplicitAny": true,
"strictNullChecks": true,
"target": "es2022",
"module": "node16",
"moduleResolution": "node16",
Expand Down
19 changes: 15 additions & 4 deletions packages/adapter-node/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ import { nodeResolve } from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';

/**
* @template T
* @template {keyof T} K
* @typedef {Partial<Omit<T, K>> & Required<Pick<T, K>>} PartialExcept
*/

/**
* We use a custom `Builder` type here to support the minimum version of SvelteKit.
* @typedef {PartialExcept<import('@sveltejs/kit').Builder, 'log' | 'rimraf' | 'mkdirp' | 'config' | 'prerendered' | 'routes' | 'createEntries' | 'findServerAssets' | 'generateFallback' | 'generateEnvModule' | 'generateManifest' | 'getBuildDirectory' | 'getClientDirectory' | 'getServerDirectory' | 'getAppPath' | 'writeClient' | 'writePrerendered' | 'writePrerendered' | 'writeServer' | 'copy' | 'compress'>} Builder2_4_0
*/

const files = fileURLToPath(new URL('./files', import.meta.url).href);

/** @type {import('./index.js').default} */
Expand All @@ -13,7 +24,7 @@ export default function (opts = {}) {

return {
name: '@sveltejs/adapter-node',

/** @param {Builder2_4_0} builder */
async adapt(builder) {
const tmp = builder.getBuildDirectory('adapter-node');

Expand Down Expand Up @@ -54,7 +65,7 @@ export default function (opts = {}) {
manifest: `${tmp}/manifest.js`
};

if (builder.hasServerInstrumentationFile()) {
if (builder.hasServerInstrumentationFile?.()) {
input['instrumentation.server'] = `${tmp}/instrumentation.server.js`;
}

Expand Down Expand Up @@ -97,8 +108,8 @@ export default function (opts = {}) {
}
});

if (builder.hasServerInstrumentationFile()) {
builder.instrument({
if (builder.hasServerInstrumentationFile?.()) {
builder.instrument?.({
entrypoint: `${out}/index.js`,
instrumentation: `${out}/server/instrumentation.server.js`,
module: {
Expand Down
1 change: 1 addition & 0 deletions packages/adapter-node/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"checkJs": true,
"noEmit": true,
"noImplicitAny": true,
"strictNullChecks": true,
"allowSyntheticDefaultImports": true,
"target": "es2022",
"module": "node16",
Expand Down
2 changes: 1 addition & 1 deletion packages/adapter-static/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { platforms } from './platforms.js';
export default function (options) {
return {
name: '@sveltejs/adapter-static',

/** @param {import('./internal.js').Builder2_0_0} builder */
async adapt(builder) {
if (!options?.fallback && builder.config.kit.router?.type !== 'hash') {
const dynamic_routes = builder.routes.filter((route) => route.prerender !== true);
Expand Down
30 changes: 30 additions & 0 deletions packages/adapter-static/internal.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* Utility type that makes all properties optional except for the specified keys
*/
export type PartialExcept<T, K extends keyof T> = Partial<Omit<T, K>> & Required<Pick<T, K>>;

/**
* We use a custom `Builder` type here to support the minimum version of SvelteKit.
*/
export type Builder2_0_0 = PartialExcept<
import('@sveltejs/kit').Builder,
| 'log'
| 'rimraf'
| 'mkdirp'
| 'config'
| 'prerendered'
| 'routes'
| 'createEntries'
| 'generateFallback'
| 'generateEnvModule'
| 'generateManifest'
| 'getBuildDirectory'
| 'getClientDirectory'
| 'getServerDirectory'
| 'getAppPath'
| 'writeClient'
| 'writePrerendered'
| 'writeServer'
| 'copy'
| 'compress'
>;
4 changes: 2 additions & 2 deletions packages/adapter-static/platforms.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ import process from 'node:process';
* name: string;
* test: () => boolean;
* defaults: import('./index.js').AdapterOptions;
* done: (builder: import('@sveltejs/kit').Builder) => void;
* done: (builder: import('./internal.js').Builder2_0_0) => void;
* }}
* Platform */

// This function is duplicated in adapter-vercel
/** @param {import('@sveltejs/kit').Builder} builder */
/** @param {import('./internal.js').Builder2_0_0} builder */
function static_vercel_config(builder) {
/** @type {any[]} */
const prerendered_redirects = [];
Expand Down
3 changes: 2 additions & 1 deletion packages/adapter-static/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"checkJs": true,
"noEmit": true,
"noImplicitAny": true,
"strictNullChecks": true,
"target": "es2022",
"module": "node16",
"moduleResolution": "node16",
Expand All @@ -13,5 +14,5 @@
"@sveltejs/kit": ["../kit/types/index"]
}
},
"include": ["index.js", "test/utils.js"]
"include": ["index.js", "internal.d.ts", "test/utils.js"]
}
Loading
Loading