@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
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/utils/package-json.ts"],"names":[],"mappings":";;;AAYA;;;;;GAKG;AACH,SAAgB,4BAA4B,CAC1C,gBAA0B,EAC1B,WAA2B;IAE3B,OAAO,gBAAgB;SACpB,GAAG,CAAC,UAAC,WAAW,IAAK,OAAA,CAAC;QACrB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC;KACrD,CAAC,EAHoB,CAGpB,CAAC;SACF,IAAI,CAAC,UAAC,UAAU,IAA+B,OAAA,CAAC,CAAC,UAAU,CAAC,OAAO,EAApB,CAAoB,CAAC,CAAC;AAC1E,CAAC;AAVD,oEAUC;AAED,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,WAA2B;IAE3B,OAAO,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC;AACnE,CAAC;AALD,kDAKC;AAED,SAAgB,iBAAiB,CAC/B,WAAmB,EACnB,WAA2B;;IAE3B,OAAO,CACL,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,YAAY,0CAAG,WAAW,CAAC;SACxC,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,0CAAG,WAAW,CAAC,CAAA,CAC5C,CAAC;AACJ,CAAC;AARD,8CAQC","sourcesContent":["export type PackageDotJson = {\n version?: string;\n scripts?: Record<string, string | undefined>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n};\n\ntype NpmPackage = {\n name: string;\n version: string;\n};\n\n/**\n * Checks if @param packageJson has any of the @param packageNamesList package names\n * listed as a dependency or devDependency.\n * If so, it returns the first package name that is found, including the\n * version (range) specified in the package.json.\n */\nexport function findInstalledPackageFromList(\n packageNamesList: string[],\n packageJson: PackageDotJson,\n): NpmPackage | undefined {\n return packageNamesList\n .map((packageName) => ({\n name: packageName,\n version: getPackageVersion(packageName, packageJson),\n }))\n .find((sdkPackage): sdkPackage is NpmPackage => !!sdkPackage.version);\n}\n\nexport function hasPackageInstalled(\n packageName: string,\n packageJson: PackageDotJson,\n): boolean {\n return getPackageVersion(packageName, packageJson) !== undefined;\n}\n\nexport function getPackageVersion(\n packageName: string,\n packageJson: PackageDotJson,\n): string | undefined {\n return (\n packageJson?.dependencies?.[packageName] ||\n packageJson?.devDependencies?.[packageName]\n );\n}\n"]}
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/utils/package-json.ts"],"names":[],"mappings":";;;AAiBA;;;;;GAKG;AACH,SAAgB,4BAA4B,CAC1C,gBAA0B,EAC1B,WAA2B;IAE3B,OAAO,gBAAgB;SACpB,GAAG,CAAC,UAAC,WAAW,IAAK,OAAA,CAAC;QACrB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC;KACrD,CAAC,EAHoB,CAGpB,CAAC;SACF,IAAI,CAAC,UAAC,UAAU,IAA+B,OAAA,CAAC,CAAC,UAAU,CAAC,OAAO,EAApB,CAAoB,CAAC,CAAC;AAC1E,CAAC;AAVD,oEAUC;AAED,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,WAA2B;IAE3B,OAAO,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC;AACnE,CAAC;AALD,kDAKC;AAED,SAAgB,iBAAiB,CAC/B,WAAmB,EACnB,WAA2B;;IAE3B,OAAO,CACL,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,YAAY,0CAAG,WAAW,CAAC;SACxC,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,0CAAG,WAAW,CAAC,CAAA,CAC5C,CAAC;AACJ,CAAC;AARD,8CAQC","sourcesContent":["export type PackageDotJson = {\n version?: string;\n scripts?: Record<string, string | undefined>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n resolutions?: Record<string, string>;\n overrides?: Record<string, string>;\n pnpm?: {\n overrides?: Record<string, string>;\n };\n};\n\ntype NpmPackage = {\n name: string;\n version: string;\n};\n\n/**\n * Checks if @param packageJson has any of the @param packageNamesList package names\n * listed as a dependency or devDependency.\n * If so, it returns the first package name that is found, including the\n * version (range) specified in the package.json.\n */\nexport function findInstalledPackageFromList(\n packageNamesList: string[],\n packageJson: PackageDotJson,\n): NpmPackage | undefined {\n return packageNamesList\n .map((packageName) => ({\n name: packageName,\n version: getPackageVersion(packageName, packageJson),\n }))\n .find((sdkPackage): sdkPackage is NpmPackage => !!sdkPackage.version);\n}\n\nexport function hasPackageInstalled(\n packageName: string,\n packageJson: PackageDotJson,\n): boolean {\n return getPackageVersion(packageName, packageJson) !== undefined;\n}\n\nexport function getPackageVersion(\n packageName: string,\n packageJson: PackageDotJson,\n): string | undefined {\n return (\n packageJson?.dependencies?.[packageName] ||\n packageJson?.devDependencies?.[packageName]\n );\n}\n"]}
@@ -7,6 +7,7 @@ export interface PackageManager {
7
7
  runScriptCommand: string;
8
8
  flags: string;
9
9
  detect: () => boolean;
10
+ addOverride: (pkgName: string, pkgVersion: string) => Promise<void>;
10
11
  }
