@posthog/wizard 0.7.1 → 0.8.1
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/dist/src/lib/config.d.ts +7 -7
- package/dist/src/lib/config.js +7 -7
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/messages.d.ts +2 -1
- package/dist/src/lib/messages.js +22 -6
- package/dist/src/lib/messages.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +12 -3
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/utils.js +2 -1
- package/dist/src/nextjs/utils.js.map +1 -1
- package/dist/src/react/react-wizard.js +9 -0
- package/dist/src/react/react-wizard.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +1 -0
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/run.js +22 -15
- package/dist/src/run.js.map +1 -1
- package/dist/src/steps/add-editor-rules.js +3 -1
- package/dist/src/steps/add-editor-rules.js.map +1 -1
- package/dist/src/steps/create-pr.js +1 -1
- package/dist/src/steps/create-pr.js.map +1 -1
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +8 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +12 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
- package/dist/src/steps/upload-environment-variables/index.js +66 -0
- package/dist/src/steps/upload-environment-variables/index.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/providers/__tests__/vercel.test.d.ts +1 -0
- package/dist/src/steps/upload-environment-variables/providers/__tests__/vercel.test.js +117 -0
- package/dist/src/steps/upload-environment-variables/providers/__tests__/vercel.test.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +14 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js +146 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -0
- package/dist/src/svelte/svelte-wizard.js +1 -0
- package/dist/src/svelte/svelte-wizard.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +2 -1
- package/dist/src/utils/clack-utils.js +6 -2
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/package.json +5 -1
package/dist/src/lib/config.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export declare const INTEGRATION_CONFIG: {
|
|
|
9
9
|
readonly generateFilesRules: "";
|
|
10
10
|
readonly filterFilesRules: "";
|
|
11
11
|
readonly docsUrl: "https://posthog.com/docs/libraries/next-js";
|
|
12
|
-
readonly
|
|
13
|
-
readonly nextSteps: "• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app
|
|
12
|
+
readonly defaultChanges: "• Installed posthog-js & posthog-node packages\n• Initialized PostHog and added pageview tracking\n• Created a PostHogClient to use PostHog server-side\n• Setup a reverse proxy to avoid ad blockers blocking analytics requests";
|
|
13
|
+
readonly nextSteps: "• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app";
|
|
14
14
|
};
|
|
15
15
|
readonly react: {
|
|
16
16
|
readonly name: "React";
|
|
@@ -20,8 +20,8 @@ export declare const INTEGRATION_CONFIG: {
|
|
|
20
20
|
readonly generateFilesRules: "";
|
|
21
21
|
readonly filterFilesRules: "";
|
|
22
22
|
readonly docsUrl: "https://posthog.com/docs/libraries/react";
|
|
23
|
-
readonly
|
|
24
|
-
readonly nextSteps: "• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app
|
|
23
|
+
readonly defaultChanges: "• Installed posthog-js package\n• Added PostHogProvider to the root of the app, to initialize PostHog and enable autocapture";
|
|
24
|
+
readonly nextSteps: "• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app";
|
|
25
25
|
};
|
|
26
26
|
readonly svelte: {
|
|
27
27
|
readonly name: "Svelte";
|
|
@@ -31,8 +31,8 @@ export declare const INTEGRATION_CONFIG: {
|
|
|
31
31
|
readonly generateFilesRules: "";
|
|
32
32
|
readonly filterFilesRules: "";
|
|
33
33
|
readonly docsUrl: "https://posthog.com/docs/libraries/svelte";
|
|
34
|
-
readonly
|
|
35
|
-
readonly nextSteps: "• Call posthog.identify() when a user signs into your app\n• Use getPostHogClient() to start capturing events server - side
|
|
34
|
+
readonly defaultChanges: "• Installed posthog-js & posthog-node packages\n• Added PostHog initialization to your Svelte app\n• Setup pageview & pageleave tracking\n• Setup event auto - capture to capture events as users interact with your app\n• Added a getPostHogClient() function to use PostHog server-side";
|
|
35
|
+
readonly nextSteps: "• Call posthog.identify() when a user signs into your app\n• Use getPostHogClient() to start capturing events server - side";
|
|
36
36
|
};
|
|
37
37
|
readonly "react-native": {
|
|
38
38
|
readonly name: "React Native";
|
|
@@ -42,7 +42,7 @@ export declare const INTEGRATION_CONFIG: {
|
|
|
42
42
|
readonly generateFilesRules: "";
|
|
43
43
|
readonly filterFilesRules: "";
|
|
44
44
|
readonly docsUrl: "https://posthog.com/docs/libraries/react-native";
|
|
45
|
-
readonly
|
|
45
|
+
readonly defaultChanges: "• Installed required packages\n• Added PostHogProvider to the root of the app\n• Enabled autocapture and session replay";
|
|
46
46
|
readonly nextSteps: "• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app";
|
|
47
47
|
};
|
|
48
48
|
};
|
package/dist/src/lib/config.js
CHANGED
|
@@ -23,8 +23,8 @@ exports.INTEGRATION_CONFIG = {
|
|
|
23
23
|
generateFilesRules: '',
|
|
24
24
|
filterFilesRules: '',
|
|
25
25
|
docsUrl: 'https://posthog.com/docs/libraries/next-js',
|
|
26
|
-
|
|
27
|
-
nextSteps: '• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app
|
|
26
|
+
defaultChanges: '• Installed posthog-js & posthog-node packages\n• Initialized PostHog and added pageview tracking\n• Created a PostHogClient to use PostHog server-side\n• Setup a reverse proxy to avoid ad blockers blocking analytics requests',
|
|
27
|
+
nextSteps: '• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app',
|
|
28
28
|
},
|
|
29
29
|
[constants_1.Integration.react]: {
|
|
30
30
|
name: 'React',
|
|
@@ -44,8 +44,8 @@ exports.INTEGRATION_CONFIG = {
|
|
|
44
44
|
generateFilesRules: '',
|
|
45
45
|
filterFilesRules: '',
|
|
46
46
|
docsUrl: 'https://posthog.com/docs/libraries/react',
|
|
47
|
-
|
|
48
|
-
nextSteps: '• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app
|
|
47
|
+
defaultChanges: '• Installed posthog-js package\n• Added PostHogProvider to the root of the app, to initialize PostHog and enable autocapture',
|
|
48
|
+
nextSteps: '• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app',
|
|
49
49
|
},
|
|
50
50
|
[constants_1.Integration.svelte]: {
|
|
51
51
|
name: 'Svelte',
|
|
@@ -58,8 +58,8 @@ exports.INTEGRATION_CONFIG = {
|
|
|
58
58
|
generateFilesRules: '',
|
|
59
59
|
filterFilesRules: '',
|
|
60
60
|
docsUrl: 'https://posthog.com/docs/libraries/svelte',
|
|
61
|
-
|
|
62
|
-
nextSteps: '• Call posthog.identify() when a user signs into your app\n• Use getPostHogClient() to start capturing events server - side
|
|
61
|
+
defaultChanges: '• Installed posthog-js & posthog-node packages\n• Added PostHog initialization to your Svelte app\n• Setup pageview & pageleave tracking\n• Setup event auto - capture to capture events as users interact with your app\n• Added a getPostHogClient() function to use PostHog server-side',
|
|
62
|
+
nextSteps: '• Call posthog.identify() when a user signs into your app\n• Use getPostHogClient() to start capturing events server - side',
|
|
63
63
|
},
|
|
64
64
|
[constants_1.Integration.reactNative]: {
|
|
65
65
|
name: 'React Native',
|
|
@@ -72,7 +72,7 @@ exports.INTEGRATION_CONFIG = {
|
|
|
72
72
|
generateFilesRules: '',
|
|
73
73
|
filterFilesRules: '',
|
|
74
74
|
docsUrl: 'https://posthog.com/docs/libraries/react-native',
|
|
75
|
-
|
|
75
|
+
defaultChanges: '• Installed required packages\n• Added PostHogProvider to the root of the app\n• Enabled autocapture and session replay',
|
|
76
76
|
nextSteps: '• Call posthog.identify() when a user signs into your app\n• Call posthog.capture() to capture custom events in your app',
|
|
77
77
|
},
|
|
78
78
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":";;;AAAA,sDAAyD;AACzD,wDAA4D;AAE5D,2CAA0C;AAc7B,QAAA,kBAAkB,GAAG;IAChC,CAAC,uBAAW,CAAC,MAAM,CAAC,EAAE;QACpB,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,CAAC,8BAA8B,CAAC;QAChD,cAAc,EAAE;YACd,cAAc;YACd,MAAM;YACN,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,cAAc;SACf;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,kCAAmB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE;QACpB,OAAO,EAAE,4CAA4C;QACrD,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":";;;AAAA,sDAAyD;AACzD,wDAA4D;AAE5D,2CAA0C;AAc7B,QAAA,kBAAkB,GAAG;IAChC,CAAC,uBAAW,CAAC,MAAM,CAAC,EAAE;QACpB,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,CAAC,8BAA8B,CAAC;QAChD,cAAc,EAAE;YACd,cAAc;YACd,MAAM;YACN,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,cAAc;SACf;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,kCAAmB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE;QACpB,OAAO,EAAE,4CAA4C;QACrD,cAAc,EACZ,mOAAmO;QACrO,SAAS,EACP,0HAA0H;KAC7H;IACD,CAAC,uBAAW,CAAC,KAAK,CAAC,EAAE;QACnB,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,CAAC,sBAAsB,CAAC;QACxC,cAAc,EAAE;YACd,cAAc;YACd,MAAM;YACN,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,kCAAmB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,CAAC;QACD,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE;QACpB,OAAO,EAAE,0CAA0C;QACnD,cAAc,EACZ,8HAA8H;QAChI,SAAS,EACP,0HAA0H;KAC7H;IACD,CAAC,uBAAW,CAAC,MAAM,CAAC,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE,CAAC,6BAA6B,CAAC;QAC/C,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,kCAAmB,EAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;QACD,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE;QACpB,OAAO,EAAE,2CAA2C;QACpD,cAAc,EACZ,4RAA4R;QAC9R,SAAS,EACP,6HAA6H;KAChI;IACD,CAAC,uBAAW,CAAC,WAAW,CAAC,EAAE;QACzB,IAAI,EAAE,cAAc;QACpB,cAAc,EAAE,CAAC,sBAAsB,CAAC;QACxC,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,kCAAmB,EAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QACD,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE;QACpB,OAAO,EAAE,iDAAiD;QAC1D,cAAc,EACZ,yHAAyH;QAC3H,SAAS,EACP,0HAA0H;KAC7H;CACwD,CAAC;AAE/C,QAAA,iBAAiB,GAAG;IAC/B,uBAAW,CAAC,MAAM;IAClB,uBAAW,CAAC,MAAM;IAClB,uBAAW,CAAC,WAAW;IACvB,uBAAW,CAAC,KAAK;CACT,CAAC","sourcesContent":["import { getPackageDotJson } from '../utils/clack-utils';\nimport { hasPackageInstalled } from '../utils/package-json';\nimport type { WizardOptions } from '../utils/types';\nimport { Integration } from './constants';\n\ntype IntegrationConfig = {\n name: string;\n filterPatterns: string[];\n ignorePatterns: string[];\n detect: (options: Pick<WizardOptions, 'installDir'>) => Promise<boolean>;\n generateFilesRules: string;\n filterFilesRules: string;\n docsUrl: string;\n nextSteps: string;\n defaultChanges: string;\n};\n\nexport const INTEGRATION_CONFIG = {\n [Integration.nextjs]: {\n name: 'Next.js',\n filterPatterns: ['**/*.{tsx,ts,jsx,js,mjs,cjs}'],\n ignorePatterns: [\n 'node_modules',\n 'dist',\n 'build',\n 'public',\n 'static',\n 'next-env.d.*',\n ],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return hasPackageInstalled('next', packageJson);\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://posthog.com/docs/libraries/next-js',\n defaultChanges:\n '• Installed posthog-js & posthog-node packages\\n• Initialized PostHog and added pageview tracking\\n• Created a PostHogClient to use PostHog server-side\\n• Setup a reverse proxy to avoid ad blockers blocking analytics requests',\n nextSteps:\n '• Call posthog.identify() when a user signs into your app\\n• Call posthog.capture() to capture custom events in your app',\n },\n [Integration.react]: {\n name: 'React',\n filterPatterns: ['**/*.{tsx,ts,jsx,js}'],\n ignorePatterns: [\n 'node_modules',\n 'dist',\n 'build',\n 'public',\n 'static',\n 'assets',\n ],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return hasPackageInstalled('react', packageJson);\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://posthog.com/docs/libraries/react',\n defaultChanges:\n '• Installed posthog-js package\\n• Added PostHogProvider to the root of the app, to initialize PostHog and enable autocapture',\n nextSteps:\n '• Call posthog.identify() when a user signs into your app\\n• Call posthog.capture() to capture custom events in your app',\n },\n [Integration.svelte]: {\n name: 'Svelte',\n filterPatterns: ['**/*.{svelte,ts,js,jsx,tsx}'],\n ignorePatterns: ['node_modules', 'dist', 'build', 'public', 'static'],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return hasPackageInstalled('@sveltejs/kit', packageJson);\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://posthog.com/docs/libraries/svelte',\n defaultChanges:\n '• Installed posthog-js & posthog-node packages\\n• Added PostHog initialization to your Svelte app\\n• Setup pageview & pageleave tracking\\n• Setup event auto - capture to capture events as users interact with your app\\n• Added a getPostHogClient() function to use PostHog server-side',\n nextSteps:\n '• Call posthog.identify() when a user signs into your app\\n• Use getPostHogClient() to start capturing events server - side',\n },\n [Integration.reactNative]: {\n name: 'React Native',\n filterPatterns: ['**/*.{ts,js,jsx,tsx}'],\n ignorePatterns: ['node_modules', 'dist', 'build', 'public', 'static'],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return hasPackageInstalled('react-native', packageJson);\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://posthog.com/docs/libraries/react-native',\n defaultChanges:\n '• Installed required packages\\n• Added PostHogProvider to the root of the app\\n• Enabled autocapture and session replay',\n nextSteps:\n '• Call posthog.identify() when a user signs into your app\\n• Call posthog.capture() to capture custom events in your app',\n },\n} as const satisfies Record<Integration, IntegrationConfig>;\n\nexport const INTEGRATION_ORDER = [\n Integration.nextjs,\n Integration.svelte,\n Integration.reactNative,\n Integration.react,\n] as const;\n"]}
|
|
@@ -5,7 +5,7 @@ export declare const getPRDescription: ({ integration, addedEditorRules, }: {
|
|
|
5
5
|
integration: Integration;
|
|
6
6
|
addedEditorRules: boolean;
|
|
7
7
|
}) => string;
|
|
8
|
-
export declare const getOutroMessage: ({ options, integration, cloudRegion, addedEditorRules, packageManager, envFileChanged, prUrl, }: {
|
|
8
|
+
export declare const getOutroMessage: ({ options, integration, cloudRegion, addedEditorRules, packageManager, envFileChanged, uploadedEnvVars, prUrl, }: {
|
|
9
9
|
options: WizardOptions;
|
|
10
10
|
integration: Integration;
|
|
11
11
|
cloudRegion: CloudRegion;
|
|
@@ -13,4 +13,5 @@ export declare const getOutroMessage: ({ options, integration, cloudRegion, adde
|
|
|
13
13
|
packageManager?: PackageManager;
|
|
14
14
|
envFileChanged?: string;
|
|
15
15
|
prUrl?: string;
|
|
16
|
+
uploadedEnvVars: string[];
|
|
16
17
|
}) => string;
|
package/dist/src/lib/messages.js
CHANGED
|
@@ -13,7 +13,7 @@ const getPRDescription = ({ integration, addedEditorRules, }) => {
|
|
|
13
13
|
return `This PR adds an integration for PostHog.
|
|
14
14
|
|
|
15
15
|
The following changes were made:
|
|
16
|
-
${integrationConfig.
|
|
16
|
+
${integrationConfig.defaultChanges}
|
|
17
17
|
${addedEditorRules ? `• Added Cursor rules for PostHog\n` : ''}
|
|
18
18
|
|
|
19
19
|
|
|
@@ -22,21 +22,37 @@ const getPRDescription = ({ integration, addedEditorRules, }) => {
|
|
|
22
22
|
Learn more about PostHog + ${integrationConfig.name}: ${integrationConfig.docsUrl}`;
|
|
23
23
|
};
|
|
24
24
|
exports.getPRDescription = getPRDescription;
|
|
25
|
-
const getOutroMessage = ({ options, integration, cloudRegion, addedEditorRules, packageManager, envFileChanged, prUrl, }) => {
|
|
25
|
+
const getOutroMessage = ({ options, integration, cloudRegion, addedEditorRules, packageManager, envFileChanged, uploadedEnvVars, prUrl, }) => {
|
|
26
26
|
const continueUrl = options.signup
|
|
27
27
|
? `${(0, urls_1.getCloudUrlFromRegion)(cloudRegion)}/products?source=wizard`
|
|
28
28
|
: undefined;
|
|
29
29
|
const integrationConfig = config_1.INTEGRATION_CONFIG[integration];
|
|
30
|
+
const changes = [
|
|
31
|
+
addedEditorRules ? `Added Cursor rules for PostHog` : '',
|
|
32
|
+
prUrl ? `Created a PR for your changes: ${chalk_1.default.cyan(prUrl)}` : '',
|
|
33
|
+
envFileChanged
|
|
34
|
+
? `Added your Project API key to your ${envFileChanged} file`
|
|
35
|
+
: '',
|
|
36
|
+
uploadedEnvVars.length > 0
|
|
37
|
+
? `Uploaded your Project API key to your hosting provider`
|
|
38
|
+
: '',
|
|
39
|
+
].filter(Boolean);
|
|
40
|
+
const nextSteps = [
|
|
41
|
+
uploadedEnvVars.length === 0
|
|
42
|
+
? `Upload your Project API key to your hosting provider`
|
|
43
|
+
: '',
|
|
44
|
+
!prUrl ? `Create a PR for your changes` : '',
|
|
45
|
+
].filter(Boolean);
|
|
30
46
|
return `
|
|
31
47
|
${chalk_1.default.green('Successfully installed PostHog!')}
|
|
32
48
|
|
|
33
49
|
${chalk_1.default.cyan('Changes made:')}
|
|
34
|
-
${integrationConfig.
|
|
35
|
-
${
|
|
36
|
-
|
|
37
|
-
: ''}
|
|
50
|
+
${integrationConfig.defaultChanges}
|
|
51
|
+
${changes.map((change) => `• ${change}`).join('\n')}
|
|
52
|
+
|
|
38
53
|
${chalk_1.default.yellow('Next steps:')}
|
|
39
54
|
${integrationConfig.nextSteps}
|
|
55
|
+
${nextSteps.map((step) => `• ${step}`).join('\n')}
|
|
40
56
|
|
|
41
57
|
Learn more about PostHog + ${integrationConfig.name}: ${chalk_1.default.cyan(integrationConfig.docsUrl)}
|
|
42
58
|
${continueUrl ? `\nContinue onboarding: ${chalk_1.default.cyan(continueUrl)}\n` : ``}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/lib/messages.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,wCAAsD;AAEtD,2CAAsD;AACtD,qCAA8C;AAEvC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,WAAW,EACX,gBAAgB,GAIjB,EAAE,EAAE;IACH,MAAM,iBAAiB,GAAG,2BAAkB,CAAC,WAAW,CAAC,CAAC;IAE1D,OAAO;;;IAGL,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/lib/messages.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,wCAAsD;AAEtD,2CAAsD;AACtD,qCAA8C;AAEvC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,WAAW,EACX,gBAAgB,GAIjB,EAAE,EAAE;IACH,MAAM,iBAAiB,GAAG,2BAAkB,CAAC,WAAW,CAAC,CAAC;IAE1D,OAAO;;;IAGL,iBAAiB,CAAC,cAAc;IAChC,gBAAgB,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE;;;wBAI5D,iBAAiB,CAAC,IACpB;;+BAE6B,iBAAiB,CAAC,IAAI,KACjD,iBAAiB,CAAC,OACpB,EAAE,CAAC;AACL,CAAC,CAAC;AAvBW,QAAA,gBAAgB,oBAuB3B;AAEK,MAAM,eAAe,GAAG,CAAC,EAC9B,OAAO,EACP,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,eAAe,EACf,KAAK,GAUN,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM;QAChC,CAAC,CAAC,GAAG,IAAA,4BAAqB,EAAC,WAAW,CAAC,yBAAyB;QAChE,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,iBAAiB,GAAG,2BAAkB,CAAC,WAAW,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG;QACd,gBAAgB,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE;QACxD,KAAK,CAAC,CAAC,CAAC,kCAAkC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAClE,cAAc;YACZ,CAAC,CAAC,sCAAsC,cAAc,OAAO;YAC7D,CAAC,CAAC,EAAE;QACN,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,wDAAwD;YAC1D,CAAC,CAAC,EAAE;KACP,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,MAAM,SAAS,GAAG;QAChB,eAAe,CAAC,MAAM,KAAK,CAAC;YAC1B,CAAC,CAAC,sDAAsD;YACxD,CAAC,CAAC,EAAE;QACN,CAAC,KAAK,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE;KAC7C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,OAAO;EACP,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC;;EAE9C,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC;EAC3B,iBAAiB,CAAC,cAAc;EAChC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;EAEjD,eAAK,CAAC,MAAM,CAAC,aAAa,CAAC;EAC3B,iBAAiB,CAAC,SAAS;EAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;6BAEpB,iBAAiB,CAAC,IAAI,KAAK,eAAK,CAAC,IAAI,CAC9D,iBAAiB,CAAC,OAAO,CAC1B;EACD,WAAW,CAAC,CAAC,CAAC,0BAA0B,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;;;qEAItE,cAAc;QACZ,CAAC,CAAC,UAAU,eAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,gBAAgB,MAAM,CAAC,IAAI;QACpE,CAAC,CAAC,GACN;;EAEA,eAAK,CAAC,GAAG,CAAC,kDAAkD,sBAAU,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CAAC;AAnEW,QAAA,eAAe,mBAmE1B","sourcesContent":["import chalk from 'chalk';\nimport type { CloudRegion, WizardOptions } from '../utils/types';\nimport { getCloudUrlFromRegion } from '../utils/urls';\nimport type { PackageManager } from '../utils/package-manager';\nimport { ISSUES_URL, Integration } from './constants';\nimport { INTEGRATION_CONFIG } from './config';\n\nexport const getPRDescription = ({\n integration,\n addedEditorRules,\n}: {\n integration: Integration;\n addedEditorRules: boolean;\n}) => {\n const integrationConfig = INTEGRATION_CONFIG[integration];\n\n return `This PR adds an integration for PostHog.\n\n The following changes were made:\n ${integrationConfig.defaultChanges}\n ${addedEditorRules ? `• Added Cursor rules for PostHog\\n` : ''}\n \n \n Note: This used the ${\n integrationConfig.name\n } wizard to setup PostHog, this is still in alpha and like all AI, might have got it wrong. Please check the installation carefully!\n \n Learn more about PostHog + ${integrationConfig.name}: ${\n integrationConfig.docsUrl\n }`;\n};\n\nexport const getOutroMessage = ({\n options,\n integration,\n cloudRegion,\n addedEditorRules,\n packageManager,\n envFileChanged,\n uploadedEnvVars,\n prUrl,\n}: {\n options: WizardOptions;\n integration: Integration;\n cloudRegion: CloudRegion;\n addedEditorRules: boolean;\n packageManager?: PackageManager;\n envFileChanged?: string;\n prUrl?: string;\n uploadedEnvVars: string[];\n}) => {\n const continueUrl = options.signup\n ? `${getCloudUrlFromRegion(cloudRegion)}/products?source=wizard`\n : undefined;\n\n const integrationConfig = INTEGRATION_CONFIG[integration];\n\n const changes = [\n addedEditorRules ? `Added Cursor rules for PostHog` : '',\n prUrl ? `Created a PR for your changes: ${chalk.cyan(prUrl)}` : '',\n envFileChanged\n ? `Added your Project API key to your ${envFileChanged} file`\n : '',\n uploadedEnvVars.length > 0\n ? `Uploaded your Project API key to your hosting provider`\n : '',\n ].filter(Boolean);\n\n const nextSteps = [\n uploadedEnvVars.length === 0\n ? `Upload your Project API key to your hosting provider`\n : '',\n !prUrl ? `Create a PR for your changes` : '',\n ].filter(Boolean);\n\n return `\n${chalk.green('Successfully installed PostHog!')} \n \n${chalk.cyan('Changes made:')}\n${integrationConfig.defaultChanges}\n${changes.map((change) => `• ${change}`).join('\\n')}\n\n${chalk.yellow('Next steps:')}\n${integrationConfig.nextSteps}\n${nextSteps.map((step) => `• ${step}`).join('\\n')}\n\nLearn more about PostHog + ${integrationConfig.name}: ${chalk.cyan(\n integrationConfig.docsUrl,\n )}\n${continueUrl ? `\\nContinue onboarding: ${chalk.cyan(continueUrl)}\\n` : ``}\nNote: This uses experimental AI to setup your project. It might have got it wrong, please check!\n\nYou should validate your setup by (re)starting your dev environment${\n packageManager\n ? ` (e.g. ${chalk.cyan(`${packageManager.runScriptCommand} dev`)}).`\n : `.`\n }\n\n${chalk.dim(`If you encounter any issues, let us know here: ${ISSUES_URL}`)}`;\n};\n"]}
|
|
@@ -16,6 +16,7 @@ const file_utils_1 = require("../utils/file-utils");
|
|
|
16
16
|
const clack_utils_2 = require("../utils/clack-utils");
|
|
17
17
|
const messages_1 = require("../lib/messages");
|
|
18
18
|
const steps_1 = require("../steps");
|
|
19
|
+
const upload_environment_variables_1 = require("../steps/upload-environment-variables");
|
|
19
20
|
async function runNextjsWizard(options) {
|
|
20
21
|
(0, clack_utils_1.printWelcome)({
|
|
21
22
|
wizardName: 'PostHog Next.js Wizard',
|
|
@@ -82,6 +83,11 @@ async function runNextjsWizard(options) {
|
|
|
82
83
|
documentation: installationDocumentation,
|
|
83
84
|
cloudRegion,
|
|
84
85
|
});
|
|
86
|
+
const packageManagerForOutro = packageManagerFromInstallStep ?? (await (0, clack_utils_1.getPackageManager)(options));
|
|
87
|
+
await (0, steps_1.runPrettierStep)({
|
|
88
|
+
installDir: options.installDir,
|
|
89
|
+
integration: constants_1.Integration.nextjs,
|
|
90
|
+
});
|
|
85
91
|
const { relativeEnvFilePath, addedEnvVariables } = await (0, steps_1.addOrUpdateEnvironmentVariablesStep)({
|
|
86
92
|
variables: {
|
|
87
93
|
NEXT_PUBLIC_POSTHOG_KEY: projectApiKey,
|
|
@@ -90,10 +96,12 @@ async function runNextjsWizard(options) {
|
|
|
90
96
|
installDir: options.installDir,
|
|
91
97
|
integration: constants_1.Integration.nextjs,
|
|
92
98
|
});
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
const uploadedEnvVars = await (0, upload_environment_variables_1.uploadEnvironmentVariablesStep)({
|
|
100
|
+
NEXT_PUBLIC_POSTHOG_KEY: projectApiKey,
|
|
101
|
+
NEXT_PUBLIC_POSTHOG_HOST: host,
|
|
102
|
+
}, {
|
|
96
103
|
integration: constants_1.Integration.nextjs,
|
|
104
|
+
options,
|
|
97
105
|
});
|
|
98
106
|
const addedEditorRules = await (0, steps_1.addEditorRulesStep)({
|
|
99
107
|
rulesName: 'next-rules.md',
|
|
@@ -114,6 +122,7 @@ async function runNextjsWizard(options) {
|
|
|
114
122
|
packageManager: packageManagerForOutro,
|
|
115
123
|
envFileChanged: addedEnvVariables ? relativeEnvFilePath : undefined,
|
|
116
124
|
prUrl,
|
|
125
|
+
uploadedEnvVars,
|
|
117
126
|
});
|
|
118
127
|
clack_1.default.outro(outroMessage);
|
|
119
128
|
await analytics_1.analytics.shutdown('success');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs-wizard.js","sourceRoot":"","sources":["../../../src/nextjs/nextjs-wizard.ts"],"names":[],"mappings":";;;;;
|
|
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 */\nimport {\n abort,\n askForAIConsent,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport {\n getNextJsRouter,\n getNextJsRouterName,\n getNextJsVersionBucket,\n NextJsRouter,\n} from './utils';\nimport clack from '../utils/clack';\nimport { Integration } from '../lib/constants';\nimport { getNextjsAppRouterDocs, getNextjsPagesRouterDocs } from './docs';\nimport { analytics } from '../utils/analytics';\nimport {\n generateFileChangesForIntegration,\n getFilesToChange,\n getRelevantFilesForIntegration,\n} from '../utils/file-utils';\nimport type { WizardOptions } from '../utils/types';\nimport { askForCloudRegion } from '../utils/clack-utils';\nimport { getOutroMessage } from '../lib/messages';\nimport {\n addEditorRulesStep,\n addOrUpdateEnvironmentVariablesStep,\n createPRStep,\n runPrettierStep,\n} from '../steps';\nimport { uploadEnvironmentVariablesStep } from '../steps/upload-environment-variables';\nexport async function runNextjsWizard(options: WizardOptions): Promise<void> {\n printWelcome({\n wizardName: 'PostHog Next.js Wizard',\n });\n\n const aiConsent = await askForAIConsent(options);\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(options);\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: options.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: options.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 getRelevantFilesForIntegration({\n installDir: options.installDir,\n integration: Integration.nextjs,\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 integration: Integration.nextjs,\n relevantFiles,\n documentation: installationDocumentation,\n wizardHash,\n cloudRegion,\n });\n\n await generateFileChangesForIntegration({\n integration: Integration.nextjs,\n filesToChange,\n wizardHash,\n installDir: options.installDir,\n documentation: installationDocumentation,\n cloudRegion,\n });\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager(options));\n\n await runPrettierStep({\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n const { relativeEnvFilePath, addedEnvVariables } =\n await addOrUpdateEnvironmentVariablesStep({\n variables: {\n NEXT_PUBLIC_POSTHOG_KEY: projectApiKey,\n NEXT_PUBLIC_POSTHOG_HOST: host,\n },\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n const uploadedEnvVars = await uploadEnvironmentVariablesStep(\n {\n NEXT_PUBLIC_POSTHOG_KEY: projectApiKey,\n NEXT_PUBLIC_POSTHOG_HOST: host,\n },\n {\n integration: Integration.nextjs,\n options,\n },\n );\n\n const addedEditorRules = await addEditorRulesStep({\n rulesName: 'next-rules.md',\n installDir: options.installDir,\n integration: Integration.nextjs,\n default: options.default,\n });\n\n const prUrl = await createPRStep({\n installDir: options.installDir,\n integration: Integration.nextjs,\n addedEditorRules,\n });\n\n const outroMessage = getOutroMessage({\n options,\n integration: Integration.nextjs,\n cloudRegion,\n addedEditorRules,\n packageManager: packageManagerForOutro,\n envFileChanged: addedEnvVariables ? relativeEnvFilePath : undefined,\n prUrl,\n uploadedEnvVars,\n });\n\n clack.outro(outroMessage);\n\n await analytics.shutdown('success');\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"]}
|
package/dist/src/nextjs/utils.js
CHANGED
|
@@ -10,6 +10,7 @@ const semver_1 = require("semver");
|
|
|
10
10
|
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
11
11
|
const clack_utils_1 = require("../utils/clack-utils");
|
|
12
12
|
const clack_1 = __importDefault(require("../utils/clack"));
|
|
13
|
+
const constants_1 = require("../lib/constants");
|
|
13
14
|
function getNextJsVersionBucket(version) {
|
|
14
15
|
if (!version) {
|
|
15
16
|
return 'none';
|
|
@@ -73,7 +74,7 @@ async function getNextJsRouter({ installDir, }) {
|
|
|
73
74
|
value: NextJsRouter.PAGES_ROUTER,
|
|
74
75
|
},
|
|
75
76
|
],
|
|
76
|
-
}));
|
|
77
|
+
}), constants_1.Integration.nextjs);
|
|
77
78
|
return result;
|
|
78
79
|
}
|
|
79
80
|
const getNextJsRouterName = (router) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/nextjs/utils.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/nextjs/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { major, minVersion } from 'semver';\nimport fg from 'fast-glob';\nimport { abortIfCancelled } from '../utils/clack-utils';\nimport clack from '../utils/clack';\nimport type { WizardOptions } from '../utils/types';\nimport { Integration } from '../lib/constants';\n\nexport function getNextJsVersionBucket(version: string | undefined) {\n if (!version) {\n return 'none';\n }\n\n try {\n const minVer = minVersion(version);\n if (!minVer) {\n return 'invalid';\n }\n const majorVersion = major(minVer);\n if (majorVersion >= 11) {\n return `${majorVersion}.x`;\n }\n return '<11.0.0';\n } catch {\n return 'unknown';\n }\n}\n\nexport enum NextJsRouter {\n APP_ROUTER = 'app-router',\n PAGES_ROUTER = 'pages-router',\n}\n\nexport const IGNORE_PATTERNS = [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/public/**',\n];\nexport async function getNextJsRouter({\n installDir,\n}: Pick<WizardOptions, 'installDir'>): Promise<NextJsRouter> {\n const pagesMatches = await fg('**/pages/_app.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n const hasPagesDir = pagesMatches.length > 0;\n\n const appMatches = await fg('**/app/**/layout.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n const hasAppDir = appMatches.length > 0;\n\n if (hasPagesDir && !hasAppDir) {\n clack.log.info(\n `Detected ${getNextJsRouterName(NextJsRouter.PAGES_ROUTER)} 📃`,\n );\n return NextJsRouter.PAGES_ROUTER;\n }\n\n if (hasAppDir && !hasPagesDir) {\n clack.log.info(\n `Detected ${getNextJsRouterName(NextJsRouter.APP_ROUTER)} 📱`,\n );\n return NextJsRouter.APP_ROUTER;\n }\n\n const result: NextJsRouter = await abortIfCancelled(\n clack.select({\n message: 'What router are you using?',\n options: [\n {\n label: getNextJsRouterName(NextJsRouter.APP_ROUTER),\n value: NextJsRouter.APP_ROUTER,\n },\n {\n label: getNextJsRouterName(NextJsRouter.PAGES_ROUTER),\n value: NextJsRouter.PAGES_ROUTER,\n },\n ],\n }),\n Integration.nextjs,\n );\n\n return result;\n}\n\nexport const getNextJsRouterName = (router: NextJsRouter) => {\n return router === NextJsRouter.APP_ROUTER ? 'app router' : 'pages router';\n};\n"]}
|
|
@@ -16,6 +16,7 @@ const file_utils_1 = require("../utils/file-utils");
|
|
|
16
16
|
const clack_utils_2 = require("../utils/clack-utils");
|
|
17
17
|
const messages_1 = require("../lib/messages");
|
|
18
18
|
const steps_1 = require("../steps");
|
|
19
|
+
const upload_environment_variables_1 = require("../steps/upload-environment-variables");
|
|
19
20
|
async function runReactWizard(options) {
|
|
20
21
|
(0, clack_utils_1.printWelcome)({
|
|
21
22
|
wizardName: 'PostHog React Wizard',
|
|
@@ -92,6 +93,13 @@ async function runReactWizard(options) {
|
|
|
92
93
|
integration: constants_1.Integration.react,
|
|
93
94
|
default: options.default,
|
|
94
95
|
});
|
|
96
|
+
const uploadedEnvVars = await (0, upload_environment_variables_1.uploadEnvironmentVariablesStep)({
|
|
97
|
+
[envVarPrefix + 'POSTHOG_KEY']: projectApiKey,
|
|
98
|
+
[envVarPrefix + 'POSTHOG_HOST']: host,
|
|
99
|
+
}, {
|
|
100
|
+
integration: constants_1.Integration.react,
|
|
101
|
+
options,
|
|
102
|
+
});
|
|
95
103
|
const outroMessage = (0, messages_1.getOutroMessage)({
|
|
96
104
|
options,
|
|
97
105
|
integration: constants_1.Integration.react,
|
|
@@ -99,6 +107,7 @@ async function runReactWizard(options) {
|
|
|
99
107
|
addedEditorRules,
|
|
100
108
|
packageManager: packageManagerForOutro,
|
|
101
109
|
envFileChanged: addedEnvVariables ? relativeEnvFilePath : undefined,
|
|
110
|
+
uploadedEnvVars,
|
|
102
111
|
});
|
|
103
112
|
clack_1.default.outro(outroMessage);
|
|
104
113
|
await analytics_1.analytics.shutdown('success');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-wizard.js","sourceRoot":"","sources":["../../../src/react/react-wizard.ts"],"names":[],"mappings":";AAAA,8BAA8B;;;;;
|
|
1
|
+
{"version":3,"file":"react-wizard.js","sourceRoot":"","sources":["../../../src/react/react-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n\nimport {\n abort,\n askForAIConsent,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport clack from '../utils/clack';\nimport { Integration } from '../lib/constants';\nimport { getReactDocumentation } from './docs';\nimport { analytics } from '../utils/analytics';\nimport { detectEnvVarPrefix } from '../utils/environment';\nimport {\n generateFileChangesForIntegration,\n getFilesToChange,\n getRelevantFilesForIntegration,\n} from '../utils/file-utils';\nimport type { WizardOptions } from '../utils/types';\nimport { askForCloudRegion } from '../utils/clack-utils';\nimport { getOutroMessage } from '../lib/messages';\nimport {\n addEditorRulesStep,\n addOrUpdateEnvironmentVariablesStep,\n runPrettierStep,\n} from '../steps';\nimport { uploadEnvironmentVariablesStep } from '../steps/upload-environment-variables';\n\nexport async function runReactWizard(options: WizardOptions): Promise<void> {\n printWelcome({\n wizardName: 'PostHog React Wizard',\n });\n\n const aiConsent = await askForAIConsent(options);\n\n if (!aiConsent) {\n await abort(\n 'The React wizard requires AI to get setup right now. Please view the docs to setup React manually instead: https://posthog.com/docs/libraries/react',\n 0,\n );\n }\n\n const cloudRegion = options.cloudRegion ?? (await askForCloudRegion());\n\n const typeScriptDetected = isUsingTypeScript(options);\n\n await confirmContinueIfNoOrDirtyGitRepo(options);\n\n const packageJson = await getPackageDotJson(options);\n\n await ensurePackageIsInstalled(packageJson, 'react', 'React');\n\n const reactVersion = getPackageVersion('react', packageJson);\n\n if (reactVersion) {\n analytics.setTag('react-version', reactVersion);\n }\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: options.forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.react,\n });\n\n const relevantFiles = await getRelevantFilesForIntegration({\n installDir: options.installDir,\n integration: Integration.react,\n });\n\n const envVarPrefix = await detectEnvVarPrefix(options);\n\n const installationDocumentation = getReactDocumentation({\n language: typeScriptDetected ? 'typescript' : 'javascript',\n envVarPrefix,\n });\n\n clack.log.info(`Reviewing PostHog documentation for React`);\n\n const filesToChange = await getFilesToChange({\n integration: Integration.react,\n relevantFiles,\n documentation: installationDocumentation,\n wizardHash,\n cloudRegion,\n });\n\n await generateFileChangesForIntegration({\n integration: Integration.react,\n filesToChange,\n wizardHash,\n installDir: options.installDir,\n documentation: installationDocumentation,\n cloudRegion,\n });\n\n const { relativeEnvFilePath, addedEnvVariables } =\n await addOrUpdateEnvironmentVariablesStep({\n variables: {\n [envVarPrefix + 'POSTHOG_KEY']: projectApiKey,\n [envVarPrefix + 'POSTHOG_HOST']: host,\n },\n installDir: options.installDir,\n integration: Integration.react,\n });\n\n const packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager(options));\n\n await runPrettierStep({\n installDir: options.installDir,\n integration: Integration.react,\n });\n\n const addedEditorRules = await addEditorRulesStep({\n installDir: options.installDir,\n rulesName: 'react-rules.md',\n integration: Integration.react,\n default: options.default,\n });\n\n const uploadedEnvVars = await uploadEnvironmentVariablesStep(\n {\n [envVarPrefix + 'POSTHOG_KEY']: projectApiKey,\n [envVarPrefix + 'POSTHOG_HOST']: host,\n },\n {\n integration: Integration.react,\n options,\n },\n );\n\n const outroMessage = getOutroMessage({\n options,\n integration: Integration.react,\n cloudRegion,\n addedEditorRules,\n packageManager: packageManagerForOutro,\n envFileChanged: addedEnvVariables ? relativeEnvFilePath : undefined,\n uploadedEnvVars,\n });\n\n clack.outro(outroMessage);\n\n await analytics.shutdown('success');\n}\n"]}
|
|
@@ -116,6 +116,7 @@ async function runReactNativeWizard(options) {
|
|
|
116
116
|
cloudRegion,
|
|
117
117
|
addedEditorRules,
|
|
118
118
|
packageManager: packageManagerForOutro,
|
|
119
|
+
uploadedEnvVars: [],
|
|
119
120
|
});
|
|
120
121
|
clack_1.default.outro(outroMessage);
|
|
121
122
|
await analytics_1.analytics.shutdown('success');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-native-wizard.js","sourceRoot":"","sources":["../../../src/react-native/react-native-wizard.ts"],"names":[],"mappings":";AAAA,8BAA8B;;;;;AA8B9B,
|
|
1
|
+
{"version":3,"file":"react-native-wizard.js","sourceRoot":"","sources":["../../../src/react-native/react-native-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\n\nimport {\n abort,\n askForAIConsent,\n confirmContinueIfNoOrDirtyGitRepo,\n ensurePackageIsInstalled,\n getOrAskForProjectData,\n getPackageDotJson,\n getPackageManager,\n installPackage,\n isUsingTypeScript,\n printWelcome,\n} from '../utils/clack-utils';\nimport { getPackageVersion, hasPackageInstalled } from '../utils/package-json';\nimport clack from '../utils/clack';\nimport { Integration } from '../lib/constants';\nimport { getReactNativeDocumentation } from './docs';\nimport { analytics } from '../utils/analytics';\nimport {\n generateFileChangesForIntegration,\n getFilesToChange,\n getRelevantFilesForIntegration,\n} from '../utils/file-utils';\nimport type { WizardOptions } from '../utils/types';\nimport { askForCloudRegion } from '../utils/clack-utils';\nimport { addEditorRulesStep, runPrettierStep } from '../steps';\nimport { EXPO } from '../utils/package-manager';\nimport { getOutroMessage } from '../lib/messages';\n\nexport async function runReactNativeWizard(\n options: WizardOptions,\n): Promise<void> {\n printWelcome({\n wizardName: 'PostHog React Native Wizard',\n });\n\n const aiConsent = await askForAIConsent(options);\n\n if (!aiConsent) {\n await abort(\n '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',\n 0,\n );\n }\n\n const cloudRegion = options.cloudRegion ?? (await askForCloudRegion());\n\n const typeScriptDetected = isUsingTypeScript(options);\n\n await confirmContinueIfNoOrDirtyGitRepo(options);\n\n const packageJson = await getPackageDotJson(options);\n\n await ensurePackageIsInstalled(packageJson, 'react-native', 'React Native');\n\n const reactNativeVersion = getPackageVersion('react-native', packageJson);\n\n if (reactNativeVersion) {\n analytics.setTag('react-native-version', reactNativeVersion);\n }\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 isUsingExpo = hasPackageInstalled('expo', packageJson);\n\n if (isUsingExpo) {\n analytics.setTag('is-using-expo', true);\n analytics.setTag('expo-version', getPackageVersion('expo', packageJson));\n }\n\n clack.log.info(`Detected ${isUsingExpo ? 'Expo' : 'React Native'}`);\n\n const packagesToInstall = isUsingExpo\n ? [\n 'posthog-react-native',\n 'posthog-react-native-session-replay',\n 'expo-file-system',\n 'expo-application',\n 'expo-device',\n 'expo-localization',\n ]\n : [\n 'posthog-react-native',\n '@react-native-async-storage/async-storage',\n 'react-native-device-info',\n 'react-native-localize',\n ];\n\n for (const packageName of packagesToInstall) {\n await installPackage({\n packageName,\n packageNameDisplayLabel: packageName,\n alreadyInstalled: !!packageJson?.dependencies?.[packageName],\n forceInstall: options.forceInstall,\n askBeforeUpdating: false,\n installDir: options.installDir,\n integration: Integration.reactNative,\n packageManager: isUsingExpo ? EXPO : undefined,\n });\n }\n\n const relevantFiles = await getRelevantFilesForIntegration({\n installDir: options.installDir,\n integration: Integration.reactNative,\n });\n\n const installationDocumentation = getReactNativeDocumentation({\n language: typeScriptDetected ? 'typescript' : 'javascript',\n host,\n projectApiKey,\n });\n\n clack.log.info(\n `Reviewing PostHog documentation for ${\n isUsingExpo ? 'Expo' : 'React Native'\n }`,\n );\n\n const filesToChange = await getFilesToChange({\n integration: Integration.reactNative,\n relevantFiles,\n documentation: installationDocumentation,\n wizardHash,\n cloudRegion,\n });\n\n await generateFileChangesForIntegration({\n integration: Integration.reactNative,\n filesToChange,\n wizardHash,\n installDir: options.installDir,\n documentation: installationDocumentation,\n cloudRegion,\n });\n\n await runPrettierStep({\n installDir: options.installDir,\n integration: Integration.reactNative,\n });\n\n const addedEditorRules = await addEditorRulesStep({\n installDir: options.installDir,\n rulesName: 'react-native-rules.md',\n integration: Integration.reactNative,\n default: options.default,\n });\n\n const packageManagerForOutro = await getPackageManager({\n installDir: options.installDir,\n });\n\n const outroMessage = getOutroMessage({\n options,\n integration: Integration.reactNative,\n cloudRegion,\n addedEditorRules,\n packageManager: packageManagerForOutro,\n uploadedEnvVars: [],\n });\n\n clack.outro(outroMessage);\n\n await analytics.shutdown('success');\n}\n"]}
|
package/dist/src/run.js
CHANGED
|
@@ -16,6 +16,7 @@ const analytics_1 = require("./utils/analytics");
|
|
|
16
16
|
const svelte_wizard_1 = require("./svelte/svelte-wizard");
|
|
17
17
|
const react_native_wizard_1 = require("./react-native/react-native-wizard");
|
|
18
18
|
const events_1 = require("events");
|
|
19
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
19
20
|
events_1.EventEmitter.defaultMaxListeners = 50;
|
|
20
21
|
async function run(argv) {
|
|
21
22
|
await runWizard(argv);
|
|
@@ -38,21 +39,27 @@ async function runWizard(argv) {
|
|
|
38
39
|
clack_1.default.intro(`Welcome to the PostHog setup wizard ✨`);
|
|
39
40
|
const integration = finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));
|
|
40
41
|
analytics_1.analytics.setTag('integration', integration);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
42
|
+
try {
|
|
43
|
+
switch (integration) {
|
|
44
|
+
case constants_1.Integration.nextjs:
|
|
45
|
+
await (0, nextjs_wizard_1.runNextjsWizard)(wizardOptions);
|
|
46
|
+
break;
|
|
47
|
+
case constants_1.Integration.react:
|
|
48
|
+
await (0, react_wizard_1.runReactWizard)(wizardOptions);
|
|
49
|
+
break;
|
|
50
|
+
case constants_1.Integration.svelte:
|
|
51
|
+
await (0, svelte_wizard_1.runSvelteWizard)(wizardOptions);
|
|
52
|
+
break;
|
|
53
|
+
case constants_1.Integration.reactNative:
|
|
54
|
+
await (0, react_native_wizard_1.runReactNativeWizard)(wizardOptions);
|
|
55
|
+
break;
|
|
56
|
+
default:
|
|
57
|
+
clack_1.default.log.error('No setup wizard selected!');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
clack_1.default.log.error(`Something went wrong. You can read the documentation for PostHog at ${chalk_1.default.cyan(`${config_1.INTEGRATION_CONFIG[integration].docsUrl}`)} to setup PostHog manually.`);
|
|
62
|
+
process.exit(1);
|
|
56
63
|
}
|
|
57
64
|
}
|
|
58
65
|
async function detectIntegration(options) {
|
package/dist/src/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["import { abortIfCancelled } from './utils/clack-utils';\n\nimport { runNextjsWizard } from './nextjs/nextjs-wizard';\nimport type { CloudRegion, WizardOptions } from './utils/types';\n\nimport { getIntegrationDescription, Integration } from './lib/constants';\nimport { readEnvironment } from './utils/environment';\nimport clack from './utils/clack';\nimport path from 'path';\nimport { INTEGRATION_CONFIG, INTEGRATION_ORDER } from './lib/config';\nimport { runReactWizard } from './react/react-wizard';\nimport { analytics } from './utils/analytics';\nimport { runSvelteWizard } from './svelte/svelte-wizard';\nimport { runReactNativeWizard } from './react-native/react-native-wizard';\nimport { EventEmitter } from 'events';\nimport chalk from 'chalk';\n\nEventEmitter.defaultMaxListeners = 50;\n\ntype Args = {\n integration?: Integration;\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n region?: CloudRegion;\n default?: boolean;\n signup?: boolean;\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 default: finalArgs.default ?? false,\n signup: finalArgs.signup ?? false,\n };\n\n clack.intro(`Welcome to the PostHog setup wizard ✨`);\n\n const integration =\n finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));\n\n analytics.setTag('integration', integration);\n\n try {\n switch (integration) {\n case Integration.nextjs:\n await runNextjsWizard(wizardOptions);\n break;\n case Integration.react:\n await runReactWizard(wizardOptions);\n break;\n case Integration.svelte:\n await runSvelteWizard(wizardOptions);\n break;\n case Integration.reactNative:\n await runReactNativeWizard(wizardOptions);\n break;\n default:\n clack.log.error('No setup wizard selected!');\n }\n } catch (error) {\n clack.log.error(\n `Something went wrong. You can read the documentation for PostHog at ${chalk.cyan(\n `${INTEGRATION_CONFIG[integration].docsUrl}`,\n )} to setup PostHog manually.`,\n );\n process.exit(1);\n }\n}\n\nasync function detectIntegration(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration | undefined> {\n const integrationConfigs = Object.entries(INTEGRATION_CONFIG).sort(\n ([a], [b]) =>\n INTEGRATION_ORDER.indexOf(a as Integration) -\n INTEGRATION_ORDER.indexOf(b as Integration),\n );\n\n for (const [integration, config] of integrationConfigs) {\n const detected = await config.detect(options);\n if (detected) {\n return integration as 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: [\n { value: Integration.nextjs, label: 'Next.js' },\n { value: Integration.react, label: 'React' },\n { value: Integration.svelte, label: 'Svelte' },\n { value: Integration.reactNative, label: 'React Native' },\n ],\n }),\n );\n\n return integration;\n}\n"]}
|
|
@@ -55,13 +55,15 @@ const addEditorRulesStep = async ({ installDir, rulesName, integration, default:
|
|
|
55
55
|
{
|
|
56
56
|
label: 'Yes, please!',
|
|
57
57
|
value: true,
|
|
58
|
+
hint: 'Add PostHog to your Cursor rules',
|
|
58
59
|
},
|
|
59
60
|
{
|
|
60
61
|
label: 'No, thanks',
|
|
61
62
|
value: false,
|
|
63
|
+
hint: 'Skip adding PostHog to your Cursor rules',
|
|
62
64
|
},
|
|
63
65
|
],
|
|
64
|
-
}));
|
|
66
|
+
}), integration);
|
|
65
67
|
if (!addEditorRules) {
|
|
66
68
|
return false;
|
|
67
69
|
}
|