@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.
- package/CHANGELOG.md +20 -0
- package/bin.ts +29 -20
- package/dist/bin.js +27 -19
- package/dist/bin.js.map +1 -1
- package/dist/lib/Constants.d.ts +2 -0
- package/dist/lib/Constants.js +5 -0
- package/dist/lib/Constants.js.map +1 -1
- package/dist/lib/Helper/Wizard.js +2 -9
- package/dist/lib/Helper/Wizard.js.map +1 -1
- package/dist/lib/Helper/__tests__/SentryCli.js +1 -0
- package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
- package/dist/lib/Setup.js.map +1 -1
- package/dist/lib/Steps/ChooseIntegration.js +30 -10
- package/dist/lib/Steps/ChooseIntegration.js.map +1 -1
- package/dist/lib/Steps/Integrations/Apple.d.ts +10 -0
- package/dist/lib/Steps/Integrations/Apple.js +92 -0
- package/dist/lib/Steps/Integrations/Apple.js.map +1 -0
- package/dist/lib/Steps/Integrations/{NextJs.d.ts → NextJsShim.d.ts} +1 -1
- package/dist/lib/Steps/Integrations/{NextJs.js → NextJsShim.js} +14 -10
- package/dist/lib/Steps/Integrations/NextJsShim.js.map +1 -0
- package/dist/lib/Steps/Integrations/SourceMapsShim.js +5 -1
- package/dist/lib/Steps/Integrations/SourceMapsShim.js.map +1 -1
- package/dist/lib/Steps/Integrations/{SvelteKit.d.ts → SvelteKitShim.d.ts} +1 -1
- package/dist/lib/Steps/Integrations/{SvelteKit.js → SvelteKitShim.js} +14 -10
- package/dist/lib/Steps/Integrations/SvelteKitShim.js.map +1 -0
- package/dist/package.json +4 -4
- package/dist/src/apple/apple-wizard.d.ts +2 -0
- package/dist/src/apple/apple-wizard.js +197 -0
- package/dist/src/apple/apple-wizard.js.map +1 -0
- package/dist/src/apple/code-tools.d.ts +1 -0
- package/dist/src/apple/code-tools.js +100 -0
- package/dist/src/apple/code-tools.js.map +1 -0
- package/dist/src/apple/templates.d.ts +4 -0
- package/dist/src/apple/templates.js +19 -0
- package/dist/src/apple/templates.js.map +1 -0
- package/dist/src/apple/xcode-manager.d.ts +4 -0
- package/dist/src/apple/xcode-manager.js +145 -0
- package/dist/src/apple/xcode-manager.js.map +1 -0
- package/dist/src/nextjs/nextjs-wizard.d.ts +2 -5
- package/dist/src/nextjs/nextjs-wizard.js +1 -1
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/sourcemaps/sourcemaps-wizard.d.ts +2 -5
- package/dist/src/sourcemaps/sourcemaps-wizard.js +154 -67
- package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
- package/dist/src/sourcemaps/tools/angular.d.ts +1 -0
- package/dist/src/sourcemaps/tools/angular.js +76 -0
- package/dist/src/sourcemaps/tools/angular.js.map +1 -0
- package/dist/src/sourcemaps/tools/create-react-app.d.ts +1 -0
- package/dist/src/sourcemaps/tools/create-react-app.js +69 -0
- package/dist/src/sourcemaps/tools/create-react-app.js.map +1 -0
- package/dist/src/sourcemaps/tools/esbuild.js +2 -1
- package/dist/src/sourcemaps/tools/esbuild.js.map +1 -1
- package/dist/src/sourcemaps/tools/rollup.js +2 -1
- package/dist/src/sourcemaps/tools/rollup.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +7 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/sourcemaps/tools/vite.js +2 -1
- package/dist/src/sourcemaps/tools/vite.js.map +1 -1
- package/dist/src/sourcemaps/tools/webpack.js +2 -1
- package/dist/src/sourcemaps/tools/webpack.js.map +1 -1
- package/dist/src/sourcemaps/utils/detect-tool.d.ts +3 -0
- package/dist/src/sourcemaps/utils/detect-tool.js +73 -0
- package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -0
- package/dist/src/sourcemaps/utils/other-wizards.d.ts +4 -0
- package/dist/src/sourcemaps/utils/other-wizards.js +183 -0
- package/dist/src/sourcemaps/utils/other-wizards.js.map +1 -0
- package/dist/src/sourcemaps/utils/sdk-version.d.ts +14 -0
- package/dist/src/sourcemaps/utils/sdk-version.js +276 -0
- package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -0
- package/dist/src/sveltekit/sveltekit-wizard.d.ts +2 -5
- package/dist/src/sveltekit/sveltekit-wizard.js +3 -2
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/telemetry.d.ts +1 -0
- package/dist/src/telemetry.js +7 -1
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/utils/bash.d.ts +3 -0
- package/dist/src/utils/bash.js +118 -0
- package/dist/src/utils/bash.js.map +1 -0
- package/dist/src/utils/clack-utils.d.ts +21 -9
- package/dist/src/utils/clack-utils.js +122 -56
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/src/utils/package-json.d.ts +19 -0
- package/dist/src/utils/package-json.js +29 -0
- package/dist/src/utils/package-json.js.map +1 -0
- package/dist/src/utils/types.d.ts +16 -0
- package/dist/src/utils/types.js +3 -0
- package/dist/src/utils/types.js.map +1 -0
- package/lib/Constants.ts +6 -0
- package/lib/Helper/Wizard.ts +3 -9
- package/lib/Helper/__tests__/SentryCli.ts +2 -1
- package/lib/Setup.ts +1 -0
- package/lib/Steps/ChooseIntegration.ts +39 -11
- package/lib/Steps/Integrations/Apple.ts +27 -0
- package/lib/Steps/Integrations/{NextJs.ts → NextJsShim.ts} +6 -2
- package/lib/Steps/Integrations/SourceMapsShim.ts +5 -1
- package/lib/Steps/Integrations/{SvelteKit.ts → SvelteKitShim.ts} +6 -2
- package/package-lock.json +8910 -0
- package/package.json +4 -4
- package/src/apple/apple-wizard.ts +150 -0
- package/src/apple/code-tools.ts +81 -0
- package/src/apple/templates.ts +39 -0
- package/src/apple/xcode-manager.ts +147 -0
- package/src/nextjs/nextjs-wizard.ts +3 -8
- package/src/sourcemaps/sourcemaps-wizard.ts +166 -91
- package/src/sourcemaps/tools/angular.ts +42 -0
- package/src/sourcemaps/tools/create-react-app.ts +19 -0
- package/src/sourcemaps/tools/esbuild.ts +1 -1
- package/src/sourcemaps/tools/rollup.ts +2 -4
- package/src/sourcemaps/tools/sentry-cli.ts +6 -1
- package/src/sourcemaps/tools/vite.ts +1 -1
- package/src/sourcemaps/tools/webpack.ts +1 -1
- package/src/sourcemaps/utils/detect-tool.ts +41 -0
- package/src/sourcemaps/utils/other-wizards.ts +148 -0
- package/src/sourcemaps/utils/sdk-version.ts +257 -0
- package/src/sveltekit/sveltekit-wizard.ts +4 -7
- package/src/telemetry.ts +8 -0
- package/src/utils/bash.ts +44 -0
- package/src/utils/clack-utils.ts +100 -51
- package/src/utils/package-json.ts +45 -0
- package/src/utils/types.ts +18 -0
- package/dist/lib/Steps/Integrations/NextJs.js.map +0 -1
- 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,
|
|
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,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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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 (
|
|
299
|
-
switch (
|
|
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 =
|
|
349
|
+
shouldUpdatePackage = _c.sent();
|
|
307
350
|
if (!shouldUpdatePackage) {
|
|
308
351
|
return [2 /*return*/];
|
|
309
352
|
}
|
|
310
|
-
|
|
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 =
|
|
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
|
-
|
|
360
|
+
_c.label = 4;
|
|
318
361
|
case 4:
|
|
319
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
336
|
-
|
|
378
|
+
_c.sent();
|
|
379
|
+
_c.label = 10;
|
|
337
380
|
case 10: return [3 /*break*/, 13];
|
|
338
381
|
case 11:
|
|
339
|
-
e_1 =
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
358
|
-
switch (
|
|
359
|
-
case 0:
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
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 =
|
|
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
|
-
|
|
430
|
+
_b.label = 2;
|
|
374
431
|
case 2:
|
|
375
|
-
|
|
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:
|
|
439
|
+
message: "Please enter the URL of your ".concat(urlFromArgs ? '' : 'self-hosted ', "Sentry instance."),
|
|
378
440
|
placeholder: 'https://sentry.io/',
|
|
379
441
|
}))];
|
|
380
|
-
case
|
|
381
|
-
|
|
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 (
|
|
390
|
-
clack.log.error('Please enter a valid URL. (It should look something like "
|
|
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*/,
|
|
393
|
-
case
|
|
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',
|
|
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
|
-
|
|
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
|