@sentry/wizard 1.3.0 → 1.4.1

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
@@ -1,6 +1,12 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 1.4.1
4
+
5
+ - fix(step-wizards): Show correct URL when prompting DSN (#581)
6
+
7
+ ## 1.4.0
8
+
9
+ - feat(react-native): Xcode plugin includes collect modules script ([#213](https://github.com/getsentry/sentry-wizard/pull/213))
4
10
 
5
11
  ## 1.3.0
6
12
 
@@ -266,7 +266,8 @@ var ReactNative = /** @class */ (function (_super) {
266
266
  'export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"\n' +
267
267
  code.replace(/^.*?\/(packager|scripts)\/react-native-xcode\.sh\s*/m, function (match) {
268
268
  return "../node_modules/@sentry/cli/bin/sentry-cli react-native xcode " + match;
269
- });
269
+ }) +
270
+ '\n/bin/sh ../node_modules/@sentry/react-native/scripts/collect-modules.sh\n';
270
271
  script.shellScript = JSON.stringify(code);
271
272
  }
272
273
  };
@@ -356,6 +357,7 @@ var ReactNative = /** @class */ (function (_super) {
356
357
  .replace(/^..\/node_modules\/@sentry\/cli\/bin\/sentry-cli upload-dsym\s*?\r?\n/m, '')
357
358
  // remove sentry properties export
358
359
  .replace(/^export SENTRY_PROPERTIES=sentry.properties\r?\n/m, '')
360
+ .replace(/^\/bin\/sh ..\/node_modules\/@sentry\/react-native\/scripts\/collect-modules.sh\r?\n/m, '')
359
361
  // unwrap react-native-xcode.sh command. In case someone replaced it
360
362
  // entirely with the sentry-cli command we need to put the original
361
363
  // version back in.
@@ -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 /(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 '\\n/bin/sh ../node_modules/@sentry/react-native/scripts/collect-modules.sh\\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 .replace(/^\\/bin\\/sh ..\\/node_modules\\/@sentry\\/react-native\\/scripts\\/collect-modules.sh\\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"]}
@@ -3,6 +3,7 @@ import { BaseStep } from './BaseStep';
3
3
  export declare class PromptForParameters extends BaseStep {
4
4
  emit(answers: Answers): Promise<Answers>;
5
5
  private _getFullUrl;
6
+ private _getDSNKeyUrl;
6
7
  private _shouldAsk;
7
8
  private _validateAuthToken;
8
9
  private _validateSlug;
@@ -62,7 +62,7 @@ var PromptForParameters = /** @class */ (function (_super) {
62
62
  }
63
63
  PromptForParameters.prototype.emit = function (answers) {
64
64
  return __awaiter(this, void 0, void 0, function () {
65
- var url, organization, project, dsn, auth;
65
+ var url, organization, project, dsnKeyUrl, dsn, auth;
66
66
  var _this = this;
67
67
  return __generator(this, function (_a) {
68
68
  switch (_a.label) {
@@ -109,6 +109,7 @@ var PromptForParameters = /** @class */ (function (_super) {
109
109
  case 3:
110
110
  project = _a.sent();
111
111
  url = this._getFullUrl(answers, organization.slug, project.slug);
112
+ dsnKeyUrl = this._getDSNKeyUrl(answers, project.slug);
112
113
  return [4 /*yield*/, inquirer_1.prompt([
113
114
  {
114
115
  message: 'DSN:',
@@ -118,7 +119,7 @@ var PromptForParameters = /** @class */ (function (_super) {
118
119
  validate: this._validateDSN,
119
120
  when: this._shouldAsk(answers, 'config.dsn.secret', function () {
120
121
  Logging_1.dim('Please copy/paste your DSN');
121
- Logging_1.dim("It can be found here: " + url);
122
+ Logging_1.dim("It can be found here: " + dsnKeyUrl);
122
123
  }),
123
124
  },
124
125
  ])];
@@ -158,6 +159,11 @@ var PromptForParameters = /** @class */ (function (_super) {
158
159
  var projSlug = _.get(answers, 'config.project.slug', projectSlug || 'project_slug');
159
160
  return "" + baseUrl + orgSlug + "/" + projSlug;
160
161
  };
162
+ PromptForParameters.prototype._getDSNKeyUrl = function (answers, projectSlug) {
163
+ var baseUrl = this._argv.url;
164
+ var projSlug = _.get(answers, 'config.project.slug', projectSlug || 'project_slug');
165
+ return baseUrl + "settings/projects/" + projSlug + "/keys";
166
+ };
161
167
  PromptForParameters.prototype._shouldAsk = function (answers, configKey, preHook) {
162
168
  var shouldAsk = _.get(answers, configKey, null) === null;
163
169
  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 { Answers, 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: 'secret',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateDSN,\n when: this._shouldAsk(answers, 'config.dsn.secret', () => {\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 if (!input.match(/[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"]}
1
+ {"version":3,"file":"PromptForParameters.js","sourceRoot":"","sources":["../../../lib/Steps/PromptForParameters.ts"],"names":[],"mappings":"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","sourcesContent":["import { Answers, 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: 'secret',\n type: 'input',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n validate: this._validateDSN,\n when: this._shouldAsk(answers, 'config.dsn.secret', () => {\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 if (!input.match(/[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"]}
@@ -246,7 +246,8 @@ export class ReactNative extends MobileProject {
246
246
  /^.*?\/(packager|scripts)\/react-native-xcode\.sh\s*/m,
247
247
  (match: any) =>
248
248
  `../node_modules/@sentry/cli/bin/sentry-cli react-native xcode ${match}`,
249
- );
249
+ ) +
250
+ '\n/bin/sh ../node_modules/@sentry/react-native/scripts/collect-modules.sh\n';
250
251
  script.shellScript = JSON.stringify(code);
251
252
  }
252
253
  }
@@ -358,6 +359,7 @@ export class ReactNative extends MobileProject {
358
359
  )
359
360
  // remove sentry properties export
360
361
  .replace(/^export SENTRY_PROPERTIES=sentry.properties\r?\n/m, '')
362
+ .replace(/^\/bin\/sh ..\/node_modules\/@sentry\/react-native\/scripts\/collect-modules.sh\r?\n/m, '')
361
363
  // unwrap react-native-xcode.sh command. In case someone replaced it
362
364
  // entirely with the sentry-cli command we need to put the original
363
365
  // version back in.
@@ -46,6 +46,7 @@ export class PromptForParameters extends BaseStep {
46
46
  ]);
47
47
 
48
48
  url = this._getFullUrl(answers, organization.slug, project.slug);
49
+ const dsnKeyUrl = this._getDSNKeyUrl(answers, project.slug);
49
50
  const dsn = await prompt([
50
51
  {
51
52
  message: 'DSN:',
@@ -55,7 +56,7 @@ export class PromptForParameters extends BaseStep {
55
56
  validate: this._validateDSN,
56
57
  when: this._shouldAsk(answers, 'config.dsn.secret', () => {
57
58
  dim('Please copy/paste your DSN');
58
- dim(`It can be found here: ${url}`);
59
+ dim(`It can be found here: ${dsnKeyUrl}`);
59
60
  }),
60
61
  },
61
62
  ]);
@@ -106,6 +107,16 @@ export class PromptForParameters extends BaseStep {
106
107
  return `${baseUrl}${orgSlug}/${projSlug}`;
107
108
  }
108
109
 
110
+ private _getDSNKeyUrl(answers: Answers, projectSlug?: string): string {
111
+ const baseUrl = this._argv.url;
112
+ const projSlug = _.get(
113
+ answers,
114
+ 'config.project.slug',
115
+ projectSlug || 'project_slug',
116
+ );
117
+ return `${baseUrl}settings/projects/${projSlug}/keys`;
118
+ }
119
+
109
120
  private _shouldAsk(
110
121
  answers: Answers,
111
122
  configKey: string,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/wizard",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
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",
@@ -17,6 +17,10 @@
17
17
  "bin": {
18
18
  "sentry-wizard": "dist/bin.js"
19
19
  },
20
+ "publishConfig": {
21
+ "access": "public",
22
+ "tag": "v1"
23
+ },
20
24
  "main": "dist/index.js",
21
25
  "typings": "dist/index.d.ts",
22
26
  "typescript": {