@sentry/wizard 3.35.0 → 3.37.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 (51) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/e2e-tests/tests/nuxt-3.test.js +45 -25
  3. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  4. package/dist/e2e-tests/tests/nuxt-4.test.js +45 -25
  5. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  6. package/dist/e2e-tests/utils/index.js.map +1 -1
  7. package/dist/package.json +1 -1
  8. package/dist/src/android/templates.js +1 -1
  9. package/dist/src/android/templates.js.map +1 -1
  10. package/dist/src/nuxt/nuxt-wizard.js +36 -23
  11. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  12. package/dist/src/nuxt/sdk-setup.d.ts +8 -1
  13. package/dist/src/nuxt/sdk-setup.js +149 -35
  14. package/dist/src/nuxt/sdk-setup.js.map +1 -1
  15. package/dist/src/nuxt/templates.d.ts +1 -1
  16. package/dist/src/nuxt/templates.js +5 -3
  17. package/dist/src/nuxt/templates.js.map +1 -1
  18. package/dist/src/nuxt/types.d.ts +2 -0
  19. package/dist/src/nuxt/types.js +10 -0
  20. package/dist/src/nuxt/types.js.map +1 -0
  21. package/dist/src/nuxt/utils.js +42 -6
  22. package/dist/src/nuxt/utils.js.map +1 -1
  23. package/dist/src/utils/clack-utils.d.ts +9 -1
  24. package/dist/src/utils/clack-utils.js +81 -23
  25. package/dist/src/utils/clack-utils.js.map +1 -1
  26. package/dist/src/utils/package-json.d.ts +5 -0
  27. package/dist/src/utils/package-json.js.map +1 -1
  28. package/dist/src/utils/package-manager.d.ts +1 -0
  29. package/dist/src/utils/package-manager.js +129 -0
  30. package/dist/src/utils/package-manager.js.map +1 -1
  31. package/dist/test/nuxt/templates.test.js +10 -1
  32. package/dist/test/nuxt/templates.test.js.map +1 -1
  33. package/e2e-tests/test-applications/nuxt-4-test-app/README.md +75 -0
  34. package/e2e-tests/test-applications/nuxt-4-test-app/nuxt.config.ts +6 -0
  35. package/e2e-tests/test-applications/nuxt-4-test-app/package.json +18 -0
  36. package/e2e-tests/test-applications/nuxt-4-test-app/public/favicon.ico +0 -0
  37. package/e2e-tests/test-applications/nuxt-4-test-app/public/robots.txt +1 -0
  38. package/e2e-tests/tests/nuxt-3.test.ts +23 -3
  39. package/e2e-tests/tests/nuxt-4.test.ts +22 -2
  40. package/e2e-tests/utils/index.ts +4 -1
  41. package/package.json +1 -1
  42. package/src/android/templates.ts +0 -2
  43. package/src/nuxt/nuxt-wizard.ts +23 -5
  44. package/src/nuxt/sdk-setup.ts +166 -30
  45. package/src/nuxt/templates.ts +15 -8
  46. package/src/nuxt/types.ts +8 -0
  47. package/src/nuxt/utils.ts +17 -7
  48. package/src/utils/clack-utils.ts +55 -6
  49. package/src/utils/package-json.ts +5 -0
  50. package/src/utils/package-manager.ts +66 -0
  51. package/test/nuxt/templates.test.ts +33 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.37.0
