@sentry/bundler-plugins 10.60.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/LICENSE +29 -0
- package/README.md +31 -0
- package/build/cjs/babel-plugin/constants.js +126 -0
- package/build/cjs/babel-plugin/constants.js.map +1 -0
- package/build/cjs/babel-plugin/experimental.js +334 -0
- package/build/cjs/babel-plugin/experimental.js.map +1 -0
- package/build/cjs/babel-plugin/index.js +508 -0
- package/build/cjs/babel-plugin/index.js.map +1 -0
- package/build/cjs/core/build-plugin-manager.js +583 -0
- package/build/cjs/core/build-plugin-manager.js.map +1 -0
- package/build/cjs/core/debug-id-upload.js +184 -0
- package/build/cjs/core/debug-id-upload.js.map +1 -0
- package/build/cjs/core/glob.js +10 -0
- package/build/cjs/core/glob.js.map +1 -0
- package/build/cjs/core/index.js +113 -0
- package/build/cjs/core/index.js.map +1 -0
- package/build/cjs/core/logger.js +29 -0
- package/build/cjs/core/logger.js.map +1 -0
- package/build/cjs/core/options-mapping.js +115 -0
- package/build/cjs/core/options-mapping.js.map +1 -0
- package/build/cjs/core/sentry/telemetry.js +127 -0
- package/build/cjs/core/sentry/telemetry.js.map +1 -0
- package/build/cjs/core/sentry/transports.js +108 -0
- package/build/cjs/core/sentry/transports.js.map +1 -0
- package/build/cjs/core/utils.js +298 -0
- package/build/cjs/core/utils.js.map +1 -0
- package/build/cjs/core/version.js +6 -0
- package/build/cjs/core/version.js.map +1 -0
- package/build/cjs/esbuild/index.js +208 -0
- package/build/cjs/esbuild/index.js.map +1 -0
- package/build/cjs/rollup/index.js +193 -0
- package/build/cjs/rollup/index.js.map +1 -0
- package/build/cjs/vite/index.js +28 -0
- package/build/cjs/vite/index.js.map +1 -0
- package/build/cjs/webpack/component-annotation-transform.js +29 -0
- package/build/cjs/webpack/component-annotation-transform.js.map +1 -0
- package/build/cjs/webpack/index.js +25 -0
- package/build/cjs/webpack/index.js.map +1 -0
- package/build/cjs/webpack/webpack4and5.js +185 -0
- package/build/cjs/webpack/webpack4and5.js.map +1 -0
- package/build/cjs/webpack/webpack5.js +11 -0
- package/build/cjs/webpack/webpack5.js.map +1 -0
- package/build/esm/babel-plugin/constants.js +123 -0
- package/build/esm/babel-plugin/constants.js.map +1 -0
- package/build/esm/babel-plugin/experimental.js +332 -0
- package/build/esm/babel-plugin/experimental.js.map +1 -0
- package/build/esm/babel-plugin/index.js +505 -0
- package/build/esm/babel-plugin/index.js.map +1 -0
- package/build/esm/core/build-plugin-manager.js +561 -0
- package/build/esm/core/build-plugin-manager.js.map +1 -0
- package/build/esm/core/debug-id-upload.js +161 -0
- package/build/esm/core/debug-id-upload.js.map +1 -0
- package/build/esm/core/glob.js +8 -0
- package/build/esm/core/glob.js.map +1 -0
- package/build/esm/core/index.js +82 -0
- package/build/esm/core/index.js.map +1 -0
- package/build/esm/core/logger.js +27 -0
- package/build/esm/core/logger.js.map +1 -0
- package/build/esm/core/options-mapping.js +111 -0
- package/build/esm/core/options-mapping.js.map +1 -0
- package/build/esm/core/sentry/telemetry.js +118 -0
- package/build/esm/core/sentry/telemetry.js.map +1 -0
- package/build/esm/core/sentry/transports.js +92 -0
- package/build/esm/core/sentry/transports.js.map +1 -0
- package/build/esm/core/utils.js +271 -0
- package/build/esm/core/utils.js.map +1 -0
- package/build/esm/core/version.js +4 -0
- package/build/esm/core/version.js.map +1 -0
- package/build/esm/esbuild/index.js +190 -0
- package/build/esm/esbuild/index.js.map +1 -0
- package/build/esm/package.json +1 -0
- package/build/esm/rollup/index.js +172 -0
- package/build/esm/rollup/index.js.map +1 -0
- package/build/esm/vite/index.js +24 -0
- package/build/esm/vite/index.js.map +1 -0
- package/build/esm/webpack/component-annotation-transform.js +27 -0
- package/build/esm/webpack/component-annotation-transform.js.map +1 -0
- package/build/esm/webpack/index.js +21 -0
- package/build/esm/webpack/index.js.map +1 -0
- package/build/esm/webpack/webpack4and5.js +168 -0
- package/build/esm/webpack/webpack4and5.js.map +1 -0
- package/build/esm/webpack/webpack5.js +8 -0
- package/build/esm/webpack/webpack5.js.map +1 -0
- package/build/types/babel-plugin/constants.d.ts +27 -0
- package/build/types/babel-plugin/constants.d.ts.map +1 -0
- package/build/types/babel-plugin/experimental.d.ts +51 -0
- package/build/types/babel-plugin/experimental.d.ts.map +1 -0
- package/build/types/babel-plugin/index.d.ts +56 -0
- package/build/types/babel-plugin/index.d.ts.map +1 -0
- package/build/types/core/build-plugin-manager.d.ts +82 -0
- package/build/types/core/build-plugin-manager.d.ts.map +1 -0
- package/build/types/core/debug-id-upload.d.ts +17 -0
- package/build/types/core/debug-id-upload.d.ts.map +1 -0
- package/build/types/core/glob.d.ts +5 -0
- package/build/types/core/glob.d.ts.map +1 -0
- package/build/types/core/index.d.ts +53 -0
- package/build/types/core/index.d.ts.map +1 -0
- package/build/types/core/logger.d.ts +14 -0
- package/build/types/core/logger.d.ts.map +1 -0
- package/build/types/core/options-mapping.d.ts +82 -0
- package/build/types/core/options-mapping.d.ts.map +1 -0
- package/build/types/core/sentry/telemetry.d.ts +14 -0
- package/build/types/core/sentry/telemetry.d.ts.map +1 -0
- package/build/types/core/sentry/transports.d.ts +5 -0
- package/build/types/core/sentry/transports.d.ts.map +1 -0
- package/build/types/core/types.d.ts +570 -0
- package/build/types/core/types.d.ts.map +1 -0
- package/build/types/core/utils.d.ts +87 -0
- package/build/types/core/utils.d.ts.map +1 -0
- package/build/types/core/version.d.ts +2 -0
- package/build/types/core/version.d.ts.map +1 -0
- package/build/types/esbuild/index.d.ts +6 -0
- package/build/types/esbuild/index.d.ts.map +1 -0
- package/build/types/rollup/index.d.ts +56 -0
- package/build/types/rollup/index.d.ts.map +1 -0
- package/build/types/vite/index.d.ts +9 -0
- package/build/types/vite/index.d.ts.map +1 -0
- package/build/types/webpack/component-annotation-transform.d.ts +11 -0
- package/build/types/webpack/component-annotation-transform.d.ts.map +1 -0
- package/build/types/webpack/index.d.ts +5 -0
- package/build/types/webpack/index.d.ts.map +1 -0
- package/build/types/webpack/webpack4and5.d.ts +99 -0
- package/build/types/webpack/webpack4and5.d.ts.map +1 -0
- package/build/types/webpack/webpack5.d.ts +5 -0
- package/build/types/webpack/webpack5.d.ts.map +1 -0
- package/build/types-ts3.8/babel-plugin/constants.d.ts +27 -0
- package/build/types-ts3.8/babel-plugin/experimental.d.ts +51 -0
- package/build/types-ts3.8/babel-plugin/index.d.ts +56 -0
- package/build/types-ts3.8/core/build-plugin-manager.d.ts +82 -0
- package/build/types-ts3.8/core/debug-id-upload.d.ts +17 -0
- package/build/types-ts3.8/core/glob.d.ts +5 -0
- package/build/types-ts3.8/core/index.d.ts +53 -0
- package/build/types-ts3.8/core/logger.d.ts +14 -0
- package/build/types-ts3.8/core/options-mapping.d.ts +82 -0
- package/build/types-ts3.8/core/sentry/telemetry.d.ts +14 -0
- package/build/types-ts3.8/core/sentry/transports.d.ts +5 -0
- package/build/types-ts3.8/core/types.d.ts +570 -0
- package/build/types-ts3.8/core/utils.d.ts +87 -0
- package/build/types-ts3.8/core/version.d.ts +2 -0
- package/build/types-ts3.8/esbuild/index.d.ts +6 -0
- package/build/types-ts3.8/rollup/index.d.ts +56 -0
- package/build/types-ts3.8/vite/index.d.ts +9 -0
- package/build/types-ts3.8/webpack/component-annotation-transform.d.ts +11 -0
- package/build/types-ts3.8/webpack/index.d.ts +5 -0
- package/build/types-ts3.8/webpack/webpack4and5.d.ts +99 -0
- package/build/types-ts3.8/webpack/webpack5.d.ts +5 -0
- package/package.json +153 -0
- package/sentry-esbuild-debugid-injection-file.js +20 -0
- package/sentry-release-injection-file.js +4 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { getDebugIdSnippet } from '../core/index.js';
|
|
2
|
+
export { sentryCliBinaryExists } from '../core/index.js';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { createSentryBuildPluginManager } from '../core/build-plugin-manager.js';
|
|
7
|
+
import { CodeInjection, generateReleaseInjectorCode, generateModuleMetadataInjectorCode } from '../core/utils.js';
|
|
8
|
+
import { createDebugIdUploadFunction } from '../core/debug-id-upload.js';
|
|
9
|
+
|
|
10
|
+
function getEsbuildMajorVersion() {
|
|
11
|
+
try {
|
|
12
|
+
const req = createRequire(import.meta.url);
|
|
13
|
+
const esbuild = req("esbuild");
|
|
14
|
+
return esbuild.version?.split(".")[1];
|
|
15
|
+
} catch {
|
|
16
|
+
}
|
|
17
|
+
return void 0;
|
|
18
|
+
}
|
|
19
|
+
const pluginName = "sentry-esbuild-plugin";
|
|
20
|
+
function sentryEsbuildPlugin(userOptions = {}) {
|
|
21
|
+
const sentryBuildPluginManager = createSentryBuildPluginManager(userOptions, {
|
|
22
|
+
loggerPrefix: userOptions._metaOptions?.loggerPrefixOverride ?? `[${pluginName}]`,
|
|
23
|
+
buildTool: "esbuild",
|
|
24
|
+
buildToolMajorVersion: getEsbuildMajorVersion()
|
|
25
|
+
});
|
|
26
|
+
const {
|
|
27
|
+
logger,
|
|
28
|
+
normalizedOptions: options,
|
|
29
|
+
bundleSizeOptimizationReplacementValues: replacementValues,
|
|
30
|
+
bundleMetadata,
|
|
31
|
+
createDependencyOnBuildArtifacts
|
|
32
|
+
} = sentryBuildPluginManager;
|
|
33
|
+
if (options.disable) {
|
|
34
|
+
return {
|
|
35
|
+
name: "sentry-esbuild-noop-plugin",
|
|
36
|
+
setup() {
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (process.cwd().match(/\\node_modules\\|\/node_modules\//)) {
|
|
41
|
+
logger.warn("Running Sentry plugin from within a `node_modules` folder. Some features may not work.");
|
|
42
|
+
}
|
|
43
|
+
const sourcemapsEnabled = options.sourcemaps?.disable !== true;
|
|
44
|
+
const staticInjectionCode = new CodeInjection();
|
|
45
|
+
if (!options.release.inject) {
|
|
46
|
+
logger.debug("Release injection disabled via `release.inject` option. Will not inject release.");
|
|
47
|
+
} else if (!options.release.name) {
|
|
48
|
+
logger.debug(
|
|
49
|
+
"No release name provided. Will not inject release. Please set the `release.name` option to identify your release."
|
|
50
|
+
);
|
|
51
|
+
} else {
|
|
52
|
+
staticInjectionCode.append(
|
|
53
|
+
generateReleaseInjectorCode({
|
|
54
|
+
release: options.release.name,
|
|
55
|
+
injectBuildInformation: options._experiments.injectBuildInformation || false
|
|
56
|
+
})
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
if (Object.keys(bundleMetadata).length > 0) {
|
|
60
|
+
staticInjectionCode.append(generateModuleMetadataInjectorCode(bundleMetadata));
|
|
61
|
+
}
|
|
62
|
+
if (options.reactComponentAnnotation?.enabled) {
|
|
63
|
+
logger.warn(
|
|
64
|
+
"Component name annotation is not supported in esbuild. Please use a separate transform step or consider using a different bundler."
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
const transformReplace = Object.keys(replacementValues).length > 0;
|
|
68
|
+
const debugIdWrappedPaths = /* @__PURE__ */ new Set();
|
|
69
|
+
void sentryBuildPluginManager.telemetry.emitBundlerPluginExecutionSignal().catch(() => {
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
name: pluginName,
|
|
73
|
+
setup({ initialOptions, onLoad, onResolve, onEnd }) {
|
|
74
|
+
if (!staticInjectionCode.isEmpty()) {
|
|
75
|
+
const virtualInjectionFilePath = path.resolve("_sentry-injection-stub");
|
|
76
|
+
initialOptions.inject = initialOptions.inject || [];
|
|
77
|
+
initialOptions.inject.push(virtualInjectionFilePath);
|
|
78
|
+
onResolve({ filter: /_sentry-injection-stub/ }, (args) => {
|
|
79
|
+
return {
|
|
80
|
+
path: args.path,
|
|
81
|
+
sideEffects: true,
|
|
82
|
+
pluginName
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
onLoad({ filter: /_sentry-injection-stub/ }, () => {
|
|
86
|
+
return {
|
|
87
|
+
loader: "js",
|
|
88
|
+
pluginName,
|
|
89
|
+
contents: staticInjectionCode.code()
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (transformReplace) {
|
|
94
|
+
const replacementStringValues = {};
|
|
95
|
+
Object.entries(replacementValues).forEach(([key, value]) => {
|
|
96
|
+
replacementStringValues[key] = JSON.stringify(value);
|
|
97
|
+
});
|
|
98
|
+
initialOptions.define = { ...initialOptions.define, ...replacementStringValues };
|
|
99
|
+
}
|
|
100
|
+
if (sourcemapsEnabled) {
|
|
101
|
+
debugIdWrappedPaths.clear();
|
|
102
|
+
if (!initialOptions.bundle) {
|
|
103
|
+
logger.warn(
|
|
104
|
+
"The Sentry esbuild plugin only supports esbuild with `bundle: true` being set in the esbuild build options. Esbuild will probably crash now. Sorry about that. If you need to upload sourcemaps without `bundle: true`, it is recommended to use Sentry CLI instead: https://docs.sentry.io/platforms/javascript/sourcemaps/uploading/cli/"
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
onResolve({ filter: /.*/ }, (args) => {
|
|
108
|
+
if (args.kind !== "entry-point") {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (initialOptions.inject?.includes(args.path)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const resolvedPath = path.isAbsolute(args.path) ? args.path : path.join(args.resolveDir, args.path);
|
|
115
|
+
if (debugIdWrappedPaths.has(resolvedPath)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
debugIdWrappedPaths.add(resolvedPath);
|
|
119
|
+
return {
|
|
120
|
+
pluginName,
|
|
121
|
+
path: resolvedPath,
|
|
122
|
+
pluginData: {
|
|
123
|
+
isDebugIdProxy: true,
|
|
124
|
+
originalPath: args.path,
|
|
125
|
+
originalResolveDir: args.resolveDir
|
|
126
|
+
},
|
|
127
|
+
// We need to add a suffix here, otherwise esbuild will mark the entrypoint as resolved and won't traverse
|
|
128
|
+
// the module tree any further down past the proxy module because we're essentially creating a dependency
|
|
129
|
+
// loop back to the proxy module.
|
|
130
|
+
// By setting a suffix we're telling esbuild that the entrypoint and proxy module are two different things,
|
|
131
|
+
// making it re-resolve the entrypoint when it is imported from the proxy module.
|
|
132
|
+
// Super confusing? Yes. Works? Apparently... Let's see.
|
|
133
|
+
suffix: "?sentryDebugIdProxy=true"
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
onLoad({ filter: /.*/ }, (args) => {
|
|
137
|
+
if (!args.pluginData?.isDebugIdProxy) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const originalPath = args.pluginData.originalPath;
|
|
141
|
+
const originalResolveDir = args.pluginData.originalResolveDir;
|
|
142
|
+
return {
|
|
143
|
+
loader: "js",
|
|
144
|
+
pluginName,
|
|
145
|
+
contents: `
|
|
146
|
+
import "_sentry-debug-id-injection-stub";
|
|
147
|
+
import * as OriginalModule from ${JSON.stringify(originalPath)};
|
|
148
|
+
export default OriginalModule.default;
|
|
149
|
+
export * from ${JSON.stringify(originalPath)};`,
|
|
150
|
+
resolveDir: originalResolveDir
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
onResolve({ filter: /_sentry-debug-id-injection-stub/ }, (args) => {
|
|
154
|
+
return {
|
|
155
|
+
path: args.path,
|
|
156
|
+
sideEffects: true,
|
|
157
|
+
pluginName,
|
|
158
|
+
namespace: "sentry-debug-id-stub",
|
|
159
|
+
suffix: `?sentry-module-id=${randomUUID()}`
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
onLoad({ filter: /_sentry-debug-id-injection-stub/, namespace: "sentry-debug-id-stub" }, () => {
|
|
163
|
+
return {
|
|
164
|
+
loader: "js",
|
|
165
|
+
pluginName,
|
|
166
|
+
contents: getDebugIdSnippet(randomUUID()).code()
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
const freeGlobalDependencyOnBuildArtifacts = createDependencyOnBuildArtifacts();
|
|
171
|
+
const upload = createDebugIdUploadFunction({ sentryBuildPluginManager });
|
|
172
|
+
initialOptions.metafile = true;
|
|
173
|
+
onEnd(async (result) => {
|
|
174
|
+
try {
|
|
175
|
+
await sentryBuildPluginManager.createRelease();
|
|
176
|
+
if (sourcemapsEnabled && options.sourcemaps?.disable !== "disable-upload") {
|
|
177
|
+
const buildArtifacts = result.metafile ? Object.keys(result.metafile.outputs) : [];
|
|
178
|
+
await upload(buildArtifacts);
|
|
179
|
+
}
|
|
180
|
+
} finally {
|
|
181
|
+
freeGlobalDependencyOnBuildArtifacts();
|
|
182
|
+
await sentryBuildPluginManager.deleteArtifacts();
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export { sentryEsbuildPlugin as default, sentryEsbuildPlugin };
|
|
190
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/esbuild/index.ts"],"sourcesContent":["import type { Options } from '../core';\nimport {\n createSentryBuildPluginManager,\n generateReleaseInjectorCode,\n generateModuleMetadataInjectorCode,\n getDebugIdSnippet,\n createDebugIdUploadFunction,\n CodeInjection,\n} from '../core';\nimport * as path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { randomUUID } from 'node:crypto';\n\ninterface EsbuildOnResolveArgs {\n path: string;\n kind: string;\n importer?: string;\n resolveDir: string;\n pluginData?: unknown;\n}\n\ninterface EsbuildOnResolveResult {\n path: string;\n sideEffects?: boolean;\n pluginName?: string;\n namespace?: string;\n suffix?: string;\n pluginData?: unknown;\n}\n\ninterface EsbuildOnLoadArgs {\n path: string;\n pluginData?: unknown;\n}\n\ninterface EsbuildOnLoadResult {\n loader: string;\n pluginName: string;\n contents: string;\n resolveDir?: string;\n}\n\ninterface EsbuildOnEndArgs {\n metafile?: {\n outputs: Record<string, unknown>;\n };\n}\n\ninterface EsbuildInitialOptions {\n bundle?: boolean;\n inject?: string[];\n metafile?: boolean;\n define?: Record<string, string>;\n}\n\ninterface EsbuildPluginBuild {\n initialOptions: EsbuildInitialOptions;\n onLoad: (\n options: { filter: RegExp; namespace?: string },\n callback: (args: EsbuildOnLoadArgs) => EsbuildOnLoadResult | null,\n ) => void;\n onResolve: (\n options: { filter: RegExp },\n callback: (args: EsbuildOnResolveArgs) => EsbuildOnResolveResult | undefined,\n ) => void;\n onEnd: (callback: (result: EsbuildOnEndArgs) => void | Promise<void>) => void;\n}\n\nfunction getEsbuildMajorVersion(): string | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - esbuild transpiles this for us\n const req = createRequire(import.meta.url);\n const esbuild = req('esbuild') as { version?: string };\n // esbuild hasn't released a v1 yet, so we'll return the minor version as the major version\n return esbuild.version?.split('.')[1];\n } catch {\n // do nothing, we'll just not report a version\n }\n\n return undefined;\n}\n\nconst pluginName = 'sentry-esbuild-plugin';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function sentryEsbuildPlugin(userOptions: Options = {}): any {\n const sentryBuildPluginManager = createSentryBuildPluginManager(userOptions, {\n loggerPrefix: userOptions._metaOptions?.loggerPrefixOverride ?? `[${pluginName}]`,\n buildTool: 'esbuild',\n buildToolMajorVersion: getEsbuildMajorVersion(),\n });\n\n const {\n logger,\n normalizedOptions: options,\n bundleSizeOptimizationReplacementValues: replacementValues,\n bundleMetadata,\n createDependencyOnBuildArtifacts,\n } = sentryBuildPluginManager;\n\n if (options.disable) {\n return {\n name: 'sentry-esbuild-noop-plugin',\n setup() {\n // noop plugin\n },\n };\n }\n\n if (process.cwd().match(/\\\\node_modules\\\\|\\/node_modules\\//)) {\n logger.warn('Running Sentry plugin from within a `node_modules` folder. Some features may not work.');\n }\n\n const sourcemapsEnabled = options.sourcemaps?.disable !== true;\n const staticInjectionCode = new CodeInjection();\n\n if (!options.release.inject) {\n logger.debug('Release injection disabled via `release.inject` option. Will not inject release.');\n } else if (!options.release.name) {\n logger.debug(\n 'No release name provided. Will not inject release. Please set the `release.name` option to identify your release.',\n );\n } else {\n staticInjectionCode.append(\n generateReleaseInjectorCode({\n release: options.release.name,\n injectBuildInformation: options._experiments.injectBuildInformation || false,\n }),\n );\n }\n\n if (Object.keys(bundleMetadata).length > 0) {\n staticInjectionCode.append(generateModuleMetadataInjectorCode(bundleMetadata));\n }\n\n // Component annotation warning\n if (options.reactComponentAnnotation?.enabled) {\n logger.warn(\n 'Component name annotation is not supported in esbuild. Please use a separate transform step or consider using a different bundler.',\n );\n }\n\n const transformReplace = Object.keys(replacementValues).length > 0;\n\n // Track entry points wrapped for debug ID injection\n const debugIdWrappedPaths = new Set<string>();\n\n void sentryBuildPluginManager.telemetry.emitBundlerPluginExecutionSignal().catch(() => {\n // Telemetry failures are acceptable\n });\n\n return {\n name: pluginName,\n setup({ initialOptions, onLoad, onResolve, onEnd }: EsbuildPluginBuild) {\n // Release and/or metadata injection\n if (!staticInjectionCode.isEmpty()) {\n const virtualInjectionFilePath = path.resolve('_sentry-injection-stub');\n initialOptions.inject = initialOptions.inject || [];\n initialOptions.inject.push(virtualInjectionFilePath);\n\n onResolve({ filter: /_sentry-injection-stub/ }, args => {\n return {\n path: args.path,\n sideEffects: true,\n pluginName,\n };\n });\n\n onLoad({ filter: /_sentry-injection-stub/ }, () => {\n return {\n loader: 'js',\n pluginName,\n contents: staticInjectionCode.code(),\n };\n });\n }\n\n // Bundle size optimizations\n if (transformReplace) {\n const replacementStringValues: Record<string, string> = {};\n Object.entries(replacementValues).forEach(([key, value]) => {\n replacementStringValues[key] = JSON.stringify(value);\n });\n\n initialOptions.define = { ...initialOptions.define, ...replacementStringValues };\n }\n\n // Debug ID injection - requires per-entry-point unique IDs\n if (sourcemapsEnabled) {\n // Clear state from previous builds (important for watch mode and test suites)\n debugIdWrappedPaths.clear();\n\n if (!initialOptions.bundle) {\n logger.warn(\n 'The Sentry esbuild plugin only supports esbuild with `bundle: true` being set in the esbuild build options. Esbuild will probably crash now. Sorry about that. If you need to upload sourcemaps without `bundle: true`, it is recommended to use Sentry CLI instead: https://docs.sentry.io/platforms/javascript/sourcemaps/uploading/cli/',\n );\n }\n\n // Wrap entry points to inject debug IDs\n onResolve({ filter: /.*/ }, args => {\n if (args.kind !== 'entry-point') {\n return;\n }\n\n // Skip injecting debug IDs into modules specified in the esbuild `inject` option\n // since they're already part of the entry points\n if (initialOptions.inject?.includes(args.path)) {\n return;\n }\n\n const resolvedPath = path.isAbsolute(args.path) ? args.path : path.join(args.resolveDir, args.path);\n\n // Skip injecting debug IDs into paths that have already been wrapped\n if (debugIdWrappedPaths.has(resolvedPath)) {\n return;\n }\n debugIdWrappedPaths.add(resolvedPath);\n\n return {\n pluginName,\n path: resolvedPath,\n pluginData: {\n isDebugIdProxy: true,\n originalPath: args.path,\n originalResolveDir: args.resolveDir,\n },\n // We need to add a suffix here, otherwise esbuild will mark the entrypoint as resolved and won't traverse\n // the module tree any further down past the proxy module because we're essentially creating a dependency\n // loop back to the proxy module.\n // By setting a suffix we're telling esbuild that the entrypoint and proxy module are two different things,\n // making it re-resolve the entrypoint when it is imported from the proxy module.\n // Super confusing? Yes. Works? Apparently... Let's see.\n suffix: '?sentryDebugIdProxy=true',\n };\n });\n\n onLoad({ filter: /.*/ }, args => {\n if (!(args.pluginData as { isDebugIdProxy?: boolean })?.isDebugIdProxy) {\n return null;\n }\n\n const originalPath = (args.pluginData as { originalPath: string }).originalPath;\n const originalResolveDir = (args.pluginData as { originalResolveDir: string }).originalResolveDir;\n\n return {\n loader: 'js',\n pluginName,\n contents: `\n import \"_sentry-debug-id-injection-stub\";\n import * as OriginalModule from ${JSON.stringify(originalPath)};\n export default OriginalModule.default;\n export * from ${JSON.stringify(originalPath)};`,\n resolveDir: originalResolveDir,\n };\n });\n\n onResolve({ filter: /_sentry-debug-id-injection-stub/ }, args => {\n return {\n path: args.path,\n sideEffects: true,\n pluginName,\n namespace: 'sentry-debug-id-stub',\n suffix: `?sentry-module-id=${randomUUID()}`,\n };\n });\n\n onLoad({ filter: /_sentry-debug-id-injection-stub/, namespace: 'sentry-debug-id-stub' }, () => {\n return {\n loader: 'js',\n pluginName,\n contents: getDebugIdSnippet(randomUUID()).code(),\n };\n });\n }\n\n // Create release and optionally upload\n const freeGlobalDependencyOnBuildArtifacts = createDependencyOnBuildArtifacts();\n const upload = createDebugIdUploadFunction({ sentryBuildPluginManager });\n\n initialOptions.metafile = true;\n onEnd(async result => {\n try {\n await sentryBuildPluginManager.createRelease();\n\n if (sourcemapsEnabled && options.sourcemaps?.disable !== 'disable-upload') {\n const buildArtifacts = result.metafile ? Object.keys(result.metafile.outputs) : [];\n await upload(buildArtifacts);\n }\n } finally {\n freeGlobalDependencyOnBuildArtifacts();\n await sentryBuildPluginManager.deleteArtifacts();\n }\n });\n },\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default sentryEsbuildPlugin;\nexport type { Options as SentryEsbuildPluginOptions } from '../core';\nexport { sentryCliBinaryExists } from '../core';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module","version":"10.60.0","sideEffects":["./sentry-release-injection-file.js","./sentry-esbuild-debugid-injection-file.js"]}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { createComponentNameAnnotateHooks, isJsFile, shouldSkipCodeInjection, getDebugIdSnippet, COMMENT_USE_STRICT_REGEX } from '../core/index.js';
|
|
2
|
+
export { sentryCliBinaryExists } from '../core/index.js';
|
|
3
|
+
import MagicString from 'magic-string';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
|
+
import { createSentryBuildPluginManager } from '../core/build-plugin-manager.js';
|
|
7
|
+
import { CodeInjection, generateReleaseInjectorCode, generateModuleMetadataInjectorCode, stringToUUID, replaceBooleanFlagsInCode } from '../core/utils.js';
|
|
8
|
+
import { globFiles } from '../core/glob.js';
|
|
9
|
+
import { createDebugIdUploadFunction } from '../core/debug-id-upload.js';
|
|
10
|
+
|
|
11
|
+
function hasExistingDebugID(code) {
|
|
12
|
+
const chunkStartSnippet = code.slice(0, 6e3);
|
|
13
|
+
const chunkEndSnippet = code.slice(-500);
|
|
14
|
+
if (chunkStartSnippet.includes("_sentryDebugIdIdentifier") || chunkEndSnippet.includes("//# debugId=")) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
function getRollupMajorVersion() {
|
|
20
|
+
try {
|
|
21
|
+
const req = createRequire(import.meta.url);
|
|
22
|
+
const rollup = req("rollup");
|
|
23
|
+
return rollup.VERSION?.split(".")[0];
|
|
24
|
+
} catch {
|
|
25
|
+
}
|
|
26
|
+
return void 0;
|
|
27
|
+
}
|
|
28
|
+
function _rollupPluginInternal(userOptions = {}, buildTool, buildToolMajorVersion) {
|
|
29
|
+
const sentryBuildPluginManager = createSentryBuildPluginManager(userOptions, {
|
|
30
|
+
loggerPrefix: userOptions._metaOptions?.loggerPrefixOverride ?? `[sentry-${buildTool}-plugin]`,
|
|
31
|
+
buildTool,
|
|
32
|
+
buildToolMajorVersion: buildToolMajorVersion || getRollupMajorVersion()
|
|
33
|
+
});
|
|
34
|
+
const {
|
|
35
|
+
logger,
|
|
36
|
+
normalizedOptions: options,
|
|
37
|
+
bundleSizeOptimizationReplacementValues: replacementValues,
|
|
38
|
+
bundleMetadata,
|
|
39
|
+
createDependencyOnBuildArtifacts
|
|
40
|
+
} = sentryBuildPluginManager;
|
|
41
|
+
if (options.disable) {
|
|
42
|
+
return {
|
|
43
|
+
name: "sentry-noop-plugin"
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (process.cwd().match(/\\node_modules\\|\/node_modules\//)) {
|
|
47
|
+
logger.warn("Running Sentry plugin from within a `node_modules` folder. Some features may not work.");
|
|
48
|
+
}
|
|
49
|
+
const freeGlobalDependencyOnBuildArtifacts = createDependencyOnBuildArtifacts();
|
|
50
|
+
const upload = createDebugIdUploadFunction({ sentryBuildPluginManager });
|
|
51
|
+
const sourcemapsEnabled = options.sourcemaps?.disable !== true;
|
|
52
|
+
const staticInjectionCode = new CodeInjection();
|
|
53
|
+
if (!options.release.inject) {
|
|
54
|
+
logger.debug("Release injection disabled via `release.inject` option. Will not inject release.");
|
|
55
|
+
} else if (!options.release.name) {
|
|
56
|
+
logger.debug(
|
|
57
|
+
"No release name provided. Will not inject release. Please set the `release.name` option to identify your release."
|
|
58
|
+
);
|
|
59
|
+
} else {
|
|
60
|
+
staticInjectionCode.append(
|
|
61
|
+
generateReleaseInjectorCode({
|
|
62
|
+
release: options.release.name,
|
|
63
|
+
injectBuildInformation: options._experiments.injectBuildInformation || false
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
if (Object.keys(bundleMetadata).length > 0) {
|
|
68
|
+
staticInjectionCode.append(generateModuleMetadataInjectorCode(bundleMetadata));
|
|
69
|
+
}
|
|
70
|
+
const transformAnnotations = options.reactComponentAnnotation?.enabled ? createComponentNameAnnotateHooks(
|
|
71
|
+
options.reactComponentAnnotation?.ignoredComponents || [],
|
|
72
|
+
!!options.reactComponentAnnotation?._experimentalInjectIntoHtml
|
|
73
|
+
) : void 0;
|
|
74
|
+
const transformReplace = Object.keys(replacementValues).length > 0;
|
|
75
|
+
const shouldTransform = transformAnnotations || transformReplace;
|
|
76
|
+
function buildStart() {
|
|
77
|
+
void sentryBuildPluginManager.telemetry.emitBundlerPluginExecutionSignal().catch(() => {
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async function transform(code, id) {
|
|
81
|
+
if (transformAnnotations?.transform) {
|
|
82
|
+
const result = await transformAnnotations.transform(code, id);
|
|
83
|
+
if (result) {
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (transformReplace) {
|
|
88
|
+
return replaceBooleanFlagsInCode(code, replacementValues);
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
function renderChunk(code, chunk, _, meta) {
|
|
93
|
+
if (!isJsFile(chunk.fileName)) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
if (shouldSkipCodeInjection(code, chunk.facadeModuleId)) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const injectCode = staticInjectionCode.clone();
|
|
100
|
+
if (sourcemapsEnabled && !hasExistingDebugID(code)) {
|
|
101
|
+
const debugId = stringToUUID(code);
|
|
102
|
+
injectCode.append(getDebugIdSnippet(debugId));
|
|
103
|
+
}
|
|
104
|
+
if (injectCode.isEmpty()) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const ms = meta?.magicString || new MagicString(code, { filename: chunk.fileName });
|
|
108
|
+
const match = code.match(COMMENT_USE_STRICT_REGEX)?.[0];
|
|
109
|
+
if (match) {
|
|
110
|
+
ms.appendLeft(match.length, injectCode.code());
|
|
111
|
+
} else {
|
|
112
|
+
ms.prepend(injectCode.code());
|
|
113
|
+
}
|
|
114
|
+
if (ms?.constructor?.name === "BindingMagicString") {
|
|
115
|
+
return { code: ms };
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
code: ms.toString(),
|
|
119
|
+
map: ms.generateMap({ file: chunk.fileName, hires: "boundary" })
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async function writeBundle(outputOptions, bundle) {
|
|
123
|
+
try {
|
|
124
|
+
await sentryBuildPluginManager.createRelease();
|
|
125
|
+
if (sourcemapsEnabled && options.sourcemaps?.disable !== "disable-upload") {
|
|
126
|
+
if (outputOptions.dir) {
|
|
127
|
+
const outputDir = outputOptions.dir;
|
|
128
|
+
const JS_AND_MAP_PATTERNS = [
|
|
129
|
+
"/**/*.js",
|
|
130
|
+
"/**/*.mjs",
|
|
131
|
+
"/**/*.cjs",
|
|
132
|
+
"/**/*.js.map",
|
|
133
|
+
"/**/*.mjs.map",
|
|
134
|
+
"/**/*.cjs.map"
|
|
135
|
+
].map((q) => `${q}?(\\?*)?(#*)`);
|
|
136
|
+
const buildArtifacts = await globFiles(JS_AND_MAP_PATTERNS, { root: outputDir });
|
|
137
|
+
await upload(buildArtifacts);
|
|
138
|
+
} else if (outputOptions.file) {
|
|
139
|
+
await upload([outputOptions.file]);
|
|
140
|
+
} else {
|
|
141
|
+
const buildArtifacts = Object.keys(bundle).map((asset) => path.join(path.resolve(), asset));
|
|
142
|
+
await upload(buildArtifacts);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} finally {
|
|
146
|
+
freeGlobalDependencyOnBuildArtifacts();
|
|
147
|
+
await sentryBuildPluginManager.deleteArtifacts();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const name = `sentry-${buildTool}-plugin`;
|
|
151
|
+
if (shouldTransform) {
|
|
152
|
+
return {
|
|
153
|
+
name,
|
|
154
|
+
buildStart,
|
|
155
|
+
transform,
|
|
156
|
+
renderChunk,
|
|
157
|
+
writeBundle
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
name,
|
|
162
|
+
buildStart,
|
|
163
|
+
renderChunk,
|
|
164
|
+
writeBundle
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function sentryRollupPlugin(userOptions = {}) {
|
|
168
|
+
return [_rollupPluginInternal(userOptions, "rollup")];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export { _rollupPluginInternal, sentryRollupPlugin };
|
|
172
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/rollup/index.ts"],"sourcesContent":["import type { Options } from '../core';\nimport {\n createSentryBuildPluginManager,\n generateReleaseInjectorCode,\n generateModuleMetadataInjectorCode,\n isJsFile,\n shouldSkipCodeInjection,\n getDebugIdSnippet,\n stringToUUID,\n COMMENT_USE_STRICT_REGEX,\n createDebugIdUploadFunction,\n globFiles,\n createComponentNameAnnotateHooks,\n replaceBooleanFlagsInCode,\n CodeInjection,\n} from '../core';\nimport type { SourceMap } from 'magic-string';\nimport MagicString from 'magic-string';\nimport type { TransformResult } from 'rollup';\nimport * as path from 'node:path';\nimport { createRequire } from 'node:module';\n\nfunction hasExistingDebugID(code: string): boolean {\n // Check if a debug ID has already been injected to avoid duplicate injection (e.g. by another plugin or Sentry CLI)\n const chunkStartSnippet = code.slice(0, 6000);\n const chunkEndSnippet = code.slice(-500);\n\n if (chunkStartSnippet.includes('_sentryDebugIdIdentifier') || chunkEndSnippet.includes('//# debugId=')) {\n return true; // Debug ID already present, skip injection\n }\n\n return false;\n}\n\nfunction getRollupMajorVersion(): string | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - Rollup already transpiles this for us\n const req = createRequire(import.meta.url);\n const rollup = req('rollup') as { VERSION?: string };\n return rollup.VERSION?.split('.')[0];\n } catch {\n // do nothing, we'll just not report a version\n }\n\n return undefined;\n}\n\n/**\n * @ignore - this is the internal plugin factory function only used for the Vite plugin!\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function _rollupPluginInternal(\n userOptions: Options = {},\n buildTool: 'rollup' | 'vite',\n buildToolMajorVersion?: string,\n) {\n const sentryBuildPluginManager = createSentryBuildPluginManager(userOptions, {\n loggerPrefix: userOptions._metaOptions?.loggerPrefixOverride ?? `[sentry-${buildTool}-plugin]`,\n buildTool,\n buildToolMajorVersion: buildToolMajorVersion || getRollupMajorVersion(),\n });\n\n const {\n logger,\n normalizedOptions: options,\n bundleSizeOptimizationReplacementValues: replacementValues,\n bundleMetadata,\n createDependencyOnBuildArtifacts,\n } = sentryBuildPluginManager;\n\n if (options.disable) {\n return {\n name: 'sentry-noop-plugin',\n };\n }\n\n if (process.cwd().match(/\\\\node_modules\\\\|\\/node_modules\\//)) {\n logger.warn('Running Sentry plugin from within a `node_modules` folder. Some features may not work.');\n }\n\n const freeGlobalDependencyOnBuildArtifacts = createDependencyOnBuildArtifacts();\n const upload = createDebugIdUploadFunction({ sentryBuildPluginManager });\n const sourcemapsEnabled = options.sourcemaps?.disable !== true;\n const staticInjectionCode = new CodeInjection();\n\n if (!options.release.inject) {\n logger.debug('Release injection disabled via `release.inject` option. Will not inject release.');\n } else if (!options.release.name) {\n logger.debug(\n 'No release name provided. Will not inject release. Please set the `release.name` option to identify your release.',\n );\n } else {\n staticInjectionCode.append(\n generateReleaseInjectorCode({\n release: options.release.name,\n injectBuildInformation: options._experiments.injectBuildInformation || false,\n }),\n );\n }\n\n if (Object.keys(bundleMetadata).length > 0) {\n staticInjectionCode.append(generateModuleMetadataInjectorCode(bundleMetadata));\n }\n\n const transformAnnotations = options.reactComponentAnnotation?.enabled\n ? createComponentNameAnnotateHooks(\n options.reactComponentAnnotation?.ignoredComponents || [],\n !!options.reactComponentAnnotation?._experimentalInjectIntoHtml,\n )\n : undefined;\n\n const transformReplace = Object.keys(replacementValues).length > 0;\n const shouldTransform = transformAnnotations || transformReplace;\n\n function buildStart(): void {\n void sentryBuildPluginManager.telemetry.emitBundlerPluginExecutionSignal().catch(() => {\n // Telemetry failures are acceptable\n });\n }\n\n async function transform(code: string, id: string): Promise<TransformResult> {\n // Component annotations are only in user code and boolean flag replacements are\n // only in Sentry code. If we successfully add annotations, we can return early.\n\n if (transformAnnotations?.transform) {\n const result = await transformAnnotations.transform(code, id);\n if (result) {\n return result;\n }\n }\n\n if (transformReplace) {\n return replaceBooleanFlagsInCode(code, replacementValues);\n }\n\n return null;\n }\n\n function renderChunk(\n code: string,\n chunk: { fileName: string; facadeModuleId?: string | null },\n _?: unknown,\n meta?: { magicString?: MagicString },\n ): {\n code: string;\n map?: SourceMap;\n } | null {\n if (!isJsFile(chunk.fileName)) {\n return null; // returning null means not modifying the chunk at all\n }\n\n // Skip empty chunks and HTML facade chunks (Vite MPA)\n if (shouldSkipCodeInjection(code, chunk.facadeModuleId)) {\n return null;\n }\n\n const injectCode = staticInjectionCode.clone();\n\n if (sourcemapsEnabled && !hasExistingDebugID(code)) {\n const debugId = stringToUUID(code); // generate a deterministic debug ID\n injectCode.append(getDebugIdSnippet(debugId));\n }\n\n if (injectCode.isEmpty()) {\n return null;\n }\n\n const ms = meta?.magicString || new MagicString(code, { filename: chunk.fileName });\n const match = code.match(COMMENT_USE_STRICT_REGEX)?.[0];\n\n if (match) {\n // Add injected code after any comments or \"use strict\" at the beginning of the bundle.\n ms.appendLeft(match.length, injectCode.code());\n } else {\n // ms.replace() doesn't work when there is an empty string match (which happens if\n // there is neither, a comment, nor a \"use strict\" at the top of the chunk) so we\n // need this special case here.\n ms.prepend(injectCode.code());\n }\n\n // Rolldown can pass a native MagicString instance in meta.magicString\n // https://rolldown.rs/in-depth/native-magic-string#usage-examples\n if (ms?.constructor?.name === 'BindingMagicString') {\n // Rolldown docs say to return the magic string instance directly in this case\n return { code: ms as unknown as string };\n }\n\n return {\n code: ms.toString(),\n map: ms.generateMap({ file: chunk.fileName, hires: 'boundary' as unknown as undefined }),\n };\n }\n\n async function writeBundle(\n outputOptions: { dir?: string; file?: string },\n bundle: { [fileName: string]: unknown },\n ): Promise<void> {\n try {\n await sentryBuildPluginManager.createRelease();\n\n if (sourcemapsEnabled && options.sourcemaps?.disable !== 'disable-upload') {\n if (outputOptions.dir) {\n const outputDir = outputOptions.dir;\n const JS_AND_MAP_PATTERNS = [\n '/**/*.js',\n '/**/*.mjs',\n '/**/*.cjs',\n '/**/*.js.map',\n '/**/*.mjs.map',\n '/**/*.cjs.map',\n ].map(q => `${q}?(\\\\?*)?(#*)`); // We want to allow query and hash strings at the end of files\n const buildArtifacts = await globFiles(JS_AND_MAP_PATTERNS, { root: outputDir });\n await upload(buildArtifacts);\n } else if (outputOptions.file) {\n await upload([outputOptions.file]);\n } else {\n const buildArtifacts = Object.keys(bundle).map(asset => path.join(path.resolve(), asset));\n await upload(buildArtifacts);\n }\n }\n } finally {\n freeGlobalDependencyOnBuildArtifacts();\n await sentryBuildPluginManager.deleteArtifacts();\n }\n }\n\n const name = `sentry-${buildTool}-plugin`;\n\n if (shouldTransform) {\n return {\n name,\n buildStart,\n transform,\n renderChunk,\n writeBundle,\n };\n }\n\n return {\n name,\n buildStart,\n renderChunk,\n writeBundle,\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-explicit-any\nexport function sentryRollupPlugin(userOptions: Options = {}): any {\n // We return an array here so we don't break backwards compatibility with what\n // unplugin used to return\n return [_rollupPluginInternal(userOptions, 'rollup')];\n}\n\nexport type { Options as SentryRollupPluginOptions } from '../core';\nexport { sentryCliBinaryExists } from '../core';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { _rollupPluginInternal } from '../rollup/index.js';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
export { sentryCliBinaryExists } from '../core/index.js';
|
|
4
|
+
|
|
5
|
+
function getViteMajorVersion() {
|
|
6
|
+
try {
|
|
7
|
+
const req = createRequire(import.meta.url);
|
|
8
|
+
const vite = req("vite");
|
|
9
|
+
return vite.version?.split(".")[0];
|
|
10
|
+
} catch {
|
|
11
|
+
}
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
const sentryVitePlugin = (options) => {
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
enforce: "pre",
|
|
18
|
+
..._rollupPluginInternal(options, "vite", getViteMajorVersion())
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { sentryVitePlugin };
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/vite/index.ts"],"sourcesContent":["import type { SentryRollupPluginOptions } from '../rollup';\nimport { _rollupPluginInternal } from '../rollup';\nimport { createRequire } from 'node:module';\n\ninterface SentryVitePlugin {\n name: string;\n enforce: 'pre';\n}\n\nfunction getViteMajorVersion(): string | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - Rollup already transpiles this for us\n const req = createRequire(import.meta.url);\n const vite = req('vite') as { version?: string };\n return vite.version?.split('.')[0];\n } catch {\n // do nothing, we'll just not report a version\n }\n\n return undefined;\n}\n\nexport const sentryVitePlugin = (options?: SentryRollupPluginOptions): SentryVitePlugin[] => {\n return [\n {\n enforce: 'pre',\n ..._rollupPluginInternal(options, 'vite', getViteMajorVersion()),\n },\n ];\n};\n\nexport type { Options as SentryVitePluginOptions } from '../core';\nexport { sentryCliBinaryExists } from '../core';\n"],"names":[],"mappings":";;;;AASA,SAAS,mBAAA,GAA0C;AACjD,EAAA,IAAI;AAGF,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,IAAI,MAAM,CAAA;AACvB,IAAA,OAAO,IAAA,CAAK,OAAA,EAAS,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAA4D;AAC3F,EAAA,OAAO;AAAA,IACL;AAAA,MACE,OAAA,EAAS,KAAA;AAAA,MACT,GAAG,qBAAA,CAAsB,OAAA,EAAS,MAAA,EAAQ,qBAAqB;AAAA;AACjE,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
async function transform(source, map) {
|
|
2
|
+
const callback = this.async();
|
|
3
|
+
const { transform: transformFn } = this.query;
|
|
4
|
+
if (!transformFn) {
|
|
5
|
+
return callback(null, source, map);
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const id = this.resourcePath;
|
|
9
|
+
const result = await transformFn(source, id);
|
|
10
|
+
if (result == null) {
|
|
11
|
+
callback(null, source, map);
|
|
12
|
+
} else if (typeof result === "string") {
|
|
13
|
+
callback(null, result, map);
|
|
14
|
+
} else {
|
|
15
|
+
callback(null, result.code, result.map || map);
|
|
16
|
+
}
|
|
17
|
+
} catch (error) {
|
|
18
|
+
if (error instanceof Error) {
|
|
19
|
+
callback(error);
|
|
20
|
+
} else {
|
|
21
|
+
callback(new Error(String(error)));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { transform as default };
|
|
27
|
+
//# sourceMappingURL=component-annotation-transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-annotation-transform.js","sources":["../../../src/webpack/component-annotation-transform.ts"],"sourcesContent":["// Webpack loader for component annotation transform\n// Based on unplugin v1.0.1 transform loader pattern\n\nexport default async function transform(\n this: {\n async: () => (err: Error | null, content?: string, sourceMap?: unknown) => void;\n resourcePath: string;\n query: {\n transform?: (code: string, id: string) => Promise<{ code: string; map?: unknown } | null | undefined | string>;\n };\n },\n source: string,\n map: unknown,\n): Promise<void> {\n const callback = this.async();\n const { transform: transformFn } = this.query;\n\n if (!transformFn) {\n return callback(null, source, map);\n }\n\n try {\n const id = this.resourcePath;\n const result = await transformFn(source, id);\n\n if (result == null) {\n callback(null, source, map);\n } else if (typeof result === 'string') {\n callback(null, result, map);\n } else {\n callback(null, result.code, result.map || map);\n }\n } catch (error) {\n if (error instanceof Error) {\n callback(error);\n } else {\n callback(new Error(String(error)));\n }\n }\n}\n"],"names":[],"mappings":"AAGA,eAA8B,SAAA,CAQ5B,QACA,GAAA,EACe;AACf,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,EAAM;AAC5B,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAY,GAAI,IAAA,CAAK,KAAA;AAExC,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,GAAG,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,IAAA,CAAK,YAAA;AAChB,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,MAAA,EAAQ,EAAE,CAAA;AAE3C,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,QAAA,CAAS,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,IAC5B,CAAA,MAAA,IAAW,OAAO,MAAA,KAAW,QAAA,EAAU;AACrC,MAAA,QAAA,CAAS,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,QAAA,CAAS,KAAK,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAAA,IACnC;AAAA,EACF;AACF;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { sentryWebpackPluginFactory } from './webpack4and5.js';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
export { sentryCliBinaryExists } from '../core/index.js';
|
|
4
|
+
|
|
5
|
+
function loadWebpack() {
|
|
6
|
+
try {
|
|
7
|
+
return createRequire(import.meta.url)("webpack");
|
|
8
|
+
} catch {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const webpack = loadWebpack();
|
|
13
|
+
const BannerPlugin = webpack.BannerPlugin ?? webpack.default?.BannerPlugin;
|
|
14
|
+
const DefinePlugin = webpack.DefinePlugin ?? webpack.default?.DefinePlugin;
|
|
15
|
+
const sentryWebpackPlugin = sentryWebpackPluginFactory({
|
|
16
|
+
BannerPlugin,
|
|
17
|
+
DefinePlugin
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export { sentryWebpackPlugin };
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/webpack/index.ts"],"sourcesContent":["import type { SentryWebpackPluginOptions } from './webpack4and5';\nimport { sentryWebpackPluginFactory } from './webpack4and5';\nimport { createRequire } from 'node:module';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype PluginClass = new (options: any) => unknown;\n\ntype WebpackModule = {\n BannerPlugin?: PluginClass;\n DefinePlugin?: PluginClass;\n default?: WebpackModule;\n};\n\n// `webpack` is an optional peer dependency. We require it lazily so the plugin doesn't\n// crash on load in bundlers that don't ship `webpack` (e.g. rspack) — those provide\n// the plugin classes via `compiler.webpack` at runtime instead.\nfunction loadWebpack(): WebpackModule {\n try {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Rollup transpiles import.meta for CJS\n return createRequire(import.meta.url)('webpack') as WebpackModule;\n } catch {\n return {};\n }\n}\n\nconst webpack = loadWebpack();\nconst BannerPlugin = webpack.BannerPlugin ?? webpack.default?.BannerPlugin;\nconst DefinePlugin = webpack.DefinePlugin ?? webpack.default?.DefinePlugin;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const sentryWebpackPlugin: (options?: SentryWebpackPluginOptions) => any = sentryWebpackPluginFactory({\n BannerPlugin,\n DefinePlugin,\n});\n\nexport { sentryCliBinaryExists } from '../core';\n\nexport type { SentryWebpackPluginOptions };\n"],"names":[],"mappings":";;;;AAgBA,SAAS,WAAA,GAA6B;AACpC,EAAA,IAAI;AAGF,IAAA,OAAO,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAAE,SAAS,CAAA;AAAA,EACjD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEA,MAAM,UAAU,WAAA,EAAY;AAC5B,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,OAAA,EAAS,YAAA;AAC9D,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,OAAA,EAAS,YAAA;AAGvD,MAAM,sBAAqE,0BAAA,CAA2B;AAAA,EAC3G,YAAA;AAAA,EACA;AACF,CAAC;;;;"}
|