UNPKG

@posthog/wizard

Version:

The PostHog wizard helps you to configure your project

152 lines 7.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.runWizard = runWizard; const clack_utils_1 = require("./utils/clack-utils"); const nextjs_wizard_agent_1 = require("./nextjs/nextjs-wizard-agent"); const constants_1 = require("./lib/constants"); const environment_1 = require("./utils/environment"); const clack_1 = __importDefault(require("./utils/clack")); const path_1 = __importDefault(require("path")); const config_1 = require("./lib/config"); const react_wizard_1 = require("./react/react-wizard"); const analytics_1 = require("./utils/analytics"); const svelte_wizard_1 = require("./svelte/svelte-wizard"); const react_native_wizard_1 = require("./react-native/react-native-wizard"); const astro_wizard_1 = require("./astro/astro-wizard"); const react_router_wizard_agent_1 = require("./react-router/react-router-wizard-agent"); const django_wizard_agent_1 = require("./django/django-wizard-agent"); const flask_wizard_agent_1 = require("./flask/flask-wizard-agent"); const laravel_wizard_agent_1 = require("./laravel/laravel-wizard-agent"); const events_1 = require("events"); const chalk_1 = __importDefault(require("chalk")); const errors_1 = require("./utils/errors"); events_1.EventEmitter.defaultMaxListeners = 50; async function runWizard(argv) { const finalArgs = { ...argv, ...(0, environment_1.readEnvironment)(), }; let resolvedInstallDir; if (finalArgs.installDir) { if (path_1.default.isAbsolute(finalArgs.installDir)) { resolvedInstallDir = finalArgs.installDir; } else { resolvedInstallDir = path_1.default.join(process.cwd(), finalArgs.installDir); } } else { resolvedInstallDir = process.cwd(); } const wizardOptions = { debug: finalArgs.debug ?? false, forceInstall: finalArgs.forceInstall ?? false, installDir: resolvedInstallDir, cloudRegion: finalArgs.region ?? undefined, default: finalArgs.default ?? false, signup: finalArgs.signup ?? false, localMcp: finalArgs.localMcp ?? false, ci: finalArgs.ci ?? false, apiKey: finalArgs.apiKey, }; clack_1.default.intro(`Welcome to the PostHog setup wizard ✨`); if (wizardOptions.ci) { clack_1.default.log.info(chalk_1.default.dim('Running in CI mode')); } const integration = finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions)); analytics_1.analytics.setTag('integration', integration); try { switch (integration) { case constants_1.Integration.nextjs: await (0, nextjs_wizard_agent_1.runNextjsWizardAgent)(wizardOptions); break; case constants_1.Integration.react: await (0, react_wizard_1.runReactWizard)(wizardOptions); break; case constants_1.Integration.svelte: await (0, svelte_wizard_1.runSvelteWizard)(wizardOptions); break; case constants_1.Integration.reactNative: await (0, react_native_wizard_1.runReactNativeWizard)(wizardOptions); break; case constants_1.Integration.astro: await (0, astro_wizard_1.runAstroWizard)(wizardOptions); break; case constants_1.Integration.reactRouter: { const flagValue = await analytics_1.analytics.getFeatureFlag(constants_1.FeatureFlagDefinition.ReactRouter); // In CI mode, bypass feature flags and always use the React Router wizard if (wizardOptions.ci || flagValue === true) { await (0, react_router_wizard_agent_1.runReactRouterWizardAgent)(wizardOptions); } else { await (0, react_wizard_1.runReactWizard)(wizardOptions); } break; } case constants_1.Integration.django: clack_1.default.log.info(`${chalk_1.default.yellow('[BETA]')} The Django wizard is in beta. Questions or feedback? Email ${chalk_1.default.cyan('wizard@posthog.com')}`); await (0, django_wizard_agent_1.runDjangoWizardAgent)(wizardOptions); break; case constants_1.Integration.flask: clack_1.default.log.info(`${chalk_1.default.yellow('[BETA]')} The Flask wizard is in beta. Questions or feedback? Email ${chalk_1.default.cyan('wizard@posthog.com')}`); await (0, flask_wizard_agent_1.runFlaskWizardAgent)(wizardOptions); break; case constants_1.Integration.laravel: clack_1.default.log.info(`${chalk_1.default.yellow('[BETA]')} The Laravel wizard is in beta. Questions or feedback? Email ${chalk_1.default.cyan('wizard@posthog.com')}`); await (0, laravel_wizard_agent_1.runLaravelWizardAgent)(wizardOptions); break; default: clack_1.default.log.error('No setup wizard selected!'); } } catch (error) { analytics_1.analytics.captureException(error, { integration, arguments: JSON.stringify(finalArgs), }); await analytics_1.analytics.shutdown('error'); if (error instanceof errors_1.RateLimitError) { clack_1.default.log.error('Wizard usage limit reached. Please try again later.'); } else { clack_1.default.log.error(`Something went wrong. You can read the documentation at ${chalk_1.default.cyan(`${config_1.INTEGRATION_CONFIG[integration].docsUrl}`)} to set up PostHog manually.`); } process.exit(1); } } async function detectIntegration(options) { const integrationConfigs = Object.entries(config_1.INTEGRATION_CONFIG).sort(([a], [b]) => config_1.INTEGRATION_ORDER.indexOf(a) - config_1.INTEGRATION_ORDER.indexOf(b)); for (const [integration, config] of integrationConfigs) { const detected = await config.detect(options); if (detected) { return integration; } } } async function getIntegrationForSetup(options) { const detectedIntegration = await detectIntegration(options); if (detectedIntegration) { clack_1.default.log.success(`Detected integration: ${(0, constants_1.getIntegrationDescription)(detectedIntegration)}`); return detectedIntegration; } const integration = await (0, clack_utils_1.abortIfCancelled)(clack_1.default.select({ message: 'What do you want to set up?', options: [ { value: constants_1.Integration.nextjs, label: 'Next.js' }, { value: constants_1.Integration.astro, label: 'Astro' }, { value: constants_1.Integration.react, label: 'React' }, { value: constants_1.Integration.reactRouter, label: 'React Router' }, { value: constants_1.Integration.django, label: 'Django' }, { value: constants_1.Integration.flask, label: 'Flask' }, { value: constants_1.Integration.laravel, label: 'Laravel' }, { value: constants_1.Integration.svelte, label: 'Svelte' }, { value: constants_1.Integration.reactNative, label: 'React Native' }, ], })); return integration; } //# sourceMappingURL=run.js.map