4
+
5
+ - feat(nuxt): Add `import-in-the-middle` install step when using pnpm ([#727](https://github.com/getsentry/sentry-wizard/pull/727))
6
+ - fix(nuxt): Remove unused parameter in sentry-example-api template ([#734](https://github.com/getsentry/sentry-wizard/pull/734))
7
+ - fix(nuxt): Remove option to downgrade override nitropack ([#744](https://github.com/getsentry/sentry-wizard/pull/744))
8
+ - feat(nuxt): Add deployment-platform flow with links to docs ([#747](https://github.com/getsentry/sentry-wizard/pull/747))
9
+
10
+ ## 3.36.0
11
+
12
+ - Remove Profiling for Android ([#720](https://github.com/getsentry/sentry-wizard/pull/720))
13
+ - Add downgrade path to nitro 2.9.7 ([#725](https://github.com/getsentry/sentry-wizard/pull/725))
14
+
3
15
  ## 3.35.0
4
16
 
5
17
  - feat: Pin JS SDK versions to v8 (#712)
@@ -84,52 +84,72 @@ describe('Nuxt-3', function () {
84
84
  });
85
85
  function runWizardOnNuxtProject(projectDir) {
86
86
  return __awaiter(this, void 0, void 0, function () {
87
- var integration, wizardInstance, packageManagerPrompted, tracingOptionPrompted, _a, replayOptionPrompted, _b, _c;
88
- return __generator(this, function (_d) {
89
- switch (_d.label) {
87
+ var integration, wizardInstance, packageManagerPrompted, nftOverridePrompted, _a, deploymentPlatformPrompted, _b, tracingOptionPrompted, _c, replayOptionPrompted, _d, _e;
88
+ return __generator(this, function (_f) {
89
+ switch (_f.label) {
90
90
  case 0:
91
91
  integration = Constants_1.Integration.nuxt;
92
92
  wizardInstance = (0, utils_1.startWizardInstance)(integration, projectDir);
93
93
  return [4 /*yield*/, wizardInstance.waitForOutput('Please select your package manager.')];
94
94
  case 1:
95
- packageManagerPrompted = _d.sent();
95
+ packageManagerPrompted = _f.sent();
96
96
  _a = packageManagerPrompted;
97
97
  if (!_a) return [3 /*break*/, 3];
98
98
  return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
99
99
  // Selecting `yarn` as the package manager
100
- [utils_1.KEYS.DOWN, utils_1.KEYS.ENTER],
101
- // "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
102
- 'to track the performance of your application?', {
100
+ [utils_1.KEYS.DOWN, utils_1.KEYS.ENTER], 'Do you want to add an override for @vercel/nft version ^0.27.4?', {
103
101
  timeout: 240000,
104
102
  })];
105
103
  case 2:
106
- _a = (_d.sent());
107
- _d.label = 3;
104
+ _a = (_f.sent());
105
+ _f.label = 3;
108
106
  case 3:
109
- tracingOptionPrompted = _a;
110
- _b = tracingOptionPrompted;
107
+ nftOverridePrompted = _a;
108
+ _b = nftOverridePrompted;
111
109
  if (!_b) return [3 /*break*/, 5];
112
- return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_1.KEYS.ENTER],
113
- // "Do you want to enable Sentry Session Replay", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.
114
- 'to get a video-like reproduction of errors during a user session?')];
110
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_1.KEYS.ENTER, 'Please select your deployment platform.', {
111
+ timeout: 240000,
112
+ })];
115
113
  case 4:
116
- _b = (_d.sent());
117
- _d.label = 5;
114
+ _b = (_f.sent());
115
+ _f.label = 5;
118
116
  case 5:
119
- replayOptionPrompted = _b;
120
- _c = replayOptionPrompted;
117
+ deploymentPlatformPrompted = _b;
118
+ _c = deploymentPlatformPrompted;
121
119
  if (!_c) return [3 /*break*/, 7];
122
- return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_1.KEYS.ENTER], 'Do you want to create an example page', {
123
- optional: true,
120
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_1.KEYS.ENTER,
121
+ // "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
122
+ 'Do you want to enable', {
123
+ timeout: 240000,
124
124
  })];
125
125
  case 6:
126
- _c = (_d.sent());
127
- _d.label = 7;
126
+ _c = (_f.sent());
127
+ _f.label = 7;
128
128
  case 7:
129
- _c;
130
- return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_1.KEYS.ENTER, utils_1.KEYS.ENTER], 'Successfully installed the Sentry Nuxt SDK!')];
129
+ tracingOptionPrompted = _c;
130
+ _d = tracingOptionPrompted;
131
+ if (!_d) return [3 /*break*/, 9];
132
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_1.KEYS.ENTER,
133
+ // "Do you want to enable Sentry Session Replay", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.
134
+ 'to get a video-like reproduction of errors during a user session?')];
131
135
  case 8:
132
- _d.sent();
136
+ _d = (_f.sent());
137
+ _f.label = 9;
138
+ case 9:
139
+ replayOptionPrompted = _d;
140
+ _e = replayOptionPrompted;
141
+ if (!_e) return [3 /*break*/, 11];
142
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_1.KEYS.ENTER], 'Do you want to create an example page', {
143
+ optional: true,
144
+ })];
145
+ case 10:
146
+ _e = (_f.sent());
147
+ _f.label = 11;
148
+ case 11:
149
+ _e;
150
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_1.KEYS.ENTER, utils_1.KEYS.ENTER], 'Successfully installed the Sentry Nuxt SDK!')];
151
+ case 12:
152
+ _f.sent();
133
153
  wizardInstance.kill();
134
154
  return [2 /*return*/];
135
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nuxt-3.test.js","sourceRoot":"","sources":["../../../e2e-tests/tests/nuxt-3.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport {\n checkEnvBuildPlugin,\n checkFileContents,\n checkFileExists,\n checkIfBuilds,\n checkIfRunsOnProdMode,\n checkPackageJson,\n cleanupGit,\n KEYS,\n revertLocalChanges,\n startWizardInstance,\n TEST_ARGS,\n} from '../utils';\nimport { Integration } from '../../lib/Constants';\n\ndescribe('Nuxt-3', () => {\n const projectDir = path.resolve(\n __dirname,\n '../test-applications/nuxt-3-test-app',\n );\n\n beforeAll(async () => {\n await runWizardOnNuxtProject(projectDir);\n });\n\n afterAll(() => {\n revertLocalChanges(projectDir);\n cleanupGit(projectDir);\n });\n\n testNuxtProjectSetup(projectDir);\n\n testNuxtProjectConfigs(projectDir);\n\n testNuxtProjectBuildsAndRuns(projectDir);\n});\n\nasync function runWizardOnNuxtProject(projectDir: string): Promise<void> {\n const integration = Integration.nuxt;\n\n const wizardInstance = startWizardInstance(integration, projectDir);\n const packageManagerPrompted = await wizardInstance.waitForOutput(\n 'Please select your package manager.',\n );\n\n const tracingOptionPrompted =\n packageManagerPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yarn` as the package manager\n [KEYS.DOWN, KEYS.ENTER],\n // \"Do you want to enable Tracing\", sometimes doesn't work as `Tracing` can be printed in bold.\n 'to track the performance of your application?',\n {\n timeout: 240_000,\n },\n ));\n\n const replayOptionPrompted =\n tracingOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER],\n // \"Do you want to enable Sentry Session Replay\", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.\n 'to get a video-like reproduction of errors during a user session?',\n ));\n\n replayOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER],\n 'Do you want to create an example page',\n {\n optional: true,\n },\n ));\n\n await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER, KEYS.ENTER],\n 'Successfully installed the Sentry Nuxt SDK!',\n );\n\n wizardInstance.kill();\n}\n\nfunction testNuxtProjectSetup(projectDir: string) {\n const integration = Integration.nuxt;\n\n test('package.json is updated correctly', () => {\n checkPackageJson(projectDir, integration);\n });\n\n test('.env-sentry-build-plugin is created and contains the auth token', () => {\n checkEnvBuildPlugin(projectDir);\n });\n\n test('config files created', () => {\n checkFileExists(`${projectDir}/sentry.server.config.ts`);\n checkFileExists(`${projectDir}/sentry.client.config.ts`);\n });\n\n test('example page exists', () => {\n checkFileExists(`${projectDir}/pages/sentry-example-page.vue`);\n checkFileExists(`${projectDir}/server/api/sentry-example-api.ts`);\n });\n}\n\nfunction testNuxtProjectConfigs(projectDir: string) {\n test('nuxt config contains sentry module', () => {\n checkFileContents(path.resolve(projectDir, 'nuxt.config.ts'), [\n \"modules: ['@sentry/nuxt/module'],\",\n 'sentry: {',\n ' sourceMapsUploadOptions: {',\n ` org: '${TEST_ARGS.ORG_SLUG}',`,\n ` project: '${TEST_ARGS.PROJECT_SLUG}'`,\n ' }',\n '},',\n 'sourcemap: {',\n \" client: 'hidden'\",\n '}',\n ]);\n });\n\n test('sentry.client.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.client.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ' // If set up, you can use your runtime config here',\n ' // dsn: useRuntimeConfig().public.sentry.dsn,',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n ' // This sets the sample rate to be 10%. You may want this to be 100% while',\n ' // in development and sample at a lower rate in production',\n ' replaysSessionSampleRate: 0.1,',\n ' // If the entire session is not sampled, use the below sample rate to sample',\n ' // sessions when an error occurs.',\n ' replaysOnErrorSampleRate: 1.0,',\n \" // If you don't want to use Session Replay, just remove the line below:\",\n ' integrations: [Sentry.replayIntegration()],',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n\n test('sentry.server.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.server.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n}\n\nfunction testNuxtProjectBuildsAndRuns(projectDir: string) {\n test('builds successfully', async () => {\n await checkIfBuilds(projectDir, 'preview this build');\n });\n\n test('runs on prod mode correctly', async () => {\n await checkIfRunsOnProdMode(projectDir, 'Listening on');\n });\n}\n"]}
1
+ {"version":3,"file":"nuxt-3.test.js","sourceRoot":"","sources":["../../../e2e-tests/tests/nuxt-3.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA6B;AAC7B,kCAYkB;AAClB,iDAAkD;AAElD,QAAQ,CAAC,QAAQ,EAAE;IACjB,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B,SAAS,EACT,sCAAsC,CACvC,CAAC;IAEF,SAAS,CAAC;;;wBACR,qBAAM,sBAAsB,CAAC,UAAU,CAAC,EAAA;;oBAAxC,SAAwC,CAAC;;;;SAC1C,CAAC,CAAC;IAEH,QAAQ,CAAC;QACP,IAAA,0BAAkB,EAAC,UAAU,CAAC,CAAC;QAC/B,IAAA,kBAAU,EAAC,UAAU,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAEjC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAEnC,4BAA4B,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,SAAe,sBAAsB,CAAC,UAAkB;;;;;;oBAChD,WAAW,GAAG,uBAAW,CAAC,IAAI,CAAC;oBAE/B,cAAc,GAAG,IAAA,2BAAmB,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;oBACrC,qBAAM,cAAc,CAAC,aAAa,CAC/D,qCAAqC,CACtC,EAAA;;oBAFK,sBAAsB,GAAG,SAE9B;oBAGC,KAAA,sBAAsB,CAAA;6BAAtB,wBAAsB;oBACrB,qBAAM,cAAc,CAAC,yBAAyB;wBAC7C,0CAA0C;wBAC1C,CAAC,YAAI,CAAC,IAAI,EAAE,YAAI,CAAC,KAAK,CAAC,EACvB,iEAAiE,EACjE;4BACE,OAAO,EAAE,MAAO;yBACjB,CACF,EAAA;;oBAPD,KAAA,CAAC,SAOA,CAAC,CAAA;;;oBATE,mBAAmB,KASrB;oBAGF,KAAA,mBAAmB,CAAA;6BAAnB,wBAAmB;oBAClB,qBAAM,cAAc,CAAC,yBAAyB,CAC7C,YAAI,CAAC,KAAK,EACV,yCAAyC,EACzC;4BACE,OAAO,EAAE,MAAO;yBACjB,CACF,EAAA;;oBAND,KAAA,CAAC,SAMA,CAAC,CAAA;;;oBARE,0BAA0B,KAQ5B;oBAGF,KAAA,0BAA0B,CAAA;6BAA1B,wBAA0B;oBACzB,qBAAM,cAAc,CAAC,yBAAyB,CAC7C,YAAI,CAAC,KAAK;wBACV,+FAA+F;wBAC/F,uBAAuB,EACvB;4BACE,OAAO,EAAE,MAAO;yBACjB,CACF,EAAA;;oBAPD,KAAA,CAAC,SAOA,CAAC,CAAA;;;oBATE,qBAAqB,KASvB;oBAGF,KAAA,qBAAqB,CAAA;6BAArB,wBAAqB;oBACpB,qBAAM,cAAc,CAAC,yBAAyB,CAC7C,YAAI,CAAC,KAAK;wBACV,2HAA2H;wBAC3H,mEAAmE,CACpE,EAAA;;oBAJD,KAAA,CAAC,SAIA,CAAC,CAAA;;;oBANE,oBAAoB,KAMtB;oBAEJ,KAAA,oBAAoB,CAAA;6BAApB,yBAAoB;oBACjB,qBAAM,cAAc,CAAC,yBAAyB,CAC7C,CAAC,YAAI,CAAC,KAAK,CAAC,EACZ,uCAAuC,EACvC;4BACE,QAAQ,EAAE,IAAI;yBACf,CACF,EAAA;;oBAND,KAAA,CAAC,SAMA,CAAC,CAAA;;;oBAPJ,GAOK;oBAEL,qBAAM,cAAc,CAAC,yBAAyB,CAC5C,CAAC,YAAI,CAAC,KAAK,EAAE,YAAI,CAAC,KAAK,CAAC,EACxB,6CAA6C,CAC9C,EAAA;;oBAHD,SAGC,CAAC;oBAEF,cAAc,CAAC,IAAI,EAAE,CAAC;;;;;CACvB;AAED,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,IAAM,WAAW,GAAG,uBAAW,CAAC,IAAI,CAAC;IAErC,IAAI,CAAC,mCAAmC,EAAE;QACxC,IAAA,wBAAgB,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iEAAiE,EAAE;QACtE,IAAA,2BAAmB,EAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sBAAsB,EAAE;QAC3B,IAAA,uBAAe,EAAC,UAAG,UAAU,6BAA0B,CAAC,CAAC;QACzD,IAAA,uBAAe,EAAC,UAAG,UAAU,6BAA0B,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qBAAqB,EAAE;QAC1B,IAAA,uBAAe,EAAC,UAAG,UAAU,mCAAgC,CAAC,CAAC;QAC/D,IAAA,uBAAe,EAAC,UAAG,UAAU,sCAAmC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAkB;IAChD,IAAI,CAAC,oCAAoC,EAAE;QACzC,IAAA,yBAAiB,EAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE;YAC5D,mCAAmC;YACnC,WAAW;YACX,8BAA8B;YAC9B,oBAAa,iBAAS,CAAC,QAAQ,OAAI;YACnC,wBAAiB,iBAAS,CAAC,YAAY,MAAG;YAC1C,KAAK;YACL,IAAI;YACJ,cAAc;YACd,oBAAoB;YACpB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE;QACvC,IAAA,yBAAiB,EAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,EAAE;YACrE,yCAAyC;YACzC,eAAe;YACf,sDAAsD;YACtD,iDAAiD;YACjD,mBAAW,iBAAS,CAAC,WAAW,QAAI;YACpC,8EAA8E;YAC9E,wBAAwB;YACxB,0BAA0B;YAC1B,8EAA8E;YAC9E,8DAA8D;YAC9D,kCAAkC;YAClC,gFAAgF;YAChF,qCAAqC;YACrC,kCAAkC;YAClC,2EAA2E;YAC3E,+CAA+C;YAC/C,+GAA+G;YAC/G,iBAAiB;YACjB,KAAK;SACN,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE;QACvC,IAAA,yBAAiB,EAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,EAAE;YACrE,yCAAyC;YACzC,eAAe;YACf,mBAAW,iBAAS,CAAC,WAAW,QAAI;YACpC,8EAA8E;YAC9E,wBAAwB;YACxB,0BAA0B;YAC1B,+GAA+G;YAC/G,iBAAiB;YACjB,KAAK;SACN,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CAAC,UAAkB;IAAxD,iBAQC;IAPC,IAAI,CAAC,qBAAqB,EAAE;;;wBAC1B,qBAAM,IAAA,qBAAa,EAAC,UAAU,EAAE,oBAAoB,CAAC,EAAA;;oBAArD,SAAqD,CAAC;;;;SACvD,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE;;;wBAClC,qBAAM,IAAA,6BAAqB,EAAC,UAAU,EAAE,cAAc,CAAC,EAAA;;oBAAvD,SAAuD,CAAC;;;;SACzD,CAAC,CAAC;AACL,CAAC","sourcesContent":["import * as path from 'path';\nimport {\n checkEnvBuildPlugin,\n checkFileContents,\n checkFileExists,\n checkIfBuilds,\n checkIfRunsOnProdMode,\n checkPackageJson,\n cleanupGit,\n KEYS,\n revertLocalChanges,\n startWizardInstance,\n TEST_ARGS,\n} from '../utils';\nimport { Integration } from '../../lib/Constants';\n\ndescribe('Nuxt-3', () => {\n const projectDir = path.resolve(\n __dirname,\n '../test-applications/nuxt-3-test-app',\n );\n\n beforeAll(async () => {\n await runWizardOnNuxtProject(projectDir);\n });\n\n afterAll(() => {\n revertLocalChanges(projectDir);\n cleanupGit(projectDir);\n });\n\n testNuxtProjectSetup(projectDir);\n\n testNuxtProjectConfigs(projectDir);\n\n testNuxtProjectBuildsAndRuns(projectDir);\n});\n\nasync function runWizardOnNuxtProject(projectDir: string): Promise<void> {\n const integration = Integration.nuxt;\n\n const wizardInstance = startWizardInstance(integration, projectDir);\n const packageManagerPrompted = await wizardInstance.waitForOutput(\n 'Please select your package manager.',\n );\n\n const nftOverridePrompted =\n packageManagerPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yarn` as the package manager\n [KEYS.DOWN, KEYS.ENTER],\n 'Do you want to add an override for @vercel/nft version ^0.27.4?',\n {\n timeout: 240_000,\n },\n ));\n\n const deploymentPlatformPrompted =\n nftOverridePrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n KEYS.ENTER,\n 'Please select your deployment platform.',\n {\n timeout: 240_000,\n },\n ));\n\n const tracingOptionPrompted =\n deploymentPlatformPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n KEYS.ENTER,\n // \"Do you want to enable Tracing\", sometimes doesn't work as `Tracing` can be printed in bold.\n 'Do you want to enable',\n {\n timeout: 240_000,\n },\n ));\n\n const replayOptionPrompted =\n tracingOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n KEYS.ENTER,\n // \"Do you want to enable Sentry Session Replay\", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.\n 'to get a video-like reproduction of errors during a user session?',\n ));\n\n replayOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER],\n 'Do you want to create an example page',\n {\n optional: true,\n },\n ));\n\n await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER, KEYS.ENTER],\n 'Successfully installed the Sentry Nuxt SDK!',\n );\n\n wizardInstance.kill();\n}\n\nfunction testNuxtProjectSetup(projectDir: string) {\n const integration = Integration.nuxt;\n\n test('package.json is updated correctly', () => {\n checkPackageJson(projectDir, integration);\n });\n\n test('.env-sentry-build-plugin is created and contains the auth token', () => {\n checkEnvBuildPlugin(projectDir);\n });\n\n test('config files created', () => {\n checkFileExists(`${projectDir}/sentry.server.config.ts`);\n checkFileExists(`${projectDir}/sentry.client.config.ts`);\n });\n\n test('example page exists', () => {\n checkFileExists(`${projectDir}/pages/sentry-example-page.vue`);\n checkFileExists(`${projectDir}/server/api/sentry-example-api.ts`);\n });\n}\n\nfunction testNuxtProjectConfigs(projectDir: string) {\n test('nuxt config contains sentry module', () => {\n checkFileContents(path.resolve(projectDir, 'nuxt.config.ts'), [\n \"modules: ['@sentry/nuxt/module'],\",\n 'sentry: {',\n ' sourceMapsUploadOptions: {',\n ` org: '${TEST_ARGS.ORG_SLUG}',`,\n ` project: '${TEST_ARGS.PROJECT_SLUG}'`,\n ' }',\n '},',\n 'sourcemap: {',\n \" client: 'hidden'\",\n '}',\n ]);\n });\n\n test('sentry.client.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.client.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ' // If set up, you can use your runtime config here',\n ' // dsn: useRuntimeConfig().public.sentry.dsn,',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n ' // This sets the sample rate to be 10%. You may want this to be 100% while',\n ' // in development and sample at a lower rate in production',\n ' replaysSessionSampleRate: 0.1,',\n ' // If the entire session is not sampled, use the below sample rate to sample',\n ' // sessions when an error occurs.',\n ' replaysOnErrorSampleRate: 1.0,',\n \" // If you don't want to use Session Replay, just remove the line below:\",\n ' integrations: [Sentry.replayIntegration()],',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n\n test('sentry.server.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.server.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n}\n\nfunction testNuxtProjectBuildsAndRuns(projectDir: string) {\n test('builds successfully', async () => {\n await checkIfBuilds(projectDir, 'preview this build');\n });\n\n test('runs on prod mode correctly', async () => {\n await checkIfRunsOnProdMode(projectDir, 'Listening on');\n });\n}\n"]}
@@ -85,52 +85,72 @@ describe('Nuxt-4', function () {
85
85
  });
