@posthog/wizard 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,8 +3,7 @@
3
3
  </p>
4
4
 
5
5
  > **⚠️ Experimental:** This wizard is still in an experimental phase. If you
6
- > have any feedback, please drop an email to **joshua** [at] **posthog** [dot]
7
- > **com**.
6
+ > have any feedback, please drop an email to **joshua** [at] **posthog** [dot] **com**.
8
7
 
9
8
  <h1>PostHog Wizard</h1>
10
9
  <h4>The PostHog Wizard helps you quickly add PostHog to your project.</h4>
@@ -25,14 +24,15 @@ you would like the wizard to support, please open a
25
24
 
26
25
  The following CLI arguments are available:
27
26
 
28
- | Option | Description | Type | Default | Choices | Environment Variable |
29
- | ----------------- | ----------------------------------------------------- | ------- | ------------------------------- | -------- | ---------------------------- |
30
- | `--help` | Show help | boolean | | | |
31
- | `--version` | Show version number | boolean | | | |
32
- | `--debug` | Enable verbose logging | boolean | `false` | | `POSTHOG_WIZARD_DEBUG` |
33
- | `--integration` | Choose the integration to setup | choices | Select integration during setup | "nextjs" | `POSTHOG_WIZARD_INTEGRATION` |
34
- | `--force-install` | Force install the SDK NPM package (use with caution!) | boolean | `false` | | |
35
- | `--install-dir` | Relative path to install in | string | `.` | | `POSTHOG_WIZARD_INSTALL_DIR` |
27
+ | Option | Description | Type | Default | Choices | Environment Variable |
28
+ | ----------------- | ----------------------------------------------------- | ------- | ------------------------------- | -------------------- | ---------------------------- |
29
+ | `--help` | Show help | boolean | | | |
30
+ | `--version` | Show version number | boolean | | | |
31
+ | `--debug` | Enable verbose logging | boolean | `false` | | `POSTHOG_WIZARD_DEBUG` |
32
+ | `--integration` | Choose the integration to setup | choices | Select integration during setup | "nextjs" | `POSTHOG_WIZARD_INTEGRATION` |
33
+ | `--force-install` | Force install the SDK NPM package (use with caution!) | boolean | `false` | | |
34
+ | `--install-dir` | Relative path to install in | string | `.` | | `POSTHOG_WIZARD_INSTALL_DIR` |
35
+ | `--region` | PostHog region to use | choices | | "us", "eu", "custom" | `POSTHOG_WIZARD_REGION` |
36
36
 
37
37
  > Note: A large amount of the scaffolding for this came from the amazing Sentry