11
12
  export declare const BUN: PackageManager;
12
13
  export declare const YARN_V1: PackageManager;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
14
  if (k2 === undefined) k2 = k;
4
15
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -22,6 +33,42 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
33
  __setModuleDefault(result, mod);
23
34
  return result;
24
35
  };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
25
72
  Object.defineProperty(exports, "__esModule", { value: true });
26
73
  exports.detectPackageManger = exports.packageManagers = exports.NPM = exports.PNPM = exports.YARN_V2 = exports.YARN_V1 = exports.BUN = void 0;
27
74
  /* eslint-disable @typescript-eslint/typedef */
@@ -29,6 +76,7 @@ var fs = __importStar(require("fs"));
29
76
  var path = __importStar(require("path"));
30
77
  var Sentry = __importStar(require("@sentry/node"));
31
78
  var telemetry_1 = require("../telemetry");
79
+ var clack_utils_1 = require("./clack-utils");
32
80
  exports.BUN = {
33
81
  name: 'bun',
34
82
  label: 'Bun',
@@ -38,6 +86,22 @@ exports.BUN = {
38
86
  runScriptCommand: 'bun run',
39
87
  flags: '',
40
88
  detect: function () { return fs.existsSync(path.join(process.cwd(), exports.BUN.lockFile)); },
89
+ addOverride: function (pkgName, pkgVersion) { return __awaiter(void 0, void 0, void 0, function () {
90
+ var packageDotJson, overrides;
91
+ var _a;
92
+ return __generator(this, function (_b) {
93
+ switch (_b.label) {
94
+ case 0: return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
95
+ case 1:
96
+ packageDotJson = _b.sent();
97
+ overrides = packageDotJson.overrides || {};
98
+ return [4 /*yield*/, (0, clack_utils_1.updatePackageDotJson)(__assign(__assign({}, packageDotJson), { overrides: __assign(__assign({}, overrides), (_a = {}, _a[pkgName] = pkgVersion, _a)) }))];
99
+ case 2:
100
+ _b.sent();
101
+ return [2 /*return*/];
102
+ }
103
+ });
104
+ }); },
41
105
  };
42
106
  exports.YARN_V1 = {
43
107
  name: 'yarn',
@@ -58,6 +122,22 @@ exports.YARN_V1 = {
58
122
  return false;
59
123
  }
60
124
  },
125
+ addOverride: function (pkgName, pkgVersion) { return __awaiter(void 0, void 0, void 0, function () {
126
+ var packageDotJson, resolutions;
127
+ var _a;
128
+ return __generator(this, function (_b) {
129
+ switch (_b.label) {
130
+ case 0: return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
131
+ case 1:
132
+ packageDotJson = _b.sent();
133
+ resolutions = packageDotJson.resolutions || {};
134
+ return [4 /*yield*/, (0, clack_utils_1.updatePackageDotJson)(__assign(__assign({}, packageDotJson), { resolutions: __assign(__assign({}, resolutions), (_a = {}, _a[pkgName] = pkgVersion, _a)) }))];
135
+ case 2:
136
+ _b.sent();
137
+ return [2 /*return*/];
138
+ }
139
+ });
140
+ }); },
61
141
  };
62
142
  /** YARN V2/3/4 */
63
143
  exports.YARN_V2 = {
@@ -79,6 +159,22 @@ exports.YARN_V2 = {
79
159
  return false;
80
160
  }
81
161
  },