86
86
  function runWizardOnNuxtProject(projectDir) {
87
87
  return __awaiter(this, void 0, void 0, function () {
88
- var integration, wizardInstance, packageManagerPrompted, tracingOptionPrompted, _a, replayOptionPrompted, _b, _c;
89
- return __generator(this, function (_d) {
90
- switch (_d.label) {
88
+ var integration, wizardInstance, packageManagerPrompted, nftOverridePrompted, _a, deploymentPlatformPrompted, _b, tracingOptionPrompted, _c, replayOptionPrompted, _d, _e;
89
+ return __generator(this, function (_f) {
90
+ switch (_f.label) {
91
91
  case 0:
92
92
  integration = Constants_1.Integration.nuxt;
93
93
  wizardInstance = (0, utils_2.startWizardInstance)(integration, projectDir);
94
94
  return [4 /*yield*/, wizardInstance.waitForOutput('Please select your package manager.')];
95
95
  case 1:
96
- packageManagerPrompted = _d.sent();
96
+ packageManagerPrompted = _f.sent();
97
97
  _a = packageManagerPrompted;
98
98
  if (!_a) return [3 /*break*/, 3];
99
99
  return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
100
100
  // Selecting `yarn` as the package manager
101
- [utils_2.KEYS.DOWN, utils_2.KEYS.ENTER],
102
- // "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
103
- 'to track the performance of your application?', {
101
+ [utils_2.KEYS.DOWN, utils_2.KEYS.ENTER], 'Do you want to add an override for @vercel/nft version ^0.27.4?', {
104
102
  timeout: 240000,
105
103
  })];
106
104
  case 2:
107
- _a = (_d.sent());
108
- _d.label = 3;
105
+ _a = (_f.sent());
106
+ _f.label = 3;
109
107
  case 3:
110
- tracingOptionPrompted = _a;
111
- _b = tracingOptionPrompted;
108
+ nftOverridePrompted = _a;
109
+ _b = nftOverridePrompted;
112
110
  if (!_b) return [3 /*break*/, 5];
113
- return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER],
114
- // "Do you want to enable Sentry Session Replay", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.
115
- 'to get a video-like reproduction of errors during a user session?')];
111
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_2.KEYS.ENTER, 'Please select your deployment platform.', {
112
+ timeout: 240000,
113
+ })];
116
114
  case 4:
117
- _b = (_d.sent());
118
- _d.label = 5;
115
+ _b = (_f.sent());
116
+ _f.label = 5;
119
117
  case 5:
120
- replayOptionPrompted = _b;
121
- _c = replayOptionPrompted;
118
+ deploymentPlatformPrompted = _b;
119
+ _c = deploymentPlatformPrompted;
122
120
  if (!_c) return [3 /*break*/, 7];
123
- return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER], 'Do you want to create an example page', {
124
- optional: true,
121
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_2.KEYS.ENTER,
122
+ // "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
123
+ 'Do you want to enable', {
124
+ timeout: 240000,
125
125
  })];
126
126
  case 6:
127
- _c = (_d.sent());
128
- _d.label = 7;
127
+ _c = (_f.sent());
128
+ _f.label = 7;
129
129
  case 7:
130
- _c;
131
- return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER, utils_2.KEYS.ENTER], 'Successfully installed the Sentry Nuxt SDK!')];
130
+ tracingOptionPrompted = _c;
131
+ _d = tracingOptionPrompted;
132
+ if (!_d) return [3 /*break*/, 9];
133
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER],
134
+ // "Do you want to enable Sentry Session Replay", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.
135
+ 'to get a video-like reproduction of errors during a user session?')];
132
136
  case 8:
133
- _d.sent();
137
+ _d = (_f.sent());
138
+ _f.label = 9;
139
+ case 9:
140
+ replayOptionPrompted = _d;
141
+ _e = replayOptionPrompted;
142
+ if (!_e) return [3 /*break*/, 11];
143
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER], 'Do you want to create an example page', {
144
+ optional: true,
145
+ })];
146
+ case 10:
147
+ _e = (_f.sent());
148
+ _f.label = 11;
149
+ case 11:
150
+ _e;
151
+ return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER, utils_2.KEYS.ENTER], 'Successfully installed the Sentry Nuxt SDK!')];
152
+ case 12:
153
+ _f.sent();
134
154
  wizardInstance.kill();
135
155
  return [2 /*return*/];
