@sentry/wizard 6.9.0 → 6.11.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/CHANGELOG.md +56 -1
- package/dist/ci-ensure-runtime-loaded.sh +82 -0
- package/dist/e2e-tests/tests/angular-17.test.js +72 -82
- package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
- package/dist/e2e-tests/tests/angular-19.test.js +71 -80
- package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
- package/dist/e2e-tests/tests/cloudflare-worker.test.d.ts +1 -0
- package/dist/e2e-tests/tests/cloudflare-worker.test.js +64 -0
- package/dist/e2e-tests/tests/cloudflare-worker.test.js.map +1 -0
- package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js +2 -5
- package/dist/e2e-tests/tests/cloudflare-wrangler-sourcemaps.test.js.map +1 -1
- package/dist/e2e-tests/tests/expo.test.js +36 -61
- package/dist/e2e-tests/tests/expo.test.js.map +1 -1
- package/dist/e2e-tests/tests/flutter.test.js +63 -70
- package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
- package/dist/e2e-tests/tests/help-message.test.js +2 -2
- package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-14.test.js +54 -82
- package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-15.test.js +95 -105
- package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-16.test.d.ts +1 -0
- package/dist/e2e-tests/tests/nextjs-16.test.js +123 -0
- package/dist/e2e-tests/tests/nextjs-16.test.js.map +1 -0
- package/dist/e2e-tests/tests/nuxt-3.test.js +45 -58
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-4.test.js +59 -73
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
- package/dist/e2e-tests/tests/pnpm-workspace.test.js +4 -7
- package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-native.test.js +44 -80
- package/dist/e2e-tests/tests/react-native.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-router.test.js +163 -145
- package/dist/e2e-tests/tests/react-router.test.js.map +1 -1
- package/dist/e2e-tests/tests/remix.test.js +162 -132
- package/dist/e2e-tests/tests/remix.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit-hooks.test.js +48 -36
- package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit-tracing.test.js +3 -6
- package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.d.ts +21 -43
- package/dist/e2e-tests/utils/index.js +108 -183
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/get-e2e-test-matrix.mjs +11 -0
- package/dist/lib/Constants.d.ts +1 -0
- package/dist/lib/Constants.js +5 -0
- package/dist/lib/Constants.js.map +1 -1
- package/dist/src/android/android-wizard.js +2 -4
- package/dist/src/android/android-wizard.js.map +1 -1
- package/dist/src/angular/angular-wizard.js +4 -6
- package/dist/src/angular/angular-wizard.js.map +1 -1
- package/dist/src/angular/sdk-setup.js +1 -1
- package/dist/src/angular/sdk-setup.js.map +1 -1
- package/dist/src/apple/apple-wizard.js +2 -4
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/cloudflare/cloudflare-wizard.d.ts +3 -0
- package/dist/src/cloudflare/cloudflare-wizard.js +99 -0
- package/dist/src/cloudflare/cloudflare-wizard.js.map +1 -0
- package/dist/src/cloudflare/sdk-setup.d.ts +7 -0
- package/dist/src/cloudflare/sdk-setup.js +47 -0
- package/dist/src/cloudflare/sdk-setup.js.map +1 -0
- package/dist/src/cloudflare/templates.d.ts +4 -0
- package/dist/src/cloudflare/templates.js +44 -0
- package/dist/src/cloudflare/templates.js.map +1 -0
- package/dist/src/cloudflare/wrangler/create-wrangler-config.d.ts +4 -0
- package/dist/src/cloudflare/wrangler/create-wrangler-config.js +27 -0
- package/dist/src/cloudflare/wrangler/create-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/ensure-wrangler-config.d.ts +4 -0
- package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js +25 -0
- package/dist/src/cloudflare/wrangler/ensure-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/find-wrangler-config.d.ts +4 -0
- package/dist/src/cloudflare/wrangler/find-wrangler-config.js +23 -0
- package/dist/src/cloudflare/wrangler/find-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.d.ts +6 -0
- package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js +52 -0
- package/dist/src/cloudflare/wrangler/get-entry-point-from-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrangler/update-wrangler-config.d.ts +17 -0
- package/dist/src/cloudflare/wrangler/update-wrangler-config.js +173 -0
- package/dist/src/cloudflare/wrangler/update-wrangler-config.js.map +1 -0
- package/dist/src/cloudflare/wrap-worker.d.ts +32 -0
- package/dist/src/cloudflare/wrap-worker.js +109 -0
- package/dist/src/cloudflare/wrap-worker.js.map +1 -0
- package/dist/src/flutter/flutter-wizard.js +3 -6
- package/dist/src/flutter/flutter-wizard.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +46 -10
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +6 -3
- package/dist/src/nextjs/templates.js +144 -93
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +3 -5
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +2 -4
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-router/codemods/client.entry.js +4 -1
- package/dist/src/react-router/codemods/client.entry.js.map +1 -1
- package/dist/src/react-router/react-router-wizard.js +3 -5
- package/dist/src/react-router/react-router-wizard.js.map +1 -1
- package/dist/src/react-router/sdk-example.js +5 -2
- package/dist/src/react-router/sdk-example.js.map +1 -1
- package/dist/src/react-router/sdk-setup.d.ts +1 -1
- package/dist/src/react-router/sdk-setup.js +3 -4
- package/dist/src/react-router/sdk-setup.js.map +1 -1
- package/dist/src/remix/remix-wizard.js +2 -4
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/run.d.ts +1 -1
- package/dist/src/run.js +5 -0
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/wrangler.js +1 -1
- package/dist/src/sourcemaps/tools/wrangler.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +4 -6
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/telemetry.d.ts +1 -1
- package/dist/src/telemetry.js +52 -31
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/utils/abort-if-sportlight-not-supported.d.ts +5 -0
- package/dist/src/utils/abort-if-sportlight-not-supported.js +40 -0
- package/dist/src/utils/abort-if-sportlight-not-supported.js.map +1 -0
- package/dist/src/utils/ast-utils.d.ts +1 -1
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/clack/index.d.ts +19 -2
- package/dist/src/utils/clack/index.js +174 -12
- package/dist/src/utils/clack/index.js.map +1 -1
- package/dist/src/utils/clack/mcp-config.js +117 -59
- package/dist/src/utils/clack/mcp-config.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/angular/angular-wizard.test.js +2 -4
- package/dist/test/angular/angular-wizard.test.js.map +1 -1
- package/dist/test/apple/cocoapod.test.js +7 -3
- package/dist/test/apple/cocoapod.test.js.map +1 -1
- package/dist/test/apple/code-tools.test.js +8 -2
- package/dist/test/apple/code-tools.test.js.map +1 -1
- package/dist/test/cloudflare/create-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/create-wrangler-config.test.js +48 -0
- package/dist/test/cloudflare/create-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/ensure-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/ensure-wrangler-config.test.js +61 -0
- package/dist/test/cloudflare/ensure-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/find-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/find-wrangler-config.test.js +77 -0
- package/dist/test/cloudflare/find-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js +81 -0
- package/dist/test/cloudflare/get-entry-point-from-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/sdk-setup.test.d.ts +1 -0
- package/dist/test/cloudflare/sdk-setup.test.js +152 -0
- package/dist/test/cloudflare/sdk-setup.test.js.map +1 -0
- package/dist/test/cloudflare/templates.test.d.ts +1 -0
- package/dist/test/cloudflare/templates.test.js +68 -0
- package/dist/test/cloudflare/templates.test.js.map +1 -0
- package/dist/test/cloudflare/update-wrangler-config.test.d.ts +1 -0
- package/dist/test/cloudflare/update-wrangler-config.test.js +216 -0
- package/dist/test/cloudflare/update-wrangler-config.test.js.map +1 -0
- package/dist/test/cloudflare/wrap-worker.test.d.ts +1 -0
- package/dist/test/cloudflare/wrap-worker.test.js +143 -0
- package/dist/test/cloudflare/wrap-worker.test.js.map +1 -0
- package/dist/test/nextjs/templates.test.js +156 -87
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/nextjs/wizard-double-wrap-prevention.test.js +12 -7
- package/dist/test/nextjs/wizard-double-wrap-prevention.test.js.map +1 -1
- package/dist/test/react-router/sdk-setup.test.js +2 -2
- package/dist/test/react-router/sdk-setup.test.js.map +1 -1
- package/dist/test/utils/clack/index.test.js +37 -29
- package/dist/test/utils/clack/index.test.js.map +1 -1
- package/dist/test/utils/clack/mcp-config.test.js +176 -51
- package/dist/test/utils/clack/mcp-config.test.js.map +1 -1
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/react-router/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport * as childProcess from 'child_process';\n\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { gte, minVersion } from 'semver';\n\nimport type { PackageDotJson } from '../utils/package-json';\nimport { getPackageVersion } from '../utils/package-json';\nimport { debug } from '../utils/debug';\nimport { getSentryInstrumentationServerContent } from './templates';\nimport { instrumentRoot } from './codemods/root';\nimport { instrumentServerEntry } from './codemods/server-entry';\nimport { getPackageDotJson } from '../utils/clack';\nimport { instrumentClientEntry } from './codemods/client.entry';\nimport { instrumentViteConfig } from './codemods/vite';\nimport { instrumentReactRouterConfig } from './codemods/react-router-config';\n\nconst REACT_ROUTER_REVEAL_COMMAND = 'npx react-router reveal';\nconst INSTRUMENTATION_FILE = 'instrument.server.mjs';\nconst APP_DIRECTORY = 'app';\nconst ROUTES_DIRECTORY = 'routes';\n\nfunction _formatConfigErrorMessage(\n filename: string,\n errorMessage: string,\n fallbackHint: string,\n): string {\n return (\n `Could not automatically configure ${filename}. ${errorMessage}\\n` +\n `This may happen if your config has an unusual format. ` +\n `${fallbackHint}`\n );\n}\n\nfunction getAppFilePath(\n filename: string,\n isTS: boolean,\n isPage = true,\n): string {\n const ext = isPage ? (isTS ? 'tsx' : 'jsx') : isTS ? 'ts' : 'js';\n return path.join(process.cwd(), APP_DIRECTORY, `${filename}.${ext}`);\n}\n\nexport function getRouteFilePath(filename: string, isTS: boolean): string {\n const ext = isTS ? 'tsx' : 'jsx';\n return path.join(\n process.cwd(),\n APP_DIRECTORY,\n ROUTES_DIRECTORY,\n `${filename}.${ext}`,\n );\n}\n\nexport async function tryRevealAndGetManualInstructions(\n missingFilename: string,\n filePath: string,\n): Promise<boolean> {\n const shouldTryReveal = await clack.confirm({\n message: `Would you like to try running ${chalk.cyan(\n REACT_ROUTER_REVEAL_COMMAND,\n )} to generate entry files?`,\n initialValue: true,\n });\n\n if (shouldTryReveal) {\n try {\n clack.log.info(`Running ${chalk.cyan(REACT_ROUTER_REVEAL_COMMAND)}...`);\n const output = childProcess.execSync(REACT_ROUTER_REVEAL_COMMAND, {\n encoding: 'utf8',\n stdio: 'pipe',\n });\n clack.log.info(output);\n\n if (fs.existsSync(filePath)) {\n clack.log.success(\n `Found ${chalk.cyan(missingFilename)} after running reveal.`,\n );\n return true;\n } else {\n clack.log.warn(\n `${chalk.cyan(\n missingFilename,\n )} still not found after running reveal.`,\n );\n }\n } catch (e) {\n debug('Failed to run React Router reveal command:', e);\n clack.log.warn(\n `Failed to run ${chalk.cyan(\n REACT_ROUTER_REVEAL_COMMAND,\n )}. This command generates entry files for React Router v7.`,\n );\n }\n }\n\n return false; // File still doesn't exist, manual intervention needed\n}\n\nasync function ensureEntryFileExists(\n filename: string,\n filePath: string,\n): Promise<void> {\n if (fs.existsSync(filePath)) {\n return; // File exists, nothing to do\n }\n\n clack.log.warn(`Could not find ${chalk.cyan(filename)}.`);\n\n const fileExists = await tryRevealAndGetManualInstructions(\n filename,\n filePath,\n );\n\n if (!fileExists) {\n throw new Error(\n `Failed to create or find ${filename}. Please create this file manually or ensure your React Router v7 project structure is correct.`,\n );\n }\n}\n\nexport function runReactRouterReveal(force = false): void {\n if (\n force ||\n (!fs.existsSync(path.join(process.cwd(), 'app/entry.client.tsx')) &&\n !fs.existsSync(path.join(process.cwd(), 'app/entry.client.jsx')))\n ) {\n try {\n childProcess.execSync(REACT_ROUTER_REVEAL_COMMAND, {\n encoding: 'utf8',\n stdio: 'pipe',\n });\n } catch (e) {\n debug('Failed to run React Router reveal command:', e);\n throw e;\n }\n }\n}\n\nexport function isReactRouterV7(packageJson: PackageDotJson): boolean {\n const reactRouterVersion = getPackageVersion(\n '@react-router/dev',\n packageJson,\n );\n if (!reactRouterVersion) {\n return false;\n }\n\n const minVer = minVersion(reactRouterVersion);\n\n if (!minVer) {\n return false;\n }\n\n return gte(minVer, '7.0.0');\n}\n\nexport async function initializeSentryOnEntryClient(\n dsn: string,\n enableTracing: boolean,\n enableReplay: boolean,\n enableLogs: boolean,\n isTS: boolean,\n): Promise<void> {\n const clientEntryPath = getAppFilePath('entry.client', isTS);\n const clientEntryFilename = path.basename(clientEntryPath);\n\n await ensureEntryFileExists(clientEntryFilename, clientEntryPath);\n\n await instrumentClientEntry(\n clientEntryPath,\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n clack.log.success(\n `Updated ${chalk.cyan(clientEntryFilename)} with Sentry initialization.`,\n );\n}\n\nexport async function instrumentRootRoute(isTS: boolean): Promise<void> {\n const rootPath = getAppFilePath('root', isTS);\n const rootFilename = path.basename(rootPath);\n\n if (!fs.existsSync(rootPath)) {\n throw new Error(\n `${rootFilename} not found in app directory. Please ensure your React Router v7 app has a root.tsx/jsx file in the app folder.`,\n );\n }\n\n await instrumentRoot(rootFilename);\n clack.log.success(`Updated ${chalk.cyan(rootFilename)} with ErrorBoundary.`);\n}\n\nexport function createServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n logs: boolean;\n profiling: boolean;\n },\n): string {\n const instrumentationPath = path.join(process.cwd(), INSTRUMENTATION_FILE);\n\n const content = getSentryInstrumentationServerContent(\n dsn,\n selectedFeatures.performance,\n selectedFeatures.profiling,\n selectedFeatures.logs,\n );\n\n fs.writeFileSync(instrumentationPath, content);\n clack.log.success(`Created ${chalk.cyan(INSTRUMENTATION_FILE)}.`);\n return instrumentationPath;\n}\n\nexport async function updatePackageJsonScripts(): Promise<void> {\n const packageJson = await getPackageDotJson();\n\n if (!packageJson?.scripts) {\n throw new Error(\n 'Could not find a `scripts` section in your package.json file. Please add scripts manually or ensure your package.json is valid.',\n );\n }\n\n if (!packageJson.scripts.start) {\n throw new Error(\n 'Could not find a `start` script in your package.json. Please add: \"start\": \"react-router-serve ./build/server/index.js\" and re-run the wizard.',\n );\n }\n\n function mergeNodeOptions(\n scriptCommand: string,\n instrumentPath = './instrument.server.mjs',\n ): string {\n if (scriptCommand.includes(instrumentPath)) {\n return scriptCommand;\n }\n\n const quotedMatch = scriptCommand.match(/NODE_OPTIONS=(['\"])([^'\"]*)\\1/);\n if (quotedMatch) {\n const existingOptions = quotedMatch[2];\n const mergedOptions =\n `${existingOptions} --import ${instrumentPath}`.trim();\n return scriptCommand.replace(\n /NODE_OPTIONS=(['\"])([^'\"]*)\\1/,\n `NODE_OPTIONS='${mergedOptions}'`,\n );\n }\n\n const unquotedMatch = scriptCommand.match(\n /NODE_OPTIONS=([^\\s]+(?:\\s+[^\\s]+)*?)(\\s+(?:react-router-serve|react-router|node|npx|tsx))/,\n );\n if (unquotedMatch) {\n const existingOptions = unquotedMatch[1];\n const commandPart = unquotedMatch[2];\n const mergedOptions =\n `${existingOptions} --import ${instrumentPath}`.trim();\n return scriptCommand.replace(\n /NODE_OPTIONS=([^\\s]+(?:\\s+[^\\s]+)*?)(\\s+(?:react-router-serve|react-router|node|npx|tsx))/,\n `NODE_OPTIONS='${mergedOptions}'${commandPart}`,\n );\n }\n\n return `NODE_OPTIONS='--import ${instrumentPath}' ${scriptCommand}`;\n }\n\n if (packageJson.scripts.dev) {\n packageJson.scripts.dev = mergeNodeOptions(packageJson.scripts.dev);\n }\n\n const startScript = packageJson.scripts.start;\n if (\n !startScript.includes(INSTRUMENTATION_FILE) &&\n !startScript.includes('NODE_OPTIONS')\n ) {\n packageJson.scripts.start = `NODE_OPTIONS='--import ./${INSTRUMENTATION_FILE}' react-router-serve ./build/server/index.js`;\n } else {\n packageJson.scripts.start = mergeNodeOptions(startScript);\n }\n\n await fs.promises.writeFile(\n 'package.json',\n JSON.stringify(packageJson, null, 2),\n );\n}\n\nexport async function instrumentSentryOnEntryServer(\n isTS: boolean,\n): Promise<void> {\n const serverEntryPath = getAppFilePath('entry.server', isTS);\n const serverEntryFilename = path.basename(serverEntryPath);\n\n await ensureEntryFileExists(serverEntryFilename, serverEntryPath);\n\n await instrumentServerEntry(serverEntryPath);\n\n clack.log.success(\n `Updated ${chalk.cyan(serverEntryFilename)} with Sentry error handling.`,\n );\n}\n\nexport async function configureReactRouterVitePlugin(\n orgSlug: string,\n projectSlug: string,\n): Promise<void> {\n const configPath = fs.existsSync(path.join(process.cwd(), 'vite.config.ts'))\n ? path.join(process.cwd(), 'vite.config.ts')\n : path.join(process.cwd(), 'vite.config.js');\n const filename = chalk.cyan(path.basename(configPath));\n\n try {\n const { wasConverted } = await instrumentViteConfig(orgSlug, projectSlug);\n\n clack.log.success(`Updated ${filename} with sentryReactRouter plugin.`);\n\n if (wasConverted) {\n clack.log.info(\n `Converted your Vite config to function form ${chalk.dim(\n '(defineConfig(config => ({ ... })))',\n )} to support the Sentry React Router plugin.`,\n );\n }\n } catch (e) {\n debug('Failed to modify vite config:', e);\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new Error(\n _formatConfigErrorMessage(\n filename,\n errorMessage,\n 'You may need to add the plugin manually.',\n ),\n );\n }\n}\n\nexport async function configureReactRouterConfig(isTS: boolean): Promise<void> {\n const configFilename = `react-router.config.${isTS ? 'ts' : 'js'}`;\n const configPath = path.join(process.cwd(), configFilename);\n const filename = chalk.cyan(configFilename);\n\n try {\n const fileExistedBefore = fs.existsSync(configPath);\n\n const { ssrWasChanged } = await instrumentReactRouterConfig(isTS);\n\n if (fileExistedBefore) {\n clack.log.success(`Updated ${filename} with Sentry buildEnd hook.`);\n } else {\n clack.log.success(`Created ${filename} with Sentry buildEnd hook.`);\n }\n\n if (ssrWasChanged) {\n clack.log.warn(\n `${chalk.yellow(\n 'Note:',\n )} SSR has been enabled in your React Router config (${chalk.cyan(\n 'ssr: true',\n )}). This is required for Sentry sourcemap uploads to work correctly.`,\n );\n }\n } catch (e) {\n debug('Failed to modify react-router.config:', e);\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new Error(\n _formatConfigErrorMessage(\n filename,\n errorMessage,\n 'You may need to add the buildEnd hook manually.',\n ),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk-setup.js","sourceRoot":"","sources":["../../../src/react-router/sdk-setup.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport * as childProcess from 'child_process';\n\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport { gte, minVersion } from 'semver';\n\nimport type { PackageDotJson } from '../utils/package-json';\nimport { getPackageVersion } from '../utils/package-json';\nimport { debug } from '../utils/debug';\nimport { getSentryInstrumentationServerContent } from './templates';\nimport { instrumentRoot } from './codemods/root';\nimport { instrumentServerEntry } from './codemods/server-entry';\nimport { getPackageDotJson } from '../utils/clack';\nimport { instrumentClientEntry } from './codemods/client.entry';\nimport { instrumentViteConfig } from './codemods/vite';\nimport { instrumentReactRouterConfig } from './codemods/react-router-config';\n\nconst REACT_ROUTER_REVEAL_COMMAND = 'npx react-router reveal';\nconst INSTRUMENTATION_FILE = 'instrument.server.mjs';\nconst APP_DIRECTORY = 'app';\nconst ROUTES_DIRECTORY = 'routes';\n\nfunction _formatConfigErrorMessage(\n filename: string,\n errorMessage: string,\n fallbackHint: string,\n): string {\n return (\n `Could not automatically configure ${filename}. ${errorMessage}\\n` +\n `This may happen if your config has an unusual format. ` +\n `${fallbackHint}`\n );\n}\n\nfunction getAppFilePath(\n filename: string,\n isTS: boolean,\n isPage = true,\n): string {\n const ext = isPage ? (isTS ? 'tsx' : 'jsx') : isTS ? 'ts' : 'js';\n return path.join(process.cwd(), APP_DIRECTORY, `${filename}.${ext}`);\n}\n\nexport function getRouteFilePath(filename: string, isTS: boolean): string {\n const ext = isTS ? 'tsx' : 'jsx';\n return path.join(\n process.cwd(),\n APP_DIRECTORY,\n ROUTES_DIRECTORY,\n `${filename}.${ext}`,\n );\n}\n\nexport async function tryRevealAndGetManualInstructions(\n missingFilename: string,\n filePath: string,\n): Promise<boolean> {\n const shouldTryReveal = await clack.confirm({\n message: `Would you like to try running ${chalk.cyan(\n REACT_ROUTER_REVEAL_COMMAND,\n )} to generate entry files?`,\n initialValue: true,\n });\n\n if (shouldTryReveal) {\n try {\n clack.log.info(`Running ${chalk.cyan(REACT_ROUTER_REVEAL_COMMAND)}...`);\n const output = childProcess.execSync(REACT_ROUTER_REVEAL_COMMAND, {\n encoding: 'utf8',\n stdio: 'pipe',\n });\n clack.log.info(output);\n\n if (fs.existsSync(filePath)) {\n clack.log.success(\n `Found ${chalk.cyan(missingFilename)} after running reveal.`,\n );\n return true;\n } else {\n clack.log.warn(\n `${chalk.cyan(\n missingFilename,\n )} still not found after running reveal.`,\n );\n }\n } catch (e) {\n debug('Failed to run React Router reveal command:', e);\n clack.log.warn(\n `Failed to run ${chalk.cyan(\n REACT_ROUTER_REVEAL_COMMAND,\n )}. This command generates entry files for React Router v7.`,\n );\n }\n }\n\n return false; // File still doesn't exist, manual intervention needed\n}\n\nasync function ensureEntryFileExists(\n filename: string,\n filePath: string,\n): Promise<void> {\n if (fs.existsSync(filePath)) {\n return; // File exists, nothing to do\n }\n\n clack.log.warn(`Could not find ${chalk.cyan(filename)}.`);\n\n const fileExists = await tryRevealAndGetManualInstructions(\n filename,\n filePath,\n );\n\n if (!fileExists) {\n throw new Error(\n `Failed to create or find ${filename}. Please create this file manually or ensure your React Router v7 project structure is correct.`,\n );\n }\n}\n\nexport function runReactRouterReveal(): void {\n if (\n !fs.existsSync(path.join(process.cwd(), 'app', 'entry.client.tsx')) &&\n !fs.existsSync(path.join(process.cwd(), 'app', 'entry.client.jsx'))\n ) {\n try {\n childProcess.execSync(REACT_ROUTER_REVEAL_COMMAND, {\n encoding: 'utf8',\n stdio: 'pipe',\n });\n } catch (e) {\n debug('Failed to run React Router reveal command:', e);\n throw e;\n }\n }\n}\n\nexport function isReactRouterV7(packageJson: PackageDotJson): boolean {\n const reactRouterVersion = getPackageVersion(\n '@react-router/dev',\n packageJson,\n );\n if (!reactRouterVersion) {\n return false;\n }\n\n const minVer = minVersion(reactRouterVersion);\n\n if (!minVer) {\n return false;\n }\n\n return gte(minVer, '7.0.0');\n}\n\nexport async function initializeSentryOnEntryClient(\n dsn: string,\n enableTracing: boolean,\n enableReplay: boolean,\n enableLogs: boolean,\n isTS: boolean,\n): Promise<void> {\n const clientEntryPath = getAppFilePath('entry.client', isTS);\n const clientEntryFilename = path.basename(clientEntryPath);\n\n await ensureEntryFileExists(clientEntryFilename, clientEntryPath);\n\n await instrumentClientEntry(\n clientEntryPath,\n dsn,\n enableTracing,\n enableReplay,\n enableLogs,\n );\n\n clack.log.success(\n `Updated ${chalk.cyan(clientEntryFilename)} with Sentry initialization.`,\n );\n}\n\nexport async function instrumentRootRoute(isTS: boolean): Promise<void> {\n const rootPath = getAppFilePath('root', isTS);\n const rootFilename = path.basename(rootPath);\n\n if (!fs.existsSync(rootPath)) {\n throw new Error(\n `${rootFilename} not found in app directory. Please ensure your React Router v7 app has a root.tsx/jsx file in the app folder.`,\n );\n }\n\n await instrumentRoot(rootFilename);\n clack.log.success(`Updated ${chalk.cyan(rootFilename)} with ErrorBoundary.`);\n}\n\nexport function createServerInstrumentationFile(\n dsn: string,\n selectedFeatures: {\n performance: boolean;\n replay: boolean;\n logs: boolean;\n profiling: boolean;\n },\n): string {\n const instrumentationPath = path.join(process.cwd(), INSTRUMENTATION_FILE);\n\n const content = getSentryInstrumentationServerContent(\n dsn,\n selectedFeatures.performance,\n selectedFeatures.profiling,\n selectedFeatures.logs,\n );\n\n fs.writeFileSync(instrumentationPath, content);\n clack.log.success(`Created ${chalk.cyan(INSTRUMENTATION_FILE)}.`);\n return instrumentationPath;\n}\n\nexport async function updatePackageJsonScripts(): Promise<void> {\n const packageJson = await getPackageDotJson();\n\n if (!packageJson?.scripts) {\n throw new Error(\n 'Could not find a `scripts` section in your package.json file. Please add scripts manually or ensure your package.json is valid.',\n );\n }\n\n if (!packageJson.scripts.start) {\n throw new Error(\n 'Could not find a `start` script in your package.json. Please add: \"start\": \"react-router-serve ./build/server/index.js\" and re-run the wizard.',\n );\n }\n\n function mergeNodeOptions(\n scriptCommand: string,\n instrumentPath = './instrument.server.mjs',\n ): string {\n if (scriptCommand.includes(instrumentPath)) {\n return scriptCommand;\n }\n\n const quotedMatch = scriptCommand.match(/NODE_OPTIONS=(['\"])([^'\"]*)\\1/);\n if (quotedMatch) {\n const existingOptions = quotedMatch[2];\n const mergedOptions =\n `${existingOptions} --import ${instrumentPath}`.trim();\n return scriptCommand.replace(\n /NODE_OPTIONS=(['\"])([^'\"]*)\\1/,\n `NODE_OPTIONS='${mergedOptions}'`,\n );\n }\n\n const unquotedMatch = scriptCommand.match(\n /NODE_OPTIONS=([^\\s]+(?:\\s+[^\\s]+)*?)(\\s+(?:react-router-serve|react-router|node|npx|tsx))/,\n );\n if (unquotedMatch) {\n const existingOptions = unquotedMatch[1];\n const commandPart = unquotedMatch[2];\n const mergedOptions =\n `${existingOptions} --import ${instrumentPath}`.trim();\n return scriptCommand.replace(\n /NODE_OPTIONS=([^\\s]+(?:\\s+[^\\s]+)*?)(\\s+(?:react-router-serve|react-router|node|npx|tsx))/,\n `NODE_OPTIONS='${mergedOptions}'${commandPart}`,\n );\n }\n\n return `NODE_OPTIONS='--import ${instrumentPath}' ${scriptCommand}`;\n }\n\n if (packageJson.scripts.dev) {\n packageJson.scripts.dev = mergeNodeOptions(packageJson.scripts.dev);\n }\n\n const startScript = packageJson.scripts.start;\n if (\n !startScript.includes(INSTRUMENTATION_FILE) &&\n !startScript.includes('NODE_OPTIONS')\n ) {\n packageJson.scripts.start = `NODE_OPTIONS='--import ./${INSTRUMENTATION_FILE}' react-router-serve ./build/server/index.js`;\n } else {\n packageJson.scripts.start = mergeNodeOptions(startScript);\n }\n\n await fs.promises.writeFile(\n 'package.json',\n JSON.stringify(packageJson, null, 2),\n );\n}\n\nexport async function instrumentSentryOnEntryServer(\n isTS: boolean,\n): Promise<void> {\n const serverEntryPath = getAppFilePath('entry.server', isTS);\n const serverEntryFilename = path.basename(serverEntryPath);\n\n await ensureEntryFileExists(serverEntryFilename, serverEntryPath);\n\n await instrumentServerEntry(serverEntryPath);\n\n clack.log.success(\n `Updated ${chalk.cyan(serverEntryFilename)} with Sentry error handling.`,\n );\n}\n\nexport async function configureReactRouterVitePlugin(\n orgSlug: string,\n projectSlug: string,\n): Promise<void> {\n const configPath = fs.existsSync(path.join(process.cwd(), 'vite.config.ts'))\n ? path.join(process.cwd(), 'vite.config.ts')\n : path.join(process.cwd(), 'vite.config.js');\n const filename = chalk.cyan(path.basename(configPath));\n\n try {\n const { wasConverted } = await instrumentViteConfig(orgSlug, projectSlug);\n\n clack.log.success(`Updated ${filename} with sentryReactRouter plugin.`);\n\n if (wasConverted) {\n clack.log.info(\n `Converted your Vite config to function form ${chalk.dim(\n '(defineConfig(config => ({ ... })))',\n )} to support the Sentry React Router plugin.`,\n );\n }\n } catch (e) {\n debug('Failed to modify vite config:', e);\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new Error(\n _formatConfigErrorMessage(\n filename,\n errorMessage,\n 'You may need to add the plugin manually.',\n ),\n );\n }\n}\n\nexport async function configureReactRouterConfig(isTS: boolean): Promise<void> {\n const configFilename = `react-router.config.${isTS ? 'ts' : 'js'}`;\n const configPath = path.join(process.cwd(), configFilename);\n const filename = chalk.cyan(configFilename);\n\n try {\n const fileExistedBefore = fs.existsSync(configPath);\n\n const { ssrWasChanged } = await instrumentReactRouterConfig(isTS);\n\n if (fileExistedBefore) {\n clack.log.success(`Updated ${filename} with Sentry buildEnd hook.`);\n } else {\n clack.log.success(`Created ${filename} with Sentry buildEnd hook.`);\n }\n\n if (ssrWasChanged) {\n clack.log.warn(\n `${chalk.yellow(\n 'Note:',\n )} SSR has been enabled in your React Router config (${chalk.cyan(\n 'ssr: true',\n )}). This is required for Sentry sourcemap uploads to work correctly.`,\n );\n }\n } catch (e) {\n debug('Failed to modify react-router.config:', e);\n const errorMessage = e instanceof Error ? e.message : String(e);\n throw new Error(\n _formatConfigErrorMessage(\n filename,\n errorMessage,\n 'You may need to add the buildEnd hook manually.',\n ),\n );\n }\n}\n"]}
|
|
@@ -18,6 +18,7 @@ const mcp_config_1 = require("../utils/clack/mcp-config");
|
|
|
18
18
|
const sdk_example_1 = require("./sdk-example");
|
|
19
19
|
const sdk_setup_1 = require("./sdk-setup");
|
|
20
20
|
const utils_1 = require("./utils");
|
|
21
|
+
const abort_if_sportlight_not_supported_1 = require("../utils/abort-if-sportlight-not-supported");
|
|
21
22
|
async function runRemixWizard(options) {
|
|
22
23
|
return (0, telemetry_1.withTelemetry)({
|
|
23
24
|
enabled: options.telemetryEnabled,
|
|
@@ -46,10 +47,7 @@ async function runRemixWizardWithTelemetry(options) {
|
|
|
46
47
|
await (0, clack_1.ensurePackageIsInstalled)(packageJson, '@remix-run/dev', 'Remix');
|
|
47
48
|
const projectData = await (0, clack_1.getOrAskForProjectData)(options, 'javascript-remix');
|
|
48
49
|
if (projectData.spotlight) {
|
|
49
|
-
|
|
50
|
-
prompts_1.default.log.info('Spotlight is currently only available for Next.js.');
|
|
51
|
-
await (0, clack_1.abort)('Exiting wizard', 0);
|
|
52
|
-
return;
|
|
50
|
+
return (0, abort_if_sportlight_not_supported_1.abortIfSpotlightNotSupported)('Remix');
|
|
53
51
|
}
|
|
54
52
|
const { selectedProject, authToken, sentryUrl, selfHosted } = projectData;
|
|
55
53
|
await (0, clack_1.installPackage)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remix-wizard.js","sourceRoot":"","sources":["../../../src/remix/remix-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\n\nimport { DEFAULT_URL } from '../../lib/Constants';\nimport { configureVitePlugin } from '../sourcemaps/tools/vite';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { findFile } from '../utils/ast-utils';\nimport {\n abort,\n addSentryCliConfig,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n featureSelectionPrompt,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n rcCliSetupConfig,\n runPrettierIfInstalled,\n} from '../utils/clack';\nimport { debug } from '../utils/debug';\nimport { hasPackageInstalled } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport { offerProjectScopedMcpConfig } from '../utils/clack/mcp-config';\nimport { createExamplePage } from './sdk-example';\nimport {\n createServerInstrumentationFile,\n initializeSentryOnEntryClient,\n insertServerInstrumentationFile,\n instrumentRootRoute,\n instrumentSentryOnEntryServer,\n isRemixV2,\n runRemixReveal,\n updateBuildScript,\n updateStartScript,\n} from './sdk-setup';\nimport { isHydrogenApp } from './utils';\n\nexport async function runRemixWizard(options: WizardOptions): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'remix',\n wizardOptions: options,\n },\n () => runRemixWizardWithTelemetry(options),\n );\n}\n\nasync function runRemixWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n const { promoCode, telemetryEnabled, forceInstall } = options;\n\n printWelcome({\n wizardName: 'Sentry Remix Wizard',\n promoCode,\n telemetryEnabled,\n });\n\n const packageJson = await getPackageDotJson();\n\n if (!isRemixV2(packageJson)) {\n clack.log.error(\n `Sentry only supports Remix v2 and above. Please upgrade your Remix version to use Sentry.`,\n );\n return;\n }\n\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\n\n // We expect `@remix-run/dev` to be installed for every Remix project\n await ensurePackageIsInstalled(packageJson, '@remix-run/dev', 'Remix');\n\n const projectData = await getOrAskForProjectData(options, 'javascript-remix');\n\n if (projectData.spotlight) {\n clack.log.warn('Spotlight mode is not yet supported for Remix.');\n clack.log.info('Spotlight is currently only available for Next.js.');\n await abort('Exiting wizard', 0);\n return;\n }\n\n const { selectedProject, authToken, sentryUrl, selfHosted } = projectData;\n\n await installPackage({\n packageName: '@sentry/remix@^10',\n packageNameDisplayLabel: '@sentry/remix',\n alreadyInstalled: hasPackageInstalled('@sentry/remix', packageJson),\n forceInstall,\n });\n\n const dsn = selectedProject.keys[0].dsn.public;\n\n const isTS = isUsingTypeScript();\n const viteConfig = findFile('vite.config');\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n {\n id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n {\n id: 'logs',\n prompt: `Do you want to enable ${chalk.bold(\n 'Logs',\n )} to send your application logs to Sentry?`,\n enabledHint: 'recommended',\n },\n ] as const);\n\n if (viteConfig) {\n await traceStep(\n 'Update vite configuration for sourcemap uploads',\n async () => {\n try {\n await configureVitePlugin({\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n url: sentryUrl,\n selfHosted,\n authToken,\n });\n } catch (e) {\n clack.log\n .warn(`Could not update vite configuration to generate and upload sourcemaps.\n Please update your vite configuration manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n },\n );\n } else {\n await traceStep('Update build script for sourcemap uploads', async () => {\n try {\n await updateBuildScript({\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n url: sentryUrl === DEFAULT_URL ? undefined : sentryUrl,\n isHydrogen: isHydrogenApp(packageJson),\n });\n\n await addSentryCliConfig({ authToken }, rcCliSetupConfig);\n } catch (e) {\n clack.log\n .warn(`Could not update build script to generate and upload sourcemaps.\n Please update your build script manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n });\n }\n\n await traceStep('Instrument root route', async () => {\n try {\n await instrumentRootRoute(isTS);\n } catch (e) {\n clack.log.warn(`Could not instrument root route.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n traceStep('Reveal missing entry files', () => {\n try {\n runRemixReveal(isTS);\n } catch (e) {\n clack.log.warn(`Could not run 'npx remix reveal'.\n Please create your entry files manually`);\n debug(e);\n }\n });\n\n await traceStep('Initialize Sentry on client entry', async () => {\n try {\n await initializeSentryOnEntryClient(dsn, isTS, selectedFeatures);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on client entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n let instrumentationFile = '';\n\n await traceStep('Create server instrumentation file', async () => {\n try {\n instrumentationFile = await createServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n });\n\n let serverFileInstrumented = false;\n\n await traceStep(\n 'Create server instrumentation file and import it',\n async () => {\n try {\n serverFileInstrumented = await insertServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n },\n );\n\n if (!serverFileInstrumented && instrumentationFile) {\n await traceStep(\n 'Update `start` script to import instrumentation file.',\n async () => {\n try {\n await updateStartScript(instrumentationFile);\n } catch (e) {\n clack.log\n .warn(`Could not automatically add Sentry initialization to server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n },\n );\n }\n\n await traceStep('Instrument server `handleError`', async () => {\n try {\n await instrumentSentryOnEntryServer(isTS);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage();\n\n if (shouldCreateExamplePage) {\n await traceStep('Create example page', async () => {\n await createExamplePage({\n isTS,\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n });\n });\n }\n\n await runPrettierIfInstalled({ cwd: undefined });\n\n // Offer optional project-scoped MCP config for Sentry with org and project scope\n await offerProjectScopedMcpConfig(\n selectedProject.organization.slug,\n selectedProject.slug,\n );\n\n clack.outro(`\n${chalk.green(\n 'Sentry has been successfully configured for your Remix project.',\n)}\n\n${chalk.cyan('You can now deploy your project to see Sentry in action.')}\n\n${chalk.cyan(\n `To learn more about how to use Sentry with Remix, visit our documentation:\nhttps://docs.sentry.io/platforms/javascript/guides/remix/`,\n)}`);\n}\n\n/**\n * Offers to add a project-scoped MCP server configuration for the Sentry MCP.\n * Supports Cursor, VS Code, and Claude Code.\n */\n"]}
|
|
1
|
+
{"version":3,"file":"remix-wizard.js","sourceRoot":"","sources":["../../../src/remix/remix-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\n\nimport { DEFAULT_URL } from '../../lib/Constants';\nimport { configureVitePlugin } from '../sourcemaps/tools/vite';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport { findFile } from '../utils/ast-utils';\nimport {\n addSentryCliConfig,\n askShouldCreateExamplePage,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n featureSelectionPrompt,\n getOrAskForProjectData,\n getPackageDotJson,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n rcCliSetupConfig,\n runPrettierIfInstalled,\n} from '../utils/clack';\nimport { debug } from '../utils/debug';\nimport { hasPackageInstalled } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport { offerProjectScopedMcpConfig } from '../utils/clack/mcp-config';\nimport { createExamplePage } from './sdk-example';\nimport {\n createServerInstrumentationFile,\n initializeSentryOnEntryClient,\n insertServerInstrumentationFile,\n instrumentRootRoute,\n instrumentSentryOnEntryServer,\n isRemixV2,\n runRemixReveal,\n updateBuildScript,\n updateStartScript,\n} from './sdk-setup';\nimport { isHydrogenApp } from './utils';\nimport { abortIfSpotlightNotSupported } from '../utils/abort-if-sportlight-not-supported';\n\nexport async function runRemixWizard(options: WizardOptions): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'remix',\n wizardOptions: options,\n },\n () => runRemixWizardWithTelemetry(options),\n );\n}\n\nasync function runRemixWizardWithTelemetry(\n options: WizardOptions,\n): Promise<void> {\n const { promoCode, telemetryEnabled, forceInstall } = options;\n\n printWelcome({\n wizardName: 'Sentry Remix Wizard',\n promoCode,\n telemetryEnabled,\n });\n\n const packageJson = await getPackageDotJson();\n\n if (!isRemixV2(packageJson)) {\n clack.log.error(\n `Sentry only supports Remix v2 and above. Please upgrade your Remix version to use Sentry.`,\n );\n return;\n }\n\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: undefined,\n });\n\n // We expect `@remix-run/dev` to be installed for every Remix project\n await ensurePackageIsInstalled(packageJson, '@remix-run/dev', 'Remix');\n\n const projectData = await getOrAskForProjectData(options, 'javascript-remix');\n\n if (projectData.spotlight) {\n return abortIfSpotlightNotSupported('Remix');\n }\n\n const { selectedProject, authToken, sentryUrl, selfHosted } = projectData;\n\n await installPackage({\n packageName: '@sentry/remix@^10',\n packageNameDisplayLabel: '@sentry/remix',\n alreadyInstalled: hasPackageInstalled('@sentry/remix', packageJson),\n forceInstall,\n });\n\n const dsn = selectedProject.keys[0].dsn.public;\n\n const isTS = isUsingTypeScript();\n const viteConfig = findFile('vite.config');\n const selectedFeatures = await featureSelectionPrompt([\n {\n id: 'performance',\n prompt: `Do you want to enable ${chalk.bold(\n 'Tracing',\n )} to track the performance of your application?`,\n enabledHint: 'recommended',\n },\n {\n id: 'replay',\n prompt: `Do you want to enable ${chalk.bold(\n 'Session Replay',\n )} to get a video-like reproduction of errors during a user session?`,\n enabledHint: 'recommended, but increases bundle size',\n },\n {\n id: 'logs',\n prompt: `Do you want to enable ${chalk.bold(\n 'Logs',\n )} to send your application logs to Sentry?`,\n enabledHint: 'recommended',\n },\n ] as const);\n\n if (viteConfig) {\n await traceStep(\n 'Update vite configuration for sourcemap uploads',\n async () => {\n try {\n await configureVitePlugin({\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n url: sentryUrl,\n selfHosted,\n authToken,\n });\n } catch (e) {\n clack.log\n .warn(`Could not update vite configuration to generate and upload sourcemaps.\n Please update your vite configuration manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n },\n );\n } else {\n await traceStep('Update build script for sourcemap uploads', async () => {\n try {\n await updateBuildScript({\n org: selectedProject.organization.slug,\n project: selectedProject.slug,\n url: sentryUrl === DEFAULT_URL ? undefined : sentryUrl,\n isHydrogen: isHydrogenApp(packageJson),\n });\n\n await addSentryCliConfig({ authToken }, rcCliSetupConfig);\n } catch (e) {\n clack.log\n .warn(`Could not update build script to generate and upload sourcemaps.\n Please update your build script manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/sourcemaps/`);\n debug(e);\n }\n });\n }\n\n await traceStep('Instrument root route', async () => {\n try {\n await instrumentRootRoute(isTS);\n } catch (e) {\n clack.log.warn(`Could not instrument root route.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n traceStep('Reveal missing entry files', () => {\n try {\n runRemixReveal(isTS);\n } catch (e) {\n clack.log.warn(`Could not run 'npx remix reveal'.\n Please create your entry files manually`);\n debug(e);\n }\n });\n\n await traceStep('Initialize Sentry on client entry', async () => {\n try {\n await initializeSentryOnEntryClient(dsn, isTS, selectedFeatures);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on client entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n let instrumentationFile = '';\n\n await traceStep('Create server instrumentation file', async () => {\n try {\n instrumentationFile = await createServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n });\n\n let serverFileInstrumented = false;\n\n await traceStep(\n 'Create server instrumentation file and import it',\n async () => {\n try {\n serverFileInstrumented = await insertServerInstrumentationFile(\n dsn,\n selectedFeatures,\n );\n } catch (e) {\n clack.log.warn(\n 'Could not create a server instrumentation file. Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/',\n );\n debug(e);\n }\n },\n );\n\n if (!serverFileInstrumented && instrumentationFile) {\n await traceStep(\n 'Update `start` script to import instrumentation file.',\n async () => {\n try {\n await updateStartScript(instrumentationFile);\n } catch (e) {\n clack.log\n .warn(`Could not automatically add Sentry initialization to server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n },\n );\n }\n\n await traceStep('Instrument server `handleError`', async () => {\n try {\n await instrumentSentryOnEntryServer(isTS);\n } catch (e) {\n clack.log.warn(`Could not initialize Sentry on server entry.\n Please do it manually using instructions from https://docs.sentry.io/platforms/javascript/guides/remix/manual-setup/`);\n debug(e);\n }\n });\n\n const shouldCreateExamplePage = await askShouldCreateExamplePage();\n\n if (shouldCreateExamplePage) {\n await traceStep('Create example page', async () => {\n await createExamplePage({\n isTS,\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n });\n });\n }\n\n await runPrettierIfInstalled({ cwd: undefined });\n\n // Offer optional project-scoped MCP config for Sentry with org and project scope\n await offerProjectScopedMcpConfig(\n selectedProject.organization.slug,\n selectedProject.slug,\n );\n\n clack.outro(`\n${chalk.green(\n 'Sentry has been successfully configured for your Remix project.',\n)}\n\n${chalk.cyan('You can now deploy your project to see Sentry in action.')}\n\n${chalk.cyan(\n `To learn more about how to use Sentry with Remix, visit our documentation:\nhttps://docs.sentry.io/platforms/javascript/guides/remix/`,\n)}`);\n}\n\n/**\n * Offers to add a project-scoped MCP server configuration for the Sentry MCP.\n * Supports Cursor, VS Code, and Claude Code.\n */\n"]}
|
package/dist/src/run.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Platform } from '../lib/Constants';
|
|
2
|
-
type WizardIntegration = 'angular' | 'reactNative' | 'flutter' | 'ios' | 'android' | 'cordova' | 'electron' | 'nextjs' | 'nuxt' | 'remix' | 'reactRouter' | 'sveltekit' | 'sourcemaps';
|
|
2
|
+
type WizardIntegration = 'angular' | 'reactNative' | 'flutter' | 'ios' | 'android' | 'cordova' | 'electron' | 'nextjs' | 'nuxt' | 'remix' | 'reactRouter' | 'sveltekit' | 'cloudflare' | 'sourcemaps';
|
|
3
3
|
type Args = {
|
|
4
4
|
integration?: WizardIntegration;
|
|
5
5
|
uninstall: boolean;
|
package/dist/src/run.js
CHANGED
|
@@ -41,6 +41,7 @@ const remix_wizard_1 = require("./remix/remix-wizard");
|
|
|
41
41
|
const sourcemaps_wizard_1 = require("./sourcemaps/sourcemaps-wizard");
|
|
42
42
|
const sveltekit_wizard_1 = require("./sveltekit/sveltekit-wizard");
|
|
43
43
|
const react_router_wizard_1 = require("./react-router/react-router-wizard");
|
|
44
|
+
const cloudflare_wizard_1 = require("./cloudflare/cloudflare-wizard");
|
|
44
45
|
const debug_1 = require("./utils/debug");
|
|
45
46
|
const version_1 = require("./version");
|
|
46
47
|
function preSelectedProjectArgsToObject(args) {
|
|
@@ -95,6 +96,7 @@ async function run(argv) {
|
|
|
95
96
|
{ value: 'remix', label: 'Remix' },
|
|
96
97
|
{ value: 'reactRouter', label: 'React Router' },
|
|
97
98
|
{ value: 'sveltekit', label: 'SvelteKit' },
|
|
99
|
+
{ value: 'cloudflare', label: 'Cloudflare' },
|
|
98
100
|
{ value: 'sourcemaps', label: 'Configure Source Maps Upload' },
|
|
99
101
|
],
|
|
100
102
|
}));
|
|
@@ -151,6 +153,9 @@ async function run(argv) {
|
|
|
151
153
|
case 'sveltekit':
|
|
152
154
|
await (0, sveltekit_wizard_1.runSvelteKitWizard)(wizardOptions);
|
|
153
155
|
break;
|
|
156
|
+
case 'cloudflare':
|
|
157
|
+
await (0, cloudflare_wizard_1.runCloudflareWizard)(wizardOptions);
|
|
158
|
+
break;
|
|
154
159
|
case 'sourcemaps':
|
|
155
160
|
await (0, sourcemaps_wizard_1.runSourcemapsWizard)(wizardOptions);
|
|
156
161
|
break;
|
package/dist/src/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\nimport { abortIfCancelled } from './utils/clack';\n\nimport { Integration, type Platform } from '../lib/Constants';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport { run as legacyRun } from '../lib/Setup';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAngularWizard } from './angular/angular-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runFlutterWizard } from './flutter/flutter-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { runReactRouterWizard } from './react-router/react-router-wizard';\nimport { enableDebugLogs } from './utils/debug';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { WIZARD_VERSION } from './version';\n\ntype WizardIntegration =\n | 'angular'\n | 'reactNative'\n | 'flutter'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'reactRouter'\n | 'sveltekit'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean; // used in Cordova\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n spotlight?: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n forceInstall?: boolean;\n comingFrom?: string;\n ignoreGitChanges?: boolean;\n xcodeProjectDir?: string;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n // Enable debug logs if the user has passed the --debug flag\n if (finalArgs.debug) {\n enableDebugLogs();\n }\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${WIZARD_VERSION}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'flutter', label: 'Flutter' },\n { value: 'ios', label: 'iOS' },\n { value: 'angular', label: 'Angular' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'reactRouter', label: 'React Router' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n forceInstall: finalArgs.forceInstall,\n comingFrom: finalArgs.comingFrom,\n ignoreGitChanges: finalArgs.ignoreGitChanges,\n spotlight: finalArgs.spotlight,\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard(wizardOptions);\n break;\n\n case 'flutter':\n await runFlutterWizard(wizardOptions);\n break;\n\n case 'ios':\n await runAppleWizard({\n ...wizardOptions,\n projectDir: finalArgs.xcodeProjectDir,\n });\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'angular':\n await runAngularWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'reactRouter':\n await runReactRouterWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.cordova,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.electron,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAA+E;AAC/E,sDAAwC;AACxC,4EAA0E;AAC1E,yCAAiD;AAEjD,gDAA8D;AAC9D,2CAAoD;AACpD,wCAAgD;AAChD,6DAA4D;AAC5D,6DAA4D;AAC5D,uDAAsD;AACtD,6DAA4D;AAC5D,0DAAyD;AACzD,oDAAmD;AACnD,uDAAsD;AACtD,sEAAqE;AACrE,mEAAkE;AAClE,4EAA0E;AAC1E,sEAAqE;AACrE,yCAAgD;AAEhD,uCAA2C;AAmD3C,SAAS,8BAA8B,CACrC,IAAU;IAEV,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAC5B,OAAO,SAAS,CAAC;KAClB;IAED,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS;QAC5C,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU;QAC9C,OAAO,EAAE;YACP,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS;YACrC,IAAI,EAAE;gBACJ;oBACE,GAAG,EAAE;wBACH,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG;qBACpC;iBACF;aACF;YACD,YAAY,EAAE;gBACZ,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK;gBACjC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO;gBACrC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO;aACtC;YACD,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW;SAC1C;KACF,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,GAAG,CAAC,IAAU;IAClC,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI;QACP,GAAG,IAAA,qBAAe,GAAE;KACrB,CAAC;IAEF,4DAA4D;IAC5D,IAAI,SAAS,CAAC,KAAK,EAAE;QACnB,IAAA,uBAAe,GAAE,CAAC;KACnB;IAED,IAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;IACxC,IAAI,CAAC,WAAW,EAAE;QAChB,KAAK,CAAC,KAAK,CAAC,iBAAiB,wBAAc,EAAE,CAAC,CAAC;QAE/C,WAAW,GAAG,MAAM,IAAA,wBAAgB,EAClC,KAAK,CAAC,MAAM,CAAC;YACX,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE;gBAC/C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACtC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACtC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACtC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACtC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;gBACxC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;gBACrC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAChC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;gBAClC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE;gBAC/C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;gBAC1C,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC5C,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,8BAA8B,EAAE;aAC/D;SACF,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE;YAChB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACrD,OAAO;SACR;QAED,KAAK,CAAC,KAAK,CAAC,YAAY,WAAW,QAAQ,CAAC,CAAC;KAC9C;IAED,MAAM,aAAa,GAAkB;QACnC,gBAAgB,EAAE,CAAC,SAAS,CAAC,gBAAgB;QAC7C,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,OAAO,EAAE,SAAS,CAAC,GAAG;QACtB,WAAW,EAAE,SAAS,CAAC,OAAO;QAC9B,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,kBAAkB,EAAE,8BAA8B,CAAC,SAAS,CAAC;QAC7D,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,SAAS,EAAE,SAAS,CAAC,SAAS;KAC/B,CAAC;IAEF,QAAQ,WAAW,EAAE;QACnB,KAAK,aAAa;YAChB,MAAM,IAAA,0CAAoB,EAAC,aAAa,CAAC,CAAC;YAC1C,MAAM;QAER,KAAK,SAAS;YACZ,MAAM,IAAA,iCAAgB,EAAC,aAAa,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,KAAK;YACR,MAAM,IAAA,6BAAc,EAAC;gBACnB,GAAG,aAAa;gBAChB,UAAU,EAAE,SAAS,CAAC,eAAe;aACtC,CAAC,CAAC;YACH,MAAM;QAER,KAAK,SAAS;YACZ,MAAM,IAAA,iCAAgB,EAAC,aAAa,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,SAAS;YACZ,MAAM,IAAA,iCAAgB,EAAC,aAAa,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,QAAQ;YACX,MAAM,IAAA,+BAAe,EAAC,aAAa,CAAC,CAAC;YACrC,MAAM;QAER,KAAK,MAAM;YACT,MAAM,IAAA,2BAAa,EAAC,aAAa,CAAC,CAAC;YACnC,MAAM;QAER,KAAK,OAAO;YACV,MAAM,IAAA,6BAAc,EAAC,aAAa,CAAC,CAAC;YACpC,MAAM;QAER,KAAK,aAAa;YAChB,MAAM,IAAA,0CAAoB,EAAC,aAAa,CAAC,CAAC;YAC1C,MAAM;QAER,KAAK,WAAW;YACd,MAAM,IAAA,qCAAkB,EAAC,aAAa,CAAC,CAAC;YACxC,MAAM;QAER,KAAK,YAAY;YACf,MAAM,IAAA,uCAAmB,EAAC,aAAa,CAAC,CAAC;YACzC,MAAM;QAER,KAAK,YAAY;YACf,MAAM,IAAA,uCAAmB,EAAC,aAAa,CAAC,CAAC;YACzC,MAAM;QAER,KAAK,SAAS;YACZ,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,KAAK,IAAA,WAAS,EACZ;gBACE,GAAG,IAAI;gBACP,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;gBACnB,WAAW,EAAE,uBAAW,CAAC,OAAO;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;aAC9B,EACD,aAAa,CACd,CAAC;YACF,MAAM;QAER,KAAK,UAAU;YACb,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,KAAK,IAAA,WAAS,EACZ;gBACE,GAAG,IAAI;gBACP,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;gBACnB,WAAW,EAAE,uBAAW,CAAC,QAAQ;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;aAC9B,EACD,aAAa,CACd,CAAC;YACF,MAAM;QAER;YACE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAChD;AACH,CAAC;AA5ID,kBA4IC","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\nimport { abortIfCancelled } from './utils/clack';\n\nimport { Integration, type Platform } from '../lib/Constants';\nimport { readEnvironment } from '../lib/Helper/Env';\nimport { run as legacyRun } from '../lib/Setup';\nimport { runAndroidWizard } from './android/android-wizard';\nimport { runAngularWizard } from './angular/angular-wizard';\nimport { runAppleWizard } from './apple/apple-wizard';\nimport { runFlutterWizard } from './flutter/flutter-wizard';\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport { runNuxtWizard } from './nuxt/nuxt-wizard';\nimport { runRemixWizard } from './remix/remix-wizard';\nimport { runSourcemapsWizard } from './sourcemaps/sourcemaps-wizard';\nimport { runSvelteKitWizard } from './sveltekit/sveltekit-wizard';\nimport { runReactRouterWizard } from './react-router/react-router-wizard';\nimport { runCloudflareWizard } from './cloudflare/cloudflare-wizard';\nimport { enableDebugLogs } from './utils/debug';\nimport type { PreselectedProject, WizardOptions } from './utils/types';\nimport { WIZARD_VERSION } from './version';\n\ntype WizardIntegration =\n | 'angular'\n | 'reactNative'\n | 'flutter'\n | 'ios'\n | 'android'\n | 'cordova'\n | 'electron'\n | 'nextjs'\n | 'nuxt'\n | 'remix'\n | 'reactRouter'\n | 'sveltekit'\n | 'cloudflare'\n | 'sourcemaps';\n\ntype Args = {\n integration?: WizardIntegration;\n\n uninstall: boolean; // used in Cordova\n signup: boolean;\n skipConnect: boolean;\n debug: boolean;\n quiet: boolean;\n disableTelemetry: boolean;\n spotlight?: boolean;\n promoCode?: string;\n preSelectedProject?: {\n authToken: string;\n selfHosted: boolean;\n dsn: string;\n projectId: string;\n projectSlug: string;\n projectName: string;\n orgId: string;\n orgName: string;\n orgSlug: string;\n };\n url?: string;\n platform?: Platform[];\n org?: string;\n project?: string;\n saas?: boolean;\n forceInstall?: boolean;\n comingFrom?: string;\n ignoreGitChanges?: boolean;\n xcodeProjectDir?: string;\n};\n\nfunction preSelectedProjectArgsToObject(\n args: Args,\n): PreselectedProject | undefined {\n if (!args.preSelectedProject) {\n return undefined;\n }\n\n return {\n authToken: args.preSelectedProject.authToken,\n selfHosted: args.preSelectedProject.selfHosted,\n project: {\n id: args.preSelectedProject.projectId,\n keys: [\n {\n dsn: {\n public: args.preSelectedProject.dsn,\n },\n },\n ],\n organization: {\n id: args.preSelectedProject.orgId,\n name: args.preSelectedProject.orgName,\n slug: args.preSelectedProject.orgSlug,\n },\n slug: args.preSelectedProject.projectSlug,\n },\n };\n}\n\nexport async function run(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n // Enable debug logs if the user has passed the --debug flag\n if (finalArgs.debug) {\n enableDebugLogs();\n }\n\n let integration = finalArgs.integration;\n if (!integration) {\n clack.intro(`Sentry Wizard ${WIZARD_VERSION}`);\n\n integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [\n { value: 'reactNative', label: 'React Native' },\n { value: 'flutter', label: 'Flutter' },\n { value: 'ios', label: 'iOS' },\n { value: 'angular', label: 'Angular' },\n { value: 'android', label: 'Android' },\n { value: 'cordova', label: 'Cordova' },\n { value: 'electron', label: 'Electron' },\n { value: 'nextjs', label: 'Next.js' },\n { value: 'nuxt', label: 'Nuxt' },\n { value: 'remix', label: 'Remix' },\n { value: 'reactRouter', label: 'React Router' },\n { value: 'sveltekit', label: 'SvelteKit' },\n { value: 'cloudflare', label: 'Cloudflare' },\n { value: 'sourcemaps', label: 'Configure Source Maps Upload' },\n ],\n }),\n );\n\n if (!integration) {\n clack.log.error('No integration selected. Exiting.');\n return;\n }\n\n clack.outro(`Starting ${integration} setup`);\n }\n\n const wizardOptions: WizardOptions = {\n telemetryEnabled: !finalArgs.disableTelemetry,\n promoCode: finalArgs.promoCode,\n url: finalArgs.url,\n orgSlug: finalArgs.org,\n projectSlug: finalArgs.project,\n saas: finalArgs.saas,\n preSelectedProject: preSelectedProjectArgsToObject(finalArgs),\n forceInstall: finalArgs.forceInstall,\n comingFrom: finalArgs.comingFrom,\n ignoreGitChanges: finalArgs.ignoreGitChanges,\n spotlight: finalArgs.spotlight,\n };\n\n switch (integration) {\n case 'reactNative':\n await runReactNativeWizard(wizardOptions);\n break;\n\n case 'flutter':\n await runFlutterWizard(wizardOptions);\n break;\n\n case 'ios':\n await runAppleWizard({\n ...wizardOptions,\n projectDir: finalArgs.xcodeProjectDir,\n });\n break;\n\n case 'android':\n await runAndroidWizard(wizardOptions);\n break;\n\n case 'angular':\n await runAngularWizard(wizardOptions);\n break;\n\n case 'nextjs':\n await runNextjsWizard(wizardOptions);\n break;\n\n case 'nuxt':\n await runNuxtWizard(wizardOptions);\n break;\n\n case 'remix':\n await runRemixWizard(wizardOptions);\n break;\n\n case 'reactRouter':\n await runReactRouterWizard(wizardOptions);\n break;\n\n case 'sveltekit':\n await runSvelteKitWizard(wizardOptions);\n break;\n\n case 'cloudflare':\n await runCloudflareWizard(wizardOptions);\n break;\n\n case 'sourcemaps':\n await runSourcemapsWizard(wizardOptions);\n break;\n\n case 'cordova':\n argv.integration = 'cordova';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.cordova,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n case 'electron':\n argv.integration = 'electron';\n void legacyRun(\n {\n ...argv,\n url: argv.url ?? '',\n integration: Integration.electron,\n platform: argv.platform ?? [],\n },\n wizardOptions,\n );\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n"]}
|
|
@@ -42,7 +42,7 @@ let addedToBuildCommand = false;
|
|
|
42
42
|
async function configureSentryCLI(options, configureSourcemapGenerationFlow = defaultConfigureSourcemapGenerationFlow, skipValidation = false) {
|
|
43
43
|
const packageDotJson = await (0, clack_1.getPackageDotJson)();
|
|
44
44
|
await (0, clack_1.installPackage)({
|
|
45
|
-
packageName: '@sentry/cli',
|
|
45
|
+
packageName: '@sentry/cli@^2',
|
|
46
46
|
alreadyInstalled: (0, package_json_1.hasPackageInstalled)('@sentry/cli', packageDotJson),
|
|
47
47
|
});
|
|
48
48
|
let validPath = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentry-cli.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/sentry-cli.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport {\n abortIfCancelled,\n addSentryCliConfig,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n artifactsExist,\n askToRunBuildOrEnterPathOrProceed,\n} from '../../utils/clack';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\nimport { hasPackageInstalled } from '../../utils/package-json';\nimport { traceStep } from '../../telemetry';\nimport { NPM } from '../../utils/package-manager';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\nlet addedToBuildCommand = false;\n\ntype configureSentryCLIOptions = SourceMapUploadToolConfigurationOptions & {\n defaultArtifactPath?: string;\n};\n\nexport async function configureSentryCLI(\n options: configureSentryCLIOptions,\n configureSourcemapGenerationFlow: () => Promise<void> = defaultConfigureSourcemapGenerationFlow,\n skipValidation = false,\n): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n\n await installPackage({\n packageName: '@sentry/cli',\n alreadyInstalled: hasPackageInstalled('@sentry/cli', packageDotJson),\n });\n\n let validPath = false;\n let relativeArtifactPath: string | undefined;\n do {\n const rawArtifactPath = await abortIfCancelled(\n clack.text({\n message: 'Where are your build artifacts located?',\n placeholder:\n relativeArtifactPath ??\n options.defaultArtifactPath ??\n `.${path.sep}out`,\n initialValue:\n relativeArtifactPath ??\n options.defaultArtifactPath ??\n `.${path.sep}out`,\n validate(value) {\n if (!value) {\n return 'Please enter a path.';\n }\n },\n }),\n );\n\n if (path.isAbsolute(rawArtifactPath)) {\n relativeArtifactPath = path.relative(process.cwd(), rawArtifactPath);\n } else {\n relativeArtifactPath = rawArtifactPath;\n }\n\n if (artifactsExist(relativeArtifactPath)) {\n validPath = true;\n continue;\n }\n\n const runBuildOrEnterPathOrProceed =\n await askToRunBuildOrEnterPathOrProceed({\n relativeArtifactPath,\n });\n\n validPath = runBuildOrEnterPathOrProceed?.validPath ?? false;\n relativeArtifactPath =\n runBuildOrEnterPathOrProceed?.relativeArtifactPath ??\n relativeArtifactPath;\n } while (!validPath);\n\n const relativePosixArtifactPath = relativeArtifactPath\n .split(path.sep)\n .join(path.posix.sep);\n\n if (!skipValidation) {\n await configureSourcemapGenerationFlow();\n }\n\n await createAndAddNpmScript(options, relativePosixArtifactPath);\n\n if (await askShouldAddToBuildCommand()) {\n await traceStep('sentry-cli-add-to-build-cmd', () =>\n addSentryCommandToBuildCommand(),\n );\n } else {\n clack.log.info(\n `No problem, just make sure to run this script ${chalk.bold(\n 'after',\n )} building your application but ${chalk.bold('before')} deploying!`,\n );\n }\n\n await addSentryCliConfig({ authToken: options.authToken });\n}\n\nexport async function setupNpmScriptInCI(): Promise<void> {\n if (addedToBuildCommand) {\n // No need to tell users to add it manually to their CI\n // if the script is already added to the build command\n return;\n }\n\n const addedToCI = await abortIfCancelled(\n clack.select({\n message: `Add a step to your CI pipeline that runs the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script ${chalk.bold('right after')} building your application.`,\n options: [\n { label: 'I did, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `You need to run ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} after each build for source maps to work properly.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-ci-script', addedToCI);\n\n if (!addedToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function createAndAddNpmScript(\n options: SourceMapUploadToolConfigurationOptions,\n relativePosixArtifactPath: string,\n): Promise<void> {\n const sentryCliNpmScript = `sentry-cli sourcemaps inject --org ${\n options.orgSlug\n } --project ${\n options.projectSlug\n } ${relativePosixArtifactPath} && sentry-cli${\n options.selfHosted ? ` --url ${options.url}` : ''\n } sourcemaps upload --org ${options.orgSlug} --project ${\n options.projectSlug\n } ${relativePosixArtifactPath}`;\n\n const packageDotJson = await getPackageDotJson();\n\n packageDotJson.scripts = packageDotJson.scripts || {};\n packageDotJson.scripts[SENTRY_NPM_SCRIPT_NAME] = sentryCliNpmScript;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n clack.log.info(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function askShouldAddToBuildCommand(): Promise<boolean> {\n const shouldAddToBuildCommand = await abortIfCancelled(\n clack.select({\n message: `Do you want to automatically run the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script after each production build?`,\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'This will modify your prod build command',\n },\n { label: 'No', value: false },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('modify-build-command', shouldAddToBuildCommand);\n\n return shouldAddToBuildCommand;\n}\n\n/**\n * Add the sentry:sourcemaps command to the prod build command in the package.json\n * - Detect the user's build command\n * - Append the sentry:sourcemaps command to it\n *\n * @param packageDotJson The package.json which will be modified.\n */\nexport async function addSentryCommandToBuildCommand(): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n // This usually shouldn't happen because earlier we added the\n // SENTRY_NPM_SCRIPT_NAME script but just to be sure\n packageDotJson.scripts = packageDotJson.scripts || {};\n\n const allNpmScripts = Object.keys(packageDotJson.scripts).filter(\n (s) => s !== SENTRY_NPM_SCRIPT_NAME,\n );\n\n const packageManager = await getPackageManager(NPM);\n\n // Heuristic to pre-select the build command:\n // Often, 'build' is the prod build command, so we favour it.\n // If it's not there, commands that include 'build' might be the prod build command.\n let buildCommand =\n typeof packageDotJson.scripts.build === 'string'\n ? 'build'\n : allNpmScripts.find((s) => s.toLocaleLowerCase().includes('build'));\n\n const isProdBuildCommand =\n !!buildCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${packageManager.runScriptCommand} ${buildCommand}`,\n )} your production build command?`,\n }),\n ));\n\n if (allNpmScripts.length && (!buildCommand || !isProdBuildCommand)) {\n buildCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${packageManager.name} command in your ${chalk.cyan(\n 'package.json',\n )} builds your application for production?`,\n options: allNpmScripts\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!buildCommand || buildCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return;\n }\n\n const oldCommand = packageDotJson.scripts[buildCommand];\n if (!oldCommand) {\n // very unlikely to happen but nevertheless\n clack.log.warn(\n `\\`${buildCommand}\\` doesn't seem to be part of your package.json scripts`,\n );\n return;\n }\n\n const newCommand = `${oldCommand} && ${packageManager.runScriptCommand} ${SENTRY_NPM_SCRIPT_NAME}`;\n\n if (oldCommand.endsWith(SENTRY_NPM_SCRIPT_NAME)) {\n clack.log.info(\n `It seems like ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} is already part of your ${chalk.cyan(\n buildCommand,\n )} command. Will not add it again.\nCurrent command: ${chalk.dim(oldCommand)}\nWould have injected: ${chalk.dim(newCommand)}`,\n );\n\n return;\n }\n\n packageDotJson.scripts[buildCommand] = newCommand;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n addedToBuildCommand = true;\n\n clack.log.info(\n `Added ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n buildCommand,\n )} command.`,\n );\n}\n\nasync function defaultConfigureSourcemapGenerationFlow(): Promise<void> {\n await abortIfCancelled(\n clack.select({\n message: `Verify that your build tool is generating source maps. ${chalk.dim(\n '(Your build output folder should contain .js.map files after a build)',\n )}`,\n options: [{ label: 'I checked. Continue!', value: true }],\n initialValue: true,\n }),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sentry-cli.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/sentry-cli.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as Sentry from '@sentry/node';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport {\n abortIfCancelled,\n addSentryCliConfig,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n artifactsExist,\n askToRunBuildOrEnterPathOrProceed,\n} from '../../utils/clack';\n\nimport { SourceMapUploadToolConfigurationOptions } from './types';\nimport { hasPackageInstalled } from '../../utils/package-json';\nimport { traceStep } from '../../telemetry';\nimport { NPM } from '../../utils/package-manager';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\nlet addedToBuildCommand = false;\n\ntype configureSentryCLIOptions = SourceMapUploadToolConfigurationOptions & {\n defaultArtifactPath?: string;\n};\n\nexport async function configureSentryCLI(\n options: configureSentryCLIOptions,\n configureSourcemapGenerationFlow: () => Promise<void> = defaultConfigureSourcemapGenerationFlow,\n skipValidation = false,\n): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n\n await installPackage({\n packageName: '@sentry/cli@^2',\n alreadyInstalled: hasPackageInstalled('@sentry/cli', packageDotJson),\n });\n\n let validPath = false;\n let relativeArtifactPath: string | undefined;\n do {\n const rawArtifactPath = await abortIfCancelled(\n clack.text({\n message: 'Where are your build artifacts located?',\n placeholder:\n relativeArtifactPath ??\n options.defaultArtifactPath ??\n `.${path.sep}out`,\n initialValue:\n relativeArtifactPath ??\n options.defaultArtifactPath ??\n `.${path.sep}out`,\n validate(value) {\n if (!value) {\n return 'Please enter a path.';\n }\n },\n }),\n );\n\n if (path.isAbsolute(rawArtifactPath)) {\n relativeArtifactPath = path.relative(process.cwd(), rawArtifactPath);\n } else {\n relativeArtifactPath = rawArtifactPath;\n }\n\n if (artifactsExist(relativeArtifactPath)) {\n validPath = true;\n continue;\n }\n\n const runBuildOrEnterPathOrProceed =\n await askToRunBuildOrEnterPathOrProceed({\n relativeArtifactPath,\n });\n\n validPath = runBuildOrEnterPathOrProceed?.validPath ?? false;\n relativeArtifactPath =\n runBuildOrEnterPathOrProceed?.relativeArtifactPath ??\n relativeArtifactPath;\n } while (!validPath);\n\n const relativePosixArtifactPath = relativeArtifactPath\n .split(path.sep)\n .join(path.posix.sep);\n\n if (!skipValidation) {\n await configureSourcemapGenerationFlow();\n }\n\n await createAndAddNpmScript(options, relativePosixArtifactPath);\n\n if (await askShouldAddToBuildCommand()) {\n await traceStep('sentry-cli-add-to-build-cmd', () =>\n addSentryCommandToBuildCommand(),\n );\n } else {\n clack.log.info(\n `No problem, just make sure to run this script ${chalk.bold(\n 'after',\n )} building your application but ${chalk.bold('before')} deploying!`,\n );\n }\n\n await addSentryCliConfig({ authToken: options.authToken });\n}\n\nexport async function setupNpmScriptInCI(): Promise<void> {\n if (addedToBuildCommand) {\n // No need to tell users to add it manually to their CI\n // if the script is already added to the build command\n return;\n }\n\n const addedToCI = await abortIfCancelled(\n clack.select({\n message: `Add a step to your CI pipeline that runs the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script ${chalk.bold('right after')} building your application.`,\n options: [\n { label: 'I did, continue!', value: true },\n {\n label: \"I'll do it later...\",\n value: false,\n hint: chalk.yellow(\n `You need to run ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} after each build for source maps to work properly.`,\n ),\n },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('added-ci-script', addedToCI);\n\n if (!addedToCI) {\n clack.log.info(\"Don't forget! :)\");\n }\n}\n\nasync function createAndAddNpmScript(\n options: SourceMapUploadToolConfigurationOptions,\n relativePosixArtifactPath: string,\n): Promise<void> {\n const sentryCliNpmScript = `sentry-cli sourcemaps inject --org ${\n options.orgSlug\n } --project ${\n options.projectSlug\n } ${relativePosixArtifactPath} && sentry-cli${\n options.selfHosted ? ` --url ${options.url}` : ''\n } sourcemaps upload --org ${options.orgSlug} --project ${\n options.projectSlug\n } ${relativePosixArtifactPath}`;\n\n const packageDotJson = await getPackageDotJson();\n\n packageDotJson.scripts = packageDotJson.scripts || {};\n packageDotJson.scripts[SENTRY_NPM_SCRIPT_NAME] = sentryCliNpmScript;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n clack.log.info(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function askShouldAddToBuildCommand(): Promise<boolean> {\n const shouldAddToBuildCommand = await abortIfCancelled(\n clack.select({\n message: `Do you want to automatically run the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script after each production build?`,\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'This will modify your prod build command',\n },\n { label: 'No', value: false },\n ],\n initialValue: true,\n }),\n );\n\n Sentry.setTag('modify-build-command', shouldAddToBuildCommand);\n\n return shouldAddToBuildCommand;\n}\n\n/**\n * Add the sentry:sourcemaps command to the prod build command in the package.json\n * - Detect the user's build command\n * - Append the sentry:sourcemaps command to it\n *\n * @param packageDotJson The package.json which will be modified.\n */\nexport async function addSentryCommandToBuildCommand(): Promise<void> {\n const packageDotJson = await getPackageDotJson();\n // This usually shouldn't happen because earlier we added the\n // SENTRY_NPM_SCRIPT_NAME script but just to be sure\n packageDotJson.scripts = packageDotJson.scripts || {};\n\n const allNpmScripts = Object.keys(packageDotJson.scripts).filter(\n (s) => s !== SENTRY_NPM_SCRIPT_NAME,\n );\n\n const packageManager = await getPackageManager(NPM);\n\n // Heuristic to pre-select the build command:\n // Often, 'build' is the prod build command, so we favour it.\n // If it's not there, commands that include 'build' might be the prod build command.\n let buildCommand =\n typeof packageDotJson.scripts.build === 'string'\n ? 'build'\n : allNpmScripts.find((s) => s.toLocaleLowerCase().includes('build'));\n\n const isProdBuildCommand =\n !!buildCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${packageManager.runScriptCommand} ${buildCommand}`,\n )} your production build command?`,\n }),\n ));\n\n if (allNpmScripts.length && (!buildCommand || !isProdBuildCommand)) {\n buildCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${packageManager.name} command in your ${chalk.cyan(\n 'package.json',\n )} builds your application for production?`,\n options: allNpmScripts\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!buildCommand || buildCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return;\n }\n\n const oldCommand = packageDotJson.scripts[buildCommand];\n if (!oldCommand) {\n // very unlikely to happen but nevertheless\n clack.log.warn(\n `\\`${buildCommand}\\` doesn't seem to be part of your package.json scripts`,\n );\n return;\n }\n\n const newCommand = `${oldCommand} && ${packageManager.runScriptCommand} ${SENTRY_NPM_SCRIPT_NAME}`;\n\n if (oldCommand.endsWith(SENTRY_NPM_SCRIPT_NAME)) {\n clack.log.info(\n `It seems like ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} is already part of your ${chalk.cyan(\n buildCommand,\n )} command. Will not add it again.\nCurrent command: ${chalk.dim(oldCommand)}\nWould have injected: ${chalk.dim(newCommand)}`,\n );\n\n return;\n }\n\n packageDotJson.scripts[buildCommand] = newCommand;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(packageDotJson, null, 2),\n );\n\n addedToBuildCommand = true;\n\n clack.log.info(\n `Added ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n buildCommand,\n )} command.`,\n );\n}\n\nasync function defaultConfigureSourcemapGenerationFlow(): Promise<void> {\n await abortIfCancelled(\n clack.select({\n message: `Verify that your build tool is generating source maps. ${chalk.dim(\n '(Your build output folder should contain .js.map files after a build)',\n )}`,\n options: [{ label: 'I checked. Continue!', value: true }],\n initialValue: true,\n }),\n );\n}\n"]}
|
|
@@ -63,7 +63,7 @@ Otherwise, let's proceed with the Wrangler setup.`), 'Before we get started');
|
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
await (0, clack_1.installPackage)({
|
|
66
|
-
packageName: '@sentry/cli',
|
|
66
|
+
packageName: '@sentry/cli@^2',
|
|
67
67
|
alreadyInstalled: (0, package_json_1.hasPackageInstalled)('@sentry/cli', await (0, clack_1.getPackageDotJson)()),
|
|
68
68
|
devDependency: true,
|
|
69
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrangler.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/wrangler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAA+E;AAC/E,sDAAwC;AACxC,kDAA0B;AAC1B,6CAQ2B;AAC3B,2DAA+D;AAC/D,iEAAkD;AAElD,gDAAwB;AACxB,4CAAoB;AAEpB,kDAA0B;AAC1B,2CAAwC;AAExC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAEnD;;GAEG;AACU,QAAA,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAExC,KAAK,UAAU,iBAAiB,CACrC,OAAgD;IAEhD,KAAK,CAAC,IAAI,CACR,eAAK,CAAC,WAAW,CACf;;;;;;;;EAQJ,eAAK,CAAC,SAAS,CACf,eAAK,CAAC,IAAI,CACR,oEAAoE,CACrE,CACF;;;kDAGiD,CAC7C,EACD,uBAAuB,CACxB,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAgB,EACpC,KAAK,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,iDAAiD;KAC3D,CAAC,CACH,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAA,aAAK,EACT,8DAA8D,EAC9D,CAAC,CACF,CAAC;QACF,OAAO;KACR;IAED,MAAM,IAAA,sBAAc,EAAC;QACnB,WAAW,EAAE,aAAa;QAC1B,gBAAgB,EAAE,IAAA,kCAAmB,EACnC,aAAa,EACb,MAAM,IAAA,yBAAiB,GAAE,CAC1B;QACD,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,MAAM,sCAAsC,EAAE,CAAC,EAAE;QACrD,OAAO;KACR;IAED,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC/C,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO;KACR;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAEtD,MAAM,kCAAkC,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEjE,MAAM,sBAAsB,CAAC,aAAa,CAAC,CAAC;IAE5C,MAAM,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEjD,MAAM,IAAA,0BAAkB,EAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAC7D,CAAC;AAlED,8CAkEC;AAED,KAAK,UAAU,kCAAkC,CAC/C,OAAqE;IAErE,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAiB,GAAE,CAAC;IAC1C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACxC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAEvE,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EACxC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CACjC,CAAC;IAEF,KAAK,CAAC,GAAG,CAAC,OAAO,CACf,WAAW,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,eAAK,CAAC,IAAI,CACxE,cAAc,CACf,GAAG,CACL,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,OAAqE;IAErE,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,iBAAiB,GAAG,SAAS,OAAO,CAAC,OAAO,cAAc,OAAO,CAAC,WAAW,EAAE,CAAC;IAEtF,MAAM,eAAe,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,cAAI,CAAC,GAAG,IAAI,CAAC;IAEzD,OAAO;QACL,wDAAwD;QACxD,aAAa,gBAAgB,kCAAkC,iBAAiB,EAAE;QAClF,aAAa,gBAAgB,sBAAsB,iBAAiB,+CAA+C,eAAe,KAAK,OAAO,CAAC,MAAM,EAAE;KACxJ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC;AAbD,kDAaC;AAED,KAAK,UAAU,sCAAsC;IACnD,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAiB,GAAE,CAAC;IAE1C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAExC,IAAI,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE;QAC3C,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,OAAO,eAAK,CAAC,IAAI,CACf,sBAAsB,CACvB,kCAAkC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC;;mFAEgB,CAC9E,CAAC;QAEF,MAAM,SAAS,GAAG,MAAM,IAAA,wBAAgB,EACtC,KAAK,CAAC,MAAM,CAAC;YACX,OAAO,EAAE,8BAA8B;YACvC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,+BAA+B,EAAE;gBACpE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE;aACjE;SACF,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAiB,GAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAEtC,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACpD,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,IAAA,yBAAiB,EAAC,qBAAG,CAAC,CAAC;IACpD,MAAM,eAAe,GACnB,CAAC,CAAC,aAAa;QACf,CAAC,MAAM,IAAA,wBAAgB,EACrB,KAAK,CAAC,OAAO,CAAC;YACZ,OAAO,EAAE,MAAM,eAAK,CAAC,IAAI,CACvB,GAAG,cAAc,CAAC,gBAAgB,IAAI,aAAa,EAAE,CACtD,iCAAiC;SACnC,CAAC,CACH,CAAC,CAAC;IAEL,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,eAAe,CAAC,EAAE;QACvE,aAAa,GAAG,MAAM,IAAA,wBAAgB,EACpC,KAAK,CAAC,MAAM,CAAC;YACX,OAAO,EAAE,SAAS,cAAc,CAAC,IAAI,oBAAoB,eAAK,CAAC,IAAI,CACjE,cAAc,CACf,qCAAqC;YACtC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBAC1B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAChB,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;iBACF,MAAM,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACzD,CAAC,CACH,CAAC;KACH;IAED,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,MAAM,EAAE;QAC9C,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,uBAAuB,eAAK,CAAC,IAAI,CAC/B,sBAAsB,CACvB,yCAAyC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC;mDACvB,CAC9C,CAAC;QACF,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,aAAqB;IACzD,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAiB,GAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,MAAM,IAAA,yBAAiB,EAAC,qBAAG,CAAC,CAAC;IACpD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACxC,OAAO,CAAC,OAAO,CACb,OAAO,aAAa,EAAE,CACvB,GAAG,GAAG,cAAc,CAAC,gBAAgB,IAAI,sBAAsB,EAAE,CAAC;IAEnE,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EACxC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CACjC,CAAC;IAEF,KAAK,CAAC,GAAG,CAAC,OAAO,CACf,WAAW,eAAK,CAAC,IAAI,CAAC,OAAO,aAAa,EAAE,CAAC,mBAAmB,eAAK,CAAC,IAAI,CACxE,cAAc,CACf,GAAG,CACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,aAAqB,EACrB,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAiB,GAAE,CAAC;IAC1C,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACxC,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,CAAC,gBAAgB,EAAE;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,OAAO,eAAK,CAAC,IAAI,CACf,aAAa,CACd,oHAAoH,CACtH,CAAC;QAEF,MAAM,IAAA,iCAAyB,EAAC;YAC9B,WAAW,EAAE,4BAA4B,MAAM,mFAAmF;YAClI,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEH,OAAO;KACR;IAED,MAAM,gBAAgB,GAAG,qCAAqC,CAC5D,gBAAgB,EAChB,MAAM,CACP,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,OAAO,eAAK,CAAC,IAAI,CACf,aAAa,CACd,sCAAsC,eAAK,CAAC,IAAI,CAC/C,iBAAiB,CAClB,wDAAwD,CAC1D,CAAC;QAEF,MAAM,IAAA,iCAAyB,EAAC;YAC9B,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEH,OAAO;KACR;IAED,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC;IAElD,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EACxC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CACjC,CAAC;IAEF,KAAK,CAAC,GAAG,CAAC,OAAO,CACf,iBAAiB,eAAK,CAAC,IAAI,CACzB,aAAa,CACd,0CAA0C,CAC5C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qCAAqC,CACnD,aAAqB,EACrB,MAAc;IAEd,+FAA+F;IAC/F,MAAM,6BAA6B,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAE9E,IAAI,CAAC,6BAA6B,EAAE;QAClC,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,YAAY,GAAG,6BAA6B;SAC/C,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,MAAM,UAAU,GAAG,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,MAAM,OAAO,GAAG,EAAE,CAAC;IAEnB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KAClC;IAED,sDAAsD;IACtD,wDAAwD;IACxD,2DAA2D;IAC3D,kCAAkC;IAClC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;QACrC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;KACtC;IAED,qDAAqD;IACrD,4CAA4C;IAC5C,0FAA0F;IAC1F,OAAO,CAAC,IAAI,CACV,OAAO,EACP,uDAAuD,CACxD,CAAC;IAEF,OAAO,aAAa;SACjB,OAAO,CACN,6BAA6B,EAC7B,GAAG,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACzD;SACA,IAAI,EAAE,CAAC;AACZ,CAAC;AA9CD,sFA8CC;AAED;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAAC,YAAoB;IACnD,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAiB,GAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO,gBAAQ,CAAC;KACjB;IAED,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,aAAqB;IAC9C,MAAM,IAAI,GAAG,wBAAwB,CAAC,aAAa,CAAC;QAClD,EAAE,KAAK,CAAC,GAAG,CAAC;SACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5B,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,gBAAQ,CAAC;KACjB;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;QACzB,OAAO,gBAAQ,CAAC;KACjB;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IAEvC,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACrC,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;KAC5D;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAE7C,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAChD,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;KACzC;IAED,OAAO,gBAAQ,CAAC;AAClB,CAAC;AA3BD,gCA2BC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,aAAqB;IAC5D,MAAM,kBAAkB,GAAG,aAAa,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAEtE,MAAM,6BAA6B,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QACpE,MAAM,IAAI,GAAG,GAAG;aACb,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;aACxB,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IACH,OAAO,6BAA6B,CAAC;AACvC,CAAC;AAZD,4DAYC","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n abort,\n abortIfCancelled,\n addSentryCliConfig,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n showCopyPasteInstructions,\n} from '../../utils/clack';\nimport { hasPackageInstalled } from '../../utils/package-json';\nimport { NPM } from '../../utils/package-manager';\nimport type { SourceMapUploadToolConfigurationOptions } from './types';\nimport path from 'path';\nimport fs from 'fs';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\n/**\n * only exported for testing\n */\nexport const DIST_DIR = path.join('.', 'dist');\n\nexport async function configureWrangler(\n options: SourceMapUploadToolConfigurationOptions,\n) {\n clack.note(\n chalk.whiteBright(\n `Configuring source maps upload with Cloudflare Wrangler requires the wizard to:\n- Modify your deploy command to access source maps\n- Set the SENTRY_RELEASE env var to identify source maps\n\nNote: This setup may need additional configuration. \nWe recommend using Vite to build your worker instead, for an easier and more reliable setup.\n\nLearn more about CloudFlare's Vite setup here:\n${chalk.underline(\n chalk.cyan(\n 'https://developers.cloudflare.com/workers/vite-plugin/get-started/',\n ),\n)}\n\nYou can switch to Vite and re-run this wizard later. \nOtherwise, let's proceed with the Wrangler setup.`,\n ),\n 'Before we get started',\n );\n\n const proceed = await abortIfCancelled(\n clack.confirm({\n message: 'Do you want to proceed with the Wrangler setup?',\n }),\n );\n\n if (!proceed) {\n await abort(\n 'Got it! You can switch to Vite and re-run this wizard later.',\n 0,\n );\n return;\n }\n\n await installPackage({\n packageName: '@sentry/cli',\n alreadyInstalled: hasPackageInstalled(\n '@sentry/cli',\n await getPackageDotJson(),\n ),\n devDependency: true,\n });\n\n if (!(await askContinueIfHasSentrySourcemapsScript())) {\n return;\n }\n\n const deployCommand = await getDeployCommand();\n if (!deployCommand) {\n return;\n }\n\n const outDir = await getWranglerOutDir(deployCommand);\n\n await createAndAddSentrySourcemapsScript({ ...options, outDir });\n\n await writePostDeployCommand(deployCommand);\n\n await modifyDeployCommand(deployCommand, outDir);\n\n await addSentryCliConfig({ authToken: options.authToken });\n}\n\nasync function createAndAddSentrySourcemapsScript(\n options: SourceMapUploadToolConfigurationOptions & { outDir: string },\n) {\n const pkgJson = await getPackageDotJson();\n pkgJson.scripts = pkgJson.scripts ?? {};\n pkgJson.scripts[SENTRY_NPM_SCRIPT_NAME] = getSentryCliCommand(options);\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(pkgJson, null, 2),\n );\n\n clack.log.success(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\n/**\n * only exported for testing\n */\nexport function getSentryCliCommand(\n options: SourceMapUploadToolConfigurationOptions & { outDir: string },\n) {\n const sentryCliOptions = options.selfHosted ? ` --url ${options.url}` : '';\n const orgAndProjectArgs = `--org=${options.orgSlug} --project=${options.projectSlug}`;\n\n const stripPrefixPath = `${options.outDir}${path.sep}..`;\n\n return [\n '_SENTRY_RELEASE=$(sentry-cli releases propose-version)',\n `sentry-cli${sentryCliOptions} releases new $_SENTRY_RELEASE ${orgAndProjectArgs}`,\n `sentry-cli${sentryCliOptions} sourcemaps upload ${orgAndProjectArgs} --release=$_SENTRY_RELEASE --strip-prefix '${stripPrefixPath}' ${options.outDir}`,\n ].join(' && ');\n}\n\nasync function askContinueIfHasSentrySourcemapsScript(): Promise<boolean> {\n const pkgJson = await getPackageDotJson();\n\n pkgJson.scripts = pkgJson.scripts ?? {};\n\n if (pkgJson.scripts[SENTRY_NPM_SCRIPT_NAME]) {\n clack.log.warn(\n `The ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script already exists in your ${chalk.cyan('package.json')}.\nThis likely means that you already ran this wizard once.\nIf things don't work yet, try overwriting the script and continue with the wizard.`,\n );\n\n const overwrite = await abortIfCancelled(\n clack.select({\n message: 'Do you want to overwrite it?',\n options: [\n { label: 'Yes', value: true, hint: 'Overwrite the existing script' },\n { label: 'No', value: false, hint: 'This will exit the wizard' },\n ],\n }),\n );\n\n if (!overwrite) {\n return false;\n }\n }\n\n return true;\n}\n\nasync function getDeployCommand(): Promise<string | undefined> {\n const pkgJson = await getPackageDotJson();\n const scripts = pkgJson.scripts ?? {};\n\n let deployCommand = Object.keys(scripts).find((key) =>\n /wrangler\\s+deploy/.test(scripts[key] ?? ''),\n );\n\n const packageManager = await getPackageManager(NPM);\n const isDeployCommand =\n !!deployCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${packageManager.runScriptCommand} ${deployCommand}`,\n )} your build and deploy command?`,\n }),\n ));\n\n if (Object.keys(scripts).length && (!deployCommand || !isDeployCommand)) {\n deployCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${packageManager.name} command in your ${chalk.cyan(\n 'package.json',\n )} builds your worker and deploys it?`,\n options: Object.keys(scripts)\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!deployCommand || deployCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return undefined;\n }\n\n return deployCommand;\n}\n\nasync function writePostDeployCommand(deployCommand: string): Promise<void> {\n const pkgJson = await getPackageDotJson();\n const packageManager = await getPackageManager(NPM);\n pkgJson.scripts = pkgJson.scripts ?? {};\n pkgJson.scripts[\n `post${deployCommand}`\n ] = `${packageManager.runScriptCommand} ${SENTRY_NPM_SCRIPT_NAME}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(pkgJson, null, 2),\n );\n\n clack.log.success(\n `Added a ${chalk.cyan(`post${deployCommand}`)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function modifyDeployCommand(\n deployCommand: string,\n outDir: string,\n): Promise<void> {\n const pkgJson = await getPackageDotJson();\n pkgJson.scripts = pkgJson.scripts ?? {};\n const oldDeployCommand = pkgJson.scripts[deployCommand];\n\n if (!oldDeployCommand) {\n clack.log.warn(\n `The ${chalk.cyan(\n deployCommand,\n )} script doesn't seem to be part of your package.json scripts anymore. Cannot modify it. Please modify it manually:`,\n );\n\n await showCopyPasteInstructions({\n codeSnippet: `wrangler deploy --outdir ${outDir} --var SENTRY_RELEASE:$(sentry-cli releases propose-version) --upload-source-maps`,\n filename: 'package.json',\n });\n\n return;\n }\n\n const newDeployCommand = safeInsertArgsToWranglerDeployCommand(\n oldDeployCommand,\n outDir,\n );\n\n if (!newDeployCommand) {\n clack.log.warn(\n `The ${chalk.cyan(\n deployCommand,\n )} script doesn't seem to be a valid ${chalk.cyan(\n 'wrangler deploy',\n )} command. Cannot modify it. Please modify it manually:`,\n );\n\n await showCopyPasteInstructions({\n codeSnippet: oldDeployCommand,\n filename: 'package.json',\n });\n\n return;\n }\n\n pkgJson.scripts[deployCommand] = newDeployCommand;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(pkgJson, null, 2),\n );\n\n clack.log.success(\n `Modified your ${chalk.cyan(\n deployCommand,\n )} script to enable uploading source maps.`,\n );\n}\n\n/**\n * Takes care of inserting the necessary arguments into the deploy command.\n * Ensures that existing arguments and values are kept and that the\n * wrangler deploy command is valid.\n *\n * only exported for testing\n */\nexport function safeInsertArgsToWranglerDeployCommand(\n deployCommand: string,\n outDir: string,\n): string | undefined {\n // split deployCommand into individual bash commands (potentially separated by &&, ||, >> etc.)\n const originalWranglerDeployCommand = getWranglerDeployCommand(deployCommand);\n\n if (!originalWranglerDeployCommand) {\n return undefined;\n }\n\n const existingArgs = originalWranglerDeployCommand\n .split(' ')\n .map((arg) => arg.trim())\n .filter(Boolean);\n\n const parsedArgs = yargs(hideBin(existingArgs)).parse();\n\n const newArgs = [];\n\n if (!parsedArgs.outdir) {\n newArgs.push('--outdir', outDir);\n }\n\n // Adding --upload-source-maps saves us from having to\n // modify the `wrangler.toml` or `wrangler.jsonc` files.\n // Not ideal because this forces source maps to be uploaded\n // but we'll live with it for now.\n if (!parsedArgs['upload-source-maps']) {\n newArgs.push('--upload-source-maps');\n }\n\n // This is how we inject the SENTRY_RELEASE variable,\n // which is picked up by the CloudFlare SDK.\n // multiple --var arguments are allowed, so no need to check for existing --var arguments.\n newArgs.push(\n '--var',\n 'SENTRY_RELEASE:$(sentry-cli releases propose-version)',\n );\n\n return deployCommand\n .replace(\n originalWranglerDeployCommand,\n `${originalWranglerDeployCommand} ${newArgs.join(' ')} `,\n )\n .trim();\n}\n\n/**\n * Look up an already specified --outdir argument and return it if found.\n * Otherwise, we defined `dist` as the default outdir.\n */\nasync function getWranglerOutDir(deployScript: string): Promise<string> {\n const pkgJson = await getPackageDotJson();\n const scripts = pkgJson.scripts ?? {};\n const deployCommand = scripts[deployScript];\n\n if (!deployCommand) {\n return DIST_DIR;\n }\n\n return findOutDir(deployCommand);\n}\n\n/**\n * only exported for testing\n */\nexport function findOutDir(deployCommand: string): string {\n const args = getWranglerDeployCommand(deployCommand)\n ?.split(' ')\n .map((arg) => arg.trim());\n\n if (!args) {\n return DIST_DIR;\n }\n\n const outDirArgIndex = args.findIndex((arg) => arg.startsWith('--outdir'));\n if (outDirArgIndex === -1) {\n return DIST_DIR;\n }\n\n const outDirArg = args[outDirArgIndex];\n\n if (outDirArg.startsWith('--outdir=')) {\n return outDirArg.split('=')[1].trim().replace(/['\"]/g, '');\n }\n\n const maybeOutDir = args[outDirArgIndex + 1];\n\n if (maybeOutDir && !maybeOutDir.startsWith('--')) {\n return maybeOutDir.replace(/['\"]/g, '');\n }\n\n return DIST_DIR;\n}\n\n/**\n * Exported for testing\n */\nexport function getWranglerDeployCommand(deployCommand: string) {\n const individualCommands = deployCommand.split(/&&|\\|\\||>>|>|<|\\||;/);\n\n const originalWranglerDeployCommand = individualCommands.find((cmd) => {\n const argv = cmd\n .split(' ')\n .map((arg) => arg.trim())\n .filter(Boolean);\n\n return argv[0] === 'wrangler' && argv.includes('deploy');\n });\n return originalWranglerDeployCommand;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wrangler.js","sourceRoot":"","sources":["../../../../src/sourcemaps/tools/wrangler.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n abort,\n abortIfCancelled,\n addSentryCliConfig,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n showCopyPasteInstructions,\n} from '../../utils/clack';\nimport { hasPackageInstalled } from '../../utils/package-json';\nimport { NPM } from '../../utils/package-manager';\nimport type { SourceMapUploadToolConfigurationOptions } from './types';\nimport path from 'path';\nimport fs from 'fs';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nconst SENTRY_NPM_SCRIPT_NAME = 'sentry:sourcemaps';\n\n/**\n * only exported for testing\n */\nexport const DIST_DIR = path.join('.', 'dist');\n\nexport async function configureWrangler(\n options: SourceMapUploadToolConfigurationOptions,\n) {\n clack.note(\n chalk.whiteBright(\n `Configuring source maps upload with Cloudflare Wrangler requires the wizard to:\n- Modify your deploy command to access source maps\n- Set the SENTRY_RELEASE env var to identify source maps\n\nNote: This setup may need additional configuration. \nWe recommend using Vite to build your worker instead, for an easier and more reliable setup.\n\nLearn more about CloudFlare's Vite setup here:\n${chalk.underline(\n chalk.cyan(\n 'https://developers.cloudflare.com/workers/vite-plugin/get-started/',\n ),\n)}\n\nYou can switch to Vite and re-run this wizard later. \nOtherwise, let's proceed with the Wrangler setup.`,\n ),\n 'Before we get started',\n );\n\n const proceed = await abortIfCancelled(\n clack.confirm({\n message: 'Do you want to proceed with the Wrangler setup?',\n }),\n );\n\n if (!proceed) {\n await abort(\n 'Got it! You can switch to Vite and re-run this wizard later.',\n 0,\n );\n return;\n }\n\n await installPackage({\n packageName: '@sentry/cli@^2',\n alreadyInstalled: hasPackageInstalled(\n '@sentry/cli',\n await getPackageDotJson(),\n ),\n devDependency: true,\n });\n\n if (!(await askContinueIfHasSentrySourcemapsScript())) {\n return;\n }\n\n const deployCommand = await getDeployCommand();\n if (!deployCommand) {\n return;\n }\n\n const outDir = await getWranglerOutDir(deployCommand);\n\n await createAndAddSentrySourcemapsScript({ ...options, outDir });\n\n await writePostDeployCommand(deployCommand);\n\n await modifyDeployCommand(deployCommand, outDir);\n\n await addSentryCliConfig({ authToken: options.authToken });\n}\n\nasync function createAndAddSentrySourcemapsScript(\n options: SourceMapUploadToolConfigurationOptions & { outDir: string },\n) {\n const pkgJson = await getPackageDotJson();\n pkgJson.scripts = pkgJson.scripts ?? {};\n pkgJson.scripts[SENTRY_NPM_SCRIPT_NAME] = getSentryCliCommand(options);\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(pkgJson, null, 2),\n );\n\n clack.log.success(\n `Added a ${chalk.cyan(SENTRY_NPM_SCRIPT_NAME)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\n/**\n * only exported for testing\n */\nexport function getSentryCliCommand(\n options: SourceMapUploadToolConfigurationOptions & { outDir: string },\n) {\n const sentryCliOptions = options.selfHosted ? ` --url ${options.url}` : '';\n const orgAndProjectArgs = `--org=${options.orgSlug} --project=${options.projectSlug}`;\n\n const stripPrefixPath = `${options.outDir}${path.sep}..`;\n\n return [\n '_SENTRY_RELEASE=$(sentry-cli releases propose-version)',\n `sentry-cli${sentryCliOptions} releases new $_SENTRY_RELEASE ${orgAndProjectArgs}`,\n `sentry-cli${sentryCliOptions} sourcemaps upload ${orgAndProjectArgs} --release=$_SENTRY_RELEASE --strip-prefix '${stripPrefixPath}' ${options.outDir}`,\n ].join(' && ');\n}\n\nasync function askContinueIfHasSentrySourcemapsScript(): Promise<boolean> {\n const pkgJson = await getPackageDotJson();\n\n pkgJson.scripts = pkgJson.scripts ?? {};\n\n if (pkgJson.scripts[SENTRY_NPM_SCRIPT_NAME]) {\n clack.log.warn(\n `The ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script already exists in your ${chalk.cyan('package.json')}.\nThis likely means that you already ran this wizard once.\nIf things don't work yet, try overwriting the script and continue with the wizard.`,\n );\n\n const overwrite = await abortIfCancelled(\n clack.select({\n message: 'Do you want to overwrite it?',\n options: [\n { label: 'Yes', value: true, hint: 'Overwrite the existing script' },\n { label: 'No', value: false, hint: 'This will exit the wizard' },\n ],\n }),\n );\n\n if (!overwrite) {\n return false;\n }\n }\n\n return true;\n}\n\nasync function getDeployCommand(): Promise<string | undefined> {\n const pkgJson = await getPackageDotJson();\n const scripts = pkgJson.scripts ?? {};\n\n let deployCommand = Object.keys(scripts).find((key) =>\n /wrangler\\s+deploy/.test(scripts[key] ?? ''),\n );\n\n const packageManager = await getPackageManager(NPM);\n const isDeployCommand =\n !!deployCommand &&\n (await abortIfCancelled(\n clack.confirm({\n message: `Is ${chalk.cyan(\n `${packageManager.runScriptCommand} ${deployCommand}`,\n )} your build and deploy command?`,\n }),\n ));\n\n if (Object.keys(scripts).length && (!deployCommand || !isDeployCommand)) {\n deployCommand = await abortIfCancelled(\n clack.select({\n message: `Which ${packageManager.name} command in your ${chalk.cyan(\n 'package.json',\n )} builds your worker and deploys it?`,\n options: Object.keys(scripts)\n .map((script) => ({\n label: script,\n value: script,\n }))\n .concat({ label: 'None of the above', value: 'none' }),\n }),\n );\n }\n\n if (!deployCommand || deployCommand === 'none') {\n clack.log.warn(\n `We can only add the ${chalk.cyan(\n SENTRY_NPM_SCRIPT_NAME,\n )} script to another \\`script\\` in your ${chalk.cyan('package.json')}.\nPlease add it manually to your prod build command.`,\n );\n return undefined;\n }\n\n return deployCommand;\n}\n\nasync function writePostDeployCommand(deployCommand: string): Promise<void> {\n const pkgJson = await getPackageDotJson();\n const packageManager = await getPackageManager(NPM);\n pkgJson.scripts = pkgJson.scripts ?? {};\n pkgJson.scripts[\n `post${deployCommand}`\n ] = `${packageManager.runScriptCommand} ${SENTRY_NPM_SCRIPT_NAME}`;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(pkgJson, null, 2),\n );\n\n clack.log.success(\n `Added a ${chalk.cyan(`post${deployCommand}`)} script to your ${chalk.cyan(\n 'package.json',\n )}.`,\n );\n}\n\nasync function modifyDeployCommand(\n deployCommand: string,\n outDir: string,\n): Promise<void> {\n const pkgJson = await getPackageDotJson();\n pkgJson.scripts = pkgJson.scripts ?? {};\n const oldDeployCommand = pkgJson.scripts[deployCommand];\n\n if (!oldDeployCommand) {\n clack.log.warn(\n `The ${chalk.cyan(\n deployCommand,\n )} script doesn't seem to be part of your package.json scripts anymore. Cannot modify it. Please modify it manually:`,\n );\n\n await showCopyPasteInstructions({\n codeSnippet: `wrangler deploy --outdir ${outDir} --var SENTRY_RELEASE:$(sentry-cli releases propose-version) --upload-source-maps`,\n filename: 'package.json',\n });\n\n return;\n }\n\n const newDeployCommand = safeInsertArgsToWranglerDeployCommand(\n oldDeployCommand,\n outDir,\n );\n\n if (!newDeployCommand) {\n clack.log.warn(\n `The ${chalk.cyan(\n deployCommand,\n )} script doesn't seem to be a valid ${chalk.cyan(\n 'wrangler deploy',\n )} command. Cannot modify it. Please modify it manually:`,\n );\n\n await showCopyPasteInstructions({\n codeSnippet: oldDeployCommand,\n filename: 'package.json',\n });\n\n return;\n }\n\n pkgJson.scripts[deployCommand] = newDeployCommand;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), 'package.json'),\n JSON.stringify(pkgJson, null, 2),\n );\n\n clack.log.success(\n `Modified your ${chalk.cyan(\n deployCommand,\n )} script to enable uploading source maps.`,\n );\n}\n\n/**\n * Takes care of inserting the necessary arguments into the deploy command.\n * Ensures that existing arguments and values are kept and that the\n * wrangler deploy command is valid.\n *\n * only exported for testing\n */\nexport function safeInsertArgsToWranglerDeployCommand(\n deployCommand: string,\n outDir: string,\n): string | undefined {\n // split deployCommand into individual bash commands (potentially separated by &&, ||, >> etc.)\n const originalWranglerDeployCommand = getWranglerDeployCommand(deployCommand);\n\n if (!originalWranglerDeployCommand) {\n return undefined;\n }\n\n const existingArgs = originalWranglerDeployCommand\n .split(' ')\n .map((arg) => arg.trim())\n .filter(Boolean);\n\n const parsedArgs = yargs(hideBin(existingArgs)).parse();\n\n const newArgs = [];\n\n if (!parsedArgs.outdir) {\n newArgs.push('--outdir', outDir);\n }\n\n // Adding --upload-source-maps saves us from having to\n // modify the `wrangler.toml` or `wrangler.jsonc` files.\n // Not ideal because this forces source maps to be uploaded\n // but we'll live with it for now.\n if (!parsedArgs['upload-source-maps']) {\n newArgs.push('--upload-source-maps');\n }\n\n // This is how we inject the SENTRY_RELEASE variable,\n // which is picked up by the CloudFlare SDK.\n // multiple --var arguments are allowed, so no need to check for existing --var arguments.\n newArgs.push(\n '--var',\n 'SENTRY_RELEASE:$(sentry-cli releases propose-version)',\n );\n\n return deployCommand\n .replace(\n originalWranglerDeployCommand,\n `${originalWranglerDeployCommand} ${newArgs.join(' ')} `,\n )\n .trim();\n}\n\n/**\n * Look up an already specified --outdir argument and return it if found.\n * Otherwise, we defined `dist` as the default outdir.\n */\nasync function getWranglerOutDir(deployScript: string): Promise<string> {\n const pkgJson = await getPackageDotJson();\n const scripts = pkgJson.scripts ?? {};\n const deployCommand = scripts[deployScript];\n\n if (!deployCommand) {\n return DIST_DIR;\n }\n\n return findOutDir(deployCommand);\n}\n\n/**\n * only exported for testing\n */\nexport function findOutDir(deployCommand: string): string {\n const args = getWranglerDeployCommand(deployCommand)\n ?.split(' ')\n .map((arg) => arg.trim());\n\n if (!args) {\n return DIST_DIR;\n }\n\n const outDirArgIndex = args.findIndex((arg) => arg.startsWith('--outdir'));\n if (outDirArgIndex === -1) {\n return DIST_DIR;\n }\n\n const outDirArg = args[outDirArgIndex];\n\n if (outDirArg.startsWith('--outdir=')) {\n return outDirArg.split('=')[1].trim().replace(/['\"]/g, '');\n }\n\n const maybeOutDir = args[outDirArgIndex + 1];\n\n if (maybeOutDir && !maybeOutDir.startsWith('--')) {\n return maybeOutDir.replace(/['\"]/g, '');\n }\n\n return DIST_DIR;\n}\n\n/**\n * Exported for testing\n */\nexport function getWranglerDeployCommand(deployCommand: string) {\n const individualCommands = deployCommand.split(/&&|\\|\\||>>|>|<|\\||;/);\n\n const originalWranglerDeployCommand = individualCommands.find((cmd) => {\n const argv = cmd\n .split(' ')\n .map((arg) => arg.trim())\n .filter(Boolean);\n\n return argv[0] === 'wrangler' && argv.includes('deploy');\n });\n return originalWranglerDeployCommand;\n}\n"]}
|
|
@@ -40,6 +40,7 @@ const sdk_example_1 = require("./sdk-example");
|
|
|
40
40
|
const setup_1 = require("./sdk-setup/setup");
|
|
41
41
|
const svelte_config_1 = require("./sdk-setup/svelte-config");
|
|
42
42
|
const utils_1 = require("./utils");
|
|
43
|
+
const abort_if_sportlight_not_supported_1 = require("../utils/abort-if-sportlight-not-supported");
|
|
43
44
|
async function runSvelteKitWizard(options) {
|
|
44
45
|
return (0, telemetry_1.withTelemetry)({
|
|
45
46
|
enabled: options.telemetryEnabled,
|
|
@@ -84,14 +85,14 @@ async function runSvelteKitWizardWithTelemetry(options) {
|
|
|
84
85
|
}
|
|
85
86
|
let setupForSvelteKitTracing = kitVersionBucket === '>=2.31.0';
|
|
86
87
|
if (kitVersionBucket !== '>=2.31.0') {
|
|
87
|
-
clack.log.warn(`It seems you're using a SvelteKit version ${chalk_1.default.cyan('<2.31.0')} (detected ${chalk_1.default.cyan(kitVersion ?? 'unknown')}).
|
|
88
|
+
clack.log.warn(`It seems you're using a SvelteKit version ${chalk_1.default.cyan('<2.31.0')} (detected ${chalk_1.default.cyan(kitVersion ?? 'unknown')}).
|
|
88
89
|
|
|
89
90
|
We recommend upgrading SvelteKit to version ${chalk_1.default.cyan('>=2.31.0')} to use SvelteKit's builtin observability:
|
|
90
91
|
${chalk_1.default.cyan('https://svelte.dev/docs/kit/observability')}
|
|
91
92
|
|
|
92
93
|
Sentry works best with SvelteKit versions ${chalk_1.default.cyan('>=2.31.0')}.
|
|
93
94
|
|
|
94
|
-
If you prefer, you can stay on your current version and use the Sentry SDK
|
|
95
|
+
If you prefer, you can stay on your current version and use the Sentry SDK
|
|
95
96
|
without SvelteKit's builtin observability.`);
|
|
96
97
|
const decision = await (0, clack_1.abortIfCancelled)(clack.select({
|
|
97
98
|
message: 'Do you want to continue anyway?',
|
|
@@ -125,10 +126,7 @@ without SvelteKit's builtin observability.`);
|
|
|
125
126
|
Sentry.setTag('svelte-version', svelteVersionBucket);
|
|
126
127
|
const projectData = await (0, clack_1.getOrAskForProjectData)(options, 'javascript-sveltekit');
|
|
127
128
|
if (projectData.spotlight) {
|
|
128
|
-
|
|
129
|
-
clack.log.info('Spotlight is currently only available for Next.js.');
|
|
130
|
-
await (0, clack_1.abort)('Exiting wizard', 0);
|
|
131
|
-
return;
|
|
129
|
+
return (0, abort_if_sportlight_not_supported_1.abortIfSpotlightNotSupported)('SvelteKit');
|
|
132
130
|
}
|
|
133
131
|
const { selectedProject, selfHosted, sentryUrl, authToken } = projectData;
|
|
134
132
|
const sdkAlreadyInstalled = (0, package_json_1.hasPackageInstalled)('@sentry/sveltekit', packageJson);
|