162
+ addOverride: function (pkgName, pkgVersion) { return __awaiter(void 0, void 0, void 0, function () {
163
+ var packageDotJson, resolutions;
164
+ var _a;
165
+ return __generator(this, function (_b) {
166
+ switch (_b.label) {
167
+ case 0: return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
168
+ case 1:
169
+ packageDotJson = _b.sent();
170
+ resolutions = packageDotJson.resolutions || {};
171
+ return [4 /*yield*/, (0, clack_utils_1.updatePackageDotJson)(__assign(__assign({}, packageDotJson), { resolutions: __assign(__assign({}, resolutions), (_a = {}, _a[pkgName] = pkgVersion, _a)) }))];
172
+ case 2:
173
+ _b.sent();
174
+ return [2 /*return*/];
175
+ }
176
+ });
177
+ }); },
82
178
  };
83
179
  exports.PNPM = {
84
180
  name: 'pnpm',
@@ -89,6 +185,23 @@ exports.PNPM = {
89
185
  runScriptCommand: 'pnpm',
90
186
  flags: '--ignore-workspace-root-check',
91
187
  detect: function () { return fs.existsSync(path.join(process.cwd(), exports.PNPM.lockFile)); },
188
+ addOverride: function (pkgName, pkgVersion) { return __awaiter(void 0, void 0, void 0, function () {
189
+ var packageDotJson, pnpm, overrides;
190
+ var _a;
191
+ return __generator(this, function (_b) {
192
+ switch (_b.label) {
193
+ case 0: return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
194
+ case 1:
195
+ packageDotJson = _b.sent();
196
+ pnpm = packageDotJson.pnpm || {};
197
+ overrides = pnpm.overrides || {};
198
+ return [4 /*yield*/, (0, clack_utils_1.updatePackageDotJson)(__assign(__assign({}, packageDotJson), { pnpm: __assign(__assign({}, pnpm), { overrides: __assign(__assign({}, overrides), (_a = {}, _a[pkgName] = pkgVersion, _a)) }) }))];
199
+ case 2:
200
+ _b.sent();
201
+ return [2 /*return*/];
202
+ }
203
+ });
204
+ }); },
92
205
  };
93
206
  exports.NPM = {
94
207
  name: 'npm',
@@ -99,6 +212,22 @@ exports.NPM = {
99
212
  runScriptCommand: 'npm run',
100
213
  flags: '',
101
214
  detect: function () { return fs.existsSync(path.join(process.cwd(), exports.NPM.lockFile)); },
215
+ addOverride: function (pkgName, pkgVersion) { return __awaiter(void 0, void 0, void 0, function () {
216
+ var packageDotJson, overrides;
217
+ var _a;
218
+ return __generator(this, function (_b) {
219
+ switch (_b.label) {
220
+ case 0: return [4 /*yield*/, (0, clack_utils_1.getPackageDotJson)()];
221
+ case 1:
222
+ packageDotJson = _b.sent();
223
+ overrides = packageDotJson.overrides || {};
224
+ return [4 /*yield*/, (0, clack_utils_1.updatePackageDotJson)(__assign(__assign({}, packageDotJson), { overrides: __assign(__assign({}, overrides), (_a = {}, _a[pkgName] = pkgVersion, _a)) }))];
225
+ case 2:
226
+ _b.sent();
227
+ return [2 /*return*/];
228
+ }
229
+ });
230
+ }); },
102
231
  };
103
232
  exports.packageManagers = [exports.BUN, exports.YARN_V1, exports.YARN_V2, exports.PNPM, exports.NPM];
104
233
  function detectPackageManger() {
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/typedef */\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport * as Sentry from '@sentry/node';\nimport { traceStep } from '../telemetry';\n\nexport interface PackageManager {\n name: string;\n label: string;\n lockFile: string;\n installCommand: string;\n buildCommand: string;\n /* The command that the package manager uses to run a script from package.json */\n runScriptCommand: string;\n flags: string;\n detect: () => boolean;\n}\n\nexport const BUN: PackageManager = {\n name: 'bun',\n label: 'Bun',\n lockFile: 'bun.lockb',\n installCommand: 'bun add',\n buildCommand: 'bun run build',\n runScriptCommand: 'bun run',\n flags: '',\n detect: () => fs.existsSync(path.join(process.cwd(), BUN.lockFile)),\n};\nexport const YARN_V1: PackageManager = {\n name: 'yarn',\n label: 'Yarn V1',\n lockFile: 'yarn.lock',\n installCommand: 'yarn add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '--ignore-workspace-root-check',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), YARN_V1.lockFile), 'utf-8')\n .slice(0, 500)\n .includes('yarn lockfile v1');\n } catch (e) {\n return false;\n }\n },\n};\n/** YARN V2/3/4 */\nexport const YARN_V2: PackageManager = {\n name: 'yarn',\n label: 'Yarn V2/3/4',\n lockFile: 'yarn.lock',\n installCommand: 'yarn add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), YARN_V2.lockFile), 'utf-8')\n .slice(0, 500)\n .includes('__metadata');\n } catch (e) {\n return false;\n }\n },\n};\nexport const PNPM: PackageManager = {\n name: 'pnpm',\n label: 'PNPM',\n lockFile: 'pnpm-lock.yaml',\n installCommand: 'pnpm add',\n buildCommand: 'pnpm build',\n runScriptCommand: 'pnpm',\n flags: '--ignore-workspace-root-check',\n detect: () => fs.existsSync(path.join(process.cwd(), PNPM.lockFile)),\n};\nexport const NPM: PackageManager = {\n name: 'npm',\n label: 'NPM',\n lockFile: 'package-lock.json',\n installCommand: 'npm add',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n detect: () => fs.existsSync(path.join(process.cwd(), NPM.lockFile)),\n};\n\nexport const packageManagers = [BUN, YARN_V1, YARN_V2, PNPM, NPM];\n\nexport function detectPackageManger(): PackageManager | null {\n return traceStep('detect-package-manager', () => {\n for (const packageManager of packageManagers) {\n if (packageManager.detect()) {\n Sentry.setTag('package-manager', packageManager.name);\n return packageManager;\n }\n }\n Sentry.setTag('package-manager', 'not-detected');\n return null;\n });\n}\n"]}
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/typedef */\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nimport * as Sentry from '@sentry/node';\nimport { traceStep } from '../telemetry';\nimport { getPackageDotJson, updatePackageDotJson } from './clack-utils';\n\nexport interface PackageManager {\n name: string;\n label: string;\n lockFile: string;\n installCommand: string;\n buildCommand: string;\n /* The command that the package manager uses to run a script from package.json */\n runScriptCommand: string;\n flags: string;\n detect: () => boolean;\n addOverride: (pkgName: string, pkgVersion: string) => Promise<void>;\n}\n\nexport const BUN: PackageManager = {\n name: 'bun',\n label: 'Bun',\n lockFile: 'bun.lockb',\n installCommand: 'bun add',\n buildCommand: 'bun run build',\n runScriptCommand: 'bun run',\n flags: '',\n detect: () => fs.existsSync(path.join(process.cwd(), BUN.lockFile)),\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\nexport const YARN_V1: PackageManager = {\n name: 'yarn',\n label: 'Yarn V1',\n lockFile: 'yarn.lock',\n installCommand: 'yarn add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '--ignore-workspace-root-check',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), YARN_V1.lockFile), 'utf-8')\n .slice(0, 500)\n .includes('yarn lockfile v1');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\n/** YARN V2/3/4 */\nexport const YARN_V2: PackageManager = {\n name: 'yarn',\n label: 'Yarn V2/3/4',\n lockFile: 'yarn.lock',\n installCommand: 'yarn add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '',\n detect: () => {\n try {\n return fs\n .readFileSync(path.join(process.cwd(), YARN_V2.lockFile), 'utf-8')\n .slice(0, 500)\n .includes('__metadata');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\nexport const PNPM: PackageManager = {\n name: 'pnpm',\n label: 'PNPM',\n lockFile: 'pnpm-lock.yaml',\n installCommand: 'pnpm add',\n buildCommand: 'pnpm build',\n runScriptCommand: 'pnpm',\n flags: '--ignore-workspace-root-check',\n detect: () => fs.existsSync(path.join(process.cwd(), PNPM.lockFile)),\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const pnpm = packageDotJson.pnpm || {};\n const overrides = pnpm.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n pnpm: {\n ...pnpm,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n },\n });\n },\n};\nexport const NPM: PackageManager = {\n name: 'npm',\n label: 'NPM',\n lockFile: 'package-lock.json',\n installCommand: 'npm add',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n detect: () => fs.existsSync(path.join(process.cwd(), NPM.lockFile)),\n addOverride: async (pkgName, pkgVersion): Promise<void> => {\n const packageDotJson = await getPackageDotJson();\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson({\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n });\n },\n};\n\nexport const packageManagers = [BUN, YARN_V1, YARN_V2, PNPM, NPM];\n\nexport function detectPackageManger(): PackageManager | null {\n return traceStep('detect-package-manager', () => {\n for (const packageManager of packageManagers) {\n if (packageManager.detect()) {\n Sentry.setTag('package-manager', packageManager.name);\n return packageManager;\n }\n }\n Sentry.setTag('package-manager', 'not-detected');\n return null;\n });\n}\n"]}
@@ -62,9 +62,18 @@ describe('Nuxt code templates', function () {
62
62
  project: 'my-project',
63
63
  url: 'https://sentry.io',
64
64
  selfHosted: false,
65
- });
65
+ }, false);
66
66
  expect(template).toMatchInlineSnapshot("\n \" modules: [\"@sentry/nuxt/module\"],\n sentry: {\n sourceMapsUploadOptions: {\n org: \"my-org\",\n project: \"my-project\",\n },\n },\n sourcemap: { client: \"hidden\" },\"\n ");
