Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions dev-packages/e2e-tests/test-applications/nuxt-3/copyIITM.mjs
Original file line number Diff line number Diff line change
@@ -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.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

m: Could we not just use cp inside the build script in package.json instead of writing code to copy this over?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed it, so much cleaner ✨
Thanks for the input!


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}[email protected]${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);
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,10 @@ export default defineNuxtConfig({
},
},
},
nitro: {
rollupConfig: {
// @sentry/... is set external to prevent bundling all of Sentry into the `runtime.mjs` file in the build output
external: [/@sentry\/.*/],
},
},
});
8 changes: 6 additions & 2 deletions dev-packages/e2e-tests/test-applications/nuxt-3/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
"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",
"preview": "nuxt preview",
"start": "node --import ./.output/server/sentry.server.config.mjs .output/server/index.mjs",
"clean": "npx nuxi cleanup",
"test": "playwright test",
"test:build": "pnpm install && npx playwright install && pnpm build",
Expand All @@ -20,5 +21,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"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const nuxtConfigOptions: ConfigOptions = {
* Like this: import { expect, test } from '@nuxt/test-utils/playwright' */

const config = getPlaywrightConfig({
startCommand: `pnpm preview`,
startCommand: `pnpm start`,
use: { ...nuxtConfigOptions },
});

Expand Down
52 changes: 52 additions & 0 deletions dev-packages/e2e-tests/test-applications/nuxt-4/copyIITM.mjs
Original file line number Diff line number Diff line change
@@ -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}[email protected]${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);
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,10 @@ export default defineNuxtConfig({
},
},
},
nitro: {
rollupConfig: {
// @sentry/... is set external to prevent bundling all of Sentry into the `runtime.mjs` file in the build output
external: [/@sentry\/.*/],
},
},
});
8 changes: 6 additions & 2 deletions dev-packages/e2e-tests/test-applications/nuxt-4/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
"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",
"preview": "nuxt preview",
"start": "node --import ./.output/server/sentry.server.config.mjs .output/server/index.mjs",
"clean": "npx nuxi cleanup",
"test": "playwright test",
"test:build": "pnpm install && npx playwright install && pnpm build",
Expand All @@ -20,5 +21,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"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const nuxtConfigOptions: ConfigOptions = {
* Like this: import { expect, test } from '@nuxt/test-utils/playwright' */

const config = getPlaywrightConfig({
startCommand: `pnpm preview`,
startCommand: `pnpm start`,
use: { ...nuxtConfigOptions },
});

Expand Down
Original file line number Diff line number Diff line change
@@ -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 () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -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';

Expand Down
Loading