38
38
  > wizard, which you can find [here](https://github.com/getsentry/sentry-wizard)
@@ -65,7 +65,7 @@ async function runNextjsWizard(options) {
65
65
  if (!aiConsent) {
66
66
  await (0, clack_utils_1.abort)('The Next.js wizard requires AI to get setup right now. Please view the docs to setup Next.js manually instead: https://posthog.com/docs/libraries/next-js', 0);
67
67
  }
68
- const cloudRegion = await askForCloudRegion();
68
+ const cloudRegion = options.cloudRegion ?? (await askForCloudRegion());
69
69
  const typeScriptDetected = (0, clack_utils_1.isUsingTypeScript)(options);
70
70
  await (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)();
71
71
  const packageJson = await (0, clack_utils_1.getPackageDotJson)(options);
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs-wizard.js","sourceRoot":"","sources":["../../../src/nextjs/nextjs-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport { z } from 'zod';\nimport {\n abort,\n abortIfCancelled,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport type { CloudRegion, WizardOptions } from '../utils/types';\nimport { traceStep } from '../telemetry';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport {\n getNextJsRouter,\n getNextJsRouterName,\n getNextJsVersionBucket,\n NextJsRouter,\n} from './utils';\nimport {\n filterFilesPromptTemplate,\n generateFileChangesPromptTemplate,\n} from './prompts';\nimport { query } from '../utils/query';\nimport clack from '../utils/clack';\nimport fg from 'fast-glob';\nimport path from 'path';\nimport { Integration, ISSUES_URL } from '../lib/constants';\nimport { getNextjsAppRouterDocs, getNextjsPagesRouterDocs } from './docs';\nimport { analytics } from '../utils/analytics';\n\nexport async function runNextjsWizard(options: WizardOptions): Promise<void> {\n const { forceInstall } = options;\n\n printWelcome({\n wizardName: 'PostHog Next.js Wizard',\n });\n\n const aiConsent = await askForAIConsent();\n\n\n if (!aiConsent) {\n await abort(\n 'The Next.js wizard requires AI to get setup right now. Please view the docs to setup Next.js manually instead: https://posthog.com/docs/libraries/next-js',\n 0,\n );\n }\n\n const cloudRegion = await askForCloudRegion();\n\n const typeScriptDetected = isUsingTypeScript(options);\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson(options);\n\n await ensurePackageIsInstalled(packageJson, 'next', 'Next.js');\n\n const nextVersion = getPackageVersion('next', packageJson);\n\n analytics.setTag('nextjs-version', getNextJsVersionBucket(nextVersion));\n\n const { projectApiKey, wizardHash, host } = await getOrAskForProjectData({\n ...options,\n cloudRegion,\n });\n\n const sdkAlreadyInstalled = hasPackageInstalled('posthog-js', packageJson);\n\n analytics.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n const { packageManager: packageManagerFromInstallStep } =\n await installPackage({\n packageName: 'posthog-js',\n packageNameDisplayLabel: 'posthog-js',\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-js'],\n forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n await installPackage({\n packageName: 'posthog-node',\n packageNameDisplayLabel: 'posthog-node',\n packageManager: packageManagerFromInstallStep,\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-node'],\n forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n const router = await getNextJsRouter(options);\n\n const relevantFiles = await getRelevantFilesForNextJs(options);\n\n analytics.capture('wizard interaction', {\n action: 'detected relevant files',\n integration: Integration.nextjs,\n number_of_files: relevantFiles.length,\n });\n\n const installationDocumentation = getInstallationDocumentation({\n router,\n host,\n language: typeScriptDetected ? 'typescript' : 'javascript',\n });\n\n clack.log.info(\n `Reviewing PostHog documentation for ${getNextJsRouterName(router)}`,\n );\n\n const filesToChange = await getFilesToChange({\n relevantFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n });\n\n analytics.capture('wizard interaction', {\n action: 'detected files to change',\n integration: Integration.nextjs,\n files: filesToChange,\n });\n\n const changes: FileChange[] = [];\n\n for (const filePath of filesToChange) {\n const fileChangeSpinner = clack.spinner();\n\n analytics.capture('wizard interaction', {\n action: 'processing file',\n integration: Integration.nextjs,\n file: filePath,\n });\n\n try {\n let oldContent = undefined;\n try {\n oldContent = await fs.promises.readFile(\n path.join(options.installDir, filePath),\n 'utf8',\n );\n } catch (readError) {\n if (readError.code !== 'ENOENT') {\n await abort(`Error reading file ${filePath}`);\n continue;\n }\n }\n\n fileChangeSpinner.start(\n `${oldContent ? 'Updating' : 'Creating'} file ${filePath}`,\n );\n\n const unchangedFiles = filesToChange.filter(\n (filePath) => !changes.some((change) => change.filePath === filePath),\n );\n\n const newContent = await generateFileChanges({\n filePath,\n content: oldContent,\n changedFiles: changes,\n unchangedFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n });\n\n if (newContent !== oldContent) {\n await updateFile({ filePath, oldContent, newContent }, options);\n changes.push({ filePath, oldContent, newContent });\n }\n\n fileChangeSpinner.stop(\n `${oldContent ? 'Updated' : 'Created'} file ${filePath}`,\n );\n\n analytics.capture('wizard interaction', {\n action: 'processed file',\n integration: Integration.nextjs,\n file: filePath,\n });\n } catch (error) {\n await abort(`Error processing file ${filePath}`);\n }\n }\n\n await addOrUpdateEnvironmentVariables({\n projectApiKey,\n installDir: options.installDir,\n });\n\n analytics.capture('wizard interaction', {\n action: 'added environment variables',\n integration: Integration.nextjs,\n });\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager(options));\n\n await runPrettierIfInstalled({\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n clack.outro(`\n${chalk.green('Successfully installed PostHog!')} ${`\\n\\n${aiConsent\n ? `Note: This uses experimental AI to setup your project. It might have got it wrong, pleaes check!\\n`\n : ``\n }You should validate your setup by (re)starting your dev environment (e.g. ${chalk.cyan(\n `${packageManagerForOutro.runScriptCommand} dev`,\n )})`}\n\n${chalk.dim(`If you encounter any issues, let us know here: ${ISSUES_URL}`)}`);\n\n await analytics.shutdown('success');\n}\n\nasync function askForAIConsent() {\n return await traceStep('ask-for-ai-consent', async () => {\n const aiConsent = await abortIfCancelled(\n clack.select({\n message: 'Use AI to setup PostHog automatically? ✨',\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'We will use AI to help you setup PostHog quickly',\n },\n {\n label: 'No',\n value: false,\n hint: 'Continue without AI assistance',\n },\n ],\n initialValue: true,\n }),\n );\n\n return aiConsent;\n });\n}\n\nasync function askForCloudRegion(): Promise<CloudRegion> {\n return await traceStep('ask-for-cloud-region', async () => {\n const cloudRegion: CloudRegion = await abortIfCancelled(\n clack.select({\n message: 'Select your cloud region',\n options: [\n {\n label: 'US 🇺🇸',\n value: 'us',\n },\n {\n label: 'EU 🇪🇺',\n value: 'eu',\n },\n ],\n }),\n );\n\n return cloudRegion;\n });\n}\n\nasync function getRelevantFilesForNextJs({\n installDir,\n}: Pick<WizardOptions, 'installDir'>) {\n const filterPatterns = ['**/*.{tsx,ts,jsx,js,mjs,cjs}'];\n const ignorePatterns = [\n 'node_modules',\n 'dist',\n 'build',\n 'public',\n 'static',\n 'next-env.d.*',\n ];\n\n const filteredFiles = await fg(filterPatterns, {\n cwd: installDir,\n ignore: ignorePatterns,\n });\n\n return filteredFiles;\n}\n\nexport async function detectNextJs(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration.nextjs | undefined> {\n const packageJson = await getPackageDotJson(options);\n\n const hasNextInstalled = hasPackageInstalled('next', packageJson);\n\n if (hasNextInstalled) return Integration.nextjs;\n\n return undefined;\n}\n\nfunction getInstallationDocumentation({\n router,\n host,\n language,\n}: {\n router: NextJsRouter;\n host: string;\n language: 'typescript' | 'javascript';\n}) {\n if (router === NextJsRouter.PAGES_ROUTER) {\n return getNextjsPagesRouterDocs({ host, language });\n }\n\n return getNextjsAppRouterDocs({ host, language });\n}\n\nasync function getFilesToChange({\n relevantFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n}: {\n relevantFiles: string[];\n installationDocumentation: string;\n wizardHash: string;\n cloudRegion: CloudRegion;\n}) {\n const filterFilesSpinner = clack.spinner();\n\n filterFilesSpinner.start('Selecting files to change...');\n\n const filterFilesResponseSchmea = z.object({\n files: z.array(z.string()),\n });\n\n const filterFilesPrompt = await filterFilesPromptTemplate.format({\n documentation: installationDocumentation,\n file_list: relevantFiles.join('\\n'),\n });\n\n const filterFilesResponse = await query({\n message: filterFilesPrompt,\n schema: filterFilesResponseSchmea,\n wizardHash,\n region: cloudRegion,\n });\n\n const filesToChange = filterFilesResponse.files;\n\n filterFilesSpinner.stop(`Found ${filesToChange.length} files to change`);\n\n return filesToChange;\n}\n\nasync function generateFileChanges({\n filePath,\n content,\n changedFiles,\n unchangedFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n}: {\n filePath: string;\n content: string | undefined;\n changedFiles: FileChange[];\n unchangedFiles: string[];\n installationDocumentation: string;\n wizardHash: string;\n cloudRegion: CloudRegion;\n}) {\n const generateFileChangesPrompt =\n await generateFileChangesPromptTemplate.format({\n file_path: filePath,\n file_content: content,\n changed_files: changedFiles\n .map((change) => `${change.filePath}\\n${change.oldContent}`)\n .join('\\n'),\n unchanged_files: unchangedFiles,\n documentation: installationDocumentation,\n });\n\n const response = await query({\n message: generateFileChangesPrompt,\n schema: z.object({\n newContent: z.string(),\n }),\n wizardHash: wizardHash,\n region: cloudRegion,\n });\n\n return response.newContent;\n}\n\nasync function updateFile(\n change: FileChange,\n { installDir }: Pick<WizardOptions, 'installDir'>,\n) {\n const dir = path.dirname(path.join(installDir, change.filePath));\n await fs.promises.mkdir(dir, { recursive: true });\n await fs.promises.writeFile(\n path.join(installDir, change.filePath),\n change.newContent,\n );\n}\n\ntype FileChange = {\n filePath: string;\n oldContent?: string;\n newContent: string;\n};\n\nexport async function addOrUpdateEnvironmentVariables({\n projectApiKey,\n installDir,\n}: {\n projectApiKey: string;\n installDir: string;\n}): Promise<void> {\n const envVarContent = `# Posthog\\nNEXT_PUBLIC_POSTHOG_KEY=${projectApiKey}`;\n\n const dotEnvLocalFilePath = path.join(installDir, '.env.local');\n const dotEnvFilePath = path.join(installDir, '.env');\n const targetEnvFilePath = fs.existsSync(dotEnvLocalFilePath)\n ? dotEnvLocalFilePath\n : dotEnvFilePath;\n\n const dotEnvFileExists = fs.existsSync(targetEnvFilePath);\n\n const relativeEnvFilePath = path.relative(installDir, targetEnvFilePath);\n\n if (dotEnvFileExists) {\n const dotEnvFileContent = fs.readFileSync(targetEnvFilePath, 'utf8');\n\n const hasProjectApiKey = dotEnvFileContent.includes(\n `NEXT_PUBLIC_POSTHOG_KEY=${projectApiKey}`,\n );\n if (hasProjectApiKey) {\n clack.log.success(\n `${chalk.bold.cyan(\n relativeEnvFilePath,\n )} already has the necessary environment variables.`,\n );\n } else {\n try {\n let newContent = dotEnvFileContent;\n\n if (dotEnvFileContent.match(/^NEXT_PUBLIC_POSTHOG_KEY=.*$/m)) {\n newContent = dotEnvFileContent.replace(\n /^NEXT_PUBLIC_POSTHOG_KEY=.*$/m,\n `NEXT_PUBLIC_POSTHOG_KEY=${projectApiKey}`,\n );\n } else {\n if (!dotEnvFileContent.endsWith('\\n')) {\n newContent += '\\n';\n }\n newContent += envVarContent;\n }\n\n await fs.promises.writeFile(targetEnvFilePath, newContent, {\n encoding: 'utf8',\n flag: 'w',\n });\n clack.log.success(\n `Updated environment variables in ${chalk.bold.cyan(\n relativeEnvFilePath,\n )}`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to update environment variables in ${chalk.bold.cyan(\n relativeEnvFilePath,\n )}. Please update them manually. Error: ${error.message}`,\n );\n }\n }\n } else {\n try {\n await fs.promises.writeFile(targetEnvFilePath, envVarContent, {\n encoding: 'utf8',\n flag: 'w',\n });\n clack.log.success(\n `Created ${chalk.bold.cyan(\n relativeEnvFilePath,\n )} with environment variables for PostHog.`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to create ${chalk.bold.cyan(\n relativeEnvFilePath,\n )} with environment variables for PostHog. Please add them manually. Error: ${error.message\n }`,\n );\n }\n }\n\n const gitignorePath = getDotGitignore({ installDir });\n\n if (gitignorePath) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');\n const envFiles = ['.env', '.env.local'];\n const missingEnvFiles = envFiles;\n\n if (missingEnvFiles.length > 0) {\n try {\n const newGitignoreContent = `${gitignoreContent}\\n${missingEnvFiles.join(\n '\\n',\n )}`;\n await fs.promises.writeFile(gitignorePath, newGitignoreContent, {\n encoding: 'utf8',\n flag: 'w',\n });\n clack.log.success(\n `Updated ${chalk.bold.cyan(\n '.gitignore',\n )} to include environment files.`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to update ${chalk.bold.cyan(\n '.gitignore',\n )} to include environment files. Error: ${error.message}`,\n );\n }\n }\n } else {\n try {\n const newGitignoreContent = `.env\\n.env.local\\n`;\n await fs.promises.writeFile(\n path.join(installDir, '.gitignore'),\n newGitignoreContent,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n );\n clack.log.success(\n `Created ${chalk.bold.cyan('.gitignore')} with environment files.`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to create ${chalk.bold.cyan(\n '.gitignore',\n )} with environment files. Error: ${error.message}`,\n );\n }\n }\n}\n\nexport function getDotGitignore({\n installDir,\n}: Pick<WizardOptions, 'installDir'>) {\n const gitignorePath = path.join(installDir, '.gitignore');\n const gitignoreExists = fs.existsSync(gitignorePath);\n\n if (gitignoreExists) {\n return gitignorePath;\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"nextjs-wizard.js","sourceRoot":"","sources":["../../../src/nextjs/nextjs-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport { z } from 'zod';\nimport {\n abort,\n abortIfCancelled,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n runPrettierIfInstalled,\n} from '../utils/clack-utils';\nimport type { CloudRegion, WizardOptions } from '../utils/types';\nimport { traceStep } from '../telemetry';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport {\n getNextJsRouter,\n getNextJsRouterName,\n getNextJsVersionBucket,\n NextJsRouter,\n} from './utils';\nimport {\n filterFilesPromptTemplate,\n generateFileChangesPromptTemplate,\n} from './prompts';\nimport { query } from '../utils/query';\nimport clack from '../utils/clack';\nimport fg from 'fast-glob';\nimport path from 'path';\nimport { Integration, ISSUES_URL } from '../lib/constants';\nimport { getNextjsAppRouterDocs, getNextjsPagesRouterDocs } from './docs';\nimport { analytics } from '../utils/analytics';\n\nexport async function runNextjsWizard(options: WizardOptions): Promise<void> {\n const { forceInstall } = options;\n\n printWelcome({\n wizardName: 'PostHog Next.js Wizard',\n });\n\n const aiConsent = await askForAIConsent();\n\n if (!aiConsent) {\n await abort(\n 'The Next.js wizard requires AI to get setup right now. Please view the docs to setup Next.js manually instead: https://posthog.com/docs/libraries/next-js',\n 0,\n );\n }\n\n const cloudRegion = options.cloudRegion ?? (await askForCloudRegion());\n\n const typeScriptDetected = isUsingTypeScript(options);\n\n await confirmContinueIfNoOrDirtyGitRepo();\n\n const packageJson = await getPackageDotJson(options);\n\n await ensurePackageIsInstalled(packageJson, 'next', 'Next.js');\n\n const nextVersion = getPackageVersion('next', packageJson);\n\n analytics.setTag('nextjs-version', getNextJsVersionBucket(nextVersion));\n\n const { projectApiKey, wizardHash, host } = await getOrAskForProjectData({\n ...options,\n cloudRegion,\n });\n\n const sdkAlreadyInstalled = hasPackageInstalled('posthog-js', packageJson);\n\n analytics.setTag('sdk-already-installed', sdkAlreadyInstalled);\n\n const { packageManager: packageManagerFromInstallStep } =\n await installPackage({\n packageName: 'posthog-js',\n packageNameDisplayLabel: 'posthog-js',\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-js'],\n forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n await installPackage({\n packageName: 'posthog-node',\n packageNameDisplayLabel: 'posthog-node',\n packageManager: packageManagerFromInstallStep,\n alreadyInstalled: !!packageJson?.dependencies?.['posthog-node'],\n forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n const router = await getNextJsRouter(options);\n\n const relevantFiles = await getRelevantFilesForNextJs(options);\n\n analytics.capture('wizard interaction', {\n action: 'detected relevant files',\n integration: Integration.nextjs,\n number_of_files: relevantFiles.length,\n });\n\n const installationDocumentation = getInstallationDocumentation({\n router,\n host,\n language: typeScriptDetected ? 'typescript' : 'javascript',\n });\n\n clack.log.info(\n `Reviewing PostHog documentation for ${getNextJsRouterName(router)}`,\n );\n\n const filesToChange = await getFilesToChange({\n relevantFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n });\n\n analytics.capture('wizard interaction', {\n action: 'detected files to change',\n integration: Integration.nextjs,\n files: filesToChange,\n });\n\n const changes: FileChange[] = [];\n\n for (const filePath of filesToChange) {\n const fileChangeSpinner = clack.spinner();\n\n analytics.capture('wizard interaction', {\n action: 'processing file',\n integration: Integration.nextjs,\n file: filePath,\n });\n\n try {\n let oldContent = undefined;\n try {\n oldContent = await fs.promises.readFile(\n path.join(options.installDir, filePath),\n 'utf8',\n );\n } catch (readError) {\n if (readError.code !== 'ENOENT') {\n await abort(`Error reading file ${filePath}`);\n continue;\n }\n }\n\n fileChangeSpinner.start(\n `${oldContent ? 'Updating' : 'Creating'} file ${filePath}`,\n );\n\n const unchangedFiles = filesToChange.filter(\n (filePath) => !changes.some((change) => change.filePath === filePath),\n );\n\n const newContent = await generateFileChanges({\n filePath,\n content: oldContent,\n changedFiles: changes,\n unchangedFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n });\n\n if (newContent !== oldContent) {\n await updateFile({ filePath, oldContent, newContent }, options);\n changes.push({ filePath, oldContent, newContent });\n }\n\n fileChangeSpinner.stop(\n `${oldContent ? 'Updated' : 'Created'} file ${filePath}`,\n );\n\n analytics.capture('wizard interaction', {\n action: 'processed file',\n integration: Integration.nextjs,\n file: filePath,\n });\n } catch (error) {\n await abort(`Error processing file ${filePath}`);\n }\n }\n\n await addOrUpdateEnvironmentVariables({\n projectApiKey,\n installDir: options.installDir,\n });\n\n analytics.capture('wizard interaction', {\n action: 'added environment variables',\n integration: Integration.nextjs,\n });\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager(options));\n\n await runPrettierIfInstalled({\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n clack.outro(`\n${chalk.green('Successfully installed PostHog!')} ${`\\n\\n${\n aiConsent\n ? `Note: This uses experimental AI to setup your project. It might have got it wrong, pleaes check!\\n`\n : ``\n }You should validate your setup by (re)starting your dev environment (e.g. ${chalk.cyan(\n `${packageManagerForOutro.runScriptCommand} dev`,\n )})`}\n\n${chalk.dim(`If you encounter any issues, let us know here: ${ISSUES_URL}`)}`);\n\n await analytics.shutdown('success');\n}\n\nasync function askForAIConsent() {\n return await traceStep('ask-for-ai-consent', async () => {\n const aiConsent = await abortIfCancelled(\n clack.select({\n message: 'Use AI to setup PostHog automatically? ✨',\n options: [\n {\n label: 'Yes',\n value: true,\n hint: 'We will use AI to help you setup PostHog quickly',\n },\n {\n label: 'No',\n value: false,\n hint: 'Continue without AI assistance',\n },\n ],\n initialValue: true,\n }),\n );\n\n return aiConsent;\n });\n}\n\nasync function askForCloudRegion(): Promise<CloudRegion> {\n return await traceStep('ask-for-cloud-region', async () => {\n const cloudRegion: CloudRegion = await abortIfCancelled(\n clack.select({\n message: 'Select your cloud region',\n options: [\n {\n label: 'US 🇺🇸',\n value: 'us',\n },\n {\n label: 'EU 🇪🇺',\n value: 'eu',\n },\n ],\n }),\n );\n\n return cloudRegion;\n });\n}\n\nasync function getRelevantFilesForNextJs({\n installDir,\n}: Pick<WizardOptions, 'installDir'>) {\n const filterPatterns = ['**/*.{tsx,ts,jsx,js,mjs,cjs}'];\n const ignorePatterns = [\n 'node_modules',\n 'dist',\n 'build',\n 'public',\n 'static',\n 'next-env.d.*',\n ];\n\n const filteredFiles = await fg(filterPatterns, {\n cwd: installDir,\n ignore: ignorePatterns,\n });\n\n return filteredFiles;\n}\n\nexport async function detectNextJs(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration.nextjs | undefined> {\n const packageJson = await getPackageDotJson(options);\n\n const hasNextInstalled = hasPackageInstalled('next', packageJson);\n\n if (hasNextInstalled) return Integration.nextjs;\n\n return undefined;\n}\n\nfunction getInstallationDocumentation({\n router,\n host,\n language,\n}: {\n router: NextJsRouter;\n host: string;\n language: 'typescript' | 'javascript';\n}) {\n if (router === NextJsRouter.PAGES_ROUTER) {\n return getNextjsPagesRouterDocs({ host, language });\n }\n\n return getNextjsAppRouterDocs({ host, language });\n}\n\nasync function getFilesToChange({\n relevantFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n}: {\n relevantFiles: string[];\n installationDocumentation: string;\n wizardHash: string;\n cloudRegion: CloudRegion;\n}) {\n const filterFilesSpinner = clack.spinner();\n\n filterFilesSpinner.start('Selecting files to change...');\n\n const filterFilesResponseSchmea = z.object({\n files: z.array(z.string()),\n });\n\n const filterFilesPrompt = await filterFilesPromptTemplate.format({\n documentation: installationDocumentation,\n file_list: relevantFiles.join('\\n'),\n });\n\n const filterFilesResponse = await query({\n message: filterFilesPrompt,\n schema: filterFilesResponseSchmea,\n wizardHash,\n region: cloudRegion,\n });\n\n const filesToChange = filterFilesResponse.files;\n\n filterFilesSpinner.stop(`Found ${filesToChange.length} files to change`);\n\n return filesToChange;\n}\n\nasync function generateFileChanges({\n filePath,\n content,\n changedFiles,\n unchangedFiles,\n installationDocumentation,\n wizardHash,\n cloudRegion,\n}: {\n filePath: string;\n content: string | undefined;\n changedFiles: FileChange[];\n unchangedFiles: string[];\n installationDocumentation: string;\n wizardHash: string;\n cloudRegion: CloudRegion;\n}) {\n const generateFileChangesPrompt =\n await generateFileChangesPromptTemplate.format({\n file_path: filePath,\n file_content: content,\n changed_files: changedFiles\n .map((change) => `${change.filePath}\\n${change.oldContent}`)\n .join('\\n'),\n unchanged_files: unchangedFiles,\n documentation: installationDocumentation,\n });\n\n const response = await query({\n message: generateFileChangesPrompt,\n schema: z.object({\n newContent: z.string(),\n }),\n wizardHash: wizardHash,\n region: cloudRegion,\n });\n\n return response.newContent;\n}\n\nasync function updateFile(\n change: FileChange,\n { installDir }: Pick<WizardOptions, 'installDir'>,\n) {\n const dir = path.dirname(path.join(installDir, change.filePath));\n await fs.promises.mkdir(dir, { recursive: true });\n await fs.promises.writeFile(\n path.join(installDir, change.filePath),\n change.newContent,\n );\n}\n\ntype FileChange = {\n filePath: string;\n oldContent?: string;\n newContent: string;\n};\n\nexport async function addOrUpdateEnvironmentVariables({\n projectApiKey,\n installDir,\n}: {\n projectApiKey: string;\n installDir: string;\n}): Promise<void> {\n const envVarContent = `# Posthog\\nNEXT_PUBLIC_POSTHOG_KEY=${projectApiKey}`;\n\n const dotEnvLocalFilePath = path.join(installDir, '.env.local');\n const dotEnvFilePath = path.join(installDir, '.env');\n const targetEnvFilePath = fs.existsSync(dotEnvLocalFilePath)\n ? dotEnvLocalFilePath\n : dotEnvFilePath;\n\n const dotEnvFileExists = fs.existsSync(targetEnvFilePath);\n\n const relativeEnvFilePath = path.relative(installDir, targetEnvFilePath);\n\n if (dotEnvFileExists) {\n const dotEnvFileContent = fs.readFileSync(targetEnvFilePath, 'utf8');\n\n const hasProjectApiKey = dotEnvFileContent.includes(\n `NEXT_PUBLIC_POSTHOG_KEY=${projectApiKey}`,\n );\n if (hasProjectApiKey) {\n clack.log.success(\n `${chalk.bold.cyan(\n relativeEnvFilePath,\n )} already has the necessary environment variables.`,\n );\n } else {\n try {\n let newContent = dotEnvFileContent;\n\n if (dotEnvFileContent.match(/^NEXT_PUBLIC_POSTHOG_KEY=.*$/m)) {\n newContent = dotEnvFileContent.replace(\n /^NEXT_PUBLIC_POSTHOG_KEY=.*$/m,\n `NEXT_PUBLIC_POSTHOG_KEY=${projectApiKey}`,\n );\n } else {\n if (!dotEnvFileContent.endsWith('\\n')) {\n newContent += '\\n';\n }\n newContent += envVarContent;\n }\n\n await fs.promises.writeFile(targetEnvFilePath, newContent, {\n encoding: 'utf8',\n flag: 'w',\n });\n clack.log.success(\n `Updated environment variables in ${chalk.bold.cyan(\n relativeEnvFilePath,\n )}`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to update environment variables in ${chalk.bold.cyan(\n relativeEnvFilePath,\n )}. Please update them manually. Error: ${error.message}`,\n );\n }\n }\n } else {\n try {\n await fs.promises.writeFile(targetEnvFilePath, envVarContent, {\n encoding: 'utf8',\n flag: 'w',\n });\n clack.log.success(\n `Created ${chalk.bold.cyan(\n relativeEnvFilePath,\n )} with environment variables for PostHog.`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to create ${chalk.bold.cyan(\n relativeEnvFilePath,\n )} with environment variables for PostHog. Please add them manually. Error: ${\n error.message\n }`,\n );\n }\n }\n\n const gitignorePath = getDotGitignore({ installDir });\n\n if (gitignorePath) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');\n const envFiles = ['.env', '.env.local'];\n const missingEnvFiles = envFiles;\n\n if (missingEnvFiles.length > 0) {\n try {\n const newGitignoreContent = `${gitignoreContent}\\n${missingEnvFiles.join(\n '\\n',\n )}`;\n await fs.promises.writeFile(gitignorePath, newGitignoreContent, {\n encoding: 'utf8',\n flag: 'w',\n });\n clack.log.success(\n `Updated ${chalk.bold.cyan(\n '.gitignore',\n )} to include environment files.`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to update ${chalk.bold.cyan(\n '.gitignore',\n )} to include environment files. Error: ${error.message}`,\n );\n }\n }\n } else {\n try {\n const newGitignoreContent = `.env\\n.env.local\\n`;\n await fs.promises.writeFile(\n path.join(installDir, '.gitignore'),\n newGitignoreContent,\n {\n encoding: 'utf8',\n flag: 'w',\n },\n );\n clack.log.success(\n `Created ${chalk.bold.cyan('.gitignore')} with environment files.`,\n );\n } catch (error) {\n clack.log.warning(\n `Failed to create ${chalk.bold.cyan(\n '.gitignore',\n )} with environment files. Error: ${error.message}`,\n );\n }\n }\n}\n\nexport function getDotGitignore({\n installDir,\n}: Pick<WizardOptions, 'installDir'>) {\n const gitignorePath = path.join(installDir, '.gitignore');\n const gitignoreExists = fs.existsSync(gitignorePath);\n\n if (gitignoreExists) {\n return gitignorePath;\n }\n\n return undefined;\n}\n"]}
package/dist/src/run.d.ts CHANGED
@@ -1,9 +1,11 @@
1
+ import type { CloudRegion } from './utils/types';
1
2
  import { Integration } from './lib/constants';
2
3
  type Args = {
3
4
  integration?: Integration;
4
5
  debug?: boolean;
5
6
  forceInstall?: boolean;
6
7
  installDir?: string;
8
+ region?: CloudRegion;
7
9
  };
8
10
  export declare function run(argv: Args): Promise<void>;
9
11
  export {};
package/dist/src/run.js CHANGED
@@ -24,6 +24,7 @@ async function runWizard(argv) {
24
24
  installDir: finalArgs.installDir
25
25
  ? path_1.default.join(process.cwd(), finalArgs.installDir)
26
26
  : process.cwd(),
27
+ cloudRegion: finalArgs.region ?? undefined,
27
28
  };
28
29
  clack_1.default.intro(`Welcome to the PostHog setup wizard ✨`);
29
30
  const integration = finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":";;;;;AAiBA,kBAEC;AAnBD,qDAAuD;AAGvD,0DAAuE;AAEvE,+CAAyE;AACzE,qDAAsD;AACtD,0DAAkC;AAClC,gDAAwB;AASjB,KAAK,UAAU,GAAG,CAAC,IAAU;IAClC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAU;IACjC,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI;QACP,GAAG,IAAA,6BAAe,GAAE;KACrB,CAAC;IAEF,MAAM,aAAa,GAAkB;QACnC,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,KAAK;QAC/B,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,KAAK;QAC7C,UAAU,EAAE,SAAS,CAAC,UAAU;YAC9B,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,UAAU,CAAC;YAChD,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;KAClB,CAAC;IAEF,eAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAErD,MAAM,WAAW,GACf,SAAS,CAAC,WAAW,IAAI,CAAC,MAAM,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC;IAEzE,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,uBAAW,CAAC,MAAM;YACrB,MAAM,IAAA,+BAAe,EAAC,aAAa,CAAC,CAAC;YACrC,MAAM;QAER;YACE,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAA0C;IAE1C,MAAM,SAAS,GAAG,CAAC,4BAAY,CAAC,CAAC;IAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAA0C;IAE1C,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,mBAAmB,EAAE,CAAC;QACxB,eAAK,CAAC,GAAG,CAAC,OAAO,CACf,yBAAyB,IAAA,qCAAyB,EAAC,mBAAmB,CAAC,EAAE,CAC1E,CAAC;QACF,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,MAAM,WAAW,GAAgB,MAAM,IAAA,8BAAgB,EACrD,eAAK,CAAC,MAAM,CAAC;QACX,OAAO,EAAE,6BAA6B;QACtC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAW,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC3D,CAAC,CACH,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["import { abortIfCancelled } from './utils/clack-utils';\n\nimport type { WizardOptions } from './utils/types';\nimport { detectNextJs, runNextjsWizard } from './nextjs/nextjs-wizard';\n\nimport { getIntegrationDescription, Integration } from './lib/constants';\nimport { readEnvironment } from './utils/environment';\nimport clack from './utils/clack';\nimport path from 'path';\n\ntype Args = {\n integration?: Integration;\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n};\n\nexport async function run(argv: Args) {\n await runWizard(argv);\n}\n\nasync function runWizard(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n const wizardOptions: WizardOptions = {\n debug: finalArgs.debug ?? false,\n forceInstall: finalArgs.forceInstall ?? false,\n installDir: finalArgs.installDir\n ? path.join(process.cwd(), finalArgs.installDir)\n : process.cwd(),\n };\n\n clack.intro(`Welcome to the PostHog setup wizard ✨`);\n\n const integration =\n finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));\n\n switch (integration) {\n case Integration.nextjs:\n await runNextjsWizard(wizardOptions);\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n\nasync function detectIntegration(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration | undefined> {\n const detectors = [detectNextJs];\n\n for (const detector of detectors) {\n const integration = await detector(options);\n if (integration) {\n return integration;\n }\n }\n}\n\nasync function getIntegrationForSetup(\n options: Pick<WizardOptions, 'installDir'>,\n) {\n const detectedIntegration = await detectIntegration(options);\n\n if (detectedIntegration) {\n clack.log.success(\n `Detected integration: ${getIntegrationDescription(detectedIntegration)}`,\n );\n return detectedIntegration;\n }\n\n const integration: Integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [{ value: Integration.nextjs, label: 'Next.js' }],\n }),\n );\n\n return integration;\n}\n"]}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":";;;;;AAkBA,kBAEC;AApBD,qDAAuD;AAGvD,0DAAuE;AAEvE,+CAAyE;AACzE,qDAAsD;AACtD,0DAAkC;AAClC,gDAAwB;AAUjB,KAAK,UAAU,GAAG,CAAC,IAAU;IAClC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAU;IACjC,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI;QACP,GAAG,IAAA,6BAAe,GAAE;KACrB,CAAC;IAEF,MAAM,aAAa,GAAkB;QACnC,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,KAAK;QAC/B,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,KAAK;QAC7C,UAAU,EAAE,SAAS,CAAC,UAAU;YAC9B,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,UAAU,CAAC;YAChD,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,WAAW,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;KAC3C,CAAC;IAEF,eAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAErD,MAAM,WAAW,GACf,SAAS,CAAC,WAAW,IAAI,CAAC,MAAM,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC;IAEzE,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,uBAAW,CAAC,MAAM;YACrB,MAAM,IAAA,+BAAe,EAAC,aAAa,CAAC,CAAC;YACrC,MAAM;QAER;YACE,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAA0C;IAE1C,MAAM,SAAS,GAAG,CAAC,4BAAY,CAAC,CAAC;IAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAA0C;IAE1C,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,mBAAmB,EAAE,CAAC;QACxB,eAAK,CAAC,GAAG,CAAC,OAAO,CACf,yBAAyB,IAAA,qCAAyB,EAAC,mBAAmB,CAAC,EAAE,CAC1E,CAAC;QACF,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,MAAM,WAAW,GAAgB,MAAM,IAAA,8BAAgB,EACrD,eAAK,CAAC,MAAM,CAAC;QACX,OAAO,EAAE,6BAA6B;QACtC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAW,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC3D,CAAC,CACH,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["import { abortIfCancelled } from './utils/clack-utils';\n\nimport type { CloudRegion, WizardOptions } from './utils/types';\nimport { detectNextJs, runNextjsWizard } from './nextjs/nextjs-wizard';\n\nimport { getIntegrationDescription, Integration } from './lib/constants';\nimport { readEnvironment } from './utils/environment';\nimport clack from './utils/clack';\nimport path from 'path';\n\ntype Args = {\n integration?: Integration;\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n region?: CloudRegion;\n};\n\nexport async function run(argv: Args) {\n await runWizard(argv);\n}\n\nasync function runWizard(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n const wizardOptions: WizardOptions = {\n debug: finalArgs.debug ?? false,\n forceInstall: finalArgs.forceInstall ?? false,\n installDir: finalArgs.installDir\n ? path.join(process.cwd(), finalArgs.installDir)\n : process.cwd(),\n cloudRegion: finalArgs.region ?? undefined,\n };\n\n clack.intro(`Welcome to the PostHog setup wizard ✨`);\n\n const integration =\n finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));\n\n switch (integration) {\n case Integration.nextjs:\n await runNextjsWizard(wizardOptions);\n break;\n\n default:\n clack.log.error('No setup wizard selected!');\n }\n}\n\nasync function detectIntegration(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration | undefined> {\n const detectors = [detectNextJs];\n\n for (const detector of detectors) {\n const integration = await detector(options);\n if (integration) {\n return integration;\n }\n }\n}\n\nasync function getIntegrationForSetup(\n options: Pick<WizardOptions, 'installDir'>,\n) {\n const detectedIntegration = await detectIntegration(options);\n\n if (detectedIntegration) {\n clack.log.success(\n `Detected integration: ${getIntegrationDescription(detectedIntegration)}`,\n );\n return detectedIntegration;\n }\n\n const integration: Integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: [{ value: Integration.nextjs, label: 'Next.js' }],\n }),\n );\n\n return integration;\n}\n"]}
@@ -21,6 +21,10 @@ export type WizardOptions = {
21
21
  * The directory to run the wizard in.
22
22
  */
23
23
  installDir: string;
24
+ /**
25
+ * The cloud region to use.
26
+ */
27
+ cloudRegion?: CloudRegion;
24
28
  };
25
29
  export interface Feature {
26
30
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"","sourcesContent":["export type PostHogProjectData = Record<string, unknown>;\n\nexport type PreselectedProject = {\n project: PostHogProjectData;\n authToken: string;\n};\n\nexport type WizardOptions = {\n /**\n * Whether to enable debug mode.\n */\n debug: boolean;\n\n /**\n * Whether to force install the SDK package to continue with the installation in case\n * any package manager checks are failing (e.g. peer dependency versions).\n *\n * Use with caution and only if you know what you're doing.\n *\n * Does not apply to all wizard flows (currently NPM only)\n */\n forceInstall: boolean;\n\n /**\n * The directory to run the wizard in.\n */\n installDir: string;\n};\n\nexport interface Feature {\n id: string;\n prompt: string;\n enabledHint?: string;\n disabledHint?: string;\n}\n\nexport type CloudRegion = 'us' | 'eu';\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"","sourcesContent":["export type PostHogProjectData = Record<string, unknown>;\n\nexport type PreselectedProject = {\n project: PostHogProjectData;\n authToken: string;\n};\n\nexport type WizardOptions = {\n /**\n * Whether to enable debug mode.\n */\n debug: boolean;\n\n /**\n * Whether to force install the SDK package to continue with the installation in case\n * any package manager checks are failing (e.g. peer dependency versions).\n *\n * Use with caution and only if you know what you're doing.\n *\n * Does not apply to all wizard flows (currently NPM only)\n */\n forceInstall: boolean;\n\n /**\n * The directory to run the wizard in.\n */\n installDir: string;\n\n /**\n * The cloud region to use.\n */\n cloudRegion?: CloudRegion;\n};\n\nexport interface Feature {\n id: string;\n prompt: string;\n enabledHint?: string;\n disabledHint?: string;\n}\n\nexport type CloudRegion = 'us' | 'eu';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posthog/wizard",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "homepage": "https://github.com/posthog/wizard",
5
5
  "repository": "https://github.com/posthog/wizard",
6
6
  "description": "The PostHog wizard helps you to configure your project",