@sentry/wizard 3.23.0 → 3.23.2
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 +11 -0
- package/dist/lib/Steps/Integrations/Electron.js +4 -2
- package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
- package/dist/lib/Steps/PromptForParameters.d.ts +1 -0
- package/dist/lib/Steps/PromptForParameters.js +8 -2
- package/dist/lib/Steps/PromptForParameters.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/apple/xcode-manager.js +5 -3
- package/dist/src/apple/xcode-manager.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +24 -16
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +3 -3
- package/dist/src/nextjs/templates.js +3 -3
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/test/nextjs/templates.test.d.ts +1 -0
- package/dist/test/nextjs/templates.test.js +38 -0
- package/dist/test/nextjs/templates.test.js.map +1 -0
- package/lib/Steps/Integrations/Electron.ts +18 -3
- package/lib/Steps/PromptForParameters.ts +12 -1
- package/package.json +1 -1
- package/src/apple/xcode-manager.ts +9 -5
- package/src/nextjs/nextjs-wizard.ts +32 -12
- package/src/nextjs/templates.ts +7 -5
- package/test/nextjs/templates.test.ts +147 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.23.2
|
|
4
|
+
|
|
5
|
+
- feat(nextjs): Detect typescript usage and emit files accordingly (#580)
|
|
6
|
+
- fix(step-wizards): Show correct URL when prompting DSN (#577)
|
|
7
|
+
- feat(electron): Update code examples for v5 (#591)
|
|
8
|
+
|
|
9
|
+
## 3.23.1
|
|
10
|
+
|
|
11
|
+
- fix(nextjs): Replace `url` with `sentryUrl` in `withSentryConfig` options (#579)
|
|
12
|
+
|
|
3
13
|
## 3.23.0
|
|
4
14
|
|
|
15
|
+
- feat(apple): Disable build script sandboxing (#574)
|
|
5
16
|
- feat(reactnative): Added comment to add spotlight in Sentry.init for React Native config (#548)
|
|
6
17
|
- feat(reactnative): Added `withSentryConfig` Metro patch (#575)
|
|
7
18
|
|
|
@@ -84,7 +84,8 @@ var SentryCli_1 = require("../../Helper/SentryCli");
|
|
|
84
84
|
var BaseIntegration_1 = require("./BaseIntegration");
|
|
85
85
|
var MIN_ELECTRON_VERSION_STRING = '2.0.0';
|
|
86
86
|
var MIN_ELECTRON_VERSION = parseInt(MIN_ELECTRON_VERSION_STRING.replace(/\D+/g, ''), 10);
|
|
87
|
-
var
|
|
87
|
+
var CODE_EXAMPLE_MAIN = "// ESM\nimport * as Sentry from '@sentry/electron/main';\n// CommonJs\nconst Sentry = require('@sentry/electron/main');\n\nSentry.init({\n dsn: '___DSN___',\n});";
|
|
88
|
+
var CODE_EXAMPLE_RENDERER = "// ESM\nimport * as Sentry from '@sentry/electron/renderer';\n// CommonJs\nconst Sentry = require('@sentry/electron/renderer');\n\nSentry.init({});";
|
|
88
89
|
var appPackage = {};
|
|
89
90
|
function printExample(example, title) {
|
|
90
91
|
if (title === void 0) { title = ''; }
|
|
@@ -120,7 +121,8 @@ var Electron = /** @class */ (function (_super) {
|
|
|
120
121
|
fs.writeFileSync('./sentry.properties', this._sentryCli.dumpProperties(sentryCliProps));
|
|
121
122
|
(0, Logging_1.green)('Successfully created sentry.properties');
|
|
122
123
|
(0, Logging_1.nl)();
|
|
123
|
-
printExample(
|
|
124
|
+
printExample(CODE_EXAMPLE_MAIN.replace('___DSN___', dsn), 'Add these lines in to your main process code to setup Sentry:');
|
|
125
|
+
printExample(CODE_EXAMPLE_RENDERER, 'Add these lines in to your renderer processes code to setup Sentry:');
|
|
124
126
|
(0, Logging_1.l)('For more information, see https://docs.sentry.io/clients/electron/');
|
|
125
127
|
(0, Logging_1.nl)();
|
|
126
128
|
return [2 /*return*/, {}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Electron.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/Electron.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAyB;AAEzB,qCAAkC;AAClC,wCAA4B;AAC5B,yCAA6B;AAG7B,gDAA8D;AAC9D,oDAAmD;AACnD,qDAAoD;AAEpD,IAAM,2BAA2B,GAAG,OAAO,CAAC;AAC5C,IAAM,oBAAoB,GAAG,QAAQ,CACnC,2BAA2B,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAC/C,EAAE,CACH,CAAC;AAEF,IAAM,
|
|
1
|
+
{"version":3,"file":"Electron.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/Electron.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport type { Answers } from 'inquirer';\nimport { prompt } from 'inquirer';\nimport * as _ from 'lodash';\nimport * as path from 'path';\n\nimport type { Args } from '../../Constants';\nimport { dim, green, l, nl, red } from '../../Helper/Logging';\nimport { SentryCli } from '../../Helper/SentryCli';\nimport { BaseIntegration } from './BaseIntegration';\n\nconst MIN_ELECTRON_VERSION_STRING = '2.0.0';\nconst MIN_ELECTRON_VERSION = parseInt(\n MIN_ELECTRON_VERSION_STRING.replace(/\\D+/g, ''),\n 10,\n);\n\nconst CODE_EXAMPLE_MAIN = `// ESM\nimport * as Sentry from '@sentry/electron/main';\n// CommonJs\nconst Sentry = require('@sentry/electron/main');\n\nSentry.init({\n dsn: '___DSN___',\n});`;\n\nconst CODE_EXAMPLE_RENDERER = `// ESM\nimport * as Sentry from '@sentry/electron/renderer';\n// CommonJs\nconst Sentry = require('@sentry/electron/renderer');\n\nSentry.init({});`;\n\nlet appPackage: any = {};\n\nfunction printExample(example: string, title = ''): void {\n if (title) {\n l(title);\n }\n\n nl();\n dim(example.replace(/^/gm, ' '));\n nl();\n}\n\ntry {\n appPackage = require(path.join(process.cwd(), 'package.json'));\n} catch {\n // We don't need to have this\n}\n\nexport class Electron extends BaseIntegration {\n protected _sentryCli: SentryCli;\n\n public constructor(protected _argv: Args) {\n super(_argv);\n this._sentryCli = new SentryCli(this._argv);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async emit(answers: Answers): Promise<Answers> {\n const dsn = _.get(answers, ['config', 'dsn', 'public'], null);\n nl();\n\n const sentryCliProps = this._sentryCli.convertAnswersToProperties(answers);\n fs.writeFileSync(\n './sentry.properties',\n this._sentryCli.dumpProperties(sentryCliProps),\n );\n green('Successfully created sentry.properties');\n nl();\n\n printExample(\n CODE_EXAMPLE_MAIN.replace('___DSN___', dsn),\n 'Add these lines in to your main process code to setup Sentry:',\n );\n\n printExample(\n CODE_EXAMPLE_RENDERER,\n 'Add these lines in to your renderer processes code to setup Sentry:',\n );\n\n l('For more information, see https://docs.sentry.io/clients/electron/');\n nl();\n\n return {};\n }\n\n public async shouldConfigure(_answers: Answers): Promise<Answers> {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (this._shouldConfigure) {\n return this._shouldConfigure;\n }\n\n let success = true;\n nl();\n\n success =\n this._checkDep('electron', MIN_ELECTRON_VERSION_STRING) && success;\n success = this._checkDep('@sentry/electron') && success;\n\n let continued: Answers = { continue: true };\n if (!success && !this._argv.quiet) {\n continued = await prompt({\n message:\n 'There were errors during your project checkup, do you still want to continue?',\n name: 'continue',\n default: false,\n type: 'confirm',\n });\n }\n\n nl();\n\n if (!_.get(continued, 'continue', false)) {\n throw new Error('Please install the required dependencies to continue.');\n }\n\n this._shouldConfigure = Promise.resolve({ electron: true });\n // eslint-disable-next-line @typescript-eslint/unbound-method\n return this.shouldConfigure;\n }\n\n private _checkDep(packageName: string, minVersion?: string): boolean {\n const depVersion = parseInt(\n _.get(appPackage, ['dependencies', packageName], '0').replace(/\\D+/g, ''),\n 10,\n );\n const devDepVersion = parseInt(\n _.get(appPackage, ['devDependencies', packageName], '0').replace(\n /\\D+/g,\n '',\n ),\n 10,\n );\n\n if (\n !_.get(appPackage, `dependencies.${packageName}`, false) &&\n !_.get(appPackage, `devDependencies.${packageName}`, false)\n ) {\n red(`✗ ${packageName} isn't in your dependencies`);\n red(' please install it with yarn/npm');\n return false;\n } else if (\n minVersion &&\n depVersion < MIN_ELECTRON_VERSION &&\n devDepVersion < MIN_ELECTRON_VERSION\n ) {\n red(\n `✗ Your installed version of ${packageName} is to old, >${MIN_ELECTRON_VERSION_STRING} needed`,\n );\n return false;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n minVersion\n ? green(`✓ ${packageName} > ${minVersion} is installed`)\n : green(`✓ ${packageName} is installed`);\n return true;\n }\n }\n}\n"]}
|
|
@@ -87,7 +87,7 @@ var PromptForParameters = /** @class */ (function (_super) {
|
|
|
87
87
|
}
|
|
88
88
|
PromptForParameters.prototype.emit = function (answers) {
|
|
89
89
|
return __awaiter(this, void 0, void 0, function () {
|
|
90
|
-
var url, organization, project, dsn, auth;
|
|
90
|
+
var url, organization, project, dsnKeyUrl, dsn, auth;
|
|
91
91
|
var _this = this;
|
|
92
92
|
return __generator(this, function (_a) {
|
|
93
93
|
switch (_a.label) {
|
|
@@ -134,6 +134,7 @@ var PromptForParameters = /** @class */ (function (_super) {
|
|
|
134
134
|
case 3:
|
|
135
135
|
project = _a.sent();
|
|
136
136
|
url = this._getFullUrl(answers, organization.slug, project.slug);
|
|
137
|
+
dsnKeyUrl = this._getDSNKeyUrl(answers, project.slug);
|
|
137
138
|
return [4 /*yield*/, (0, inquirer_1.prompt)([
|
|
138
139
|
{
|
|
139
140
|
message: 'DSN:',
|
|
@@ -143,7 +144,7 @@ var PromptForParameters = /** @class */ (function (_super) {
|
|
|
143
144
|
validate: this._validateDSN,
|
|
144
145
|
when: this._shouldAsk(answers, 'config.dsn.public', function () {
|
|
145
146
|
(0, Logging_1.dim)('Please copy/paste your DSN');
|
|
146
|
-
(0, Logging_1.dim)("It can be found here: ".concat(
|
|
147
|
+
(0, Logging_1.dim)("It can be found here: ".concat(dsnKeyUrl));
|
|
147
148
|
}),
|
|
148
149
|
},
|
|
149
150
|
])];
|
|
@@ -183,6 +184,11 @@ var PromptForParameters = /** @class */ (function (_super) {
|
|
|
183
184
|
var projSlug = _.get(answers, 'config.project.slug', projectSlug || 'project_slug');
|
|
184
185
|
return "".concat(baseUrl).concat(orgSlug, "/").concat(projSlug);
|
|
185
186
|
};
|
|
187
|
+
PromptForParameters.prototype._getDSNKeyUrl = function (answers, projectSlug) {
|
|
188
|
+
var baseUrl = this._argv.url;
|
|
189
|
+
var projSlug = _.get(answers, 'config.project.slug', projectSlug || 'project_slug');
|
|
190
|
+
return "".concat(baseUrl, "settings/projects/").concat(projSlug, "/keys");
|
|
191
|
+
};
|
|
186
192
|
PromptForParameters.prototype._shouldAsk = function (answers, configKey, preHook) {
|
|
187
193
|
var shouldAsk = _.get(answers, configKey, null) === null;
|
|
188
194
|
if (shouldAsk && preHook) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptForParameters.js","sourceRoot":"","sources":["../../../lib/Steps/PromptForParameters.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Answers } from 'inquirer';\nimport { prompt } from 'inquirer';\nimport * as _ from 'lodash';\n\nimport { dim } from '../Helper/Logging';\nimport { getCurrentIntegration } from '../Helper/Wizard';\nimport { BaseStep } from './BaseStep';\n\nexport class PromptForParameters extends BaseStep {\n public async emit(answers: Answers): Promise<Answers> {\n this.debug(answers);\n if (!(await getCurrentIntegration(answers).shouldEmit(answers))) {\n return {};\n }\n if (this._argv.quiet) {\n return {};\n }\n\n let url = this._getFullUrl(answers);\n const organization: any = await prompt([\n {\n message: 'Organization Slug:',\n name: 'slug',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateSlug,\n when: this._shouldAsk(answers, 'config.organization.slug', () => {\n dim('Please copy/paste your organization slug');\n dim(`It can be found in the url ${url}`);\n }),\n },\n ]);\n\n url = this._getFullUrl(answers, organization.slug);\n const project: any = await prompt([\n {\n message: 'Project Slug:',\n name: 'slug',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateSlug,\n when: this._shouldAsk(answers, 'config.project.slug', () => {\n dim('Please copy/paste your project slug');\n dim(`It can be found in the url ${url}`);\n }),\n },\n ]);\n\n url = this._getFullUrl(answers, organization.slug, project.slug);\n const dsn = await prompt([\n {\n message: 'DSN:',\n name: 'public',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateDSN,\n when: this._shouldAsk(answers, 'config.dsn.public', () => {\n dim('Please copy/paste your DSN');\n dim(`It can be found here: ${url}`);\n }),\n },\n ]);\n\n const auth = await prompt([\n {\n message: 'Auth Token:',\n name: 'token',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateAuthToken,\n when: this._shouldAsk(answers, 'config.auth.token', () => {\n dim('Please copy/paste your auth token');\n dim(`It can be found here: ${this._argv.url}api/`);\n dim(\n 'In case there is none yet, create one with [project:releases] permission',\n );\n }),\n },\n ]);\n\n return {\n config: _.merge(_.get(answers, 'config'), {\n auth,\n dsn,\n project,\n organization,\n }),\n };\n }\n\n private _getFullUrl(\n answers: Answers,\n organizationSlug?: string,\n projectSlug?: string,\n ): string {\n const baseUrl = this._argv.url;\n const orgSlug = _.get(\n answers,\n 'config.organization.slug',\n organizationSlug || 'organization_slug',\n );\n const projSlug = _.get(\n answers,\n 'config.project.slug',\n projectSlug || 'project_slug',\n );\n return `${baseUrl}${orgSlug}/${projSlug}`;\n }\n\n private _shouldAsk(\n answers: Answers,\n configKey: string,\n preHook?: () => void,\n ): boolean {\n const shouldAsk = _.get(answers, configKey, null) === null;\n if (shouldAsk && preHook) {\n preHook();\n }\n return shouldAsk;\n }\n\n private _validateAuthToken(input: string): boolean | string {\n const isOrgToken = input.startsWith('sntrys_');\n\n if (isOrgToken) {\n if (!isValidOrgToken(input)) {\n return 'Make sure you correctly copied your auth token. It should start with \"sntrys_\"';\n }\n return true;\n }\n\n if (!input.match(/(sntrys_)?[0-9a-f]{64}/g)) {\n return 'Make sure you copied the correct auth token, it should be 64 hex chars';\n }\n return true;\n }\n\n private _validateSlug(input: string): boolean | string {\n if (input.match(/[A-Z]/g)) {\n return 'Please copy the slug from the url, it should be all lowercase';\n }\n if (input.length === 0) {\n return \"Can't be empty\";\n }\n return true;\n }\n\n private _validateDSN(input: string): boolean | string {\n const match = input.match(\n /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w.-]+)(?::(\\d+))?(\\/.*)$/,\n );\n if (!match) {\n return 'Invalid DSN format';\n }\n if (match[1] !== 'http' && match[1] !== 'https') {\n return `Unsupported protocol for DSN: ${match[1]}`;\n }\n return true;\n }\n}\n\ntype MaybeOrgAuthToken = {\n iat?: number;\n url?: string;\n org?: string;\n region_url?: string;\n};\n\n/**\n * Trying to parse and decode an org auth token. Based on:\n * - https://github.com/getsentry/rfcs/blob/main/text/0091-ci-upload-tokens.md#parsing-tokens\n * - https://github.com/getsentry/rfcs/blob/main/text/0091-ci-upload-tokens.md#token-facts\n */\nfunction isValidOrgToken(input: string): boolean {\n if (!input.startsWith('sntrys_')) {\n return false;\n }\n\n const tokenParts = input.split('_');\n if (tokenParts.length < 3) {\n return false;\n }\n\n try {\n const payload = tokenParts[1];\n const decodedPayload = Buffer.from(payload, 'base64').toString();\n const jsonPayload = JSON.parse(decodedPayload) as MaybeOrgAuthToken;\n if (!jsonPayload.iat || !jsonPayload.url || !jsonPayload.org) {\n return false;\n }\n } catch {\n return false;\n }\n\n return true;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PromptForParameters.js","sourceRoot":"","sources":["../../../lib/Steps/PromptForParameters.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Answers } from 'inquirer';\nimport { prompt } from 'inquirer';\nimport * as _ from 'lodash';\n\nimport { dim } from '../Helper/Logging';\nimport { getCurrentIntegration } from '../Helper/Wizard';\nimport { BaseStep } from './BaseStep';\n\nexport class PromptForParameters extends BaseStep {\n public async emit(answers: Answers): Promise<Answers> {\n this.debug(answers);\n if (!(await getCurrentIntegration(answers).shouldEmit(answers))) {\n return {};\n }\n if (this._argv.quiet) {\n return {};\n }\n\n let url = this._getFullUrl(answers);\n const organization: any = await prompt([\n {\n message: 'Organization Slug:',\n name: 'slug',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateSlug,\n when: this._shouldAsk(answers, 'config.organization.slug', () => {\n dim('Please copy/paste your organization slug');\n dim(`It can be found in the url ${url}`);\n }),\n },\n ]);\n\n url = this._getFullUrl(answers, organization.slug);\n const project: any = await prompt([\n {\n message: 'Project Slug:',\n name: 'slug',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateSlug,\n when: this._shouldAsk(answers, 'config.project.slug', () => {\n dim('Please copy/paste your project slug');\n dim(`It can be found in the url ${url}`);\n }),\n },\n ]);\n\n url = this._getFullUrl(answers, organization.slug, project.slug);\n const dsnKeyUrl = this._getDSNKeyUrl(answers, project.slug);\n const dsn = await prompt([\n {\n message: 'DSN:',\n name: 'public',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateDSN,\n when: this._shouldAsk(answers, 'config.dsn.public', () => {\n dim('Please copy/paste your DSN');\n dim(`It can be found here: ${dsnKeyUrl}`);\n }),\n },\n ]);\n\n const auth = await prompt([\n {\n message: 'Auth Token:',\n name: 'token',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateAuthToken,\n when: this._shouldAsk(answers, 'config.auth.token', () => {\n dim('Please copy/paste your auth token');\n dim(`It can be found here: ${this._argv.url}api/`);\n dim(\n 'In case there is none yet, create one with [project:releases] permission',\n );\n }),\n },\n ]);\n\n return {\n config: _.merge(_.get(answers, 'config'), {\n auth,\n dsn,\n project,\n organization,\n }),\n };\n }\n\n private _getFullUrl(\n answers: Answers,\n organizationSlug?: string,\n projectSlug?: string,\n ): string {\n const baseUrl = this._argv.url;\n const orgSlug = _.get(\n answers,\n 'config.organization.slug',\n organizationSlug || 'organization_slug',\n );\n const projSlug = _.get(\n answers,\n 'config.project.slug',\n projectSlug || 'project_slug',\n );\n return `${baseUrl}${orgSlug}/${projSlug}`;\n }\n\n private _getDSNKeyUrl(answers: Answers, projectSlug?: string): string {\n const baseUrl = this._argv.url;\n const projSlug = _.get(\n answers,\n 'config.project.slug',\n projectSlug || 'project_slug',\n );\n return `${baseUrl}settings/projects/${projSlug}/keys`;\n }\n\n private _shouldAsk(\n answers: Answers,\n configKey: string,\n preHook?: () => void,\n ): boolean {\n const shouldAsk = _.get(answers, configKey, null) === null;\n if (shouldAsk && preHook) {\n preHook();\n }\n return shouldAsk;\n }\n\n private _validateAuthToken(input: string): boolean | string {\n const isOrgToken = input.startsWith('sntrys_');\n\n if (isOrgToken) {\n if (!isValidOrgToken(input)) {\n return 'Make sure you correctly copied your auth token. It should start with \"sntrys_\"';\n }\n return true;\n }\n\n if (!input.match(/(sntrys_)?[0-9a-f]{64}/g)) {\n return 'Make sure you copied the correct auth token, it should be 64 hex chars';\n }\n return true;\n }\n\n private _validateSlug(input: string): boolean | string {\n if (input.match(/[A-Z]/g)) {\n return 'Please copy the slug from the url, it should be all lowercase';\n }\n if (input.length === 0) {\n return \"Can't be empty\";\n }\n return true;\n }\n\n private _validateDSN(input: string): boolean | string {\n const match = input.match(\n /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w.-]+)(?::(\\d+))?(\\/.*)$/,\n );\n if (!match) {\n return 'Invalid DSN format';\n }\n if (match[1] !== 'http' && match[1] !== 'https') {\n return `Unsupported protocol for DSN: ${match[1]}`;\n }\n return true;\n }\n}\n\ntype MaybeOrgAuthToken = {\n iat?: number;\n url?: string;\n org?: string;\n region_url?: string;\n};\n\n/**\n * Trying to parse and decode an org auth token. Based on:\n * - https://github.com/getsentry/rfcs/blob/main/text/0091-ci-upload-tokens.md#parsing-tokens\n * - https://github.com/getsentry/rfcs/blob/main/text/0091-ci-upload-tokens.md#token-facts\n */\nfunction isValidOrgToken(input: string): boolean {\n if (!input.startsWith('sntrys_')) {\n return false;\n }\n\n const tokenParts = input.split('_');\n if (tokenParts.length < 3) {\n return false;\n }\n\n try {\n const payload = tokenParts[1];\n const decodedPayload = Buffer.from(payload, 'base64').toString();\n const jsonPayload = JSON.parse(decodedPayload) as MaybeOrgAuthToken;\n if (!jsonPayload.iat || !jsonPayload.url || !jsonPayload.org) {\n return false;\n }\n } catch {\n return false;\n }\n\n return true;\n}\n"]}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/wizard",
|
|
3
|
-
"version": "3.23.
|
|
3
|
+
"version": "3.23.2",
|
|
4
4
|
"homepage": "https://github.com/getsentry/sentry-wizard",
|
|
5
5
|
"repository": "https://github.com/getsentry/sentry-wizard",
|
|
6
6
|
"description": "Sentry wizard helping you to configure your project",
|
|
@@ -37,7 +37,7 @@ var fs = __importStar(require("fs"));
|
|
|
37
37
|
var templates = __importStar(require("./templates"));
|
|
38
38
|
var path = __importStar(require("path"));
|
|
39
39
|
var xcode = require('xcode');
|
|
40
|
-
function
|
|
40
|
+
function setDebugInformationFormatAndSandbox(proj, targetName) {
|
|
41
41
|
var xcObjects = proj.hash.project.objects;
|
|
42
42
|
var targetKey = Object.keys(xcObjects.PBXNativeTarget || {}).filter(function (key) {
|
|
43
43
|
return (!key.endsWith('_comment') &&
|
|
@@ -45,7 +45,9 @@ function setDebugInformationFormat(proj, targetName) {
|
|
|
45
45
|
})[0];
|
|
46
46
|
var target = xcObjects.PBXNativeTarget[targetKey];
|
|
47
47
|
xcObjects.XCConfigurationList[target.buildConfigurationList].buildConfigurations.forEach(function (buildConfig) {
|
|
48
|
-
xcObjects.XCBuildConfiguration[buildConfig.value].buildSettings
|
|
48
|
+
var buildSettings = xcObjects.XCBuildConfiguration[buildConfig.value].buildSettings;
|
|
49
|
+
buildSettings.DEBUG_INFORMATION_FORMAT = '"dwarf-with-dsym"';
|
|
50
|
+
buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '"NO"';
|
|
49
51
|
});
|
|
50
52
|
}
|
|
51
53
|
function addSentrySPM(proj, targetName) {
|
|
@@ -178,7 +180,7 @@ var XcodeProject = /** @class */ (function () {
|
|
|
178
180
|
if (uploadSource === void 0) { uploadSource = true; }
|
|
179
181
|
addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);
|
|
180
182
|
if (uploadSource) {
|
|
181
|
-
|
|
183
|
+
setDebugInformationFormatAndSandbox(this.project, target);
|
|
182
184
|
}
|
|
183
185
|
if (addSPMReference) {
|
|
184
186
|
addSentrySPM(this.project, target);
|
|
@@ -1 +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// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as fs from 'fs';\nimport { SentryProjectData } from '../utils/types';\nimport * as templates from './templates';\nimport * as path from 'path';\nconst xcode = require('xcode');\n\ninterface ProjetFile {\n key: string;\n path: string;\n}\n\nfunction setDebugInformationFormat(proj: any, targetName: string): void {\n const xcObjects = proj.hash.project.objects;\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey];\n\n xcObjects.XCConfigurationList[\n target.buildConfigurationList\n ].buildConfigurations.forEach((buildConfig: { value: string }) => {\n xcObjects.XCBuildConfiguration[\n buildConfig.value\n ].buildSettings.DEBUG_INFORMATION_FORMAT = '\"dwarf-with-dsym\"';\n });\n}\n\nfunction addSentrySPM(proj: any, targetName: string): 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'] =\n '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 targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey];\n\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 if (!xcObjects.XCRemoteSwiftPackageReference) {\n xcObjects.XCRemoteSwiftPackageReference = {};\n }\n\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'] =\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"';\n\n if (!xcObjects.XCSwiftPackageProductDependency) {\n xcObjects.XCSwiftPackageProductDependency = {};\n }\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] = {\n isa: 'XCSwiftPackageProductDependency',\n package: sentrySwiftPackageUUID,\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n };\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID + '_comment'] =\n 'Sentry';\n\n clack.log.step('Added Sentry SPM dependency to your project');\n}\n\nfunction addUploadSymbolsScript(\n xcodeProject: any,\n sentryProject: SentryProjectData,\n targetName: string,\n uploadSource = true,\n): void {\n const xcObjects = xcodeProject.hash.project.objects;\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\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 targetKey,\n {\n inputFileListPaths: [],\n outputFileListPaths: [],\n inputPaths: [templates.scriptInputPath],\n shellPath: '/bin/sh',\n shellScript: templates.getRunScriptTemplate(\n sentryProject.organization.slug,\n sentryProject.slug,\n uploadSource,\n ),\n },\n );\n clack.log.step(`Added Sentry upload script to \"${targetName}\" build phase`);\n}\n\nexport class XcodeProject {\n projectPath: string;\n project: any;\n objects: any;\n files: ProjetFile[] | undefined;\n\n public constructor(projectPath: string) {\n this.projectPath = projectPath;\n this.project = xcode.project(projectPath);\n this.project.parseSync();\n this.objects = this.project.hash.project.objects;\n }\n\n public getAllTargets(): string[] {\n return Object.keys(this.objects.PBXNativeTarget || {})\n .filter((key) => {\n return (\n !key.endsWith('_comment') &&\n this.objects.PBXNativeTarget[key].productType.startsWith(\n '\"com.apple.product-type.application',\n )\n );\n })\n .map((key) => {\n return this.objects.PBXNativeTarget[key].name as string;\n });\n }\n\n public updateXcodeProject(\n sentryProject: SentryProjectData,\n target: string,\n apiKeys: { token: string },\n addSPMReference: boolean,\n uploadSource = true,\n ): void {\n addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);\n if (uploadSource) {\n setDebugInformationFormat(this.project, target);\n }\n if (addSPMReference) {\n addSentrySPM(this.project, target);\n }\n const newContent = this.project.writeSync();\n fs.writeFileSync(this.projectPath, newContent);\n }\n\n public filesForTarget(target: string): string[] | undefined {\n const files = this.projectFiles();\n const fileDictionary: any = {};\n files.forEach((file) => {\n fileDictionary[file.key] = file.path;\n });\n\n const nativeTarget = Object.keys(this.objects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n this.objects.PBXNativeTarget[key].name === target\n );\n },\n )[0];\n\n if (nativeTarget === undefined) {\n return undefined;\n }\n\n const buildPhaseKey = this.objects.PBXNativeTarget[\n nativeTarget\n ].buildPhases.filter((phase: any) => {\n return this.objects.PBXSourcesBuildPhase[phase.value] !== undefined;\n })[0];\n\n if (buildPhaseKey === undefined) {\n return undefined;\n }\n\n const buildPhases = this.objects.PBXSourcesBuildPhase[buildPhaseKey.value];\n if (buildPhases === undefined) {\n return undefined;\n }\n\n const baseDir = path.dirname(path.dirname(this.projectPath));\n\n return buildPhases.files\n .map((file: any) => {\n const buildFile = fileDictionary[\n this.objects.PBXBuildFile[file.value].fileRef\n ] as string;\n if (!buildFile) {\n return '';\n }\n return path.join(baseDir, buildFile);\n })\n .filter((f: string) => f.length > 0) as string[];\n }\n\n projectFiles(): ProjetFile[] {\n if (this.files === undefined) {\n const proj = this.project.getFirstProject();\n const mainGroupKey = proj.firstProject.mainGroup;\n const mainGroup = this.objects.PBXGroup[mainGroupKey];\n this.files = this.buildGroup(mainGroup);\n }\n return this.files;\n }\n\n buildGroup(group: any, path = ''): ProjetFile[] {\n const result: ProjetFile[] = [];\n for (const child of group.children) {\n if (this.objects.PBXFileReference[child.value]) {\n const fileReference = this.objects.PBXFileReference[child.value];\n result.push({\n key: child.value,\n path: `${path}${fileReference.path.replace(/\"/g, '')}`,\n });\n } else if (this.objects.PBXGroup[child.value]) {\n const groupReference = this.objects.PBXGroup[child.value];\n const groupChildren = this.buildGroup(\n groupReference,\n groupReference.path\n ? `${path}${groupReference.path.replace(/\"/g, '')}/`\n : path,\n );\n result.push(...groupChildren);\n }\n }\n return result;\n }\n}\n"]}
|
|
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// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as fs from 'fs';\nimport { SentryProjectData } from '../utils/types';\nimport * as templates from './templates';\nimport * as path from 'path';\nconst xcode = require('xcode');\n\ninterface ProjetFile {\n key: string;\n path: string;\n}\n\nfunction setDebugInformationFormatAndSandbox(\n proj: any,\n targetName: string,\n): void {\n const xcObjects = proj.hash.project.objects;\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey];\n\n xcObjects.XCConfigurationList[\n target.buildConfigurationList\n ].buildConfigurations.forEach((buildConfig: { value: string }) => {\n const buildSettings =\n xcObjects.XCBuildConfiguration[buildConfig.value].buildSettings;\n buildSettings.DEBUG_INFORMATION_FORMAT = '\"dwarf-with-dsym\"';\n buildSettings.ENABLE_USER_SCRIPT_SANDBOXING = '\"NO\"';\n });\n}\n\nfunction addSentrySPM(proj: any, targetName: string): 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'] =\n '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 targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\n const target = xcObjects.PBXNativeTarget[targetKey];\n\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 if (!xcObjects.XCRemoteSwiftPackageReference) {\n xcObjects.XCRemoteSwiftPackageReference = {};\n }\n\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'] =\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"';\n\n if (!xcObjects.XCSwiftPackageProductDependency) {\n xcObjects.XCSwiftPackageProductDependency = {};\n }\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID] = {\n isa: 'XCSwiftPackageProductDependency',\n package: sentrySwiftPackageUUID,\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n };\n xcObjects.XCSwiftPackageProductDependency[sentrySPMUUID + '_comment'] =\n 'Sentry';\n\n clack.log.step('Added Sentry SPM dependency to your project');\n}\n\nfunction addUploadSymbolsScript(\n xcodeProject: any,\n sentryProject: SentryProjectData,\n targetName: string,\n uploadSource = true,\n): void {\n const xcObjects = xcodeProject.hash.project.objects;\n const targetKey: string = Object.keys(xcObjects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n xcObjects.PBXNativeTarget[key].name === targetName\n );\n },\n )[0];\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 targetKey,\n {\n inputFileListPaths: [],\n outputFileListPaths: [],\n inputPaths: [templates.scriptInputPath],\n shellPath: '/bin/sh',\n shellScript: templates.getRunScriptTemplate(\n sentryProject.organization.slug,\n sentryProject.slug,\n uploadSource,\n ),\n },\n );\n clack.log.step(`Added Sentry upload script to \"${targetName}\" build phase`);\n}\n\nexport class XcodeProject {\n projectPath: string;\n project: any;\n objects: any;\n files: ProjetFile[] | undefined;\n\n public constructor(projectPath: string) {\n this.projectPath = projectPath;\n this.project = xcode.project(projectPath);\n this.project.parseSync();\n this.objects = this.project.hash.project.objects;\n }\n\n public getAllTargets(): string[] {\n return Object.keys(this.objects.PBXNativeTarget || {})\n .filter((key) => {\n return (\n !key.endsWith('_comment') &&\n this.objects.PBXNativeTarget[key].productType.startsWith(\n '\"com.apple.product-type.application',\n )\n );\n })\n .map((key) => {\n return this.objects.PBXNativeTarget[key].name as string;\n });\n }\n\n public updateXcodeProject(\n sentryProject: SentryProjectData,\n target: string,\n apiKeys: { token: string },\n addSPMReference: boolean,\n uploadSource = true,\n ): void {\n addUploadSymbolsScript(this.project, sentryProject, target, uploadSource);\n if (uploadSource) {\n setDebugInformationFormatAndSandbox(this.project, target);\n }\n if (addSPMReference) {\n addSentrySPM(this.project, target);\n }\n const newContent = this.project.writeSync();\n fs.writeFileSync(this.projectPath, newContent);\n }\n\n public filesForTarget(target: string): string[] | undefined {\n const files = this.projectFiles();\n const fileDictionary: any = {};\n files.forEach((file) => {\n fileDictionary[file.key] = file.path;\n });\n\n const nativeTarget = Object.keys(this.objects.PBXNativeTarget || {}).filter(\n (key) => {\n return (\n !key.endsWith('_comment') &&\n this.objects.PBXNativeTarget[key].name === target\n );\n },\n )[0];\n\n if (nativeTarget === undefined) {\n return undefined;\n }\n\n const buildPhaseKey = this.objects.PBXNativeTarget[\n nativeTarget\n ].buildPhases.filter((phase: any) => {\n return this.objects.PBXSourcesBuildPhase[phase.value] !== undefined;\n })[0];\n\n if (buildPhaseKey === undefined) {\n return undefined;\n }\n\n const buildPhases = this.objects.PBXSourcesBuildPhase[buildPhaseKey.value];\n if (buildPhases === undefined) {\n return undefined;\n }\n\n const baseDir = path.dirname(path.dirname(this.projectPath));\n\n return buildPhases.files\n .map((file: any) => {\n const buildFile = fileDictionary[\n this.objects.PBXBuildFile[file.value].fileRef\n ] as string;\n if (!buildFile) {\n return '';\n }\n return path.join(baseDir, buildFile);\n })\n .filter((f: string) => f.length > 0) as string[];\n }\n\n projectFiles(): ProjetFile[] {\n if (this.files === undefined) {\n const proj = this.project.getFirstProject();\n const mainGroupKey = proj.firstProject.mainGroup;\n const mainGroup = this.objects.PBXGroup[mainGroupKey];\n this.files = this.buildGroup(mainGroup);\n }\n return this.files;\n }\n\n buildGroup(group: any, path = ''): ProjetFile[] {\n const result: ProjetFile[] = [];\n for (const child of group.children) {\n if (this.objects.PBXFileReference[child.value]) {\n const fileReference = this.objects.PBXFileReference[child.value];\n result.push({\n key: child.value,\n path: `${path}${fileReference.path.replace(/\"/g, '')}`,\n });\n } else if (this.objects.PBXGroup[child.value]) {\n const groupReference = this.objects.PBXGroup[child.value];\n const groupChildren = this.buildGroup(\n groupReference,\n groupReference.path\n ? `${path}${groupReference.path.replace(/\"/g, '')}/`\n : path,\n );\n result.push(...groupChildren);\n }\n }\n return result;\n }\n}\n"]}
|
|
@@ -97,7 +97,7 @@ exports.runNextjsWizard = runNextjsWizard;
|
|
|
97
97
|
function runNextjsWizardWithTelemetry(options) {
|
|
98
98
|
var _a;
|
|
99
99
|
return __awaiter(this, void 0, void 0, function () {
|
|
100
|
-
var packageJson, nextVersion, _b, selectedProject, authToken, selfHosted, sentryUrl, sdkAlreadyInstalled, shouldCreateExamplePage, mightBeUsingVercel;
|
|
100
|
+
var typeScriptDetected, packageJson, nextVersion, _b, selectedProject, authToken, selfHosted, sentryUrl, sdkAlreadyInstalled, shouldCreateExamplePage, mightBeUsingVercel;
|
|
101
101
|
var _this = this;
|
|
102
102
|
return __generator(this, function (_c) {
|
|
103
103
|
switch (_c.label) {
|
|
@@ -107,6 +107,7 @@ function runNextjsWizardWithTelemetry(options) {
|
|
|
107
107
|
promoCode: options.promoCode,
|
|
108
108
|
telemetryEnabled: options.telemetryEnabled,
|
|
109
109
|
});
|
|
110
|
+
typeScriptDetected = (0, clack_utils_1.isUsingTypeScript)();
|
|
110
111
|
return [4 /*yield*/, (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)()];
|
|
111
112
|
case 1:
|
|
112
113
|
_c.sent();
|
|
@@ -224,7 +225,7 @@ function runNextjsWizardWithTelemetry(options) {
|
|
|
224
225
|
case 7:
|
|
225
226
|
_c.sent();
|
|
226
227
|
return [4 /*yield*/, (0, telemetry_1.traceStep)('create-global-error-page', function () { return __awaiter(_this, void 0, void 0, function () {
|
|
227
|
-
var maybeAppDirPath, maybeSrcAppDirPath, appDirLocation, globalErrorPageFile, shouldContinue;
|
|
228
|
+
var maybeAppDirPath, maybeSrcAppDirPath, appDirLocation, globalErrorPageFile, newGlobalErrorFileName, shouldContinue;
|
|
228
229
|
return __generator(this, function (_a) {
|
|
229
230
|
switch (_a.label) {
|
|
230
231
|
case 0:
|
|
@@ -250,10 +251,11 @@ function runNextjsWizardWithTelemetry(options) {
|
|
|
250
251
|
? 'global-error.js'
|
|
251
252
|
: undefined;
|
|
252
253
|
if (!!globalErrorPageFile) return [3 /*break*/, 2];
|
|
253
|
-
|
|
254
|
+
newGlobalErrorFileName = "global-error.".concat(typeScriptDetected ? 'tsx' : 'jsx');
|
|
255
|
+
return [4 /*yield*/, fs.promises.writeFile(path.join.apply(path, __spreadArray(__spreadArray([process.cwd()], appDirLocation, false), [newGlobalErrorFileName], false)), (0, templates_1.getSentryDefaultGlobalErrorPage)(), { encoding: 'utf8', flag: 'w' })];
|
|
254
256
|
case 1:
|
|
255
257
|
_a.sent();
|
|
256
|
-
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(path.join.apply(path, __spreadArray(__spreadArray([], appDirLocation, false), [
|
|
258
|
+
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(path.join.apply(path, __spreadArray(__spreadArray([], appDirLocation, false), [newGlobalErrorFileName], false))), "."));
|
|
257
259
|
return [3 /*break*/, 5];
|
|
258
260
|
case 2:
|
|
259
261
|
prompts_1.default.log.info("It seems like you already have a custom error page for your app directory.\n\nPlease add the following code to your custom error page\nat ".concat(chalk_1.default.cyan(path.join.apply(path, __spreadArray(__spreadArray([], appDirLocation, false), [globalErrorPageFile], false))), ":\n"));
|
|
@@ -388,7 +390,7 @@ function createOrMergeNextJsFiles(selectedProject, selfHosted, sentryUrl, sdkCon
|
|
|
388
390
|
_i++;
|
|
389
391
|
return [3 /*break*/, 1];
|
|
390
392
|
case 4: return [4 /*yield*/, (0, telemetry_1.traceStep)('setup-instrumentation-hook', function () { return __awaiter(_this, void 0, void 0, function () {
|
|
391
|
-
var srcInstrumentationTsExists, srcInstrumentationJsExists, instrumentationTsExists, instrumentationJsExists, instrumentationHookLocation, srcFolderExists, instrumentationHookPath, successfullyCreated;
|
|
393
|
+
var srcInstrumentationTsExists, srcInstrumentationJsExists, instrumentationTsExists, instrumentationJsExists, instrumentationHookLocation, newInstrumentationFileName, srcFolderExists, instrumentationHookPath, successfullyCreated;
|
|
392
394
|
return __generator(this, function (_a) {
|
|
393
395
|
switch (_a.label) {
|
|
394
396
|
case 0:
|
|
@@ -406,15 +408,16 @@ function createOrMergeNextJsFiles(selectedProject, selfHosted, sentryUrl, sdkCon
|
|
|
406
408
|
instrumentationHookLocation = 'does-not-exist';
|
|
407
409
|
}
|
|
408
410
|
if (!(instrumentationHookLocation === 'does-not-exist')) return [3 /*break*/, 4];
|
|
411
|
+
newInstrumentationFileName = "instrumentation.".concat(typeScriptDetected ? 'ts' : 'js');
|
|
409
412
|
srcFolderExists = fs.existsSync(path.join(process.cwd(), 'src'));
|
|
410
413
|
instrumentationHookPath = srcFolderExists
|
|
411
|
-
? path.join(process.cwd(), 'src',
|
|
412
|
-
: path.join(process.cwd(),
|
|
414
|
+
? path.join(process.cwd(), 'src', newInstrumentationFileName)
|
|
415
|
+
: path.join(process.cwd(), newInstrumentationFileName);
|
|
413
416
|
return [4 /*yield*/, (0, clack_utils_1.createNewConfigFile)(instrumentationHookPath, (0, templates_1.getInstrumentationHookContent)(srcFolderExists ? 'src' : 'root'))];
|
|
414
417
|
case 1:
|
|
415
418
|
successfullyCreated = _a.sent();
|
|
416
419
|
if (!!successfullyCreated) return [3 /*break*/, 3];
|
|
417
|
-
return [4 /*yield*/, (0, clack_utils_1.showCopyPasteInstructions)(
|
|
420
|
+
return [4 /*yield*/, (0, clack_utils_1.showCopyPasteInstructions)(newInstrumentationFileName, (0, templates_1.getInstrumentationHookCopyPasteSnippet)(srcFolderExists ? 'src' : 'root'))];
|
|
418
421
|
case 2:
|
|
419
422
|
_a.sent();
|
|
420
423
|
_a.label = 3;
|
|
@@ -444,7 +447,7 @@ function createOrMergeNextJsFiles(selectedProject, selfHosted, sentryUrl, sdkCon
|
|
|
444
447
|
orgSlug: selectedProject.organization.slug,
|
|
445
448
|
projectSlug: selectedProject.slug,
|
|
446
449
|
selfHosted: selfHosted,
|
|
447
|
-
|
|
450
|
+
sentryUrl: sentryUrl,
|
|
448
451
|
tunnelRoute: sdkConfigOptions.tunnelRoute,
|
|
449
452
|
});
|
|
450
453
|
nextConfigJs = 'next.config.js';
|
|
@@ -553,7 +556,7 @@ function createOrMergeNextJsFiles(selectedProject, selfHosted, sentryUrl, sdkCon
|
|
|
553
556
|
}
|
|
554
557
|
function createExamplePage(selfHosted, selectedProject, sentryUrl) {
|
|
555
558
|
return __awaiter(this, void 0, void 0, function () {
|
|
556
|
-
var srcDir, maybePagesDirPath, maybeSrcPagesDirPath, maybeAppDirPath, maybeSrcAppDirPath, pagesLocation, appLocation, examplePageContents, examplePageContents;
|
|
559
|
+
var srcDir, maybePagesDirPath, maybeSrcPagesDirPath, maybeAppDirPath, maybeSrcAppDirPath, typeScriptDetected, pagesLocation, appLocation, examplePageContents, newPageFileName, newRouteFileName, examplePageContents;
|
|
557
560
|
return __generator(this, function (_a) {
|
|
558
561
|
switch (_a.label) {
|
|
559
562
|
case 0:
|
|
@@ -562,6 +565,7 @@ function createExamplePage(selfHosted, selectedProject, sentryUrl) {
|
|
|
562
565
|
maybeSrcPagesDirPath = path.join(srcDir, 'pages');
|
|
563
566
|
maybeAppDirPath = path.join(process.cwd(), 'app');
|
|
564
567
|
maybeSrcAppDirPath = path.join(srcDir, 'app');
|
|
568
|
+
typeScriptDetected = (0, clack_utils_1.isUsingTypeScript)();
|
|
565
569
|
pagesLocation = fs.existsSync(maybePagesDirPath) &&
|
|
566
570
|
fs.lstatSync(maybePagesDirPath).isDirectory()
|
|
567
571
|
? ['pages']
|
|
@@ -591,26 +595,30 @@ function createExamplePage(selfHosted, selectedProject, sentryUrl) {
|
|
|
591
595
|
selfHosted: selfHosted,
|
|
592
596
|
orgSlug: selectedProject.organization.slug,
|
|
593
597
|
projectId: selectedProject.id,
|
|
594
|
-
|
|
598
|
+
sentryUrl: sentryUrl,
|
|
595
599
|
useClient: true,
|
|
596
600
|
});
|
|
597
601
|
fs.mkdirSync(path.join.apply(path, __spreadArray(__spreadArray([process.cwd()], appLocation, false), ['sentry-example-page'], false)), {
|
|
598
602
|
recursive: true,
|
|
599
603
|
});
|
|
604
|
+
newPageFileName = "page.".concat(typeScriptDetected ? 'tsx' : 'jsx');
|
|
600
605
|
return [4 /*yield*/, fs.promises.writeFile(path.join.apply(path, __spreadArray(__spreadArray([process.cwd()], appLocation, false), ['sentry-example-page',
|
|
601
|
-
|
|
606
|
+
newPageFileName], false)), examplePageContents, { encoding: 'utf8', flag: 'w' })];
|
|
602
607
|
case 1:
|
|
603
608
|
_a.sent();
|
|
604
|
-
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(path.join.apply(path, __spreadArray(__spreadArray([], appLocation, false), ['sentry-example-page',
|
|
609
|
+
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(path.join.apply(path, __spreadArray(__spreadArray([], appLocation, false), ['sentry-example-page', newPageFileName], false))), "."));
|
|
605
610
|
fs.mkdirSync(path.join.apply(path, __spreadArray(__spreadArray([process.cwd()], appLocation, false), ['api', 'sentry-example-api'], false)), {
|
|
606
611
|
recursive: true,
|
|
607
612
|
});
|
|
613
|
+
newRouteFileName = "route.".concat(typeScriptDetected ? 'ts' : 'js');
|
|
608
614
|
return [4 /*yield*/, fs.promises.writeFile(path.join.apply(path, __spreadArray(__spreadArray([process.cwd()], appLocation, false), ['api',
|
|
609
615
|
'sentry-example-api',
|
|
610
|
-
|
|
616
|
+
newRouteFileName], false)), (0, templates_1.getSentryExampleAppDirApiRoute)(), { encoding: 'utf8', flag: 'w' })];
|
|
611
617
|
case 2:
|
|
612
618
|
_a.sent();
|
|
613
|
-
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(path.join.apply(path, __spreadArray(__spreadArray([], appLocation, false), ['api',
|
|
619
|
+
prompts_1.default.log.success("Created ".concat(chalk_1.default.cyan(path.join.apply(path, __spreadArray(__spreadArray([], appLocation, false), ['api',
|
|
620
|
+
'sentry-example-api',
|
|
621
|
+
newRouteFileName], false))), "."));
|
|
614
622
|
return [3 /*break*/, 6];
|
|
615
623
|
case 3:
|
|
616
624
|
if (!pagesLocation) return [3 /*break*/, 6];
|
|
@@ -618,7 +626,7 @@ function createExamplePage(selfHosted, selectedProject, sentryUrl) {
|
|
|
618
626
|
selfHosted: selfHosted,
|
|
619
627
|
orgSlug: selectedProject.organization.slug,
|
|
620
628
|
projectId: selectedProject.id,
|
|
621
|
-
|
|
629
|
+
sentryUrl: sentryUrl,
|
|
622
630
|
useClient: false,
|
|
623
631
|
});
|
|
624
632
|
return [4 /*yield*/, fs.promises.writeFile(path.join.apply(path, __spreadArray(__spreadArray([process.cwd()], pagesLocation, false), ['sentry-example-page.jsx'], false)), examplePageContents, { encoding: 'utf8', flag: 'w' })];
|