67
67
  });
68
+ it('generates configuration options for the nuxt config with top level import', function () {
69
+ var template = (0, templates_1.getNuxtModuleFallbackTemplate)({
70
+ org: 'my-org',
71
+ project: 'my-project',
72
+ url: 'https://sentry.io',
73
+ selfHosted: false,
74
+ }, true);
75
+ expect(template).toMatchInlineSnapshot("\n \" modules: [\"@sentry/nuxt/module\"],\n sentry: {\n sourceMapsUploadOptions: {\n org: \"my-org\",\n project: \"my-project\",\n },\n autoInjectServerSentry: \"top-level-import\",\n },\n sourcemap: { client: \"hidden\" },\"\n ");
76
+ });
68
77
  });
69
78
  });
70
79
  //# sourceMappingURL=templates.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../test/nuxt/templates.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getDefaultNuxtConfig,\n getNuxtModuleFallbackTemplate,\n getSentryConfigContents,\n} from '../../src/nuxt/templates';\n\ndescribe('Nuxt code templates', () => {\n describe('getDefaultNuxtConfig', () => {\n it('returns a default nuxt config', () => {\n expect(getDefaultNuxtConfig()).toMatchInlineSnapshot(`\n \"// https://nuxt.com/docs/api/configuration/nuxt-config\n export default defineNuxtConfig({\n compatibilityDate: '2024-04-03',\n devtools: { enabled: true }\n })\n \"\n`);\n });\n });\n\n describe('getSentryConfigContents', () => {\n describe('client config', () => {\n it('generates Sentry config with all features enabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: true,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n\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 \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 \n // If you don't want to use Session Replay, just remove the line below:\n integrations: [Sentry.replayIntegration()],\n \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\n it('generates Sentry config with performance monitoring disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: false,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n\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 \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 \n // If you don't want to use Session Replay, just remove the line below:\n integrations: [Sentry.replayIntegration()],\n \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\n it('generates Sentry config with session replay disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: true,\n replay: false,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n \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\n it('generates Sentry config with performance monitoring and session replay disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: false,\n replay: false,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n \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 });\n\n describe('server config', () => {\n it('generates Sentry config with all features enabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'server',\n {\n performance: true,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n \n Sentry.init({\n dsn: \"https://sentry.io/123\",\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n \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\n it('generates Sentry config with performance monitoring disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'server',\n {\n performance: false,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n \n Sentry.init({\n dsn: \"https://sentry.io/123\",\n \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 });\n });\n\n describe('getNuxtModuleFallbackTemplate', () => {\n it('generates configuration options for the nuxt config', () => {\n const template = getNuxtModuleFallbackTemplate({\n org: 'my-org',\n project: 'my-project',\n url: 'https://sentry.io',\n selfHosted: false,\n });\n\n expect(template).toMatchInlineSnapshot(`\n \" modules: [\"@sentry/nuxt/module\"],\n sentry: {\n sourceMapsUploadOptions: {\n org: \"my-org\",\n project: \"my-project\",\n },\n },\n sourcemap: { client: \"hidden\" },\"\n `);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../../test/nuxt/templates.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getDefaultNuxtConfig,\n getNuxtModuleFallbackTemplate,\n getSentryConfigContents,\n} from '../../src/nuxt/templates';\n\ndescribe('Nuxt code templates', () => {\n describe('getDefaultNuxtConfig', () => {\n it('returns a default nuxt config', () => {\n expect(getDefaultNuxtConfig()).toMatchInlineSnapshot(`\n \"// https://nuxt.com/docs/api/configuration/nuxt-config\n export default defineNuxtConfig({\n compatibilityDate: '2024-04-03',\n devtools: { enabled: true }\n })\n \"\n`);\n });\n });\n\n describe('getSentryConfigContents', () => {\n describe('client config', () => {\n it('generates Sentry config with all features enabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: true,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n\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 \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 \n // If you don't want to use Session Replay, just remove the line below:\n integrations: [Sentry.replayIntegration()],\n \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\n it('generates Sentry config with performance monitoring disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: false,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n\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 \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 \n // If you don't want to use Session Replay, just remove the line below:\n integrations: [Sentry.replayIntegration()],\n \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\n it('generates Sentry config with session replay disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: true,\n replay: false,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n \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\n it('generates Sentry config with performance monitoring and session replay disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'client',\n {\n performance: false,\n replay: false,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n\n Sentry.init({\n // If set up, you can use your runtime config here\n // dsn: useRuntimeConfig().public.sentry.dsn,\n dsn: \"https://sentry.io/123\",\n \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 });\n\n describe('server config', () => {\n it('generates Sentry config with all features enabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'server',\n {\n performance: true,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n \n Sentry.init({\n dsn: \"https://sentry.io/123\",\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n \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\n it('generates Sentry config with performance monitoring disabled', () => {\n const template = getSentryConfigContents(\n 'https://sentry.io/123',\n 'server',\n {\n performance: false,\n replay: true,\n },\n );\n\n expect(template).toMatchInlineSnapshot(`\n \"import * as Sentry from \"@sentry/nuxt\";\n \n Sentry.init({\n dsn: \"https://sentry.io/123\",\n \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 });\n });\n\n describe('getNuxtModuleFallbackTemplate', () => {\n it('generates configuration options for the nuxt config', () => {\n const template = getNuxtModuleFallbackTemplate(\n {\n org: 'my-org',\n project: 'my-project',\n url: 'https://sentry.io',\n selfHosted: false,\n },\n false,\n );\n\n expect(template).toMatchInlineSnapshot(`\n \" modules: [\"@sentry/nuxt/module\"],\n sentry: {\n sourceMapsUploadOptions: {\n org: \"my-org\",\n project: \"my-project\",\n },\n },\n sourcemap: { client: \"hidden\" },\"\n `);\n });\n\n it('generates configuration options for the nuxt config with top level import', () => {\n const template = getNuxtModuleFallbackTemplate(\n {\n org: 'my-org',\n project: 'my-project',\n url: 'https://sentry.io',\n selfHosted: false,\n },\n true,\n );\n\n expect(template).toMatchInlineSnapshot(`\n \" modules: [\"@sentry/nuxt/module\"],\n sentry: {\n sourceMapsUploadOptions: {\n org: \"my-org\",\n project: \"my-project\",\n },\n autoInjectServerSentry: \"top-level-import\",\n },\n sourcemap: { client: \"hidden\" },\"\n `);\n });\n });\n});\n"]}
