@sentry/nuxt 9.8.0 → 9.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/vite/addServerConfig.js +1 -37
- package/build/cjs/vite/addServerConfig.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/vite/addServerConfig.js +2 -38
- package/build/esm/vite/addServerConfig.js.map +1 -1
- package/build/module/module.json +1 -1
- package/build/module/module.mjs +0 -26
- package/build/types/vite/addServerConfig.d.ts +1 -2
- package/build/types/vite/addServerConfig.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -11,8 +11,7 @@ const SERVER_CONFIG_FILENAME = 'sentry.server.config';
|
|
|
11
11
|
/**
|
|
12
12
|
* Adds the `sentry.server.config.ts` file as `sentry.server.config.mjs` to the `.output` directory to be able to reference this file in the node --import option.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
* 2. Copying the file to the `.output` directory after the build process is finished.
|
|
14
|
+
* By adding a Rollup plugin to the Nitro Rollup options, the Sentry server config is transpiled and emitted to the server build.
|
|
16
15
|
*/
|
|
17
16
|
function addServerConfigToBuild(
|
|
18
17
|
moduleOptions,
|
|
@@ -29,41 +28,6 @@ function addServerConfigToBuild(
|
|
|
29
28
|
|
|
30
29
|
rollupConfig.plugins.push(injectServerConfigPlugin(nitro, serverConfigFile, moduleOptions.debug));
|
|
31
30
|
});
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* When the build process is finished, copy the `sentry.server.config` file to the `.output` directory.
|
|
35
|
-
* This is necessary because we need to reference this file path in the node --import option.
|
|
36
|
-
*/
|
|
37
|
-
nitro.hooks.hook('close', async () => {
|
|
38
|
-
const buildDirResolver = kit.createResolver(nitro.options.buildDir);
|
|
39
|
-
const serverDirResolver = kit.createResolver(nitro.options.output.serverDir);
|
|
40
|
-
const source = buildDirResolver.resolve(`dist/server/${SERVER_CONFIG_FILENAME}.mjs`);
|
|
41
|
-
const destination = serverDirResolver.resolve(`${SERVER_CONFIG_FILENAME}.mjs`);
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
await fs.promises.access(source, fs.constants.F_OK);
|
|
45
|
-
await fs.promises.copyFile(source, destination);
|
|
46
|
-
|
|
47
|
-
if (moduleOptions.debug) {
|
|
48
|
-
core.consoleSandbox(() => {
|
|
49
|
-
// eslint-disable-next-line no-console
|
|
50
|
-
console.log(
|
|
51
|
-
`[Sentry] Successfully added the content of the \`${serverConfigFile}\` file to \`${destination}\``,
|
|
52
|
-
);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
} catch (error) {
|
|
56
|
-
if (moduleOptions.debug) {
|
|
57
|
-
core.consoleSandbox(() => {
|
|
58
|
-
// eslint-disable-next-line no-console
|
|
59
|
-
console.warn(
|
|
60
|
-
`[Sentry] An error occurred when trying to add the \`${serverConfigFile}\` file to the \`.output\` directory`,
|
|
61
|
-
error,
|
|
62
|
-
);
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
31
|
}
|
|
68
32
|
|
|
69
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addServerConfig.js","sources":["../../../src/vite/addServerConfig.ts"],"sourcesContent":["import * as fs from 'fs';\nimport { createResolver } from '@nuxt/kit';\nimport { consoleSandbox, logger } from '@sentry/core';\nimport type { Nitro } from 'nitropack';\nimport type { InputPluginOption } from 'rollup';\nimport type { SentryNuxtModuleOptions } from '../common/types';\nimport {\n QUERY_END_INDICATOR,\n SENTRY_REEXPORTED_FUNCTIONS,\n SENTRY_WRAPPED_ENTRY,\n SENTRY_WRAPPED_FUNCTIONS,\n constructFunctionReExport,\n constructWrappedFunctionExportQuery,\n getFilenameFromNodeStartCommand,\n removeSentryQueryFromPath,\n} from './utils';\nimport { existsSync } from 'node:fs';\n\nconst SERVER_CONFIG_FILENAME = 'sentry.server.config';\n\n/**\n * Adds the `sentry.server.config.ts` file as `sentry.server.config.mjs` to the `.output` directory to be able to reference this file in the node --import option.\n *\n * 1. Adding the file as a rollup import, so it is included in the build (automatically transpiles the file).\n * 2. Copying the file to the `.output` directory after the build process is finished.\n */\nexport function addServerConfigToBuild(\n moduleOptions: SentryNuxtModuleOptions,\n nitro: Nitro,\n serverConfigFile: string,\n): void {\n nitro.hooks.hook('rollup:before', (nitro, rollupConfig) => {\n if (rollupConfig?.plugins === null || rollupConfig?.plugins === undefined) {\n rollupConfig.plugins = [];\n } else if (!Array.isArray(rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n rollupConfig.plugins = [rollupConfig.plugins];\n }\n\n rollupConfig.plugins.push(injectServerConfigPlugin(nitro, serverConfigFile, moduleOptions.debug));\n });\n\n /**\n * When the build process is finished, copy the `sentry.server.config` file to the `.output` directory.\n * This is necessary because we need to reference this file path in the node --import option.\n */\n nitro.hooks.hook('close', async () => {\n const buildDirResolver = createResolver(nitro.options.buildDir);\n const serverDirResolver = createResolver(nitro.options.output.serverDir);\n const source = buildDirResolver.resolve(`dist/server/${SERVER_CONFIG_FILENAME}.mjs`);\n const destination = serverDirResolver.resolve(`${SERVER_CONFIG_FILENAME}.mjs`);\n\n try {\n await fs.promises.access(source, fs.constants.F_OK);\n await fs.promises.copyFile(source, destination);\n\n if (moduleOptions.debug) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.log(\n `[Sentry] Successfully added the content of the \\`${serverConfigFile}\\` file to \\`${destination}\\``,\n );\n });\n }\n } catch (error) {\n if (moduleOptions.debug) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] An error occurred when trying to add the \\`${serverConfigFile}\\` file to the \\`.output\\` directory`,\n error,\n );\n });\n }\n }\n });\n}\n\n/**\n * Adds the Sentry server config import at the top of the server entry file to load the SDK on the server.\n * This is necessary for environments where modifying the node option `--import` is not possible.\n * However, only limited tracing instrumentation is supported when doing this.\n */\nexport function addSentryTopImport(moduleOptions: SentryNuxtModuleOptions, nitro: Nitro): void {\n nitro.hooks.hook('close', async () => {\n const fileNameFromCommand =\n nitro.options.commands.preview && getFilenameFromNodeStartCommand(nitro.options.commands.preview);\n\n // other presets ('node-server' or 'vercel') have an index.mjs\n const presetsWithServerFile = ['netlify'];\n\n const entryFileName = fileNameFromCommand\n ? fileNameFromCommand\n : typeof nitro.options.rollupConfig?.output.entryFileNames === 'string'\n ? nitro.options.rollupConfig?.output.entryFileNames\n : presetsWithServerFile.includes(nitro.options.preset)\n ? 'server.mjs'\n : 'index.mjs';\n\n const serverDirResolver = createResolver(nitro.options.output.serverDir);\n const entryFilePath = serverDirResolver.resolve(entryFileName);\n\n try {\n fs.readFile(entryFilePath, 'utf8', (err, data) => {\n const updatedContent = `import './${SERVER_CONFIG_FILENAME}.mjs';\\n${data}`;\n\n fs.writeFile(entryFilePath, updatedContent, 'utf8', () => {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.log(\n `[Sentry] Successfully added the Sentry import to the server entry file \"\\`${entryFilePath}\\`\"`,\n );\n }\n });\n });\n } catch (err) {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] An error occurred when trying to add the Sentry import to the server entry file \"\\`${entryFilePath}\\`\":`,\n err,\n );\n }\n }\n });\n}\n\n/**\n * This function modifies the Rollup configuration to include a plugin that wraps the entry file with a dynamic import (`import()`)\n * and adds the Sentry server config with the static `import` declaration.\n *\n * With this, the Sentry server config can be loaded before all other modules of the application (which is needed for import-in-the-middle).\n * See: https://nodejs.org/api/module.html#enabling\n */\nexport function addDynamicImportEntryFileWrapper(\n nitro: Nitro,\n serverConfigFile: string,\n moduleOptions: Omit<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'> &\n Required<Pick<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'>>,\n): void {\n if (!nitro.options.rollupConfig) {\n nitro.options.rollupConfig = { output: {} };\n }\n\n if (nitro.options.rollupConfig?.plugins === null || nitro.options.rollupConfig?.plugins === undefined) {\n nitro.options.rollupConfig.plugins = [];\n } else if (!Array.isArray(nitro.options.rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n nitro.options.rollupConfig.plugins = [nitro.options.rollupConfig.plugins];\n }\n\n nitro.options.rollupConfig.plugins.push(\n wrapEntryWithDynamicImport({\n resolvedSentryConfigPath: createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`),\n experimental_entrypointWrappedFunctions: moduleOptions.experimental_entrypointWrappedFunctions,\n }),\n );\n}\n\n/**\n * Rollup plugin to include the Sentry server configuration file to the server build output.\n */\nfunction injectServerConfigPlugin(nitro: Nitro, serverConfigFile: string, debug?: boolean): InputPluginOption {\n const filePrefix = '\\0virtual:sentry-server-config:';\n\n return {\n name: 'rollup-plugin-inject-sentry-server-config',\n\n buildStart() {\n const configPath = createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`);\n\n if (!existsSync(configPath)) {\n if (debug) {\n logger.log(`[Sentry] Sentry server config file not found: ${configPath}`);\n }\n return;\n }\n\n // Emitting a file adds it to the build output (Rollup is aware of the file, and we can later return the code in resolveId)\n this.emitFile({\n type: 'chunk',\n id: `${filePrefix}${serverConfigFile}`,\n fileName: `${SERVER_CONFIG_FILENAME}.mjs`,\n });\n },\n\n resolveId(source) {\n if (source.startsWith(filePrefix)) {\n const originalFilePath = source.replace(filePrefix, '');\n const configPath = createResolver(nitro.options.rootDir).resolve(`/${originalFilePath}`);\n\n return { id: configPath };\n }\n return null;\n },\n };\n}\n\n/**\n * A Rollup plugin which wraps the server entry with a dynamic `import()`. This makes it possible to initialize Sentry first\n * by using a regular `import` and load the server after that.\n * This also works with serverless `handler` functions, as it re-exports the `handler`.\n */\nfunction wrapEntryWithDynamicImport({\n resolvedSentryConfigPath,\n experimental_entrypointWrappedFunctions,\n debug,\n}: {\n resolvedSentryConfigPath: string;\n experimental_entrypointWrappedFunctions: string[];\n debug?: boolean;\n}): InputPluginOption {\n // In order to correctly import the server config file\n // and dynamically import the nitro runtime, we need to\n // mark the resolutionId with '\\0raw' to fall into the\n // raw chunk group, c.f. https://github.com/nitrojs/nitro/commit/8b4a408231bdc222569a32ce109796a41eac4aa6#diff-e58102d2230f95ddeef2662957b48d847a6e891e354cfd0ae6e2e03ce848d1a2R142\n const resolutionIdPrefix = '\\0raw';\n\n return {\n name: 'sentry-wrap-entry-with-dynamic-import',\n async resolveId(source, importer, options) {\n if (source.includes(`/${SERVER_CONFIG_FILENAME}`)) {\n return { id: source, moduleSideEffects: true };\n }\n\n if (source === 'import-in-the-middle/hook.mjs') {\n // We are importing \"import-in-the-middle\" in the returned code of the `load()` function below\n // By setting `moduleSideEffects` to `true`, the import is added to the bundle, although nothing is imported from it\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file is included, as not all node builders are including files imported with `module.register()`.\n // Prevents the error \"Failed to register ESM hook Error: Cannot find module 'import-in-the-middle/hook.mjs'\"\n return { id: source, moduleSideEffects: true, external: true };\n }\n\n if (options.isEntry && source.includes('.mjs') && !source.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const resolution = await this.resolve(source, importer, options);\n\n // If it cannot be resolved or is external, just return it so that Rollup can display an error\n if (!resolution || resolution?.external) return resolution;\n\n const moduleInfo = await this.load(resolution);\n\n moduleInfo.moduleSideEffects = true;\n\n // The enclosing `if` already checks for the suffix in `source`, but a check in `resolution.id` is needed as well to prevent multiple attachment of the suffix\n return resolution.id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)\n ? resolution.id\n : `${resolutionIdPrefix}${resolution.id\n // Concatenates the query params to mark the file (also attaches names of re-exports - this is needed for serverless functions to re-export the handler)\n .concat(SENTRY_WRAPPED_ENTRY)\n .concat(\n constructWrappedFunctionExportQuery(\n moduleInfo.exportedBindings,\n experimental_entrypointWrappedFunctions,\n debug,\n ),\n )\n .concat(QUERY_END_INDICATOR)}`;\n }\n return null;\n },\n load(id: string) {\n if (id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const entryId = removeSentryQueryFromPath(id).slice(resolutionIdPrefix.length);\n\n // Mostly useful for serverless `handler` functions\n const reExportedFunctions =\n id.includes(SENTRY_WRAPPED_FUNCTIONS) || id.includes(SENTRY_REEXPORTED_FUNCTIONS)\n ? constructFunctionReExport(id, entryId)\n : '';\n\n return (\n // Regular `import` of the Sentry config\n `import ${JSON.stringify(resolvedSentryConfigPath)};\\n` +\n // Dynamic `import()` for the previous, actual entry point.\n // `import()` can be used for any code that should be run after the hooks are registered (https://nodejs.org/api/module.html#enabling)\n `import(${JSON.stringify(entryId)});\\n` +\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file wil be included, as not all node builders are including files imported with `module.register()`.\n \"import 'import-in-the-middle/hook.mjs';\\n\" +\n `${reExportedFunctions}\\n`\n );\n }\n\n return null;\n },\n };\n}\n"],"names":["createResolver","consoleSandbox","getFilenameFromNodeStartCommand","existsSync","logger","SENTRY_WRAPPED_ENTRY","constructWrappedFunctionExportQuery","QUERY_END_INDICATOR","removeSentryQueryFromPath","SENTRY_WRAPPED_FUNCTIONS","SENTRY_REEXPORTED_FUNCTIONS","constructFunctionReExport"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"addServerConfig.js","sources":["../../../src/vite/addServerConfig.ts"],"sourcesContent":["import * as fs from 'fs';\nimport { createResolver } from '@nuxt/kit';\nimport { logger } from '@sentry/core';\nimport type { Nitro } from 'nitropack';\nimport type { InputPluginOption } from 'rollup';\nimport type { SentryNuxtModuleOptions } from '../common/types';\nimport {\n QUERY_END_INDICATOR,\n SENTRY_REEXPORTED_FUNCTIONS,\n SENTRY_WRAPPED_ENTRY,\n SENTRY_WRAPPED_FUNCTIONS,\n constructFunctionReExport,\n constructWrappedFunctionExportQuery,\n getFilenameFromNodeStartCommand,\n removeSentryQueryFromPath,\n} from './utils';\nimport { existsSync } from 'node:fs';\n\nconst SERVER_CONFIG_FILENAME = 'sentry.server.config';\n\n/**\n * Adds the `sentry.server.config.ts` file as `sentry.server.config.mjs` to the `.output` directory to be able to reference this file in the node --import option.\n *\n * By adding a Rollup plugin to the Nitro Rollup options, the Sentry server config is transpiled and emitted to the server build.\n */\nexport function addServerConfigToBuild(\n moduleOptions: SentryNuxtModuleOptions,\n nitro: Nitro,\n serverConfigFile: string,\n): void {\n nitro.hooks.hook('rollup:before', (nitro, rollupConfig) => {\n if (rollupConfig?.plugins === null || rollupConfig?.plugins === undefined) {\n rollupConfig.plugins = [];\n } else if (!Array.isArray(rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n rollupConfig.plugins = [rollupConfig.plugins];\n }\n\n rollupConfig.plugins.push(injectServerConfigPlugin(nitro, serverConfigFile, moduleOptions.debug));\n });\n}\n\n/**\n * Adds the Sentry server config import at the top of the server entry file to load the SDK on the server.\n * This is necessary for environments where modifying the node option `--import` is not possible.\n * However, only limited tracing instrumentation is supported when doing this.\n */\nexport function addSentryTopImport(moduleOptions: SentryNuxtModuleOptions, nitro: Nitro): void {\n nitro.hooks.hook('close', async () => {\n const fileNameFromCommand =\n nitro.options.commands.preview && getFilenameFromNodeStartCommand(nitro.options.commands.preview);\n\n // other presets ('node-server' or 'vercel') have an index.mjs\n const presetsWithServerFile = ['netlify'];\n\n const entryFileName = fileNameFromCommand\n ? fileNameFromCommand\n : typeof nitro.options.rollupConfig?.output.entryFileNames === 'string'\n ? nitro.options.rollupConfig?.output.entryFileNames\n : presetsWithServerFile.includes(nitro.options.preset)\n ? 'server.mjs'\n : 'index.mjs';\n\n const serverDirResolver = createResolver(nitro.options.output.serverDir);\n const entryFilePath = serverDirResolver.resolve(entryFileName);\n\n try {\n fs.readFile(entryFilePath, 'utf8', (err, data) => {\n const updatedContent = `import './${SERVER_CONFIG_FILENAME}.mjs';\\n${data}`;\n\n fs.writeFile(entryFilePath, updatedContent, 'utf8', () => {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.log(\n `[Sentry] Successfully added the Sentry import to the server entry file \"\\`${entryFilePath}\\`\"`,\n );\n }\n });\n });\n } catch (err) {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] An error occurred when trying to add the Sentry import to the server entry file \"\\`${entryFilePath}\\`\":`,\n err,\n );\n }\n }\n });\n}\n\n/**\n * This function modifies the Rollup configuration to include a plugin that wraps the entry file with a dynamic import (`import()`)\n * and adds the Sentry server config with the static `import` declaration.\n *\n * With this, the Sentry server config can be loaded before all other modules of the application (which is needed for import-in-the-middle).\n * See: https://nodejs.org/api/module.html#enabling\n */\nexport function addDynamicImportEntryFileWrapper(\n nitro: Nitro,\n serverConfigFile: string,\n moduleOptions: Omit<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'> &\n Required<Pick<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'>>,\n): void {\n if (!nitro.options.rollupConfig) {\n nitro.options.rollupConfig = { output: {} };\n }\n\n if (nitro.options.rollupConfig?.plugins === null || nitro.options.rollupConfig?.plugins === undefined) {\n nitro.options.rollupConfig.plugins = [];\n } else if (!Array.isArray(nitro.options.rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n nitro.options.rollupConfig.plugins = [nitro.options.rollupConfig.plugins];\n }\n\n nitro.options.rollupConfig.plugins.push(\n wrapEntryWithDynamicImport({\n resolvedSentryConfigPath: createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`),\n experimental_entrypointWrappedFunctions: moduleOptions.experimental_entrypointWrappedFunctions,\n }),\n );\n}\n\n/**\n * Rollup plugin to include the Sentry server configuration file to the server build output.\n */\nfunction injectServerConfigPlugin(nitro: Nitro, serverConfigFile: string, debug?: boolean): InputPluginOption {\n const filePrefix = '\\0virtual:sentry-server-config:';\n\n return {\n name: 'rollup-plugin-inject-sentry-server-config',\n\n buildStart() {\n const configPath = createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`);\n\n if (!existsSync(configPath)) {\n if (debug) {\n logger.log(`[Sentry] Sentry server config file not found: ${configPath}`);\n }\n return;\n }\n\n // Emitting a file adds it to the build output (Rollup is aware of the file, and we can later return the code in resolveId)\n this.emitFile({\n type: 'chunk',\n id: `${filePrefix}${serverConfigFile}`,\n fileName: `${SERVER_CONFIG_FILENAME}.mjs`,\n });\n },\n\n resolveId(source) {\n if (source.startsWith(filePrefix)) {\n const originalFilePath = source.replace(filePrefix, '');\n const configPath = createResolver(nitro.options.rootDir).resolve(`/${originalFilePath}`);\n\n return { id: configPath };\n }\n return null;\n },\n };\n}\n\n/**\n * A Rollup plugin which wraps the server entry with a dynamic `import()`. This makes it possible to initialize Sentry first\n * by using a regular `import` and load the server after that.\n * This also works with serverless `handler` functions, as it re-exports the `handler`.\n */\nfunction wrapEntryWithDynamicImport({\n resolvedSentryConfigPath,\n experimental_entrypointWrappedFunctions,\n debug,\n}: {\n resolvedSentryConfigPath: string;\n experimental_entrypointWrappedFunctions: string[];\n debug?: boolean;\n}): InputPluginOption {\n // In order to correctly import the server config file\n // and dynamically import the nitro runtime, we need to\n // mark the resolutionId with '\\0raw' to fall into the\n // raw chunk group, c.f. https://github.com/nitrojs/nitro/commit/8b4a408231bdc222569a32ce109796a41eac4aa6#diff-e58102d2230f95ddeef2662957b48d847a6e891e354cfd0ae6e2e03ce848d1a2R142\n const resolutionIdPrefix = '\\0raw';\n\n return {\n name: 'sentry-wrap-entry-with-dynamic-import',\n async resolveId(source, importer, options) {\n if (source.includes(`/${SERVER_CONFIG_FILENAME}`)) {\n return { id: source, moduleSideEffects: true };\n }\n\n if (source === 'import-in-the-middle/hook.mjs') {\n // We are importing \"import-in-the-middle\" in the returned code of the `load()` function below\n // By setting `moduleSideEffects` to `true`, the import is added to the bundle, although nothing is imported from it\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file is included, as not all node builders are including files imported with `module.register()`.\n // Prevents the error \"Failed to register ESM hook Error: Cannot find module 'import-in-the-middle/hook.mjs'\"\n return { id: source, moduleSideEffects: true, external: true };\n }\n\n if (options.isEntry && source.includes('.mjs') && !source.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const resolution = await this.resolve(source, importer, options);\n\n // If it cannot be resolved or is external, just return it so that Rollup can display an error\n if (!resolution || resolution?.external) return resolution;\n\n const moduleInfo = await this.load(resolution);\n\n moduleInfo.moduleSideEffects = true;\n\n // The enclosing `if` already checks for the suffix in `source`, but a check in `resolution.id` is needed as well to prevent multiple attachment of the suffix\n return resolution.id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)\n ? resolution.id\n : `${resolutionIdPrefix}${resolution.id\n // Concatenates the query params to mark the file (also attaches names of re-exports - this is needed for serverless functions to re-export the handler)\n .concat(SENTRY_WRAPPED_ENTRY)\n .concat(\n constructWrappedFunctionExportQuery(\n moduleInfo.exportedBindings,\n experimental_entrypointWrappedFunctions,\n debug,\n ),\n )\n .concat(QUERY_END_INDICATOR)}`;\n }\n return null;\n },\n load(id: string) {\n if (id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const entryId = removeSentryQueryFromPath(id).slice(resolutionIdPrefix.length);\n\n // Mostly useful for serverless `handler` functions\n const reExportedFunctions =\n id.includes(SENTRY_WRAPPED_FUNCTIONS) || id.includes(SENTRY_REEXPORTED_FUNCTIONS)\n ? constructFunctionReExport(id, entryId)\n : '';\n\n return (\n // Regular `import` of the Sentry config\n `import ${JSON.stringify(resolvedSentryConfigPath)};\\n` +\n // Dynamic `import()` for the previous, actual entry point.\n // `import()` can be used for any code that should be run after the hooks are registered (https://nodejs.org/api/module.html#enabling)\n `import(${JSON.stringify(entryId)});\\n` +\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file wil be included, as not all node builders are including files imported with `module.register()`.\n \"import 'import-in-the-middle/hook.mjs';\\n\" +\n `${reExportedFunctions}\\n`\n );\n }\n\n return null;\n },\n };\n}\n"],"names":["getFilenameFromNodeStartCommand","createResolver","existsSync","logger","SENTRY_WRAPPED_ENTRY","constructWrappedFunctionExportQuery","QUERY_END_INDICATOR","removeSentryQueryFromPath","SENTRY_WRAPPED_FUNCTIONS","SENTRY_REEXPORTED_FUNCTIONS","constructFunctionReExport"],"mappings":";;;;;;;;AAkBA,MAAM,sBAAA,GAAyB,sBAAsB;;AAErD;AACA;AACA;AACA;AACA;AACO,SAAS,sBAAsB;AACtC,EAAE,aAAa;AACf,EAAE,KAAK;AACP,EAAE,gBAAgB;AAClB,EAAQ;AACR,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK;AAC7D,IAAI,IAAI,YAAY,EAAE,OAAQ,KAAI,IAAK,IAAG,YAAY,EAAE,OAAQ,KAAI,SAAS,EAAE;AAC/E,MAAM,YAAY,CAAC,OAAQ,GAAE,EAAE;AAC/B,KAAM,MAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AACrD;AACA,MAAM,YAAY,CAAC,OAAQ,GAAE,CAAC,YAAY,CAAC,OAAO,CAAC;AACnD;;AAEA,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;AACrG,GAAG,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,aAAa,EAA2B,KAAK,EAAe;AAC/F,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY;AACxC,IAAI,MAAM,mBAAoB;AAC9B,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAQ,IAAGA,qCAA+B,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;;AAEvG;AACA,IAAI,MAAM,qBAAA,GAAwB,CAAC,SAAS,CAAC;;AAE7C,IAAI,MAAM,gBAAgB;AAC1B,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,cAAA,KAAmB;AACrE,UAAU,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;AAC7C,UAAU,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7D,YAAY;AACZ,YAAY,WAAW;;AAEvB,IAAI,MAAM,iBAAA,GAAoBC,kBAAc,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5E,IAAI,MAAM,gBAAgB,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC;;AAElE,IAAI,IAAI;AACR,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK;AACxD,QAAQ,MAAM,cAAA,GAAiB,CAAC,UAAU,EAAE,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;;AAEA,QAAA,EAAA,CAAA,SAAA,CAAA,aAAA,EAAA,cAAA,EAAA,MAAA,EAAA,MAAA;AACA,UAAA,IAAA,aAAA,CAAA,KAAA,EAAA;AACA;AACA,YAAA,OAAA,CAAA,GAAA;AACA,cAAA,CAAA,0EAAA,EAAA,aAAA,CAAA,GAAA,CAAA;AACA,aAAA;AACA;AACA,SAAA,CAAA;AACA,OAAA,CAAA;AACA,KAAA,CAAA,OAAA,GAAA,EAAA;AACA,MAAA,IAAA,aAAA,CAAA,KAAA,EAAA;AACA;AACA,QAAA,OAAA,CAAA,IAAA;AACA,UAAA,CAAA,4FAAA,EAAA,aAAA,CAAA,IAAA,CAAA;AACA,UAAA,GAAA;AACA,SAAA;AACA;AACA;AACA,GAAA,CAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAA,gCAAA;AACA,EAAA,KAAA;AACA,EAAA,gBAAA;AACA,EAAA;AACA;AACA,EAAA;AACA,EAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,YAAA,EAAA;AACA,IAAA,KAAA,CAAA,OAAA,CAAA,YAAA,GAAA,EAAA,MAAA,EAAA,EAAA,EAAA;AACA;;AAEA,EAAA,IAAA,KAAA,CAAA,OAAA,CAAA,YAAA,EAAA,OAAA,KAAA,IAAA,IAAA,KAAA,CAAA,OAAA,CAAA,YAAA,EAAA,OAAA,KAAA,SAAA,EAAA;AACA,IAAA,KAAA,CAAA,OAAA,CAAA,YAAA,CAAA,OAAA,GAAA,EAAA;AACA,GAAA,MAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,EAAA;AACA;AACA,IAAA,KAAA,CAAA,OAAA,CAAA,YAAA,CAAA,OAAA,GAAA,CAAA,KAAA,CAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA;AACA;;AAEA,EAAA,KAAA,CAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,IAAA;AACA,IAAA,0BAAA,CAAA;AACA,MAAA,wBAAA,EAAAA,kBAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,gBAAA,CAAA,CAAA,CAAA;AACA,MAAA,uCAAA,EAAA,aAAA,CAAA,uCAAA;AACA,KAAA,CAAA;AACA,GAAA;AACA;;AAEA;AACA;AACA;AACA,SAAA,wBAAA,CAAA,KAAA,EAAA,gBAAA,EAAA,KAAA,EAAA;AACA,EAAA,MAAA,UAAA,GAAA,iCAAA;;AAEA,EAAA,OAAA;AACA,IAAA,IAAA,EAAA,2CAAA;;AAEA,IAAA,UAAA,GAAA;AACA,MAAA,MAAA,UAAA,GAAAA,kBAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,gBAAA,CAAA,CAAA,CAAA;;AAEA,MAAA,IAAA,CAAAC,kBAAA,CAAA,UAAA,CAAA,EAAA;AACA,QAAA,IAAA,KAAA,EAAA;AACA,UAAAC,WAAA,CAAA,GAAA,CAAA,CAAA,8CAAA,EAAA,UAAA,CAAA,CAAA,CAAA;AACA;AACA,QAAA;AACA;;AAEA;AACA,MAAA,IAAA,CAAA,QAAA,CAAA;AACA,QAAA,IAAA,EAAA,OAAA;AACA,QAAA,EAAA,EAAA,CAAA,EAAA,UAAA,CAAA,EAAA,gBAAA,CAAA,CAAA;AACA,QAAA,QAAA,EAAA,CAAA,EAAA,sBAAA,CAAA,IAAA,CAAA;AACA,OAAA,CAAA;AACA,KAAA;;AAEA,IAAA,SAAA,CAAA,MAAA,EAAA;AACA,MAAA,IAAA,MAAA,CAAA,UAAA,CAAA,UAAA,CAAA,EAAA;AACA,QAAA,MAAA,gBAAA,GAAA,MAAA,CAAA,OAAA,CAAA,UAAA,EAAA,EAAA,CAAA;AACA,QAAA,MAAA,UAAA,GAAAF,kBAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,gBAAA,CAAA,CAAA,CAAA;;AAEA,QAAA,OAAA,EAAA,EAAA,EAAA,UAAA,EAAA;AACA;AACA,MAAA,OAAA,IAAA;AACA,KAAA;AACA,GAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAA,0BAAA,CAAA;AACA,EAAA,wBAAA;AACA,EAAA,uCAAA;AACA,EAAA,KAAA;AACA;;AAIA,EAAA;AACA;AACA;AACA;AACA;AACA,EAAA,MAAA,kBAAA,GAAA,OAAA;;AAEA,EAAA,OAAA;AACA,IAAA,IAAA,EAAA,uCAAA;AACA,IAAA,MAAA,SAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA;AACA,MAAA,IAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,sBAAA,CAAA,CAAA,CAAA,EAAA;AACA,QAAA,OAAA,EAAA,EAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,IAAA,EAAA;AACA;;AAEA,MAAA,IAAA,MAAA,KAAA,+BAAA,EAAA;AACA;AACA;AACA;AACA;AACA,QAAA,OAAA,EAAA,EAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA;AACA;;AAEA,MAAA,IAAA,OAAA,CAAA,OAAA,IAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,IAAA,EAAAG,0BAAA,CAAA,CAAA,CAAA,EAAA;AACA,QAAA,MAAA,UAAA,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,CAAA;;AAEA;AACA,QAAA,IAAA,CAAA,UAAA,IAAA,UAAA,EAAA,QAAA,EAAA,OAAA,UAAA;;AAEA,QAAA,MAAA,UAAA,GAAA,MAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA;;AAEA,QAAA,UAAA,CAAA,iBAAA,GAAA,IAAA;;AAEA;AACA,QAAA,OAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,IAAA,EAAAA,0BAAA,CAAA,CAAA;AACA,YAAA,UAAA,CAAA;AACA,YAAA,CAAA,EAAA,kBAAA,CAAA,EAAA,UAAA,CAAA;AACA;AACA,eAAA,MAAA,CAAAA,0BAAA;AACA,eAAA,MAAA;AACA,gBAAAC,yCAAA;AACA,kBAAA,UAAA,CAAA,gBAAA;AACA,kBAAA,uCAAA;AACA,kBAAA,KAAA;AACA,iBAAA;AACA;AACA,eAAA,MAAA,CAAAC,yBAAA,CAAA,CAAA,CAAA;AACA;AACA,MAAA,OAAA,IAAA;AACA,KAAA;AACA,IAAA,IAAA,CAAA,EAAA,EAAA;AACA,MAAA,IAAA,EAAA,CAAA,QAAA,CAAA,CAAA,IAAA,EAAAF,0BAAA,CAAA,CAAA,CAAA,EAAA;AACA,QAAA,MAAA,OAAA,GAAAG,+BAAA,CAAA,EAAA,CAAA,CAAA,KAAA,CAAA,kBAAA,CAAA,MAAA,CAAA;;AAEA;AACA,QAAA,MAAA,mBAAA;AACA,UAAA,EAAA,CAAA,QAAA,CAAAC,8BAAA,CAAA,IAAA,EAAA,CAAA,QAAA,CAAAC,iCAAA;AACA,cAAAC,+BAAA,CAAA,EAAA,EAAA,OAAA;AACA,cAAA,EAAA;;AAEA,QAAA;AACA;AACA,UAAA,CAAA,OAAA,EAAA,IAAA,CAAA,SAAA,CAAA,wBAAA,CAAA,CAAA,GAAA,CAAA;AACA;AACA;AACA,UAAA,CAAA,OAAA,EAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA;AACA;AACA,UAAA,2CAAA;AACA,UAAA,CAAA,EAAA,mBAAA,CAAA,EAAA;AACA;AACA;;AAEA,MAAA,OAAA,IAAA;AACA,KAAA;AACA,GAAA;AACA;;;;;;"}
|
package/build/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"9.
|
|
1
|
+
{"type":"module","version":"9.9.0"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import { createResolver } from '@nuxt/kit';
|
|
3
|
-
import {
|
|
3
|
+
import { logger } from '@sentry/core';
|
|
4
4
|
import { getFilenameFromNodeStartCommand, SENTRY_WRAPPED_ENTRY, removeSentryQueryFromPath, SENTRY_WRAPPED_FUNCTIONS, SENTRY_REEXPORTED_FUNCTIONS, constructFunctionReExport, constructWrappedFunctionExportQuery, QUERY_END_INDICATOR } from './utils.js';
|
|
5
5
|
import { existsSync } from 'node:fs';
|
|
6
6
|
|
|
@@ -9,8 +9,7 @@ const SERVER_CONFIG_FILENAME = 'sentry.server.config';
|
|
|
9
9
|
/**
|
|
10
10
|
* Adds the `sentry.server.config.ts` file as `sentry.server.config.mjs` to the `.output` directory to be able to reference this file in the node --import option.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* 2. Copying the file to the `.output` directory after the build process is finished.
|
|
12
|
+
* By adding a Rollup plugin to the Nitro Rollup options, the Sentry server config is transpiled and emitted to the server build.
|
|
14
13
|
*/
|
|
15
14
|
function addServerConfigToBuild(
|
|
16
15
|
moduleOptions,
|
|
@@ -27,41 +26,6 @@ function addServerConfigToBuild(
|
|
|
27
26
|
|
|
28
27
|
rollupConfig.plugins.push(injectServerConfigPlugin(nitro, serverConfigFile, moduleOptions.debug));
|
|
29
28
|
});
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* When the build process is finished, copy the `sentry.server.config` file to the `.output` directory.
|
|
33
|
-
* This is necessary because we need to reference this file path in the node --import option.
|
|
34
|
-
*/
|
|
35
|
-
nitro.hooks.hook('close', async () => {
|
|
36
|
-
const buildDirResolver = createResolver(nitro.options.buildDir);
|
|
37
|
-
const serverDirResolver = createResolver(nitro.options.output.serverDir);
|
|
38
|
-
const source = buildDirResolver.resolve(`dist/server/${SERVER_CONFIG_FILENAME}.mjs`);
|
|
39
|
-
const destination = serverDirResolver.resolve(`${SERVER_CONFIG_FILENAME}.mjs`);
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
await fs.promises.access(source, fs.constants.F_OK);
|
|
43
|
-
await fs.promises.copyFile(source, destination);
|
|
44
|
-
|
|
45
|
-
if (moduleOptions.debug) {
|
|
46
|
-
consoleSandbox(() => {
|
|
47
|
-
// eslint-disable-next-line no-console
|
|
48
|
-
console.log(
|
|
49
|
-
`[Sentry] Successfully added the content of the \`${serverConfigFile}\` file to \`${destination}\``,
|
|
50
|
-
);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
} catch (error) {
|
|
54
|
-
if (moduleOptions.debug) {
|
|
55
|
-
consoleSandbox(() => {
|
|
56
|
-
// eslint-disable-next-line no-console
|
|
57
|
-
console.warn(
|
|
58
|
-
`[Sentry] An error occurred when trying to add the \`${serverConfigFile}\` file to the \`.output\` directory`,
|
|
59
|
-
error,
|
|
60
|
-
);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
29
|
}
|
|
66
30
|
|
|
67
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addServerConfig.js","sources":["../../../src/vite/addServerConfig.ts"],"sourcesContent":["import * as fs from 'fs';\nimport { createResolver } from '@nuxt/kit';\nimport { consoleSandbox, logger } from '@sentry/core';\nimport type { Nitro } from 'nitropack';\nimport type { InputPluginOption } from 'rollup';\nimport type { SentryNuxtModuleOptions } from '../common/types';\nimport {\n QUERY_END_INDICATOR,\n SENTRY_REEXPORTED_FUNCTIONS,\n SENTRY_WRAPPED_ENTRY,\n SENTRY_WRAPPED_FUNCTIONS,\n constructFunctionReExport,\n constructWrappedFunctionExportQuery,\n getFilenameFromNodeStartCommand,\n removeSentryQueryFromPath,\n} from './utils';\nimport { existsSync } from 'node:fs';\n\nconst SERVER_CONFIG_FILENAME = 'sentry.server.config';\n\n/**\n * Adds the `sentry.server.config.ts` file as `sentry.server.config.mjs` to the `.output` directory to be able to reference this file in the node --import option.\n *\n * 1. Adding the file as a rollup import, so it is included in the build (automatically transpiles the file).\n * 2. Copying the file to the `.output` directory after the build process is finished.\n */\nexport function addServerConfigToBuild(\n moduleOptions: SentryNuxtModuleOptions,\n nitro: Nitro,\n serverConfigFile: string,\n): void {\n nitro.hooks.hook('rollup:before', (nitro, rollupConfig) => {\n if (rollupConfig?.plugins === null || rollupConfig?.plugins === undefined) {\n rollupConfig.plugins = [];\n } else if (!Array.isArray(rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n rollupConfig.plugins = [rollupConfig.plugins];\n }\n\n rollupConfig.plugins.push(injectServerConfigPlugin(nitro, serverConfigFile, moduleOptions.debug));\n });\n\n /**\n * When the build process is finished, copy the `sentry.server.config` file to the `.output` directory.\n * This is necessary because we need to reference this file path in the node --import option.\n */\n nitro.hooks.hook('close', async () => {\n const buildDirResolver = createResolver(nitro.options.buildDir);\n const serverDirResolver = createResolver(nitro.options.output.serverDir);\n const source = buildDirResolver.resolve(`dist/server/${SERVER_CONFIG_FILENAME}.mjs`);\n const destination = serverDirResolver.resolve(`${SERVER_CONFIG_FILENAME}.mjs`);\n\n try {\n await fs.promises.access(source, fs.constants.F_OK);\n await fs.promises.copyFile(source, destination);\n\n if (moduleOptions.debug) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.log(\n `[Sentry] Successfully added the content of the \\`${serverConfigFile}\\` file to \\`${destination}\\``,\n );\n });\n }\n } catch (error) {\n if (moduleOptions.debug) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] An error occurred when trying to add the \\`${serverConfigFile}\\` file to the \\`.output\\` directory`,\n error,\n );\n });\n }\n }\n });\n}\n\n/**\n * Adds the Sentry server config import at the top of the server entry file to load the SDK on the server.\n * This is necessary for environments where modifying the node option `--import` is not possible.\n * However, only limited tracing instrumentation is supported when doing this.\n */\nexport function addSentryTopImport(moduleOptions: SentryNuxtModuleOptions, nitro: Nitro): void {\n nitro.hooks.hook('close', async () => {\n const fileNameFromCommand =\n nitro.options.commands.preview && getFilenameFromNodeStartCommand(nitro.options.commands.preview);\n\n // other presets ('node-server' or 'vercel') have an index.mjs\n const presetsWithServerFile = ['netlify'];\n\n const entryFileName = fileNameFromCommand\n ? fileNameFromCommand\n : typeof nitro.options.rollupConfig?.output.entryFileNames === 'string'\n ? nitro.options.rollupConfig?.output.entryFileNames\n : presetsWithServerFile.includes(nitro.options.preset)\n ? 'server.mjs'\n : 'index.mjs';\n\n const serverDirResolver = createResolver(nitro.options.output.serverDir);\n const entryFilePath = serverDirResolver.resolve(entryFileName);\n\n try {\n fs.readFile(entryFilePath, 'utf8', (err, data) => {\n const updatedContent = `import './${SERVER_CONFIG_FILENAME}.mjs';\\n${data}`;\n\n fs.writeFile(entryFilePath, updatedContent, 'utf8', () => {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.log(\n `[Sentry] Successfully added the Sentry import to the server entry file \"\\`${entryFilePath}\\`\"`,\n );\n }\n });\n });\n } catch (err) {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] An error occurred when trying to add the Sentry import to the server entry file \"\\`${entryFilePath}\\`\":`,\n err,\n );\n }\n }\n });\n}\n\n/**\n * This function modifies the Rollup configuration to include a plugin that wraps the entry file with a dynamic import (`import()`)\n * and adds the Sentry server config with the static `import` declaration.\n *\n * With this, the Sentry server config can be loaded before all other modules of the application (which is needed for import-in-the-middle).\n * See: https://nodejs.org/api/module.html#enabling\n */\nexport function addDynamicImportEntryFileWrapper(\n nitro: Nitro,\n serverConfigFile: string,\n moduleOptions: Omit<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'> &\n Required<Pick<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'>>,\n): void {\n if (!nitro.options.rollupConfig) {\n nitro.options.rollupConfig = { output: {} };\n }\n\n if (nitro.options.rollupConfig?.plugins === null || nitro.options.rollupConfig?.plugins === undefined) {\n nitro.options.rollupConfig.plugins = [];\n } else if (!Array.isArray(nitro.options.rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n nitro.options.rollupConfig.plugins = [nitro.options.rollupConfig.plugins];\n }\n\n nitro.options.rollupConfig.plugins.push(\n wrapEntryWithDynamicImport({\n resolvedSentryConfigPath: createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`),\n experimental_entrypointWrappedFunctions: moduleOptions.experimental_entrypointWrappedFunctions,\n }),\n );\n}\n\n/**\n * Rollup plugin to include the Sentry server configuration file to the server build output.\n */\nfunction injectServerConfigPlugin(nitro: Nitro, serverConfigFile: string, debug?: boolean): InputPluginOption {\n const filePrefix = '\\0virtual:sentry-server-config:';\n\n return {\n name: 'rollup-plugin-inject-sentry-server-config',\n\n buildStart() {\n const configPath = createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`);\n\n if (!existsSync(configPath)) {\n if (debug) {\n logger.log(`[Sentry] Sentry server config file not found: ${configPath}`);\n }\n return;\n }\n\n // Emitting a file adds it to the build output (Rollup is aware of the file, and we can later return the code in resolveId)\n this.emitFile({\n type: 'chunk',\n id: `${filePrefix}${serverConfigFile}`,\n fileName: `${SERVER_CONFIG_FILENAME}.mjs`,\n });\n },\n\n resolveId(source) {\n if (source.startsWith(filePrefix)) {\n const originalFilePath = source.replace(filePrefix, '');\n const configPath = createResolver(nitro.options.rootDir).resolve(`/${originalFilePath}`);\n\n return { id: configPath };\n }\n return null;\n },\n };\n}\n\n/**\n * A Rollup plugin which wraps the server entry with a dynamic `import()`. This makes it possible to initialize Sentry first\n * by using a regular `import` and load the server after that.\n * This also works with serverless `handler` functions, as it re-exports the `handler`.\n */\nfunction wrapEntryWithDynamicImport({\n resolvedSentryConfigPath,\n experimental_entrypointWrappedFunctions,\n debug,\n}: {\n resolvedSentryConfigPath: string;\n experimental_entrypointWrappedFunctions: string[];\n debug?: boolean;\n}): InputPluginOption {\n // In order to correctly import the server config file\n // and dynamically import the nitro runtime, we need to\n // mark the resolutionId with '\\0raw' to fall into the\n // raw chunk group, c.f. https://github.com/nitrojs/nitro/commit/8b4a408231bdc222569a32ce109796a41eac4aa6#diff-e58102d2230f95ddeef2662957b48d847a6e891e354cfd0ae6e2e03ce848d1a2R142\n const resolutionIdPrefix = '\\0raw';\n\n return {\n name: 'sentry-wrap-entry-with-dynamic-import',\n async resolveId(source, importer, options) {\n if (source.includes(`/${SERVER_CONFIG_FILENAME}`)) {\n return { id: source, moduleSideEffects: true };\n }\n\n if (source === 'import-in-the-middle/hook.mjs') {\n // We are importing \"import-in-the-middle\" in the returned code of the `load()` function below\n // By setting `moduleSideEffects` to `true`, the import is added to the bundle, although nothing is imported from it\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file is included, as not all node builders are including files imported with `module.register()`.\n // Prevents the error \"Failed to register ESM hook Error: Cannot find module 'import-in-the-middle/hook.mjs'\"\n return { id: source, moduleSideEffects: true, external: true };\n }\n\n if (options.isEntry && source.includes('.mjs') && !source.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const resolution = await this.resolve(source, importer, options);\n\n // If it cannot be resolved or is external, just return it so that Rollup can display an error\n if (!resolution || resolution?.external) return resolution;\n\n const moduleInfo = await this.load(resolution);\n\n moduleInfo.moduleSideEffects = true;\n\n // The enclosing `if` already checks for the suffix in `source`, but a check in `resolution.id` is needed as well to prevent multiple attachment of the suffix\n return resolution.id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)\n ? resolution.id\n : `${resolutionIdPrefix}${resolution.id\n // Concatenates the query params to mark the file (also attaches names of re-exports - this is needed for serverless functions to re-export the handler)\n .concat(SENTRY_WRAPPED_ENTRY)\n .concat(\n constructWrappedFunctionExportQuery(\n moduleInfo.exportedBindings,\n experimental_entrypointWrappedFunctions,\n debug,\n ),\n )\n .concat(QUERY_END_INDICATOR)}`;\n }\n return null;\n },\n load(id: string) {\n if (id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const entryId = removeSentryQueryFromPath(id).slice(resolutionIdPrefix.length);\n\n // Mostly useful for serverless `handler` functions\n const reExportedFunctions =\n id.includes(SENTRY_WRAPPED_FUNCTIONS) || id.includes(SENTRY_REEXPORTED_FUNCTIONS)\n ? constructFunctionReExport(id, entryId)\n : '';\n\n return (\n // Regular `import` of the Sentry config\n `import ${JSON.stringify(resolvedSentryConfigPath)};\\n` +\n // Dynamic `import()` for the previous, actual entry point.\n // `import()` can be used for any code that should be run after the hooks are registered (https://nodejs.org/api/module.html#enabling)\n `import(${JSON.stringify(entryId)});\\n` +\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file wil be included, as not all node builders are including files imported with `module.register()`.\n \"import 'import-in-the-middle/hook.mjs';\\n\" +\n `${reExportedFunctions}\\n`\n );\n }\n\n return null;\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"addServerConfig.js","sources":["../../../src/vite/addServerConfig.ts"],"sourcesContent":["import * as fs from 'fs';\nimport { createResolver } from '@nuxt/kit';\nimport { logger } from '@sentry/core';\nimport type { Nitro } from 'nitropack';\nimport type { InputPluginOption } from 'rollup';\nimport type { SentryNuxtModuleOptions } from '../common/types';\nimport {\n QUERY_END_INDICATOR,\n SENTRY_REEXPORTED_FUNCTIONS,\n SENTRY_WRAPPED_ENTRY,\n SENTRY_WRAPPED_FUNCTIONS,\n constructFunctionReExport,\n constructWrappedFunctionExportQuery,\n getFilenameFromNodeStartCommand,\n removeSentryQueryFromPath,\n} from './utils';\nimport { existsSync } from 'node:fs';\n\nconst SERVER_CONFIG_FILENAME = 'sentry.server.config';\n\n/**\n * Adds the `sentry.server.config.ts` file as `sentry.server.config.mjs` to the `.output` directory to be able to reference this file in the node --import option.\n *\n * By adding a Rollup plugin to the Nitro Rollup options, the Sentry server config is transpiled and emitted to the server build.\n */\nexport function addServerConfigToBuild(\n moduleOptions: SentryNuxtModuleOptions,\n nitro: Nitro,\n serverConfigFile: string,\n): void {\n nitro.hooks.hook('rollup:before', (nitro, rollupConfig) => {\n if (rollupConfig?.plugins === null || rollupConfig?.plugins === undefined) {\n rollupConfig.plugins = [];\n } else if (!Array.isArray(rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n rollupConfig.plugins = [rollupConfig.plugins];\n }\n\n rollupConfig.plugins.push(injectServerConfigPlugin(nitro, serverConfigFile, moduleOptions.debug));\n });\n}\n\n/**\n * Adds the Sentry server config import at the top of the server entry file to load the SDK on the server.\n * This is necessary for environments where modifying the node option `--import` is not possible.\n * However, only limited tracing instrumentation is supported when doing this.\n */\nexport function addSentryTopImport(moduleOptions: SentryNuxtModuleOptions, nitro: Nitro): void {\n nitro.hooks.hook('close', async () => {\n const fileNameFromCommand =\n nitro.options.commands.preview && getFilenameFromNodeStartCommand(nitro.options.commands.preview);\n\n // other presets ('node-server' or 'vercel') have an index.mjs\n const presetsWithServerFile = ['netlify'];\n\n const entryFileName = fileNameFromCommand\n ? fileNameFromCommand\n : typeof nitro.options.rollupConfig?.output.entryFileNames === 'string'\n ? nitro.options.rollupConfig?.output.entryFileNames\n : presetsWithServerFile.includes(nitro.options.preset)\n ? 'server.mjs'\n : 'index.mjs';\n\n const serverDirResolver = createResolver(nitro.options.output.serverDir);\n const entryFilePath = serverDirResolver.resolve(entryFileName);\n\n try {\n fs.readFile(entryFilePath, 'utf8', (err, data) => {\n const updatedContent = `import './${SERVER_CONFIG_FILENAME}.mjs';\\n${data}`;\n\n fs.writeFile(entryFilePath, updatedContent, 'utf8', () => {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.log(\n `[Sentry] Successfully added the Sentry import to the server entry file \"\\`${entryFilePath}\\`\"`,\n );\n }\n });\n });\n } catch (err) {\n if (moduleOptions.debug) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] An error occurred when trying to add the Sentry import to the server entry file \"\\`${entryFilePath}\\`\":`,\n err,\n );\n }\n }\n });\n}\n\n/**\n * This function modifies the Rollup configuration to include a plugin that wraps the entry file with a dynamic import (`import()`)\n * and adds the Sentry server config with the static `import` declaration.\n *\n * With this, the Sentry server config can be loaded before all other modules of the application (which is needed for import-in-the-middle).\n * See: https://nodejs.org/api/module.html#enabling\n */\nexport function addDynamicImportEntryFileWrapper(\n nitro: Nitro,\n serverConfigFile: string,\n moduleOptions: Omit<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'> &\n Required<Pick<SentryNuxtModuleOptions, 'experimental_entrypointWrappedFunctions'>>,\n): void {\n if (!nitro.options.rollupConfig) {\n nitro.options.rollupConfig = { output: {} };\n }\n\n if (nitro.options.rollupConfig?.plugins === null || nitro.options.rollupConfig?.plugins === undefined) {\n nitro.options.rollupConfig.plugins = [];\n } else if (!Array.isArray(nitro.options.rollupConfig.plugins)) {\n // `rollupConfig.plugins` can be a single plugin, so we want to put it into an array so that we can push our own plugin\n nitro.options.rollupConfig.plugins = [nitro.options.rollupConfig.plugins];\n }\n\n nitro.options.rollupConfig.plugins.push(\n wrapEntryWithDynamicImport({\n resolvedSentryConfigPath: createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`),\n experimental_entrypointWrappedFunctions: moduleOptions.experimental_entrypointWrappedFunctions,\n }),\n );\n}\n\n/**\n * Rollup plugin to include the Sentry server configuration file to the server build output.\n */\nfunction injectServerConfigPlugin(nitro: Nitro, serverConfigFile: string, debug?: boolean): InputPluginOption {\n const filePrefix = '\\0virtual:sentry-server-config:';\n\n return {\n name: 'rollup-plugin-inject-sentry-server-config',\n\n buildStart() {\n const configPath = createResolver(nitro.options.srcDir).resolve(`/${serverConfigFile}`);\n\n if (!existsSync(configPath)) {\n if (debug) {\n logger.log(`[Sentry] Sentry server config file not found: ${configPath}`);\n }\n return;\n }\n\n // Emitting a file adds it to the build output (Rollup is aware of the file, and we can later return the code in resolveId)\n this.emitFile({\n type: 'chunk',\n id: `${filePrefix}${serverConfigFile}`,\n fileName: `${SERVER_CONFIG_FILENAME}.mjs`,\n });\n },\n\n resolveId(source) {\n if (source.startsWith(filePrefix)) {\n const originalFilePath = source.replace(filePrefix, '');\n const configPath = createResolver(nitro.options.rootDir).resolve(`/${originalFilePath}`);\n\n return { id: configPath };\n }\n return null;\n },\n };\n}\n\n/**\n * A Rollup plugin which wraps the server entry with a dynamic `import()`. This makes it possible to initialize Sentry first\n * by using a regular `import` and load the server after that.\n * This also works with serverless `handler` functions, as it re-exports the `handler`.\n */\nfunction wrapEntryWithDynamicImport({\n resolvedSentryConfigPath,\n experimental_entrypointWrappedFunctions,\n debug,\n}: {\n resolvedSentryConfigPath: string;\n experimental_entrypointWrappedFunctions: string[];\n debug?: boolean;\n}): InputPluginOption {\n // In order to correctly import the server config file\n // and dynamically import the nitro runtime, we need to\n // mark the resolutionId with '\\0raw' to fall into the\n // raw chunk group, c.f. https://github.com/nitrojs/nitro/commit/8b4a408231bdc222569a32ce109796a41eac4aa6#diff-e58102d2230f95ddeef2662957b48d847a6e891e354cfd0ae6e2e03ce848d1a2R142\n const resolutionIdPrefix = '\\0raw';\n\n return {\n name: 'sentry-wrap-entry-with-dynamic-import',\n async resolveId(source, importer, options) {\n if (source.includes(`/${SERVER_CONFIG_FILENAME}`)) {\n return { id: source, moduleSideEffects: true };\n }\n\n if (source === 'import-in-the-middle/hook.mjs') {\n // We are importing \"import-in-the-middle\" in the returned code of the `load()` function below\n // By setting `moduleSideEffects` to `true`, the import is added to the bundle, although nothing is imported from it\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file is included, as not all node builders are including files imported with `module.register()`.\n // Prevents the error \"Failed to register ESM hook Error: Cannot find module 'import-in-the-middle/hook.mjs'\"\n return { id: source, moduleSideEffects: true, external: true };\n }\n\n if (options.isEntry && source.includes('.mjs') && !source.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const resolution = await this.resolve(source, importer, options);\n\n // If it cannot be resolved or is external, just return it so that Rollup can display an error\n if (!resolution || resolution?.external) return resolution;\n\n const moduleInfo = await this.load(resolution);\n\n moduleInfo.moduleSideEffects = true;\n\n // The enclosing `if` already checks for the suffix in `source`, but a check in `resolution.id` is needed as well to prevent multiple attachment of the suffix\n return resolution.id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)\n ? resolution.id\n : `${resolutionIdPrefix}${resolution.id\n // Concatenates the query params to mark the file (also attaches names of re-exports - this is needed for serverless functions to re-export the handler)\n .concat(SENTRY_WRAPPED_ENTRY)\n .concat(\n constructWrappedFunctionExportQuery(\n moduleInfo.exportedBindings,\n experimental_entrypointWrappedFunctions,\n debug,\n ),\n )\n .concat(QUERY_END_INDICATOR)}`;\n }\n return null;\n },\n load(id: string) {\n if (id.includes(`.mjs${SENTRY_WRAPPED_ENTRY}`)) {\n const entryId = removeSentryQueryFromPath(id).slice(resolutionIdPrefix.length);\n\n // Mostly useful for serverless `handler` functions\n const reExportedFunctions =\n id.includes(SENTRY_WRAPPED_FUNCTIONS) || id.includes(SENTRY_REEXPORTED_FUNCTIONS)\n ? constructFunctionReExport(id, entryId)\n : '';\n\n return (\n // Regular `import` of the Sentry config\n `import ${JSON.stringify(resolvedSentryConfigPath)};\\n` +\n // Dynamic `import()` for the previous, actual entry point.\n // `import()` can be used for any code that should be run after the hooks are registered (https://nodejs.org/api/module.html#enabling)\n `import(${JSON.stringify(entryId)});\\n` +\n // By importing \"import-in-the-middle/hook.mjs\", we can make sure this file wil be included, as not all node builders are including files imported with `module.register()`.\n \"import 'import-in-the-middle/hook.mjs';\\n\" +\n `${reExportedFunctions}\\n`\n );\n }\n\n return null;\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
package/build/module/module.json
CHANGED
package/build/module/module.mjs
CHANGED
|
@@ -104,32 +104,6 @@ function addServerConfigToBuild(moduleOptions, nitro, serverConfigFile) {
|
|
|
104
104
|
}
|
|
105
105
|
rollupConfig.plugins.push(injectServerConfigPlugin(nitro2, serverConfigFile, moduleOptions.debug));
|
|
106
106
|
});
|
|
107
|
-
nitro.hooks.hook("close", async () => {
|
|
108
|
-
const buildDirResolver = createResolver(nitro.options.buildDir);
|
|
109
|
-
const serverDirResolver = createResolver(nitro.options.output.serverDir);
|
|
110
|
-
const source = buildDirResolver.resolve(`dist/server/${SERVER_CONFIG_FILENAME}.mjs`);
|
|
111
|
-
const destination = serverDirResolver.resolve(`${SERVER_CONFIG_FILENAME}.mjs`);
|
|
112
|
-
try {
|
|
113
|
-
await fs.promises.access(source, fs.constants.F_OK);
|
|
114
|
-
await fs.promises.copyFile(source, destination);
|
|
115
|
-
if (moduleOptions.debug) {
|
|
116
|
-
consoleSandbox(() => {
|
|
117
|
-
console.log(
|
|
118
|
-
`[Sentry] Successfully added the content of the \`${serverConfigFile}\` file to \`${destination}\``
|
|
119
|
-
);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
} catch (error) {
|
|
123
|
-
if (moduleOptions.debug) {
|
|
124
|
-
consoleSandbox(() => {
|
|
125
|
-
console.warn(
|
|
126
|
-
`[Sentry] An error occurred when trying to add the \`${serverConfigFile}\` file to the \`.output\` directory`,
|
|
127
|
-
error
|
|
128
|
-
);
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
107
|
}
|
|
134
108
|
function addSentryTopImport(moduleOptions, nitro) {
|
|
135
109
|
nitro.hooks.hook("close", async () => {
|
|
@@ -3,8 +3,7 @@ import type { SentryNuxtModuleOptions } from '../common/types';
|
|
|
3
3
|
/**
|
|
4
4
|
* Adds the `sentry.server.config.ts` file as `sentry.server.config.mjs` to the `.output` directory to be able to reference this file in the node --import option.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* 2. Copying the file to the `.output` directory after the build process is finished.
|
|
6
|
+
* By adding a Rollup plugin to the Nitro Rollup options, the Sentry server config is transpiled and emitted to the server build.
|
|
8
7
|
*/
|
|
9
8
|
export declare function addServerConfigToBuild(moduleOptions: SentryNuxtModuleOptions, nitro: Nitro, serverConfigFile: string): void;
|
|
10
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addServerConfig.d.ts","sourceRoot":"","sources":["../../../src/vite/addServerConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAe/D
|
|
1
|
+
{"version":3,"file":"addServerConfig.d.ts","sourceRoot":"","sources":["../../../src/vite/addServerConfig.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAe/D;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,uBAAuB,EACtC,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAWN;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CA0C7F;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE,yCAAyC,CAAC,GACrF,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,yCAAyC,CAAC,CAAC,GACnF,IAAI,CAkBN"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/nuxt",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.9.0",
|
|
4
4
|
"description": "Official Sentry SDK for Nuxt (EXPERIMENTAL)",
|
|
5
5
|
"repository": "git://github.com/getsentry/sentry-javascript.git",
|
|
6
6
|
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nuxt",
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@nuxt/kit": "^3.13.2",
|
|
46
|
-
"@sentry/browser": "9.
|
|
47
|
-
"@sentry/core": "9.
|
|
48
|
-
"@sentry/node": "9.
|
|
49
|
-
"@sentry/opentelemetry": "9.
|
|
46
|
+
"@sentry/browser": "9.9.0",
|
|
47
|
+
"@sentry/core": "9.9.0",
|
|
48
|
+
"@sentry/node": "9.9.0",
|
|
49
|
+
"@sentry/opentelemetry": "9.9.0",
|
|
50
50
|
"@sentry/rollup-plugin": "3.1.2",
|
|
51
51
|
"@sentry/vite-plugin": "2.22.6",
|
|
52
|
-
"@sentry/vue": "9.
|
|
52
|
+
"@sentry/vue": "9.9.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@nuxt/module-builder": "^0.8.4",
|