136
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nuxt-4.test.js","sourceRoot":"","sources":["../../../e2e-tests/tests/nuxt-4.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport { Integration } from '../../lib/Constants';\nimport { cleanupGit, revertLocalChanges } from '../utils';\nimport {\n checkEnvBuildPlugin,\n checkFileContents,\n checkFileExists,\n checkIfBuilds,\n checkIfRunsOnProdMode,\n checkPackageJson,\n KEYS,\n startWizardInstance,\n TEST_ARGS,\n} from '../utils';\n\ndescribe('Nuxt-4', () => {\n const projectDir = path.resolve(\n __dirname,\n '../test-applications/nuxt-4-test-app',\n );\n\n beforeAll(async () => {\n await runWizardOnNuxtProject(projectDir);\n });\n\n afterAll(() => {\n revertLocalChanges(projectDir);\n cleanupGit(projectDir);\n });\n\n testNuxtProjectSetup(projectDir);\n\n testNuxtProjectConfigs(projectDir);\n\n testNuxtProjectBuildsAndRuns(projectDir);\n});\n\nasync function runWizardOnNuxtProject(projectDir: string): Promise<void> {\n const integration = Integration.nuxt;\n\n const wizardInstance = startWizardInstance(integration, projectDir);\n const packageManagerPrompted = await wizardInstance.waitForOutput(\n 'Please select your package manager.',\n );\n\n const tracingOptionPrompted =\n packageManagerPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yarn` as the package manager\n [KEYS.DOWN, KEYS.ENTER],\n // \"Do you want to enable Tracing\", sometimes doesn't work as `Tracing` can be printed in bold.\n 'to track the performance of your application?',\n {\n timeout: 240_000,\n },\n ));\n\n const replayOptionPrompted =\n tracingOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER],\n // \"Do you want to enable Sentry Session Replay\", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.\n 'to get a video-like reproduction of errors during a user session?',\n ));\n\n replayOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER],\n 'Do you want to create an example page',\n {\n optional: true,\n },\n ));\n\n await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER, KEYS.ENTER],\n 'Successfully installed the Sentry Nuxt SDK!',\n );\n\n wizardInstance.kill();\n}\n\nfunction testNuxtProjectSetup(projectDir: string) {\n const integration = Integration.nuxt;\n\n test('package.json is updated correctly', () => {\n checkPackageJson(projectDir, integration);\n });\n\n test('.env-sentry-build-plugin is created and contains the auth token', () => {\n checkEnvBuildPlugin(projectDir);\n });\n\n test('config files created', () => {\n checkFileExists(`${projectDir}/sentry.server.config.ts`);\n checkFileExists(`${projectDir}/sentry.client.config.ts`);\n });\n\n test('example page exists', () => {\n checkFileExists(`${projectDir}/app/pages/sentry-example-page.vue`);\n checkFileExists(`${projectDir}/server/api/sentry-example-api.ts`);\n });\n}\n\nfunction testNuxtProjectConfigs(projectDir: string) {\n test('nuxt config contains sentry module', () => {\n checkFileContents(path.resolve(projectDir, 'nuxt.config.ts'), [\n \"modules: ['@sentry/nuxt/module'],\",\n 'sentry: {',\n ' sourceMapsUploadOptions: {',\n ` org: '${TEST_ARGS.ORG_SLUG}',`,\n ` project: '${TEST_ARGS.PROJECT_SLUG}'`,\n ' }',\n '},',\n 'sourcemap: {',\n \" client: 'hidden'\",\n '}',\n ]);\n });\n\n test('sentry.client.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.client.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ' // If set up, you can use your runtime config here',\n ' // dsn: useRuntimeConfig().public.sentry.dsn,',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n ' // This sets the sample rate to be 10%. You may want this to be 100% while',\n ' // in development and sample at a lower rate in production',\n ' replaysSessionSampleRate: 0.1,',\n ' // If the entire session is not sampled, use the below sample rate to sample',\n ' // sessions when an error occurs.',\n ' replaysOnErrorSampleRate: 1.0,',\n \" // If you don't want to use Session Replay, just remove the line below:\",\n ' integrations: [Sentry.replayIntegration()],',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n\n test('sentry.server.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.server.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n}\n\nfunction testNuxtProjectBuildsAndRuns(projectDir: string) {\n test('builds successfully', async () => {\n await checkIfBuilds(projectDir, 'preview this build');\n });\n\n test('runs on prod mode correctly', async () => {\n await checkIfRunsOnProdMode(projectDir, 'Listening on');\n });\n}\n"]}
1
+ {"version":3,"file":"nuxt-4.test.js","sourceRoot":"","sources":["../../../e2e-tests/tests/nuxt-4.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path';\nimport { Integration } from '../../lib/Constants';\nimport { cleanupGit, revertLocalChanges } from '../utils';\nimport {\n checkEnvBuildPlugin,\n checkFileContents,\n checkFileExists,\n checkIfBuilds,\n checkIfRunsOnProdMode,\n checkPackageJson,\n KEYS,\n startWizardInstance,\n TEST_ARGS,\n} from '../utils';\n\ndescribe('Nuxt-4', () => {\n const projectDir = path.resolve(\n __dirname,\n '../test-applications/nuxt-4-test-app',\n );\n\n beforeAll(async () => {\n await runWizardOnNuxtProject(projectDir);\n });\n\n afterAll(() => {\n revertLocalChanges(projectDir);\n cleanupGit(projectDir);\n });\n\n testNuxtProjectSetup(projectDir);\n\n testNuxtProjectConfigs(projectDir);\n\n testNuxtProjectBuildsAndRuns(projectDir);\n});\n\nasync function runWizardOnNuxtProject(projectDir: string): Promise<void> {\n const integration = Integration.nuxt;\n\n const wizardInstance = startWizardInstance(integration, projectDir);\n const packageManagerPrompted = await wizardInstance.waitForOutput(\n 'Please select your package manager.',\n );\n\n const nftOverridePrompted =\n packageManagerPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yarn` as the package manager\n [KEYS.DOWN, KEYS.ENTER],\n 'Do you want to add an override for @vercel/nft version ^0.27.4?',\n {\n timeout: 240_000,\n },\n ));\n\n const deploymentPlatformPrompted =\n nftOverridePrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n KEYS.ENTER,\n 'Please select your deployment platform.',\n {\n timeout: 240_000,\n },\n ));\n\n const tracingOptionPrompted =\n deploymentPlatformPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n KEYS.ENTER,\n // \"Do you want to enable Tracing\", sometimes doesn't work as `Tracing` can be printed in bold.\n 'Do you want to enable',\n {\n timeout: 240_000,\n },\n ));\n\n const replayOptionPrompted =\n tracingOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER],\n // \"Do you want to enable Sentry Session Replay\", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.\n 'to get a video-like reproduction of errors during a user session?',\n ));\n\n replayOptionPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER],\n 'Do you want to create an example page',\n {\n optional: true,\n },\n ));\n\n await wizardInstance.sendStdinAndWaitForOutput(\n [KEYS.ENTER, KEYS.ENTER],\n 'Successfully installed the Sentry Nuxt SDK!',\n );\n\n wizardInstance.kill();\n}\n\nfunction testNuxtProjectSetup(projectDir: string) {\n const integration = Integration.nuxt;\n\n test('package.json is updated correctly', () => {\n checkPackageJson(projectDir, integration);\n });\n\n test('.env-sentry-build-plugin is created and contains the auth token', () => {\n checkEnvBuildPlugin(projectDir);\n });\n\n test('config files created', () => {\n checkFileExists(`${projectDir}/sentry.server.config.ts`);\n checkFileExists(`${projectDir}/sentry.client.config.ts`);\n });\n\n test('example page exists', () => {\n checkFileExists(`${projectDir}/app/pages/sentry-example-page.vue`);\n checkFileExists(`${projectDir}/server/api/sentry-example-api.ts`);\n });\n}\n\nfunction testNuxtProjectConfigs(projectDir: string) {\n test('nuxt config contains sentry module', () => {\n checkFileContents(path.resolve(projectDir, 'nuxt.config.ts'), [\n \"modules: ['@sentry/nuxt/module'],\",\n 'sentry: {',\n ' sourceMapsUploadOptions: {',\n ` org: '${TEST_ARGS.ORG_SLUG}',`,\n ` project: '${TEST_ARGS.PROJECT_SLUG}'`,\n ' }',\n '},',\n 'sourcemap: {',\n \" client: 'hidden'\",\n '}',\n ]);\n });\n\n test('sentry.client.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.client.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ' // If set up, you can use your runtime config here',\n ' // dsn: useRuntimeConfig().public.sentry.dsn,',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n ' // This sets the sample rate to be 10%. You may want this to be 100% while',\n ' // in development and sample at a lower rate in production',\n ' replaysSessionSampleRate: 0.1,',\n ' // If the entire session is not sampled, use the below sample rate to sample',\n ' // sessions when an error occurs.',\n ' replaysOnErrorSampleRate: 1.0,',\n \" // If you don't want to use Session Replay, just remove the line below:\",\n ' integrations: [Sentry.replayIntegration()],',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n\n test('sentry.server.config.ts contents', () => {\n checkFileContents(path.resolve(projectDir, 'sentry.server.config.ts'), [\n 'import * as Sentry from \"@sentry/nuxt\";',\n 'Sentry.init({',\n ` dsn: \"${TEST_ARGS.PROJECT_DSN}\",`,\n ' // We recommend adjusting this value in production, or using tracesSampler',\n ' // for finer control',\n ' tracesSampleRate: 1.0,',\n \" // Setting this option to true will print useful information to the console while you're setting up Sentry.\",\n ' debug: false,',\n '});',\n ]);\n });\n}\n\nfunction testNuxtProjectBuildsAndRuns(projectDir: string) {\n test('builds successfully', async () => {\n await checkIfBuilds(projectDir, 'preview this build');\n });\n\n test('runs on prod mode correctly', async () => {\n await checkIfRunsOnProdMode(projectDir, 'Listening on');\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../e2e-tests/utils/index.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nimport type { Integration } from '../../lib/Constants';\nimport { spawn, execSync } from 'child_process';\nimport type { ChildProcess } from 'child_process';\nimport { dim, green, red } from '../../lib/Helper/Logging';\n\nexport const KEYS = {\n UP: '\\u001b[A',\n DOWN: '\\u001b[B',\n LEFT: '\\u001b[D',\n RIGHT: '\\u001b[C',\n ENTER: '\\r',\n SPACE: ' ',\n};\n\nexport const TEST_ARGS = {\n AUTH_TOKEN: process.env.SENTRY_TEST_AUTH_TOKEN || 'TEST_AUTH_TOKEN',\n PROJECT_DSN:\n process.env.SENTRY_TEST_DSN || 'https://public@dsn.ingest.sentry.io/1337',\n ORG_SLUG: process.env.SENTRY_TEST_ORG || 'TEST_ORG_SLUG',\n PROJECT_SLUG: process.env.SENTRY_TEST_PROJECT || 'TEST_PROJECT_SLUG',\n};\n\nexport const log = {\n success: (message: string) => {\n green(`[SUCCESS] ${message}`);\n },\n info: (message: string) => {\n dim(`[INFO] ${message}`);\n },\n error: (message: string) => {\n red(`[ERROR] ${message}`);\n },\n};\n\nexport class WizardTestEnv {\n taskHandle: ChildProcess;\n\n constructor(\n cmd: string,\n args: string[],\n opts?: {\n cwd?: string;\n debug?: boolean;\n },\n ) {\n this.taskHandle = spawn(cmd, args, { cwd: opts?.cwd, stdio: 'pipe' });\n\n if (opts?.debug) {\n this.taskHandle.stdout.pipe(process.stdout);\n this.taskHandle.stderr.pipe(process.stderr);\n }\n }\n\n sendStdin(input: string) {\n this.taskHandle.stdin.write(input);\n }\n\n /**\n * Sends the input and waits for the output.\n * @returns a promise that resolves when the output was found\n * @throws an error when the output was not found within the timeout\n */\n sendStdinAndWaitForOutput(\n input: string | string[],\n output: string,\n options?: { timeout?: number; optional?: boolean },\n ) {\n const outputPromise = this.waitForOutput(output, options);\n\n if (Array.isArray(input)) {\n for (const i of input) {\n this.sendStdin(i);\n }\n } else {\n this.sendStdin(input);\n }\n return outputPromise;\n }\n\n /**\n * Waits for the provided output with `.includes()` logic.\n *\n * @returns a promise that resolves to `true` if the output was found, `false` if the output was not found within the\n * timeout and `optional: true` is set, or it rejects when the timeout was reached with `optional: false`\n */\n waitForOutput(\n output: string,\n options: {\n /** Timeout in ms */\n timeout?: number;\n /** Whether to always resolve after the timeout, no matter whether the input was actually found or not. */\n optional?: boolean;\n } = {},\n ) {\n const { timeout, optional } = {\n timeout: 60_000,\n optional: false,\n ...options,\n };\n\n return new Promise<boolean>((resolve, reject) => {\n let outputBuffer = '';\n const timeoutId = setTimeout(() => {\n if (optional) {\n // The output is not found but it's optional so we can resolve the promise with false\n resolve(false);\n } else {\n reject(new Error(`Timeout waiting for output: ${output}`));\n }\n }, timeout);\n\n this.taskHandle.stdout.on('data', (data) => {\n outputBuffer += data;\n if (outputBuffer.includes(output)) {\n clearTimeout(timeoutId);\n // The output is found so we can resolve the promise with true\n resolve(true);\n }\n });\n });\n }\n\n kill() {\n this.taskHandle.stdin.destroy();\n this.taskHandle.stderr.destroy();\n this.taskHandle.stdout.destroy();\n this.taskHandle.kill('SIGINT');\n this.taskHandle.unref();\n }\n}\n\n/**\n * Initialize a git repository in the given directory\n * @param projectDir\n */\nexport function initGit(projectDir: string): void {\n try {\n execSync('git init', { cwd: projectDir });\n // Add all files to the git repo\n execSync('git add -A', { cwd: projectDir });\n // Add author info to avoid git commit error\n execSync('git config user.email test@test.sentry.io', { cwd: projectDir });\n execSync('git config user.name Test', { cwd: projectDir });\n execSync('git commit -m init', { cwd: projectDir });\n } catch (e) {\n log.error('Error initializing git');\n log.error(e);\n }\n}\n\n/**\n * Cleanup the git repository in the given directory\n *\n * Caution! Make sure `projectDir` is a test project directory,\n * if in doubt, please commit your local non-test changes first!\n * @param projectDir\n */\nexport function cleanupGit(projectDir: string): void {\n try {\n // Remove the .git directory\n execSync(`rm -rf ${projectDir}/.git`);\n } catch (e) {\n log.error('Error cleaning up git');\n log.error(e);\n }\n}\n\n/**\n * Revert local changes in the given directory\n *\n * Caution! Make sure `projectDir` is a test project directory,\n * if in doubt, please commit your local non-test changes first!\n *\n * @param projectDir\n */\nexport function revertLocalChanges(projectDir: string): void {\n try {\n // Revert tracked files\n execSync('git checkout .', { cwd: projectDir });\n // Revert untracked files\n execSync('git clean -fd .', { cwd: projectDir });\n } catch (e) {\n log.error('Error reverting local changes');\n log.error(e);\n }\n}\n\n/**\n * Start the wizard instance with the given integration and project directory\n * @param integration\n * @param projectDir\n *\n * @returns WizardTestEnv\n */\nexport function startWizardInstance(\n integration: Integration,\n projectDir: string,\n debug = false,\n): WizardTestEnv {\n const binPath = path.join(__dirname, '../../dist/bin.js');\n\n revertLocalChanges(projectDir);\n cleanupGit(projectDir);\n initGit(projectDir);\n\n return new WizardTestEnv(\n 'node',\n [\n binPath,\n '--debug',\n '-i',\n integration,\n '--preSelectedProject.authToken',\n TEST_ARGS.AUTH_TOKEN,\n '--preSelectedProject.dsn',\n TEST_ARGS.PROJECT_DSN,\n '--preSelectedProject.orgSlug',\n TEST_ARGS.ORG_SLUG,\n '--preSelectedProject.projectSlug',\n TEST_ARGS.PROJECT_SLUG,\n ],\n { cwd: projectDir, debug },\n );\n}\n\n/**\n * Create a file with the given content\n *\n * @param filePath\n * @param content\n */\nexport function createFile(filePath: string, content?: string) {\n return fs.writeFileSync(filePath, content || '');\n}\n\n/**\n * Modify the file with the new content\n *\n * @param filePath\n * @param oldContent\n * @param newContent\n */\nexport function modifyFile(filePath: string, replaceMap: Record<string, string>) {\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n let newFileContent = fileContent;\n\n for (const [oldContent, newContent] of Object.entries(replaceMap)) {\n newFileContent = newFileContent.replace(oldContent, newContent);\n }\n\n fs.writeFileSync(filePath, newFileContent);\n}\n\n/**\n * Read the file contents and check if it contains the given content\n *\n * @param {string} filePath\n * @param {(string | string[])} content\n */\nexport function checkFileContents(\n filePath: string,\n content: string | string[],\n) {\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n const contentArray = Array.isArray(content) ? content : [content];\n\n for (const c of contentArray) {\n expect(fileContent).toContain(c);\n }\n}\n\n/**\n * Check if the file exists\n *\n * @param filePath\n */\nexport function checkFileExists(filePath: string) {\n expect(fs.existsSync(filePath)).toBe(true);\n}\n\n/**\n * Check if the package.json contains the given integration\n *\n * @param projectDir\n * @param integration\n */\nexport function checkPackageJson(projectDir: string, integration: Integration) {\n checkFileContents(`${projectDir}/package.json`, `@sentry/${integration}`);\n}\n\n/**\n * Check if the .sentryclirc contains the auth token\n *\n * @param projectDir\n */\nexport function checkSentryCliRc(projectDir: string) {\n checkFileContents(\n `${projectDir}/.sentryclirc`,\n `token=${TEST_ARGS.AUTH_TOKEN}`,\n );\n}\n\n/**\n * Check if the .env.sentry-build-plugin contains the auth token\n * @param projectDir\n */\nexport function checkEnvBuildPlugin(projectDir: string) {\n checkFileContents(\n `${projectDir}/.env.sentry-build-plugin`,\n `SENTRY_AUTH_TOKEN=${TEST_ARGS.AUTH_TOKEN}`,\n );\n}\n\n/**\n * Check if the project builds\n * @param projectDir\n */\nexport async function checkIfBuilds(\n projectDir: string,\n expectedOutput: string,\n) {\n const testEnv = new WizardTestEnv('npm', ['run', 'build'], {\n cwd: projectDir,\n });\n\n await expect(\n testEnv.waitForOutput(expectedOutput, {\n timeout: 120_000,\n }),\n ).resolves.toBe(true);\n}\n\n/**\n * Check if the project runs on dev mode\n * @param projectDir\n * @param expectedOutput\n */\nexport async function checkIfRunsOnDevMode(\n projectDir: string,\n expectedOutput: string,\n) {\n const testEnv = new WizardTestEnv('npm', ['run', 'dev'], { cwd: projectDir });\n\n await expect(\n testEnv.waitForOutput(expectedOutput, {\n timeout: 120_000,\n }),\n ).resolves.toBe(true);\n testEnv.kill();\n}\n\n/**\n * Check if the project runs on prod mode\n * @param projectDir\n * @param expectedOutput\n */\nexport async function checkIfRunsOnProdMode(\n projectDir: string,\n expectedOutput: string,\n startCommand = 'start',\n) {\n const testEnv = new WizardTestEnv('npm', ['run', startCommand], {\n cwd: projectDir,\n });\n\n await expect(\n testEnv.waitForOutput(expectedOutput, {\n timeout: 120_000,\n }),\n ).resolves.toBe(true);\n testEnv.kill();\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../e2e-tests/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAyB;AACzB,yCAA6B;AAG7B,+CAAgD;AAEhD,oDAA2D;AAE9C,QAAA,IAAI,GAAG;IAClB,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,GAAG;CACX,CAAC;AAEW,QAAA,SAAS,GAAG;IACvB,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,iBAAiB;IACnE,WAAW,EACT,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,0CAA0C;IAC3E,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe;IACxD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,mBAAmB;CACrE,CAAC;AAEW,QAAA,GAAG,GAAG;IACjB,OAAO,EAAE,UAAC,OAAe;QACvB,IAAA,eAAK,EAAC,oBAAa,OAAO,CAAE,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,EAAE,UAAC,OAAe;QACpB,IAAA,aAAG,EAAC,iBAAU,OAAO,CAAE,CAAC,CAAC;IAC3B,CAAC;IACD,KAAK,EAAE,UAAC,OAAe;QACrB,IAAA,aAAG,EAAC,kBAAW,OAAO,CAAE,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF;IAGE,uBACE,GAAW,EACX,IAAc,EACd,IAGC;QAED,IAAI,CAAC,UAAU,GAAG,IAAA,qBAAK,EAAC,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtE,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC7C;IACH,CAAC;IAED,iCAAS,GAAT,UAAU,KAAa;QACrB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,iDAAyB,GAAzB,UACE,KAAwB,EACxB,MAAc,EACd,OAAkD;QAElD,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,KAAgB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;gBAAlB,IAAM,CAAC,cAAA;gBACV,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACnB;SACF;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACvB;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,qCAAa,GAAb,UACE,MAAc,EACd,OAKM;QAPR,iBAmCC;QAjCC,wBAAA,EAAA,YAKM;QAEA,IAAA,gBACJ,OAAO,EAAE,KAAM,EACf,QAAQ,EAAE,KAAK,IACZ,OAAO,CACX,EAJO,OAAO,aAAA,EAAE,QAAQ,cAIxB,CAAC;QAEF,OAAO,IAAI,OAAO,CAAU,UAAC,OAAO,EAAE,MAAM;YAC1C,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,IAAM,SAAS,GAAG,UAAU,CAAC;gBAC3B,IAAI,QAAQ,EAAE;oBACZ,qFAAqF;oBACrF,OAAO,CAAC,KAAK,CAAC,CAAC;iBAChB;qBAAM;oBACL,MAAM,CAAC,IAAI,KAAK,CAAC,sCAA+B,MAAM,CAAE,CAAC,CAAC,CAAC;iBAC5D;YACH,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,IAAI;gBACrC,YAAY,IAAI,IAAI,CAAC;gBACrB,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACjC,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,8DAA8D;oBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC;iBACf;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAAI,GAAJ;QACE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IACH,oBAAC;AAAD,CAAC,AA/FD,IA+FC;AA/FY,sCAAa;AAiG1B;;;GAGG;AACH,SAAgB,OAAO,CAAC,UAAkB;IACxC,IAAI;QACF,IAAA,wBAAQ,EAAC,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1C,gCAAgC;QAChC,IAAA,wBAAQ,EAAC,YAAY,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,4CAA4C;QAC5C,IAAA,wBAAQ,EAAC,2CAA2C,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3E,IAAA,wBAAQ,EAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3D,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;KACrD;IAAC,OAAO,CAAC,EAAE;QACV,WAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpC,WAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACd;AACH,CAAC;AAbD,0BAaC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,UAAkB;IAC3C,IAAI;QACF,4BAA4B;QAC5B,IAAA,wBAAQ,EAAC,iBAAU,UAAU,UAAO,CAAC,CAAC;KACvC;IAAC,OAAO,CAAC,EAAE;QACV,WAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACnC,WAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACd;AACH,CAAC;AARD,gCAQC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,IAAI;QACF,uBAAuB;QACvB,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,yBAAyB;QACzB,IAAA,wBAAQ,EAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;KAClD;IAAC,OAAO,CAAC,EAAE;QACV,WAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC3C,WAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACd;AACH,CAAC;AAVD,gDAUC;AAED;;;;;;GAMG;AACH,SAAgB,mBAAmB,CACjC,WAAwB,EACxB,UAAkB,EAClB,KAAa;IAAb,sBAAA,EAAA,aAAa;IAEb,IAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAE1D,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/B,UAAU,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpB,OAAO,IAAI,aAAa,CACtB,MAAM,EACN;QACE,OAAO;QACP,SAAS;QACT,IAAI;QACJ,WAAW;QACX,gCAAgC;QAChC,iBAAS,CAAC,UAAU;QACpB,0BAA0B;QAC1B,iBAAS,CAAC,WAAW;QACrB,8BAA8B;QAC9B,iBAAS,CAAC,QAAQ;QAClB,kCAAkC;QAClC,iBAAS,CAAC,YAAY;KACvB,EACD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,OAAA,EAAE,CAC3B,CAAC;AACJ,CAAC;AA7BD,kDA6BC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,QAAgB,EAAE,OAAgB;IAC3D,OAAO,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAFD,gCAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CACxB,QAAgB,EAChB,UAAkC;IAElC,IAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,cAAc,GAAG,WAAW,CAAC;IAEjC,KAAuC,UAA0B,EAA1B,KAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAA1B,cAA0B,EAA1B,IAA0B,EAAE;QAAxD,IAAA,WAAwB,EAAvB,UAAU,QAAA,EAAE,UAAU,QAAA;QAChC,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KACjE;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC;AAZD,gCAYC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,OAA0B;IAE1B,IAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,IAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAElE,KAAgB,UAAY,EAAZ,6BAAY,EAAZ,0BAAY,EAAZ,IAAY,EAAE;QAAzB,IAAM,CAAC,qBAAA;QACV,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAClC;AACH,CAAC;AAVD,8CAUC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC9C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAFD,0CAEC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,UAAkB,EAAE,WAAwB;IAC3E,iBAAiB,CAAC,UAAG,UAAU,kBAAe,EAAE,kBAAW,WAAW,CAAE,CAAC,CAAC;AAC5E,CAAC;AAFD,4CAEC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,iBAAiB,CACf,UAAG,UAAU,kBAAe,EAC5B,gBAAS,iBAAS,CAAC,UAAU,CAAE,CAChC,CAAC;AACJ,CAAC;AALD,4CAKC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,UAAkB;IACpD,iBAAiB,CACf,UAAG,UAAU,8BAA2B,EACxC,4BAAqB,iBAAS,CAAC,UAAU,CAAE,CAC5C,CAAC;AACJ,CAAC;AALD,kDAKC;AAED;;;GAGG;AACH,SAAsB,aAAa,CACjC,UAAkB,EAClB,cAAsB;;;;;;oBAEhB,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;wBACzD,GAAG,EAAE,UAAU;qBAChB,CAAC,CAAC;oBAEH,qBAAM,MAAM,CACV,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE;4BACpC,OAAO,EAAE,MAAO;yBACjB,CAAC,CACH,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;oBAJrB,SAIqB,CAAC;;;;;CACvB;AAbD,sCAaC;AAED;;;;GAIG;AACH,SAAsB,oBAAoB,CACxC,UAAkB,EAClB,cAAsB;;;;;;oBAEhB,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;oBAE9E,qBAAM,MAAM,CACV,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE;4BACpC,OAAO,EAAE,MAAO;yBACjB,CAAC,CACH,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;oBAJrB,SAIqB,CAAC;oBACtB,OAAO,CAAC,IAAI,EAAE,CAAC;;;;;CAChB;AAZD,oDAYC;AAED;;;;GAIG;AACH,SAAsB,qBAAqB,CACzC,UAAkB,EAClB,cAAsB,EACtB,YAAsB;IAAtB,6BAAA,EAAA,sBAAsB;;;;;;oBAEhB,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;wBAC9D,GAAG,EAAE,UAAU;qBAChB,CAAC,CAAC;oBAEH,qBAAM,MAAM,CACV,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE;4BACpC,OAAO,EAAE,MAAO;yBACjB,CAAC,CACH,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;oBAJrB,SAIqB,CAAC;oBACtB,OAAO,CAAC,IAAI,EAAE,CAAC;;;;;CAChB;AAfD,sDAeC","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nimport type { Integration } from '../../lib/Constants';\nimport { spawn, execSync } from 'child_process';\nimport type { ChildProcess } from 'child_process';\nimport { dim, green, red } from '../../lib/Helper/Logging';\n\nexport const KEYS = {\n UP: '\\u001b[A',\n DOWN: '\\u001b[B',\n LEFT: '\\u001b[D',\n RIGHT: '\\u001b[C',\n ENTER: '\\r',\n SPACE: ' ',\n};\n\nexport const TEST_ARGS = {\n AUTH_TOKEN: process.env.SENTRY_TEST_AUTH_TOKEN || 'TEST_AUTH_TOKEN',\n PROJECT_DSN:\n process.env.SENTRY_TEST_DSN || 'https://public@dsn.ingest.sentry.io/1337',\n ORG_SLUG: process.env.SENTRY_TEST_ORG || 'TEST_ORG_SLUG',\n PROJECT_SLUG: process.env.SENTRY_TEST_PROJECT || 'TEST_PROJECT_SLUG',\n};\n\nexport const log = {\n success: (message: string) => {\n green(`[SUCCESS] ${message}`);\n },\n info: (message: string) => {\n dim(`[INFO] ${message}`);\n },\n error: (message: string) => {\n red(`[ERROR] ${message}`);\n },\n};\n\nexport class WizardTestEnv {\n taskHandle: ChildProcess;\n\n constructor(\n cmd: string,\n args: string[],\n opts?: {\n cwd?: string;\n debug?: boolean;\n },\n ) {\n this.taskHandle = spawn(cmd, args, { cwd: opts?.cwd, stdio: 'pipe' });\n\n if (opts?.debug) {\n this.taskHandle.stdout.pipe(process.stdout);\n this.taskHandle.stderr.pipe(process.stderr);\n }\n }\n\n sendStdin(input: string) {\n this.taskHandle.stdin.write(input);\n }\n\n /**\n * Sends the input and waits for the output.\n * @returns a promise that resolves when the output was found\n * @throws an error when the output was not found within the timeout\n */\n sendStdinAndWaitForOutput(\n input: string | string[],\n output: string,\n options?: { timeout?: number; optional?: boolean },\n ) {\n const outputPromise = this.waitForOutput(output, options);\n\n if (Array.isArray(input)) {\n for (const i of input) {\n this.sendStdin(i);\n }\n } else {\n this.sendStdin(input);\n }\n return outputPromise;\n }\n\n /**\n * Waits for the provided output with `.includes()` logic.\n *\n * @returns a promise that resolves to `true` if the output was found, `false` if the output was not found within the\n * timeout and `optional: true` is set, or it rejects when the timeout was reached with `optional: false`\n */\n waitForOutput(\n output: string,\n options: {\n /** Timeout in ms */\n timeout?: number;\n /** Whether to always resolve after the timeout, no matter whether the input was actually found or not. */\n optional?: boolean;\n } = {},\n ) {\n const { timeout, optional } = {\n timeout: 60_000,\n optional: false,\n ...options,\n };\n\n return new Promise<boolean>((resolve, reject) => {\n let outputBuffer = '';\n const timeoutId = setTimeout(() => {\n if (optional) {\n // The output is not found but it's optional so we can resolve the promise with false\n resolve(false);\n } else {\n reject(new Error(`Timeout waiting for output: ${output}`));\n }\n }, timeout);\n\n this.taskHandle.stdout.on('data', (data) => {\n outputBuffer += data;\n if (outputBuffer.includes(output)) {\n clearTimeout(timeoutId);\n // The output is found so we can resolve the promise with true\n resolve(true);\n }\n });\n });\n }\n\n kill() {\n this.taskHandle.stdin.destroy();\n this.taskHandle.stderr.destroy();\n this.taskHandle.stdout.destroy();\n this.taskHandle.kill('SIGINT');\n this.taskHandle.unref();\n }\n}\n\n/**\n * Initialize a git repository in the given directory\n * @param projectDir\n */\nexport function initGit(projectDir: string): void {\n try {\n execSync('git init', { cwd: projectDir });\n // Add all files to the git repo\n execSync('git add -A', { cwd: projectDir });\n // Add author info to avoid git commit error\n execSync('git config user.email test@test.sentry.io', { cwd: projectDir });\n execSync('git config user.name Test', { cwd: projectDir });\n execSync('git commit -m init', { cwd: projectDir });\n } catch (e) {\n log.error('Error initializing git');\n log.error(e);\n }\n}\n\n/**\n * Cleanup the git repository in the given directory\n *\n * Caution! Make sure `projectDir` is a test project directory,\n * if in doubt, please commit your local non-test changes first!\n * @param projectDir\n */\nexport function cleanupGit(projectDir: string): void {\n try {\n // Remove the .git directory\n execSync(`rm -rf ${projectDir}/.git`);\n } catch (e) {\n log.error('Error cleaning up git');\n log.error(e);\n }\n}\n\n/**\n * Revert local changes in the given directory\n *\n * Caution! Make sure `projectDir` is a test project directory,\n * if in doubt, please commit your local non-test changes first!\n *\n * @param projectDir\n */\nexport function revertLocalChanges(projectDir: string): void {\n try {\n // Revert tracked files\n execSync('git checkout .', { cwd: projectDir });\n // Revert untracked files\n execSync('git clean -fd .', { cwd: projectDir });\n } catch (e) {\n log.error('Error reverting local changes');\n log.error(e);\n }\n}\n\n/**\n * Start the wizard instance with the given integration and project directory\n * @param integration\n * @param projectDir\n *\n * @returns WizardTestEnv\n */\nexport function startWizardInstance(\n integration: Integration,\n projectDir: string,\n debug = false,\n): WizardTestEnv {\n const binPath = path.join(__dirname, '../../dist/bin.js');\n\n revertLocalChanges(projectDir);\n cleanupGit(projectDir);\n initGit(projectDir);\n\n return new WizardTestEnv(\n 'node',\n [\n binPath,\n '--debug',\n '-i',\n integration,\n '--preSelectedProject.authToken',\n TEST_ARGS.AUTH_TOKEN,\n '--preSelectedProject.dsn',\n TEST_ARGS.PROJECT_DSN,\n '--preSelectedProject.orgSlug',\n TEST_ARGS.ORG_SLUG,\n '--preSelectedProject.projectSlug',\n TEST_ARGS.PROJECT_SLUG,\n ],\n { cwd: projectDir, debug },\n );\n}\n\n/**\n * Create a file with the given content\n *\n * @param filePath\n * @param content\n */\nexport function createFile(filePath: string, content?: string) {\n return fs.writeFileSync(filePath, content || '');\n}\n\n/**\n * Modify the file with the new content\n *\n * @param filePath\n * @param oldContent\n * @param newContent\n */\nexport function modifyFile(\n filePath: string,\n replaceMap: Record<string, string>,\n) {\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n let newFileContent = fileContent;\n\n for (const [oldContent, newContent] of Object.entries(replaceMap)) {\n newFileContent = newFileContent.replace(oldContent, newContent);\n }\n\n fs.writeFileSync(filePath, newFileContent);\n}\n\n/**\n * Read the file contents and check if it contains the given content\n *\n * @param {string} filePath\n * @param {(string | string[])} content\n */\nexport function checkFileContents(\n filePath: string,\n content: string | string[],\n) {\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n const contentArray = Array.isArray(content) ? content : [content];\n\n for (const c of contentArray) {\n expect(fileContent).toContain(c);\n }\n}\n\n/**\n * Check if the file exists\n *\n * @param filePath\n */\nexport function checkFileExists(filePath: string) {\n expect(fs.existsSync(filePath)).toBe(true);\n}\n\n/**\n * Check if the package.json contains the given integration\n *\n * @param projectDir\n * @param integration\n */\nexport function checkPackageJson(projectDir: string, integration: Integration) {\n checkFileContents(`${projectDir}/package.json`, `@sentry/${integration}`);\n}\n\n/**\n * Check if the .sentryclirc contains the auth token\n *\n * @param projectDir\n */\nexport function checkSentryCliRc(projectDir: string) {\n checkFileContents(\n `${projectDir}/.sentryclirc`,\n `token=${TEST_ARGS.AUTH_TOKEN}`,\n );\n}\n\n/**\n * Check if the .env.sentry-build-plugin contains the auth token\n * @param projectDir\n */\nexport function checkEnvBuildPlugin(projectDir: string) {\n checkFileContents(\n `${projectDir}/.env.sentry-build-plugin`,\n `SENTRY_AUTH_TOKEN=${TEST_ARGS.AUTH_TOKEN}`,\n );\n}\n\n/**\n * Check if the project builds\n * @param projectDir\n */\nexport async function checkIfBuilds(\n projectDir: string,\n expectedOutput: string,\n) {\n const testEnv = new WizardTestEnv('npm', ['run', 'build'], {\n cwd: projectDir,\n });\n\n await expect(\n testEnv.waitForOutput(expectedOutput, {\n timeout: 120_000,\n }),\n ).resolves.toBe(true);\n}\n\n/**\n * Check if the project runs on dev mode\n * @param projectDir\n * @param expectedOutput\n */\nexport async function checkIfRunsOnDevMode(\n projectDir: string,\n expectedOutput: string,\n) {\n const testEnv = new WizardTestEnv('npm', ['run', 'dev'], { cwd: projectDir });\n\n await expect(\n testEnv.waitForOutput(expectedOutput, {\n timeout: 120_000,\n }),\n ).resolves.toBe(true);\n testEnv.kill();\n}\n\n/**\n * Check if the project runs on prod mode\n * @param projectDir\n * @param expectedOutput\n */\nexport async function checkIfRunsOnProdMode(\n projectDir: string,\n expectedOutput: string,\n startCommand = 'start',\n) {\n const testEnv = new WizardTestEnv('npm', ['run', startCommand], {\n cwd: projectDir,\n });\n\n await expect(\n testEnv.waitForOutput(expectedOutput, {\n timeout: 120_000,\n }),\n ).resolves.toBe(true);\n testEnv.kill();\n}\n"]}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentry/wizard",
3
- "version": "3.35.0",
3
+ "version": "3.37.0",
4
4
  "homepage": "https://github.com/getsentry/sentry-wizard",
