@sentry/wizard 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/bin.js +9 -0
  3. package/dist/bin.js.map +1 -1
  4. package/dist/e2e-tests/tests/flutter.test.js +16 -16
  5. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  6. package/dist/e2e-tests/tests/help-message.test.d.ts +1 -0
  7. package/dist/e2e-tests/tests/help-message.test.js +56 -0
  8. package/dist/e2e-tests/tests/help-message.test.js.map +1 -0
  9. package/dist/e2e-tests/tests/nextjs-14.test.js +15 -15
  10. package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
  11. package/dist/e2e-tests/tests/nextjs-15.test.js +15 -15
  12. package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
  13. package/dist/e2e-tests/tests/nuxt-3.test.js +13 -12
  14. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  15. package/dist/e2e-tests/tests/nuxt-4.test.js +13 -12
  16. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  17. package/dist/e2e-tests/tests/remix.test.js +20 -20
  18. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  19. package/dist/e2e-tests/tests/sveltekit.test.js +20 -20
  20. package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
  21. package/dist/e2e-tests/utils/index.js +15 -11
  22. package/dist/e2e-tests/utils/index.js.map +1 -1
  23. package/dist/lib/Constants.d.ts +5 -1
  24. package/dist/lib/Constants.js.map +1 -1
  25. package/dist/lib/Helper/Logging.d.ts +1 -1
  26. package/dist/lib/Helper/Logging.js.map +1 -1
  27. package/dist/lib/Helper/__tests__/File.js +9 -9
  28. package/dist/lib/Helper/__tests__/File.js.map +1 -1
  29. package/dist/lib/Helper/__tests__/MergeConfig.js +17 -17
  30. package/dist/lib/Helper/__tests__/MergeConfig.js.map +1 -1
  31. package/dist/lib/Helper/__tests__/SentryCli.js +23 -22
  32. package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
  33. package/dist/lib/Setup.d.ts +2 -1
  34. package/dist/lib/Setup.js +12 -2
  35. package/dist/lib/Setup.js.map +1 -1
  36. package/dist/lib/Steps/BaseStep.d.ts +1 -1
  37. package/dist/lib/Steps/BaseStep.js.map +1 -1
  38. package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
  39. package/dist/lib/Steps/Welcome.js +5 -0
  40. package/dist/lib/Steps/Welcome.js.map +1 -1
  41. package/dist/lib/__tests__/Env.js +4 -3
  42. package/dist/lib/__tests__/Env.js.map +1 -1
  43. package/dist/src/apple/apple-wizard.js +24 -64
  44. package/dist/src/apple/apple-wizard.js.map +1 -1
  45. package/dist/src/apple/configure-package-manager.d.ts +5 -0
  46. package/dist/src/apple/configure-package-manager.js +68 -0
  47. package/dist/src/apple/configure-package-manager.js.map +1 -0
  48. package/dist/src/apple/configure-sentry-cli.d.ts +4 -0
  49. package/dist/src/apple/configure-sentry-cli.js +47 -0
  50. package/dist/src/apple/configure-sentry-cli.js.map +1 -0
  51. package/dist/src/apple/configure-xcode-project.d.ts +8 -0
  52. package/dist/src/apple/configure-xcode-project.js +11 -0
  53. package/dist/src/apple/configure-xcode-project.js.map +1 -0
  54. package/dist/src/apple/inject-code-snippet.d.ts +6 -0
  55. package/dist/src/apple/inject-code-snippet.js +54 -0
  56. package/dist/src/apple/inject-code-snippet.js.map +1 -0
  57. package/dist/src/apple/templates.js +11 -7
  58. package/dist/src/apple/templates.js.map +1 -1
  59. package/dist/src/apple/xcode-manager.js +3 -6
  60. package/dist/src/apple/xcode-manager.js.map +1 -1
  61. package/dist/src/nextjs/templates.js +3 -1
  62. package/dist/src/nextjs/templates.js.map +1 -1
  63. package/dist/src/react-native/javascript.d.ts +6 -4
  64. package/dist/src/react-native/javascript.js +25 -9
  65. package/dist/src/react-native/javascript.js.map +1 -1
  66. package/dist/src/react-native/react-native-wizard.d.ts +4 -0
  67. package/dist/src/react-native/react-native-wizard.js +30 -5
  68. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  69. package/dist/src/react-native/xcode.d.ts +7 -3
  70. package/dist/src/react-native/xcode.js +64 -20
  71. package/dist/src/react-native/xcode.js.map +1 -1
  72. package/dist/src/run.js +2 -2
  73. package/dist/src/run.js.map +1 -1
  74. package/dist/src/utils/clack/index.js +3 -1
  75. package/dist/src/utils/clack/index.js.map +1 -1
  76. package/dist/src/utils/package-manager.d.ts +2 -0
  77. package/dist/src/utils/package-manager.js +55 -5
  78. package/dist/src/utils/package-manager.js.map +1 -1
  79. package/dist/src/version.d.ts +1 -1
  80. package/dist/src/version.js +1 -1
  81. package/dist/src/version.js.map +1 -1
  82. package/dist/test/android/code-tools.test.js +13 -12
  83. package/dist/test/android/code-tools.test.js.map +1 -1
  84. package/dist/test/apple/cocoapod.test.js +77 -72
  85. package/dist/test/apple/cocoapod.test.js.map +1 -1
  86. package/dist/test/apple/code-tools.test.js +173 -166
  87. package/dist/test/apple/code-tools.test.js.map +1 -1
  88. package/dist/test/apple/fastfile.test.js +86 -83
  89. package/dist/test/apple/fastfile.test.js.map +1 -1
  90. package/dist/test/apple/templates.test.js +32 -27
  91. package/dist/test/apple/templates.test.js.map +1 -1
  92. package/dist/test/apple/xcode-manager.test.js +182 -183
  93. package/dist/test/apple/xcode-manager.test.js.map +1 -1
  94. package/dist/test/flutter/code-tools.test.js +29 -28
  95. package/dist/test/flutter/code-tools.test.js.map +1 -1
  96. package/dist/test/flutter/templates.test.js +15 -14
  97. package/dist/test/flutter/templates.test.js.map +1 -1
  98. package/dist/test/nextjs/templates.test.js +43 -36
  99. package/dist/test/nextjs/templates.test.js.map +1 -1
  100. package/dist/test/nuxt/templates.test.js +25 -24
  101. package/dist/test/nuxt/templates.test.js.map +1 -1
  102. package/dist/test/react-native/expo-metro.test.js +11 -10
  103. package/dist/test/react-native/expo-metro.test.js.map +1 -1
  104. package/dist/test/react-native/expo.test.js +11 -10
  105. package/dist/test/react-native/expo.test.js.map +1 -1
  106. package/dist/test/react-native/gradle.test.js +27 -26
  107. package/dist/test/react-native/gradle.test.js.map +1 -1
  108. package/dist/test/react-native/javascript.test.js +108 -58
  109. package/dist/test/react-native/javascript.test.js.map +1 -1
  110. package/dist/test/react-native/metro.test.js +65 -64
  111. package/dist/test/react-native/metro.test.js.map +1 -1
  112. package/dist/test/react-native/xcode.test.js +138 -37
  113. package/dist/test/react-native/xcode.test.js.map +1 -1
  114. package/dist/test/remix/client-entry.test.js +8 -7
  115. package/dist/test/remix/client-entry.test.js.map +1 -1
  116. package/dist/test/remix/server-instrumentation.test.js +6 -5
  117. package/dist/test/remix/server-instrumentation.test.js.map +1 -1
  118. package/dist/test/sourcemaps/tools/sentry-cli.test.js +20 -20
  119. package/dist/test/sourcemaps/tools/sentry-cli.test.js.map +1 -1
  120. package/dist/test/sourcemaps/tools/tsc.test.js +13 -14
  121. package/dist/test/sourcemaps/tools/tsc.test.js.map +1 -1
  122. package/dist/test/sourcemaps/tools/vite.test.js +13 -14
  123. package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
  124. package/dist/test/sourcemaps/tools/webpack.test.js +19 -20
  125. package/dist/test/sourcemaps/tools/webpack.test.js.map +1 -1
  126. package/dist/test/sveltekit/templates.test.js +13 -12
  127. package/dist/test/sveltekit/templates.test.js.map +1 -1
  128. package/dist/test/utils/ast-utils.test.js +45 -44
  129. package/dist/test/utils/ast-utils.test.js.map +1 -1
  130. package/dist/test/utils/clack/index.test.js +140 -144
  131. package/dist/test/utils/clack/index.test.js.map +1 -1
  132. package/dist/test/utils/package-manager.test.js +8 -7
  133. package/dist/test/utils/package-manager.test.js.map +1 -1
  134. package/package.json +10 -38
  135. package/dist/e2e-tests/jest.config.d.ts +0 -17
  136. package/dist/e2e-tests/jest.config.js +0 -23
  137. package/dist/e2e-tests/jest.config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SentryCli.js","sourceRoot":"","sources":["../../../../lib/Helper/__tests__/SentryCli.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference types=\"jest\" />\nimport type { Answers } from 'inquirer';\n\nimport type { Args } from '../../Constants';\nimport { Integration, Platform } from '../../Constants';\nimport { SentryCli } from '../SentryCli';\n\ntype RequireResolve = typeof require.resolve;\n\nconst args: Args = {\n debug: false,\n integration: Integration.reactNative,\n platform: [Platform.ios],\n quiet: false,\n skipConnect: false,\n uninstall: false,\n url: 'https://localhost:1234',\n signup: false,\n disableTelemetry: false,\n};\n\nconst demoAnswers: Answers = {\n config: {\n auth: {\n token: 'abcd',\n },\n organization: {\n slug: 'test_org',\n },\n project: {\n slug: 'test_proj',\n },\n },\n};\n\ndescribe('SentryCli', () => {\n const resolveFunc = jest\n .fn()\n .mockReturnValue('node_modules/sentry/cli') as unknown as RequireResolve;\n test('convertAnswersToProperties', () => {\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(props['defaults/url']).toBe('https://localhost:1234');\n expect(props['defaults/org']).toBe('test_org');\n expect(props['defaults/project']).toBe('test_proj');\n expect(props['auth/token']).toBe('abcd');\n expect(props['cli/executable']).toBe('node_modules/sentry/cli');\n });\n\n test('dump properties', () => {\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(sentry.dumpProperties(props))\n .toBe(`defaults.url=https://localhost:1234\ndefaults.org=test_org\ndefaults.project=test_proj\nauth.token=abcd\ncli.executable=node_modules/sentry/cli\n`);\n });\n\n test('dump config', () => {\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = {\n auth: { 'auth/token': 'myToken' },\n };\n expect(sentry.dumpConfig(props)).toMatchInlineSnapshot(`\n \"[auth]\n token=myToken\n \"\n `);\n });\n\n test('convertAnswersToProperties windows', () => {\n const resolveFunc = jest\n .fn()\n .mockReturnValue(\n 'node_modules\\\\sentry\\\\cli',\n ) as unknown as RequireResolve;\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(props['defaults/url']).toBe('https://localhost:1234');\n expect(props['defaults/org']).toBe('test_org');\n expect(props['defaults/project']).toBe('test_proj');\n expect(props['auth/token']).toBe('abcd');\n expect(props['cli/executable']).toBe('node_modules\\\\\\\\sentry\\\\\\\\cli');\n });\n\n test('dump properties windows', () => {\n const resolveFunc = jest\n .fn()\n .mockReturnValue(\n 'node_modules\\\\sentry\\\\cli',\n ) as unknown as RequireResolve;\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(sentry.dumpProperties(props))\n .toBe(`defaults.url=https://localhost:1234\ndefaults.org=test_org\ndefaults.project=test_proj\nauth.token=abcd\ncli.executable=node_modules\\\\\\\\sentry\\\\\\\\cli\n`);\n });\n});\n"]}
