diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/config.json b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/config.json new file mode 100644 index 0000000000..59676736cb --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/config.json @@ -0,0 +1,6 @@ +{ + "ssrFiles": { + "error": "error-ssr.txt", + "expected": "expected-ssr.html" + } +} diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/error-ssr.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/error-ssr.txt new file mode 100644 index 0000000000..fab580ddda --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/error-ssr.txt @@ -0,0 +1 @@ +LWCTODO: identifier name '__lwcThrowAnError__' cannot start with '__lwc' \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/error.txt b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/error.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/expected-ssr.html b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/expected-ssr.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/expected.html b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/expected.html new file mode 100644 index 0000000000..3f43fcbd96 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/expected.html @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/index.js b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/index.js new file mode 100644 index 0000000000..14f1a20355 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/index.js @@ -0,0 +1,3 @@ +export const tagName = 'x-dont-do-it-stupid'; +export { default } from 'x/dontDoItStupid'; +export * from 'x/dontDoItStupid'; diff --git a/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/modules/x/dontDoItStupid/dontDoItStupid.js b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/modules/x/dontDoItStupid/dontDoItStupid.js new file mode 100755 index 0000000000..7360b03780 --- /dev/null +++ b/packages/@lwc/engine-server/src/__tests__/fixtures/prohibited-variable-name/modules/x/dontDoItStupid/dontDoItStupid.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; + +export default class TextStatic extends LightningElement { + connectedCallback() { + // This will throw a compile-time error in SSRv2! + const __lwcThrowAnError__ = 'yup'; + console.log(__lwcThrowAnError__); + } +} diff --git a/packages/@lwc/ssr-compiler/src/compile-js/generate-markup.ts b/packages/@lwc/ssr-compiler/src/compile-js/generate-markup.ts index 44238d1faf..f817734ae4 100644 --- a/packages/@lwc/ssr-compiler/src/compile-js/generate-markup.ts +++ b/packages/@lwc/ssr-compiler/src/compile-js/generate-markup.ts @@ -20,7 +20,7 @@ const bGenerateMarkup = esTemplate` const __lwcPublicProperties__ = new Set(${/*public properties*/ is.arrayExpression}.concat(__lwcSuperPublicProperties__)); const __lwcPrivateProperties__ = new Set(${/*private properties*/ is.arrayExpression}); - async function* generateMarkup( + ${/* component class */ 0}[__SYMBOL__GENERATE_MARKUP] = async function* generateMarkup( tagName, props, attrs, @@ -75,7 +75,6 @@ const bGenerateMarkup = esTemplate` ); yield \`\`; } - ${/* component class */ 0}[__SYMBOL__GENERATE_MARKUP] = generateMarkup; ${/* component class */ 0}.__lwcPublicProperties__ = __lwcPublicProperties__; `<[Statement]>; diff --git a/packages/@lwc/ssr-compiler/src/compile-js/index.ts b/packages/@lwc/ssr-compiler/src/compile-js/index.ts index 2bb73eb60d..49c42abc6d 100644 --- a/packages/@lwc/ssr-compiler/src/compile-js/index.ts +++ b/packages/@lwc/ssr-compiler/src/compile-js/index.ts @@ -261,6 +261,13 @@ const visitors: Visitors = { } }, }, + Identifier(path, _state) { + const { node } = path; + if (node?.name.startsWith('__lwc') && node.name.endsWith('__')) { + // TODO [#5032]: Harmonize errors thrown in `@lwc/ssr-compiler` + throw new Error(`LWCTODO: identifier name '${node.name}' cannot start with '__lwc'`); + } + }, }; function validateUniqueDecorator(decorators: EsDecorator[]) {