5
5
  "repository": "https://github.com/getsentry/sentry-wizard",
6
6
  "description": "Sentry wizard helping you to configure your project",
@@ -21,7 +21,7 @@ var pluginKts = function (version) {
21
21
  return "\n id(\"io.sentry.android.gradle\") version \"".concat(version, "\"\n");
22
22
  };
23
23
  exports.pluginKts = pluginKts;
24
- var manifest = function (dsn) { return "\n <!-- Required: set your sentry.io project identifier (DSN) -->\n <meta-data android:name=\"io.sentry.dsn\" android:value=\"".concat(dsn, "\" />\n\n <!-- enable automatic breadcrumbs for user interactions (clicks, swipes, scrolls) -->\n <meta-data android:name=\"io.sentry.traces.user-interaction.enable\" android:value=\"true\" />\n <!-- enable screenshot for crashes (could contain sensitive/PII data) -->\n <meta-data android:name=\"io.sentry.attach-screenshot\" android:value=\"true\" />\n <!-- enable view hierarchy for crashes -->\n <meta-data android:name=\"io.sentry.attach-view-hierarchy\" android:value=\"true\" />\n\n <!-- enable the performance API by setting a sample-rate, adjust in production env -->\n <meta-data android:name=\"io.sentry.traces.sample-rate\" android:value=\"1.0\" />\n <!-- enable profiling when starting transactions, adjust in production env -->\n <meta-data android:name=\"io.sentry.traces.profiling.sample-rate\" android:value=\"1.0\" />\n"); };
24
+ var manifest = function (dsn) { return "\n <!-- Required: set your sentry.io project identifier (DSN) -->\n <meta-data android:name=\"io.sentry.dsn\" android:value=\"".concat(dsn, "\" />\n\n <!-- enable automatic breadcrumbs for user interactions (clicks, swipes, scrolls) -->\n <meta-data android:name=\"io.sentry.traces.user-interaction.enable\" android:value=\"true\" />\n <!-- enable screenshot for crashes (could contain sensitive/PII data) -->\n <meta-data android:name=\"io.sentry.attach-screenshot\" android:value=\"true\" />\n <!-- enable view hierarchy for crashes -->\n <meta-data android:name=\"io.sentry.attach-view-hierarchy\" android:value=\"true\" />\n\n <!-- enable the performance API by setting a sample-rate, adjust in production env -->\n <meta-data android:name=\"io.sentry.traces.sample-rate\" android:value=\"1.0\" />\n"); };
25
25
  exports.manifest = manifest;
