@sentry/wizard 3.4.0 → 3.6.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.
Files changed (122) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/bin.ts +29 -20
  3. package/dist/bin.js +27 -19
  4. package/dist/bin.js.map +1 -1
  5. package/dist/lib/Constants.d.ts +2 -0
  6. package/dist/lib/Constants.js +5 -0
  7. package/dist/lib/Constants.js.map +1 -1
  8. package/dist/lib/Helper/Wizard.js +2 -9
  9. package/dist/lib/Helper/Wizard.js.map +1 -1
  10. package/dist/lib/Helper/__tests__/SentryCli.js +1 -0
  11. package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
  12. package/dist/lib/Setup.js.map +1 -1
  13. package/dist/lib/Steps/ChooseIntegration.js +30 -10
  14. package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
  15. package/dist/lib/Steps/Integrations/Apple.d.ts +10 -0
  16. package/dist/lib/Steps/Integrations/Apple.js +92 -0
  17. package/dist/lib/Steps/Integrations/Apple.js.map +1 -0
  18. package/dist/lib/Steps/Integrations/{NextJs.d.ts → NextJsShim.d.ts} +1 -1
  19. package/dist/lib/Steps/Integrations/{NextJs.js → NextJsShim.js} +14 -10
  20. package/dist/lib/Steps/Integrations/NextJsShim.js.map +1 -0
  21. package/dist/lib/Steps/Integrations/SourceMapsShim.js +5 -1
  22. package/dist/lib/Steps/Integrations/SourceMapsShim.js.map +1 -1
  23. package/dist/lib/Steps/Integrations/{SvelteKit.d.ts → SvelteKitShim.d.ts} +1 -1
  24. package/dist/lib/Steps/Integrations/{SvelteKit.js → SvelteKitShim.js} +14 -10
  25. package/dist/lib/Steps/Integrations/SvelteKitShim.js.map +1 -0
  26. package/dist/package.json +4 -4
  27. package/dist/src/apple/apple-wizard.d.ts +2 -0
  28. package/dist/src/apple/apple-wizard.js +197 -0
  29. package/dist/src/apple/apple-wizard.js.map +1 -0
  30. package/dist/src/apple/code-tools.d.ts +1 -0
  31. package/dist/src/apple/code-tools.js +100 -0
  32. package/dist/src/apple/code-tools.js.map +1 -0
  33. package/dist/src/apple/templates.d.ts +4 -0
  34. package/dist/src/apple/templates.js +19 -0
  35. package/dist/src/apple/templates.js.map +1 -0
  36. package/dist/src/apple/xcode-manager.d.ts +4 -0
  37. package/dist/src/apple/xcode-manager.js +145 -0
  38. package/dist/src/apple/xcode-manager.js.map +1 -0
  39. package/dist/src/nextjs/nextjs-wizard.d.ts +2 -5
  40. package/dist/src/nextjs/nextjs-wizard.js +1 -1
  41. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  42. package/dist/src/sourcemaps/sourcemaps-wizard.d.ts +2 -5
  43. package/dist/src/sourcemaps/sourcemaps-wizard.js +154 -67
  44. package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
  45. package/dist/src/sourcemaps/tools/angular.d.ts +1 -0
  46. package/dist/src/sourcemaps/tools/angular.js +76 -0
  47. package/dist/src/sourcemaps/tools/angular.js.map +1 -0
  48. package/dist/src/sourcemaps/tools/create-react-app.d.ts +1 -0
  49. package/dist/src/sourcemaps/tools/create-react-app.js +69 -0
  50. package/dist/src/sourcemaps/tools/create-react-app.js.map +1 -0
  51. package/dist/src/sourcemaps/tools/esbuild.js +2 -1
  52. package/dist/src/sourcemaps/tools/esbuild.js.map +1 -1
  53. package/dist/src/sourcemaps/tools/rollup.js +2 -1
  54. package/dist/src/sourcemaps/tools/rollup.js.map +1 -1
  55. package/dist/src/sourcemaps/tools/sentry-cli.js +7 -1
  56. package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
  57. package/dist/src/sourcemaps/tools/vite.js +2 -1
  58. package/dist/src/sourcemaps/tools/vite.js.map +1 -1
  59. package/dist/src/sourcemaps/tools/webpack.js +2 -1
  60. package/dist/src/sourcemaps/tools/webpack.js.map +1 -1
  61. package/dist/src/sourcemaps/utils/detect-tool.d.ts +3 -0
  62. package/dist/src/sourcemaps/utils/detect-tool.js +73 -0
  63. package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -0
  64. package/dist/src/sourcemaps/utils/other-wizards.d.ts +4 -0
  65. package/dist/src/sourcemaps/utils/other-wizards.js +183 -0
  66. package/dist/src/sourcemaps/utils/other-wizards.js.map +1 -0
  67. package/dist/src/sourcemaps/utils/sdk-version.d.ts +14 -0
  68. package/dist/src/sourcemaps/utils/sdk-version.js +276 -0
  69. package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -0
  70. package/dist/src/sveltekit/sveltekit-wizard.d.ts +2 -5
  71. package/dist/src/sveltekit/sveltekit-wizard.js +3 -2
  72. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  73. package/dist/src/telemetry.d.ts +1 -0
  74. package/dist/src/telemetry.js +7 -1
  75. package/dist/src/telemetry.js.map +1 -1
  76. package/dist/src/utils/bash.d.ts +3 -0
  77. package/dist/src/utils/bash.js +118 -0
  78. package/dist/src/utils/bash.js.map +1 -0
  79. package/dist/src/utils/clack-utils.d.ts +21 -9
  80. package/dist/src/utils/clack-utils.js +122 -56
  81. package/dist/src/utils/clack-utils.js.map +1 -1
  82. package/dist/src/utils/package-json.d.ts +19 -0
  83. package/dist/src/utils/package-json.js +29 -0
  84. package/dist/src/utils/package-json.js.map +1 -0
  85. package/dist/src/utils/types.d.ts +16 -0
  86. package/dist/src/utils/types.js +3 -0
  87. package/dist/src/utils/types.js.map +1 -0
  88. package/lib/Constants.ts +6 -0
  89. package/lib/Helper/Wizard.ts +3 -9
  90. package/lib/Helper/__tests__/SentryCli.ts +2 -1
  91. package/lib/Setup.ts +1 -0
  92. package/lib/Steps/ChooseIntegration.ts +39 -11
  93. package/lib/Steps/Integrations/Apple.ts +27 -0
  94. package/lib/Steps/Integrations/{NextJs.ts → NextJsShim.ts} +6 -2
  95. package/lib/Steps/Integrations/SourceMapsShim.ts +5 -1
  96. package/lib/Steps/Integrations/{SvelteKit.ts → SvelteKitShim.ts} +6 -2
  97. package/package-lock.json +8910 -0
  98. package/package.json +4 -4
  99. package/src/apple/apple-wizard.ts +150 -0
  100. package/src/apple/code-tools.ts +81 -0
  101. package/src/apple/templates.ts +39 -0
  102. package/src/apple/xcode-manager.ts +147 -0
  103. package/src/nextjs/nextjs-wizard.ts +3 -8
  104. package/src/sourcemaps/sourcemaps-wizard.ts +166 -91
  105. package/src/sourcemaps/tools/angular.ts +42 -0
  106. package/src/sourcemaps/tools/create-react-app.ts +19 -0
  107. package/src/sourcemaps/tools/esbuild.ts +1 -1
  108. package/src/sourcemaps/tools/rollup.ts +2 -4
  109. package/src/sourcemaps/tools/sentry-cli.ts +6 -1
  110. package/src/sourcemaps/tools/vite.ts +1 -1
  111. package/src/sourcemaps/tools/webpack.ts +1 -1
  112. package/src/sourcemaps/utils/detect-tool.ts +41 -0
  113. package/src/sourcemaps/utils/other-wizards.ts +148 -0
  114. package/src/sourcemaps/utils/sdk-version.ts +257 -0
  115. package/src/sveltekit/sveltekit-wizard.ts +4 -7
  116. package/src/telemetry.ts +8 -0
  117. package/src/utils/bash.ts +44 -0
  118. package/src/utils/clack-utils.ts +100 -51
  119. package/src/utils/package-json.ts +45 -0
  120. package/src/utils/types.ts +18 -0
  121. package/dist/lib/Steps/Integrations/NextJs.js.map +0 -1
  122. package/dist/lib/Steps/Integrations/SvelteKit.js.map +0 -1
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.updateXcodeProject = void 0;
27
+ var fs = __importStar(require("fs"));
28
+ var templates = __importStar(require("./templates"));
29
+ var xcode = require('xcode');
30
+ /* eslint-enable @typescript-eslint/no-unused-vars */
31
+ function setDebugInformationFormat(proj) {
32
+ var xcObjects = proj.hash.project.objects;
33
+ var target = proj.getFirstTarget().firstTarget;
34
+ xcObjects.XCConfigurationList[target.buildConfigurationList].buildConfigurations.forEach(function (buildConfig) {
35
+ xcObjects.XCBuildConfiguration[buildConfig.value].buildSettings.DEBUG_INFORMATION_FORMAT = "\"dwarf-with-dsym\"";
36
+ });
37
+ }
38
+ function addSentrySPM(proj) {
39
+ var xcObjects = proj.hash.project.objects;
40
+ var sentryFrameworkUUID = proj.generateUuid();
41
+ var sentrySPMUUID = proj.generateUuid();
42
+ //Check whether xcObjects already have sentry framework
43
+ if (xcObjects.PBXFrameworksBuildPhase) {
44
+ for (var key in xcObjects.PBXFrameworksBuildPhase || {}) {
45
+ if (!key.endsWith("_comment")) {
46
+ var frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;
47
+ for (var _i = 0, frameworks_1 = frameworks; _i < frameworks_1.length; _i++) {
48
+ var framework = frameworks_1[_i];
49
+ if (framework.comment === "Sentry in Frameworks") {
50
+ return;
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ xcObjects.PBXBuildFile[sentryFrameworkUUID] = {
57
+ isa: "PBXBuildFile",
58
+ productRef: sentrySPMUUID,
59
+ productRef_comment: "Sentry",
60
+ };
61
+ xcObjects.PBXBuildFile[sentryFrameworkUUID + "_comment"] = "Sentry in Frameworks";
62
+ for (var key in xcObjects.PBXFrameworksBuildPhase || {}) {
63
+ if (!key.endsWith("_comment")) {
64
+ var frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;
65
+ frameworks.push({
66
+ value: sentryFrameworkUUID,
67
+ comment: "Sentry in Frameworks",
68
+ });
69
+ }
70
+ }
71
+ var target = proj.getFirstTarget().firstTarget;
72
+ if (!target.packageProductDependencies) {
73
+ target.packageProductDependencies = [];
74
+ }
75
+ target.packageProductDependencies.push({
76
+ value: sentrySPMUUID,
77
+ comment: "Sentry",
78
+ });
79
+ var sentrySwiftPackageUUID = proj.generateUuid();
80
+ var xcProject = proj.getFirstProject().firstProject;
81
+ if (!xcProject.packageReferences) {
82
+ xcProject.packageReferences = [];
83
+ }
84
+ xcProject.packageReferences.push({
85
+ value: sentrySwiftPackageUUID,
86
+ comment: "XCRemoteSwiftPackageReference \"sentry-cocoa\"",
87
+ });
88
+ xcObjects.XCRemoteSwiftPackageReference = {};
89
+ xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID] = {
90
+ isa: "XCRemoteSwiftPackageReference",
91
+ repositoryURL: "\"https://github.com/getsentry/sentry-cocoa/\"",
92
+ requirement: {
93
+ kind: "upToNextMajorVersion",
94
+ minimumVersion: "8.0.0",
95
+ }
96
+ };
97
+ xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID + "_comment"] = "XCRemoteSwiftPackageReference \"sentry-cocoa\"";
98
+ xcObjects.XCSwiftPackageProductDependency = {};
99
+ xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] =
100
+ {
101
+ isa: "XCSwiftPackageProductDependency",
102
+ package: sentrySwiftPackageUUID,
103
+ package_comment: "XCRemoteSwiftPackageReference \"sentry-cocoa\"",
104
+ productName: "Sentry",
105
+ };
106
+ xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID + "_comment"] = "Sentry";
107
+ }
108
+ function addUploadSymbolsScript(xcodeProject, sentryProject, apiKeys, uploadSource) {
109
+ if (uploadSource === void 0) { uploadSource = true; }
110
+ var xcObjects = xcodeProject.hash.project.objects;
111
+ for (var scriptKey in xcObjects.PBXShellScriptBuildPhase || {}) {
112
+ if (!scriptKey.endsWith("_comment")) {
113
+ var script = xcObjects.PBXShellScriptBuildPhase[scriptKey].shellScript;
114
+ //Sentry script already exists, update it
115
+ if (script.includes("sentry-cli")) {
116
+ delete xcObjects.PBXShellScriptBuildPhase[scriptKey];
117
+ delete xcObjects.PBXShellScriptBuildPhase[scriptKey + "_comment"];
118
+ break;
119
+ }
120
+ }
121
+ }
122
+ xcodeProject.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Upload Debug Symbols to Sentry', null, {
123
+ inputFileListPaths: [],
124
+ outputFileListPaths: [],
125
+ inputPaths: [templates.scriptInputPath],
126
+ shellPath: '/bin/sh',
127
+ shellScript: templates.getRunScriptTemplate(sentryProject.organization.slug, sentryProject.slug, apiKeys.token, uploadSource)
128
+ });
129
+ }
130
+ function updateXcodeProject(projectPath, sentryProject, apiKeys, addSPMReference, uploadSource) {
131
+ if (uploadSource === void 0) { uploadSource = true; }
132
+ var proj = xcode.project(projectPath);
133
+ proj.parseSync();
134
+ addUploadSymbolsScript(proj, sentryProject, apiKeys, uploadSource);
135
+ if (uploadSource) {
136
+ setDebugInformationFormat(proj);
137
+ }
138
+ if (addSPMReference) {
139
+ addSentrySPM(proj);
140
+ }
141
+ var newContent = proj.writeSync();
142
+ fs.writeFileSync(projectPath, newContent);
143
+ }
144
+ exports.updateXcodeProject = updateXcodeProject;
145
+ //# sourceMappingURL=xcode-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xcode-manager.js","sourceRoot":"","sources":["../../../src/apple/xcode-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { SentryCli } from '../../lib/Helper/SentryCli';\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as templates from './templates';\nconst xcode = require('xcode');\n\nimport { SentryProjectData } from '../utils/clack-utils';\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\nfunction setDebugInformationFormat(proj: any): void {\n const xcObjects = proj.hash.project.objects;\n const target = proj.getFirstTarget().firstTarget;\n\n xcObjects.XCConfigurationList[target.buildConfigurationList].buildConfigurations.forEach((buildConfig: { value: string }) => {\n xcObjects.XCBuildConfiguration[buildConfig.value].buildSettings.DEBUG_INFORMATION_FORMAT = \"\\\"dwarf-with-dsym\\\"\";\n });\n}\n\nfunction addSentrySPM(proj: any): void {\n const xcObjects = proj.hash.project.objects;\n\n const sentryFrameworkUUID = proj.generateUuid() as string;\n const sentrySPMUUID = proj.generateUuid() as string;\n\n //Check whether xcObjects already have sentry framework\n if (xcObjects.PBXFrameworksBuildPhase) {\n for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {\n if (!key.endsWith(\"_comment\")) {\n const frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;\n for (const framework of frameworks) {\n if (framework.comment === \"Sentry in Frameworks\") {\n return;\n }\n }\n }\n }\n }\n\n xcObjects.PBXBuildFile[sentryFrameworkUUID] = {\n isa: \"PBXBuildFile\",\n productRef: sentrySPMUUID,\n productRef_comment: \"Sentry\",\n };\n xcObjects.PBXBuildFile[sentryFrameworkUUID + \"_comment\"] = \"Sentry in Frameworks\";\n\n for (const key in xcObjects.PBXFrameworksBuildPhase || {}) {\n if (!key.endsWith(\"_comment\")) {\n const frameworks = xcObjects.PBXFrameworksBuildPhase[key].files;\n frameworks.push({\n value: sentryFrameworkUUID,\n comment: \"Sentry in Frameworks\",\n });\n }\n }\n\n const target = proj.getFirstTarget().firstTarget;\n if (!target.packageProductDependencies) {\n target.packageProductDependencies = [];\n }\n target.packageProductDependencies.push({\n value: sentrySPMUUID,\n comment: \"Sentry\",\n });\n\n const sentrySwiftPackageUUID = proj.generateUuid() as string;\n const xcProject = proj.getFirstProject().firstProject;\n if (!xcProject.packageReferences) {\n xcProject.packageReferences = [];\n }\n xcProject.packageReferences.push({\n value: sentrySwiftPackageUUID,\n comment: \"XCRemoteSwiftPackageReference \\\"sentry-cocoa\\\"\",\n });\n\n xcObjects.XCRemoteSwiftPackageReference = {};\n xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID] = {\n isa: \"XCRemoteSwiftPackageReference\",\n repositoryURL: \"\\\"https://github.com/getsentry/sentry-cocoa/\\\"\",\n requirement: {\n kind: \"upToNextMajorVersion\",\n minimumVersion: \"8.0.0\",\n }\n };\n xcObjects.XCRemoteSwiftPackageReference[sentrySwiftPackageUUID + \"_comment\"] = \"XCRemoteSwiftPackageReference \\\"sentry-cocoa\\\"\";\n\n xcObjects.XCSwiftPackageProductDependency = {};\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] =\n {\n isa: \"XCSwiftPackageProductDependency\",\n package: sentrySwiftPackageUUID,\n package_comment: \"XCRemoteSwiftPackageReference \\\"sentry-cocoa\\\"\",\n productName: \"Sentry\",\n };\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID + \"_comment\"] = \"Sentry\";\n}\n\nfunction addUploadSymbolsScript(xcodeProject: any, sentryProject: SentryProjectData, apiKeys: { token: string }, uploadSource = true): void {\n const xcObjects = xcodeProject.hash.project.objects;\n\n for (const scriptKey in xcObjects.PBXShellScriptBuildPhase || {}) {\n if (!scriptKey.endsWith(\"_comment\")) {\n const script = xcObjects.PBXShellScriptBuildPhase[scriptKey].shellScript;\n //Sentry script already exists, update it\n if (script.includes(\"sentry-cli\")) {\n delete xcObjects.PBXShellScriptBuildPhase[scriptKey];\n delete xcObjects.PBXShellScriptBuildPhase[scriptKey + \"_comment\"];\n break;\n }\n }\n }\n\n xcodeProject.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n inputFileListPaths: [],\n outputFileListPaths: [],\n inputPaths: [templates.scriptInputPath],\n shellPath: '/bin/sh',\n shellScript: templates.getRunScriptTemplate(sentryProject.organization.slug, sentryProject.slug, apiKeys.token, uploadSource)\n },\n );\n}\n\nexport function updateXcodeProject(projectPath: string, sentryProject: SentryProjectData, apiKeys: { token: string }, addSPMReference: boolean, uploadSource = true): void {\n const proj = xcode.project(projectPath);\n proj.parseSync();\n addUploadSymbolsScript(proj, sentryProject, apiKeys, uploadSource);\n if (uploadSource) {\n setDebugInformationFormat(proj);\n }\n if (addSPMReference) {\n addSentrySPM(proj);\n }\n const newContent = proj.writeSync();\n fs.writeFileSync(projectPath, newContent);\n}"]}
@@ -1,5 +1,2 @@
1
- interface NextjsWizardOptions {
2
- promoCode?: string;
3
- }
4
- export declare function runNextjsWizard(options: NextjsWizardOptions): Promise<void>;
5
- export {};
1
+ import { WizardOptions } from '../utils/types';
2
+ export declare function runNextjsWizard(options: WizardOptions): Promise<void>;
@@ -103,7 +103,7 @@ function runNextjsWizard(options) {
103
103
  return [4 /*yield*/, (0, clack_utils_1.ensurePackageIsInstalled)(packageJson, 'next', 'Next.js')];
104
104
  case 3:
105
105
  _e.sent();
106
- return [4 /*yield*/, (0, clack_utils_1.askForSelfHosted)()];
106
+ return [4 /*yield*/, (0, clack_utils_1.askForSelfHosted)(options.url)];
107
107
  case 4:
108
108
  _b = _e.sent(), sentryUrl = _b.url, selfHosted = _b.selfHosted;
109
109
  return [4 /*yield*/, (0, clack_utils_1.askForWizardLogin)({
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs-wizard.js","sourceRoot":"","sources":["../../../src/nextjs/nextjs-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as fs from 'fs';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { builders, generateCode, parseModule } from 'magicast';\nimport * as path from 'path';\n\nimport {\n abort,\n abortIfCancelled,\n addSentryCliRc,\n askForProjectSelection,\n askForSelfHosted,\n askForWizardLogin,\n confirmContinueEvenThoughNoGitRepo,\n ensurePackageIsInstalled,\n getPackageDotJson,\n installPackage,\n printWelcome,\n} from '../utils/clack-utils';\nimport {\n getNextjsConfigCjsAppendix,\n getNextjsConfigCjsTemplate,\n getNextjsConfigEsmCopyPasteSnippet,\n getNextjsSentryBuildOptionsTemplate,\n getNextjsWebpackPluginOptionsTemplate,\n getSentryConfigContents,\n getSentryExampleApiRoute,\n getSentryExamplePageContents,\n} from './templates';\n\ninterface NextjsWizardOptions {\n promoCode?: string;\n}\n\n// eslint-disable-next-line complexity\nexport async function runNextjsWizard(\n options: NextjsWizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Next.js Wizard',\n promoCode: options.promoCode,\n });\n\n await confirmContinueEvenThoughNoGitRepo();\n\n const packageJson = await getPackageDotJson();\n await ensurePackageIsInstalled(packageJson, 'next', 'Next.js');\n\n const { url: sentryUrl, selfHosted } = await askForSelfHosted();\n\n const { projects, apiKeys } = await askForWizardLogin({\n promoCode: options.promoCode,\n url: sentryUrl,\n platform: 'javascript-nextjs',\n });\n\n const selectedProject = await askForProjectSelection(projects);\n\n await installPackage({\n packageName: '@sentry/nextjs',\n alreadyInstalled: !!packageJson?.dependencies?.['@sentry/nextjs'],\n });\n\n let isUsingTypescript = false;\n try {\n isUsingTypescript = fs.existsSync(\n path.join(process.cwd(), 'tsconfig.json'),\n );\n } catch {\n // noop - Default to assuming user is not using typescript\n }\n\n const configVariants = ['server', 'client', 'edge'] as const;\n\n for (const configVariant of configVariants) {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.bold(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.bold(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), isUsingTypescript ? tsConfig : jsConfig),\n getSentryConfigContents(\n selectedProject.keys[0].dsn.public,\n configVariant,\n ),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created fresh ${chalk.bold(isUsingTypescript ? tsConfig : jsConfig)}.`,\n );\n }\n }\n\n const sentryWebpackOptionsTemplate = getNextjsWebpackPluginOptionsTemplate(\n selectedProject.organization.slug,\n selectedProject.slug,\n );\n const sentryBuildOptionsTemplate = getNextjsSentryBuildOptionsTemplate();\n\n const nextConfigJs = 'next.config.js';\n const nextConfigMjs = 'next.config.mjs';\n\n const nextConfigJsExists = fs.existsSync(\n path.join(process.cwd(), nextConfigJs),\n );\n const nextConfigMjsExists = fs.existsSync(\n path.join(process.cwd(), nextConfigMjs),\n );\n\n if (!nextConfigJsExists && !nextConfigMjsExists) {\n await fs.promises.writeFile(\n path.join(process.cwd(), nextConfigJs),\n getNextjsConfigCjsTemplate(\n sentryWebpackOptionsTemplate,\n sentryBuildOptionsTemplate,\n ),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.bold('next.config.js')} with Sentry configuration.`,\n );\n }\n\n if (nextConfigJsExists) {\n const nextConfgiJsContent = fs.readFileSync(\n path.join(process.cwd(), nextConfigJs),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfgiJsContent.includes('@sentry/nextjs') &&\n nextConfgiJsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.bold(\n nextConfigJs,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n if (shouldInject) {\n await fs.promises.appendFile(\n path.join(process.cwd(), nextConfigJs),\n getNextjsConfigCjsAppendix(\n sentryWebpackOptionsTemplate,\n sentryBuildOptionsTemplate,\n ),\n 'utf8',\n );\n\n clack.log.success(\n `Added Sentry configuration to ${chalk.bold(nextConfigJs)}. ${chalk.dim(\n '(you probably want to clean this up a bit!)',\n )}`,\n );\n }\n }\n\n if (nextConfigMjsExists) {\n const nextConfgiMjsContent = fs.readFileSync(\n path.join(process.cwd(), nextConfigMjs),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfgiMjsContent.includes('@sentry/nextjs') &&\n nextConfgiMjsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.bold(\n nextConfigMjs,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n try {\n if (shouldInject) {\n const mod = parseModule(nextConfgiMjsContent);\n mod.imports.$add({\n from: '@sentry/nextjs',\n imported: 'withSentryConfig',\n local: 'withSentryConfig',\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n const expressionToWrap = generateCode(mod.exports.default.$ast).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.default = builders.raw(`withSentryConfig(\n ${expressionToWrap},\n ${sentryWebpackOptionsTemplate},\n ${sentryBuildOptionsTemplate}\n)`);\n const newCode = mod.generate().code;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), nextConfigMjs),\n newCode,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n );\n clack.log.success(\n `Added Sentry configuration to ${chalk.bold(\n nextConfigMjs,\n )}. ${chalk.dim('(you probably want to clean this up a bit!)')}`,\n );\n }\n } catch {\n clack.log.warn(\n chalk.yellow(\n `Something went wrong writing to ${chalk.bold(nextConfigMjs)}`,\n ),\n );\n clack.log.info(\n `Please put the following code snippet into ${chalk.bold(\n nextConfigMjs,\n )}: ${chalk.dim('You probably have to clean it up a bit.')}\\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getNextjsConfigEsmCopyPasteSnippet(\n sentryWebpackOptionsTemplate,\n sentryBuildOptionsTemplate,\n ),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Are you done putting the snippet above into ${chalk.bold(\n nextConfigMjs,\n )}?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n }\n\n const maybePagesDirPath = path.join(process.cwd(), 'pages');\n const maybeSrcPagesDirPath = path.join(process.cwd(), 'src', 'pages');\n\n let pagesLocation =\n fs.existsSync(maybePagesDirPath) &&\n fs.lstatSync(maybePagesDirPath).isDirectory()\n ? ['pages']\n : fs.existsSync(maybeSrcPagesDirPath) &&\n fs.lstatSync(maybeSrcPagesDirPath).isDirectory()\n ? ['src', 'pages']\n : undefined;\n\n if (!pagesLocation) {\n pagesLocation = ['pages'];\n fs.mkdirSync(path.join(process.cwd(), ...pagesLocation), {\n recursive: true,\n });\n }\n\n if (pagesLocation) {\n const examplePageContents = getSentryExamplePageContents({\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n });\n\n await fs.promises.writeFile(\n path.join(process.cwd(), ...pagesLocation, 'sentry-example-page.js'),\n examplePageContents,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.bold(\n path.join(...pagesLocation, 'sentry-example-page.js'),\n )}.`,\n );\n\n fs.mkdirSync(path.join(process.cwd(), ...pagesLocation, 'api'), {\n recursive: true,\n });\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...pagesLocation,\n 'api',\n 'sentry-example-api.js',\n ),\n getSentryExampleApiRoute(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.bold(\n path.join(...pagesLocation, 'api', 'sentry-example-api.js'),\n )}.`,\n );\n }\n\n await addSentryCliRc(apiKeys.token);\n\n const mightBeUsingVercel = fs.existsSync(\n path.join(process.cwd(), 'vercel.json'),\n );\n\n clack.outro(\n `${chalk.green('Everything is set up!')}\n\n ${chalk.cyan(\n 'You can validate your setup by starting your dev environment (`next dev`) and visiting \"/sentry-example-page\".',\n )}\n${\n mightBeUsingVercel\n ? `\n ▲ It seems like you're using Vercel. We recommend using the Sentry Vercel integration: https://vercel.com/integrations/sentry\n`\n : ''\n}\n ${chalk.dim(\n 'If you encounter any issues, let us know here: https://github.com/getsentry/sentry-javascript/issues',\n )}`,\n );\n}\n"]}
1
+ {"version":3,"file":"nextjs-wizard.js","sourceRoot":"","sources":["../../../src/nextjs/nextjs-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport chalk from 'chalk';\nimport * as fs from 'fs';\n// @ts-ignore - magicast is ESM and TS complains about that. It works though\nimport { builders, generateCode, parseModule } from 'magicast';\nimport * as path from 'path';\n\nimport {\n abort,\n abortIfCancelled,\n addSentryCliRc,\n askForProjectSelection,\n askForSelfHosted,\n askForWizardLogin,\n confirmContinueEvenThoughNoGitRepo,\n ensurePackageIsInstalled,\n getPackageDotJson,\n installPackage,\n printWelcome,\n} from '../utils/clack-utils';\nimport { WizardOptions } from '../utils/types';\nimport {\n getNextjsConfigCjsAppendix,\n getNextjsConfigCjsTemplate,\n getNextjsConfigEsmCopyPasteSnippet,\n getNextjsSentryBuildOptionsTemplate,\n getNextjsWebpackPluginOptionsTemplate,\n getSentryConfigContents,\n getSentryExampleApiRoute,\n getSentryExamplePageContents,\n} from './templates';\n\n// eslint-disable-next-line complexity\nexport async function runNextjsWizard(options: WizardOptions): Promise<void> {\n printWelcome({\n wizardName: 'Sentry Next.js Wizard',\n promoCode: options.promoCode,\n });\n\n await confirmContinueEvenThoughNoGitRepo();\n\n const packageJson = await getPackageDotJson();\n await ensurePackageIsInstalled(packageJson, 'next', 'Next.js');\n\n const { url: sentryUrl, selfHosted } = await askForSelfHosted(options.url);\n\n const { projects, apiKeys } = await askForWizardLogin({\n promoCode: options.promoCode,\n url: sentryUrl,\n platform: 'javascript-nextjs',\n });\n\n const selectedProject = await askForProjectSelection(projects);\n\n await installPackage({\n packageName: '@sentry/nextjs',\n alreadyInstalled: !!packageJson?.dependencies?.['@sentry/nextjs'],\n });\n\n let isUsingTypescript = false;\n try {\n isUsingTypescript = fs.existsSync(\n path.join(process.cwd(), 'tsconfig.json'),\n );\n } catch {\n // noop - Default to assuming user is not using typescript\n }\n\n const configVariants = ['server', 'client', 'edge'] as const;\n\n for (const configVariant of configVariants) {\n const jsConfig = `sentry.${configVariant}.config.js`;\n const tsConfig = `sentry.${configVariant}.config.ts`;\n\n const jsConfigExists = fs.existsSync(path.join(process.cwd(), jsConfig));\n const tsConfigExists = fs.existsSync(path.join(process.cwd(), tsConfig));\n\n let shouldWriteFile = true;\n\n if (jsConfigExists || tsConfigExists) {\n const existingConfigs = [];\n\n if (jsConfigExists) {\n existingConfigs.push(jsConfig);\n }\n\n if (tsConfigExists) {\n existingConfigs.push(tsConfig);\n }\n\n const overwriteExistingConfigs = await abortIfCancelled(\n clack.confirm({\n message: `Found existing Sentry ${configVariant} config (${existingConfigs.join(\n ', ',\n )}). Overwrite ${existingConfigs.length > 1 ? 'them' : 'it'}?`,\n }),\n );\n\n shouldWriteFile = overwriteExistingConfigs;\n\n if (overwriteExistingConfigs) {\n if (jsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), jsConfig));\n clack.log.warn(`Removed existing ${chalk.bold(jsConfig)}.`);\n }\n if (tsConfigExists) {\n fs.unlinkSync(path.join(process.cwd(), tsConfig));\n clack.log.warn(`Removed existing ${chalk.bold(tsConfig)}.`);\n }\n }\n }\n\n if (shouldWriteFile) {\n await fs.promises.writeFile(\n path.join(process.cwd(), isUsingTypescript ? tsConfig : jsConfig),\n getSentryConfigContents(\n selectedProject.keys[0].dsn.public,\n configVariant,\n ),\n { encoding: 'utf8', flag: 'w' },\n );\n clack.log.success(\n `Created fresh ${chalk.bold(isUsingTypescript ? tsConfig : jsConfig)}.`,\n );\n }\n }\n\n const sentryWebpackOptionsTemplate = getNextjsWebpackPluginOptionsTemplate(\n selectedProject.organization.slug,\n selectedProject.slug,\n );\n const sentryBuildOptionsTemplate = getNextjsSentryBuildOptionsTemplate();\n\n const nextConfigJs = 'next.config.js';\n const nextConfigMjs = 'next.config.mjs';\n\n const nextConfigJsExists = fs.existsSync(\n path.join(process.cwd(), nextConfigJs),\n );\n const nextConfigMjsExists = fs.existsSync(\n path.join(process.cwd(), nextConfigMjs),\n );\n\n if (!nextConfigJsExists && !nextConfigMjsExists) {\n await fs.promises.writeFile(\n path.join(process.cwd(), nextConfigJs),\n getNextjsConfigCjsTemplate(\n sentryWebpackOptionsTemplate,\n sentryBuildOptionsTemplate,\n ),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.bold('next.config.js')} with Sentry configuration.`,\n );\n }\n\n if (nextConfigJsExists) {\n const nextConfgiJsContent = fs.readFileSync(\n path.join(process.cwd(), nextConfigJs),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfgiJsContent.includes('@sentry/nextjs') &&\n nextConfgiJsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.bold(\n nextConfigJs,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n if (shouldInject) {\n await fs.promises.appendFile(\n path.join(process.cwd(), nextConfigJs),\n getNextjsConfigCjsAppendix(\n sentryWebpackOptionsTemplate,\n sentryBuildOptionsTemplate,\n ),\n 'utf8',\n );\n\n clack.log.success(\n `Added Sentry configuration to ${chalk.bold(nextConfigJs)}. ${chalk.dim(\n '(you probably want to clean this up a bit!)',\n )}`,\n );\n }\n }\n\n if (nextConfigMjsExists) {\n const nextConfgiMjsContent = fs.readFileSync(\n path.join(process.cwd(), nextConfigMjs),\n 'utf8',\n );\n\n const probablyIncludesSdk =\n nextConfgiMjsContent.includes('@sentry/nextjs') &&\n nextConfgiMjsContent.includes('withSentryConfig');\n\n let shouldInject = true;\n\n if (probablyIncludesSdk) {\n const injectAnyhow = await abortIfCancelled(\n clack.confirm({\n message: `${chalk.bold(\n nextConfigMjs,\n )} already contains Sentry SDK configuration. Should the wizard modify it anyways?`,\n }),\n );\n\n shouldInject = injectAnyhow;\n }\n\n try {\n if (shouldInject) {\n const mod = parseModule(nextConfgiMjsContent);\n mod.imports.$add({\n from: '@sentry/nextjs',\n imported: 'withSentryConfig',\n local: 'withSentryConfig',\n });\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n const expressionToWrap = generateCode(mod.exports.default.$ast).code;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n mod.exports.default = builders.raw(`withSentryConfig(\n ${expressionToWrap},\n ${sentryWebpackOptionsTemplate},\n ${sentryBuildOptionsTemplate}\n)`);\n const newCode = mod.generate().code;\n\n await fs.promises.writeFile(\n path.join(process.cwd(), nextConfigMjs),\n newCode,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n );\n clack.log.success(\n `Added Sentry configuration to ${chalk.bold(\n nextConfigMjs,\n )}. ${chalk.dim('(you probably want to clean this up a bit!)')}`,\n );\n }\n } catch {\n clack.log.warn(\n chalk.yellow(\n `Something went wrong writing to ${chalk.bold(nextConfigMjs)}`,\n ),\n );\n clack.log.info(\n `Please put the following code snippet into ${chalk.bold(\n nextConfigMjs,\n )}: ${chalk.dim('You probably have to clean it up a bit.')}\\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(\n getNextjsConfigEsmCopyPasteSnippet(\n sentryWebpackOptionsTemplate,\n sentryBuildOptionsTemplate,\n ),\n );\n\n const shouldContinue = await abortIfCancelled(\n clack.confirm({\n message: `Are you done putting the snippet above into ${chalk.bold(\n nextConfigMjs,\n )}?`,\n active: 'Yes',\n inactive: 'No, get me out of here',\n }),\n );\n\n if (!shouldContinue) {\n await abort();\n }\n }\n }\n\n const maybePagesDirPath = path.join(process.cwd(), 'pages');\n const maybeSrcPagesDirPath = path.join(process.cwd(), 'src', 'pages');\n\n let pagesLocation =\n fs.existsSync(maybePagesDirPath) &&\n fs.lstatSync(maybePagesDirPath).isDirectory()\n ? ['pages']\n : fs.existsSync(maybeSrcPagesDirPath) &&\n fs.lstatSync(maybeSrcPagesDirPath).isDirectory()\n ? ['src', 'pages']\n : undefined;\n\n if (!pagesLocation) {\n pagesLocation = ['pages'];\n fs.mkdirSync(path.join(process.cwd(), ...pagesLocation), {\n recursive: true,\n });\n }\n\n if (pagesLocation) {\n const examplePageContents = getSentryExamplePageContents({\n selfHosted,\n orgSlug: selectedProject.organization.slug,\n projectId: selectedProject.id,\n url: sentryUrl,\n });\n\n await fs.promises.writeFile(\n path.join(process.cwd(), ...pagesLocation, 'sentry-example-page.js'),\n examplePageContents,\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.bold(\n path.join(...pagesLocation, 'sentry-example-page.js'),\n )}.`,\n );\n\n fs.mkdirSync(path.join(process.cwd(), ...pagesLocation, 'api'), {\n recursive: true,\n });\n\n await fs.promises.writeFile(\n path.join(\n process.cwd(),\n ...pagesLocation,\n 'api',\n 'sentry-example-api.js',\n ),\n getSentryExampleApiRoute(),\n { encoding: 'utf8', flag: 'w' },\n );\n\n clack.log.success(\n `Created ${chalk.bold(\n path.join(...pagesLocation, 'api', 'sentry-example-api.js'),\n )}.`,\n );\n }\n\n await addSentryCliRc(apiKeys.token);\n\n const mightBeUsingVercel = fs.existsSync(\n path.join(process.cwd(), 'vercel.json'),\n );\n\n clack.outro(\n `${chalk.green('Everything is set up!')}\n\n ${chalk.cyan(\n 'You can validate your setup by starting your dev environment (`next dev`) and visiting \"/sentry-example-page\".',\n )}\n${\n mightBeUsingVercel\n ? `\n ▲ It seems like you're using Vercel. We recommend using the Sentry Vercel integration: https://vercel.com/integrations/sentry\n`\n : ''\n}\n ${chalk.dim(\n 'If you encounter any issues, let us know here: https://github.com/getsentry/sentry-javascript/issues',\n )}`,\n );\n}\n"]}
@@ -1,5 +1,2 @@
1
- interface SourceMapsWizardOptions {
2
- promoCode?: string;
3
- }
4
- export declare function runSourcemapsWizard(options: SourceMapsWizardOptions): Promise<void>;
5
- export {};
1
+ import { WizardOptions } from '../utils/types';
2
+ export declare function runSourcemapsWizard(options: WizardOptions): Promise<void>;
@@ -75,9 +75,27 @@ var webpack_1 = require("./tools/webpack");
75
75
  var tsc_1 = require("./tools/tsc");
76
76
  var rollup_1 = require("./tools/rollup");
77
77
  var esbuild_1 = require("./tools/esbuild");
78
+ var create_react_app_1 = require("./tools/create-react-app");
79
+ var sdk_version_1 = require("./utils/sdk-version");
80
+ var telemetry_1 = require("../telemetry");
81
+ var url_1 = require("url");
82
+ var other_wizards_1 = require("./utils/other-wizards");
83
+ var angular_1 = require("./tools/angular");
84
+ var detect_tool_1 = require("./utils/detect-tool");
78
85
  function runSourcemapsWizard(options) {
79
86
  return __awaiter(this, void 0, void 0, function () {
80
- var _a, sentryUrl, selfHosted, _b, projects, apiKeys, selectedProject, selectedTool, addedEnvVarToCI, arrow;
87
+ return __generator(this, function (_a) {
88
+ return [2 /*return*/, (0, telemetry_1.withTelemetry)({
89
+ enabled: options.telemetryEnabled,
90
+ integration: 'sourcemaps',
91
+ }, function () { return runSourcemapsWizardWithTelemetry(options); })];
92
+ });
93
+ });
94
+ }
95
+ exports.runSourcemapsWizard = runSourcemapsWizard;
96
+ function runSourcemapsWizardWithTelemetry(options) {
97
+ return __awaiter(this, void 0, void 0, function () {
98
+ var moreSuitableWizard, _a, sentryUrl, selfHosted, _b, projects, apiKeys, selectedProject, selectedTool;
81
99
  return __generator(this, function (_c) {
82
100
  switch (_c.label) {
83
101
  case 0:
@@ -86,92 +104,103 @@ function runSourcemapsWizard(options) {
86
104
  message: 'This wizard will help you upload source maps to Sentry as part of your build.\nThank you for using Sentry :)\n\n(This setup wizard sends telemetry data and crash reports to Sentry.\nYou can turn this off by running the wizard with the `--disable-telemetry` flag.)',
87
105
  promoCode: options.promoCode,
88
106
  });
89
- return [4 /*yield*/, (0, clack_utils_1.confirmContinueEvenThoughNoGitRepo)()];
107
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('check-framework-wizard', other_wizards_1.checkIfMoreSuitableWizardExistsAndAskForRedirect)];
90
108
  case 1:
91
- _c.sent();
92
- return [4 /*yield*/, (0, clack_utils_1.askForSelfHosted)()];
109
+ moreSuitableWizard = _c.sent();
110
+ if (!moreSuitableWizard) return [3 /*break*/, 3];
111
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('run-framework-wizard', function () { return moreSuitableWizard(options); })];
93
112
  case 2:
113
+ _c.sent();
114
+ return [2 /*return*/];
115
+ case 3: return [4 /*yield*/, (0, telemetry_1.traceStep)('detect-git', clack_utils_1.confirmContinueEvenThoughNoGitRepo)];
116
+ case 4:
117
+ _c.sent();
118
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('check-sdk-version', sdk_version_1.ensureMinimumSdkVersionIsInstalled)];
119
+ case 5:
120
+ _c.sent();
121
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('ask-self-hosted', function () { return (0, clack_utils_1.askForSelfHosted)(options.url); })];
122
+ case 6:
94
123
  _a = _c.sent(), sentryUrl = _a.url, selfHosted = _a.selfHosted;
95
- return [4 /*yield*/, (0, clack_utils_1.askForWizardLogin)({
96
- promoCode: options.promoCode,
97
- url: sentryUrl,
124
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('login', function () {
125
+ return (0, clack_utils_1.askForWizardLogin)({
126
+ promoCode: options.promoCode,
127
+ url: sentryUrl,
128
+ });
98
129
  })];
99
- case 3:
130
+ case 7:
100
131
  _b = _c.sent(), projects = _b.projects, apiKeys = _b.apiKeys;
101
- return [4 /*yield*/, (0, clack_utils_1.askForProjectSelection)(projects)];
102
- case 4:
132
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('select-project', function () {
133
+ return (0, clack_utils_1.askForProjectSelection)(projects);
134
+ })];
135
+ case 8:
103
136
  selectedProject = _c.sent();
104
- return [4 /*yield*/, askForUsedBundlerTool()];
105
- case 5:
137
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('select-tool', askForUsedBundlerTool)];
138
+ case 9:
106
139
  selectedTool = _c.sent();
107
140
  Sentry.setTag('selected-tool', selectedTool);
108
- return [4 /*yield*/, startToolSetupFlow(selectedTool, {
109
- selfHosted: selfHosted,
110
- orgSlug: selectedProject.organization.slug,
111
- projectSlug: selectedProject.slug,
112
- url: sentryUrl,
113
- authToken: apiKeys.token,
141
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('tool-setup', function () {
142
+ return startToolSetupFlow(selectedTool, {
143
+ selfHosted: selfHosted,
144
+ orgSlug: selectedProject.organization.slug,
145
+ projectSlug: selectedProject.slug,
146
+ url: sentryUrl,
147
+ authToken: apiKeys.token,
148
+ });
114
149
  })];
115
- case 6:
150
+ case 10:
116
151
  _c.sent();
117
- prompts_1.default.log.step('Add the Sentry authentication token as an environment variable to your CI setup:');
118
- // Intentially logging directly to console here so that the code can be copied/pasted directly
119
- // eslint-disable-next-line no-console
120
- console.log(chalk_1.default.greenBright("\nSENTRY_AUTH_TOKEN=".concat(apiKeys.token, "\n")));
121
- prompts_1.default.log.warn(chalk_1.default.yellow('DO NOT commit this auth token to your repository!'));
122
- return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
123
- message: 'Did you configure CI as shown above?',
124
- options: [
125
- { label: 'Yes, continue!', value: true },
126
- {
127
- label: "I'll do it later...",
128
- value: false,
129
- hint: chalk_1.default.yellow('You need to set the auth token to upload source maps in CI'),
130
- },
131
- ],
132
- initialValue: true,
133
- }))];
134
- case 7:
135
- addedEnvVarToCI = _c.sent();
136
- Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);
137
- if (!addedEnvVarToCI) {
138
- prompts_1.default.log.info("Don't forget! :)");
139
- }
140
- arrow = (0, is_unicorn_supported_1.isUnicodeSupported)() ? '→' : '->';
141
- prompts_1.default.outro("".concat(chalk_1.default.green("That's it - everything is set up!"), "\n\n ").concat(chalk_1.default.cyan("Validate your setup with the following Steps:\n\n 1. Build your application in ".concat(chalk_1.default.bold('production mode'), ".\n ").concat(chalk_1.default.gray("".concat(arrow, " You should see source map upload logs in your console.")), "\n 2. Run your application and throw a test error.\n ").concat(chalk_1.default.gray("".concat(arrow, " The error should be visible in Sentry.")), "\n 3. Open the error in Sentry and verify that it's source-mapped.\n ").concat(chalk_1.default.gray("".concat(arrow, " The stack trace should show your original source code.")), "\n ")), "\n ").concat(chalk_1.default.dim("If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues"), "\n"));
152
+ return [4 /*yield*/, (0, telemetry_1.traceStep)('ci-setup', function () { return setupCi(apiKeys.token); })];
153
+ case 11:
154
+ _c.sent();
155
+ (0, telemetry_1.traceStep)('outro', function () {
156
+ return printOutro(sentryUrl, selectedProject.organization.slug, selectedProject.id);
157
+ });
142
158
  return [2 /*return*/];
143
159
  }
144
160
  });
