From cdfed0eb0bae15502df8d39beec48ec94fa4d25b Mon Sep 17 00:00:00 2001 From: Elliott Johnson Date: Fri, 12 Dec 2025 11:13:27 -0700 Subject: [PATCH] switch to error --- .../98-reference/.generated/server-errors.md | 6 ++++++ .../98-reference/.generated/server-warnings.md | 7 ------- .../svelte/messages/server-errors/errors.md | 4 ++++ .../svelte/messages/server-warnings/warnings.md | 5 ----- packages/svelte/src/internal/server/errors.js | 12 ++++++++++++ packages/svelte/src/internal/server/index.js | 4 ++-- packages/svelte/src/internal/server/warnings.js | 17 ----------------- .../_config.js | 2 +- .../_expected_head.html | 0 .../main.svelte | 0 10 files changed, 25 insertions(+), 32 deletions(-) rename packages/svelte/tests/server-side-rendering/samples/{csp-nonce-precedence => csp-config-error}/_config.js (84%) rename packages/svelte/tests/server-side-rendering/samples/{csp-nonce-precedence => csp-config-error}/_expected_head.html (100%) rename packages/svelte/tests/server-side-rendering/samples/{csp-nonce-precedence => csp-config-error}/main.svelte (100%) diff --git a/documentation/docs/98-reference/.generated/server-errors.md b/documentation/docs/98-reference/.generated/server-errors.md index 4d05e04207..c98756afec 100644 --- a/documentation/docs/98-reference/.generated/server-errors.md +++ b/documentation/docs/98-reference/.generated/server-errors.md @@ -55,6 +55,12 @@ Cause: %stack% ``` +### invalid_csp + +``` +`csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously. +``` + ### lifecycle_function_unavailable ``` diff --git a/documentation/docs/98-reference/.generated/server-warnings.md b/documentation/docs/98-reference/.generated/server-warnings.md index ec8b04123d..c4a7fbefef 100644 --- a/documentation/docs/98-reference/.generated/server-warnings.md +++ b/documentation/docs/98-reference/.generated/server-warnings.md @@ -1,12 +1,5 @@ -### invalid_csp - -``` -`csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously. -`nonce` will be used. -``` - ### unresolved_hydratable ``` diff --git a/packages/svelte/messages/server-errors/errors.md b/packages/svelte/messages/server-errors/errors.md index ac2ecc0a40..fd4c17e2a7 100644 --- a/packages/svelte/messages/server-errors/errors.md +++ b/packages/svelte/messages/server-errors/errors.md @@ -43,6 +43,10 @@ This error occurs when using `hydratable` multiple times with the same key. To a > Cause: > %stack% +## invalid_csp + +> `csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously. + ## lifecycle_function_unavailable > `%name%(...)` is not available on the server diff --git a/packages/svelte/messages/server-warnings/warnings.md b/packages/svelte/messages/server-warnings/warnings.md index ca23596fd2..89e1c9d718 100644 --- a/packages/svelte/messages/server-warnings/warnings.md +++ b/packages/svelte/messages/server-warnings/warnings.md @@ -1,8 +1,3 @@ -## invalid_csp - -> `csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously. -> `nonce` will be used. - ## unresolved_hydratable > A `hydratable` value with key `%key%` was created, but at least part of it was not used during the render. diff --git a/packages/svelte/src/internal/server/errors.js b/packages/svelte/src/internal/server/errors.js index 3d6c0ffbdd..c966c32062 100644 --- a/packages/svelte/src/internal/server/errors.js +++ b/packages/svelte/src/internal/server/errors.js @@ -80,6 +80,18 @@ ${stack}\nhttps://svelte.dev/e/hydratable_serialization_failed`); throw error; } +/** + * `csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously. + * @returns {never} + */ +export function invalid_csp() { + const error = new Error(`invalid_csp\n\`csp.nonce\` was set while \`csp.hash\` was \`true\`. These options cannot be used simultaneously.\nhttps://svelte.dev/e/invalid_csp`); + + error.name = 'Svelte error'; + + throw error; +} + /** * `%name%(...)` is not available on the server * @param {string} name diff --git a/packages/svelte/src/internal/server/index.js b/packages/svelte/src/internal/server/index.js index 5f8b344fd3..033867b76e 100644 --- a/packages/svelte/src/internal/server/index.js +++ b/packages/svelte/src/internal/server/index.js @@ -17,7 +17,7 @@ import { EMPTY_COMMENT, BLOCK_CLOSE, BLOCK_OPEN, BLOCK_OPEN_ELSE } from './hydra import { validate_store } from '../shared/validate.js'; import { is_boolean_attribute, is_raw_text_element, is_void } from '../../utils.js'; import { Renderer } from './renderer.js'; -import * as w from './warnings.js'; +import * as e from './errors.js'; // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 // https://infra.spec.whatwg.org/#noncharacter @@ -69,7 +69,7 @@ export function render(component, options = {}) { // @ts-expect-error if (options.csp.hash && options.csp.nonce) { - w.invalid_csp(); + e.invalid_csp(); } } return Renderer.render(/** @type {Component} */ (component), { diff --git a/packages/svelte/src/internal/server/warnings.js b/packages/svelte/src/internal/server/warnings.js index 6c05da24e2..fc44a086af 100644 --- a/packages/svelte/src/internal/server/warnings.js +++ b/packages/svelte/src/internal/server/warnings.js @@ -5,23 +5,6 @@ import { DEV } from 'esm-env'; var bold = 'font-weight: bold'; var normal = 'font-weight: normal'; -/** - * `csp.nonce` was set while `csp.hash` was `true`. These options cannot be used simultaneously. - * `nonce` will be used. - */ -export function invalid_csp() { - if (DEV) { - console.warn( - `%c[svelte] invalid_csp\n%c\`csp.nonce\` was set while \`csp.hash\` was \`true\`. These options cannot be used simultaneously. -\`nonce\` will be used.\nhttps://svelte.dev/e/invalid_csp`, - bold, - normal - ); - } else { - console.warn(`https://svelte.dev/e/invalid_csp`); - } -} - /** * A `hydratable` value with key `%key%` was created, but at least part of it was not used during the render. * diff --git a/packages/svelte/tests/server-side-rendering/samples/csp-nonce-precedence/_config.js b/packages/svelte/tests/server-side-rendering/samples/csp-config-error/_config.js similarity index 84% rename from packages/svelte/tests/server-side-rendering/samples/csp-nonce-precedence/_config.js rename to packages/svelte/tests/server-side-rendering/samples/csp-config-error/_config.js index a0f8e82261..03626fc37b 100644 --- a/packages/svelte/tests/server-side-rendering/samples/csp-nonce-precedence/_config.js +++ b/packages/svelte/tests/server-side-rendering/samples/csp-config-error/_config.js @@ -3,5 +3,5 @@ import { test } from '../../test'; export default test({ mode: ['async'], csp: { hash: true, nonce: 'test-nonce' }, - script_hashes: [] + error: 'invalid_csp' }); diff --git a/packages/svelte/tests/server-side-rendering/samples/csp-nonce-precedence/_expected_head.html b/packages/svelte/tests/server-side-rendering/samples/csp-config-error/_expected_head.html similarity index 100% rename from packages/svelte/tests/server-side-rendering/samples/csp-nonce-precedence/_expected_head.html rename to packages/svelte/tests/server-side-rendering/samples/csp-config-error/_expected_head.html diff --git a/packages/svelte/tests/server-side-rendering/samples/csp-nonce-precedence/main.svelte b/packages/svelte/tests/server-side-rendering/samples/csp-config-error/main.svelte similarity index 100% rename from packages/svelte/tests/server-side-rendering/samples/csp-nonce-precedence/main.svelte rename to packages/svelte/tests/server-side-rendering/samples/csp-config-error/main.svelte