@@ -0,0 +1,75 @@
1
+ # Nuxt Minimal Starter
2
+
3
+ Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
4
+
5
+ ## Setup
6
+
7
+ Make sure to install dependencies:
8
+
9
+ ```bash
10
+ # npm
11
+ npm install
12
+
13
+ # pnpm
14
+ pnpm install
15
+
16
+ # yarn
17
+ yarn install
18
+
19
+ # bun
20
+ bun install
21
+ ```
22
+
23
+ ## Development Server
24
+
25
+ Start the development server on `http://localhost:3000`:
26
+
27
+ ```bash
28
+ # npm
29
+ npm run dev
30
+
31
+ # pnpm
32
+ pnpm dev
33
+
34
+ # yarn
35
+ yarn dev
36
+
37
+ # bun
38
+ bun run dev
39
+ ```
40
+
41
+ ## Production
42
+
43
+ Build the application for production:
44
+
45
+ ```bash
46
+ # npm
47
+ npm run build
48
+
49
+ # pnpm
50
+ pnpm build
51
+
52
+ # yarn
53
+ yarn build
54
+
55
+ # bun
56
+ bun run build
57
+ ```
58
+
59
+ Locally preview production build:
60
+
61
+ ```bash
62
+ # npm
63
+ npm run preview
64
+
65
+ # pnpm
66
+ pnpm preview
67
+
68
+ # yarn
69
+ yarn preview
70
+
71
+ # bun
72
+ bun run preview
73
+ ```
74
+
75
+ Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
@@ -0,0 +1,6 @@
1
+ // https://nuxt.com/docs/api/configuration/nuxt-config
2
+ export default defineNuxtConfig({
3
+ compatibilityDate: '2024-11-01',
4
+ devtools: { enabled: true },
5
+ future: { compatibilityVersion: 4 },
6
+ });
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "nuxt-4-app",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "build": "nuxt build",
7
+ "dev": "nuxt dev",
8
+ "generate": "nuxt generate",
9
+ "preview": "nuxt preview",
10
+ "postinstall": "nuxt prepare",
11
+ "start": "node .output/server/index.mjs"
12
+ },
13
+ "dependencies": {
14
+ "nuxt": "^3.14.1592",
15
+ "vue": "latest",
16
+ "vue-router": "latest"
17
+ }
18
+ }
@@ -44,13 +44,33 @@ async function runWizardOnNuxtProject(projectDir: string): Promise<void> {
44
44
  'Please select your package manager.',
45
45
  );
