diff --git a/packages/bundler-plugin-core/src/index.ts b/packages/bundler-plugin-core/src/index.ts index d7dc2585..c25535d3 100644 --- a/packages/bundler-plugin-core/src/index.ts +++ b/packages/bundler-plugin-core/src/index.ts @@ -405,9 +405,7 @@ export function sentryUnpluginFactory({ plugins.push( fileDeletionPlugin({ - // It is very important that this is only called after all other dependencies have been created with `createDependencyOnSourcemapFiles`. - // Ideally, we always register this plugin last. - dependenciesAreFreedPromise: waitUntilSourcemapFileDependenciesAreFreed(), + waitUntilSourcemapFileDependenciesAreFreed, filesToDeleteAfterUpload: options.sourcemaps?.filesToDeleteAfterUpload ?? options.sourcemaps?.deleteFilesAfterUpload, diff --git a/packages/bundler-plugin-core/src/plugins/sourcemap-deletion.ts b/packages/bundler-plugin-core/src/plugins/sourcemap-deletion.ts index 6ea38fb2..97d743f2 100644 --- a/packages/bundler-plugin-core/src/plugins/sourcemap-deletion.ts +++ b/packages/bundler-plugin-core/src/plugins/sourcemap-deletion.ts @@ -7,7 +7,7 @@ import fs from "fs"; interface FileDeletionPlugin { handleRecoverableError: (error: unknown) => void; - dependenciesAreFreedPromise: Promise; + waitUntilSourcemapFileDependenciesAreFreed: () => Promise; sentryHub: Hub; sentryClient: NodeClient; filesToDeleteAfterUpload: string | string[] | undefined; @@ -19,52 +19,46 @@ export function fileDeletionPlugin({ sentryHub, sentryClient, filesToDeleteAfterUpload, - dependenciesAreFreedPromise, + waitUntilSourcemapFileDependenciesAreFreed, logger, }: FileDeletionPlugin): UnpluginOptions { - const writeBundle = async () => { - try { - if (filesToDeleteAfterUpload !== undefined) { - const filePathsToDelete = await glob(filesToDeleteAfterUpload, { - absolute: true, - nodir: true, - }); + return { + name: "sentry-file-deletion-plugin", + async writeBundle() { + try { + if (filesToDeleteAfterUpload !== undefined) { + const filePathsToDelete = await glob(filesToDeleteAfterUpload, { + absolute: true, + nodir: true, + }); - logger.debug("Waiting for dependencies on generated files to be freed before deleting..."); + logger.debug( + "Waiting for dependencies on generated files to be freed before deleting..." + ); - await dependenciesAreFreedPromise; + await waitUntilSourcemapFileDependenciesAreFreed(); - filePathsToDelete.forEach((filePathToDelete) => { - logger.debug(`Deleting asset after upload: ${filePathToDelete}`); - }); + filePathsToDelete.forEach((filePathToDelete) => { + logger.debug(`Deleting asset after upload: ${filePathToDelete}`); + }); - await Promise.all( - filePathsToDelete.map((filePathToDelete) => - fs.promises.rm(filePathToDelete, { force: true }).catch((e) => { - // This is allowed to fail - we just don't do anything - logger.debug( - `An error occurred while attempting to delete asset: ${filePathToDelete}`, - e - ); - }) - ) - ); + await Promise.all( + filePathsToDelete.map((filePathToDelete) => + fs.promises.rm(filePathToDelete, { force: true }).catch((e) => { + // This is allowed to fail - we just don't do anything + logger.debug( + `An error occurred while attempting to delete asset: ${filePathToDelete}`, + e + ); + }) + ) + ); + } + } catch (e) { + sentryHub.captureException('Error in "sentry-file-deletion-plugin" buildEnd hook'); + await safeFlushTelemetry(sentryClient); + handleRecoverableError(e); } - } catch (e) { - sentryHub.captureException('Error in "sentry-file-deletion-plugin" buildEnd hook'); - await safeFlushTelemetry(sentryClient); - handleRecoverableError(e); - } - }; - return { - name: "sentry-file-deletion-plugin", - vite: { - writeBundle: { - sequential: true, - order: "post", - handler: writeBundle, - }, }, - writeBundle, }; }