@posthog/wizard
Version:
The PostHog wizard helps you to configure your project
128 lines • 5.77 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.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, 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 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,
accessToken,
cloudRegion,
projectId,
});
await (0, file_utils_1.generateFileChangesForIntegration)({
integration: constants_1.Integration.reactNative,
filesToChange,
accessToken,
installDir: options.installDir,
documentation: installationDocumentation,
cloudRegion,
projectId,
});
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,
ci: options.ci,
});
const packageManagerForOutro = await (0, clack_utils_1.getPackageManager)(options);
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