@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
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAQsB;AACtB,iEAA0C;AAE1C,SAAsB,aAAa,CACjC,OAGC,EACD,QAA8B;;;;;;oBAExB,KAA8B,oBAAoB,CACtD,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,WAAW,CACpB,EAHO,SAAS,eAAA,EAAE,YAAY,kBAAA,CAG7B;oBAEF,IAAA,eAAQ,EAAC,SAAS,CAAC,CAAC;oBAEd,WAAW,GAAG,SAAS,CAAC,gBAAgB,CAAC;wBAC7C,IAAI,EAAE,yBAAyB;wBAC/B,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;oBACH,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACpC,aAAa,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;oBAC/C,SAAS,CAAC,cAAc,EAAE,CAAC;;;;oBAGlB,qBAAM,IAAA,0BAAmB,EAAC,cAAM,OAAA,QAAQ,EAAE,EAAV,CAAU,CAAC,EAAA;wBAAlD,sBAAO,SAA2C,EAAC;;;oBAEnD,SAAS,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,CAAC;oBAC7D,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;oBACxC,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;oBACjC,MAAM,GAAC,CAAC;;oBAER,WAAW,CAAC,MAAM,EAAE,CAAC;oBACrB,SAAS,CAAC,UAAU,EAAE,CAAC;oBACvB,qBAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAA;;oBAA9B,SAA8B,CAAC;;;;;;CAElC;AAlCD,sCAkCC;AAED,SAAS,oBAAoB,CAAC,OAAgB,EAAE,WAAmB;IACjE,IAAM,MAAM,GAAG,IAAI,iBAAU,CAAC;QAC5B,GAAG,EAAE,+EAA+E;QACpF,OAAO,EAAE,OAAO;QAEhB,gBAAgB,EAAE,CAAC;QACnB,UAAU,EAAE,CAAC;QAEb,OAAO,EAAE,sBAAW,CAAC,OAAO;QAC5B,YAAY,EAAE,CAAC,IAAI,mBAAY,CAAC,IAAI,EAAE,CAAC;QACvC,uBAAuB,EAAE,CAAC,wBAAwB,CAAC;QAEnD,WAAW,EAAE,yBAAkB;QAE/B,qBAAqB,EAAE,UAAC,KAAK;YAC3B,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,gCAAgC;YAC1D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,UAAU,EAAE,UAAC,KAAK;;YAChB,MAAA,MAAA,KAAK,CAAC,SAAS,0CAAE,MAAM,0CAAE,OAAO,CAAC,UAAC,SAAS;gBACzC,OAAO,SAAS,CAAC,UAAU,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,gCAAgC;YAC1D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS,EAAE,wBAAiB;KAC7B,CAAC,CAAC;IAEH,IAAM,GAAG,GAAG,IAAI,UAAG,CAAC,MAAM,CAAC,CAAC;IAE5B,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACvC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC","sourcesContent":["import {\n defaultStackParser,\n Hub,\n Integrations,\n makeMain,\n makeNodeTransport,\n NodeClient,\n runWithAsyncContext,\n} from '@sentry/node';\nimport packageJson from '../package.json';\n\nexport async function withTelemetry<F>(\n options: {\n enabled: boolean;\n integration: string;\n },\n callback: () => F | Promise<F>,\n): Promise<F> {\n const { sentryHub, sentryClient } = createSentryInstance(\n options.enabled,\n options.integration,\n );\n\n makeMain(sentryHub);\n\n const transaction = sentryHub.startTransaction({\n name: 'sentry-wizard-execution',\n status: 'ok',\n });\n sentryHub.getScope().setSpan(transaction);\n const sentrySession = sentryHub.startSession();\n sentryHub.captureSession();\n\n try {\n return await runWithAsyncContext(() => callback());\n } catch (e) {\n sentryHub.captureException('Error during wizard execution.');\n transaction.setStatus('internal_error');\n sentrySession.status = 'crashed';\n throw e;\n } finally {\n transaction.finish();\n sentryHub.endSession();\n await sentryClient.flush(3000);\n }\n}\n\nfunction createSentryInstance(enabled: boolean, integration: string) {\n const client = new NodeClient({\n dsn: 'https://8871d3ff64814ed8960c96d1fcc98a27@o1.ingest.sentry.io/4505425820712960',\n enabled: enabled,\n\n tracesSampleRate: 1,\n sampleRate: 1,\n\n release: packageJson.version,\n integrations: [new Integrations.Http()],\n tracePropagationTargets: [/^https:\\/\\/sentry.io\\//],\n\n stackParser: defaultStackParser,\n\n beforeSendTransaction: (event) => {\n delete event.server_name; // Server name might contain PII\n return event;\n },\n\n beforeSend: (event) => {\n event.exception?.values?.forEach((exception) => {\n delete exception.stacktrace;\n });\n\n delete event.server_name; // Server name might contain PII\n return event;\n },\n\n transport: makeNodeTransport,\n });\n\n const hub = new Hub(client);\n\n hub.setTag('integration', integration);\n hub.setTag('node', process.version);\n hub.setTag('platform', process.platform);\n\n return { sentryHub: hub, sentryClient: client };\n}\n"]}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defaultStackParser,\n Hub,\n Integrations,\n makeMain,\n makeNodeTransport,\n NodeClient,\n runWithAsyncContext,\n trace,\n} from '@sentry/node';\nimport packageJson from '../package.json';\n\nexport async function withTelemetry<F>(\n options: {\n enabled: boolean;\n integration: string;\n },\n callback: () => F | Promise<F>,\n): Promise<F> {\n const { sentryHub, sentryClient } = createSentryInstance(\n options.enabled,\n options.integration,\n );\n\n makeMain(sentryHub);\n\n const transaction = sentryHub.startTransaction({\n name: 'sentry-wizard-execution',\n status: 'ok',\n op: 'wizard.flow',\n });\n sentryHub.getScope().setSpan(transaction);\n const sentrySession = sentryHub.startSession();\n sentryHub.captureSession();\n\n try {\n return await runWithAsyncContext(() => callback());\n } catch (e) {\n sentryHub.captureException('Error during wizard execution.');\n transaction.setStatus('internal_error');\n sentrySession.status = 'crashed';\n throw e;\n } finally {\n transaction.finish();\n sentryHub.endSession();\n await sentryClient.flush(3000);\n }\n}\n\nfunction createSentryInstance(enabled: boolean, integration: string) {\n const client = new NodeClient({\n dsn: 'https://8871d3ff64814ed8960c96d1fcc98a27@o1.ingest.sentry.io/4505425820712960',\n enabled: enabled,\n\n tracesSampleRate: 1,\n sampleRate: 1,\n\n release: packageJson.version,\n integrations: [new Integrations.Http()],\n tracePropagationTargets: [/^https:\\/\\/sentry.io\\//],\n\n stackParser: defaultStackParser,\n\n beforeSendTransaction: (event) => {\n delete event.server_name; // Server name might contain PII\n return event;\n },\n\n beforeSend: (event) => {\n event.exception?.values?.forEach((exception) => {\n delete exception.stacktrace;\n });\n\n delete event.server_name; // Server name might contain PII\n return event;\n },\n\n transport: makeNodeTransport,\n\n debug: true,\n });\n\n const hub = new Hub(client);\n\n hub.setTag('integration', integration);\n hub.setTag('node', process.version);\n hub.setTag('platform', process.platform);\n\n return { sentryHub: hub, sentryClient: client };\n}\n\nexport function traceStep<T>(step: string, callback: () => T): T {\n return trace({ name: step, op: 'wizard.step' }, () => callback());\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare function hasSentryCLI(): boolean;
2
+ export declare function installSentryCLI(): Promise<void>;
3
+ export declare function execute(command: string): string;
@@ -0,0 +1,118 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ 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;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.execute = exports.installSentryCLI = exports.hasSentryCLI = void 0;
63
+ var child_process = __importStar(require("child_process"));
64
+ var https = __importStar(require("https"));
65
+ var fs = __importStar(require("fs"));
66
+ function hasSentryCLI() {
67
+ try {
68
+ child_process.execSync('sentry-cli --version');
69
+ return true;
70
+ }
71
+ catch (e) {
72
+ return false;
73
+ }
74
+ }
75
+ exports.hasSentryCLI = hasSentryCLI;
76
+ function installSentryCLI() {
77
+ return __awaiter(this, void 0, void 0, function () {
78
+ var httpAsync;
79
+ return __generator(this, function (_a) {
80
+ switch (_a.label) {
81
+ case 0:
82
+ httpAsync = new Promise(function (resolve, reject) {
83
+ var file = fs.createWriteStream('installcli.sh');
84
+ https.get('https://sentry.io/get-cli/', function (response) {
85
+ response.pipe(file);
86
+ file.on('finish', function () {
87
+ file.close();
88
+ try {
89
+ child_process.execSync('bash ./installcli.sh');
90
+ }
91
+ catch (e) {
92
+ reject(e);
93
+ return;
94
+ }
95
+ fs.unlinkSync('installcli.sh');
96
+ resolve(null);
97
+ });
98
+ file.on('error', function (err) {
99
+ fs.unlinkSync('installcli.sh');
100
+ reject(err);
101
+ });
102
+ });
103
+ });
104
+ return [4 /*yield*/, httpAsync];
105
+ case 1:
106
+ _a.sent();
107
+ return [2 /*return*/];
108
+ }
109
+ });
110
+ });
111
+ }
112
+ exports.installSentryCLI = installSentryCLI;
113
+ function execute(command) {
114
+ var output = child_process.execSync(command);
115
+ return output.toString();
116
+ }
117
+ exports.execute = execute;
118
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/utils/bash.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA+C;AAC/C,2CAA+B;AAC/B,qCAAyB;AAEzB,SAAgB,YAAY;IACxB,IAAI;QACA,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;KACf;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAPD,oCAOC;AAED,SAAsB,gBAAgB;;;;;;oBAC5B,SAAS,GAAG,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;wBAC1C,IAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;wBACnD,KAAK,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAC,QAAQ;4BAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACpB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;gCACd,IAAI,CAAC,KAAK,EAAE,CAAC;gCACb,IAAI;oCACA,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;iCAClD;gCAAC,OAAO,CAAC,EAAE;oCACR,MAAM,CAAC,CAAC,CAAC,CAAC;oCACV,OAAM;iCACT;gCACD,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;gCAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;4BAClB,CAAC,CAAC,CAAC;4BAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,GAAG;gCACjB,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;gCAC/B,MAAM,CAAC,GAAG,CAAC,CAAC;4BAChB,CAAC,CAAC,CAAC;wBACP,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,qBAAM,SAAS,EAAA;;oBAAf,SAAe,CAAC;;;;;CACnB;AAzBD,4CAyBC;AAED,SAAgB,OAAO,CAAC,OAAe;IACnC,IAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAHD,0BAGC","sourcesContent":["import * as child_process from 'child_process';\nimport * as https from 'https';\nimport * as fs from 'fs';\n\nexport function hasSentryCLI(): boolean {\n try {\n child_process.execSync('sentry-cli --version');\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport async function installSentryCLI(): Promise<void> {\n const httpAsync = new Promise((resolve, reject) => {\n const file = fs.createWriteStream('installcli.sh');\n https.get('https://sentry.io/get-cli/', (response) => {\n response.pipe(file);\n file.on('finish', () => {\n file.close();\n try {\n child_process.execSync('bash ./installcli.sh');\n } catch (e) {\n reject(e);\n return\n }\n fs.unlinkSync('installcli.sh');\n resolve(null);\n });\n\n file.on('error', (err) => {\n fs.unlinkSync('installcli.sh');\n reject(err);\n });\n });\n });\n\n await httpAsync;\n}\n\nexport function execute(command: string): string {\n const output = child_process.execSync(command);\n return output.toString();\n}\n"]}
@@ -1,18 +1,15 @@
1
+ import { PackageDotJson } from './package-json';
1
2
  interface WizardProjectData {
2
3
  apiKeys: {
3
4
  token: string;
4
5
  };
5
6
  projects: SentryProjectData[];
6
7
  }
7
- export type PackageDotJson = {
8
- scripts?: Record<string, string>;
9
- dependencies?: Record<string, string>;
10
- devDependencies?: Record<string, string>;
11
- };
12
8
  export interface SentryProjectData {
13
9
  id: string;
14
10
  slug: string;
15
11
  name: string;
12
+ platform: string;
16
13
  organization: {
17
14
  slug: string;
18
15
  };
@@ -30,17 +27,32 @@ export declare function printWelcome(options: {
30
27
  message?: string;
31
28
  }): void;
32
29
  export declare function confirmContinueEvenThoughNoGitRepo(): Promise<void>;
30
+ export declare function askToInstallSentryCLI(): Promise<boolean>;
33
31
  export declare function askForWizardLogin(options: {
34
32
  url: string;
35
33
  promoCode?: string;
36
- platform?: 'javascript-nextjs' | 'javascript-sveltekit';
34
+ platform?: 'javascript-nextjs' | 'javascript-sveltekit' | 'apple-ios';
37
35
  }): Promise<WizardProjectData>;
36
+ export declare function askForItemSelection(items: string[], message: string): Promise<{
37
+ value: string;
38
+ index: number;
39
+ }>;
38
40
  export declare function askForProjectSelection(projects: SentryProjectData[]): Promise<SentryProjectData>;
39
- export declare function installPackage({ packageName, alreadyInstalled, }: {
41
+ export declare function installPackage({ packageName, alreadyInstalled, askBeforeUpdating, }: {
40
42
  packageName: string;
41
43
  alreadyInstalled: boolean;
44
+ askBeforeUpdating?: boolean;
42
45
  }): Promise<void>;
43
- export declare function askForSelfHosted(): Promise<{
46
+ /**
47
+ * Asks users if they are using SaaS or self-hosted Sentry and returns the validated URL.
48
+ *
49
+ * If users started the wizard with a --url arg, that URL is used as the default and we skip
50
+ * the self-hosted question. However, the passed url is still validated and in case it's
51
+ * invalid, users are asked to enter a new one until it is valid.
52
+ *
53
+ * @param urlFromArgs the url passed via the --url arg
54
+ */
55
+ export declare function askForSelfHosted(urlFromArgs?: string): Promise<{
44
56
  url: string;
45
57
  selfHosted: boolean;
46
58
  }>;
@@ -48,5 +60,5 @@ export declare function addSentryCliRc(authToken: string): Promise<void>;
48
60
  export declare function addDotEnvSentryBuildPluginFile(authToken: string): Promise<void>;
49
61
  export declare function ensurePackageIsInstalled(packageJson: PackageDotJson, packageId: string, packageName: string): Promise<void>;
50
62
  export declare function getPackageDotJson(): Promise<PackageDotJson>;
51
- export declare function hasPackageInstalled(packageName: string, packageJson: PackageDotJson): boolean;
63
+ export declare function detectPackageManager(): 'yarn' | 'npm' | 'pnpm' | undefined;
52
64
  export {};
@@ -62,7 +62,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
62
62
  return (mod && mod.__esModule) ? mod : { "default": mod };
63
63
  };
64
64
  Object.defineProperty(exports, "__esModule", { value: true });
65
- exports.hasPackageInstalled = exports.getPackageDotJson = exports.ensurePackageIsInstalled = exports.addDotEnvSentryBuildPluginFile = exports.addSentryCliRc = exports.askForSelfHosted = exports.installPackage = exports.askForProjectSelection = exports.askForWizardLogin = exports.confirmContinueEvenThoughNoGitRepo = exports.printWelcome = exports.abortIfCancelled = exports.abort = void 0;
65
+ exports.detectPackageManager = exports.getPackageDotJson = exports.ensurePackageIsInstalled = exports.addDotEnvSentryBuildPluginFile = exports.addSentryCliRc = exports.askForSelfHosted = exports.installPackage = exports.askForProjectSelection = exports.askForItemSelection = exports.askForWizardLogin = exports.askToInstallSentryCLI = exports.confirmContinueEvenThoughNoGitRepo = exports.printWelcome = exports.abortIfCancelled = exports.abort = void 0;
66
66
  // @ts-ignore - clack is ESM and TS complains about that. It works though
67
67
  var clack = __importStar(require("@clack/prompts"));
68
68
  var axios_1 = __importDefault(require("axios"));
@@ -75,6 +75,8 @@ var url_1 = require("url");
75
75
  var util_1 = require("util");
76
76
  var Sentry = __importStar(require("@sentry/node"));
77
77
  var clack_custom_select_1 = require("./vendor/clack-custom-select");
78
+ var package_json_1 = require("./package-json");
79
+ var opn = require('opn');
78
80
  var SAAS_URL = 'https://sentry.io/';
79
81
  function abort(message, status) {
80
82
  return __awaiter(this, void 0, void 0, function () {
@@ -183,9 +185,22 @@ function confirmContinueEvenThoughNoGitRepo() {
183
185
  });
184
186
  }
185
187
  exports.confirmContinueEvenThoughNoGitRepo = confirmContinueEvenThoughNoGitRepo;
188
+ function askToInstallSentryCLI() {
189
+ return __awaiter(this, void 0, void 0, function () {
190
+ return __generator(this, function (_a) {
191
+ switch (_a.label) {
192
+ case 0: return [4 /*yield*/, abortIfCancelled(clack.confirm({
193
+ message: "You don't have Sentry CLI installed. Do you want to install it?"
194
+ }))];
195
+ case 1: return [2 /*return*/, _a.sent()];
196
+ }
197
+ });
198
+ });
199
+ }
200
+ exports.askToInstallSentryCLI = askToInstallSentryCLI;
186
201
  function askForWizardLogin(options) {
187
202
  return __awaiter(this, void 0, void 0, function () {
188
- var hasSentryAccount, wizardHash, _a, loginUrl, loginSpinner, data;
203
+ var hasSentryAccount, wizardHash, _a, loginUrl, urlToOpen, loginSpinner, data;
189
204
  return __generator(this, function (_b) {
190
205
  switch (_b.label) {
191
206
  case 0:
@@ -232,7 +247,11 @@ function askForWizardLogin(options) {
232
247
  if (options.promoCode) {
233
248
  loginUrl.searchParams.set('code', options.promoCode);
234
249
  }
235
- clack.log.info("".concat(chalk_1.default.bold("Please open the following link in your browser to ".concat(hasSentryAccount ? 'log' : 'sign', " into Sentry:")), "\n\n").concat(chalk_1.default.cyan(loginUrl.toString())));
250
+ urlToOpen = loginUrl.toString();
251
+ clack.log.info("".concat(chalk_1.default.bold("If the browser window didn't open automatically, please open the following link to ".concat(hasSentryAccount ? 'log' : 'sign', " into Sentry:")), "\n\n").concat(chalk_1.default.cyan(urlToOpen)));
252
+ opn(urlToOpen).catch(function () {
253
+ // opn throws in environments that don't have a browser (e.g. remote shells) so we just noop here
254
+ });
236
255
  loginSpinner = clack.spinner();
237
256
  loginSpinner.start("Waiting for you to log in using the link above. Once you're logged in, return to this wizard.");
238
257
  return [4 /*yield*/, new Promise(function (resolve) {
@@ -266,6 +285,29 @@ function askForWizardLogin(options) {
266
285
  });
267
286
  }
268
287
  exports.askForWizardLogin = askForWizardLogin;
288
+ function askForItemSelection(items, message) {
289
+ return __awaiter(this, void 0, void 0, function () {
290
+ var selection;
291
+ return __generator(this, function (_a) {
292
+ switch (_a.label) {
293
+ case 0: return [4 /*yield*/, abortIfCancelled((0, clack_custom_select_1.windowedSelect)({
294
+ maxItems: 12,
295
+ message: message,
296
+ options: items.map(function (item, index) {
297
+ return {
298
+ value: { value: item, index: index },
299
+ label: item,
300
+ };
301
+ }),
302
+ }))];
303
+ case 1:
304
+ selection = _a.sent();
305
+ return [2 /*return*/, selection];
306
+ }
307
+ });
308
+ });
309
+ }
310
+ exports.askForItemSelection = askForItemSelection;
269
311
  function askForProjectSelection(projects) {
270
312
  return __awaiter(this, void 0, void 0, function () {
271
313
  var selection;
@@ -284,6 +326,7 @@ function askForProjectSelection(projects) {
284
326
  case 1:
285
327
  selection = _a.sent();
286
328
  Sentry.setTag('project', selection.slug);
329
+ Sentry.setTag('project-platform', selection.platform);
287
330
  Sentry.setUser({ id: selection.organization.slug });
288
331
  return [2 /*return*/, selection];
289
332
  }
@@ -292,56 +335,56 @@ function askForProjectSelection(projects) {
292
335
  }
293
336
  exports.askForProjectSelection = askForProjectSelection;
294
337
  function installPackage(_a) {
295
- var packageName = _a.packageName, alreadyInstalled = _a.alreadyInstalled;
338
+ var packageName = _a.packageName, alreadyInstalled = _a.alreadyInstalled, _b = _a.askBeforeUpdating, askBeforeUpdating = _b === void 0 ? true : _b;
296
339
  return __awaiter(this, void 0, void 0, function () {
297
340
  var shouldUpdatePackage, sdkInstallSpinner, packageManager, e_1;
298
- return __generator(this, function (_b) {
299
- switch (_b.label) {
341
+ return __generator(this, function (_c) {
342
+ switch (_c.label) {
300
343
  case 0:
301
- if (!alreadyInstalled) return [3 /*break*/, 2];
344
+ if (!(alreadyInstalled && askBeforeUpdating)) return [3 /*break*/, 2];
302
345
  return [4 /*yield*/, abortIfCancelled(clack.confirm({
303
346
  message: "The ".concat(chalk_1.default.bold.cyan(packageName), " package is already installed. Do you want to update it to the latest version?"),
304
347
  }))];
305
348
  case 1:
306
- shouldUpdatePackage = _b.sent();
349
+ shouldUpdatePackage = _c.sent();
307
350
  if (!shouldUpdatePackage) {
308
351
  return [2 /*return*/];
309
352
  }
310
- _b.label = 2;
353
+ _c.label = 2;
311
354
  case 2:
312
355
  sdkInstallSpinner = clack.spinner();
313
356
  return [4 /*yield*/, getPackageManager()];
314
357
  case 3:
315
- packageManager = _b.sent();
358
+ packageManager = _c.sent();
316
359
  sdkInstallSpinner.start("".concat(alreadyInstalled ? 'Updating' : 'Installing', " ").concat(chalk_1.default.bold.cyan(packageName), " with ").concat(chalk_1.default.bold(packageManager), "."));
317
- _b.label = 4;
360
+ _c.label = 4;
318
361
  case 4:
319
- _b.trys.push([4, 11, , 13]);
362
+ _c.trys.push([4, 11, , 13]);
320
363
  if (!(packageManager === 'yarn')) return [3 /*break*/, 6];
321
364
  return [4 /*yield*/, (0, util_1.promisify)(childProcess.exec)("yarn add ".concat(packageName, "@latest"))];
322
365
  case 5:
323
- _b.sent();
366
+ _c.sent();
324
367
  return [3 /*break*/, 10];
325
368
  case 6:
326
369
  if (!(packageManager === 'pnpm')) return [3 /*break*/, 8];
327
370
  return [4 /*yield*/, (0, util_1.promisify)(childProcess.exec)("pnpm add ".concat(packageName, "@latest"))];
328
371
  case 7:
329
- _b.sent();
372
+ _c.sent();
330
373
  return [3 /*break*/, 10];
331
374
  case 8:
332
375
  if (!(packageManager === 'npm')) return [3 /*break*/, 10];
333
376
  return [4 /*yield*/, (0, util_1.promisify)(childProcess.exec)("npm install ".concat(packageName, "@latest"))];
334
377
  case 9:
335
- _b.sent();
336
- _b.label = 10;
378
+ _c.sent();
379
+ _c.label = 10;
337
380
  case 10: return [3 /*break*/, 13];
338
381
  case 11:
339
- e_1 = _b.sent();
382
+ e_1 = _c.sent();
340
383
  sdkInstallSpinner.stop('Installation failed.');
341
384
  clack.log.error("".concat(chalk_1.default.red('Encountered the following error during installation:'), "\n\n").concat(e_1, "\n\n").concat(chalk_1.default.dim('If you think this issue is caused by the Sentry wizard, let us know here:\nhttps://github.com/getsentry/sentry-wizard/issues')));
342
385
  return [4 /*yield*/, abort()];
343
386
  case 12:
344
- _b.sent();
387
+ _c.sent();
345
388
  return [3 /*break*/, 13];
346
389
  case 13:
347
390
  sdkInstallSpinner.stop("".concat(alreadyInstalled ? 'Updated' : 'Installed', " ").concat(chalk_1.default.bold.cyan(packageName), " with ").concat(chalk_1.default.bold(packageManager), "."));
@@ -351,34 +394,57 @@ function installPackage(_a) {
351
394
  });
352
395
  }
353
396
  exports.installPackage = installPackage;
354
- function askForSelfHosted() {
397
+ /**
398
+ * Asks users if they are using SaaS or self-hosted Sentry and returns the validated URL.
399
+ *
400
+ * If users started the wizard with a --url arg, that URL is used as the default and we skip
401
+ * the self-hosted question. However, the passed url is still validated and in case it's
402
+ * invalid, users are asked to enter a new one until it is valid.
403
+ *
404
+ * @param urlFromArgs the url passed via the --url arg
405
+ */
406
+ function askForSelfHosted(urlFromArgs) {
355
407
  return __awaiter(this, void 0, void 0, function () {
356
- var choice, validUrl, url;
357
- return __generator(this, function (_a) {
358
- switch (_a.label) {
359
- case 0: return [4 /*yield*/, abortIfCancelled(clack.select({
360
- message: 'Are you using Sentry SaaS or self-hosted Sentry?',
361
- options: [
362
- { value: 'saas', label: 'Sentry SaaS (sentry.io)' },
363
- { value: 'self-hosted', label: 'Self-hosted/on-premise/single-tenant' },
364
- ],
365
- }))];
408
+ var choice, validUrl, tmpUrlFromArgs, url, _a, isSelfHostedUrl;
409
+ return __generator(this, function (_b) {
410
+ switch (_b.label) {
411
+ case 0:
412
+ if (!!urlFromArgs) return [3 /*break*/, 2];
413
+ return [4 /*yield*/, abortIfCancelled(clack.select({
414
+ message: 'Are you using Sentry SaaS or self-hosted Sentry?',
415
+ options: [
416
+ { value: 'saas', label: 'Sentry SaaS (sentry.io)' },
417
+ {
418
+ value: 'self-hosted',
419
+ label: 'Self-hosted/on-premise/single-tenant',
420
+ },
421
+ ],
422
+ }))];
366
423
  case 1:
367
- choice = _a.sent();
424
+ choice = _b.sent();
368
425
  if (choice === 'saas') {
369
426
  Sentry.setTag('url', SAAS_URL);
370
427
  Sentry.setTag('self-hosted', false);
371
428
  return [2 /*return*/, { url: SAAS_URL, selfHosted: false }];
372
429
  }
373
- _a.label = 2;
430
+ _b.label = 2;
374
431
  case 2:
375
- if (!(validUrl === undefined)) return [3 /*break*/, 4];
432
+ tmpUrlFromArgs = urlFromArgs;
433
+ _b.label = 3;
434
+ case 3:
435
+ if (!(validUrl === undefined)) return [3 /*break*/, 6];
436
+ _a = tmpUrlFromArgs;
437
+ if (_a) return [3 /*break*/, 5];
376
438
  return [4 /*yield*/, abortIfCancelled(clack.text({
377
- message: 'Please enter the URL of your self-hosted Sentry instance.',
439
+ message: "Please enter the URL of your ".concat(urlFromArgs ? '' : 'self-hosted ', "Sentry instance."),
378
440
  placeholder: 'https://sentry.io/',
379
441
  }))];
380
- case 3:
381
- url = _a.sent();
442
+ case 4:
443
+ _a = (_b.sent());
444
+ _b.label = 5;
445
+ case 5:
446
+ url = _a;
447
+ tmpUrlFromArgs = undefined;
382
448
  try {
383
449
  validUrl = new url_1.URL(url).toString();
384
450
  // We assume everywhere else that the URL ends in a slash
@@ -386,13 +452,14 @@ function askForSelfHosted() {
386
452
  validUrl += '/';
387
453
  }
388
454
  }
389
- catch (_b) {
390
- clack.log.error('Please enter a valid URL. (It should look something like "http://sentry.mydomain.com/")');
455
+ catch (_c) {
456
+ clack.log.error('Please enter a valid URL. (It should look something like "https://sentry.mydomain.com/")');
391
457
  }
392
- return [3 /*break*/, 2];
393
- case 4:
458
+ return [3 /*break*/, 3];
459
+ case 6:
460
+ isSelfHostedUrl = new url_1.URL(validUrl).host !== new url_1.URL(SAAS_URL).host;
394
461
  Sentry.setTag('url', validUrl);
395
- Sentry.setTag('self-hosted', true);
462
+ Sentry.setTag('self-hosted', isSelfHostedUrl);
396
463
  return [2 /*return*/, { url: validUrl, selfHosted: true }];
397
464
  }
398
465
  });
@@ -525,7 +592,7 @@ function ensurePackageIsInstalled(packageJson, packageId, packageName) {
525
592
  return __generator(this, function (_a) {
526
593
  switch (_a.label) {
527
594
  case 0:
528
- if (!!hasPackageInstalled(packageId, packageJson)) return [3 /*break*/, 3];
595
+ if (!!(0, package_json_1.hasPackageInstalled)(packageId, packageJson)) return [3 /*break*/, 3];
529
596
  return [4 /*yield*/, abortIfCancelled(clack.confirm({
530
597
  message: "".concat(packageName, " does not seem to be installed. Do you still want to continue?"),
531
598
  initialValue: false,
@@ -576,27 +643,13 @@ function getPackageDotJson() {
576
643
  });
577
644
  }
578
645
  exports.getPackageDotJson = getPackageDotJson;
579
- function hasPackageInstalled(packageName, packageJson) {
580
- var _a, _b;
581
- return (!!((_a = packageJson === null || packageJson === void 0 ? void 0 : packageJson.dependencies) === null || _a === void 0 ? void 0 : _a[packageName]) ||
582
- !!((_b = packageJson === null || packageJson === void 0 ? void 0 : packageJson.devDependencies) === null || _b === void 0 ? void 0 : _b[packageName]));
583
- }
584
- exports.hasPackageInstalled = hasPackageInstalled;
585
646
  function getPackageManager() {
586
647
  return __awaiter(this, void 0, void 0, function () {
587
648
  var detectedPackageManager, selectedPackageManager;
588
649
  return __generator(this, function (_a) {
589
650
  switch (_a.label) {
590
651
  case 0:
591
- if (fs.existsSync(path.join(process.cwd(), 'yarn.lock'))) {
592
- detectedPackageManager = 'yarn';
593
- }
594
- else if (fs.existsSync(path.join(process.cwd(), 'package-lock.json'))) {
595
- detectedPackageManager = 'npm';
596
- }
597
- else if (fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml'))) {
598
- detectedPackageManager = 'pnpm';
599
- }
652
+ detectedPackageManager = detectPackageManager();
600
653
  if (detectedPackageManager) {
601
654
  return [2 /*return*/, detectedPackageManager];
602
655
  }
@@ -616,4 +669,17 @@ function getPackageManager() {
616
669
  });
617
670
  });
618
671
  }
672
+ function detectPackageManager() {
673
+ if (fs.existsSync(path.join(process.cwd(), 'yarn.lock'))) {
674
+ return 'yarn';
675
+ }
676
+ if (fs.existsSync(path.join(process.cwd(), 'package-lock.json'))) {
677
+ return 'npm';
678
+ }
679
+ if (fs.existsSync(path.join(process.cwd(), 'pnpm-lock.yaml'))) {
680
+ return 'pnpm';
681
+ }
682
+ return undefined;
683
+ }
684
+ exports.detectPackageManager = detectPackageManager;
619
685
  //# sourceMappingURL=clack-utils.js.map