@posthog/wizard
Version:
The PostHog wizard helps you to configure your project
121 lines • 5.53 kB
JavaScript
"use strict";
/* eslint-disable max-lines */
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.runReactWizard = runReactWizard;
const clack_utils_1 = require("../utils/clack-utils");
const package_json_1 = require("../utils/package-json");
const clack_1 = __importDefault(require("../utils/clack"));
const constants_1 = require("../lib/constants");
const docs_1 = require("./docs");
const analytics_1 = require("../utils/analytics");
const environment_1 = require("../utils/environment");
const file_utils_1 = require("../utils/file-utils");
const clack_utils_2 = require("../utils/clack-utils");
const messages_1 = require("../lib/messages");
const steps_1 = require("../steps");
const upload_environment_variables_1 = require("../steps/upload-environment-variables");
async function runReactWizard(options) {
(0, clack_utils_1.printWelcome)({
wizardName: 'PostHog React wizard',
});
const aiConsent = await (0, clack_utils_1.askForAIConsent)(options);
if (!aiConsent) {
await (0, clack_utils_1.abort)('The React wizard requires AI to get setup right now. Please view the docs to setup React manually instead: https://posthog.com/docs/libraries/react', 0);
}
const cloudRegion = options.cloudRegion ?? (await (0, clack_utils_2.askForCloudRegion)());
const typeScriptDetected = (0, clack_utils_1.isUsingTypeScript)(options);
await (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)(options);
const packageJson = await (0, clack_utils_1.getPackageDotJson)(options);
await (0, clack_utils_1.ensurePackageIsInstalled)(packageJson, 'react', 'React');
const reactVersion = (0, package_json_1.getPackageVersion)('react', packageJson);
if (reactVersion) {
analytics_1.analytics.setTag('react-version', reactVersion);
}
const { projectApiKey, accessToken, host, projectId } = await (0, clack_utils_1.getOrAskForProjectData)({
...options,
cloudRegion,
});
const sdkAlreadyInstalled = (0, package_json_1.hasPackageInstalled)('posthog-js', packageJson);
analytics_1.analytics.setTag('sdk-already-installed', sdkAlreadyInstalled);
const { packageManager: packageManagerFromInstallStep } = await (0, clack_utils_1.installPackage)({
packageName: 'posthog-js',
packageNameDisplayLabel: 'posthog-js',
alreadyInstalled: !!packageJson?.dependencies?.['posthog-js'],
forceInstall: options.forceInstall,
askBeforeUpdating: false,
installDir: options.installDir,
integration: constants_1.Integration.react,
});
const relevantFiles = await (0, file_utils_1.getRelevantFilesForIntegration)({
installDir: options.installDir,
integration: constants_1.Integration.react,
});
const envVarPrefix = await (0, environment_1.detectEnvVarPrefix)(options);
const installationDocumentation = (0, docs_1.getReactDocumentation)({
language: typeScriptDetected ? 'typescript' : 'javascript',
envVarPrefix,
});
clack_1.default.log.info(`Reviewing PostHog documentation for React`);
const filesToChange = await (0, file_utils_1.getFilesToChange)({
integration: constants_1.Integration.react,
relevantFiles,
documentation: installationDocumentation,
accessToken,
cloudRegion,
projectId,
});
await (0, file_utils_1.generateFileChangesForIntegration)({
integration: constants_1.Integration.react,
filesToChange,
accessToken,
installDir: options.installDir,
documentation: installationDocumentation,
cloudRegion,
projectId,
});
const { relativeEnvFilePath, addedEnvVariables } = await (0, steps_1.addOrUpdateEnvironmentVariablesStep)({
variables: {
[envVarPrefix + 'POSTHOG_KEY']: projectApiKey,
[envVarPrefix + 'POSTHOG_HOST']: host,
},
installDir: options.installDir,
integration: constants_1.Integration.react,
});
const packageManagerForOutro = packageManagerFromInstallStep ?? (await (0, clack_utils_1.getPackageManager)(options));
await (0, steps_1.runPrettierStep)({
installDir: options.installDir,
integration: constants_1.Integration.react,
});
const addedEditorRules = await (0, steps_1.addEditorRulesStep)({
installDir: options.installDir,
rulesName: 'react-rules.md',
integration: constants_1.Integration.react,
});
const uploadedEnvVars = await (0, upload_environment_variables_1.uploadEnvironmentVariablesStep)({
[envVarPrefix + 'POSTHOG_KEY']: projectApiKey,
[envVarPrefix + 'POSTHOG_HOST']: host,
}, {
integration: constants_1.Integration.react,
options,
});
await (0, steps_1.addMCPServerToClientsStep)({
cloudRegion,
integration: constants_1.Integration.react,
ci: options.ci,
});
const outroMessage = (0, messages_1.getOutroMessage)({
options,
integration: constants_1.Integration.react,
cloudRegion,
addedEditorRules,
packageManager: packageManagerForOutro,
envFileChanged: addedEnvVariables ? relativeEnvFilePath : undefined,
uploadedEnvVars,
});
clack_1.default.outro(outroMessage);
await analytics_1.analytics.shutdown('success');
}
//# sourceMappingURL=react-wizard.js.map