@sentry/wizard 3.42.1 → 4.0.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/.node-cache/node-v22.14.0-darwin-arm64 +0 -0
- package/.node-cache/node-v22.14.0-darwin-x64 +0 -0
- package/.node-cache/node-v22.14.0-linux-arm64 +0 -0
- package/.node-cache/node-v22.14.0-linux-x64 +0 -0
- package/.node-cache/node-v22.14.0-win-x64.exe +0 -0
- package/CHANGELOG.md +26 -0
- package/COPYING +3575 -0
- package/bin.ts +85 -80
- package/dist/bin.js +44 -35
- package/dist/bin.js.map +1 -1
- package/dist/e2e-tests/jest.config.js +1 -1
- package/dist/e2e-tests/jest.config.js.map +1 -1
- package/dist/e2e-tests/tests/flutter.test.js +62 -147
- package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs.test.js +77 -175
- package/dist/e2e-tests/tests/nextjs.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-3.test.js +61 -162
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-4.test.js +62 -163
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
- package/dist/e2e-tests/tests/remix.test.js +147 -189
- package/dist/e2e-tests/tests/remix.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit.test.js +133 -187
- package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.d.ts +1 -1
- package/dist/e2e-tests/utils/index.js +113 -195
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/lib/Constants.js +5 -5
- package/dist/lib/Constants.js.map +1 -1
- package/dist/lib/Helper/BottomBar.d.ts +1 -1
- package/dist/lib/Helper/BottomBar.js +14 -15
- package/dist/lib/Helper/BottomBar.js.map +1 -1
- package/dist/lib/Helper/Env.js +5 -2
- package/dist/lib/Helper/Env.js.map +1 -1
- package/dist/lib/Helper/File.js +14 -27
- package/dist/lib/Helper/File.js.map +1 -1
- package/dist/lib/Helper/Git.js +24 -59
- package/dist/lib/Helper/Git.js.map +1 -1
- package/dist/lib/Helper/Logging.js +2 -2
- package/dist/lib/Helper/Logging.js.map +1 -1
- package/dist/lib/Helper/MergeConfig.js +4 -4
- package/dist/lib/Helper/MergeConfig.js.map +1 -1
- package/dist/lib/Helper/Package.d.ts +4 -1
- package/dist/lib/Helper/Package.js +12 -38
- package/dist/lib/Helper/Package.js.map +1 -1
- package/dist/lib/Helper/SentryCli.js +77 -149
- package/dist/lib/Helper/SentryCli.js.map +1 -1
- package/dist/lib/Helper/Wizard.js +29 -124
- package/dist/lib/Helper/Wizard.js.map +1 -1
- package/dist/lib/Helper/__tests__/File.js +4 -4
- package/dist/lib/Helper/__tests__/File.js.map +1 -1
- package/dist/lib/Helper/__tests__/MergeConfig.js +24 -24
- package/dist/lib/Helper/__tests__/MergeConfig.js.map +1 -1
- package/dist/lib/Helper/__tests__/SentryCli.js +33 -23
- package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
- package/dist/lib/Setup.js +23 -85
- package/dist/lib/Setup.js.map +1 -1
- package/dist/lib/Steps/BaseStep.js +8 -8
- package/dist/lib/Steps/BaseStep.js.map +1 -1
- package/dist/lib/Steps/ChooseIntegration.js +80 -125
- package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
- package/dist/lib/Steps/ConfigureProject.js +6 -66
- package/dist/lib/Steps/ConfigureProject.js.map +1 -1
- package/dist/lib/Steps/Initial.js +16 -104
- package/dist/lib/Steps/Initial.js.map +1 -1
- package/dist/lib/Steps/Integrations/BaseIntegration.js +24 -118
- package/dist/lib/Steps/Integrations/BaseIntegration.js.map +1 -1
- package/dist/lib/Steps/Integrations/Cordova.js +95 -183
- package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
- package/dist/lib/Steps/Integrations/Electron.js +87 -145
- package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
- package/dist/lib/Steps/Integrations/MobileProject.js +40 -148
- package/dist/lib/Steps/Integrations/MobileProject.js.map +1 -1
- package/dist/lib/Steps/OpenSentry.js +63 -126
- package/dist/lib/Steps/OpenSentry.js.map +1 -1
- package/dist/lib/Steps/PromptForParameters.js +110 -206
- package/dist/lib/Steps/PromptForParameters.js.map +1 -1
- package/dist/lib/Steps/Result.js +19 -79
- package/dist/lib/Steps/Result.js.map +1 -1
- package/dist/lib/Steps/SentryProjectSelector.js +57 -148
- package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
- package/dist/lib/Steps/ShouldConfigure.js +6 -66
- package/dist/lib/Steps/ShouldConfigure.js.map +1 -1
- package/dist/lib/Steps/WaitForSentry.js +43 -120
- package/dist/lib/Steps/WaitForSentry.js.map +1 -1
- package/dist/lib/Steps/Welcome.js +17 -76
- package/dist/lib/Steps/Welcome.js.map +1 -1
- package/dist/lib/__tests__/Env.js +3 -3
- package/dist/lib/__tests__/Env.js.map +1 -1
- package/dist/src/android/android-wizard.js +100 -176
- package/dist/src/android/android-wizard.js.map +1 -1
- package/dist/src/android/code-tools.js +24 -33
- package/dist/src/android/code-tools.js.map +1 -1
- package/dist/src/android/gradle.js +106 -165
- package/dist/src/android/gradle.js.map +1 -1
- package/dist/src/android/manifest.js +26 -27
- package/dist/src/android/manifest.js.map +1 -1
- package/dist/src/android/templates.js +76 -23
- package/dist/src/android/templates.js.map +1 -1
- package/dist/src/apple/apple-wizard.js +129 -225
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/apple/cocoapod.js +47 -109
- package/dist/src/apple/cocoapod.js.map +1 -1
- package/dist/src/apple/code-tools.js +32 -35
- package/dist/src/apple/code-tools.js.map +1 -1
- package/dist/src/apple/fastlane.js +51 -97
- package/dist/src/apple/fastlane.js.map +1 -1
- package/dist/src/apple/templates.js +41 -5
- package/dist/src/apple/templates.js.map +1 -1
- package/dist/src/apple/xcode-manager.d.ts +2 -2
- package/dist/src/apple/xcode-manager.js +93 -108
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/flutter/code-tools.js +79 -127
- package/dist/src/flutter/code-tools.js.map +1 -1
- package/dist/src/flutter/flutter-wizard.js +75 -136
- package/dist/src/flutter/flutter-wizard.js.map +1 -1
- package/dist/src/flutter/templates.js +48 -12
- package/dist/src/flutter/templates.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +527 -805
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.js +380 -40
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/nextjs/utils.js +5 -5
- package/dist/src/nextjs/utils.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +91 -188
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/nuxt/sdk-example.js +68 -137
- package/dist/src/nuxt/sdk-example.js.map +1 -1
- package/dist/src/nuxt/sdk-setup.d.ts +4 -4
- package/dist/src/nuxt/sdk-setup.js +180 -336
- package/dist/src/nuxt/sdk-setup.js.map +1 -1
- package/dist/src/nuxt/templates.js +195 -18
- package/dist/src/nuxt/templates.js.map +1 -1
- package/dist/src/nuxt/utils.js +29 -76
- package/dist/src/nuxt/utils.js.map +1 -1
- package/dist/src/react-native/expo-env-file.js +41 -94
- package/dist/src/react-native/expo-env-file.js.map +1 -1
- package/dist/src/react-native/expo-metro.d.ts +1 -1
- package/dist/src/react-native/expo-metro.js +75 -130
- package/dist/src/react-native/expo-metro.js.map +1 -1
- package/dist/src/react-native/expo.js +61 -114
- package/dist/src/react-native/expo.js.map +1 -1
- package/dist/src/react-native/git.js +23 -56
- package/dist/src/react-native/git.js.map +1 -1
- package/dist/src/react-native/glob.js +3 -3
- package/dist/src/react-native/glob.js.map +1 -1
- package/dist/src/react-native/gradle.js +4 -4
- package/dist/src/react-native/gradle.js.map +1 -1
- package/dist/src/react-native/javascript.js +51 -95
- package/dist/src/react-native/javascript.js.map +1 -1
- package/dist/src/react-native/metro.js +176 -296
- package/dist/src/react-native/metro.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +267 -418
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/react-native/uninstall.js +37 -80
- package/dist/src/react-native/uninstall.js.map +1 -1
- package/dist/src/react-native/xcode.js +57 -55
- package/dist/src/react-native/xcode.js.map +1 -1
- package/dist/src/remix/codemods/express-server.js +27 -82
- package/dist/src/remix/codemods/express-server.js.map +1 -1
- package/dist/src/remix/codemods/handle-error.js +28 -31
- package/dist/src/remix/codemods/handle-error.js.map +1 -1
- package/dist/src/remix/codemods/root-common.js +11 -11
- package/dist/src/remix/codemods/root-common.js.map +1 -1
- package/dist/src/remix/codemods/root-v1.js +17 -67
- package/dist/src/remix/codemods/root-v1.js.map +1 -1
- package/dist/src/remix/codemods/root-v2.js +89 -140
- package/dist/src/remix/codemods/root-v2.js.map +1 -1
- package/dist/src/remix/remix-wizard.js +181 -343
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/remix/sdk-example.js +84 -66
- package/dist/src/remix/sdk-example.js.map +1 -1
- package/dist/src/remix/sdk-setup.js +161 -293
- package/dist/src/remix/sdk-setup.js.map +1 -1
- package/dist/src/remix/templates.js +10 -2
- package/dist/src/remix/templates.js.map +1 -1
- package/dist/src/remix/utils.js +13 -14
- package/dist/src/remix/utils.js.map +1 -1
- package/dist/src/run.js +106 -178
- package/dist/src/run.js.map +1 -1
- package/dist/src/sourcemaps/sourcemaps-wizard.js +248 -372
- package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
- package/dist/src/sourcemaps/tools/angular.js +32 -66
- package/dist/src/sourcemaps/tools/angular.js.map +1 -1
- package/dist/src/sourcemaps/tools/create-react-app.js +14 -59
- package/dist/src/sourcemaps/tools/create-react-app.js.map +1 -1
- package/dist/src/sourcemaps/tools/esbuild.js +34 -77
- package/dist/src/sourcemaps/tools/esbuild.js.map +1 -1
- package/dist/src/sourcemaps/tools/nextjs.d.ts +2 -2
- package/dist/src/sourcemaps/tools/nextjs.js +75 -102
- package/dist/src/sourcemaps/tools/nextjs.js.map +1 -1
- package/dist/src/sourcemaps/tools/remix.js +53 -93
- package/dist/src/sourcemaps/tools/remix.js.map +1 -1
- package/dist/src/sourcemaps/tools/rollup.js +35 -76
- package/dist/src/sourcemaps/tools/rollup.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +157 -289
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/tsc.js +68 -134
- package/dist/src/sourcemaps/tools/tsc.js.map +1 -1
- package/dist/src/sourcemaps/tools/vite.js +111 -196
- package/dist/src/sourcemaps/tools/vite.js.map +1 -1
- package/dist/src/sourcemaps/tools/webpack.d.ts +1 -1
- package/dist/src/sourcemaps/tools/webpack.js +158 -260
- package/dist/src/sourcemaps/tools/webpack.js.map +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.js +9 -54
- package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
- package/dist/src/sourcemaps/utils/other-wizards.js +77 -144
- package/dist/src/sourcemaps/utils/other-wizards.js.map +1 -1
- package/dist/src/sourcemaps/utils/sdk-version.js +112 -191
- package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -1
- package/dist/src/sveltekit/sdk-example.js +20 -70
- package/dist/src/sveltekit/sdk-example.js.map +1 -1
- package/dist/src/sveltekit/sdk-setup.js +250 -411
- package/dist/src/sveltekit/sdk-setup.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +107 -191
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/sveltekit/templates.js +147 -13
- package/dist/src/sveltekit/templates.js.map +1 -1
- package/dist/src/sveltekit/utils.js +3 -3
- package/dist/src/sveltekit/utils.js.map +1 -1
- package/dist/src/telemetry.d.ts +2 -2
- package/dist/src/telemetry.js +58 -108
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/utils/ast-utils.js +39 -54
- package/dist/src/utils/ast-utils.js.map +1 -1
- package/dist/src/utils/bash.js +28 -75
- package/dist/src/utils/bash.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +3 -7
- package/dist/src/utils/clack-utils.js +688 -1083
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/src/utils/debug.js +6 -10
- package/dist/src/utils/debug.js.map +1 -1
- package/dist/src/utils/package-json.js +5 -6
- package/dist/src/utils/package-json.js.map +1 -1
- package/dist/src/utils/package-manager.js +65 -139
- package/dist/src/utils/package-manager.js.map +1 -1
- package/dist/src/utils/release-registry.js +12 -59
- package/dist/src/utils/release-registry.js.map +1 -1
- package/dist/src/utils/semver.js +3 -4
- package/dist/src/utils/semver.js.map +1 -1
- package/dist/src/utils/sentrycli-utils.js +4 -4
- package/dist/src/utils/sentrycli-utils.js.map +1 -1
- package/dist/src/utils/url.js +5 -6
- package/dist/src/utils/url.js.map +1 -1
- package/dist/test/android/code-tools.test.js +18 -18
- package/dist/test/android/code-tools.test.js.map +1 -1
- package/dist/test/apple/cocoapod.test.js +154 -299
- package/dist/test/apple/cocoapod.test.js.map +1 -1
- package/dist/test/apple/code-tools.test.js +375 -263
- package/dist/test/apple/code-tools.test.js.map +1 -1
- package/dist/test/apple/fastfile.test.js +319 -271
- package/dist/test/apple/fastfile.test.js.map +1 -1
- package/dist/test/apple/templates.test.js +114 -30
- package/dist/test/apple/templates.test.js.map +1 -1
- package/dist/test/apple/xcode-manager.test.js +230 -234
- package/dist/test/apple/xcode-manager.test.js.map +1 -1
- package/dist/test/flutter/code-tools.test.js +119 -48
- package/dist/test/flutter/code-tools.test.js.map +1 -1
- package/dist/test/flutter/templates.test.js +63 -20
- package/dist/test/flutter/templates.test.js.map +1 -1
- package/dist/test/nextjs/templates.test.js +332 -43
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/nuxt/templates.test.js +161 -33
- package/dist/test/nuxt/templates.test.js.map +1 -1
- package/dist/test/react-native/expo-metro.test.js +61 -15
- package/dist/test/react-native/expo-metro.test.js.map +1 -1
- package/dist/test/react-native/expo.test.js +37 -17
- package/dist/test/react-native/expo.test.js.map +1 -1
- package/dist/test/react-native/gradle.test.js +260 -28
- package/dist/test/react-native/gradle.test.js.map +1 -1
- package/dist/test/react-native/javascript.test.js +85 -19
- package/dist/test/react-native/javascript.test.js.map +1 -1
- package/dist/test/react-native/metro.test.js +261 -187
- package/dist/test/react-native/metro.test.js.map +1 -1
- package/dist/test/react-native/xcode.test.js +243 -62
- package/dist/test/react-native/xcode.test.js.map +1 -1
- package/dist/test/remix/client-entry.test.js +81 -21
- package/dist/test/remix/client-entry.test.js.map +1 -1
- package/dist/test/remix/server-instrumentation.test.js +21 -8
- package/dist/test/remix/server-instrumentation.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/sentry-cli.test.js +20 -72
- package/dist/test/sourcemaps/tools/sentry-cli.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/tsc.test.js +142 -68
- package/dist/test/sourcemaps/tools/tsc.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/vite.test.js +106 -75
- package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/webpack.test.js +226 -102
- package/dist/test/sourcemaps/tools/webpack.test.js.map +1 -1
- package/dist/test/sveltekit/templates.test.js +117 -18
- package/dist/test/sveltekit/templates.test.js.map +1 -1
- package/dist/test/utils/ast-utils.test.js +99 -58
- package/dist/test/utils/ast-utils.test.js.map +1 -1
- package/dist/test/utils/clack-utils.test.js +142 -247
- package/dist/test/utils/clack-utils.test.js.map +1 -1
- package/e2e-tests/package.json +1 -1
- package/e2e-tests/tests/flutter.test.ts +20 -20
- package/e2e-tests/tests/nextjs.test.ts +2 -2
- package/e2e-tests/tests/nuxt-3.test.ts +4 -4
- package/e2e-tests/tests/nuxt-4.test.ts +3 -3
- package/e2e-tests/tests/remix.test.ts +3 -3
- package/e2e-tests/tests/sveltekit.test.ts +3 -3
- package/e2e-tests/utils/index.ts +33 -15
- package/lib/Helper/BottomBar.ts +1 -1
- package/lib/Helper/Env.ts +1 -1
- package/lib/Helper/Package.ts +12 -10
- package/lib/Helper/SentryCli.ts +18 -27
- package/lib/Helper/Wizard.ts +1 -2
- package/lib/Setup.ts +4 -5
- package/lib/Steps/ChooseIntegration.ts +40 -8
- package/lib/Steps/Initial.ts +17 -26
- package/lib/Steps/Integrations/BaseIntegration.ts +2 -8
- package/lib/Steps/Integrations/Cordova.ts +9 -15
- package/lib/Steps/Integrations/Electron.ts +23 -20
- package/lib/Steps/Integrations/MobileProject.ts +18 -15
- package/lib/Steps/OpenSentry.ts +12 -7
- package/lib/Steps/PromptForParameters.ts +12 -19
- package/lib/Steps/SentryProjectSelector.ts +30 -29
- package/lib/Steps/WaitForSentry.ts +29 -23
- package/package.json +12 -8
- package/src/apple/xcode-manager.ts +10 -10
- package/src/nextjs/templates.ts +2 -3
- package/src/nuxt/sdk-setup.ts +21 -18
- package/src/react-native/expo-metro.ts +2 -2
- package/src/react-native/react-native-wizard.ts +1 -2
- package/src/react-native/uninstall.ts +1 -2
- package/src/react-native/xcode.ts +1 -1
- package/src/run.ts +12 -5
- package/src/sourcemaps/tools/nextjs.ts +2 -2
- package/src/sourcemaps/tools/webpack.ts +3 -3
- package/src/telemetry.ts +27 -7
- package/src/utils/clack-utils.ts +50 -47
- package/test/apple/cocoapod.test.ts +4 -0
- package/test/apple/fastfile.test.ts +12 -7
- package/test/apple/xcode-manager.test.ts +13 -11
- package/test/utils/clack-utils.test.ts +40 -50
- package/types/read-env.d.ts +3 -0
- package/types/xcode.d.ts +1 -0
- package/dist/package.json +0 -128
|
@@ -23,83 +23,47 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
__setModuleDefault(result, mod);
|
|
24
24
|
return result;
|
|
25
25
|
};
|
|
26
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
27
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
28
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
29
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
30
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
31
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
32
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
36
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
37
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
38
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
39
|
-
function step(op) {
|
|
40
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
41
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
42
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
43
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
44
|
-
switch (op[0]) {
|
|
45
|
-
case 0: case 1: t = op; break;
|
|
46
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
47
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
48
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
49
|
-
default:
|
|
50
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
51
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
52
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
53
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
54
|
-
if (t[2]) _.ops.pop();
|
|
55
|
-
_.trys.pop(); continue;
|
|
56
|
-
}
|
|
57
|
-
op = body.call(thisArg, _);
|
|
58
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
59
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
26
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
63
27
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
64
28
|
};
|
|
65
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
30
|
exports.instrumentSentryOnEntryServer = exports.updateStartScript = exports.initializeSentryOnEntryClient = exports.updateEntryClientMod = exports.updateBuildScript = exports.instrumentRootRoute = exports.loadRemixConfig = exports.isRemixV2 = exports.insertServerInstrumentationFile = exports.createServerInstrumentationFile = exports.generateServerInstrumentationFile = exports.runRemixReveal = void 0;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
31
|
+
const fs = __importStar(require("fs"));
|
|
32
|
+
const path = __importStar(require("path"));
|
|
33
|
+
const url = __importStar(require("url"));
|
|
34
|
+
const childProcess = __importStar(require("child_process"));
|
|
71
35
|
// @ts-expect-error - clack is ESM and TS complains about that. It works though
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
36
|
+
const prompts_1 = __importDefault(require("@clack/prompts"));
|
|
37
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
38
|
+
const semver_1 = require("semver");
|
|
39
|
+
const magicast_1 = require("magicast");
|
|
40
|
+
const package_json_1 = require("../utils/package-json");
|
|
41
|
+
const utils_1 = require("./utils");
|
|
42
|
+
const root_v1_1 = require("./codemods/root-v1");
|
|
43
|
+
const root_v2_1 = require("./codemods/root-v2");
|
|
44
|
+
const handle_error_1 = require("./codemods/handle-error");
|
|
45
|
+
const clack_utils_1 = require("../utils/clack-utils");
|
|
46
|
+
const express_server_1 = require("./codemods/express-server");
|
|
47
|
+
const REMIX_CONFIG_FILE = 'remix.config.js';
|
|
48
|
+
const REMIX_REVEAL_COMMAND = 'npx remix reveal';
|
|
85
49
|
function runRemixReveal(isTS) {
|
|
86
50
|
// Check if entry files already exist
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
51
|
+
const clientEntryFilename = `entry.client.${isTS ? 'tsx' : 'jsx'}`;
|
|
52
|
+
const serverEntryFilename = `entry.server.${isTS ? 'tsx' : 'jsx'}`;
|
|
53
|
+
const clientEntryPath = path.join(process.cwd(), 'app', clientEntryFilename);
|
|
54
|
+
const serverEntryPath = path.join(process.cwd(), 'app', serverEntryFilename);
|
|
91
55
|
if (fs.existsSync(clientEntryPath) && fs.existsSync(serverEntryPath)) {
|
|
92
|
-
prompts_1.default.log.info(
|
|
56
|
+
prompts_1.default.log.info(`Found entry files ${chalk_1.default.cyan(clientEntryFilename)} and ${chalk_1.default.cyan(serverEntryFilename)}.`);
|
|
93
57
|
}
|
|
94
58
|
else {
|
|
95
|
-
prompts_1.default.log.info(
|
|
59
|
+
prompts_1.default.log.info(`Couldn't find entry files in your project. Trying to run ${chalk_1.default.cyan(REMIX_REVEAL_COMMAND)}...`);
|
|
96
60
|
prompts_1.default.log.info(childProcess.execSync(REMIX_REVEAL_COMMAND).toString());
|
|
97
61
|
}
|
|
98
62
|
}
|
|
99
63
|
exports.runRemixReveal = runRemixReveal;
|
|
100
64
|
function getInitCallArgs(dsn, type, selectedFeatures) {
|
|
101
|
-
|
|
102
|
-
dsn
|
|
65
|
+
const initCallArgs = {
|
|
66
|
+
dsn,
|
|
103
67
|
};
|
|
104
68
|
// Adding tracing sample rate for both client and server
|
|
105
69
|
if (selectedFeatures.performance) {
|
|
@@ -126,10 +90,10 @@ function getInitCallArgs(dsn, type, selectedFeatures) {
|
|
|
126
90
|
return initCallArgs;
|
|
127
91
|
}
|
|
128
92
|
function insertClientInitCall(dsn, originalHooksMod, selectedFeatures) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
93
|
+
const initCallArgs = getInitCallArgs(dsn, 'client', selectedFeatures);
|
|
94
|
+
const initCall = magicast_1.builders.functionCall('Sentry.init', initCallArgs);
|
|
95
|
+
const originalHooksModAST = originalHooksMod.$ast;
|
|
96
|
+
const initCallInsertionIndex = (0, utils_1.getAfterImportsInsertionIndex)(originalHooksModAST);
|
|
133
97
|
originalHooksModAST.body.splice(initCallInsertionIndex, 0,
|
|
134
98
|
// @ts-expect-error - string works here because the AST is proxified by magicast
|
|
135
99
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
@@ -137,176 +101,118 @@ function insertClientInitCall(dsn, originalHooksMod, selectedFeatures) {
|
|
|
137
101
|
}
|
|
138
102
|
function generateServerInstrumentationFile(dsn, selectedFeatures) {
|
|
139
103
|
// create an empty file named `instrument.server.mjs`
|
|
140
|
-
|
|
141
|
-
|
|
104
|
+
const instrumentationFile = 'instrumentation.server.mjs';
|
|
105
|
+
const instrumentationFileMod = (0, magicast_1.parseModule)('');
|
|
142
106
|
instrumentationFileMod.imports.$add({
|
|
143
107
|
from: '@sentry/remix',
|
|
144
108
|
imported: '*',
|
|
145
109
|
local: 'Sentry',
|
|
146
110
|
});
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
111
|
+
const initCallArgs = getInitCallArgs(dsn, 'server', selectedFeatures);
|
|
112
|
+
const initCall = magicast_1.builders.functionCall('Sentry.init', initCallArgs);
|
|
113
|
+
const instrumentationFileModAST = instrumentationFileMod.$ast;
|
|
114
|
+
const initCallInsertionIndex = (0, utils_1.getAfterImportsInsertionIndex)(instrumentationFileModAST);
|
|
151
115
|
instrumentationFileModAST.body.splice(initCallInsertionIndex, 0,
|
|
152
116
|
// @ts-expect-error - string works here because the AST is proxified by magicast
|
|
153
117
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
154
118
|
(0, magicast_1.generateCode)(initCall).code);
|
|
155
|
-
return { instrumentationFile
|
|
119
|
+
return { instrumentationFile, instrumentationFileMod };
|
|
156
120
|
}
|
|
157
121
|
exports.generateServerInstrumentationFile = generateServerInstrumentationFile;
|
|
158
|
-
function createServerInstrumentationFile(dsn, selectedFeatures) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
switch (_b.label) {
|
|
163
|
-
case 0:
|
|
164
|
-
_a = generateServerInstrumentationFile(dsn, selectedFeatures), instrumentationFile = _a.instrumentationFile, instrumentationFileMod = _a.instrumentationFileMod;
|
|
165
|
-
return [4 /*yield*/, (0, magicast_1.writeFile)(instrumentationFileMod.$ast, instrumentationFile)];
|
|
166
|
-
case 1:
|
|
167
|
-
_b.sent();
|
|
168
|
-
return [2 /*return*/, instrumentationFile];
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
});
|
|
122
|
+
async function createServerInstrumentationFile(dsn, selectedFeatures) {
|
|
123
|
+
const { instrumentationFile, instrumentationFileMod } = generateServerInstrumentationFile(dsn, selectedFeatures);
|
|
124
|
+
await (0, magicast_1.writeFile)(instrumentationFileMod.$ast, instrumentationFile);
|
|
125
|
+
return instrumentationFile;
|
|
172
126
|
}
|
|
173
127
|
exports.createServerInstrumentationFile = createServerInstrumentationFile;
|
|
174
|
-
function insertServerInstrumentationFile(dsn, selectedFeatures) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
case 3:
|
|
190
|
-
originalExpressServerMod = _a.sent();
|
|
191
|
-
if ((0, utils_1.serverHasInstrumentationImport)(expressServerPath, originalExpressServerMod.$code)) {
|
|
192
|
-
prompts_1.default.log.warn("File ".concat(chalk_1.default.cyan(path.basename(expressServerPath)), " already contains instrumentation import.\nSkipping adding instrumentation functionality to ").concat(chalk_1.default.cyan(path.basename(expressServerPath)), "."));
|
|
193
|
-
return [2 /*return*/, true];
|
|
194
|
-
}
|
|
195
|
-
originalExpressServerMod.$code = "import './".concat(instrumentationFile, "';\n").concat(originalExpressServerMod.$code);
|
|
196
|
-
fs.writeFileSync(expressServerPath, originalExpressServerMod.$code);
|
|
197
|
-
return [2 /*return*/, true];
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
});
|
|
128
|
+
async function insertServerInstrumentationFile(dsn, selectedFeatures) {
|
|
129
|
+
const instrumentationFile = await createServerInstrumentationFile(dsn, selectedFeatures);
|
|
130
|
+
const expressServerPath = await (0, express_server_1.findCustomExpressServerImplementation)();
|
|
131
|
+
if (!expressServerPath) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
const originalExpressServerMod = await (0, magicast_1.loadFile)(expressServerPath);
|
|
135
|
+
if ((0, utils_1.serverHasInstrumentationImport)(expressServerPath, originalExpressServerMod.$code)) {
|
|
136
|
+
prompts_1.default.log.warn(`File ${chalk_1.default.cyan(path.basename(expressServerPath))} already contains instrumentation import.
|
|
137
|
+
Skipping adding instrumentation functionality to ${chalk_1.default.cyan(path.basename(expressServerPath))}.`);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
originalExpressServerMod.$code = `import './${instrumentationFile}';\n${originalExpressServerMod.$code}`;
|
|
141
|
+
fs.writeFileSync(expressServerPath, originalExpressServerMod.$code);
|
|
142
|
+
return true;
|
|
201
143
|
}
|
|
202
144
|
exports.insertServerInstrumentationFile = insertServerInstrumentationFile;
|
|
203
145
|
function isRemixV2(remixConfig, packageJson) {
|
|
204
|
-
|
|
205
|
-
var remixVersion = (0, package_json_1.getPackageVersion)('@remix-run/react', packageJson);
|
|
146
|
+
const remixVersion = (0, package_json_1.getPackageVersion)('@remix-run/react', packageJson);
|
|
206
147
|
if (!remixVersion) {
|
|
207
148
|
return false;
|
|
208
149
|
}
|
|
209
|
-
|
|
150
|
+
const minVer = (0, semver_1.minVersion)(remixVersion);
|
|
210
151
|
if (!minVer) {
|
|
211
152
|
return false;
|
|
212
153
|
}
|
|
213
|
-
|
|
214
|
-
return isV2Remix ||
|
|
154
|
+
const isV2Remix = (0, semver_1.gte)(minVer, '2.0.0');
|
|
155
|
+
return isV2Remix || remixConfig?.future?.v2_errorBoundary || false;
|
|
215
156
|
}
|
|
216
157
|
exports.isRemixV2 = isRemixV2;
|
|
217
|
-
function loadRemixConfig() {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
e_1 = _a.sent();
|
|
237
|
-
prompts_1.default.log.error("Couldn't load ".concat(REMIX_CONFIG_FILE, "."));
|
|
238
|
-
prompts_1.default.log.info(chalk_1.default.dim(typeof e_1 === 'object' && e_1 != null && 'toString' in e_1
|
|
239
|
-
? e_1.toString()
|
|
240
|
-
: typeof e_1 === 'string'
|
|
241
|
-
? e_1
|
|
242
|
-
: 'Unknown error'));
|
|
243
|
-
return [2 /*return*/, {}];
|
|
244
|
-
case 4: return [2 /*return*/];
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
});
|
|
158
|
+
async function loadRemixConfig() {
|
|
159
|
+
const configFilePath = path.join(process.cwd(), REMIX_CONFIG_FILE);
|
|
160
|
+
try {
|
|
161
|
+
if (!fs.existsSync(configFilePath)) {
|
|
162
|
+
return {};
|
|
163
|
+
}
|
|
164
|
+
const configUrl = url.pathToFileURL(configFilePath).href;
|
|
165
|
+
const remixConfigModule = (await import(configUrl));
|
|
166
|
+
return remixConfigModule?.default || {};
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
prompts_1.default.log.error(`Couldn't load ${REMIX_CONFIG_FILE}.`);
|
|
170
|
+
prompts_1.default.log.info(chalk_1.default.dim(typeof e === 'object' && e != null && 'toString' in e
|
|
171
|
+
? e.toString()
|
|
172
|
+
: typeof e === 'string'
|
|
173
|
+
? e
|
|
174
|
+
: 'Unknown error'));
|
|
175
|
+
return {};
|
|
176
|
+
}
|
|
248
177
|
}
|
|
249
178
|
exports.loadRemixConfig = loadRemixConfig;
|
|
250
|
-
function instrumentRootRoute(isV2, isTS) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
_a.sent();
|
|
261
|
-
return [3 /*break*/, 4];
|
|
262
|
-
case 2: return [4 /*yield*/, (0, root_v1_1.instrumentRootRouteV1)(rootFilename)];
|
|
263
|
-
case 3:
|
|
264
|
-
_a.sent();
|
|
265
|
-
_a.label = 4;
|
|
266
|
-
case 4:
|
|
267
|
-
prompts_1.default.log.success("Successfully instrumented root route ".concat(chalk_1.default.cyan(rootFilename), "."));
|
|
268
|
-
return [2 /*return*/];
|
|
269
|
-
}
|
|
270
|
-
});
|
|
271
|
-
});
|
|
179
|
+
async function instrumentRootRoute(isV2, isTS) {
|
|
180
|
+
const rootFilename = `root.${isTS ? 'tsx' : 'jsx'}`;
|
|
181
|
+
if (isV2) {
|
|
182
|
+
await (0, root_v2_1.instrumentRootRouteV2)(rootFilename);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
await (0, root_v1_1.instrumentRootRouteV1)(rootFilename);
|
|
186
|
+
}
|
|
187
|
+
prompts_1.default.log.success(`Successfully instrumented root route ${chalk_1.default.cyan(rootFilename)}.`);
|
|
188
|
+
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
272
189
|
}
|
|
273
190
|
exports.instrumentRootRoute = instrumentRootRoute;
|
|
274
|
-
function updateBuildScript(args) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
else {
|
|
300
|
-
throw new Error("`build` script doesn't contain a known build command. Please update it manually.");
|
|
301
|
-
}
|
|
302
|
-
return [4 /*yield*/, fs.promises.writeFile(path.join(process.cwd(), 'package.json'), JSON.stringify(packageJson, null, 2))];
|
|
303
|
-
case 2:
|
|
304
|
-
_a.sent();
|
|
305
|
-
prompts_1.default.log.success("Successfully updated ".concat(chalk_1.default.cyan('build'), " script in ").concat(chalk_1.default.cyan('package.json'), " to generate and upload sourcemaps."));
|
|
306
|
-
return [2 /*return*/];
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
});
|
|
191
|
+
async function updateBuildScript(args) {
|
|
192
|
+
const packageJson = await (0, clack_utils_1.getPackageDotJson)();
|
|
193
|
+
if (!packageJson.scripts) {
|
|
194
|
+
packageJson.scripts = {};
|
|
195
|
+
}
|
|
196
|
+
const buildCommand = args.isHydrogen
|
|
197
|
+
? 'shopify hydrogen build'
|
|
198
|
+
: 'remix build';
|
|
199
|
+
const instrumentedBuildCommand = `${buildCommand} --sourcemap && sentry-upload-sourcemaps --org ${args.org} --project ${args.project}` +
|
|
200
|
+
(args.url ? ` --url ${args.url}` : '') +
|
|
201
|
+
(args.isHydrogen ? ' --buildPath ./dist' : '');
|
|
202
|
+
if (!packageJson.scripts.build) {
|
|
203
|
+
packageJson.scripts.build = instrumentedBuildCommand;
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
205
|
+
}
|
|
206
|
+
else if (packageJson.scripts.build.includes(buildCommand)) {
|
|
207
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
208
|
+
packageJson.scripts.build = packageJson.scripts.build.replace(buildCommand, instrumentedBuildCommand);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
throw new Error("`build` script doesn't contain a known build command. Please update it manually.");
|
|
212
|
+
}
|
|
213
|
+
await fs.promises.writeFile(path.join(process.cwd(), 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
214
|
+
prompts_1.default.log.success(`Successfully updated ${chalk_1.default.cyan('build')} script in ${chalk_1.default.cyan('package.json')} to generate and upload sourcemaps.`);
|
|
215
|
+
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
|
|
310
216
|
}
|
|
311
217
|
exports.updateBuildScript = updateBuildScript;
|
|
312
218
|
function updateEntryClientMod(originalEntryClientMod, dsn, selectedFeatures) {
|
|
@@ -336,97 +242,59 @@ function updateEntryClientMod(originalEntryClientMod, dsn, selectedFeatures) {
|
|
|
336
242
|
return originalEntryClientMod;
|
|
337
243
|
}
|
|
338
244
|
exports.updateEntryClientMod = updateEntryClientMod;
|
|
339
|
-
function initializeSentryOnEntryClient(dsn, isTS, selectedFeatures) {
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
originalEntryClientMod = _a.sent();
|
|
350
|
-
if ((0, utils_1.hasSentryContent)(originalEntryClient, originalEntryClientMod.$code)) {
|
|
351
|
-
return [2 /*return*/];
|
|
352
|
-
}
|
|
353
|
-
updatedEntryClientMod = updateEntryClientMod(originalEntryClientMod, dsn, selectedFeatures);
|
|
354
|
-
return [4 /*yield*/, (0, magicast_1.writeFile)(updatedEntryClientMod.$ast, path.join(process.cwd(), 'app', clientEntryFilename))];
|
|
355
|
-
case 2:
|
|
356
|
-
_a.sent();
|
|
357
|
-
prompts_1.default.log.success("Successfully initialized Sentry on client entry point ".concat(chalk_1.default.cyan(clientEntryFilename)));
|
|
358
|
-
return [2 /*return*/];
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
});
|
|
245
|
+
async function initializeSentryOnEntryClient(dsn, isTS, selectedFeatures) {
|
|
246
|
+
const clientEntryFilename = `entry.client.${isTS ? 'tsx' : 'jsx'}`;
|
|
247
|
+
const originalEntryClient = path.join(process.cwd(), 'app', clientEntryFilename);
|
|
248
|
+
const originalEntryClientMod = await (0, magicast_1.loadFile)(originalEntryClient);
|
|
249
|
+
if ((0, utils_1.hasSentryContent)(originalEntryClient, originalEntryClientMod.$code)) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const updatedEntryClientMod = updateEntryClientMod(originalEntryClientMod, dsn, selectedFeatures);
|
|
253
|
+
await (0, magicast_1.writeFile)(updatedEntryClientMod.$ast, path.join(process.cwd(), 'app', clientEntryFilename));
|
|
254
|
+
prompts_1.default.log.success(`Successfully initialized Sentry on client entry point ${chalk_1.default.cyan(clientEntryFilename)}`);
|
|
362
255
|
}
|
|
363
256
|
exports.initializeSentryOnEntryClient = initializeSentryOnEntryClient;
|
|
364
|
-
function updateStartScript(instrumentationFile) {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
return [2 /*return*/];
|
|
384
|
-
}
|
|
385
|
-
startCommand = packageJson.scripts.start;
|
|
386
|
-
packageJson.scripts.start = "NODE_OPTIONS='--import ./".concat(instrumentationFile, "' ").concat(startCommand);
|
|
387
|
-
return [4 /*yield*/, fs.promises.writeFile(path.join(process.cwd(), 'package.json'), JSON.stringify(packageJson, null, 2))];
|
|
388
|
-
case 2:
|
|
389
|
-
_a.sent();
|
|
390
|
-
prompts_1.default.log.success("Successfully updated ".concat(chalk_1.default.cyan('start'), " script in ").concat(chalk_1.default.cyan('package.json'), " to include Sentry initialization on start."));
|
|
391
|
-
return [2 /*return*/];
|
|
392
|
-
}
|
|
393
|
-
});
|
|
394
|
-
});
|
|
257
|
+
async function updateStartScript(instrumentationFile) {
|
|
258
|
+
const packageJson = await (0, clack_utils_1.getPackageDotJson)();
|
|
259
|
+
if (!packageJson.scripts || !packageJson.scripts.start) {
|
|
260
|
+
throw new Error("Couldn't find a `start` script in your package.json. Please add one manually.");
|
|
261
|
+
}
|
|
262
|
+
if (packageJson.scripts.start.includes('NODE_OPTIONS')) {
|
|
263
|
+
prompts_1.default.log.warn(`Found existing NODE_OPTIONS in ${chalk_1.default.cyan('start')} script. Skipping adding Sentry initialization.`);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
if (!packageJson.scripts.start.includes('remix-serve') &&
|
|
267
|
+
// Adding a following empty space not to match a path that includes `node`
|
|
268
|
+
!packageJson.scripts.start.includes('node ')) {
|
|
269
|
+
prompts_1.default.log.warn(`Found a ${chalk_1.default.cyan('start')} script that doesn't use ${chalk_1.default.cyan('remix-serve')} or ${chalk_1.default.cyan('node')}. Skipping adding Sentry initialization.`);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const startCommand = packageJson.scripts.start;
|
|
273
|
+
packageJson.scripts.start = `NODE_OPTIONS='--import ./${instrumentationFile}' ${startCommand}`;
|
|
274
|
+
await fs.promises.writeFile(path.join(process.cwd(), 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
275
|
+
prompts_1.default.log.success(`Successfully updated ${chalk_1.default.cyan('start')} script in ${chalk_1.default.cyan('package.json')} to include Sentry initialization on start.`);
|
|
395
276
|
}
|
|
396
277
|
exports.updateStartScript = updateStartScript;
|
|
397
|
-
function instrumentSentryOnEntryServer(isV2, isTS) {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
if ((0, utils_1.hasSentryContent)(originalEntryServer, originalEntryServerMod.$code)) {
|
|
409
|
-
return [2 /*return*/];
|
|
410
|
-
}
|
|
411
|
-
originalEntryServerMod.imports.$add({
|
|
412
|
-
from: '@sentry/remix',
|
|
413
|
-
imported: '*',
|
|
414
|
-
local: 'Sentry',
|
|
415
|
-
});
|
|
416
|
-
if (isV2) {
|
|
417
|
-
handleErrorInstrumented = (0, handle_error_1.instrumentHandleError)(originalEntryServerMod, serverEntryFilename);
|
|
418
|
-
if (handleErrorInstrumented) {
|
|
419
|
-
prompts_1.default.log.success("Instrumented ".concat(chalk_1.default.cyan('handleError'), " in ").concat(chalk_1.default.cyan("".concat(serverEntryFilename))));
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
return [4 /*yield*/, (0, magicast_1.writeFile)(originalEntryServerMod.$ast, path.join(process.cwd(), 'app', serverEntryFilename))];
|
|
423
|
-
case 2:
|
|
424
|
-
_a.sent();
|
|
425
|
-
prompts_1.default.log.success("Successfully initialized Sentry on server entry point ".concat(chalk_1.default.cyan(serverEntryFilename), "."));
|
|
426
|
-
return [2 /*return*/];
|
|
427
|
-
}
|
|
428
|
-
});
|
|
278
|
+
async function instrumentSentryOnEntryServer(isV2, isTS) {
|
|
279
|
+
const serverEntryFilename = `entry.server.${isTS ? 'tsx' : 'jsx'}`;
|
|
280
|
+
const originalEntryServer = path.join(process.cwd(), 'app', serverEntryFilename);
|
|
281
|
+
const originalEntryServerMod = await (0, magicast_1.loadFile)(originalEntryServer);
|
|
282
|
+
if ((0, utils_1.hasSentryContent)(originalEntryServer, originalEntryServerMod.$code)) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
originalEntryServerMod.imports.$add({
|
|
286
|
+
from: '@sentry/remix',
|
|
287
|
+
imported: '*',
|
|
288
|
+
local: 'Sentry',
|
|
429
289
|
});
|
|
290
|
+
if (isV2) {
|
|
291
|
+
const handleErrorInstrumented = (0, handle_error_1.instrumentHandleError)(originalEntryServerMod, serverEntryFilename);
|
|
292
|
+
if (handleErrorInstrumented) {
|
|
293
|
+
prompts_1.default.log.success(`Instrumented ${chalk_1.default.cyan('handleError')} in ${chalk_1.default.cyan(`${serverEntryFilename}`)}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
await (0, magicast_1.writeFile)(originalEntryServerMod.$ast, path.join(process.cwd(), 'app', serverEntryFilename));
|
|
297
|
+
prompts_1.default.log.success(`Successfully initialized Sentry on server entry point ${chalk_1.default.cyan(serverEntryFilename)}.`);
|
|
430
298
|
}
|
|
431
299
|
exports.instrumentSentryOnEntryServer = instrumentSentryOnEntryServer;
|
|
432
300
|
//# sourceMappingURL=sdk-setup.js.map
|