@sentry/wizard
Version:
Sentry wizard helping you to configure your project
135 lines • 8.77 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
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;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.configureNextJsSourceMapsUpload = void 0;
// @ts-ignore - clack is ESM and TS complains about that. It works though
var clack = __importStar(require("@clack/prompts"));
var chalk_1 = __importDefault(require("chalk"));
var nextjs_wizard_1 = require("../../nextjs/nextjs-wizard");
var telemetry_1 = require("../../telemetry");
var clack_utils_1 = require("../../utils/clack-utils");
var Sentry = __importStar(require("@sentry/node"));
var getCodeSnippet = function (options) {
return chalk_1.default.grey("\n ".concat(chalk_1.default.greenBright('const { withSentryConfig } = require("@sentry/nextjs");'), "\n\n const nextConfig = {\n // your existing next config\n };\n\n ").concat(chalk_1.default.greenBright("const sentryWebpackPluginOptions = {\n org: \"".concat(options.orgSlug, "\",\n project: \"").concat(options.projectSlug, "\",").concat(options.selfHosted ? "\n url: \"".concat(options.url, "\",") : '', "\n };")), "\n\n ").concat(chalk_1.default.greenBright("const sentryOptions = {\n // Upload additional client files (increases upload size)\n widenClientFileUpload: true,\n\n // Hides source maps from generated client bundles\n hideSourceMaps: true,\n };"), "\n\n ").concat(chalk_1.default.greenBright("module.exports = withSentryConfig(\n nextConfig,\n sentryWebpackPluginOptions,\n sentryOptions\n );"), "\n"));
};
var configureNextJsSourceMapsUpload = function (options, wizardOptions) { return __awaiter(void 0, void 0, void 0, function () {
var shouldRedirect;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
clack.log
.info("Source Maps upload for Next.js is configured automatically by default if you run the Sentry Wizard for Next.JS.\nBut don't worry, we can redirect you to the wizard now!\n\nIn case you already tried the wizard, we can also show you how to configure your ".concat(chalk_1.default.cyan('next.config.js'), " file manually instead."));
return [4 /*yield*/, (0, clack_utils_1.abortIfCancelled)(clack.select({
message: 'Do you want to run the Sentry Wizard for Next.JS now?',
options: [
{
label: 'Yes, run the wizard!',
value: true,
hint: 'The wizard can also configure your SDK setup',
},
{
label: 'No, show me how to configure it manually',
value: false,
},
],
}))];
case 1:
shouldRedirect = _a.sent();
Sentry.setTag('redirect-nextjs-wizard', shouldRedirect);
if (!shouldRedirect) return [3 /*break*/, 3];
return [4 /*yield*/, (0, telemetry_1.traceStep)('run-nextjs-wizard', function () { return (0, nextjs_wizard_1.runNextjsWizard)(wizardOptions); })];
case 2:
_a.sent();
clack.intro('Sentry Source Maps Upload Configuration Wizard');
clack.log.info("Welcome back to the Source Maps wizard - we're almost done ;)");
return [3 /*break*/, 6];
case 3:
clack.log.info("Add the following code to your ".concat(chalk_1.default.cyan('next.config.js'), ":"));
// Intentionally logging directly to console here
// eslint-disable-next-line no-console
console.log(getCodeSnippet(options));
return [4 /*yield*/, (0, telemetry_1.traceStep)('nextjs-manual-nextconfigjs', function () {
return (0, clack_utils_1.abortIfCancelled)(clack.select({
message: 'Did you copy the code above?',
options: [{ label: 'Yes, continue!', value: true }],
initialValue: true,
}));
})];
case 4:
_a.sent();
return [4 /*yield*/, (0, telemetry_1.traceStep)('nextjs-manual-sentryclirc', function () {
return (0, clack_utils_1.addDotEnvSentryBuildPluginFile)(options.authToken);
})];
case 5:
_a.sent();
_a.label = 6;
case 6:
clack.log
.info("In case you still run into problems, check out our docs to further debug your setup:\n\nUploading Source Maps:\nhttps://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/#configure-source-maps\n\nTroubleshooting Source Maps:\nhttps://docs.sentry.io/platforms/javascript/guides/nextjs/troubleshooting/");
return [2 /*return*/];
}
});
}); };
exports.configureNextJsSourceMapsUpload = configureNextJsSourceMapsUpload;
//# sourceMappingURL=nextjs.js.map