145
161
  });
146
162
  }
147
- exports.runSourcemapsWizard = runSourcemapsWizard;
148
163
  function askForUsedBundlerTool() {
149
164
  return __awaiter(this, void 0, void 0, function () {
150
- var selectedTool;
151
- return __generator(this, function (_a) {
152
- switch (_a.label) {
153
- case 0: return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
154
- message: 'Which bundler or build tool are you using?',
165
+ var selectedTool, _a, _b, _c;
166
+ var _d;
167
+ return __generator(this, function (_e) {
168
+ switch (_e.label) {
169
+ case 0:
170
+ _a = clack_utils_1.abortIfCancelled;
171
+ _c = (_b = prompts_1.default).select;
172
+ _d = {
173
+ message: 'Which framework, bundler or build tool are you using?',
155
174
  options: [
175
+ {
176
+ label: 'Angular',
177
+ value: 'angular',
178
+ hint: 'Select this option if you are using Angular.',
179
+ },
180
+ {
181
+ label: 'Create React App',
182
+ value: 'create-react-app',
183
+ hint: 'Select this option if you set up your app with Create React App.',
184
+ },
156
185
  {
157
186
  label: 'Webpack',
158
187
  value: 'webpack',
159
- hint: 'Configure source maps upload using Webpack',
188
+ hint: 'Select this if you are using Webpack and you have access to your Webpack config.',
160
189
  },
161
190
  {
162
191
  label: 'Vite',
163
192
  value: 'vite',
164
- hint: 'Configure source maps upload using Vite',
193
+ hint: 'Select this if you are using Vite and you have access to your Vite config.',
165
194
  },
166
195
  {
167
196
  label: 'esbuild',
168
197
  value: 'esbuild',
169
- hint: 'Configure source maps upload using esbuild',
198
+ hint: 'Select this if you are using esbuild and you have access to your esbuild config.',
170
199
  },
171
200
  {
172
201
  label: 'Rollup',
173
202
  value: 'rollup',
174
- hint: 'Configure source maps upload using Rollup',
203
+ hint: 'Select this if you are using Rollup and you have access to your Rollup config.',
175
204
  },
176
205
  {
177
206
  label: 'tsc',
@@ -183,10 +212,13 @@ function askForUsedBundlerTool() {
183
212
  value: 'sentry-cli',
184
213
  hint: 'This will configure source maps upload for you using sentry-cli',
185
214
  },
186
- ],
187
- }))];
188
- case 1:
189
- selectedTool = _a.sent();
215
+ ]
216
+ };
217
+ return [4 /*yield*/, (0, detect_tool_1.detectUsedTool)()];
218
+ case 1: return [4 /*yield*/, _a.apply(void 0, [_c.apply(_b, [(_d.initialValue = _e.sent(),
219
+ _d)])])];
220
+ case 2:
221
+ selectedTool = _e.sent();
190
222
  return [2 /*return*/, selectedTool];
191
223
  }
192
224
  });
@@ -205,35 +237,90 @@ function startToolSetupFlow(selctedTool, options) {
205
237
  case 'esbuild': return [3 /*break*/, 5];
206
238
  case 'rollup': return [3 /*break*/, 7];
207
239
  case 'tsc': return [3 /*break*/, 9];
240
+ case 'create-react-app': return [3 /*break*/, 11];
241
+ case 'angular': return [3 /*break*/, 13];
208
242
  }
209
- return [3 /*break*/, 11];
243
+ return [3 /*break*/, 15];
210
244
  case 1: return [4 /*yield*/, (0, webpack_1.configureWebPackPlugin)(options)];
211
245
  case 2:
212
246
  _b.sent();
213
- return [3 /*break*/, 13];
247
+ return [3 /*break*/, 17];
214
248
  case 3: return [4 /*yield*/, (0, vite_1.configureVitePlugin)(options)];
215
249
  case 4:
216
250
  _b.sent();
217
- return [3 /*break*/, 13];
251
+ return [3 /*break*/, 17];
218
252
  case 5: return [4 /*yield*/, (0, esbuild_1.configureEsbuildPlugin)(options)];
219
253
  case 6:
220
254
  _b.sent();
221
- return [3 /*break*/, 13];
255
+ return [3 /*break*/, 17];
222
256
  case 7: return [4 /*yield*/, (0, rollup_1.configureRollupPlugin)(options)];
223
257
  case 8:
224
258
  _b.sent();
225
- return [3 /*break*/, 13];
259
+ return [3 /*break*/, 17];
226
260
  case 9: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options, tsc_1.configureTscSourcemapGenerationFlow)];
