From bf62ba62fd2a1a4d6130112858ec5c8ec9e3acfe Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 21 Jul 2022 13:24:48 +0100 Subject: [PATCH 1/3] fix(pages): ignore expression delimiters within quotes --- packages/nuxt/src/pages/macros.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/nuxt/src/pages/macros.ts b/packages/nuxt/src/pages/macros.ts index 2ddc9197695..bdc9658a1de 100644 --- a/packages/nuxt/src/pages/macros.ts +++ b/packages/nuxt/src/pages/macros.ts @@ -98,6 +98,8 @@ const starts = { "'": "'" } +const quotes = ['"', "'"] + function extractObject (code: string) { // Strip comments code = code.replace(/^\s*\/\/.*$/gm, '') @@ -107,7 +109,7 @@ function extractObject (code: string) { do { if (stack[0] === code[0] && result.slice(-1) !== '\\') { stack.shift() - } else if (code[0] in starts) { + } else if (code[0] in starts && !quotes.includes(stack[0])) { stack.unshift(starts[code[0]]) } result += code[0] From 6b368b8fa9f0c0620659a5e359ca3de46bb1a7d8 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 21 Jul 2022 14:43:49 +0100 Subject: [PATCH 2/3] perf: use re --- packages/nuxt/src/pages/macros.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/pages/macros.ts b/packages/nuxt/src/pages/macros.ts index bdc9658a1de..047ee23c3de 100644 --- a/packages/nuxt/src/pages/macros.ts +++ b/packages/nuxt/src/pages/macros.ts @@ -98,7 +98,7 @@ const starts = { "'": "'" } -const quotes = ['"', "'"] +const QUOTE_RE = /["']/ function extractObject (code: string) { // Strip comments @@ -109,7 +109,7 @@ function extractObject (code: string) { do { if (stack[0] === code[0] && result.slice(-1) !== '\\') { stack.shift() - } else if (code[0] in starts && !quotes.includes(stack[0])) { + } else if (code[0] in starts && !QUOTE_RE.test(stack[0])) { stack.unshift(starts[code[0]]) } result += code[0] From e6ece4eae5955a3588fced599f341aee3ed2f23d Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 21 Jul 2022 14:44:51 +0100 Subject: [PATCH 3/3] test: add test that would have failed --- test/fixtures/basic/pages/no-auth.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/test/fixtures/basic/pages/no-auth.vue b/test/fixtures/basic/pages/no-auth.vue index 0fc01f77c9e..21651201706 100644 --- a/test/fixtures/basic/pages/no-auth.vue +++ b/test/fixtures/basic/pages/no-auth.vue @@ -1,5 +1,6 @@