46
46
 
47
- const tracingOptionPrompted =
47
+ const nftOverridePrompted =
48
48
  packageManagerPrompted &&
49
49
  (await wizardInstance.sendStdinAndWaitForOutput(
50
50
  // Selecting `yarn` as the package manager
51
51
  [KEYS.DOWN, KEYS.ENTER],
52
+ 'Do you want to add an override for @vercel/nft version ^0.27.4?',
53
+ {
54
+ timeout: 240_000,
55
+ },
56
+ ));
57
+
58
+ const deploymentPlatformPrompted =
59
+ nftOverridePrompted &&
60
+ (await wizardInstance.sendStdinAndWaitForOutput(
61
+ KEYS.ENTER,
62
+ 'Please select your deployment platform.',
63
+ {
64
+ timeout: 240_000,
65
+ },
66
+ ));
67
+
68
+ const tracingOptionPrompted =
69
+ deploymentPlatformPrompted &&
70
+ (await wizardInstance.sendStdinAndWaitForOutput(
71
+ KEYS.ENTER,
52
72
  // "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
53
- 'to track the performance of your application?',
73
+ 'Do you want to enable',
54
74
  {
55
75
  timeout: 240_000,
56
76
  },
@@ -59,7 +79,7 @@ async function runWizardOnNuxtProject(projectDir: string): Promise<void> {
59
79
  const replayOptionPrompted =
60
80
  tracingOptionPrompted &&
61
81
  (await wizardInstance.sendStdinAndWaitForOutput(
62
- [KEYS.ENTER],
82
+ KEYS.ENTER,
63
83
  // "Do you want to enable Sentry Session Replay", sometimes doesn't work as `Sentry Session Replay` can be printed in bold.
64
84
  'to get a video-like reproduction of errors during a user session?',
65
85
  ));
@@ -43,13 +43,33 @@ async function runWizardOnNuxtProject(projectDir: string): Promise<void> {
43
43
  'Please select your package manager.',
44
44
  );
45
45
 
46
- const tracingOptionPrompted =
46
+ const nftOverridePrompted =
47
47
  packageManagerPrompted &&
48
48
  (await wizardInstance.sendStdinAndWaitForOutput(
49
49
  // Selecting `yarn` as the package manager
50
50
  [KEYS.DOWN, KEYS.ENTER],
51
+ 'Do you want to add an override for @vercel/nft version ^0.27.4?',
52
+ {
53
+ timeout: 240_000,
54
+ },
55
+ ));
56
+
57
+ const deploymentPlatformPrompted =
58
+ nftOverridePrompted &&
59
+ (await wizardInstance.sendStdinAndWaitForOutput(
60
+ KEYS.ENTER,
61
+ 'Please select your deployment platform.',
62
+ {
63
+ timeout: 240_000,
64
+ },
65
+ ));
66
+
67
+ const tracingOptionPrompted =
68
+ deploymentPlatformPrompted &&
69
+ (await wizardInstance.sendStdinAndWaitForOutput(
70
+ KEYS.ENTER,
51
71
  // "Do you want to enable Tracing", sometimes doesn't work as `Tracing` can be printed in bold.
52
- 'to track the performance of your application?',
72
+ 'Do you want to enable',
53
73
  {
54
74
  timeout: 240_000,
55
75
  },
@@ -243,7 +243,10 @@ export function createFile(filePath: string, content?: string) {
243
243
  * @param oldContent
244
244
  * @param newContent
245
245
  */
246
- export function modifyFile(filePath: string, replaceMap: Record<string, string>) {
246
+ export function modifyFile(
247
+ filePath: string,
248
+ replaceMap: Record<string, string>,
249
+ ) {
247
250
  const fileContent = fs.readFileSync(filePath, 'utf-8');
248
251
  let newFileContent = fileContent;
249
252
 
package/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",
@@ -33,8 +33,6 @@ export const manifest = (dsn: string) => `
33
33
 
34
34
  <!-- enable the performance API by setting a sample-rate, adjust in production env -->
35
35
  <meta-data android:name="io.sentry.traces.sample-rate" android:value="1.0" />
36
- <!-- enable profiling when starting transactions, adjust in production env -->
37
- <meta-data android:name="io.sentry.traces.profiling.sample-rate" android:value="1.0" />
38
36
  `;
39
37
 
40
38
  export const sentryImport = `import io.sentry.Sentry;\n`;
@@ -1,6 +1,7 @@
1
1
  // @ts-ignore - clack is ESM and TS complains about that. It works though
2
2
  import * as clack from '@clack/prompts';
3
3
  import * as Sentry from '@sentry/node';
4
+ import chalk from 'chalk';
4
5
  import { lt, minVersion } from 'semver';
5
6
  import type { WizardOptions } from '../utils/types';
6
7
  import { traceStep, withTelemetry } from '../telemetry';
@@ -14,19 +15,26 @@ import {
14
15
  ensurePackageIsInstalled,
15
16
  getOrAskForProjectData,
16
17
  getPackageDotJson,
18
+ getPackageManager,
17
19
  installPackage,
18
20
  printWelcome,
19
21
  runPrettierIfInstalled,
20
22
  } from '../utils/clack-utils';
21
23
  import { getPackageVersion, hasPackageInstalled } from '../utils/package-json';
22
- import { addSDKModule, getNuxtConfig, createConfigFiles } from './sdk-setup';
24
+ import {
25
+ addSDKModule,
26
+ getNuxtConfig,
27
+ createConfigFiles,
28
+ addNuxtOverrides,
29
+ askDeploymentPlatform,
30
+ confirmReadImportDocs,
31
+ } from './sdk-setup';
23
32
  import {
24
33
  createExampleComponent,
25
34
  createExamplePage,
26
35
  supportsExamplePage,
27
36
  } from './sdk-example';
28
37
  import { isNuxtV4 } from './utils';
29
- import chalk from 'chalk';
30
38
 
31
39
  export function runNuxtWizard(options: WizardOptions) {
32
40
  return withTelemetry(
@@ -85,12 +93,17 @@ export async function runNuxtWizardWithTelemetry(
85
93
  const { authToken, selectedProject, selfHosted, sentryUrl } =
86
94
  await getOrAskForProjectData(options, 'javascript-nuxt');
87
95
 
96
+ const packageManager = await getPackageManager();
97
+
98
+ await addNuxtOverrides(packageJson, packageManager, minVer);
99
+
88
100
  const sdkAlreadyInstalled = hasPackageInstalled('@sentry/nuxt', packageJson);
89
101
  Sentry.setTag('sdk-already-installed', sdkAlreadyInstalled);
90
102
 
91
103
  await installPackage({
92
104
  packageName: '@sentry/nuxt',
93
105
  alreadyInstalled: sdkAlreadyInstalled,
106
+ packageManager,
94
107
  });
95
108
 
96
109
  await addDotEnvSentryBuildPluginFile(authToken);
@@ -105,8 +118,10 @@ export async function runNuxtWizardWithTelemetry(
105
118
  selfHosted,
106
119
  };
107
120
 
121
+ const deploymentPlatform = await askDeploymentPlatform();
122
+
108
123
  await traceStep('configure-sdk', async () => {
109
- await addSDKModule(nuxtConfig, projectData);
124
+ await addSDKModule(nuxtConfig, projectData, deploymentPlatform);
110
125
  await createConfigFiles(selectedProject.keys[0].dsn.public);
111
126
  });
112
127
 
@@ -137,6 +152,8 @@ export async function runNuxtWizardWithTelemetry(
137
152
 
138
153
  await runPrettierIfInstalled();
139
154
 
155
+ await confirmReadImportDocs(deploymentPlatform);
156
+
140
157
  clack.outro(
141
158
  buildOutroMessage(shouldCreateExamplePage, shouldCreateExampleButton),
142
159
  );
@@ -159,8 +176,9 @@ function buildOutroMessage(
159
176
  )} component to a page and triggering it.`;
160
177
  }
161
178
 
162
- msg += `\n\nCheck out the SDK documentation for further configuration:
163
- https://docs.sentry.io/platforms/javascript/guides/nuxt/`;
179
+ msg += `\n\nCheck out the SDK documentation for further configuration: ${chalk.underline(
180
+ 'https://docs.sentry.io/platforms/javascript/guides/nuxt/',
181
+ )}`;
164
182
 
165
183
  return msg;
166
184
  }