UNPKG

@posthog/wizard

Version:

The PostHog wizard helps you to configure your project

276 lines 10.4 kB
"use strict"; 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 () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReactRouterMode = void 0; exports.getReactRouterVersionBucket = getReactRouterVersionBucket; exports.getReactRouterMode = getReactRouterMode; exports.getReactRouterModeName = getReactRouterModeName; const semver_1 = require("semver"); const fast_glob_1 = __importDefault(require("fast-glob")); const clack_utils_1 = require("../utils/clack-utils"); const clack_1 = __importDefault(require("../utils/clack")); const constants_1 = require("../lib/constants"); const package_json_1 = require("../utils/package-json"); const chalk_1 = __importDefault(require("chalk")); const fs = __importStar(require("node:fs")); const path = __importStar(require("node:path")); const semver = __importStar(require("semver")); var ReactRouterMode; (function (ReactRouterMode) { ReactRouterMode["V6"] = "v6"; ReactRouterMode["V7_FRAMEWORK"] = "v7-framework"; ReactRouterMode["V7_DATA"] = "v7-data"; ReactRouterMode["V7_DECLARATIVE"] = "v7-declarative"; })(ReactRouterMode || (exports.ReactRouterMode = ReactRouterMode = {})); const IGNORE_PATTERNS = [ '**/node_modules/**', '**/dist/**', '**/build/**', '**/public/**', '**/.next/**', ]; /** * Get React Router version bucket for analytics */ function getReactRouterVersionBucket(version) { if (!version) { return 'none'; } try { const minVer = (0, semver_1.minVersion)(version); if (!minVer) { return 'invalid'; } const majorVersion = (0, semver_1.major)(minVer); if (majorVersion >= 6) { return `${majorVersion}.x`; } return `<6.0.0`; } catch { return 'unknown'; } } /** * Check if react-router.config.ts exists (indicates framework mode - React Router v7) */ async function hasReactRouterConfig({ installDir, }) { const configMatches = await (0, fast_glob_1.default)('**/react-router.config.@(ts|js|tsx|jsx)', { dot: true, cwd: installDir, ignore: IGNORE_PATTERNS, }); return configMatches.length > 0; } /** * Search for createBrowserRouter usage in source files */ async function hasCreateBrowserRouter({ installDir, }) { const sourceFiles = await (0, fast_glob_1.default)('**/*.@(ts|tsx|js|jsx)', { dot: true, cwd: installDir, ignore: IGNORE_PATTERNS, }); for (const file of sourceFiles) { try { const filePath = path.join(installDir, file); const content = fs.readFileSync(filePath, 'utf-8'); // Check for createBrowserRouter import or usage if (content.includes('createBrowserRouter')) { return true; } } catch { // Skip files that can't be read continue; } } return false; } /** * Search for declarative BrowserRouter usage */ async function hasDeclarativeRouter({ installDir, }) { const sourceFiles = await (0, fast_glob_1.default)('**/*.@(ts|tsx|js|jsx)', { dot: true, cwd: installDir, ignore: IGNORE_PATTERNS, }); for (const file of sourceFiles) { try { const filePath = path.join(installDir, file); const content = fs.readFileSync(filePath, 'utf-8'); // Check for BrowserRouter usage (JSX or import) if (content.includes('<BrowserRouter') || (content.includes('BrowserRouter') && (content.includes('from "react-router-dom"') || content.includes("from 'react-router-dom'")))) { return true; } } catch { // Skip files that can't be read continue; } } return false; } /** * Detect React Router mode */ async function getReactRouterMode(options) { const { installDir } = options; // First, get the React Router version const packageJson = await (0, clack_utils_1.getPackageDotJson)(options); const reactRouterVersion = (0, package_json_1.getPackageVersion)('react-router-dom', packageJson) || (0, package_json_1.getPackageVersion)('react-router', packageJson); if (!reactRouterVersion) { // If we can't detect version, ask the user clack_1.default.log.info(`Learn more about React Router modes: ${chalk_1.default.cyan('https://reactrouter.com/start/modes')}`); const result = await (0, clack_utils_1.abortIfCancelled)(clack_1.default.select({ message: 'What React Router version and mode are you using?', options: [ { label: 'React Router v6', value: ReactRouterMode.V6, }, { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK, }, { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA, }, { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE, }, ], }), constants_1.Integration.reactRouter); return result; } const coercedVersion = semver.coerce(reactRouterVersion); const majorVersion = coercedVersion ? (0, semver_1.major)(coercedVersion) : null; // If v6, return V6 if (majorVersion === 6) { clack_1.default.log.info('Detected React Router v6'); return ReactRouterMode.V6; } // If v7, detect the mode if (majorVersion === 7) { // First check for framework mode (react-router.config.ts) const hasConfig = await hasReactRouterConfig({ installDir }); if (hasConfig) { clack_1.default.log.info('Detected React Router v7 - Framework mode'); return ReactRouterMode.V7_FRAMEWORK; } // Check for data mode (createBrowserRouter) const hasDataMode = await hasCreateBrowserRouter({ installDir }); if (hasDataMode) { clack_1.default.log.info('Detected React Router v7 - Data mode'); return ReactRouterMode.V7_DATA; } // Check for declarative mode (BrowserRouter) const hasDeclarative = await hasDeclarativeRouter({ installDir }); if (hasDeclarative) { clack_1.default.log.info('Detected React Router v7 - Declarative mode'); return ReactRouterMode.V7_DECLARATIVE; } // If v7 but can't detect mode, ask the user clack_1.default.log.info(`Learn more about React Router modes: ${chalk_1.default.cyan('https://reactrouter.com/start/modes')}`); const result = await (0, clack_utils_1.abortIfCancelled)(clack_1.default.select({ message: 'What React Router v7 mode are you using?', options: [ { label: 'Framework mode', value: ReactRouterMode.V7_FRAMEWORK, }, { label: 'Data mode', value: ReactRouterMode.V7_DATA, }, { label: 'Declarative mode', value: ReactRouterMode.V7_DECLARATIVE, }, ], }), constants_1.Integration.reactRouter); return result; } // If version is not 6 or 7, default to asking clack_1.default.log.info(`Learn more about React Router modes: ${chalk_1.default.cyan('https://reactrouter.com/start/modes')}`); const result = await (0, clack_utils_1.abortIfCancelled)(clack_1.default.select({ message: 'What React Router version and mode are you using?', options: [ { label: 'React Router v6', value: ReactRouterMode.V6, }, { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK, }, { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA, }, { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE, }, ], }), constants_1.Integration.reactRouter); return result; } /** * Get human-readable name for React Router mode */ function getReactRouterModeName(mode) { switch (mode) { case ReactRouterMode.V6: return 'v6'; case ReactRouterMode.V7_FRAMEWORK: return 'v7 Framework mode'; case ReactRouterMode.V7_DATA: return 'v7 Data mode'; case ReactRouterMode.V7_DECLARATIVE: return 'v7 Declarative mode'; } } //# sourceMappingURL=utils.js.map