@sentry/wizard 3.35.0 → 3.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/dist/e2e-tests/tests/nuxt-3.test.js +50 -24
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-4.test.js +50 -24
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
- package/dist/e2e-tests/utils/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/android/templates.js +1 -1
- package/dist/src/android/templates.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +28 -21
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/nuxt/sdk-setup.d.ts +3 -0
- package/dist/src/nuxt/sdk-setup.js +52 -1
- package/dist/src/nuxt/sdk-setup.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +4 -1
- package/dist/src/utils/clack-utils.js +67 -21
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/src/utils/package-json.d.ts +5 -0
- package/dist/src/utils/package-json.js.map +1 -1
- package/dist/src/utils/package-manager.d.ts +1 -0
- package/dist/src/utils/package-manager.js +129 -0
- package/dist/src/utils/package-manager.js.map +1 -1
- package/e2e-tests/tests/nuxt-3.test.ts +26 -3
- package/e2e-tests/tests/nuxt-4.test.ts +25 -2
- package/e2e-tests/utils/index.ts +4 -1
- package/package.json +1 -1
- package/src/android/templates.ts +0 -2
- package/src/nuxt/nuxt-wizard.ts +13 -2
- package/src/nuxt/sdk-setup.ts +39 -0
- package/src/utils/clack-utils.ts +42 -5
- package/src/utils/package-json.ts +5 -0
- package/src/utils/package-manager.ts +66 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.36.0
|
|
4
|
+
|
|
5
|
+
- Remove Profiling for Android ([#720](https://github.com/getsentry/sentry-wizard/pull/720))
|
|
6
|
+
- Add downgrade path to nitro 2.9.7 ([#725](https://github.com/getsentry/sentry-wizard/pull/725))
|
|
7
|
+
|
|
3
8
|
## 3.35.0
|
|
4
9
|
|
|
5
10
|
- feat: Pin JS SDK versions to v8 (#712)
|
|
@@ -84,52 +84,78 @@ 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,
|
|
88
|
-
return __generator(this, function (
|
|
89
|
-
switch (
|
|
87
|
+
var integration, wizardInstance, packageManagerPrompted, nitropackOverridePrompted, _a, nftOverridePrompted, _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 =
|
|
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
100
|
[utils_1.KEYS.DOWN, utils_1.KEYS.ENTER],
|
|
101
|
-
//
|
|
102
|
-
'to
|
|
101
|
+
// Do you want to install version 2.9.7 of nitropack and add an override to package.json?
|
|
102
|
+
'Do you want to add an override for nitropack version ~2.9.7?', {
|
|
103
103
|
timeout: 240000,
|
|
104
104
|
})];
|
|
105
105
|
case 2:
|
|
106
|
-
_a = (
|
|
107
|
-
|
|
106
|
+
_a = (_f.sent());
|
|
107
|
+
_f.label = 3;
|
|
108
108
|
case 3:
|
|
109
|
-
|
|
110
|
-
_b =
|
|
109
|
+
nitropackOverridePrompted = _a;
|
|
110
|
+
_b = nitropackOverridePrompted;
|
|
111
111
|
if (!_b) return [3 /*break*/, 5];
|
|
112
|
-
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
|
|
113
|
-
//
|
|
114
|
-
'
|
|
112
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
|
|
113
|
+
// Selecting `yes` to downgrade nitropack
|
|
114
|
+
utils_1.KEYS.ENTER, 'Do you want to add an override for @vercel/nft version ^0.27.4?',
|
|
115
|
+
// 'Do you want to install version',
|
|
116
|
+
{
|
|
117
|
+
timeout: 240000,
|
|
118
|
+
})];
|
|
115
119
|
case 4:
|
|
116
|
-
_b = (
|
|
117
|
-
|
|
120
|
+
_b = (_f.sent());
|
|
121
|
+
_f.label = 5;
|
|
118
122
|
case 5:
|
|
119
|
-
|
|
120
|
-
_c =
|
|
123
|
+
nftOverridePrompted = _b;
|
|
124
|
+
_c = nftOverridePrompted;
|
|
121
125
|
if (!_c) return [3 /*break*/, 7];
|
|
122
|
-
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
|
|
123
|
-
|
|
126
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_1.KEYS.ENTER,
|
|
127
|
+
// "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
|
|
128
|
+
'Do you want to enable', {
|
|
129
|
+
timeout: 240000,
|
|
124
130
|
})];
|
|
125
131
|
case 6:
|
|
126
|
-
_c = (
|
|
127
|
-
|
|
132
|
+
_c = (_f.sent());
|
|
133
|
+
_f.label = 7;
|
|
128
134
|
case 7:
|
|
129
|
-
_c;
|
|
130
|
-
|
|
135
|
+
tracingOptionPrompted = _c;
|
|
136
|
+
_d = tracingOptionPrompted;
|
|
137
|
+
if (!_d) return [3 /*break*/, 9];
|
|
138
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_1.KEYS.ENTER,
|
|
139
|
+
// "Do you want to enable Sentry Session Replay", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.
|
|
140
|
+
'to get a video-like reproduction of errors during a user session?')];
|
|
131
141
|
case 8:
|
|
132
|
-
_d.sent();
|
|
142
|
+
_d = (_f.sent());
|
|
143
|
+
_f.label = 9;
|
|
144
|
+
case 9:
|
|
145
|
+
replayOptionPrompted = _d;
|
|
146
|
+
_e = replayOptionPrompted;
|
|
147
|
+
if (!_e) return [3 /*break*/, 11];
|
|
148
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_1.KEYS.ENTER], 'Do you want to create an example page', {
|
|
149
|
+
optional: true,
|
|
150
|
+
})];
|
|
151
|
+
case 10:
|
|
152
|
+
_e = (_f.sent());
|
|
153
|
+
_f.label = 11;
|
|
154
|
+
case 11:
|
|
155
|
+
_e;
|
|
156
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_1.KEYS.ENTER, utils_1.KEYS.ENTER], 'Successfully installed the Sentry Nuxt SDK!')];
|
|
157
|
+
case 12:
|
|
158
|
+
_f.sent();
|
|
133
159
|
wizardInstance.kill();
|
|
134
160
|
return [2 /*return*/];
|
|
135
161
|
}
|
|
@@ -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":"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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 nitropackOverridePrompted =\n packageManagerPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yarn` as the package manager\n [KEYS.DOWN, KEYS.ENTER],\n // Do you want to install version 2.9.7 of nitropack and add an override to package.json?\n 'Do you want to add an override for nitropack version ~2.9.7?',\n {\n timeout: 240_000,\n },\n ));\n\n const nftOverridePrompted =\n nitropackOverridePrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yes` to downgrade nitropack\n KEYS.ENTER,\n 'Do you want to add an override for @vercel/nft version ^0.27.4?',\n // 'Do you want to install version',\n {\n timeout: 240_000,\n },\n ));\n\n const tracingOptionPrompted =\n nftOverridePrompted &&\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,78 @@ 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,
|
|
89
|
-
return __generator(this, function (
|
|
90
|
-
switch (
|
|
88
|
+
var integration, wizardInstance, packageManagerPrompted, nitropackOverridePrompted, _a, nftOverridePrompted, _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 =
|
|
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
101
|
[utils_2.KEYS.DOWN, utils_2.KEYS.ENTER],
|
|
102
|
-
//
|
|
103
|
-
'to
|
|
102
|
+
// Do you want to install version 2.9.7 of nitropack and add an override to package.json?
|
|
103
|
+
'Do you want to add an override for nitropack version ~2.9.7?', {
|
|
104
104
|
timeout: 240000,
|
|
105
105
|
})];
|
|
106
106
|
case 2:
|
|
107
|
-
_a = (
|
|
108
|
-
|
|
107
|
+
_a = (_f.sent());
|
|
108
|
+
_f.label = 3;
|
|
109
109
|
case 3:
|
|
110
|
-
|
|
111
|
-
_b =
|
|
110
|
+
nitropackOverridePrompted = _a;
|
|
111
|
+
_b = nitropackOverridePrompted;
|
|
112
112
|
if (!_b) return [3 /*break*/, 5];
|
|
113
|
-
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
|
|
114
|
-
//
|
|
115
|
-
'
|
|
113
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
|
|
114
|
+
// Selecting `yes` to downgrade nitropack
|
|
115
|
+
utils_2.KEYS.ENTER, 'Do you want to add an override for @vercel/nft version ^0.27.4?',
|
|
116
|
+
// 'Do you want to install version',
|
|
117
|
+
{
|
|
118
|
+
timeout: 240000,
|
|
119
|
+
})];
|
|
116
120
|
case 4:
|
|
117
|
-
_b = (
|
|
118
|
-
|
|
121
|
+
_b = (_f.sent());
|
|
122
|
+
_f.label = 5;
|
|
119
123
|
case 5:
|
|
120
|
-
|
|
121
|
-
_c =
|
|
124
|
+
nftOverridePrompted = _b;
|
|
125
|
+
_c = nftOverridePrompted;
|
|
122
126
|
if (!_c) return [3 /*break*/, 7];
|
|
123
|
-
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(
|
|
124
|
-
|
|
127
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput(utils_2.KEYS.ENTER,
|
|
128
|
+
// "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
|
|
129
|
+
'Do you want to enable', {
|
|
130
|
+
timeout: 240000,
|
|
125
131
|
})];
|
|
126
132
|
case 6:
|
|
127
|
-
_c = (
|
|
128
|
-
|
|
133
|
+
_c = (_f.sent());
|
|
134
|
+
_f.label = 7;
|
|
129
135
|
case 7:
|
|
130
|
-
_c;
|
|
131
|
-
|
|
136
|
+
tracingOptionPrompted = _c;
|
|
137
|
+
_d = tracingOptionPrompted;
|
|
138
|
+
if (!_d) return [3 /*break*/, 9];
|
|
139
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER],
|
|
140
|
+
// "Do you want to enable Sentry Session Replay", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.
|
|
141
|
+
'to get a video-like reproduction of errors during a user session?')];
|
|
132
142
|
case 8:
|
|
133
|
-
_d.sent();
|
|
143
|
+
_d = (_f.sent());
|
|
144
|
+
_f.label = 9;
|
|
145
|
+
case 9:
|
|
146
|
+
replayOptionPrompted = _d;
|
|
147
|
+
_e = replayOptionPrompted;
|
|
148
|
+
if (!_e) return [3 /*break*/, 11];
|
|
149
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER], 'Do you want to create an example page', {
|
|
150
|
+
optional: true,
|
|
151
|
+
})];
|
|
152
|
+
case 10:
|
|
153
|
+
_e = (_f.sent());
|
|
154
|
+
_f.label = 11;
|
|
155
|
+
case 11:
|
|
156
|
+
_e;
|
|
157
|
+
return [4 /*yield*/, wizardInstance.sendStdinAndWaitForOutput([utils_2.KEYS.ENTER, utils_2.KEYS.ENTER], 'Successfully installed the Sentry Nuxt SDK!')];
|
|
158
|
+
case 12:
|
|
159
|
+
_f.sent();
|
|
134
160
|
wizardInstance.kill();
|
|
135
161
|
return [2 /*return*/];
|
|
136
162
|
}
|
|
@@ -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 nitropackOverridePrompted =\n packageManagerPrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yarn` as the package manager\n [KEYS.DOWN, KEYS.ENTER],\n // Do you want to install version 2.9.7 of nitropack and add an override to package.json?\n 'Do you want to add an override for nitropack version ~2.9.7?',\n {\n timeout: 240_000,\n },\n ));\n\n const nftOverridePrompted =\n nitropackOverridePrompted &&\n (await wizardInstance.sendStdinAndWaitForOutput(\n // Selecting `yes` to downgrade nitropack\n KEYS.ENTER,\n 'Do you want to add an override for @vercel/nft version ^0.27.4?',\n // 'Do you want to install version',\n {\n timeout: 240_000,\n },\n ));\n\n const tracingOptionPrompted =\n nftOverridePrompted &&\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":"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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(\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.
|
|
3
|
+
"version": "3.36.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
|
|
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,
|
|
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, 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)(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
|
|
145
|
+
case 10:
|
|
139
146
|
_b.sent();
|
|
140
147
|
return [4 /*yield*/, (0, clack_utils_1.addDotEnvSentryBuildPluginFile)(authToken)];
|
|
141
|
-
case
|
|
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
|
|
151
|
+
case 12:
|
|
145
152
|
nuxtConfig = _b.sent();
|
|
146
153
|
projectData = {
|
|
147
154
|
org: selectedProject.organization.slug,
|
|
@@ -163,41 +170,41 @@ function runNuxtWizardWithTelemetry(options) {
|
|
|
163
170
|
}
|
|
164
171
|
});
|
|
165
172
|
}); })];
|
|
166
|
-
case
|
|
173
|
+
case 13:
|
|
167
174
|
_b.sent();
|
|
168
175
|
shouldCreateExamplePage = false;
|
|
169
176
|
shouldCreateExampleButton = false;
|
|
170
177
|
return [4 /*yield*/, (0, utils_1.isNuxtV4)(nuxtConfig, nuxtVersion)];
|
|
171
|
-
case
|
|
178
|
+
case 14:
|
|
172
179
|
isV4 = _b.sent();
|
|
173
180
|
return [4 /*yield*/, (0, sdk_example_1.supportsExamplePage)(isV4)];
|
|
174
|
-
case
|
|
181
|
+
case 15:
|
|
175
182
|
canCreateExamplePage = _b.sent();
|
|
176
183
|
Sentry.setTag('supports-example-page-creation', canCreateExamplePage);
|
|
177
|
-
if (!canCreateExamplePage) return [3 /*break*/,
|
|
184
|
+
if (!canCreateExamplePage) return [3 /*break*/, 19];
|
|
178
185
|
return [4 /*yield*/, (0, clack_utils_1.askShouldCreateExamplePage)()];
|
|
179
|
-
case
|
|
186
|
+
case 16:
|
|
180
187
|
shouldCreateExamplePage = _b.sent();
|
|
181
|
-
if (!shouldCreateExamplePage) return [3 /*break*/,
|
|
188
|
+
if (!shouldCreateExamplePage) return [3 /*break*/, 18];
|
|
182
189
|
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
190
|
return [2 /*return*/, (0, sdk_example_1.createExamplePage)(isV4, projectData)];
|
|
184
191
|
}); }); })];
|
|
185
|
-
case
|
|
192
|
+
case 17:
|
|
186
193
|
_b.sent();
|
|
187
|
-
_b.label =
|
|
188
|
-
case
|
|
189
|
-
case
|
|
190
|
-
case
|
|
194
|
+
_b.label = 18;
|
|
195
|
+
case 18: return [3 /*break*/, 22];
|
|
196
|
+
case 19: return [4 /*yield*/, (0, clack_utils_1.askShouldCreateExampleComponent)()];
|
|
197
|
+
case 20:
|
|
191
198
|
shouldCreateExampleButton = _b.sent();
|
|
192
|
-
if (!shouldCreateExampleButton) return [3 /*break*/,
|
|
199
|
+
if (!shouldCreateExampleButton) return [3 /*break*/, 22];
|
|
193
200
|
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
201
|
return [2 /*return*/, (0, sdk_example_1.createExampleComponent)(isV4)];
|
|
195
202
|
}); }); })];
|
|
196
|
-
case 19:
|
|
197
|
-
_b.sent();
|
|
198
|
-
_b.label = 20;
|
|
199
|
-
case 20: return [4 /*yield*/, (0, clack_utils_1.runPrettierIfInstalled)()];
|
|
200
203
|
case 21:
|
|
204
|
+
_b.sent();
|
|
205
|
+
_b.label = 22;
|
|
206
|
+
case 22: return [4 /*yield*/, (0, clack_utils_1.runPrettierIfInstalled)()];
|
|
207
|
+
case 23:
|
|
201
208
|
_b.sent();
|
|
202
209
|
clack.outro(buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton));
|
|
203
210
|
return [2 /*return*/];
|