@sentry/wizard 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -255,8 +255,8 @@ var ReactNative = /** @class */ (function (_super) {
|
|
|
255
255
|
ReactNative.prototype._patchExistingXcodeBuildScripts = function (buildScripts) {
|
|
256
256
|
for (var _i = 0, buildScripts_1 = buildScripts; _i < buildScripts_1.length; _i++) {
|
|
257
257
|
var script = buildScripts_1[_i];
|
|
258
|
-
if (!script.shellScript.match(
|
|
259
|
-
script.shellScript.match(/sentry-cli\s+react-native
|
|
258
|
+
if (!script.shellScript.match(/\/scripts\/react-native-xcode\.sh/i) ||
|
|
259
|
+
script.shellScript.match(/sentry-cli\s+react-native\s+xcode/i)) {
|
|
260
260
|
continue;
|
|
261
261
|
}
|
|
262
262
|
var code = JSON.parse(script.shellScript);
|
|
@@ -264,8 +264,9 @@ var ReactNative = /** @class */ (function (_super) {
|
|
|
264
264
|
// eslint-disable-next-line prefer-template
|
|
265
265
|
'export SENTRY_PROPERTIES=sentry.properties\n' +
|
|
266
266
|
'export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"\n' +
|
|
267
|
-
code.replace(
|
|
268
|
-
|
|
267
|
+
code.replace('$REACT_NATIVE_XCODE', function () {
|
|
268
|
+
// eslint-disable-next-line no-useless-escape
|
|
269
|
+
return '\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\\"';
|
|
269
270
|
});
|
|
270
271
|
script.shellScript = JSON.stringify(code);
|
|
271
272
|
}
|
|
@@ -345,29 +346,16 @@ var ReactNative = /** @class */ (function (_super) {
|
|
|
345
346
|
continue;
|
|
346
347
|
}
|
|
347
348
|
// ignore scripts that do not invoke the react-native-xcode command.
|
|
348
|
-
if (!script.shellScript.match(/sentry-cli\s+react-native
|
|
349
|
+
if (!script.shellScript.match(/sentry-cli\s+react-native\s+xcode/i)) {
|
|
349
350
|
continue;
|
|
350
351
|
}
|
|
351
352
|
script.shellScript = JSON.stringify(JSON.parse(script.shellScript)
|
|
352
|
-
// "legacy" location for this. This is what happens if users followed
|
|
353
|
-
// the old documentation for where to add the bundle command
|
|
354
|
-
.replace(/^..\/node_modules\/@sentry\/react-native\/bin\/bundle-frameworks\s*?\r\n?/m, '')
|
|
355
|
-
// legacy location for dsym upload
|
|
356
|
-
.replace(/^..\/node_modules\/@sentry\/cli\/bin\/sentry-cli upload-dsym\s*?\r?\n/m, '')
|
|
357
353
|
// remove sentry properties export
|
|
358
354
|
.replace(/^export SENTRY_PROPERTIES=sentry.properties\r?\n/m, '')
|
|
359
355
|
// unwrap react-native-xcode.sh command. In case someone replaced it
|
|
360
356
|
// entirely with the sentry-cli command we need to put the original
|
|
361
357
|
// version back in.
|
|
362
|
-
.replace(
|
|
363
|
-
var rv = m1.trim();
|
|
364
|
-
if (rv === '') {
|
|
365
|
-
return '../node_modules/react-native/scripts/react-native-xcode.sh';
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
368
|
-
return rv;
|
|
369
|
-
}
|
|
370
|
-
}));
|
|
358
|
+
.replace(/\.\.\/node_modules\/@sentry\/cli\/bin\/sentry-cli\s+react-native\s+xcode\s+\$REACT_NATIVE_XCODE/i, '$REACT_NATIVE_XCODE'));
|
|
371
359
|
}
|
|
372
360
|
// scripts to kill entirely.
|
|
373
361
|
for (var _b = 0, _c = Object.keys(scripts); _b < _c.length; _b++) {
|
|
@@ -377,8 +365,7 @@ var ReactNative = /** @class */ (function (_super) {
|
|
|
377
365
|
if (typeof script === 'string' || script === undefined) {
|
|
378
366
|
continue;
|
|
379
367
|
}
|
|
380
|
-
if (script.shellScript.match(/@sentry\/
|
|
381
|
-
script.shellScript.match(/@sentry\/cli\/bin\/sentry-cli\s+upload-dsym\b/)) {
|
|
368
|
+
if (script.shellScript.match(/@sentry\/cli\/bin\/sentry-cli\s+upload-dsym\b/)) {
|
|
382
369
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
383
370
|
delete scripts[key];
|
|
384
371
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactNative.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/ReactNative.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\nimport * as fs from 'fs';\nimport { Answers } from 'inquirer';\nimport * as _ from 'lodash';\nimport * as path from 'path';\n\nimport { Args } from '../../Constants';\nimport { exists, matchesContent, patchMatchingFile } from '../../Helper/File';\nimport { dim, green, red } from '../../Helper/Logging';\nimport { SentryCli } from '../../Helper/SentryCli';\nimport { MobileProject } from './MobileProject';\n\nconst xcode = require('xcode');\n\nexport class ReactNative extends MobileProject {\n protected _answers: Answers;\n protected _sentryCli: SentryCli;\n\n constructor(protected _argv: Args) {\n super(_argv);\n this._sentryCli = new SentryCli(this._argv);\n }\n\n public async emit(answers: Answers): Promise<Answers> {\n if (this._argv.uninstall) {\n return this.uninstall(answers);\n }\n if (!(await this.shouldEmit(answers))) {\n return {};\n }\n\n const sentryCliProperties = this._sentryCli.convertAnswersToProperties(\n answers,\n );\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n const promises = this.getPlatforms(answers).map(\n async (platform: string) => {\n try {\n if (platform === 'ios') {\n await patchMatchingFile(\n 'ios/*.xcodeproj/project.pbxproj',\n this._patchXcodeProj.bind(this),\n );\n dim(`✅ Patched build script in Xcode project.`);\n } else {\n await patchMatchingFile(\n '**/app/build.gradle',\n this._patchBuildGradle.bind(this),\n );\n dim(`✅ Patched build.gradle file.`);\n }\n await patchMatchingFile(\n `index.${platform}.js`,\n this._patchJs.bind(this),\n answers,\n platform,\n );\n // rm 0.49 introduced an App.js for both platforms\n await patchMatchingFile(\n 'App.js',\n this._patchJs.bind(this),\n answers,\n platform,\n );\n dim(`✅ Patched App.js file.`);\n await this._addSentryProperties(platform, sentryCliProperties);\n dim(`✅ Added sentry.properties file to ${platform}`);\n\n green(`Successfully set up ${platform} for react-native`);\n } catch (e) {\n red(e);\n }\n },\n );\n Promise.all(promises)\n .then(resolve)\n .catch(reject);\n });\n }\n\n public async uninstall(_answers: Answers): Promise<Answers> {\n await patchMatchingFile(\n '**/*.xcodeproj/project.pbxproj',\n this._unpatchXcodeProj.bind(this),\n );\n await patchMatchingFile(\n '**/app/build.gradle',\n this._unpatchBuildGradle.bind(this),\n );\n return {};\n }\n\n protected async _shouldConfigurePlatform(platform: string): Promise<boolean> {\n let result = false;\n\n if (!exists(`${platform}/sentry.properties`)) {\n result = true;\n this.debug(`${platform}/sentry.properties not exists`);\n }\n\n if (!matchesContent('**/*.xcodeproj/project.pbxproj', /sentry-cli/gi)) {\n result = true;\n this.debug('**/*.xcodeproj/project.pbxproj not matched');\n }\n\n if (!matchesContent('**/app/build.gradle', /sentry\\.gradle/gi)) {\n result = true;\n this.debug('**/app/build.gradle not matched');\n }\n\n const regex = /Sentry/gi;\n if (\n exists(`index.${platform}.js`) &&\n !matchesContent(`index.${platform}.js`, regex)\n ) {\n result = true;\n this.debug(`index.${platform}.js not matched`);\n }\n if (exists('App.js') && !matchesContent('App.js', regex)) {\n result = true;\n this.debug('index.js or App.js not matched');\n }\n\n if (this._argv.uninstall) {\n // if we uninstall we need to invert the result so we remove already patched\n // but leave untouched platforms as they are\n return !result;\n }\n\n return result;\n }\n\n private _addSentryProperties(\n platform: string,\n properties: any,\n ): Promise<void> {\n let rv = Promise.resolve();\n\n // This will create the ios/android folder before trying to write\n // sentry.properties in it which would fail otherwise\n if (!fs.existsSync(platform)) {\n dim(`${platform} folder did not exist, creating it.`);\n fs.mkdirSync(platform);\n }\n const fn = path.join(platform, 'sentry.properties');\n\n if (platform === 'android' && properties['cli/executable']) {\n // We don't need to write the sentry-cli path in the properties file\n // since our gradle plugins already pick it up on the correct spot\n delete properties['cli/executable'];\n }\n rv = rv.then(() =>\n fs.writeFileSync(fn, this._sentryCli.dumpProperties(properties)),\n );\n\n return rv;\n }\n\n private _patchJs(\n contents: string,\n _filename: string,\n answers: Answers,\n platform?: string,\n ): Promise<string | null> {\n // since the init call could live in other places too, we really only\n // want to do this if we managed to patch any of the other files as well.\n if (contents.match(/Sentry.config\\(/)) {\n return Promise.resolve(null);\n }\n\n // if we match @sentry\\/react-native somewhere, we already patched the file\n // and no longer need to\n if (contents.match('@sentry/react-native')) {\n return Promise.resolve(contents);\n }\n\n let dsn = '__DSN__';\n this.getPlatforms(answers).forEach((selectedPlatform: string) => {\n if (platform && selectedPlatform === platform) {\n dsn = _.get(answers, 'config.dsn.public', null);\n } else if (platform === undefined) {\n dsn = _.get(answers, 'config.dsn.public', null);\n }\n });\n\n return Promise.resolve(\n contents.replace(\n /^([^]*)(import\\s+[^;]*?;$)/m,\n match =>\n // eslint-disable-next-line prefer-template\n match +\n \"\\n\\nimport * as Sentry from '@sentry/react-native';\\n\\n\" +\n `Sentry.init({ \\n` +\n ` dsn: '${dsn}', \\n` +\n `});\\n`,\n ),\n );\n }\n\n // ANDROID -----------------------------------------\n\n private _patchBuildGradle(contents: string): Promise<string | null> {\n const applyFrom =\n 'apply from: \"../../node_modules/@sentry/react-native/sentry.gradle\"';\n if (contents.indexOf(applyFrom) >= 0) {\n return Promise.resolve(null);\n }\n return Promise.resolve(\n contents.replace(\n /^apply from: \"..\\/..\\/node_modules\\/react-native\\/react.gradle\"/m,\n // eslint-disable-next-line prefer-template\n match => match + '\\n' + applyFrom,\n ),\n );\n }\n\n private _unpatchBuildGradle(contents: string): Promise<string> {\n return Promise.resolve(\n contents.replace(\n /^\\s*apply from: [\"']..\\/..\\/node_modules\\/@sentry\\/react-native\\/sentry.gradle[\"'];?\\s*?\\r?\\n/m,\n '',\n ),\n );\n }\n\n // IOS -----------------------------------------\n\n private _patchExistingXcodeBuildScripts(buildScripts: any): void {\n for (const script of buildScripts) {\n if (\n !script.shellScript.match(\n /(packager|scripts)\\/react-native-xcode\\.sh\\b/,\n ) ||\n script.shellScript.match(/sentry-cli\\s+react-native[\\s-]xcode/)\n ) {\n continue;\n }\n let code = JSON.parse(script.shellScript);\n code =\n // eslint-disable-next-line prefer-template\n 'export SENTRY_PROPERTIES=sentry.properties\\n' +\n 'export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\\n' +\n code.replace(\n /^.*?\\/(packager|scripts)\\/react-native-xcode\\.sh\\s*/m,\n (match: any) =>\n `../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ${match}`,\n );\n script.shellScript = JSON.stringify(code);\n }\n }\n\n private _addNewXcodeBuildPhaseForSymbols(buildScripts: any, proj: any): void {\n for (const script of buildScripts) {\n if (script.shellScript.match(/sentry-cli\\s+upload-dsym/)) {\n return;\n }\n }\n\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript:\n 'export SENTRY_PROPERTIES=sentry.properties\\\\n' +\n '../node_modules/@sentry/cli/bin/sentry-cli upload-dsym',\n },\n );\n }\n\n private _patchXcodeProj(contents: string, filename: string): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n const buildScripts = [];\n for (const key in proj.hash.project.objects.PBXShellScriptBuildPhase ||\n {}) {\n if (\n // eslint-disable-next-line no-prototype-builtins\n proj.hash.project.objects.PBXShellScriptBuildPhase.hasOwnProperty(\n key,\n )\n ) {\n const val = proj.hash.project.objects.PBXShellScriptBuildPhase[key];\n if (val.isa) {\n buildScripts.push(val);\n }\n }\n }\n\n try {\n this._patchExistingXcodeBuildScripts(buildScripts);\n } catch (e) {\n red(e);\n }\n try {\n this._addNewXcodeBuildPhaseForSymbols(buildScripts, proj);\n } catch (e) {\n red(e);\n }\n\n // we always modify the xcode file in memory but we only want to save it\n // in case the user wants configuration for ios. This is why we check\n // here first if changes are made before we might prompt the platform\n // continue prompt.\n const newContents = proj.writeSync();\n if (newContents === contents) {\n resolve();\n } else {\n resolve(newContents);\n }\n });\n });\n }\n\n private _unpatchXcodeBuildScripts(proj: any): void {\n const scripts = proj.hash.project.objects.PBXShellScriptBuildPhase || {};\n const firstTarget = proj.getFirstTarget().uuid;\n const nativeTargets = proj.hash.project.objects.PBXNativeTarget;\n\n // scripts to patch partially. Run this first so that we don't\n // accidentally delete some scripts later entirely that we only want to\n // rewrite.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments\n if (typeof script === 'string') {\n continue;\n }\n\n // ignore scripts that do not invoke the react-native-xcode command.\n if (!script.shellScript.match(/sentry-cli\\s+react-native[\\s-]xcode\\b/)) {\n continue;\n }\n\n script.shellScript = JSON.stringify(\n JSON.parse(script.shellScript)\n // \"legacy\" location for this. This is what happens if users followed\n // the old documentation for where to add the bundle command\n .replace(\n /^..\\/node_modules\\/@sentry\\/react-native\\/bin\\/bundle-frameworks\\s*?\\r\\n?/m,\n '',\n )\n // legacy location for dsym upload\n .replace(\n /^..\\/node_modules\\/@sentry\\/cli\\/bin\\/sentry-cli upload-dsym\\s*?\\r?\\n/m,\n '',\n )\n // remove sentry properties export\n .replace(/^export SENTRY_PROPERTIES=sentry.properties\\r?\\n/m, '')\n // unwrap react-native-xcode.sh command. In case someone replaced it\n // entirely with the sentry-cli command we need to put the original\n // version back in.\n .replace(\n /^(?:..\\/node_modules\\/@sentry\\/cli\\/bin\\/)?sentry-cli\\s+react-native[\\s-]xcode(\\s+.*?)$/m,\n (match: any, m1: string) => {\n const rv = m1.trim();\n if (rv === '') {\n return '../node_modules/react-native/scripts/react-native-xcode.sh';\n } else {\n return rv;\n }\n },\n ),\n );\n }\n\n // scripts to kill entirely.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments and keys that got deleted\n if (typeof script === 'string' || script === undefined) {\n continue;\n }\n\n if (\n script.shellScript.match(\n /@sentry\\/react-native\\/bin\\/bundle-frameworks\\b/,\n ) ||\n script.shellScript.match(\n /@sentry\\/cli\\/bin\\/sentry-cli\\s+upload-dsym\\b/,\n )\n ) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[key];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[`${key}_comment`];\n const phases = nativeTargets[firstTarget].buildPhases;\n if (phases) {\n for (let i = 0; i < phases.length; i++) {\n if (phases[i].value === key) {\n phases.splice(i, 1);\n break;\n }\n }\n }\n continue;\n }\n }\n }\n\n private _unpatchXcodeProj(\n _contents: string,\n filename: string,\n ): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n this._unpatchXcodeBuildScripts(proj);\n resolve(proj.writeSync());\n });\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ReactNative.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/ReactNative.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\nimport * as fs from 'fs';\nimport { Answers } from 'inquirer';\nimport * as _ from 'lodash';\nimport * as path from 'path';\n\nimport { Args } from '../../Constants';\nimport { exists, matchesContent, patchMatchingFile } from '../../Helper/File';\nimport { dim, green, red } from '../../Helper/Logging';\nimport { SentryCli } from '../../Helper/SentryCli';\nimport { MobileProject } from './MobileProject';\n\nconst xcode = require('xcode');\n\nexport class ReactNative extends MobileProject {\n protected _answers: Answers;\n protected _sentryCli: SentryCli;\n\n constructor(protected _argv: Args) {\n super(_argv);\n this._sentryCli = new SentryCli(this._argv);\n }\n\n public async emit(answers: Answers): Promise<Answers> {\n if (this._argv.uninstall) {\n return this.uninstall(answers);\n }\n if (!(await this.shouldEmit(answers))) {\n return {};\n }\n\n const sentryCliProperties = this._sentryCli.convertAnswersToProperties(\n answers,\n );\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n const promises = this.getPlatforms(answers).map(\n async (platform: string) => {\n try {\n if (platform === 'ios') {\n await patchMatchingFile(\n 'ios/*.xcodeproj/project.pbxproj',\n this._patchXcodeProj.bind(this),\n );\n dim(`✅ Patched build script in Xcode project.`);\n } else {\n await patchMatchingFile(\n '**/app/build.gradle',\n this._patchBuildGradle.bind(this),\n );\n dim(`✅ Patched build.gradle file.`);\n }\n await patchMatchingFile(\n `index.${platform}.js`,\n this._patchJs.bind(this),\n answers,\n platform,\n );\n // rm 0.49 introduced an App.js for both platforms\n await patchMatchingFile(\n 'App.js',\n this._patchJs.bind(this),\n answers,\n platform,\n );\n dim(`✅ Patched App.js file.`);\n await this._addSentryProperties(platform, sentryCliProperties);\n dim(`✅ Added sentry.properties file to ${platform}`);\n\n green(`Successfully set up ${platform} for react-native`);\n } catch (e) {\n red(e);\n }\n },\n );\n Promise.all(promises)\n .then(resolve)\n .catch(reject);\n });\n }\n\n public async uninstall(_answers: Answers): Promise<Answers> {\n await patchMatchingFile(\n '**/*.xcodeproj/project.pbxproj',\n this._unpatchXcodeProj.bind(this),\n );\n await patchMatchingFile(\n '**/app/build.gradle',\n this._unpatchBuildGradle.bind(this),\n );\n return {};\n }\n\n protected async _shouldConfigurePlatform(platform: string): Promise<boolean> {\n let result = false;\n\n if (!exists(`${platform}/sentry.properties`)) {\n result = true;\n this.debug(`${platform}/sentry.properties not exists`);\n }\n\n if (!matchesContent('**/*.xcodeproj/project.pbxproj', /sentry-cli/gi)) {\n result = true;\n this.debug('**/*.xcodeproj/project.pbxproj not matched');\n }\n\n if (!matchesContent('**/app/build.gradle', /sentry\\.gradle/gi)) {\n result = true;\n this.debug('**/app/build.gradle not matched');\n }\n\n const regex = /Sentry/gi;\n if (\n exists(`index.${platform}.js`) &&\n !matchesContent(`index.${platform}.js`, regex)\n ) {\n result = true;\n this.debug(`index.${platform}.js not matched`);\n }\n if (exists('App.js') && !matchesContent('App.js', regex)) {\n result = true;\n this.debug('index.js or App.js not matched');\n }\n\n if (this._argv.uninstall) {\n // if we uninstall we need to invert the result so we remove already patched\n // but leave untouched platforms as they are\n return !result;\n }\n\n return result;\n }\n\n private _addSentryProperties(\n platform: string,\n properties: any,\n ): Promise<void> {\n let rv = Promise.resolve();\n\n // This will create the ios/android folder before trying to write\n // sentry.properties in it which would fail otherwise\n if (!fs.existsSync(platform)) {\n dim(`${platform} folder did not exist, creating it.`);\n fs.mkdirSync(platform);\n }\n const fn = path.join(platform, 'sentry.properties');\n\n if (platform === 'android' && properties['cli/executable']) {\n // We don't need to write the sentry-cli path in the properties file\n // since our gradle plugins already pick it up on the correct spot\n delete properties['cli/executable'];\n }\n rv = rv.then(() =>\n fs.writeFileSync(fn, this._sentryCli.dumpProperties(properties)),\n );\n\n return rv;\n }\n\n private _patchJs(\n contents: string,\n _filename: string,\n answers: Answers,\n platform?: string,\n ): Promise<string | null> {\n // since the init call could live in other places too, we really only\n // want to do this if we managed to patch any of the other files as well.\n if (contents.match(/Sentry.config\\(/)) {\n return Promise.resolve(null);\n }\n\n // if we match @sentry\\/react-native somewhere, we already patched the file\n // and no longer need to\n if (contents.match('@sentry/react-native')) {\n return Promise.resolve(contents);\n }\n\n let dsn = '__DSN__';\n this.getPlatforms(answers).forEach((selectedPlatform: string) => {\n if (platform && selectedPlatform === platform) {\n dsn = _.get(answers, 'config.dsn.public', null);\n } else if (platform === undefined) {\n dsn = _.get(answers, 'config.dsn.public', null);\n }\n });\n\n return Promise.resolve(\n contents.replace(\n /^([^]*)(import\\s+[^;]*?;$)/m,\n match =>\n // eslint-disable-next-line prefer-template\n match +\n \"\\n\\nimport * as Sentry from '@sentry/react-native';\\n\\n\" +\n `Sentry.init({ \\n` +\n ` dsn: '${dsn}', \\n` +\n `});\\n`,\n ),\n );\n }\n\n // ANDROID -----------------------------------------\n\n private _patchBuildGradle(contents: string): Promise<string | null> {\n const applyFrom =\n 'apply from: \"../../node_modules/@sentry/react-native/sentry.gradle\"';\n if (contents.indexOf(applyFrom) >= 0) {\n return Promise.resolve(null);\n }\n return Promise.resolve(\n contents.replace(\n /^apply from: \"..\\/..\\/node_modules\\/react-native\\/react.gradle\"/m,\n // eslint-disable-next-line prefer-template\n match => match + '\\n' + applyFrom,\n ),\n );\n }\n\n private _unpatchBuildGradle(contents: string): Promise<string> {\n return Promise.resolve(\n contents.replace(\n /^\\s*apply from: [\"']..\\/..\\/node_modules\\/@sentry\\/react-native\\/sentry.gradle[\"'];?\\s*?\\r?\\n/m,\n '',\n ),\n );\n }\n\n // IOS -----------------------------------------\n\n private _patchExistingXcodeBuildScripts(buildScripts: any): void {\n for (const script of buildScripts) {\n if (\n !script.shellScript.match(\n /\\/scripts\\/react-native-xcode\\.sh/i,\n ) ||\n script.shellScript.match(/sentry-cli\\s+react-native\\s+xcode/i)\n ) {\n continue;\n }\n let code = JSON.parse(script.shellScript);\n code =\n // eslint-disable-next-line prefer-template\n 'export SENTRY_PROPERTIES=sentry.properties\\n' +\n 'export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map\"\\n' +\n code.replace(\n '$REACT_NATIVE_XCODE',\n () =>\n // eslint-disable-next-line no-useless-escape\n '\\\\\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\\\\\\"',\n );\n script.shellScript = JSON.stringify(code);\n }\n }\n\n private _addNewXcodeBuildPhaseForSymbols(buildScripts: any, proj: any): void {\n for (const script of buildScripts) {\n if (script.shellScript.match(/sentry-cli\\s+upload-dsym/)) {\n return;\n }\n }\n\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript:\n 'export SENTRY_PROPERTIES=sentry.properties\\\\n' +\n '../node_modules/@sentry/cli/bin/sentry-cli upload-dsym',\n },\n );\n }\n\n private _patchXcodeProj(contents: string, filename: string): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n const buildScripts = [];\n for (const key in proj.hash.project.objects.PBXShellScriptBuildPhase ||\n {}) {\n if (\n // eslint-disable-next-line no-prototype-builtins\n proj.hash.project.objects.PBXShellScriptBuildPhase.hasOwnProperty(\n key,\n )\n ) {\n const val = proj.hash.project.objects.PBXShellScriptBuildPhase[key];\n if (val.isa) {\n buildScripts.push(val);\n }\n }\n }\n\n try {\n this._patchExistingXcodeBuildScripts(buildScripts);\n } catch (e) {\n red(e);\n }\n try {\n this._addNewXcodeBuildPhaseForSymbols(buildScripts, proj);\n } catch (e) {\n red(e);\n }\n\n // we always modify the xcode file in memory but we only want to save it\n // in case the user wants configuration for ios. This is why we check\n // here first if changes are made before we might prompt the platform\n // continue prompt.\n const newContents = proj.writeSync();\n if (newContents === contents) {\n resolve();\n } else {\n resolve(newContents);\n }\n });\n });\n }\n\n private _unpatchXcodeBuildScripts(proj: any): void {\n const scripts = proj.hash.project.objects.PBXShellScriptBuildPhase || {};\n const firstTarget = proj.getFirstTarget().uuid;\n const nativeTargets = proj.hash.project.objects.PBXNativeTarget;\n\n // scripts to patch partially. Run this first so that we don't\n // accidentally delete some scripts later entirely that we only want to\n // rewrite.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments\n if (typeof script === 'string') {\n continue;\n }\n\n // ignore scripts that do not invoke the react-native-xcode command.\n if (!script.shellScript.match(/sentry-cli\\s+react-native\\s+xcode/i)) {\n continue;\n }\n\n script.shellScript = JSON.stringify(\n JSON.parse(script.shellScript)\n // remove sentry properties export\n .replace(/^export SENTRY_PROPERTIES=sentry.properties\\r?\\n/m, '')\n // unwrap react-native-xcode.sh command. In case someone replaced it\n // entirely with the sentry-cli command we need to put the original\n // version back in.\n .replace(\n /\\.\\.\\/node_modules\\/@sentry\\/cli\\/bin\\/sentry-cli\\s+react-native\\s+xcode\\s+\\$REACT_NATIVE_XCODE/i,\n '$REACT_NATIVE_XCODE',\n ),\n );\n }\n\n // scripts to kill entirely.\n for (const key of Object.keys(scripts)) {\n const script = scripts[key];\n\n // ignore comments and keys that got deleted\n if (typeof script === 'string' || script === undefined) {\n continue;\n }\n\n if (\n script.shellScript.match(\n /@sentry\\/cli\\/bin\\/sentry-cli\\s+upload-dsym\\b/,\n )\n ) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[key];\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete scripts[`${key}_comment`];\n const phases = nativeTargets[firstTarget].buildPhases;\n if (phases) {\n for (let i = 0; i < phases.length; i++) {\n if (phases[i].value === key) {\n phases.splice(i, 1);\n break;\n }\n }\n }\n continue;\n }\n }\n }\n\n private _unpatchXcodeProj(\n _contents: string,\n filename: string,\n ): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: any) => {\n if (err) {\n reject(err);\n return;\n }\n\n this._unpatchXcodeBuildScripts(proj);\n resolve(proj.writeSync());\n });\n });\n }\n}\n"]}
|
|
@@ -231,9 +231,9 @@ export class ReactNative extends MobileProject {
|
|
|
231
231
|
for (const script of buildScripts) {
|
|
232
232
|
if (
|
|
233
233
|
!script.shellScript.match(
|
|
234
|
-
|
|
234
|
+
/\/scripts\/react-native-xcode\.sh/i,
|
|
235
235
|
) ||
|
|
236
|
-
script.shellScript.match(/sentry-cli\s+react-native
|
|
236
|
+
script.shellScript.match(/sentry-cli\s+react-native\s+xcode/i)
|
|
237
237
|
) {
|
|
238
238
|
continue;
|
|
239
239
|
}
|
|
@@ -243,9 +243,10 @@ export class ReactNative extends MobileProject {
|
|
|
243
243
|
'export SENTRY_PROPERTIES=sentry.properties\n' +
|
|
244
244
|
'export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"\n' +
|
|
245
245
|
code.replace(
|
|
246
|
-
|
|
247
|
-
(
|
|
248
|
-
|
|
246
|
+
'$REACT_NATIVE_XCODE',
|
|
247
|
+
() =>
|
|
248
|
+
// eslint-disable-next-line no-useless-escape
|
|
249
|
+
'\\\"../node_modules/@sentry/cli/bin/sentry-cli react-native xcode $REACT_NATIVE_XCODE\\\"',
|
|
249
250
|
);
|
|
250
251
|
script.shellScript = JSON.stringify(code);
|
|
251
252
|
}
|
|
@@ -339,38 +340,20 @@ export class ReactNative extends MobileProject {
|
|
|
339
340
|
}
|
|
340
341
|
|
|
341
342
|
// ignore scripts that do not invoke the react-native-xcode command.
|
|
342
|
-
if (!script.shellScript.match(/sentry-cli\s+react-native
|
|
343
|
+
if (!script.shellScript.match(/sentry-cli\s+react-native\s+xcode/i)) {
|
|
343
344
|
continue;
|
|
344
345
|
}
|
|
345
346
|
|
|
346
347
|
script.shellScript = JSON.stringify(
|
|
347
348
|
JSON.parse(script.shellScript)
|
|
348
|
-
// "legacy" location for this. This is what happens if users followed
|
|
349
|
-
// the old documentation for where to add the bundle command
|
|
350
|
-
.replace(
|
|
351
|
-
/^..\/node_modules\/@sentry\/react-native\/bin\/bundle-frameworks\s*?\r\n?/m,
|
|
352
|
-
'',
|
|
353
|
-
)
|
|
354
|
-
// legacy location for dsym upload
|
|
355
|
-
.replace(
|
|
356
|
-
/^..\/node_modules\/@sentry\/cli\/bin\/sentry-cli upload-dsym\s*?\r?\n/m,
|
|
357
|
-
'',
|
|
358
|
-
)
|
|
359
349
|
// remove sentry properties export
|
|
360
350
|
.replace(/^export SENTRY_PROPERTIES=sentry.properties\r?\n/m, '')
|
|
361
351
|
// unwrap react-native-xcode.sh command. In case someone replaced it
|
|
362
352
|
// entirely with the sentry-cli command we need to put the original
|
|
363
353
|
// version back in.
|
|
364
354
|
.replace(
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
const rv = m1.trim();
|
|
368
|
-
if (rv === '') {
|
|
369
|
-
return '../node_modules/react-native/scripts/react-native-xcode.sh';
|
|
370
|
-
} else {
|
|
371
|
-
return rv;
|
|
372
|
-
}
|
|
373
|
-
},
|
|
355
|
+
/\.\.\/node_modules\/@sentry\/cli\/bin\/sentry-cli\s+react-native\s+xcode\s+\$REACT_NATIVE_XCODE/i,
|
|
356
|
+
'$REACT_NATIVE_XCODE',
|
|
374
357
|
),
|
|
375
358
|
);
|
|
376
359
|
}
|
|
@@ -385,9 +368,6 @@ export class ReactNative extends MobileProject {
|
|
|
385
368
|
}
|
|
386
369
|
|
|
387
370
|
if (
|
|
388
|
-
script.shellScript.match(
|
|
389
|
-
/@sentry\/react-native\/bin\/bundle-frameworks\b/,
|
|
390
|
-
) ||
|
|
391
371
|
script.shellScript.match(
|
|
392
372
|
/@sentry\/cli\/bin\/sentry-cli\s+upload-dsym\b/,
|
|
393
373
|
)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/wizard",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
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",
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"fix:eslint": "eslint . --format stylish --fix",
|
|
76
76
|
"test": "yarn build && jest",
|
|
77
77
|
"try": "ts-node bin.ts",
|
|
78
|
+
"try:uninstall": "ts-node bin.ts --uninstall",
|
|
78
79
|
"test:watch": "jest --watch --notify"
|
|
79
80
|
},
|
|
80
81
|
"jest": {
|