26
26
  exports.sentryImport = "import io.sentry.Sentry;\n";
27
27
  exports.sentryImportKt = "import io.sentry.Sentry\n";
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/android/templates.ts"],"names":[],"mappings":";;;AAAO,IAAM,YAAY,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,kEAEP,OAAO,aAGnD;AALmD,CAKnD,CAAC;AALW,QAAA,YAAY,gBAKvB;AAEK,IAAM,eAAe,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,sEAET,OAAO,cAGpD;AALsD,CAKtD,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEK,IAAM,MAAM,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,uDACD,OAAO,QACnD;AAF6C,CAE7C,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEK,IAAM,SAAS,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,2DACH,OAAO,SACpD;AAFgD,CAEhD,CAAC;AAFW,QAAA,SAAS,aAEpB;AAEK,IAAM,QAAQ,GAAG,UAAC,GAAW,IAAK,OAAA,8IAEoB,GAAG,w2BAa/D,EAfwC,CAexC,CAAC;AAfW,QAAA,QAAQ,YAenB;AAEW,QAAA,YAAY,GAAG,4BAA4B,CAAC;AAE5C,QAAA,cAAc,GAAG,2BAA2B,CAAC;AAE7C,QAAA,gBAAgB,GAAG,2VAS/B,CAAC;AAEW,QAAA,kBAAkB,GAAG,4VASjC,CAAC;AAEK,IAAM,aAAa,GAAG,UAAC,OAAe,EAAE,WAAmB,IAAK,OAAA,oCAG1D,OAAO,qCACC,WAAW,mMAM/B,EAVsE,CAUtE,CAAC;AAVW,QAAA,aAAa,iBAUxB;AAEK,IAAM,gBAAgB,GAAG,UAAC,OAAe,EAAE,WAAmB,IAAK,OAAA,sCAG3D,OAAO,wCACC,WAAW,uMAMjC,EAVyE,CAUzE,CAAC;AAVW,QAAA,gBAAgB,oBAU3B","sourcesContent":["export const pluginsBlock = (version = '3.12.0') => `\nplugins {\n id 'io.sentry.android.gradle' version '${version}'\n}\n\n`;\n\nexport const pluginsBlockKts = (version = '3.12.0') => `\nplugins {\n id(\"io.sentry.android.gradle\") version \"${version}\"\n}\n\n`;\n\nexport const plugin = (version = '3.12.0') => `\n id 'io.sentry.android.gradle' version '${version}'\n`;\n\nexport const pluginKts = (version = '3.12.0') => `\n id(\"io.sentry.android.gradle\") version \"${version}\"\n`;\n\nexport const manifest = (dsn: string) => `\n <!-- Required: set your sentry.io project identifier (DSN) -->\n <meta-data android:name=\"io.sentry.dsn\" android:value=\"${dsn}\" />\n\n <!-- enable automatic breadcrumbs for user interactions (clicks, swipes, scrolls) -->\n <meta-data android:name=\"io.sentry.traces.user-interaction.enable\" android:value=\"true\" />\n <!-- enable screenshot for crashes (could contain sensitive/PII data) -->\n <meta-data android:name=\"io.sentry.attach-screenshot\" android:value=\"true\" />\n <!-- enable view hierarchy for crashes -->\n <meta-data android:name=\"io.sentry.attach-view-hierarchy\" android:value=\"true\" />\n\n <!-- enable the performance API by setting a sample-rate, adjust in production env -->\n <meta-data android:name=\"io.sentry.traces.sample-rate\" android:value=\"1.0\" />\n <!-- enable profiling when starting transactions, adjust in production env -->\n <meta-data android:name=\"io.sentry.traces.profiling.sample-rate\" android:value=\"1.0\" />\n`;\n\nexport const sentryImport = `import io.sentry.Sentry;\\n`;\n\nexport const sentryImportKt = `import io.sentry.Sentry\\n`;\n\nexport const testErrorSnippet = `\n // waiting for view to draw to better represent a captured error with a screenshot\n findViewById(android.R.id.content).getViewTreeObserver().addOnGlobalLayoutListener(() -> {\n try {\n throw new Exception(\"This app uses Sentry! :)\");\n } catch (Exception e) {\n Sentry.captureException(e);\n }\n });\n`;\n\nexport const testErrorSnippetKt = `\n // waiting for view to draw to better represent a captured error with a screenshot\n findViewById<android.view.View>(android.R.id.content).viewTreeObserver.addOnGlobalLayoutListener {\n try {\n throw Exception(\"This app uses Sentry! :)\")\n } catch (e: Exception) {\n Sentry.captureException(e)\n }\n }\n`;\n\nexport const sourceContext = (orgSlug: string, projectSlug: string) => `\n\nsentry {\n org = \"${orgSlug}\"\n projectName = \"${projectSlug}\"\n\n // this will upload your source code to Sentry to show it as part of the stack traces\n // disable if you don't want to expose your sources\n includeSourceContext = true\n}\n`;\n\nexport const sourceContextKts = (orgSlug: string, projectSlug: string) => `\n\nsentry {\n org.set(\"${orgSlug}\")\n projectName.set(\"${projectSlug}\")\n\n // this will upload your source code to Sentry to show it as part of the stack traces\n // disable if you don't want to expose your sources\n includeSourceContext.set(true)\n}\n`;\n"]}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/android/templates.ts"],"names":[],"mappings":";;;AAAO,IAAM,YAAY,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,kEAEP,OAAO,aAGnD;AALmD,CAKnD,CAAC;AALW,QAAA,YAAY,gBAKvB;AAEK,IAAM,eAAe,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,sEAET,OAAO,cAGpD;AALsD,CAKtD,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEK,IAAM,MAAM,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,uDACD,OAAO,QACnD;AAF6C,CAE7C,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEK,IAAM,SAAS,GAAG,UAAC,OAAkB;IAAlB,wBAAA,EAAA,kBAAkB;IAAK,OAAA,2DACH,OAAO,SACpD;AAFgD,CAEhD,CAAC;AAFW,QAAA,SAAS,aAEpB;AAEK,IAAM,QAAQ,GAAG,UAAC,GAAW,IAAK,OAAA,8IAEoB,GAAG,mrBAW/D,EAbwC,CAaxC,CAAC;AAbW,QAAA,QAAQ,YAanB;AAEW,QAAA,YAAY,GAAG,4BAA4B,CAAC;AAE5C,QAAA,cAAc,GAAG,2BAA2B,CAAC;AAE7C,QAAA,gBAAgB,GAAG,2VAS/B,CAAC;AAEW,QAAA,kBAAkB,GAAG,4VASjC,CAAC;AAEK,IAAM,aAAa,GAAG,UAAC,OAAe,EAAE,WAAmB,IAAK,OAAA,oCAG1D,OAAO,qCACC,WAAW,mMAM/B,EAVsE,CAUtE,CAAC;AAVW,QAAA,aAAa,iBAUxB;AAEK,IAAM,gBAAgB,GAAG,UAAC,OAAe,EAAE,WAAmB,IAAK,OAAA,sCAG3D,OAAO,wCACC,WAAW,uMAMjC,EAVyE,CAUzE,CAAC;AAVW,QAAA,gBAAgB,oBAU3B","sourcesContent":["export const pluginsBlock = (version = '3.12.0') => `\nplugins {\n id 'io.sentry.android.gradle' version '${version}'\n}\n\n`;\n\nexport const pluginsBlockKts = (version = '3.12.0') => `\nplugins {\n id(\"io.sentry.android.gradle\") version \"${version}\"\n}\n\n`;\n\nexport const plugin = (version = '3.12.0') => `\n id 'io.sentry.android.gradle' version '${version}'\n`;\n\nexport const pluginKts = (version = '3.12.0') => `\n id(\"io.sentry.android.gradle\") version \"${version}\"\n`;\n\nexport const manifest = (dsn: string) => `\n <!-- Required: set your sentry.io project identifier (DSN) -->\n <meta-data android:name=\"io.sentry.dsn\" android:value=\"${dsn}\" />\n\n <!-- enable automatic breadcrumbs for user interactions (clicks, swipes, scrolls) -->\n <meta-data android:name=\"io.sentry.traces.user-interaction.enable\" android:value=\"true\" />\n <!-- enable screenshot for crashes (could contain sensitive/PII data) -->\n <meta-data android:name=\"io.sentry.attach-screenshot\" android:value=\"true\" />\n <!-- enable view hierarchy for crashes -->\n <meta-data android:name=\"io.sentry.attach-view-hierarchy\" android:value=\"true\" />\n\n <!-- enable the performance API by setting a sample-rate, adjust in production env -->\n <meta-data android:name=\"io.sentry.traces.sample-rate\" android:value=\"1.0\" />\n`;\n\nexport const sentryImport = `import io.sentry.Sentry;\\n`;\n\nexport const sentryImportKt = `import io.sentry.Sentry\\n`;\n\nexport const testErrorSnippet = `\n // waiting for view to draw to better represent a captured error with a screenshot\n findViewById(android.R.id.content).getViewTreeObserver().addOnGlobalLayoutListener(() -> {\n try {\n throw new Exception(\"This app uses Sentry! :)\");\n } catch (Exception e) {\n Sentry.captureException(e);\n }\n });\n`;\n\nexport const testErrorSnippetKt = `\n // waiting for view to draw to better represent a captured error with a screenshot\n findViewById<android.view.View>(android.R.id.content).viewTreeObserver.addOnGlobalLayoutListener {\n try {\n throw Exception(\"This app uses Sentry! :)\")\n } catch (e: Exception) {\n Sentry.captureException(e)\n }\n }\n`;\n\nexport const sourceContext = (orgSlug: string, projectSlug: string) => `\n\nsentry {\n org = \"${orgSlug}\"\n projectName = \"${projectSlug}\"\n\n // this will upload your source code to Sentry to show it as part of the stack traces\n // disable if you don't want to expose your sources\n includeSourceContext = true\n}\n`;\n\nexport const sourceContextKts = (orgSlug: string, projectSlug: string) => `\n\nsentry {\n org.set(\"${orgSlug}\")\n projectName.set(\"${projectSlug}\")\n\n // this will upload your source code to Sentry to show it as part of the stack traces\n // disable if you don't want to expose your sources\n includeSourceContext.set(true)\n}\n`;\n"]}
@@ -66,6 +66,7 @@ exports.runNuxtWizardWithTelemetry = exports.runNuxtWizard = void 0;
66
66
  // @ts-ignore - clack is ESM and TS complains about that. It works though
