From a19c90d1c1774e6c778261f147e961c783202d32 Mon Sep 17 00:00:00 2001 From: julien huang Date: Wed, 26 Apr 2023 21:04:58 +0200 Subject: [PATCH 1/8] fix(nuxt): showError on legacyAsyncData error --- packages/nuxt/src/app/composables/component.ts | 8 ++++++-- test/basic.test.ts | 9 +++++++++ .../fixtures/basic/pages/legacy-async-data-fail.vue | 13 +++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/basic/pages/legacy-async-data-fail.vue diff --git a/packages/nuxt/src/app/composables/component.ts b/packages/nuxt/src/app/composables/component.ts index 921355001109..32de079baf29 100644 --- a/packages/nuxt/src/app/composables/component.ts +++ b/packages/nuxt/src/app/composables/component.ts @@ -5,7 +5,8 @@ import type { NuxtApp } from '../nuxt' import { callWithNuxt, useNuxtApp } from '../nuxt' import { useAsyncData } from './asyncData' import { useRoute } from './router' - +import { createError, showError } from "./error" + export const NuxtComponentIndicator = '__nuxt_component' async function runLegacyAsyncData (res: Record | Promise>, fn: (nuxtApp: NuxtApp) => Promise>) { @@ -14,7 +15,10 @@ async function runLegacyAsyncData (res: Record | Promise '') : fetchKey || route.fullPath - const { data } = await useAsyncData(`options:asyncdata:${key}`, () => callWithNuxt(nuxt, fn, [nuxt])) + const { data, error } = await useAsyncData(`options:asyncdata:${key}`, () => callWithNuxt(nuxt, fn, [nuxt])) + if (error.value) { + return showError(createError(error.value)) + } if (data.value && typeof data.value === 'object') { Object.assign(await res, toRefs(reactive(data.value))) } else if (process.dev) { diff --git a/test/basic.test.ts b/test/basic.test.ts index 14e5a57d8aa6..ccef828edb19 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -353,6 +353,15 @@ describe('pages', () => { await page.waitForLoadState('networkidle') expect(await page.locator('#async-server-component-count').innerHTML()).toContain(('1')) expect(await page.locator('#long-async-component-count').innerHTML()).toContain('1') + await page.close() + }) + + it('/legacy-async-data-fail', async () => { + const page = await createPage('/legacy-async-data-fail') + const html = await page.content() + expect(html).not.toContain('don\'t look at this') + expect(html).toContain('This is the error page') + expect(html).toContain('OH NNNNNNOOOOOOOOOOO') }) }) diff --git a/test/fixtures/basic/pages/legacy-async-data-fail.vue b/test/fixtures/basic/pages/legacy-async-data-fail.vue new file mode 100644 index 000000000000..ee20e755ce9a --- /dev/null +++ b/test/fixtures/basic/pages/legacy-async-data-fail.vue @@ -0,0 +1,13 @@ + + + \ No newline at end of file From 86247641e9d6bf66d52010fa76e88617434b6232 Mon Sep 17 00:00:00 2001 From: julien huang Date: Wed, 26 Apr 2023 21:33:49 +0200 Subject: [PATCH 2/8] lint --- test/fixtures/basic/pages/legacy-async-data-fail.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/basic/pages/legacy-async-data-fail.vue b/test/fixtures/basic/pages/legacy-async-data-fail.vue index ee20e755ce9a..dcb294955a84 100644 --- a/test/fixtures/basic/pages/legacy-async-data-fail.vue +++ b/test/fixtures/basic/pages/legacy-async-data-fail.vue @@ -7,7 +7,7 @@ \ No newline at end of file From f24366e5d2383cb11aaf902308cd883b401ac306 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 19:35:26 +0000 Subject: [PATCH 3/8] [autofix.ci] apply automated fixes --- packages/nuxt/src/app/composables/component.ts | 4 ++-- test/basic.test.ts | 4 ++-- .../basic/pages/legacy-async-data-fail.vue | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/nuxt/src/app/composables/component.ts b/packages/nuxt/src/app/composables/component.ts index 32de079baf29..4cb9374db9ab 100644 --- a/packages/nuxt/src/app/composables/component.ts +++ b/packages/nuxt/src/app/composables/component.ts @@ -5,8 +5,8 @@ import type { NuxtApp } from '../nuxt' import { callWithNuxt, useNuxtApp } from '../nuxt' import { useAsyncData } from './asyncData' import { useRoute } from './router' -import { createError, showError } from "./error" - +import { createError, showError } from './error' + export const NuxtComponentIndicator = '__nuxt_component' async function runLegacyAsyncData (res: Record | Promise>, fn: (nuxtApp: NuxtApp) => Promise>) { diff --git a/test/basic.test.ts b/test/basic.test.ts index ccef828edb19..1790faae6c1b 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -357,8 +357,8 @@ describe('pages', () => { }) it('/legacy-async-data-fail', async () => { - const page = await createPage('/legacy-async-data-fail') - const html = await page.content() + const page = await createPage('/legacy-async-data-fail') + const html = await page.content() expect(html).not.toContain('don\'t look at this') expect(html).toContain('This is the error page') expect(html).toContain('OH NNNNNNOOOOOOOOOOO') diff --git a/test/fixtures/basic/pages/legacy-async-data-fail.vue b/test/fixtures/basic/pages/legacy-async-data-fail.vue index dcb294955a84..072c4ae0009f 100644 --- a/test/fixtures/basic/pages/legacy-async-data-fail.vue +++ b/test/fixtures/basic/pages/legacy-async-data-fail.vue @@ -1,13 +1,13 @@ \ No newline at end of file + From e5853a46cc99a4587b2c31885a10b04578831d2f Mon Sep 17 00:00:00 2001 From: julien huang Date: Wed, 26 Apr 2023 23:57:21 +0200 Subject: [PATCH 4/8] test: use $fetch --- test/basic.test.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/test/basic.test.ts b/test/basic.test.ts index ccef828edb19..35226a559bc4 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -357,11 +357,9 @@ describe('pages', () => { }) it('/legacy-async-data-fail', async () => { - const page = await createPage('/legacy-async-data-fail') - const html = await page.content() - expect(html).not.toContain('don\'t look at this') - expect(html).toContain('This is the error page') - expect(html).toContain('OH NNNNNNOOOOOOOOOOO') + const response = await $fetch('/legacy-async-data-fail').catch(error => error.data) + expect(response).not.toContain('don\'t look at this') + expect(response).toContain('OH NNNNNNOOOOOOOOOOO') }) }) From bb8c9bc0498b6004a608d66d608e262ee15e8c15 Mon Sep 17 00:00:00 2001 From: Julien Huang Date: Wed, 26 Apr 2023 23:58:44 +0200 Subject: [PATCH 5/8] Apply suggestions from code review Co-authored-by: Daniel Roe --- packages/nuxt/src/app/composables/component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/app/composables/component.ts b/packages/nuxt/src/app/composables/component.ts index 4cb9374db9ab..faf4a0abcfb9 100644 --- a/packages/nuxt/src/app/composables/component.ts +++ b/packages/nuxt/src/app/composables/component.ts @@ -5,7 +5,7 @@ import type { NuxtApp } from '../nuxt' import { callWithNuxt, useNuxtApp } from '../nuxt' import { useAsyncData } from './asyncData' import { useRoute } from './router' -import { createError, showError } from './error' +import { createError } from './error' export const NuxtComponentIndicator = '__nuxt_component' @@ -17,7 +17,7 @@ async function runLegacyAsyncData (res: Record | Promise '') : fetchKey || route.fullPath const { data, error } = await useAsyncData(`options:asyncdata:${key}`, () => callWithNuxt(nuxt, fn, [nuxt])) if (error.value) { - return showError(createError(error.value)) + throw createError(error.value) } if (data.value && typeof data.value === 'object') { Object.assign(await res, toRefs(reactive(data.value))) From 59c967e6772e550cb6e0f3ee7f74a7c70057638a Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 22:01:53 +0000 Subject: [PATCH 6/8] [autofix.ci] apply automated fixes --- test/basic.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/basic.test.ts b/test/basic.test.ts index 35226a559bc4..d3e092d96be2 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -357,7 +357,7 @@ describe('pages', () => { }) it('/legacy-async-data-fail', async () => { - const response = await $fetch('/legacy-async-data-fail').catch(error => error.data) + const response = await $fetch('/legacy-async-data-fail').catch(error => error.data) expect(response).not.toContain('don\'t look at this') expect(response).toContain('OH NNNNNNOOOOOOOOOOO') }) From 9d3e0164eac6e9b2b2cb02c7953c8e30fbe55458 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 27 Apr 2023 11:27:41 +0100 Subject: [PATCH 7/8] test: minor tweak --- test/basic.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/basic.test.ts b/test/basic.test.ts index d3e092d96be2..34f1f1ab1e32 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -357,9 +357,10 @@ describe('pages', () => { }) it('/legacy-async-data-fail', async () => { - const response = await $fetch('/legacy-async-data-fail').catch(error => error.data) + const response = await fetch('/legacy-async-data-fail').then(r => r.text()) expect(response).not.toContain('don\'t look at this') expect(response).toContain('OH NNNNNNOOOOOOOOOOO') + await page.close() }) }) From 0e4cd7bb6beee6e1b0f268b6f04916cbdac05daa Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Thu, 27 Apr 2023 11:29:40 +0100 Subject: [PATCH 8/8] chore: oops! --- test/basic.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/basic.test.ts b/test/basic.test.ts index 34f1f1ab1e32..0755a888cf2e 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -360,7 +360,6 @@ describe('pages', () => { const response = await fetch('/legacy-async-data-fail').then(r => r.text()) expect(response).not.toContain('don\'t look at this') expect(response).toContain('OH NNNNNNOOOOOOOOOOO') - await page.close() }) })