1
+ {"version":3,"file":"SentryCli.js","sourceRoot":"","sources":["../../../../lib/Helper/__tests__/SentryCli.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Answers } from 'inquirer';\n\nimport type { Args } from '../../Constants';\nimport { Integration, Platform } from '../../Constants';\nimport { SentryCli } from '../SentryCli';\nimport { describe, expect, test, vi } from 'vitest';\n\ntype RequireResolve = typeof require.resolve;\n\nconst args: Args = {\n debug: false,\n integration: Integration.reactNative,\n platform: [Platform.ios],\n quiet: false,\n skipConnect: false,\n uninstall: false,\n url: 'https://localhost:1234',\n signup: false,\n disableTelemetry: false,\n};\n\nconst demoAnswers: Answers = {\n config: {\n auth: {\n token: 'abcd',\n },\n organization: {\n slug: 'test_org',\n },\n project: {\n slug: 'test_proj',\n },\n },\n};\n\ndescribe('SentryCli', () => {\n const resolveFunc = vi\n .fn()\n .mockReturnValue('node_modules/sentry/cli') as unknown as RequireResolve;\n test('convertAnswersToProperties', () => {\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(props['defaults/url']).toBe('https://localhost:1234');\n expect(props['defaults/org']).toBe('test_org');\n expect(props['defaults/project']).toBe('test_proj');\n expect(props['auth/token']).toBe('abcd');\n expect(props['cli/executable']).toBe('node_modules/sentry/cli');\n });\n\n test('dump properties', () => {\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(sentry.dumpProperties(props))\n .toBe(`defaults.url=https://localhost:1234\ndefaults.org=test_org\ndefaults.project=test_proj\nauth.token=abcd\ncli.executable=node_modules/sentry/cli\n`);\n });\n\n test('dump config', () => {\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = {\n auth: { 'auth/token': 'myToken' },\n };\n expect(sentry.dumpConfig(props)).toMatchInlineSnapshot(`\n \"[auth]\n token=myToken\n \"\n `);\n });\n\n test('convertAnswersToProperties windows', () => {\n const resolveFunc = vi\n .fn()\n .mockReturnValue(\n 'node_modules\\\\sentry\\\\cli',\n ) as unknown as RequireResolve;\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(props['defaults/url']).toBe('https://localhost:1234');\n expect(props['defaults/org']).toBe('test_org');\n expect(props['defaults/project']).toBe('test_proj');\n expect(props['auth/token']).toBe('abcd');\n expect(props['cli/executable']).toBe('node_modules\\\\\\\\sentry\\\\\\\\cli');\n });\n\n test('dump properties windows', () => {\n const resolveFunc = vi\n .fn()\n .mockReturnValue(\n 'node_modules\\\\sentry\\\\cli',\n ) as unknown as RequireResolve;\n const sentry = new SentryCli(args);\n sentry.setResolveFunction(resolveFunc);\n const props = sentry.convertAnswersToProperties(demoAnswers);\n expect(sentry.dumpProperties(props))\n .toBe(`defaults.url=https://localhost:1234\ndefaults.org=test_org\ndefaults.project=test_proj\nauth.token=abcd\ncli.executable=node_modules\\\\\\\\sentry\\\\\\\\cli\n`);\n });\n});\n"]}
@@ -1,9 +1,10 @@
1
1
  import { Answers } from 'inquirer';
2
2
  import { Args } from './Constants';
3
+ import { WizardOptions } from '../src/utils/types';
3
4
  /**
4
5
  * @deprecated this function is the entry point to the old, step-based wizards located in `lib`.
5
6
  * When creating new wizards, we now add them to clack-based wizards under `src`.
6
7
  * Therefor, do not call this function anymore.
7
8
  * Use `run` from {@link ../src/run.ts} instead.
8
9
  */
9
- export declare function run(argv: Args): Promise<Answers>;
10
+ export declare function run(argv: Args, wizardOptions: WizardOptions): Promise<Answers>;
package/dist/lib/Setup.js CHANGED
@@ -28,13 +28,15 @@ const debug_1 = require("../src/utils/debug");
28
28
  const Env_1 = require("./Helper/Env");
29
29
  const Wizard_1 = require("./Helper/Wizard");
30
30
  const Step = __importStar(require("./Steps"));
31
+ const telemetry_1 = require("../src/telemetry");
32
+ const node_1 = require("@sentry/node");
31
33
  /**
32
34
  * @deprecated this function is the entry point to the old, step-based wizards located in `lib`.
33
35
  * When creating new wizards, we now add them to clack-based wizards under `src`.
34
36
  * Therefor, do not call this function anymore.
35
37
  * Use `run` from {@link ../src/run.ts} instead.
36
38
  */
