UNPKG

@posthog/wizard

Version:

The PostHog wizard helps you to configure your project

127 lines 5.73 kB
"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.runReactNativeWizard = runReactNativeWizard; 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 file_utils_1 = require("../utils/file-utils"); const clack_utils_2 = require("../utils/clack-utils"); const steps_1 = require("../steps"); const package_manager_1 = require("../utils/package-manager"); const messages_1 = require("../lib/messages"); async function runReactNativeWizard(options) { (0, clack_utils_1.printWelcome)({ wizardName: 'PostHog React Native wizard', }); const aiConsent = await (0, clack_utils_1.askForAIConsent)(options); if (!aiConsent) { await (0, clack_utils_1.abort)('The React Native wizard requires AI to get setup right now. Please view the docs to setup React Native manually instead: https://posthog.com/docs/libraries/react-native', 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-native', 'React Native'); const reactNativeVersion = (0, package_json_1.getPackageVersion)('react-native', packageJson); if (reactNativeVersion) { analytics_1.analytics.setTag('react-native-version', reactNativeVersion); } const { projectApiKey, wizardHash, host } = 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 isUsingExpo = (0, package_json_1.hasPackageInstalled)('expo', packageJson); if (isUsingExpo) { analytics_1.analytics.setTag('is-using-expo', true); analytics_1.analytics.setTag('expo-version', (0, package_json_1.getPackageVersion)('expo', packageJson)); } clack_1.default.log.info(`Detected ${isUsingExpo ? 'Expo' : 'React Native'}`); const packagesToInstall = isUsingExpo ? [ 'posthog-react-native', 'posthog-react-native-session-replay', 'expo-file-system', 'expo-application', 'expo-device', 'expo-localization', ] : [ 'posthog-react-native', '@react-native-async-storage/async-storage', 'react-native-device-info', 'react-native-localize', ]; for (const packageName of packagesToInstall) { await (0, clack_utils_1.installPackage)({ packageName, packageNameDisplayLabel: packageName, alreadyInstalled: !!packageJson?.dependencies?.[packageName], forceInstall: options.forceInstall, askBeforeUpdating: false, installDir: options.installDir, integration: constants_1.Integration.reactNative, packageManager: isUsingExpo ? package_manager_1.EXPO : undefined, }); } const relevantFiles = await (0, file_utils_1.getRelevantFilesForIntegration)({ installDir: options.installDir, integration: constants_1.Integration.reactNative, }); const installationDocumentation = (0, docs_1.getReactNativeDocumentation)({ language: typeScriptDetected ? 'typescript' : 'javascript', host, projectApiKey, }); clack_1.default.log.info(`Reviewing PostHog documentation for ${isUsingExpo ? 'Expo' : 'React Native'}`); const filesToChange = await (0, file_utils_1.getFilesToChange)({ integration: constants_1.Integration.reactNative, relevantFiles, documentation: installationDocumentation, wizardHash, cloudRegion, }); await (0, file_utils_1.generateFileChangesForIntegration)({ integration: constants_1.Integration.reactNative, filesToChange, wizardHash, installDir: options.installDir, documentation: installationDocumentation, cloudRegion, }); await (0, steps_1.runPrettierStep)({ installDir: options.installDir, integration: constants_1.Integration.reactNative, }); const addedEditorRules = await (0, steps_1.addEditorRulesStep)({ installDir: options.installDir, rulesName: 'react-native-rules.md', integration: constants_1.Integration.reactNative, }); await (0, steps_1.addMCPServerToClientsStep)({ cloudRegion, integration: constants_1.Integration.reactNative, }); const packageManagerForOutro = await (0, clack_utils_1.getPackageManager)({ installDir: options.installDir, }); const outroMessage = (0, messages_1.getOutroMessage)({ options, integration: constants_1.Integration.reactNative, cloudRegion, addedEditorRules, packageManager: packageManagerForOutro, uploadedEnvVars: [], }); clack_1.default.outro(outroMessage); await analytics_1.analytics.shutdown('success'); } //# sourceMappingURL=react-native-wizard.js.map