From 05680e41fc1e2d9740241d833cfeda60708e3c0c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 8 Dec 2022 23:48:29 -0500 Subject: [PATCH 1/4] remove stuff --- packages/adapter-cloudflare-workers/index.js | 7 - packages/adapter-cloudflare/index.js | 7 - packages/adapter-node/index.js | 8 - packages/kit/src/cli.js | 64 ------- packages/kit/src/core/adapt/builder.js | 50 ++--- packages/kit/src/core/config/index.js | 11 -- packages/kit/src/core/config/index.spec.js | 32 +--- packages/kit/src/core/config/options.js | 120 +----------- packages/kit/src/core/prerender/prerender.js | 13 -- .../core/sync/create_manifest_data/index.js | 11 +- .../sync/create_manifest_data/index.spec.js | 8 - packages/kit/src/core/sync/sync.js | 19 -- .../src/exports/vite/build/build_server.js | 34 +--- .../vite/build/build_service_worker.js | 7 - packages/kit/src/exports/vite/dev/index.js | 46 +---- packages/kit/src/exports/vite/index.js | 16 -- packages/kit/src/runtime/app/forms.js | 12 +- packages/kit/src/runtime/app/navigation.js | 10 - packages/kit/src/runtime/app/stores.js | 47 +---- packages/kit/src/runtime/client/client.js | 175 +----------------- packages/kit/src/runtime/server/endpoint.js | 5 +- packages/kit/src/runtime/server/index.js | 49 +---- .../kit/src/runtime/server/page/load_data.js | 17 +- .../kit/src/runtime/server/page/render.js | 17 -- packages/kit/src/runtime/server/utils.js | 28 --- 25 files changed, 45 insertions(+), 768 deletions(-) diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index a2c106d1a9b3..5ed1884b9099 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -16,13 +16,6 @@ import { fileURLToPath } from 'url'; /** @type {import('.').default} */ export default function ({ config = 'wrangler.toml' } = {}) { - // TODO remove for 1.0 - if (arguments.length > 0) { - throw new Error( - 'esbuild options can no longer be passed to adapter-cloudflare-workers — see https://github.com/sveltejs/kit/pull/4639' - ); - } - return { name: '@sveltejs/adapter-cloudflare-workers', diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index fd5a60c3e230..db00330aff29 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -5,13 +5,6 @@ import * as esbuild from 'esbuild'; /** @type {import('.').default} */ export default function () { - // TODO remove for 1.0 - if (arguments.length > 0) { - throw new Error( - 'esbuild options can no longer be passed to adapter-cloudflare — see https://github.com/sveltejs/kit/pull/4639' - ); - } - return { name: '@sveltejs/adapter-cloudflare', async adapt(builder) { diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 9913432d81ec..7dc13e34d550 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -9,14 +9,6 @@ const files = fileURLToPath(new URL('./files', import.meta.url).href); /** @type {import('.').default} */ export default function (opts = {}) { - // TODO remove for 1.0 - // @ts-expect-error - if (opts.env) { - throw new Error( - 'options.env has been removed in favour of options.envPrefix. Consult the adapter-node README: https://github.com/sveltejs/kit/tree/master/packages/adapter-node' - ); - } - const { out = 'build', precompress, envPrefix = '' } = opts; return { diff --git a/packages/kit/src/cli.js b/packages/kit/src/cli.js index 6e931aaf906b..49a469806d75 100755 --- a/packages/kit/src/cli.js +++ b/packages/kit/src/cli.js @@ -27,20 +27,6 @@ prog .describe('Synchronise generated files') .option('--mode', 'Specify a mode for loading environment variables', 'development') .action(async ({ mode }) => { - const event = process.env.npm_lifecycle_event; - - // TODO remove for 1.0 - if (event === 'prepare') { - const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); - const message = - pkg.scripts.prepare === 'svelte-kit sync' - ? `\`svelte-kit sync\` now runs on "postinstall" — please remove the "prepare" script from your package.json\n` - : `\`svelte-kit sync\` now runs on "postinstall" — please remove it from your "prepare" script\n`; - - console.error(colors.bold().red(message)); - return; - } - if (!fs.existsSync('svelte.config.js')) { console.warn(`Missing ${path.resolve('svelte.config.js')} — skipping`); return; @@ -55,54 +41,4 @@ prog } }); -// TODO remove for 1.0 -replace('dev'); -replace('build'); -replace('preview'); -prog - .command('package') - .describe('No longer available - use @sveltejs/package instead') - .action(() => { - console.error( - 'svelte-kit package has been removed. It now lives in its own npm package. See the PR on how to migrate: https://github.com/sveltejs/kit/pull/5730' - ); - }); - prog.parse(process.argv, { unknown: (arg) => `Unknown option: ${arg}` }); - -/** @param {string} command */ -function replace(command) { - prog - .command(command) - .describe(`No longer available — use vite ${command} instead`) - .action(async () => { - const message = `\n> svelte-kit ${command} is no longer available — use vite ${command} instead`; - console.error(colors.bold().red(message)); - - const steps = [ - 'Install vite as a devDependency with npm/pnpm/etc', - 'Create a vite.config.js with the @sveltejs/kit/vite plugin (see below)', - `Update your package.json scripts to reference \`vite ${command}\` instead of \`svelte-kit ${command}\`` - ]; - - steps.forEach((step, i) => { - console.error(` ${i + 1}. ${colors.cyan(step)}`); - }); - - console.error( - ` - ${colors.grey('// vite.config.js')} - import { sveltekit } from '@sveltejs/kit/vite'; - - /** @type {import('vite').UserConfig} */ - const config = { - plugins: [sveltekit()] - }; - - export default config; - - `.replace(/^\t{4}/gm, '') - ); - process.exit(1); - }); -} diff --git a/packages/kit/src/core/adapt/builder.js b/packages/kit/src/core/adapt/builder.js index dc8d1b7e4d62..6ea61f4cc5ff 100644 --- a/packages/kit/src/core/adapt/builder.js +++ b/packages/kit/src/core/adapt/builder.js @@ -30,6 +30,23 @@ export function create_builder({ config, build_data, routes, prerendered, log }) config, prerendered, + async compress(directory) { + if (!existsSync(directory)) { + return; + } + + const files = await glob('**/*.{html,js,json,css,svg,xml,wasm}', { + cwd: directory, + dot: true, + absolute: true, + filesOnly: true + }); + + await Promise.all( + files.map((file) => Promise.all([compress_file(file, 'gz'), compress_file(file, 'br')])) + ); + }, + async createEntries(fn) { /** @type {import('types').RouteDefinition[]} */ const facades = routes.map((route) => { @@ -146,39 +163,6 @@ export function create_builder({ config, build_data, routes, prerendered, log }) writeServer(dest) { return copy(`${config.kit.outDir}/output/server`, dest); - }, - - // TODO remove these methods for 1.0 - // @ts-expect-error - writeStatic() { - throw new Error( - `writeStatic has been removed. Please ensure you are using the latest version of ${ - config.kit.adapter.name || 'your adapter' - }` - ); - }, - - async compress(directory) { - if (!existsSync(directory)) { - return; - } - - const files = await glob('**/*.{html,js,json,css,svg,xml,wasm}', { - cwd: directory, - dot: true, - absolute: true, - filesOnly: true - }); - - await Promise.all( - files.map((file) => Promise.all([compress_file(file, 'gz'), compress_file(file, 'br')])) - ); - }, - - async prerender() { - throw new Error( - 'builder.prerender() has been removed. Prerendering now takes place in the build phase — see builder.prerender and builder.writePrerendered' - ); } }; } diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index 39f4160cdac0..17315e781cd3 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -16,14 +16,6 @@ export function load_template(cwd, config) { if (fs.existsSync(appTemplate)) { const contents = fs.readFileSync(appTemplate, 'utf8'); - // TODO remove this for 1.0 - const match = /%svelte\.([a-z]+)%/.exec(contents); - if (match) { - throw new Error( - `%svelte.${match[1]}% in ${relative} should be replaced with %sveltekit.${match[1]}%` - ); - } - const expected_tags = ['%sveltekit.head%', '%sveltekit.body%']; expected_tags.forEach((tag) => { if (contents.indexOf(tag) === -1) { @@ -74,9 +66,6 @@ function process_config(config, { cwd = process.cwd() } = {}) { validated.kit.outDir = path.resolve(cwd, validated.kit.outDir); for (const key in validated.kit.files) { - // TODO remove for 1.0 - if (key === 'template') continue; - if (key === 'hooks') { validated.kit.files.hooks.client = path.resolve(cwd, validated.kit.files.hooks.client); validated.kit.files.hooks.server = path.resolve(cwd, validated.kit.files.hooks.server); diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 12af12bf6e80..1c0de287baee 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -61,12 +61,7 @@ const get_defaults = (prefix = '') => ({ kit: { adapter: null, alias: {}, - amp: undefined, appDir: '_app', - browser: { - hydrate: undefined, - router: undefined - }, csp: { mode: 'auto', directives: directive_defaults, @@ -75,7 +70,6 @@ const get_defaults = (prefix = '') => ({ csrf: { checkOrigin: true }, - endpointExtensions: undefined, embedded: false, env: { dir: process.cwd(), @@ -92,14 +86,9 @@ const get_defaults = (prefix = '') => ({ routes: join(prefix, 'src/routes'), serviceWorker: join(prefix, 'src/service-worker'), appTemplate: join(prefix, 'src/app.html'), - errorTemplate: join(prefix, 'src/error.html'), - template: undefined + errorTemplate: join(prefix, 'src/error.html') }, - headers: undefined, - host: undefined, - hydrate: undefined, inlineStyleThreshold: 0, - methodOverride: undefined, moduleExtensions: ['.js', '.ts'], outDir: join(prefix, '.svelte-kit'), serviceWorker: { @@ -112,30 +101,15 @@ const get_defaults = (prefix = '') => ({ prerender: { concurrency: 1, crawl: true, - createIndexFiles: undefined, - default: undefined, - enabled: undefined, entries: ['*'], - force: undefined, handleHttpError: 'fail', handleMissingId: 'fail', - onError: undefined, - origin: 'http://sveltekit-prerender', - pages: undefined + origin: 'http://sveltekit-prerender' }, - protocol: undefined, - router: undefined, - routes: undefined, - ssr: undefined, - target: undefined, - trailingSlash: undefined, version: { name: Date.now().toString(), pollInterval: 0 - }, - // TODO cleanup for 1.0 - vite: undefined, - package: undefined + } } }); diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 4d3aa71cc43a..51daee0324af 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -85,12 +85,6 @@ const options = object( return input; }), - // TODO: remove this for the 1.0 release - amp: error( - (keypath) => - `${keypath} has been removed. See https://kit.svelte.dev/docs/seo#manual-setup-amp for details on how to support AMP` - ), - appDir: validate('_app', (input, keypath) => { assert_string(input, keypath); @@ -107,18 +101,6 @@ const options = object( return input; }), - // TODO: remove this for the 1.0 release - browser: object({ - hydrate: error( - (keypath) => - `${keypath} has been removed. You can set \`export const csr = false\` inside the top level +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197` - ), - router: error( - (keypath) => - `${keypath} has been removed. You can set \`export const csr = false\` inside the top level +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197` - ) - }), - csp: object({ mode: list(['auto', 'hash', 'nonce']), directives, @@ -131,11 +113,6 @@ const options = object( embedded: boolean(false), - // TODO: remove this for the 1.0 release - endpointExtensions: error( - (keypath) => `${keypath} has been renamed to config.kit.moduleExtensions` - ), - env: object({ dir: string(process.cwd()), publicPrefix: string('PUBLIC_') @@ -143,46 +120,18 @@ const options = object( files: object({ assets: string('static'), - hooks: (input, keypath) => { - // TODO remove this for the 1.0 release - if (typeof input === 'string') { - throw new Error( - `${keypath} is an object with { server: string, client: string } now. See the PR for more information: https://github.com/sveltejs/kit/pull/6586` - ); - } - - return object({ - client: string(join('src', 'hooks.client')), - server: string(join('src', 'hooks.server')) - })(input, keypath); - }, + hooks: object({ + client: string(join('src', 'hooks.client')), + server: string(join('src', 'hooks.server')) + }), lib: string(join('src', 'lib')), params: string(join('src', 'params')), routes: string(join('src', 'routes')), serviceWorker: string(join('src', 'service-worker')), appTemplate: string(join('src', 'app.html')), - errorTemplate: string(join('src', 'error.html')), - // TODO: remove this for the 1.0 release - template: error( - () => 'config.kit.files.template has been renamed to config.kit.files.appTemplate' - ) + errorTemplate: string(join('src', 'error.html')) }), - // TODO: remove this for the 1.0 release - headers: error( - (keypath) => - `${keypath} has been removed. See https://github.com/sveltejs/kit/pull/3384 for details` - ), - - // TODO: remove this for the 1.0 release - host: error( - (keypath) => - `${keypath} has been removed. See https://github.com/sveltejs/kit/pull/3384 for details` - ), - - // TODO remove for 1.0 - hydrate: error((keypath) => `${keypath} has been moved to config.kit.browser.hydrate`), - inlineStyleThreshold: number(0), methodOverride: error( @@ -260,17 +209,6 @@ const options = object( return input; }), - // TODO: remove this for the 1.0 release - force: validate(undefined, (input, keypath) => { - const new_input = input ? 'warn' : 'fail'; - const needs_option = new_input === 'warn'; - throw new Error( - `${keypath} has been removed in favor of \`handleHttpError\`. In your case, set \`handleHttpError\` to "${new_input}"${ - needs_option ? '' : ' (or leave it undefined)' - } to get the same behavior as you would with \`force: ${JSON.stringify(input)}\`` - ); - }), - handleHttpError: validate('fail', (input, keypath) => { if (typeof input === 'function') return input; if (['fail', 'warn', 'ignore'].includes(input)) return input; @@ -283,17 +221,6 @@ const options = object( throw new Error(`${keypath} should be "fail", "warn", "ignore" or a custom function`); }), - // TODO: remove this for the 1.0 release - onError: validate(undefined, (input, keypath) => { - let message = `${keypath} has been renamed to \`handleHttpError\``; - - if (input === 'continue') { - message += ', and "continue" has been renamed to "warn"'; - } - - throw new Error(message); - }), - origin: validate('http://sveltekit-prerender', (input, keypath) => { assert_string(input, keypath); @@ -310,44 +237,14 @@ const options = object( } return origin; - }), - - // TODO: remove this for the 1.0 release - pages: error((keypath) => `${keypath} has been renamed to \`entries\`.`) + }) }), - // TODO: remove this for the 1.0 release - protocol: error( - (keypath) => - `${keypath} has been removed. See https://github.com/sveltejs/kit/pull/3384 for details` - ), - - // TODO remove for 1.0 - router: error( - (keypath) => - `${keypath} has been removed. You can set \`export const csr = false\` inside the top level +layout.js (or +layout.server.js) instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197` - ), - - // TODO remove for 1.0 - routes: error( - (keypath) => - `${keypath} has been removed. See https://github.com/sveltejs/kit/discussions/5774 for details` - ), - serviceWorker: object({ register: boolean(true), files: fun((filename) => !/\.DS_Store/.test(filename)) }), - // TODO remove this for 1.0 - ssr: error( - (keypath) => - `${keypath} has been removed — use the handle hook instead: https://kit.svelte.dev/docs/hooks#server-hooks-handle` - ), - - // TODO remove this for 1.0 - target: error((keypath) => `${keypath} is no longer required, and should be removed`), - trailingSlash: error( (keypath, input) => `${keypath} has been removed. You can set \`export const trailingSlash = '${input}'\` inside a top level +layout.js (or +layout.server.js) instead. See the PR for more information: https://github.com/sveltejs/kit/pull/7719` @@ -356,10 +253,7 @@ const options = object( version: object({ name: string(Date.now().toString()), pollInterval: number(0) - }), - - // TODO remove this for 1.0 - vite: error((keypath) => `${keypath} has been removed — use vite.config.js instead`) + }) }) }, true diff --git a/packages/kit/src/core/prerender/prerender.js b/packages/kit/src/core/prerender/prerender.js index 8d4471943166..2af147ef05bb 100644 --- a/packages/kit/src/core/prerender/prerender.js +++ b/packages/kit/src/core/prerender/prerender.js @@ -89,19 +89,6 @@ export async function prerender() { installPolyfills(); - // TODO remove this for 1.0 - const { fetch } = globalThis; - globalThis.fetch = async (info, init) => { - const url = info instanceof Request ? info.url : info.toString(); - - if (url.startsWith(config.prerender.origin + '/')) { - const sliced = url.slice(config.prerender.origin.length); - throw new Error(`Use \`event.fetch('${sliced}')\` instead of the global \`fetch('${url}')\``); - } - - return fetch(info, init); - }; - const server_root = join(config.outDir, 'output'); /** @type {import('types').ServerModule} */ diff --git a/packages/kit/src/core/sync/create_manifest_data/index.js b/packages/kit/src/core/sync/create_manifest_data/index.js index 8beb9b53c239..70784acf6ff0 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -266,9 +266,7 @@ function create_routes_and_nodes(cwd, config, fallback) { const root = routes[0]; if (!root.leaf && !root.error && !root.layout && !root.endpoint) { throw new Error( - // TODO adjust this error message for 1.0 - // 'No routes found. If you are using a custom src/routes directory, make sure it is specified in svelte.config.js' - 'The filesystem router API has changed, see https://github.com/sveltejs/kit/discussions/5774 for details' + 'No routes found. If you are using a custom src/routes directory, make sure it is specified in svelte.config.js' ); } } @@ -386,13 +384,6 @@ function analyze(project_relative, file, component_extensions, module_extensions const pattern = /^\+(?:(page(?:@(.*))?)|(layout(?:@(.*))?)|(error))$/; const match = pattern.exec(name); if (!match) { - // TODO remove for 1.0 - if (/^\+layout-/.test(name)) { - throw new Error( - `${project_relative} should be reimplemented with layout groups: https://kit.svelte.dev/docs/advanced-routing#advanced-layouts` - ); - } - throw new Error(`Files prefixed with + are reserved (saw ${project_relative})`); } diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js index ff52bda7cf43..c244b0c67c03 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js @@ -751,12 +751,4 @@ test('prevents route conflicts between groups', () => { ); }); -// TODO remove for 1.0 -test('errors on encountering a declared layout', () => { - assert.throws( - () => create('samples/declared-layout'), - /samples\/declared-layout\/\+layout-foo.svelte should be reimplemented with layout groups: https:\/\/kit\.svelte\.dev\/docs\/advanced-routing#advanced-layouts/ - ); -}); - test.run(); diff --git a/packages/kit/src/core/sync/sync.js b/packages/kit/src/core/sync/sync.js index b1ba0fbb5200..5949de8fa2d0 100644 --- a/packages/kit/src/core/sync/sync.js +++ b/packages/kit/src/core/sync/sync.js @@ -1,4 +1,3 @@ -import fs from 'fs'; import path from 'path'; import create_manifest_data from './create_manifest_data/index.js'; import { write_client_manifest } from './write_client_manifest.js'; @@ -14,24 +13,6 @@ import { write_ambient } from './write_ambient.js'; * @param {string} mode */ export function init(config, mode) { - // TODO remove for 1.0 - if (fs.existsSync('src/app.d.ts')) { - const content = fs.readFileSync('src/app.d.ts', 'utf-8'); - if (content.includes('PageError')) { - if (content.includes('// interface PageError')) { - fs.writeFileSync( - 'src/app.d.ts', - content.replace(/\/\/ interface PageError/g, '// interface Error') - ); - console.warn('App.PageError has been renamed to App.Error — we updated your src/app.d.ts'); - } else { - throw new Error( - 'App.PageError has been renamed to App.Error — please update your src/app.d.ts' - ); - } - } - } - write_tsconfig(config.kit); write_ambient(config.kit, mode); } diff --git a/packages/kit/src/exports/vite/build/build_server.js b/packages/kit/src/exports/vite/build/build_server.js index a0c73bc1e781..eab9d7fd23a7 100644 --- a/packages/kit/src/exports/vite/build/build_server.js +++ b/packages/kit/src/exports/vite/build/build_server.js @@ -68,16 +68,9 @@ export class Server { dev: false, embedded: ${config.kit.embedded}, handle_error: (error, event) => { - return this.options.hooks.handleError({ - error, - event, - - // TODO remove for 1.0 - // @ts-expect-error - get request() { - throw new Error('request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details'); - } - }) ?? { message: event.route.id != null ? 'Internal Error' : 'Not Found' }; + return this.options.hooks.handleError({ error, event }) ?? { + message: event.route.id != null ? 'Internal Error' : 'Not Found' + }; }, hooks: null, manifest, @@ -117,11 +110,6 @@ export class Server { if (!this.options.hooks) { const module = await import(${s(hooks)}); - // TODO remove this for 1.0 - if (module.externalFetch) { - throw new Error('externalFetch has been removed — use handleFetch instead. See https://github.com/sveltejs/kit/pull/6565 for details'); - } - this.options.hooks = { handle: module.handle || (({ event, resolve }) => resolve(event)), handleError: module.handleError || (({ error }) => console.error(error.stack)), @@ -167,22 +155,6 @@ export async function build_server(options, client) { let hooks_file = resolve_entry(config.kit.files.hooks.server); - // TODO remove for 1.0 - if (!hooks_file) { - const old_file = resolve_entry(path.join(process.cwd(), 'src', 'hooks')); - if (old_file && fs.existsSync(old_file)) { - throw new Error( - `Rename your server hook file from ${posixify( - path.relative(process.cwd(), old_file) - )} to ${posixify( - path.relative(process.cwd(), config.kit.files.hooks.server) - )}${path.extname( - old_file - )} (because there's also client hooks now). See the PR for more information: https://github.com/sveltejs/kit/pull/6586` - ); - } - } - if (!hooks_file || !fs.existsSync(hooks_file)) { hooks_file = path.join(config.kit.outDir, 'build/hooks.js'); fs.writeFileSync(hooks_file, ''); diff --git a/packages/kit/src/exports/vite/build/build_service_worker.js b/packages/kit/src/exports/vite/build/build_service_worker.js index 1bfecfbfb97d..234e7175d19a 100644 --- a/packages/kit/src/exports/vite/build/build_service_worker.js +++ b/packages/kit/src/exports/vite/build/build_service_worker.js @@ -34,13 +34,6 @@ export async function build_service_worker( fs.writeFileSync( service_worker, ` - // TODO remove for 1.0 - export const timestamp = { - toString: () => { - throw new Error('\`timestamp\` has been removed from $service-worker. Use \`version\` instead'); - } - }; - export const build = [ ${Array.from(build) .map((file) => `${s(`${config.kit.paths.base}/${file}`)}`) diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 37f5741396c6..a0a4b159eec3 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -355,32 +355,8 @@ export async function dev(vite, vite_config, svelte_config) { ? await vite.ssrLoadModule(`/${hooks_file}`) : {}; - // TODO remove for 1.0 - if (!resolve_entry(hooks_file)) { - const old_file = resolve_entry(path.join(process.cwd(), 'src', 'hooks')); - if (old_file && fs.existsSync(old_file)) { - throw new Error( - `Rename your server hook file from ${posixify( - path.relative(process.cwd(), old_file) - )} to ${posixify( - path.relative(process.cwd(), svelte_config.kit.files.hooks.server) - )}${path.extname( - old_file - )} (because there's also client hooks now). See the PR for more information: https://github.com/sveltejs/kit/pull/6586` - ); - } - } - const handle = user_hooks.handle || (({ event, resolve }) => resolve(event)); - // TODO remove for 1.0 - // @ts-expect-error - if (user_hooks.externalFetch) { - throw new Error( - 'externalFetch has been removed — use handleFetch instead. See https://github.com/sveltejs/kit/pull/6565 for details' - ); - } - /** @type {import('types').ServerHooks} */ const hooks = { handle, @@ -399,18 +375,6 @@ export async function dev(vite, vite_config, svelte_config) { handleFetch: user_hooks.handleFetch || (({ request, fetch }) => fetch(request)) }; - if (/** @type {any} */ (hooks).getContext) { - // TODO remove this for 1.0 - throw new Error( - 'The getContext hook has been removed. See https://kit.svelte.dev/docs/hooks' - ); - } - - if (/** @type {any} */ (hooks).serverFetch) { - // TODO remove this for 1.0 - throw new Error('The serverFetch hook has been renamed to externalFetch.'); - } - // TODO the / prefix will probably fail if outDir is outside the cwd (which // could be the case in a monorepo setup), but without it these modules // can get loaded twice via different URLs, which causes failures. Might @@ -461,15 +425,7 @@ export async function dev(vite, vite_config, svelte_config) { return Reflect.get(target, property, target); } }), - event, - - // TODO remove for 1.0 - // @ts-expect-error - get request() { - throw new Error( - 'request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details' - ); - } + event }); return ( error_object ?? { message: event.route.id != null ? 'Internal Error' : 'Not Found' } diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 1e1fd09c9228..1fdb28abd4f6 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -194,9 +194,6 @@ function kit({ svelte_config }) { }; } - // TODO remove this for 1.0 - check_vite_version(); - /** @type {import('vite').Plugin} */ const plugin_build = { name: 'vite-plugin-sveltekit-build', @@ -581,19 +578,6 @@ function kit({ svelte_config }) { return [plugin_build, plugin_middleware]; } -function check_vite_version() { - // TODO parse from kit peer deps and maybe do a full semver compare if we ever require feature releases a min - const min_required_vite_major = 3; - const vite_version = vite.version ?? '2.x'; // vite started exporting it's version in 3.0 - const current_vite_major = parseInt(vite_version.split('.')[0], 10); - - if (current_vite_major < min_required_vite_major) { - throw new Error( - `Vite version ${current_vite_major} is no longer supported. Please upgrade to version ${min_required_vite_major}` - ); - } -} - /** @param {import('rollup').OutputBundle} bundle */ function collect_output(bundle) { /** @type {import('rollup').OutputChunk[]} */ diff --git a/packages/kit/src/runtime/app/forms.js b/packages/kit/src/runtime/app/forms.js index 1cc3b723c61d..987be7885ab2 100644 --- a/packages/kit/src/runtime/app/forms.js +++ b/packages/kit/src/runtime/app/forms.js @@ -119,17 +119,7 @@ export function enhance(form, submit = () => {}) { form, update: (opts) => fallback_callback({ action, result, reset: opts?.reset }), // @ts-expect-error generic constraints stuff we don't care about - result, - // TODO remove for 1.0 - get type() { - throw new Error('(result) => {...} has changed to ({ result }) => {...}'); - }, - get location() { - throw new Error('(result) => {...} has changed to ({ result }) => {...}'); - }, - get error() { - throw new Error('(result) => {...} has changed to ({ result }) => {...}'); - } + result }); } diff --git a/packages/kit/src/runtime/app/navigation.js b/packages/kit/src/runtime/app/navigation.js index 7104f54d13cd..80f8df1c8908 100644 --- a/packages/kit/src/runtime/app/navigation.js +++ b/packages/kit/src/runtime/app/navigation.js @@ -21,13 +21,3 @@ export const preloadData = ssr ? guard('preloadData') : client.preload_data; export const preloadCode = ssr ? guard('preloadCode') : client.preload_code; export const beforeNavigate = ssr ? () => {} : client.before_navigate; export const afterNavigate = ssr ? () => {} : client.after_navigate; - -// TODO remove for 1.0 release -/** @param {any} _args */ -export const prefetch = (..._args) => { - throw new Error('prefetch has been renamed to preloadData'); -}; -/** @param {any} _args */ -export const prefetchRoutes = (..._args) => { - throw new Error('prefetchRoutes has been renamed to preloadCode'); -}; diff --git a/packages/kit/src/runtime/app/stores.js b/packages/kit/src/runtime/app/stores.js index 0eb99f4dfa08..5c79a7ad3f94 100644 --- a/packages/kit/src/runtime/app/stores.js +++ b/packages/kit/src/runtime/app/stores.js @@ -2,23 +2,13 @@ import { getContext } from 'svelte'; import { browser } from './environment.js'; import { stores as browser_stores } from '../client/singletons.js'; -// TODO remove this (for 1.0? after 1.0?) -let warned = false; -export function stores() { - if (!warned) { - console.error('stores() is deprecated; use getStores() instead'); - warned = true; - } - return getStores(); -} - /** * @type {import('$app/stores').getStores} */ export const getStores = () => { const stores = browser ? browser_stores : getContext('__svelte__'); - const readonly_stores = { + return { page: { subscribe: stores.page.subscribe }, @@ -27,28 +17,6 @@ export const getStores = () => { }, updated: stores.updated }; - - // TODO remove this for 1.0 - Object.defineProperties(readonly_stores, { - preloading: { - get() { - console.error('stores.preloading is deprecated; use stores.navigating instead'); - return { - subscribe: stores.navigating.subscribe - }; - }, - enumerable: false - }, - session: { - get() { - removed_session(); - return {}; - }, - enumerable: false - } - }); - - return readonly_stores; }; /** @type {typeof import('$app/stores').page} */ @@ -68,19 +36,6 @@ export const navigating = { } }; -function removed_session() { - // TODO remove for 1.0 - throw new Error( - 'stores.session is no longer available. See https://github.com/sveltejs/kit/discussions/5883' - ); -} - -export const session = { - subscribe: removed_session, - set: removed_session, - update: removed_session -}; - /** @type {typeof import('$app/stores').updated} */ export const updated = { subscribe(fn) { diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index e9654a7de87f..ac55fdeea076 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -61,26 +61,6 @@ function update_scroll_positions(index) { scroll_positions[index] = scroll_state(); } -// TODO remove for 1.0 -/** @type {Record} */ -let warned_about_attributes = {}; - -function check_for_removed_attributes() { - const attrs = ['prefetch', 'noscroll', 'reload']; - for (const attr of attrs) { - if (document.querySelector(`[sveltekit\\:${attr}]`)) { - if (!warned_about_attributes[attr]) { - warned_about_attributes[attr] = true; - console.error( - `The sveltekit:${attr} attribute has been replaced with data-sveltekit-${ - attr === 'prefetch' ? 'preload-data' : attr - }` - ); - } - } - } -} - /** * @param {{ * target: HTMLElement; @@ -336,9 +316,7 @@ export function create_client({ target, base }) { navigation_result.props.page.url = url; } - const post_update = pre_update(); root.$set(navigation_result.props); - post_update(); } else { initialize(navigation_result); } @@ -392,22 +370,20 @@ export function create_client({ target, base }) { page = result.props.page; - const post_update = pre_update(); root = new Root({ target, props: { ...result.props, stores }, hydrate: true }); - post_update(); /** @type {import('types').AfterNavigate} */ const navigation = { from: null, - to: add_url_properties('to', { + to: { params: current.params, route: { id: current.route?.id ?? null }, url: new URL(location.href) - }), + }, willUnload: false, type: 'enter' }; @@ -503,29 +479,6 @@ export function create_client({ target, base }) { // The whole page store is updated, but this way the object reference stays the same data: data_changed ? data : page.data }; - - // TODO remove this for 1.0 - Object.defineProperty(result.props.page, 'routeId', { - get() { - throw new Error('$page.routeId has been replaced by $page.route.id'); - }, - enumerable: false - }); - /** - * @param {string} property - * @param {string} replacement - */ - const print_error = (property, replacement) => { - Object.defineProperty(result.props.page, property, { - get: () => { - throw new Error(`$page.${property} has been replaced by $page.url.${replacement}`); - } - }); - }; - - print_error('origin', 'origin'); - print_error('path', 'pathname'); - print_error('query', 'searchParams'); } return result; @@ -640,40 +593,6 @@ export function create_client({ target, base }) { } }; - // TODO remove this for 1.0 - Object.defineProperties(load_input, { - props: { - get() { - throw new Error( - '@migration task: Replace `props` with `data` stuff https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292693' - ); - }, - enumerable: false - }, - session: { - get() { - throw new Error( - 'session is no longer available. See https://github.com/sveltejs/kit/discussions/5883' - ); - }, - enumerable: false - }, - stuff: { - get() { - throw new Error( - '@migration task: Remove stuff https://github.com/sveltejs/kit/discussions/5774#discussioncomment-3292693' - ); - }, - enumerable: false - }, - routeId: { - get() { - throw new Error('routeId has been replaced by route.id'); - }, - enumerable: false - } - }); - if (import.meta.env.DEV) { try { lock_fetch(); @@ -1057,16 +976,16 @@ export function create_client({ target, base }) { /** @type {import('types').Navigation} */ const navigation = { - from: add_url_properties('from', { + from: { params: current.params, route: { id: current.route?.id ?? null }, url: current.url - }), - to: add_url_properties('to', { + }, + to: { params: intent?.params ?? null, route: { id: intent?.route?.id ?? null }, url - }), + }, willUnload: !intent, type }; @@ -1309,30 +1228,10 @@ export function create_client({ target, base }) { }, goto: (href, opts = {}) => { - // TODO remove for 1.0 - if ('keepfocus' in opts && !('keepFocus' in opts)) { - throw new Error( - '`keepfocus` has been renamed to `keepFocus` (note the difference in casing)' - ); - } - - if ('noscroll' in opts && !('noScroll' in opts)) { - throw new Error( - '`noscroll` has been renamed to `noScroll` (note the difference in casing)' - ); - } - return goto(href, opts, []); }, invalidate: (resource) => { - if (resource === undefined) { - // TODO remove for 1.0 - throw new Error( - '`invalidate()` (with no arguments) has been replaced by `invalidateAll()`' - ); - } - if (typeof resource === 'function') { invalidated.push(resource); } else { @@ -1379,9 +1278,7 @@ export function create_client({ target, base }) { current = navigation_result.state; - const post_update = pre_update(); root.$set(navigation_result.props); - post_update(); tick().then(reset_focus); } @@ -1393,9 +1290,7 @@ export function create_client({ target, base }) { form: result.data, page: { ...page, form: result.data, status: result.status } }; - const post_update = pre_update(); root.$set(props); - post_update(); if (result.type === 'success') { tick().then(reset_focus); @@ -1418,11 +1313,11 @@ export function create_client({ target, base }) { // it's due to an external or full-page-reload link, for which we don't want to call the hook again. /** @type {import('types').BeforeNavigate} */ const navigation = { - from: add_url_properties('from', { + from: { params: current.params, route: { id: current.route?.id ?? null }, url: current.url - }), + }, to: null, willUnload: true, type: 'leave', @@ -1768,60 +1663,6 @@ function handle_error(error, event) { ); } -// TODO remove for 1.0 -const properties = [ - 'hash', - 'href', - 'host', - 'hostname', - 'origin', - 'pathname', - 'port', - 'protocol', - 'search', - 'searchParams', - 'toString', - 'toJSON' -]; - -/** - * @param {'from' | 'to'} type - * @param {import('types').NavigationTarget} target - */ -function add_url_properties(type, target) { - for (const prop of properties) { - Object.defineProperty(target, prop, { - get() { - throw new Error( - `The navigation shape changed - ${type}.${prop} should now be ${type}.url.${prop}` - ); - }, - enumerable: false - }); - } - - Object.defineProperty(target, 'routeId', { - get() { - throw new Error( - `The navigation shape changed - ${type}.routeId should now be ${type}.route.id` - ); - }, - enumerable: false - }); - - return target; -} - -function pre_update() { - if (__SVELTEKIT_DEV__) { - return () => { - check_for_removed_attributes(); - }; - } - - return () => {}; -} - function reset_focus() { const autofocus = document.querySelector('[autofocus]'); if (autofocus) { diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index 08de05ac5eb3..d3a918757e54 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -1,6 +1,6 @@ import { negotiate } from '../../utils/http.js'; import { Redirect } from '../control.js'; -import { check_method_names, method_not_allowed } from './utils.js'; +import { method_not_allowed } from './utils.js'; /** * @param {import('types').RequestEvent} event @@ -11,9 +11,6 @@ import { check_method_names, method_not_allowed } from './utils.js'; export async function render_endpoint(event, mod, state) { const method = /** @type {import('types').HttpMethod} */ (event.request.method); - // TODO: Remove for 1.0 - check_method_names(mod); - let handler = mod[method]; if (!handler && method === 'HEAD') { diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index dfce7d8f2703..a67652174763 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -150,41 +150,6 @@ export async function respond(request, options, state) { isDataRequest: is_data_request }; - // TODO remove this for 1.0 - /** - * @param {string} property - * @param {string} replacement - * @param {string} suffix - */ - const removed = (property, replacement, suffix = '') => ({ - get: () => { - throw new Error(`event.${property} has been replaced by event.${replacement}` + suffix); - } - }); - - const details = '. See https://github.com/sveltejs/kit/pull/3384 for details'; - - const body_getter = { - get: () => { - throw new Error( - 'To access the request body use the text/json/arrayBuffer/formData methods, e.g. `body = await request.json()`' + - details - ); - } - }; - - Object.defineProperties(event, { - clientAddress: removed('clientAddress', 'getClientAddress'), - method: removed('method', 'request.method', details), - headers: removed('headers', 'request.headers', details), - origin: removed('origin', 'url.origin'), - path: removed('path', 'url.pathname'), - query: removed('query', 'url.searchParams'), - body: body_getter, - rawBody: body_getter, - routeId: removed('routeId', 'route.id') - }); - /** @type {import('types').RequiredResolveOptions} */ let resolve_opts = { transformPageChunk: default_transform, @@ -275,12 +240,7 @@ export async function respond(request, options, state) { } return response; - }), - // TODO remove for 1.0 - // @ts-expect-error - get request() { - throw new Error('request in handle has been replaced with event' + details); - } + }) }); // respond with 304 if etag matches @@ -346,13 +306,6 @@ export async function respond(request, options, state) { async function resolve(event, opts) { try { if (opts) { - // TODO remove for 1.0 - if ('transformPage' in opts) { - throw new Error( - 'transformPage has been replaced by transformPageChunk — see https://github.com/sveltejs/kit/pull/5657 for more information' - ); - } - if ('ssr' in opts) { throw new Error( 'ssr has been removed, set it in the appropriate +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197' diff --git a/packages/kit/src/runtime/server/page/load_data.js b/packages/kit/src/runtime/server/page/load_data.js index 458d1c8bcbe9..f9ccc47e6deb 100644 --- a/packages/kit/src/runtime/server/page/load_data.js +++ b/packages/kit/src/runtime/server/page/load_data.js @@ -98,8 +98,7 @@ export async function load_data({ return server_data_node?.data ?? null; } - /** @type {import('types').LoadEvent} */ - const load_event = { + const data = await node.shared.load.call(null, { url: event.url, params: event.params, data: server_data_node?.data ?? null, @@ -222,22 +221,8 @@ export async function load_data({ setHeaders: event.setHeaders, depends: () => {}, parent - }; - - // TODO remove this for 1.0 - Object.defineProperties(load_event, { - session: { - get() { - throw new Error( - 'session is no longer available. See https://github.com/sveltejs/kit/discussions/5883' - ); - }, - enumerable: false - } }); - const data = await node.shared.load.call(null, load_event); - return data ? unwrap_promises(data) : null; } diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index 5d1680e99575..b6fa3df7d484 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -102,23 +102,6 @@ export async function render_response({ form: form_value }; - // TODO remove this for 1.0 - /** - * @param {string} property - * @param {string} replacement - */ - const print_error = (property, replacement) => { - Object.defineProperty(props.page, property, { - get: () => { - throw new Error(`$page.${property} has been replaced by $page.url.${replacement}`); - } - }); - }; - - print_error('origin', 'origin'); - print_error('path', 'pathname'); - print_error('query', 'searchParams'); - rendered = options.root.render(props); for (const { node } of branch) { diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js index e0492e52fd58..2f351736d4d2 100644 --- a/packages/kit/src/runtime/server/utils.js +++ b/packages/kit/src/runtime/server/utils.js @@ -11,30 +11,11 @@ export function is_pojo(body) { if (body) { if (body instanceof Uint8Array) return false; if (body instanceof ReadableStream) return false; - - // if body is a node Readable, throw an error - // TODO remove this for 1.0 - if (body._readableState && typeof body.pipe === 'function') { - throw new Error('Node streams are no longer supported — use a ReadableStream instead'); - } } return true; } -// TODO: Remove for 1.0 -/** @param {Record} mod */ -export function check_method_names(mod) { - ['get', 'post', 'put', 'patch', 'del'].forEach((m) => { - if (m in mod) { - const replacement = m === 'del' ? 'DELETE' : m.toUpperCase(); - throw Error( - `Endpoint method "${m}" has changed to "${replacement}". See https://github.com/sveltejs/kit/discussions/5359 for more information.` - ); - } - }); -} - /** @type {import('types').SSRErrorPage} */ export const GENERIC_ERROR = { id: '__error' @@ -79,15 +60,6 @@ export function allowed_methods(mod) { */ export function get_option(nodes, option) { return nodes.reduce((value, node) => { - // TODO remove for 1.0 - for (const thing of [node?.server, node?.shared]) { - if (thing && ('router' in thing || 'hydrate' in thing)) { - throw new Error( - '`export const hydrate` and `export const router` have been replaced with `export const csr`. See https://github.com/sveltejs/kit/pull/6446' - ); - } - } - return /** @type {any} TypeScript's too dumb to understand this */ ( node?.shared?.[option] ?? node?.server?.[option] ?? value ); From 6128d576bac5ba6b86fa68bcbe45ac82963f7051 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 8 Dec 2022 23:53:19 -0500 Subject: [PATCH 2/4] missed a spot --- packages/kit/src/core/config/options.js | 31 ------------------------- 1 file changed, 31 deletions(-) diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 51daee0324af..2aa87c8a291b 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -134,17 +134,10 @@ const options = object( inlineStyleThreshold: number(0), - methodOverride: error( - () => - 'Method overrides have been removed in favor of actions. See the PR for more information: https://github.com/sveltejs/kit/pull/6469' - ), - moduleExtensions: string_array(['.js', '.ts']), outDir: string('.svelte-kit'), - package: error((keypath) => `${keypath} has been removed — use @sveltejs/package instead`), - paths: object({ base: validate('', (input, keypath) => { assert_string(input, keypath); @@ -181,18 +174,6 @@ const options = object( prerender: object({ concurrency: number(1), crawl: boolean(true), - createIndexFiles: error( - (keypath) => - `${keypath} has been removed — it is now controlled by the trailingSlash option. See https://kit.svelte.dev/docs/page-options#trailingslash` - ), - default: error( - (keypath) => - `${keypath} has been removed. You can set it inside the top level +layout.js instead. See the PR for more information: https://github.com/sveltejs/kit/pull/6197` - ), - enabled: error( - (keypath) => - `${keypath} has been removed. You can wrap any code that should not be executed during build in a \`if (!building) {...}\` block. See the discussion for more information: https://github.com/sveltejs/kit/discussions/7716` - ), entries: validate(['*'], (input, keypath) => { if (!Array.isArray(input) || !input.every((page) => typeof page === 'string')) { throw new Error(`${keypath} must be an array of strings`); @@ -245,11 +226,6 @@ const options = object( files: fun((filename) => !/\.DS_Store/.test(filename)) }), - trailingSlash: error( - (keypath, input) => - `${keypath} has been removed. You can set \`export const trailingSlash = '${input}'\` inside a top level +layout.js (or +layout.server.js) instead. See the PR for more information: https://github.com/sveltejs/kit/pull/7719` - ), - version: object({ name: string(Date.now().toString()), pollInterval: number(0) @@ -408,11 +384,4 @@ function assert_string(input, keypath) { } } -/** @param {(keypath?: string, input?: any) => string} fn */ -function error(fn) { - return validate(undefined, (input, keypath) => { - throw new Error(fn(keypath, input)); - }); -} - export default options; From dfbae90db173498391ba9b1e01e4a7aa87d964b3 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 9 Dec 2022 00:12:36 -0500 Subject: [PATCH 3/4] changeset --- .changeset/forty-apricots-sin.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/forty-apricots-sin.md diff --git a/.changeset/forty-apricots-sin.md b/.changeset/forty-apricots-sin.md new file mode 100644 index 000000000000..b2a59d612fdb --- /dev/null +++ b/.changeset/forty-apricots-sin.md @@ -0,0 +1,8 @@ +--- +'@sveltejs/adapter-cloudflare': patch +'@sveltejs/adapter-cloudflare-workers': patch +'@sveltejs/adapter-node': patch +'@sveltejs/kit': patch +--- + +[breaking] remove warnings/errors about removed/changed APIs From 52011d2da56bebafc2631e12b6de992f0253d1ff Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 13 Dec 2022 18:20:53 -0500 Subject: [PATCH 4/4] oops --- packages/kit/src/runtime/client/client.js | 57 ----------------------- 1 file changed, 57 deletions(-) diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 4dbad2abfebf..ea1a1a6bfa33 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -1678,63 +1678,6 @@ function handle_error(error, event) { ); } -<<<<<<< HEAD -======= -// TODO remove for 1.0 -const properties = [ - 'hash', - 'href', - 'host', - 'hostname', - 'origin', - 'pathname', - 'port', - 'protocol', - 'search', - 'searchParams', - 'toString', - 'toJSON' -]; - -/** - * @param {'from' | 'to'} type - * @param {import('types').NavigationTarget} target - */ -function add_url_properties(type, target) { - for (const prop of properties) { - Object.defineProperty(target, prop, { - get() { - throw new Error( - `The navigation shape changed - ${type}.${prop} should now be ${type}.url.${prop}` - ); - }, - enumerable: false - }); - } - - Object.defineProperty(target, 'routeId', { - get() { - throw new Error( - `The navigation shape changed - ${type}.routeId should now be ${type}.route.id` - ); - }, - enumerable: false - }); - - return target; -} - -function pre_update() { - if (DEV) { - return () => { - check_for_removed_attributes(); - }; - } - - return () => {}; -} - ->>>>>>> master function reset_focus() { const autofocus = document.querySelector('[autofocus]'); if (autofocus) {