227
261
  case 10:
228
262
  _b.sent();
229
- return [3 /*break*/, 13];
230
- case 11: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options)];
263
+ return [3 /*break*/, 17];
264
+ case 11: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options, create_react_app_1.configureCRASourcemapGenerationFlow)];
231
265
  case 12:
232
266
  _b.sent();
233
- return [3 /*break*/, 13];
234
- case 13: return [2 /*return*/];
267
+ return [3 /*break*/, 17];
268
+ case 13: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options, angular_1.configureAngularSourcemapGenerationFlow)];
269
+ case 14:
270
+ _b.sent();
271
+ return [3 /*break*/, 17];
272
+ case 15: return [4 /*yield*/, (0, sentry_cli_1.configureSentryCLI)(options)];
273
+ case 16:
274
+ _b.sent();
275
+ return [3 /*break*/, 17];
276
+ case 17: return [2 /*return*/];
235
277
  }
236
278
  });
237
279
  });
238
280
  }
281
+ function setupCi(authToken) {
282
+ return __awaiter(this, void 0, void 0, function () {
283
+ var addedEnvVarToCI;
284
+ return __generator(this, function (_a) {
285
+ switch (_a.label) {
286
+ case 0:
287
+ prompts_1.default.log.step('Add the Sentry authentication token as an environment variable to your CI setup:');
288
+ // Intentially logging directly to console here so that the code can be copied/pasted directly
289
+ // eslint-disable-next-line no-console
290
+ console.log(chalk_1.default.greenBright("\nSENTRY_AUTH_TOKEN=".concat(authToken, "\n")));
291
+ prompts_1.default.log.warn(chalk_1.default.yellow('DO NOT commit this auth token to your repository!'));
292
+ return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(prompts_1.default.select({
293
+ message: 'Did you configure CI as shown above?',
294
+ options: [
295
+ { label: 'Yes, continue!', value: true },
296
+ {
297
+ label: "I'll do it later...",
298
+ value: false,
299
+ hint: chalk_1.default.yellow('You need to set the auth token to upload source maps in CI'),
300
+ },
301
+ ],
302
+ initialValue: true,
303
+ }))];
304
+ case 1:
305
+ addedEnvVarToCI = _a.sent();
306
+ Sentry.setTag('added-env-var-to-ci', addedEnvVarToCI);
307
+ if (!addedEnvVarToCI) {
308
+ prompts_1.default.log.info("Don't forget! :)");
309
+ }
310
+ return [2 /*return*/];
311
+ }
312
+ });
313
+ });
314
+ }
315
+ function printOutro(url, orgSlug, projectId) {
316
+ var pacMan = (0, clack_utils_1.detectPackageManager)() || 'npm';
317
+ var buildCommand = "'".concat(pacMan).concat(pacMan === 'npm' ? ' run' : '', " build'");
318
+ var urlObject = new url_1.URL(url);
319
+ urlObject.host = "".concat(orgSlug, ".").concat(urlObject.host);
320
+ urlObject.pathname = '/issues/';
321
+ urlObject.searchParams.set('project', projectId);
322
+ var issueStreamUrl = urlObject.toString();
323
+ var arrow = (0, is_unicorn_supported_1.isUnicodeSupported)() ? '→' : '->';
324
+ prompts_1.default.outro("".concat(chalk_1.default.green("That's it - everything is set up!"), "\n\n ").concat(chalk_1.default.cyan("Test and validate your setup locally with the following Steps:\n\n 1. Build your application in ".concat(chalk_1.default.bold('production mode'), ".\n ").concat(chalk_1.default.gray("".concat(arrow, " For example, run ").concat(chalk_1.default.bold(buildCommand), ".")), "\n ").concat(chalk_1.default.gray("".concat(arrow, " You should see source map upload logs in your console.")), "\n 2. Run your application and throw a test error.\n ").concat(chalk_1.default.gray("".concat(arrow, " The error should appear in Sentry:")), "\n ").concat(chalk_1.default.gray("".concat(arrow, " ").concat(issueStreamUrl)), "\n 3. Open the error in Sentry and verify that it's source-mapped.\n ").concat(chalk_1.default.gray("".concat(arrow, " The stack trace should show your original source code.")), "\n ")), "\n ").concat(chalk_1.default.dim("If you encounter any issues, please refer to the Troubleshooting Guide:\n https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js\n\n If the guide doesn't help or you encounter a bug, please let us know:\n https://github.com/getsentry/sentry-javascript/issues"), "\n"));
325
+ }
239
326
  //# sourceMappingURL=sourcemaps-wizard.js.map