37
- async function run(argv) {
39
+ async function run(argv, wizardOptions) {
38
40
  const args = { ...argv, ...(0, Env_1.readEnvironment)() };
39
41
  if (argv.debug) {
40
42
  (0, debug_1.enableDebugLogs)();
@@ -52,7 +54,15 @@ async function run(argv) {
52
54
  steps.push(Step.OpenSentry, Step.WaitForSentry, Step.SentryProjectSelector, Step.PromptForParameters);
53
55
  }
54
56
  steps.push(Step.ConfigureProject, Step.Result);
55
- return (0, Wizard_1.startWizard)(args, ...steps);
57
+ return (0, telemetry_1.withTelemetry)({
58
+ enabled: wizardOptions.telemetryEnabled,
59
+ integration: args.integration,
60
+ wizardOptions,
61
+ }, async () => {
62
+ const res = await (0, Wizard_1.startWizard)(args, ...steps);
63
+ await (0, node_1.flush)(3000);
64
+ return res;
65
+ });
56
66
  }
57
67
  exports.run = run;
58
68
  //# sourceMappingURL=Setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Setup.js","sourceRoot":"","sources":["../../lib/Setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,8CAAqD;AAGrD,sCAA+C;AAC/C,4CAA8C;AAC9C,8CAAgC;AAEhC;;;;;GAKG;AACI,KAAK,UAAU,GAAG,CAAC,IAAU;IAClC,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAA,qBAAe,GAAE,EAAE,CAAC;IAE/C,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAA,uBAAe,GAAE,CAAC;KACnB;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IACD,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,eAAe;KACrB,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;QAC5B,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,mBAAmB,CACzB,CAAC;KACH;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,IAAA,oBAAW,EAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;AACrC,CAAC;AA3BD,kBA2BC","sourcesContent":["import { Answers } from 'inquirer';\nimport { enableDebugLogs } from '../src/utils/debug';\nimport { Args } from './Constants';\n\nimport { readEnvironment } from './Helper/Env';\nimport { startWizard } from './Helper/Wizard';\nimport * as Step from './Steps';\n\n/**\n * @deprecated this function is the entry point to the old, step-based wizards located in `lib`.\n * When creating new wizards, we now add them to clack-based wizards under `src`.\n * Therefor, do not call this function anymore.\n * Use `run` from {@link ../src/run.ts} instead.\n */\nexport async function run(argv: Args): Promise<Answers> {\n const args = { ...argv, ...readEnvironment() };\n\n if (argv.debug) {\n enableDebugLogs();\n }\n\n if (args.uninstall === undefined) {\n args.uninstall = false;\n }\n const steps = [\n Step.Initial,\n Step.Welcome,\n Step.ChooseIntegration,\n Step.ShouldConfigure,\n ];\n if (args.uninstall === false) {\n steps.push(\n Step.OpenSentry,\n Step.WaitForSentry,\n Step.SentryProjectSelector,\n Step.PromptForParameters,\n );\n }\n steps.push(Step.ConfigureProject, Step.Result);\n\n return startWizard(args, ...steps);\n}\n"]}
1
+ {"version":3,"file":"Setup.js","sourceRoot":"","sources":["../../lib/Setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,8CAAqD;AAGrD,sCAA+C;AAC/C,4CAA8C;AAC9C,8CAAgC;AAChC,gDAAiD;AAEjD,uCAAqC;AAErC;;;;;GAKG;AACI,KAAK,UAAU,GAAG,CACvB,IAAU,EACV,aAA4B;IAE5B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAA,qBAAe,GAAE,EAAE,CAAC;IAE/C,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAA,uBAAe,GAAE,CAAC;KACnB;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IACD,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,iBAAiB;QACtB,IAAI,CAAC,eAAe;KACrB,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;QAC5B,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,mBAAmB,CACzB,CAAC;KACH;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,IAAA,yBAAa,EAClB;QACE,OAAO,EAAE,aAAa,CAAC,gBAAgB;QACvC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa;KACd,EACD,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAW,EAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAA,YAAK,EAAC,IAAI,CAAC,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC,CACF,CAAC;AACJ,CAAC;AAzCD,kBAyCC","sourcesContent":["import { Answers } from 'inquirer';\nimport { enableDebugLogs } from '../src/utils/debug';\nimport { Args } from './Constants';\n\nimport { readEnvironment } from './Helper/Env';\nimport { startWizard } from './Helper/Wizard';\nimport * as Step from './Steps';\nimport { withTelemetry } from '../src/telemetry';\nimport { WizardOptions } from '../src/utils/types';\nimport { flush } from '@sentry/node';\n\n/**\n * @deprecated this function is the entry point to the old, step-based wizards located in `lib`.\n * When creating new wizards, we now add them to clack-based wizards under `src`.\n * Therefor, do not call this function anymore.\n * Use `run` from {@link ../src/run.ts} instead.\n */\nexport async function run(\n argv: Args,\n wizardOptions: WizardOptions,\n): Promise<Answers> {\n const args = { ...argv, ...readEnvironment() };\n\n if (argv.debug) {\n enableDebugLogs();\n }\n\n if (args.uninstall === undefined) {\n args.uninstall = false;\n }\n const steps = [\n Step.Initial,\n Step.Welcome,\n Step.ChooseIntegration,\n Step.ShouldConfigure,\n ];\n if (args.uninstall === false) {\n steps.push(\n Step.OpenSentry,\n Step.WaitForSentry,\n Step.SentryProjectSelector,\n Step.PromptForParameters,\n );\n }\n steps.push(Step.ConfigureProject, Step.Result);\n\n return withTelemetry(\n {\n enabled: wizardOptions.telemetryEnabled,\n integration: args.integration,\n wizardOptions,\n },\n async () => {\n const res = await startWizard(args, ...steps);\n await flush(3000);\n return res;\n },\n );\n}\n"]}
@@ -4,7 +4,7 @@ export declare abstract class BaseStep implements IStep {
4
4
  protected _argv: Args;
5
5
  protected _isDebug: boolean;
6
6
  constructor(_argv: Args);
7
- debug(msg: any): void;
7
+ debug(msg: unknown): void;
8
8
  abstract emit(answers: Answers): Promise<Answers>;
9
9
  }
10
10
  export interface IStep {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseStep.js","sourceRoot":"","sources":["../../../lib/Steps/BaseStep.ts"],"names":[],"mappings":";;;AAGA,+CAA8C;AAE9C,MAAsB,QAAQ;IAEC;IADnB,QAAQ,GAAG,KAAK,CAAC;IAC3B,YAA6B,KAAW;QAAX,UAAK,GAAL,KAAK,CAAM;QACtC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,GAAQ;QACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAA,YAAE,GAAE,CAAC;YACL,IAAA,eAAK,EAAC,GAAG,CAAC,CAAC;YACX,IAAA,YAAE,GAAE,CAAC;SACN;IACH,CAAC;CAGF;AAfD,4BAeC","sourcesContent":["import type { Answers } from 'inquirer';\n\nimport type { Args } from '../Constants';\nimport { debug, nl } from '../Helper/Logging';\n\nexport abstract class BaseStep implements IStep {\n protected _isDebug = false;\n public constructor(protected _argv: Args) {\n this._isDebug = _argv.debug;\n }\n\n public debug(msg: any): void {\n if (this._isDebug) {\n nl();\n debug(msg);\n nl();\n }\n }\n\n public abstract emit(answers: Answers): Promise<Answers>;\n}\n\nexport interface IStep {\n emit(answers?: Answers): Promise<Answers>;\n}\n"]}
1
+ {"version":3,"file":"BaseStep.js","sourceRoot":"","sources":["../../../lib/Steps/BaseStep.ts"],"names":[],"mappings":";;;AAGA,+CAA8C;AAE9C,MAAsB,QAAQ;IAEC;IADnB,QAAQ,GAAG,KAAK,CAAC;IAC3B,YAA6B,KAAW;QAAX,UAAK,GAAL,KAAK,CAAM;QACtC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,GAAY;QACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAA,YAAE,GAAE,CAAC;YACL,IAAA,eAAK,EAAC,GAAG,CAAC,CAAC;YACX,IAAA,YAAE,GAAE,CAAC;SACN;IACH,CAAC;CAGF;AAfD,4BAeC","sourcesContent":["import type { Answers } from 'inquirer';\n\nimport type { Args } from '../Constants';\nimport { debug, nl } from '../Helper/Logging';\n\nexport abstract class BaseStep implements IStep {\n protected _isDebug = false;\n public constructor(protected _argv: Args) {\n this._isDebug = _argv.debug;\n }\n\n public debug(msg: unknown): void {\n if (this._isDebug) {\n nl();\n debug(msg);\n nl();\n }\n }\n\n public abstract emit(answers: Answers): Promise<Answers>;\n}\n\nexport interface IStep {\n emit(answers?: Answers): Promise<Answers>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Cordova.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/Cordova.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Answers } from 'inquirer';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { PBXShellScriptBuildPhase, Project } from 'xcode';\nimport xcode from 'xcode';\n\nimport type { Args } from '../../Constants';\nimport { exists, matchesContent, patchMatchingFile } from '../../Helper/File';\nimport { green } from '../../Helper/Logging';\nimport { SentryCli, SentryCliProps } from '../../Helper/SentryCli';\nimport { BaseIntegration } from './BaseIntegration';\n\nexport class Cordova extends BaseIntegration {\n protected _sentryCli: SentryCli;\n\n protected _folderPrefix = 'platforms';\n protected _pluginFolder: string[] = ['.'];\n\n public 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\n const sentryCliProperties =\n this._sentryCli.convertAnswersToProperties(answers);\n\n await patchMatchingFile(\n `${this._folderPrefix}/ios/*.xcodeproj/project.pbxproj`,\n (contents, filename) => this._patchXcodeProj(contents, filename),\n );\n\n await this._addSentryProperties(sentryCliProperties);\n green('Successfully set up for cordova');\n\n return {};\n }\n\n public async uninstall(_answers: Answers): Promise<Answers> {\n await patchMatchingFile('**/*.xcodeproj/project.pbxproj', (_, filename) =>\n this._unpatchXcodeProj(filename),\n );\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 result = false;\n if (!exists(path.join('sentry.properties'))) {\n result = true;\n this.debug('sentry.properties not exists');\n }\n\n if (\n !matchesContent('**/*.xcodeproj/project.pbxproj', /SENTRY_PROPERTIES/gi)\n ) {\n result = true;\n this.debug('**/*.xcodeproj/project.pbxproj 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 result = !result;\n }\n\n this._shouldConfigure = Promise.resolve({ cordova: result });\n // eslint-disable-next-line @typescript-eslint/unbound-method\n return this.shouldConfigure;\n }\n\n private _unpatchXcodeProj(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 this._unpatchXcodeBuildScripts(proj);\n resolve(proj.writeSync());\n });\n });\n }\n\n private _unpatchXcodeBuildScripts(proj: Project): void {\n const scripts = proj.hash.project.objects.PBXShellScriptBuildPhase || {};\n\n const firstTarget = proj.getFirstTarget()?.uuid || '';\n\n const nativeTargets = proj.hash.project.objects.PBXNativeTarget;\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(/SENTRY_PROPERTIES/) ||\n script.shellScript?.match(/SENTRY_FRAMEWORK_PATCH/)\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 target = nativeTargets && nativeTargets[firstTarget];\n const phases = typeof target === 'object' && target.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 _patchXcodeProj(\n contents: string,\n filename: string,\n ): Promise<string | void> {\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: Array<PBXShellScriptBuildPhase> = [];\n for (const val of Object.values(\n proj.hash.project.objects.PBXShellScriptBuildPhase || {},\n )) {\n if (\n typeof val === 'object' &&\n val.isa === 'PBXShellScriptBuildPhase'\n ) {\n buildScripts.push(val);\n }\n }\n\n this._addNewXcodeBuildPhaseForSymbols(buildScripts, proj);\n this._addNewXcodeBuildPhaseForStripping(buildScripts, proj);\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 _addNewXcodeBuildPhaseForSymbols(\n buildScripts: Array<PBXShellScriptBuildPhase | string>,\n proj: Project,\n ): void {\n for (const script of buildScripts) {\n if (\n typeof script === 'object' &&\n script.shellScript?.match(/SENTRY_PROPERTIES/)\n ) {\n return;\n }\n }\n const cwd = path.join(process.cwd(), 'sentry.properties');\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript:\n // eslint-disable-next-line prefer-template\n 'echo \"warning: uploading debug symbols - set SENTRY_SKIP_DSYM_UPLOAD=true to skip this\"\\\\n' +\n 'if [ -n \"$SENTRY_SKIP_DSYM_UPLOAD\" ]; then\\\\n' +\n ' echo \"warning: skipping debug symbol upload\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'export SENTRY_PROPERTIES=' +\n cwd +\n '\\\\n' +\n 'function getProperty {\\\\n' +\n ' PROP_KEY=$1\\\\n' +\n ' PROP_VALUE=`cat $SENTRY_PROPERTIES | grep \"$PROP_KEY\" | cut -d\\'=\\' -f2`\\\\n' +\n ' if [ -z \"$PROP_VALUE\" ]; then\\\\n' +\n ' echo \"plugins/sentry-cordova/node_modules/@sentry/cli/bin/sentry-cli\"\\\\n' +\n ' else\\\\n' +\n ' echo $PROP_VALUE\\\\n' +\n ' fi\\\\n' +\n '}\\\\n' +\n 'if [ ! -f $SENTRY_PROPERTIES ]; then\\\\n' +\n ' echo \"warning: SENTRY: sentry.properties file not found! Skipping symbol upload.\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'echo \"# Reading property from $SENTRY_PROPERTIES\"\\\\n' +\n 'SENTRY_CLI=$(getProperty \"cli.executable\")\\\\n' +\n 'SENTRY_COMMAND=\"../../$SENTRY_CLI upload-dsym\"\\\\n' +\n '$SENTRY_COMMAND',\n },\n );\n }\n\n private _addNewXcodeBuildPhaseForStripping(\n buildScripts: Array<PBXShellScriptBuildPhase | string>,\n proj: Project,\n ): void {\n for (const script of buildScripts) {\n if (\n typeof script === 'object' &&\n script.shellScript?.match(/SENTRY_FRAMEWORK_PATCH/)\n ) {\n return;\n }\n }\n // http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Sentry strip unused archs from Framework',\n null,\n {\n shellPath: '/bin/sh',\n shellScript:\n '# SENTRY_FRAMEWORK_PATCH \\\\n' +\n 'echo \"warning: patching framework - set SENTRY_SKIP_FRAMEWORK_PATCH=true to skip this\"\\\\n' +\n 'if [ -n \"$SENTRY_SKIP_FRAMEWORK_PATCH\" ]; then\\\\n' +\n ' echo \"warning: skipping framework patch\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'APP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\\\\n' +\n 'find \"$APP_PATH\" -name \\'Sentry*.framework\\' -type d | while read -r FRAMEWORK\\\\n' +\n 'do\\\\n' +\n 'FRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\\\\n' +\n 'FRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\\\\n' +\n 'echo \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\\\\n' +\n 'EXTRACTED_ARCHS=()\\\\n' +\n 'for ARCH in $ARCHS\\\\n' +\n 'do\\\\n' +\n 'echo \"Checking if $FRAMEWORK_EXECUTABLE_PATH needs to be stripped.\"\\\\n' +\n '# Do not skip if \"Architectures in the fat file\".\\\\n' +\n '# Skip if Non-fat file or if file not found. \\\\n' +\n 'if lipo -info \"$FRAMEWORK_EXECUTABLE_PATH\" | grep -v \" fat \"; then\\\\n' +\n ' echo \"Strip not required, skipping the strip script.\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'echo \"Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME\"\\\\n' +\n 'lipo -extract \"$ARCH\" \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\"\\\\n' +\n 'EXTRACTED_ARCHS+=(\"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\")\\\\n' +\n 'done\\\\n' +\n 'echo \"Merging extracted architectures: ${ARCHS}\"\\\\n' +\n 'lipo -o \"$FRAMEWORK_EXECUTABLE_PATH-merged\" -create \"${EXTRACTED_ARCHS[@]}\"\\\\n' +\n 'rm \"${EXTRACTED_ARCHS[@]}\"\\\\n' +\n 'echo \"Replacing original executable with thinned version\"\\\\n' +\n 'rm \"$FRAMEWORK_EXECUTABLE_PATH\"\\\\n' +\n 'mv \"$FRAMEWORK_EXECUTABLE_PATH-merged\" \"$FRAMEWORK_EXECUTABLE_PATH\"\\\\n' +\n 'done',\n },\n );\n }\n\n private _addSentryProperties(properties: SentryCliProps): Promise<void> {\n let rv = Promise.resolve();\n const fn = path.join('sentry.properties');\n if (exists(fn)) {\n return rv;\n }\n rv = rv.then(() =>\n fs.writeFileSync(fn, this._sentryCli.dumpProperties(properties)),\n );\n\n return rv;\n }\n}\n"]}
1
+ {"version":3,"file":"Cordova.js","sourceRoot":"","sources":["../../../../lib/Steps/Integrations/Cordova.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Answers } from 'inquirer';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { PBXShellScriptBuildPhase, Project } from 'xcode';\nimport xcode from 'xcode';\n\nimport type { Args } from '../../Constants';\nimport { exists, matchesContent, patchMatchingFile } from '../../Helper/File';\nimport { green } from '../../Helper/Logging';\nimport { SentryCli, SentryCliProps } from '../../Helper/SentryCli';\nimport { BaseIntegration } from './BaseIntegration';\n\nexport class Cordova extends BaseIntegration {\n protected _sentryCli: SentryCli;\n\n protected _folderPrefix = 'platforms';\n protected _pluginFolder: string[] = ['.'];\n\n public 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\n const sentryCliProperties =\n this._sentryCli.convertAnswersToProperties(answers);\n\n await patchMatchingFile(\n `${this._folderPrefix}/ios/*.xcodeproj/project.pbxproj`,\n (contents, filename) => this._patchXcodeProj(contents, filename),\n );\n\n await this._addSentryProperties(sentryCliProperties);\n green('Successfully set up for cordova');\n\n return {};\n }\n\n public async uninstall(_answers: Answers): Promise<Answers> {\n await patchMatchingFile('**/*.xcodeproj/project.pbxproj', (_, filename) =>\n this._unpatchXcodeProj(filename),\n );\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 result = false;\n if (!exists(path.join('sentry.properties'))) {\n result = true;\n this.debug('sentry.properties not exists');\n }\n\n if (\n !matchesContent('**/*.xcodeproj/project.pbxproj', /SENTRY_PROPERTIES/gi)\n ) {\n result = true;\n this.debug('**/*.xcodeproj/project.pbxproj 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 result = !result;\n }\n\n this._shouldConfigure = Promise.resolve({ cordova: result });\n // eslint-disable-next-line @typescript-eslint/unbound-method\n return this.shouldConfigure;\n }\n\n private _unpatchXcodeProj(filename: string): Promise<string> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: unknown) => {\n if (err) {\n reject(err);\n return;\n }\n\n this._unpatchXcodeBuildScripts(proj);\n resolve(proj.writeSync());\n });\n });\n }\n\n private _unpatchXcodeBuildScripts(proj: Project): void {\n const scripts = proj.hash.project.objects.PBXShellScriptBuildPhase || {};\n\n const firstTarget = proj.getFirstTarget()?.uuid || '';\n\n const nativeTargets = proj.hash.project.objects.PBXNativeTarget;\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(/SENTRY_PROPERTIES/) ||\n script.shellScript?.match(/SENTRY_FRAMEWORK_PATCH/)\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 target = nativeTargets && nativeTargets[firstTarget];\n const phases = typeof target === 'object' && target.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 _patchXcodeProj(\n contents: string,\n filename: string,\n ): Promise<string | void> {\n const proj = xcode.project(filename);\n return new Promise((resolve, reject) => {\n proj.parse((err: unknown) => {\n if (err) {\n reject(err);\n return;\n }\n\n const buildScripts: Array<PBXShellScriptBuildPhase> = [];\n for (const val of Object.values(\n proj.hash.project.objects.PBXShellScriptBuildPhase || {},\n )) {\n if (\n typeof val === 'object' &&\n val.isa === 'PBXShellScriptBuildPhase'\n ) {\n buildScripts.push(val);\n }\n }\n\n this._addNewXcodeBuildPhaseForSymbols(buildScripts, proj);\n this._addNewXcodeBuildPhaseForStripping(buildScripts, proj);\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 _addNewXcodeBuildPhaseForSymbols(\n buildScripts: Array<PBXShellScriptBuildPhase | string>,\n proj: Project,\n ): void {\n for (const script of buildScripts) {\n if (\n typeof script === 'object' &&\n script.shellScript?.match(/SENTRY_PROPERTIES/)\n ) {\n return;\n }\n }\n const cwd = path.join(process.cwd(), 'sentry.properties');\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Upload Debug Symbols to Sentry',\n null,\n {\n shellPath: '/bin/sh',\n shellScript:\n // eslint-disable-next-line prefer-template\n 'echo \"warning: uploading debug symbols - set SENTRY_SKIP_DSYM_UPLOAD=true to skip this\"\\\\n' +\n 'if [ -n \"$SENTRY_SKIP_DSYM_UPLOAD\" ]; then\\\\n' +\n ' echo \"warning: skipping debug symbol upload\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'export SENTRY_PROPERTIES=' +\n cwd +\n '\\\\n' +\n 'function getProperty {\\\\n' +\n ' PROP_KEY=$1\\\\n' +\n ' PROP_VALUE=`cat $SENTRY_PROPERTIES | grep \"$PROP_KEY\" | cut -d\\'=\\' -f2`\\\\n' +\n ' if [ -z \"$PROP_VALUE\" ]; then\\\\n' +\n ' echo \"plugins/sentry-cordova/node_modules/@sentry/cli/bin/sentry-cli\"\\\\n' +\n ' else\\\\n' +\n ' echo $PROP_VALUE\\\\n' +\n ' fi\\\\n' +\n '}\\\\n' +\n 'if [ ! -f $SENTRY_PROPERTIES ]; then\\\\n' +\n ' echo \"warning: SENTRY: sentry.properties file not found! Skipping symbol upload.\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'echo \"# Reading property from $SENTRY_PROPERTIES\"\\\\n' +\n 'SENTRY_CLI=$(getProperty \"cli.executable\")\\\\n' +\n 'SENTRY_COMMAND=\"../../$SENTRY_CLI upload-dsym\"\\\\n' +\n '$SENTRY_COMMAND',\n },\n );\n }\n\n private _addNewXcodeBuildPhaseForStripping(\n buildScripts: Array<PBXShellScriptBuildPhase | string>,\n proj: Project,\n ): void {\n for (const script of buildScripts) {\n if (\n typeof script === 'object' &&\n script.shellScript?.match(/SENTRY_FRAMEWORK_PATCH/)\n ) {\n return;\n }\n }\n // http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/\n proj.addBuildPhase(\n [],\n 'PBXShellScriptBuildPhase',\n 'Sentry strip unused archs from Framework',\n null,\n {\n shellPath: '/bin/sh',\n shellScript:\n '# SENTRY_FRAMEWORK_PATCH \\\\n' +\n 'echo \"warning: patching framework - set SENTRY_SKIP_FRAMEWORK_PATCH=true to skip this\"\\\\n' +\n 'if [ -n \"$SENTRY_SKIP_FRAMEWORK_PATCH\" ]; then\\\\n' +\n ' echo \"warning: skipping framework patch\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'APP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\\\\n' +\n 'find \"$APP_PATH\" -name \\'Sentry*.framework\\' -type d | while read -r FRAMEWORK\\\\n' +\n 'do\\\\n' +\n 'FRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\\\\n' +\n 'FRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\\\\n' +\n 'echo \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\\\\n' +\n 'EXTRACTED_ARCHS=()\\\\n' +\n 'for ARCH in $ARCHS\\\\n' +\n 'do\\\\n' +\n 'echo \"Checking if $FRAMEWORK_EXECUTABLE_PATH needs to be stripped.\"\\\\n' +\n '# Do not skip if \"Architectures in the fat file\".\\\\n' +\n '# Skip if Non-fat file or if file not found. \\\\n' +\n 'if lipo -info \"$FRAMEWORK_EXECUTABLE_PATH\" | grep -v \" fat \"; then\\\\n' +\n ' echo \"Strip not required, skipping the strip script.\"\\\\n' +\n ' exit 0\\\\n' +\n 'fi\\\\n' +\n 'echo \"Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME\"\\\\n' +\n 'lipo -extract \"$ARCH\" \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\"\\\\n' +\n 'EXTRACTED_ARCHS+=(\"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\")\\\\n' +\n 'done\\\\n' +\n 'echo \"Merging extracted architectures: ${ARCHS}\"\\\\n' +\n 'lipo -o \"$FRAMEWORK_EXECUTABLE_PATH-merged\" -create \"${EXTRACTED_ARCHS[@]}\"\\\\n' +\n 'rm \"${EXTRACTED_ARCHS[@]}\"\\\\n' +\n 'echo \"Replacing original executable with thinned version\"\\\\n' +\n 'rm \"$FRAMEWORK_EXECUTABLE_PATH\"\\\\n' +\n 'mv \"$FRAMEWORK_EXECUTABLE_PATH-merged\" \"$FRAMEWORK_EXECUTABLE_PATH\"\\\\n' +\n 'done',\n },\n );\n }\n\n private _addSentryProperties(properties: SentryCliProps): Promise<void> {\n let rv = Promise.resolve();\n const fn = path.join('sentry.properties');\n if (exists(fn)) {\n return rv;\n }\n rv = rv.then(() =>\n fs.writeFileSync(fn, this._sentryCli.dumpProperties(properties)),\n );\n\n return rv;\n }\n}\n"]}
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Welcome = void 0;
4
7
  const Logging_1 = require("../Helper/Logging");
5
8
  const BaseStep_1 = require("./BaseStep");
9
+ const chalk_1 = __importDefault(require("chalk"));
6
10
  class Welcome extends BaseStep_1.BaseStep {
7
11
  static _didShow = false;
8
12
  // eslint-disable-next-line @typescript-eslint/require-await
@@ -12,6 +16,7 @@ class Welcome extends BaseStep_1.BaseStep {
12
16
  }
13
17
  if (this._argv.uninstall === false) {
14
18
  (0, Logging_1.green)('Sentry Wizard will help you to configure your project');
19
+ (0, Logging_1.dim)(`This wizard sends telemetry data and crash reports to Sentry. This helps us improve the Wizard. You can turn telemetry off at any time by running sentry-wizard ${chalk_1.default.cyan('--disable-telemetry')}.`);
15
20
  (0, Logging_1.dim)('Thank you for using Sentry :)');
16
21
  }
17
22
  Welcome._didShow = true;
@@ -1 +1 @@
1
- {"version":3,"file":"Welcome.js","sourceRoot":"","sources":["../../../lib/Steps/Welcome.ts"],"names":[],"mappings":";;;AAEA,+CAA+C;AAC/C,yCAAsC;AAEtC,MAAa,OAAQ,SAAQ,mBAAQ;IAC3B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IAEhC,4DAA4D;IACrD,KAAK,CAAC,IAAI,CAAC,QAAiB;QACjC,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,OAAO,EAAE,CAAC;SACX;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE;YAClC,IAAA,eAAK,EAAC,uDAAuD,CAAC,CAAC;YAC/D,IAAA,aAAG,EAAC,+BAA+B,CAAC,CAAC;SACtC;QACD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;;AAdU,0BAAO","sourcesContent":["import type { Answers } from 'inquirer';\n\nimport { dim, green } from '../Helper/Logging';\nimport { BaseStep } from './BaseStep';\n\nexport class Welcome extends BaseStep {\n private static _didShow = false;\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async emit(_answers: Answers): Promise<Answers> {\n if (Welcome._didShow) {\n return {};\n }\n if (this._argv.uninstall === false) {\n green('Sentry Wizard will help you to configure your project');\n dim('Thank you for using Sentry :)');\n }\n Welcome._didShow = true;\n return {};\n }\n}\n"]}
1
+ {"version":3,"file":"Welcome.js","sourceRoot":"","sources":["../../../lib/Steps/Welcome.ts"],"names":[],"mappings":";;;;;;AAEA,+CAA+C;AAC/C,yCAAsC;AACtC,kDAA0B;AAE1B,MAAa,OAAQ,SAAQ,mBAAQ;IAC3B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IAEhC,4DAA4D;IACrD,KAAK,CAAC,IAAI,CAAC,QAAiB;QACjC,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,OAAO,EAAE,CAAC;SACX;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE;YAClC,IAAA,eAAK,EAAC,uDAAuD,CAAC,CAAC;YAC/D,IAAA,aAAG,EACD,mKAAmK,eAAK,CAAC,IAAI,CAC3K,qBAAqB,CACtB,GAAG,CACL,CAAC;YACF,IAAA,aAAG,EAAC,+BAA+B,CAAC,CAAC;SACtC;QACD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;;AAnBU,0BAAO","sourcesContent":["import type { Answers } from 'inquirer';\n\nimport { dim, green } from '../Helper/Logging';\nimport { BaseStep } from './BaseStep';\nimport chalk from 'chalk';\n\nexport class Welcome extends BaseStep {\n private static _didShow = false;\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async emit(_answers: Answers): Promise<Answers> {\n if (Welcome._didShow) {\n return {};\n }\n if (this._argv.uninstall === false) {\n green('Sentry Wizard will help you to configure your project');\n dim(\n `This wizard sends telemetry data and crash reports to Sentry. This helps us improve the Wizard. You can turn telemetry off at any time by running sentry-wizard ${chalk.cyan(\n '--disable-telemetry',\n )}.`,\n );\n dim('Thank you for using Sentry :)');\n }\n Welcome._didShow = true;\n return {};\n }\n}\n"]}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
3
4
  const Env_1 = require("../Helper/Env");
4
- describe('read-env', () => {
5
- test('transform', () => {
5
+ (0, vitest_1.describe)('read-env', () => {
6
+ (0, vitest_1.test)('transform', () => {
6
7
  process.env.SENTRY_WIZARD_DEBUG = 'true';
7
8
  process.env.SENTRY_WIZARD_UNINSTALL = 'false';
8
9
  process.env.SENTRY_WIZARD_SKIP_CONNECT = 'true';
@@ -10,7 +11,7 @@ describe('read-env', () => {
10
11
  process.env.SENTRY_WIZARD_INTEGRATION = 'reactNative,electron';
11
12
  process.env.SENTRY_WIZARD_PLATFORM = 'ios,android';
12
13
  process.env.SENTRY_WIZARD_URL = 'https://sentry.io';
13
- expect((0, Env_1.readEnvironment)()).toEqual({
14
+ (0, vitest_1.expect)((0, Env_1.readEnvironment)()).toEqual({
14
15
  debug: true,
15
16
  integration: 'reactNative,electron',
16
17
  platform: 'ios,android',
@@ -1 +1 @@
1
- {"version":3,"file":"Env.js","sourceRoot":"","sources":["../../../lib/__tests__/Env.ts"],"names":[],"mappings":";;AAAA,uCAAgD;AAEhD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,OAAO,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,MAAM,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,sBAAsB,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,aAAa,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,mBAAmB,CAAC;QAEpD,MAAM,CAAC,IAAA,qBAAe,GAAE,CAAC,CAAC,OAAO,CAAC;YAChC,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,KAAK;YAChB,GAAG,EAAE,mBAAmB;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { readEnvironment } from '../Helper/Env';\n\ndescribe('read-env', () => {\n test('transform', () => {\n process.env.SENTRY_WIZARD_DEBUG = 'true';\n process.env.SENTRY_WIZARD_UNINSTALL = 'false';\n process.env.SENTRY_WIZARD_SKIP_CONNECT = 'true';\n process.env.SENTRY_WIZARD_QUIET = 'true';\n process.env.SENTRY_WIZARD_INTEGRATION = 'reactNative,electron';\n process.env.SENTRY_WIZARD_PLATFORM = 'ios,android';\n process.env.SENTRY_WIZARD_URL = 'https://sentry.io';\n\n expect(readEnvironment()).toEqual({\n debug: true,\n integration: 'reactNative,electron',\n platform: 'ios,android',\n quiet: true,\n skipConnect: true,\n uninstall: false,\n url: 'https://sentry.io',\n });\n });\n});\n"]}
1
+ {"version":3,"file":"Env.js","sourceRoot":"","sources":["../../../lib/__tests__/Env.ts"],"names":[],"mappings":";;AAAA,mCAAgD;AAChD,uCAAgD;AAEhD,IAAA,iBAAQ,EAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAA,aAAI,EAAC,WAAW,EAAE,GAAG,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,OAAO,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,MAAM,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,sBAAsB,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,aAAa,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,mBAAmB,CAAC;QAEpD,IAAA,eAAM,EAAC,IAAA,qBAAe,GAAE,CAAC,CAAC,OAAO,CAAC;YAChC,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,KAAK;YAChB,GAAG,EAAE,mBAAmB;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, test } from 'vitest';\nimport { readEnvironment } from '../Helper/Env';\n\ndescribe('read-env', () => {\n test('transform', () => {\n process.env.SENTRY_WIZARD_DEBUG = 'true';\n process.env.SENTRY_WIZARD_UNINSTALL = 'false';\n process.env.SENTRY_WIZARD_SKIP_CONNECT = 'true';\n process.env.SENTRY_WIZARD_QUIET = 'true';\n process.env.SENTRY_WIZARD_INTEGRATION = 'reactNative,electron';\n process.env.SENTRY_WIZARD_PLATFORM = 'ios,android';\n process.env.SENTRY_WIZARD_URL = 'https://sentry.io';\n\n expect(readEnvironment()).toEqual({\n debug: true,\n integration: 'reactNative,electron',\n platform: 'ios,android',\n quiet: true,\n skipConnect: true,\n uninstall: false,\n url: 'https://sentry.io',\n });\n });\n});\n"]}
@@ -1,49 +1,19 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
6
  exports.runAppleWizard = void 0;
30
- /* eslint-disable max-lines */
31
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
32
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
33
- /* eslint-disable @typescript-eslint/no-unsafe-call */
34
- /* eslint-disable @typescript-eslint/no-unused-vars */
35
7
  // @ts-expect-error - clack is ESM and TS complains about that. It works though
36
8
  const prompts_1 = __importDefault(require("@clack/prompts"));
37
- const Sentry = __importStar(require("@sentry/node"));
38
- const chalk_1 = __importDefault(require("chalk"));
39
9
  const telemetry_1 = require("../telemetry");
40
- const SentryUtils = __importStar(require("../utils/sentrycli-utils"));
41
- const cocoapod = __importStar(require("./cocoapod"));
42
- const codeTools = __importStar(require("./code-tools"));
43
- /* eslint-enable @typescript-eslint/no-unused-vars */
44
10
  const clack_1 = require("../utils/clack");
45
11
  const check_installed_cli_1 = require("./check-installed-cli");
46
12
  const configure_fastlane_1 = require("./configure-fastlane");
13
+ const configure_package_manager_1 = require("./configure-package-manager");
14
+ const configure_sentry_cli_1 = require("./configure-sentry-cli");
15
+ const configure_xcode_project_1 = require("./configure-xcode-project");
16
+ const inject_code_snippet_1 = require("./inject-code-snippet");
47
17
  const lookup_xcode_project_1 = require("./lookup-xcode-project");
48
18
  async function runAppleWizard(options) {
49
19
  return (0, telemetry_1.withTelemetry)({
@@ -76,38 +46,28 @@ async function runAppleWizardWithTelementry(options) {
76
46
  });
77
47
  // Step - Sentry Project and API Key
78
48
  const { selectedProject, authToken } = await (0, clack_1.getOrAskForProjectData)(options, 'apple-ios');
79
- SentryUtils.createSentryCLIRC(projectDir, { auth_token: authToken });
80
- prompts_1.default.log.info(`Created a ${chalk_1.default.cyan('.sentryclirc')} file in your project directory to provide an auth token for Sentry CLI.
81
-
82
- It was also added to your ${chalk_1.default.cyan('.gitignore')} file.
83
- Set the ${chalk_1.default.cyan('SENTRY_AUTH_TOKEN')} environment variable in your CI environment. See https://docs.sentry.io/cli/configuration/#auth-token for more information.`);
84
- let hasCocoa = cocoapod.usesCocoaPod(projectDir);
85
- Sentry.setTag('cocoapod-exists', hasCocoa);
86
- if (hasCocoa) {
87
- const pm = (await (0, telemetry_1.traceStep)('Choose a package manager', () => (0, clack_1.askForItemSelection)(['Swift Package Manager', 'CocoaPods'], 'Which package manager would you like to use to add Sentry?'))).value;
88
- hasCocoa = pm === 'CocoaPods';
89
- if (hasCocoa) {
90
- const podAdded = await (0, telemetry_1.traceStep)('Add CocoaPods reference', () => cocoapod.addCocoaPods(projectDir));
91
- Sentry.setTag('cocoapod-added', podAdded);
92
- if (!podAdded) {
93
- prompts_1.default.log.warn("Could not add Sentry pod to your Podfile. You'll have to add it manually.\nPlease follow the instructions at https://docs.sentry.io/platforms/apple/guides/ios/#install");
94
- }
95
- }
96
- }
97
- Sentry.setTag('package-manager', hasCocoa ? 'cocoapods' : 'SPM');
98
- (0, telemetry_1.traceStep)('Update Xcode project', () => {
99
- xcProject.updateXcodeProject(selectedProject, target, !hasCocoa, true);
49
+ // Step - Sentry CLI Configuration Setup
50
+ (0, configure_sentry_cli_1.configureSentryCLI)({
51
+ projectDir,
52
+ authToken: authToken,
53
+ });
54
+ // Step - Set up Package Manager
55
+ const { shouldUseSPM } = await (0, configure_package_manager_1.configurePackageManager)({
56
+ projectDir,
57
+ });
58
+ // Step - Configure Xcode Project
59
+ (0, configure_xcode_project_1.configureXcodeProject)({
60
+ xcProject,
61
+ project: selectedProject,
62
+ target,
63
+ shouldUseSPM,
100
64
  });
101
- const codeAdded = (0, telemetry_1.traceStep)('Add code snippet', () => {
102
- const files = xcProject.filesForTarget(target);
103
- if (files === undefined || files.length == 0)
104
- return false;
105
- return codeTools.addCodeSnippetToProject(projectDir, files, selectedProject.keys[0].dsn.public);
65
+ // Step - Add Code Snippet
66
+ (0, inject_code_snippet_1.injectCodeSnippet)({
67
+ project: xcProject,
68
+ target,
69
+ dsn: selectedProject.keys[0].dsn.public,
106
70
  });
107
- Sentry.setTag('Snippet-Added', codeAdded);
108
- if (!codeAdded) {
109
- prompts_1.default.log.warn('Added the Sentry dependency to your project but could not add the Sentry code snippet. Please add the code snipped manually by following the docs: https://docs.sentry.io/platforms/apple/guides/ios/#configure');
110
- }
111
71
  // Step - Fastlane Configuration
112
72
  await (0, configure_fastlane_1.configureFastlane)({
113
73
  projectDir,
@@ -1 +1 @@
1
- {"version":3,"file":"apple-wizard.js","sourceRoot":"","sources":["../../../src/apple/apple-wizard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8BAA8B;AAC9B,+DAA+D;AAC/D,4DAA4D;AAC5D,sDAAsD;AACtD,sDAAsD;AACtD,+EAA+E;AAC/E,6DAAmC;AACnC,qDAAuC;AACvC,kDAA0B;AAC1B,4CAAwD;AACxD,sEAAwD;AACxD,qDAAuC;AACvC,wDAA0C;AAE1C,qDAAqD;AAErD,0CAKwB;AACxB,+DAA0D;AAC1D,6DAAyD;AACzD,iEAA4D;AAGrD,KAAK,UAAU,cAAc,CAClC,OAA2B;IAE3B,OAAO,IAAA,yBAAa,EAClB;QACE,OAAO,EAAE,OAAO,CAAC,gBAAgB;QACjC,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,OAAO;KACvB,EACD,GAAG,EAAE,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAC5C,CAAC;AACJ,CAAC;AAXD,wCAWC;AAED,KAAK,UAAU,4BAA4B,CACzC,OAA2B;IAE3B,+BAA+B;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvD,yBAAyB;IACzB,IAAA,oBAAY,EAAC;QACX,UAAU,EAAE,qBAAqB;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,IAAA,yCAAiC,EAAC;QACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,GAAG,EAAE,UAAU;KAChB,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,IAAA,uCAAiB,GAAE,CAAC;IAE1B,8BAA8B;IAC9B,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,yCAAkB,EAAC;QACrD,UAAU;KACX,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,8BAAsB,EACjE,OAAO,EACP,WAAW,CACZ,CAAC;IACF,WAAW,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,aAAa,eAAK,CAAC,IAAI,CACrB,cAAc,CACf;;4BAEuB,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC;UAC1C,eAAK,CAAC,IAAI,CACd,mBAAmB,CACpB,8HAA8H,CAChI,CAAC;IAEF,IAAI,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAE3C,IAAI,QAAQ,EAAE;QACZ,MAAM,EAAE,GAAG,CACT,MAAM,IAAA,qBAAS,EAAC,0BAA0B,EAAE,GAAG,EAAE,CAC/C,IAAA,2BAAmB,EACjB,CAAC,uBAAuB,EAAE,WAAW,CAAC,EACtC,4DAA4D,CAC7D,CACF,CACF,CAAC,KAAK,CAAC;QAER,QAAQ,GAAG,EAAE,KAAK,WAAW,CAAC;QAC9B,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAS,EAAC,yBAAyB,EAAE,GAAG,EAAE,CAC/D,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAClC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE;gBACb,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yKAAyK,CAC1K,CAAC;aACH;SACF;KACF;IAED,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjE,IAAA,qBAAS,EAAC,sBAAsB,EAAE,GAAG,EAAE;QACrC,SAAS,CAAC,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,kBAAkB,EAAE,GAAG,EAAE;QACnD,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3D,OAAO,SAAS,CAAC,uBAAuB,CACtC,UAAU,EACV,KAAK,EACL,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAE1C,IAAI,CAAC,SAAS,EAAE;QACd,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,iNAAiN,CAClN,CAAC;KACH;IAED,gCAAgC;IAChC,MAAM,IAAA,sCAAiB,EAAC;QACtB,UAAU;QACV,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;QAC1C,WAAW,EAAE,eAAe,CAAC,IAAI;KAClC,CAAC,CAAC;IAEH,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,gKAAgK,CACjK,CAAC;AACJ,CAAC","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/* eslint-disable @typescript-eslint/no-unused-vars */\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\nimport { traceStep, withTelemetry } from '../telemetry';\nimport * as SentryUtils from '../utils/sentrycli-utils';\nimport * as cocoapod from './cocoapod';\nimport * as codeTools from './code-tools';\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\nimport {\n askForItemSelection,\n confirmContinueIfNoOrDirtyGitRepo,\n getOrAskForProjectData,\n printWelcome,\n} from '../utils/clack';\nimport { checkInstalledCLI } from './check-installed-cli';\nimport { configureFastlane } from './configure-fastlane';\nimport { lookupXcodeProject } from './lookup-xcode-project';\nimport { AppleWizardOptions } from './options';\n\nexport async function runAppleWizard(\n options: AppleWizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'ios',\n wizardOptions: options,\n },\n () => runAppleWizardWithTelementry(options),\n );\n}\n\nasync function runAppleWizardWithTelementry(\n options: AppleWizardOptions,\n): Promise<void> {\n // Define options with defaults\n const projectDir = options.projectDir ?? process.cwd();\n\n // Step - Welcome Message\n printWelcome({\n wizardName: 'Sentry Apple Wizard',\n promoCode: options.promoCode,\n });\n\n // Step - Git Status Check\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: projectDir,\n });\n\n // Step - Sentry CLI Check\n await checkInstalledCLI();\n\n // Step - Xcode Project Lookup\n // This step should be run before the Sentry Project and API Key step\n // because it can abort the wizard if no Xcode project is found.\n const { xcProject, target } = await lookupXcodeProject({\n projectDir,\n });\n\n // Step - Sentry Project and API Key\n const { selectedProject, authToken } = await getOrAskForProjectData(\n options,\n 'apple-ios',\n );\n SentryUtils.createSentryCLIRC(projectDir, { auth_token: authToken });\n clack.log.info(\n `Created a ${chalk.cyan(\n '.sentryclirc',\n )} file in your project directory to provide an auth token for Sentry CLI.\n \nIt was also added to your ${chalk.cyan('.gitignore')} file.\nSet the ${chalk.cyan(\n 'SENTRY_AUTH_TOKEN',\n )} environment variable in your CI environment. See https://docs.sentry.io/cli/configuration/#auth-token for more information.`,\n );\n\n let hasCocoa = cocoapod.usesCocoaPod(projectDir);\n Sentry.setTag('cocoapod-exists', hasCocoa);\n\n if (hasCocoa) {\n const pm = (\n await traceStep('Choose a package manager', () =>\n askForItemSelection(\n ['Swift Package Manager', 'CocoaPods'],\n 'Which package manager would you like to use to add Sentry?',\n ),\n )\n ).value;\n\n hasCocoa = pm === 'CocoaPods';\n if (hasCocoa) {\n const podAdded = await traceStep('Add CocoaPods reference', () =>\n cocoapod.addCocoaPods(projectDir),\n );\n Sentry.setTag('cocoapod-added', podAdded);\n if (!podAdded) {\n clack.log.warn(\n \"Could not add Sentry pod to your Podfile. You'll have to add it manually.\\nPlease follow the instructions at https://docs.sentry.io/platforms/apple/guides/ios/#install\",\n );\n }\n }\n }\n\n Sentry.setTag('package-manager', hasCocoa ? 'cocoapods' : 'SPM');\n traceStep('Update Xcode project', () => {\n xcProject.updateXcodeProject(selectedProject, target, !hasCocoa, true);\n });\n\n const codeAdded = traceStep('Add code snippet', () => {\n const files = xcProject.filesForTarget(target);\n if (files === undefined || files.length == 0) return false;\n\n return codeTools.addCodeSnippetToProject(\n projectDir,\n files,\n selectedProject.keys[0].dsn.public,\n );\n });\n\n Sentry.setTag('Snippet-Added', codeAdded);\n\n if (!codeAdded) {\n clack.log.warn(\n 'Added the Sentry dependency to your project but could not add the Sentry code snippet. Please add the code snipped manually by following the docs: https://docs.sentry.io/platforms/apple/guides/ios/#configure',\n );\n }\n\n // Step - Fastlane Configuration\n await configureFastlane({\n projectDir,\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n });\n\n clack.log.success(\n 'Sentry was successfully added to your project! Run your project to send your first event to Sentry. Go to Sentry.io to see whether everything is working fine.',\n );\n}\n"]}
1
+ {"version":3,"file":"apple-wizard.js","sourceRoot":"","sources":["../../../src/apple/apple-wizard.ts"],"names":[],"mappings":";;;;;;AAAA,+EAA+E;AAC/E,6DAAmC;AAEnC,4CAA6C;AAC7C,0CAIwB;AACxB,+DAA0D;AAC1D,6DAAyD;AACzD,2EAAsE;AACtE,iEAA4D;AAC5D,uEAAkE;AAClE,+DAA0D;AAC1D,iEAA4D;AAGrD,KAAK,UAAU,cAAc,CAClC,OAA2B;IAE3B,OAAO,IAAA,yBAAa,EAClB;QACE,OAAO,EAAE,OAAO,CAAC,gBAAgB;QACjC,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,OAAO;KACvB,EACD,GAAG,EAAE,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAC5C,CAAC;AACJ,CAAC;AAXD,wCAWC;AAED,KAAK,UAAU,4BAA4B,CACzC,OAA2B;IAE3B,+BAA+B;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvD,yBAAyB;IACzB,IAAA,oBAAY,EAAC;QACX,UAAU,EAAE,qBAAqB;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,IAAA,yCAAiC,EAAC;QACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,GAAG,EAAE,UAAU;KAChB,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,IAAA,uCAAiB,GAAE,CAAC;IAE1B,8BAA8B;IAC9B,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,yCAAkB,EAAC;QACrD,UAAU;KACX,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,8BAAsB,EACjE,OAAO,EACP,WAAW,CACZ,CAAC;IAEF,wCAAwC;IACxC,IAAA,yCAAkB,EAAC;QACjB,UAAU;QACV,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,mDAAuB,EAAC;QACrD,UAAU;KACX,CAAC,CAAC;IAEH,iCAAiC;IACjC,IAAA,+CAAqB,EAAC;QACpB,SAAS;QACT,OAAO,EAAE,eAAe;QACxB,MAAM;QACN,YAAY;KACb,CAAC,CAAC;IAEH,0BAA0B;IAC1B,IAAA,uCAAiB,EAAC;QAChB,OAAO,EAAE,SAAS;QAClB,MAAM;QACN,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM;KACxC,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,IAAA,sCAAiB,EAAC;QACtB,UAAU;QACV,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI;QAC1C,WAAW,EAAE,eAAe,CAAC,IAAI;KAClC,CAAC,CAAC;IAEH,iBAAK,CAAC,GAAG,CAAC,OAAO,CACf,gKAAgK,CACjK,CAAC;AACJ,CAAC","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\n\nimport { withTelemetry } from '../telemetry';\nimport {\n confirmContinueIfNoOrDirtyGitRepo,\n getOrAskForProjectData,\n printWelcome,\n} from '../utils/clack';\nimport { checkInstalledCLI } from './check-installed-cli';\nimport { configureFastlane } from './configure-fastlane';\nimport { configurePackageManager } from './configure-package-manager';\nimport { configureSentryCLI } from './configure-sentry-cli';\nimport { configureXcodeProject } from './configure-xcode-project';\nimport { injectCodeSnippet } from './inject-code-snippet';\nimport { lookupXcodeProject } from './lookup-xcode-project';\nimport { AppleWizardOptions } from './options';\n\nexport async function runAppleWizard(\n options: AppleWizardOptions,\n): Promise<void> {\n return withTelemetry(\n {\n enabled: options.telemetryEnabled,\n integration: 'ios',\n wizardOptions: options,\n },\n () => runAppleWizardWithTelementry(options),\n );\n}\n\nasync function runAppleWizardWithTelementry(\n options: AppleWizardOptions,\n): Promise<void> {\n // Define options with defaults\n const projectDir = options.projectDir ?? process.cwd();\n\n // Step - Welcome Message\n printWelcome({\n wizardName: 'Sentry Apple Wizard',\n promoCode: options.promoCode,\n });\n\n // Step - Git Status Check\n await confirmContinueIfNoOrDirtyGitRepo({\n ignoreGitChanges: options.ignoreGitChanges,\n cwd: projectDir,\n });\n\n // Step - Sentry CLI Check\n await checkInstalledCLI();\n\n // Step - Xcode Project Lookup\n // This step should be run before the Sentry Project and API Key step\n // because it can abort the wizard if no Xcode project is found.\n const { xcProject, target } = await lookupXcodeProject({\n projectDir,\n });\n\n // Step - Sentry Project and API Key\n const { selectedProject, authToken } = await getOrAskForProjectData(\n options,\n 'apple-ios',\n );\n\n // Step - Sentry CLI Configuration Setup\n configureSentryCLI({\n projectDir,\n authToken: authToken,\n });\n\n // Step - Set up Package Manager\n const { shouldUseSPM } = await configurePackageManager({\n projectDir,\n });\n\n // Step - Configure Xcode Project\n configureXcodeProject({\n xcProject,\n project: selectedProject,\n target,\n shouldUseSPM,\n });\n\n // Step - Add Code Snippet\n injectCodeSnippet({\n project: xcProject,\n target,\n dsn: selectedProject.keys[0].dsn.public,\n });\n\n // Step - Fastlane Configuration\n await configureFastlane({\n projectDir,\n orgSlug: selectedProject.organization.slug,\n projectSlug: selectedProject.slug,\n });\n\n clack.log.success(\n 'Sentry was successfully added to your project! Run your project to send your first event to Sentry. Go to Sentry.io to see whether everything is working fine.',\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function configurePackageManager({ projectDir, }: {
2
+ projectDir: string;
3
+ }): Promise<{
4
+ shouldUseSPM: boolean;
5
+ }>;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.configurePackageManager = void 0;
30
+ // @ts-expect-error - clack is ESM and TS complains about that. It works though
31
+ const prompts_1 = __importDefault(require("@clack/prompts"));
32
+ const Sentry = __importStar(require("@sentry/node"));
33
+ const chalk_1 = __importDefault(require("chalk"));
34
+ const telemetry_1 = require("../telemetry");
35
+ const clack_1 = require("../utils/clack");
36
+ const debug_1 = require("../utils/debug");
37
+ const cocoapod = __importStar(require("./cocoapod"));
38
+ async function configurePackageManager({ projectDir, }) {
39
+ (0, debug_1.debug)(`Checking if CocoaPods is installed at path: ${chalk_1.default.cyan(projectDir)}`);
40
+ // Xcode ships with the Swift Package Manager and potentially using CocoaPods.
41
+ // We need to check if the user has CocoaPods set up.
42
+ let shouldUseSPM = true;
43
+ const isCocoaPodsAvailable = cocoapod.usesCocoaPod(projectDir);
44
+ Sentry.setTag('cocoapod-exists', isCocoaPodsAvailable);
45
+ (0, debug_1.debug)(`CocoaPods is ${isCocoaPodsAvailable ? 'installed' : 'not installed'}`);
46
+ if (isCocoaPodsAvailable) {
47
+ // If the user has CocoaPods installed, we need to ask them which package manager they want to use.
48
+ // Otherwise, we can just use the Swift Package Manager.
49
+ (0, debug_1.debug)('Asking user to choose a package manager');
50
+ const pm = (await (0, telemetry_1.traceStep)('Choose a package manager', () => (0, clack_1.askForItemSelection)(['Swift Package Manager', 'CocoaPods'], 'Which package manager would you like to use to add Sentry?'))).value;
51
+ (0, debug_1.debug)(`User chose package manager: ${chalk_1.default.cyan(pm)}`);
52
+ shouldUseSPM = pm === 'Swift Package Manager';
53
+ if (!shouldUseSPM) {
54
+ (0, debug_1.debug)('Adding CocoaPods reference');
55
+ const podAdded = await (0, telemetry_1.traceStep)('Add CocoaPods reference', () => cocoapod.addCocoaPods(projectDir));
56
+ Sentry.setTag('cocoapod-added', podAdded);
57
+ (0, debug_1.debug)(`CocoaPods reference added: ${chalk_1.default.cyan(podAdded.toString())}`);
58
+ if (!podAdded) {
59
+ prompts_1.default.log.warn("Could not add Sentry pod to your Podfile. You'll have to add it manually.\nPlease follow the instructions at https://docs.sentry.io/platforms/apple/guides/ios/#install");
60
+ }
61
+ }
62
+ }
63
+ (0, debug_1.debug)(`Should use SPM: ${chalk_1.default.cyan(shouldUseSPM.toString())}`);
64
+ Sentry.setTag('package-manager', shouldUseSPM ? 'SPM' : 'cocoapods');
65
+ return { shouldUseSPM };
66
+ }
67
+ exports.configurePackageManager = configurePackageManager;
68
+ //# sourceMappingURL=configure-package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-package-manager.js","sourceRoot":"","sources":["../../../src/apple/configure-package-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAA+E;AAC/E,6DAAmC;AACnC,qDAAuC;AACvC,kDAA0B;AAE1B,4CAAyC;AACzC,0CAAqD;AACrD,0CAAuC;AACvC,qDAAuC;AAEhC,KAAK,UAAU,uBAAuB,CAAC,EAC5C,UAAU,GAGX;IACC,IAAA,aAAK,EACH,+CAA+C,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACxE,CAAC;IAEF,8EAA8E;IAC9E,qDAAqD;IACrD,IAAI,YAAY,GAAG,IAAI,CAAC;IAExB,MAAM,oBAAoB,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IACvD,IAAA,aAAK,EAAC,gBAAgB,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAE9E,IAAI,oBAAoB,EAAE;QACxB,mGAAmG;QACnG,wDAAwD;QACxD,IAAA,aAAK,EAAC,yCAAyC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,CACT,MAAM,IAAA,qBAAS,EAAC,0BAA0B,EAAE,GAAG,EAAE,CAC/C,IAAA,2BAAmB,EACjB,CAAC,uBAAuB,EAAE,WAAW,CAAC,EACtC,4DAA4D,CAC7D,CACF,CACF,CAAC,KAAK,CAAC;QACR,IAAA,aAAK,EAAC,+BAA+B,eAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEvD,YAAY,GAAG,EAAE,KAAK,uBAAuB,CAAC;QAE9C,IAAI,CAAC,YAAY,EAAE;YACjB,IAAA,aAAK,EAAC,4BAA4B,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,IAAA,qBAAS,EAAC,yBAAyB,EAAE,GAAG,EAAE,CAC/D,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAClC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAA,aAAK,EAAC,8BAA8B,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAEvE,IAAI,CAAC,QAAQ,EAAE;gBACb,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yKAAyK,CAC1K,CAAC;aACH;SACF;KACF;IACD,IAAA,aAAK,EAAC,mBAAmB,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAErE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC;AApDD,0DAoDC","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\n\nimport { traceStep } from '../telemetry';\nimport { askForItemSelection } from '../utils/clack';\nimport { debug } from '../utils/debug';\nimport * as cocoapod from './cocoapod';\n\nexport async function configurePackageManager({\n projectDir,\n}: {\n projectDir: string;\n}) {\n debug(\n `Checking if CocoaPods is installed at path: ${chalk.cyan(projectDir)}`,\n );\n\n // Xcode ships with the Swift Package Manager and potentially using CocoaPods.\n // We need to check if the user has CocoaPods set up.\n let shouldUseSPM = true;\n\n const isCocoaPodsAvailable = cocoapod.usesCocoaPod(projectDir);\n Sentry.setTag('cocoapod-exists', isCocoaPodsAvailable);\n debug(`CocoaPods is ${isCocoaPodsAvailable ? 'installed' : 'not installed'}`);\n\n if (isCocoaPodsAvailable) {\n // If the user has CocoaPods installed, we need to ask them which package manager they want to use.\n // Otherwise, we can just use the Swift Package Manager.\n debug('Asking user to choose a package manager');\n const pm = (\n await traceStep('Choose a package manager', () =>\n askForItemSelection(\n ['Swift Package Manager', 'CocoaPods'],\n 'Which package manager would you like to use to add Sentry?',\n ),\n )\n ).value;\n debug(`User chose package manager: ${chalk.cyan(pm)}`);\n\n shouldUseSPM = pm === 'Swift Package Manager';\n\n if (!shouldUseSPM) {\n debug('Adding CocoaPods reference');\n const podAdded = await traceStep('Add CocoaPods reference', () =>\n cocoapod.addCocoaPods(projectDir),\n );\n Sentry.setTag('cocoapod-added', podAdded);\n debug(`CocoaPods reference added: ${chalk.cyan(podAdded.toString())}`);\n\n if (!podAdded) {\n clack.log.warn(\n \"Could not add Sentry pod to your Podfile. You'll have to add it manually.\\nPlease follow the instructions at https://docs.sentry.io/platforms/apple/guides/ios/#install\",\n );\n }\n }\n }\n debug(`Should use SPM: ${chalk.cyan(shouldUseSPM.toString())}`);\n Sentry.setTag('package-manager', shouldUseSPM ? 'SPM' : 'cocoapods');\n\n return { shouldUseSPM };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export declare function configureSentryCLI({ projectDir, authToken, }: {
2
+ projectDir: string;
3
+ authToken: string;
4
+ }): void;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.configureSentryCLI = void 0;
30
+ // @ts-expect-error - clack is ESM and TS complains about that. It works though
31
+ const prompts_1 = __importDefault(require("@clack/prompts"));
32
+ const Sentry = __importStar(require("@sentry/node"));
33
+ const chalk_1 = __importDefault(require("chalk"));
34
+ const debug_1 = require("../utils/debug");
35
+ const SentryUtils = __importStar(require("../utils/sentrycli-utils"));
36
+ function configureSentryCLI({ projectDir, authToken, }) {
37
+ (0, debug_1.debug)(`Creating sentryclirc file at path: ${chalk_1.default.cyan(projectDir)}`);
38
+ SentryUtils.createSentryCLIRC(projectDir, { auth_token: authToken });
39
+ prompts_1.default.log.info(`Created a ${chalk_1.default.cyan('.sentryclirc')} file in your project directory to provide an auth token for Sentry CLI.
40
+
41
+ It was also added to your ${chalk_1.default.cyan('.gitignore')} file.
42
+ Set the ${chalk_1.default.cyan('SENTRY_AUTH_TOKEN')} environment variable in your CI environment. See https://docs.sentry.io/cli/configuration/#auth-token for more information.`);
43
+ Sentry.setTag('sentry-cli-configured', true);
44
+ (0, debug_1.debug)(`Sentry CLI configured: ${chalk_1.default.cyan(true.toString())}`);
45
+ }
46
+ exports.configureSentryCLI = configureSentryCLI;
47
+ //# sourceMappingURL=configure-sentry-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-sentry-cli.js","sourceRoot":"","sources":["../../../src/apple/configure-sentry-cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAA+E;AAC/E,6DAAmC;AACnC,qDAAuC;AACvC,kDAA0B;AAE1B,0CAAuC;AACvC,sEAAwD;AAExD,SAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,SAAS,GAIV;IACC,IAAA,aAAK,EAAC,sCAAsC,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtE,WAAW,CAAC,iBAAiB,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,iBAAK,CAAC,GAAG,CAAC,IAAI,CACZ,aAAa,eAAK,CAAC,IAAI,CACrB,cAAc,CACf;;4BAEuB,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC;UAC1C,eAAK,CAAC,IAAI,CACd,mBAAmB,CACpB,8HAA8H,CAChI,CAAC;IACF,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAA,aAAK,EAAC,0BAA0B,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AArBD,gDAqBC","sourcesContent":["// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport clack from '@clack/prompts';\nimport * as Sentry from '@sentry/node';\nimport chalk from 'chalk';\n\nimport { debug } from '../utils/debug';\nimport * as SentryUtils from '../utils/sentrycli-utils';\n\nexport function configureSentryCLI({\n projectDir,\n authToken,\n}: {\n projectDir: string;\n authToken: string;\n}) {\n debug(`Creating sentryclirc file at path: ${chalk.cyan(projectDir)}`);\n SentryUtils.createSentryCLIRC(projectDir, { auth_token: authToken });\n clack.log.info(\n `Created a ${chalk.cyan(\n '.sentryclirc',\n )} file in your project directory to provide an auth token for Sentry CLI.\n \nIt was also added to your ${chalk.cyan('.gitignore')} file.\nSet the ${chalk.cyan(\n 'SENTRY_AUTH_TOKEN',\n )} environment variable in your CI environment. See https://docs.sentry.io/cli/configuration/#auth-token for more information.`,\n );\n Sentry.setTag('sentry-cli-configured', true);\n debug(`Sentry CLI configured: ${chalk.cyan(true.toString())}`);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { SentryProjectData } from '../utils/types';
2
+ import { XcodeProject } from './xcode-manager';
3
+ export declare function configureXcodeProject({ xcProject, project, target, shouldUseSPM, }: {
4
+ xcProject: XcodeProject;
5
+ project: SentryProjectData;
6
+ target: string;
7
+ shouldUseSPM: boolean;
8
+ }): void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configureXcodeProject = void 0;
4
+ const telemetry_1 = require("../telemetry");
5
+ function configureXcodeProject({ xcProject, project, target, shouldUseSPM, }) {
6
+ (0, telemetry_1.traceStep)('Update Xcode project', () => {
7
+ xcProject.updateXcodeProject(project, target, shouldUseSPM, true);
8
+ });
9
+ }
10
+ exports.configureXcodeProject = configureXcodeProject;
11
+ //# sourceMappingURL=configure-xcode-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-xcode-project.js","sourceRoot":"","sources":["../../../src/apple/configure-xcode-project.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAIzC,SAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,OAAO,EACP,MAAM,EACN,YAAY,GAMb;IACC,IAAA,qBAAS,EAAC,sBAAsB,EAAE,GAAG,EAAE;QACrC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;AAdD,sDAcC","sourcesContent":["import { traceStep } from '../telemetry';\nimport { SentryProjectData } from '../utils/types';\nimport { XcodeProject } from './xcode-manager';\n\nexport function configureXcodeProject({\n xcProject,\n project,\n target,\n shouldUseSPM,\n}: {\n xcProject: XcodeProject;\n project: SentryProjectData;\n target: string;\n shouldUseSPM: boolean;\n}) {\n traceStep('Update Xcode project', () => {\n xcProject.updateXcodeProject(project, target, shouldUseSPM, true);\n });\n}\n"]}