67
67
  var clack = __importStar(require("@clack/prompts"));
68
68
  var Sentry = __importStar(require("@sentry/node"));
69
+ var chalk_1 = __importDefault(require("chalk"));
69
70
  var semver_1 = require("semver");
70
71
  var telemetry_1 = require("../telemetry");
71
72
  var clack_utils_1 = require("../utils/clack-utils");
@@ -73,7 +74,6 @@ var package_json_1 = require("../utils/package-json");
73
74
  var sdk_setup_1 = require("./sdk-setup");
74
75
  var sdk_example_1 = require("./sdk-example");
75
76
  var utils_1 = require("./utils");
76
- var chalk_1 = __importDefault(require("chalk"));
77
77
  function runNuxtWizard(options) {
78
78
  return (0, telemetry_1.withTelemetry)({
79
79
  enabled: options.telemetryEnabled,
@@ -84,7 +84,7 @@ function runNuxtWizard(options) {
84
84
  exports.runNuxtWizard = runNuxtWizard;
85
85
  function runNuxtWizardWithTelemetry(options) {
86
86
  return __awaiter(this, void 0, void 0, function () {
87
- var packageJson, nuxtVersion, minVer, shouldContinue, _a, authToken, selectedProject, selfHosted, sentryUrl, sdkAlreadyInstalled, nuxtConfig, projectData, shouldCreateExamplePage, shouldCreateExampleButton, isV4, canCreateExamplePage;
87
+ var packageJson, nuxtVersion, minVer, shouldContinue, _a, authToken, selectedProject, selfHosted, sentryUrl, packageManager, sdkAlreadyInstalled, nuxtConfig, projectData, deploymentPlatform, shouldCreateExamplePage, shouldCreateExampleButton, isV4, canCreateExamplePage;
88
88
  var _this = this;
89
89
  return __generator(this, function (_b) {
90
90
  switch (_b.label) {
@@ -129,19 +129,26 @@ function runNuxtWizardWithTelemetry(options) {
129
129
  case 6: return [4 /*yield*/, (0, clack_utils_1.getOrAskForProjectData)(options, 'javascript-nuxt')];
130
130
  case 7:
131
131
  _a = _b.sent(), authToken = _a.authToken, selectedProject = _a.selectedProject, selfHosted = _a.selfHosted, sentryUrl = _a.sentryUrl;
132
+ return [4 /*yield*/, (0, clack_utils_1.getPackageManager)()];
133
+ case 8:
134
+ packageManager = _b.sent();
135
+ return [4 /*yield*/, (0, sdk_setup_1.addNuxtOverrides)(packageJson, packageManager, minVer)];
136
+ case 9:
137
+ _b.sent();
132
138
  sdkAlreadyInstalled = (0, package_json_1.hasPackageInstalled)('@sentry/nuxt', packageJson);
133
139
  Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);
134
140
  return [4 /*yield*/, (0, clack_utils_1.installPackage)({
135
141
  packageName: '@sentry/nuxt',
136
142
  alreadyInstalled: sdkAlreadyInstalled,
143
+ packageManager: packageManager,
137
144
  })];
138
- case 8:
145
+ case 10:
139
146
  _b.sent();
140
147
  return [4 /*yield*/, (0, clack_utils_1.addDotEnvSentryBuildPluginFile)(authToken)];
141
- case 9:
148
+ case 11:
142
149
  _b.sent();
143
150
  return [4 /*yield*/, (0, telemetry_1.traceStep)('load-nuxt-config', sdk_setup_1.getNuxtConfig)];
144
- case 10:
151
+ case 12:
145
152
  nuxtConfig = _b.sent();
146
153
  projectData = {
147
154
  org: selectedProject.organization.slug,
@@ -150,10 +157,13 @@ function runNuxtWizardWithTelemetry(options) {
150
157
  url: sentryUrl,
151
158
  selfHosted: selfHosted,
152
159
  };
160
+ return [4 /*yield*/, (0, sdk_setup_1.askDeploymentPlatform)()];
161
+ case 13:
162
+ deploymentPlatform = _b.sent();
153
163
  return [4 /*yield*/, (0, telemetry_1.traceStep)('configure-sdk', function () { return __awaiter(_this, void 0, void 0, function () {
154
164
  return __generator(this, function (_a) {
155
165
  switch (_a.label) {
156
- case 0: return [4 /*yield*/, (0, sdk_setup_1.addSDKModule)(nuxtConfig, projectData)];
166
+ case 0: return [4 /*yield*/, (0, sdk_setup_1.addSDKModule)(nuxtConfig, projectData, deploymentPlatform)];
157
167
  case 1:
158
168
  _a.sent();
159
169
  return [4 /*yield*/, (0, sdk_setup_1.createConfigFiles)(selectedProject.keys[0].dsn.public)];
@@ -163,41 +173,44 @@ function runNuxtWizardWithTelemetry(options) {
163
173
  }
164
174
  });
165
175
  }); })];
166
- case 11:
176
+ case 14:
167
177
  _b.sent();
168
178
  shouldCreateExamplePage = false;
169
179
  shouldCreateExampleButton = false;
170
180
  return [4 /*yield*/, (0, utils_1.isNuxtV4)(nuxtConfig, nuxtVersion)];
171
- case 12:
181
+ case 15:
172
182
  isV4 = _b.sent();
173
183
  return [4 /*yield*/, (0, sdk_example_1.supportsExamplePage)(isV4)];
174
- case 13:
184
+ case 16:
175
185
  canCreateExamplePage = _b.sent();
176
186
  Sentry.setTag('supports-example-page-creation', canCreateExamplePage);
177
- if (!canCreateExamplePage) return [3 /*break*/, 17];
187
+ if (!canCreateExamplePage) return [3 /*break*/, 20];
178
188
  return [4 /*yield*/, (0, clack_utils_1.askShouldCreateExamplePage)()];
179
- case 14:
189
+ case 17:
180
190
  shouldCreateExamplePage = _b.sent();
181
- if (!shouldCreateExamplePage) return [3 /*break*/, 16];
191
+ if (!shouldCreateExamplePage) return [3 /*break*/, 19];
182
192
  return [4 /*yield*/, (0, telemetry_1.traceStep)('create-example-page', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
183
193
  return [2 /*return*/, (0, sdk_example_1.createExamplePage)(isV4, projectData)];
184
194
  }); }); })];
185
- case 15:
186
- _b.sent();
187
- _b.label = 16;
188
- case 16: return [3 /*break*/, 20];
189
- case 17: return [4 /*yield*/, (0, clack_utils_1.askShouldCreateExampleComponent)()];
190
195
  case 18:
196
+ _b.sent();
197
+ _b.label = 19;
198
+ case 19: return [3 /*break*/, 23];
199
+ case 20: return [4 /*yield*/, (0, clack_utils_1.askShouldCreateExampleComponent)()];
200
+ case 21:
191
201
  shouldCreateExampleButton = _b.sent();
192
- if (!shouldCreateExampleButton) return [3 /*break*/, 20];
202
+ if (!shouldCreateExampleButton) return [3 /*break*/, 23];
193
203
  return [4 /*yield*/, (0, telemetry_1.traceStep)('create-example-component', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
194
204
  return [2 /*return*/, (0, sdk_example_1.createExampleComponent)(isV4)];
195
205
  }); }); })];
196
- case 19:
206
+ case 22:
197
207
  _b.sent();
198
- _b.label = 20;
199
- case 20: return [4 /*yield*/, (0, clack_utils_1.runPrettierIfInstalled)()];
200
- case 21:
208
+ _b.label = 23;
209
+ case 23: return [4 /*yield*/, (0, clack_utils_1.runPrettierIfInstalled)()];
210
+ case 24:
211
+ _b.sent();
212
+ return [4 /*yield*/, (0, sdk_setup_1.confirmReadImportDocs)(deploymentPlatform)];
213
+ case 25:
201
214
  _b.sent();
202
215
  clack.outro(buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton));
203
216
  return [2 /*return*/];
@@ -214,7 +227,7 @@ function buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton) {
214
227
  if (shouldCreateExampleButton) {
215
228
  msg += "\n\nYou can validate your setup by adding the ".concat(chalk_1.default.cyan('`SentryExampleButton`'), " component to a page and triggering it.");
216
229
  }
217
- msg += "\n\nCheck out the SDK documentation for further configuration:\nhttps://docs.sentry.io/platforms/javascript/guides/nuxt/";
230
+ msg += "\n\nCheck out the SDK documentation for further configuration: ".concat(chalk_1.default.underline('https://docs.sentry.io/platforms/javascript/guides/nuxt/'));
218
231
  return msg;
219
232
  }
220
233
  //# sourceMappingURL=nuxt-wizard.js.map