diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/AnimateDirective.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/AnimateDirective.js index 3b4f7007be..e1e431cc8b 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/AnimateDirective.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/AnimateDirective.js @@ -7,6 +7,10 @@ import * as e from '../../../errors.js'; * @param {Context} context */ export function AnimateDirective(node, context) { + if (context.state.analysis.custom_renderer) { + e.incompatible_with_custom_renderer(node, '`animate:`'); + } + context.next({ ...context.state, expression: node.metadata.expression }); if (node.metadata.expression.has_await) { diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/BindDirective.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/BindDirective.js index ab541703a0..5701ed438d 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/BindDirective.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/BindDirective.js @@ -27,6 +27,9 @@ export function BindDirective(node, context) { parent?.type === 'SvelteDocument' || parent?.type === 'SvelteBody' ) { + if (context.state.analysis.custom_renderer) { + e.incompatible_with_custom_renderer(node, '`bind:`'); + } if (node.name in binding_properties) { const property = binding_properties[node.name]; if (property.valid_elements && !property.valid_elements.includes(parent.name)) { diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/TransitionDirective.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/TransitionDirective.js index e50e28a04c..01a6229088 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/TransitionDirective.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/TransitionDirective.js @@ -9,6 +9,11 @@ import { mark_subtree_dynamic } from './shared/fragment.js'; * @param {Context} context */ export function TransitionDirective(node, context) { + if (context.state.analysis.custom_renderer) { + const directive = node.intro && node.outro ? '`transition:`' : node.intro ? '`in:`' : '`out:`'; + e.incompatible_with_custom_renderer(node, directive); + } + mark_subtree_dynamic(context.path); context.next({ ...context.state, expression: node.metadata.expression }); diff --git a/packages/svelte/tests/custom-renderers/samples/animate-directive/_config.js b/packages/svelte/tests/custom-renderers/samples/animate-directive/_config.js new file mode 100644 index 0000000000..31225d6a4b --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/animate-directive/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + compile_error: '`animate:` is not compatible with `customRenderer`' +}); diff --git a/packages/svelte/tests/custom-renderers/samples/animate-directive/main.svelte b/packages/svelte/tests/custom-renderers/samples/animate-directive/main.svelte new file mode 100644 index 0000000000..ee05d573c6 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/animate-directive/main.svelte @@ -0,0 +1,9 @@ + + +{#each items as item (item)} +
{item}
+{/each} diff --git a/packages/svelte/tests/custom-renderers/samples/bind-component/Child.svelte b/packages/svelte/tests/custom-renderers/samples/bind-component/Child.svelte new file mode 100644 index 0000000000..ac9ec4cabb --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/bind-component/Child.svelte @@ -0,0 +1,5 @@ + + +{value} diff --git a/packages/svelte/tests/custom-renderers/samples/bind-component/_config.js b/packages/svelte/tests/custom-renderers/samples/bind-component/_config.js new file mode 100644 index 0000000000..b653297599 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/bind-component/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + html: 'hello' +}); diff --git a/packages/svelte/tests/custom-renderers/samples/bind-component/main.svelte b/packages/svelte/tests/custom-renderers/samples/bind-component/main.svelte new file mode 100644 index 0000000000..f81a6a32b5 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/bind-component/main.svelte @@ -0,0 +1,7 @@ + + + diff --git a/packages/svelte/tests/custom-renderers/samples/bind-directive/_config.js b/packages/svelte/tests/custom-renderers/samples/bind-directive/_config.js new file mode 100644 index 0000000000..fcba387f65 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/bind-directive/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + compile_error: '`bind:` is not compatible with `customRenderer`' +}); diff --git a/packages/svelte/tests/custom-renderers/samples/bind-directive/main.svelte b/packages/svelte/tests/custom-renderers/samples/bind-directive/main.svelte new file mode 100644 index 0000000000..e19ec21bee --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/bind-directive/main.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/svelte/tests/custom-renderers/samples/in-directive/_config.js b/packages/svelte/tests/custom-renderers/samples/in-directive/_config.js new file mode 100644 index 0000000000..1da5d37f9d --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/in-directive/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + compile_error: '`in:` is not compatible with `customRenderer`' +}); diff --git a/packages/svelte/tests/custom-renderers/samples/in-directive/main.svelte b/packages/svelte/tests/custom-renderers/samples/in-directive/main.svelte new file mode 100644 index 0000000000..1345e1a3af --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/in-directive/main.svelte @@ -0,0 +1,5 @@ + + +
content
diff --git a/packages/svelte/tests/custom-renderers/samples/out-directive/_config.js b/packages/svelte/tests/custom-renderers/samples/out-directive/_config.js new file mode 100644 index 0000000000..1e35712b96 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/out-directive/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + compile_error: '`out:` is not compatible with `customRenderer`' +}); diff --git a/packages/svelte/tests/custom-renderers/samples/out-directive/main.svelte b/packages/svelte/tests/custom-renderers/samples/out-directive/main.svelte new file mode 100644 index 0000000000..9b9d676393 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/out-directive/main.svelte @@ -0,0 +1,5 @@ + + +
content
diff --git a/packages/svelte/tests/custom-renderers/samples/transition-directive/_config.js b/packages/svelte/tests/custom-renderers/samples/transition-directive/_config.js new file mode 100644 index 0000000000..70f59a5886 --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/transition-directive/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + compile_error: '`transition:` is not compatible with `customRenderer`' +}); diff --git a/packages/svelte/tests/custom-renderers/samples/transition-directive/main.svelte b/packages/svelte/tests/custom-renderers/samples/transition-directive/main.svelte new file mode 100644 index 0000000000..021567e97c --- /dev/null +++ b/packages/svelte/tests/custom-renderers/samples/transition-directive/main.svelte @@ -0,0 +1,5 @@ + + +
content