diff --git a/dev-packages/e2e-tests/test-applications/nuxt-3/copyIITM.mjs b/dev-packages/e2e-tests/test-applications/nuxt-3/copyIITM.mjs new file mode 100644 index 000000000000..d1c75e337710 --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/nuxt-3/copyIITM.mjs @@ -0,0 +1,52 @@ +import fs from 'fs'; +import path from 'path'; + +/* This script copies the `import-in-the-middle` content of the E2E test project root `node_modules` to the build output `node_modules` + For some reason, some files are missing in the output (like `hook.mjs`) and this is not reproducible in external, standalone projects. + + Things we tried (that did not fix the problem): + - Adding a resolution for `@vercel/nft` v0.27.0 (this worked in the standalone project) + - Also adding `@vercel/nft` v0.27.0 to pnpm `peerDependencyRules` + */ +function copyFolderSync(src, dest) { + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest, { recursive: true }); + } + + const entries = fs.readdirSync(src, { withFileTypes: true }); + + for (let entry of entries) { + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + copyFolderSync(srcPath, destPath); + } else { + fs.copyFileSync(srcPath, destPath); + } + } +} + +function getSourceFolder() { + const specificVersionFolder = `node_modules${path.sep}.pnpm${path.sep}import-in-the-middle@1.11.2${path.sep}node_modules${path.sep}import-in-the-middle`; + + if (fs.existsSync(specificVersionFolder)) { + return specificVersionFolder; + } + + const parentFolder = `node_modules${path.sep}.pnpm`; + const folders = fs.readdirSync(parentFolder, { withFileTypes: true }); + + for (let folder of folders) { + if (folder.isDirectory() && folder.name.startsWith('import-in-the-middle@')) { + return path.join(parentFolder, folder.name, 'node_modules', 'import-in-the-middle'); + } + } + + throw new Error('No suitable import-in-the-middle folder found'); +} + +const sourceFolder = getSourceFolder(); +const destinationFolder = `.output${path.sep}server${path.sep}node_modules${path.sep}import-in-the-middle`; + +copyFolderSync(sourceFolder, destinationFolder); diff --git a/dev-packages/e2e-tests/test-applications/nuxt-3/package.json b/dev-packages/e2e-tests/test-applications/nuxt-3/package.json index 7173aeaa4ce5..9c8990aad3ea 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-3/package.json +++ b/dev-packages/e2e-tests/test-applications/nuxt-3/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "scripts": { - "build": "nuxt build", + "build": "nuxt build && node ./copyIITM.mjs", "dev": "nuxt dev", "generate": "nuxt generate", "preview": "NODE_OPTIONS='--import ./public/instrument.server.mjs' nuxt preview", @@ -20,5 +20,8 @@ "@nuxt/test-utils": "^3.14.1", "@playwright/test": "^1.44.1", "@sentry-internal/test-utils": "link:../../../test-utils" + }, + "overrides": { + "@vercel/nft": "0.27.4" } } diff --git a/dev-packages/e2e-tests/test-applications/nuxt-3/public/instrument.server.mjs b/dev-packages/e2e-tests/test-applications/nuxt-3/sentry.server.config.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/nuxt-3/public/instrument.server.mjs rename to dev-packages/e2e-tests/test-applications/nuxt-3/sentry.server.config.ts diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/copyIITM.mjs b/dev-packages/e2e-tests/test-applications/nuxt-4/copyIITM.mjs new file mode 100644 index 000000000000..d1c75e337710 --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/copyIITM.mjs @@ -0,0 +1,52 @@ +import fs from 'fs'; +import path from 'path'; + +/* This script copies the `import-in-the-middle` content of the E2E test project root `node_modules` to the build output `node_modules` + For some reason, some files are missing in the output (like `hook.mjs`) and this is not reproducible in external, standalone projects. + + Things we tried (that did not fix the problem): + - Adding a resolution for `@vercel/nft` v0.27.0 (this worked in the standalone project) + - Also adding `@vercel/nft` v0.27.0 to pnpm `peerDependencyRules` + */ +function copyFolderSync(src, dest) { + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest, { recursive: true }); + } + + const entries = fs.readdirSync(src, { withFileTypes: true }); + + for (let entry of entries) { + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + copyFolderSync(srcPath, destPath); + } else { + fs.copyFileSync(srcPath, destPath); + } + } +} + +function getSourceFolder() { + const specificVersionFolder = `node_modules${path.sep}.pnpm${path.sep}import-in-the-middle@1.11.2${path.sep}node_modules${path.sep}import-in-the-middle`; + + if (fs.existsSync(specificVersionFolder)) { + return specificVersionFolder; + } + + const parentFolder = `node_modules${path.sep}.pnpm`; + const folders = fs.readdirSync(parentFolder, { withFileTypes: true }); + + for (let folder of folders) { + if (folder.isDirectory() && folder.name.startsWith('import-in-the-middle@')) { + return path.join(parentFolder, folder.name, 'node_modules', 'import-in-the-middle'); + } + } + + throw new Error('No suitable import-in-the-middle folder found'); +} + +const sourceFolder = getSourceFolder(); +const destinationFolder = `.output${path.sep}server${path.sep}node_modules${path.sep}import-in-the-middle`; + +copyFolderSync(sourceFolder, destinationFolder); diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/package.json b/dev-packages/e2e-tests/test-applications/nuxt-4/package.json index 14e28d852c88..2e08f080838b 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/package.json +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/package.json @@ -3,7 +3,7 @@ "private": true, "type": "module", "scripts": { - "build": "nuxt build", + "build": "nuxt build && node ./copyIITM.mjs", "dev": "nuxt dev", "generate": "nuxt generate", "preview": "NODE_OPTIONS='--import ./public/instrument.server.mjs' nuxt preview", @@ -20,5 +20,8 @@ "@nuxt/test-utils": "^3.14.2", "@playwright/test": "^1.44.1", "@sentry-internal/test-utils": "link:../../../test-utils" + }, + "overrides": { + "@vercel/nft": "0.27.4" } } diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/public/instrument.server.mjs b/dev-packages/e2e-tests/test-applications/nuxt-4/sentry.server.config.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/nuxt-4/public/instrument.server.mjs rename to dev-packages/e2e-tests/test-applications/nuxt-4/sentry.server.config.ts diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.client.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.client.test.ts index 1177218aebec..c887e255fe57 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/errors.client.test.ts @@ -1,4 +1,4 @@ -import { expect, test } from '@nuxt/test-utils/playwright'; +import { expect, test } from '@playwright/test'; import { waitForError } from '@sentry-internal/test-utils'; test.describe('client-side errors', async () => { diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.client.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.client.test.ts index 871d8b19513c..9119e279e491 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.client.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/tracing.client.test.ts @@ -1,4 +1,4 @@ -import { expect, test } from '@nuxt/test-utils/playwright'; +import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; import type { Span } from '@sentry/nuxt';