@posthog/wizard 0.6.0 → 0.7.0

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.
Files changed (106) hide show
  1. package/package.json +1 -1
  2. package/dist/bin.d.ts +0 -2
  3. package/dist/bin.js +0 -28
  4. package/dist/bin.js.map +0 -1
  5. package/dist/src/lib/config.d.ts +0 -49
  6. package/dist/src/lib/config.js +0 -85
  7. package/dist/src/lib/config.js.map +0 -1
  8. package/dist/src/lib/constants.d.ts +0 -24
  9. package/dist/src/lib/constants.js +0 -46
  10. package/dist/src/lib/constants.js.map +0 -1
  11. package/dist/src/lib/messages.d.ts +0 -10
  12. package/dist/src/lib/messages.js +0 -37
  13. package/dist/src/lib/messages.js.map +0 -1
  14. package/dist/src/lib/prompts.d.ts +0 -16
  15. package/dist/src/lib/prompts.js +0 -83
  16. package/dist/src/lib/prompts.js.map +0 -1
  17. package/dist/src/nextjs/docs.d.ts +0 -8
  18. package/dist/src/nextjs/docs.js +0 -257
  19. package/dist/src/nextjs/docs.js.map +0 -1
  20. package/dist/src/nextjs/nextjs-wizard.d.ts +0 -2
  21. package/dist/src/nextjs/nextjs-wizard.js +0 -121
  22. package/dist/src/nextjs/nextjs-wizard.js.map +0 -1
  23. package/dist/src/nextjs/utils.d.ts +0 -9
  24. package/dist/src/nextjs/utils.js +0 -83
  25. package/dist/src/nextjs/utils.js.map +0 -1
  26. package/dist/src/react/docs.d.ts +0 -4
  27. package/dist/src/react/docs.js +0 -46
  28. package/dist/src/react/docs.js.map +0 -1
  29. package/dist/src/react/react-wizard.d.ts +0 -2
  30. package/dist/src/react/react-wizard.js +0 -105
  31. package/dist/src/react/react-wizard.js.map +0 -1
  32. package/dist/src/react-native/docs.d.ts +0 -5
  33. package/dist/src/react-native/docs.js +0 -31
  34. package/dist/src/react-native/docs.js.map +0 -1
  35. package/dist/src/react-native/react-native-wizard.d.ts +0 -2
  36. package/dist/src/react-native/react-native-wizard.js +0 -123
  37. package/dist/src/react-native/react-native-wizard.js.map +0 -1
  38. package/dist/src/run.d.ts +0 -13
  39. package/dist/src/run.js +0 -83
  40. package/dist/src/run.js.map +0 -1
  41. package/dist/src/svelte/docs.d.ts +0 -3
  42. package/dist/src/svelte/docs.js +0 -110
  43. package/dist/src/svelte/docs.js.map +0 -1
  44. package/dist/src/svelte/svelte-wizard.d.ts +0 -2
  45. package/dist/src/svelte/svelte-wizard.js +0 -113
  46. package/dist/src/svelte/svelte-wizard.js.map +0 -1
  47. package/dist/src/telemetry.d.ts +0 -2
  48. package/dist/src/telemetry.js +0 -13
  49. package/dist/src/telemetry.js.map +0 -1
  50. package/dist/src/utils/analytics.d.ts +0 -12
  51. package/dist/src/utils/analytics.js +0 -59
  52. package/dist/src/utils/analytics.js.map +0 -1
  53. package/dist/src/utils/bash.d.ts +0 -2
  54. package/dist/src/utils/bash.js +0 -54
  55. package/dist/src/utils/bash.js.map +0 -1
  56. package/dist/src/utils/clack-utils.d.ts +0 -184
  57. package/dist/src/utils/clack-utils.js +0 -683
  58. package/dist/src/utils/clack-utils.js.map +0 -1
  59. package/dist/src/utils/clack.d.ts +0 -2
  60. package/dist/src/utils/clack.js +0 -9
  61. package/dist/src/utils/clack.js.map +0 -1
  62. package/dist/src/utils/debug.d.ts +0 -2
  63. package/dist/src/utils/debug.js +0 -22
  64. package/dist/src/utils/debug.js.map +0 -1
  65. package/dist/src/utils/environment.d.ts +0 -9
  66. package/dist/src/utils/environment.js +0 -164
  67. package/dist/src/utils/environment.js.map +0 -1
  68. package/dist/src/utils/file-utils.d.ts +0 -29
  69. package/dist/src/utils/file-utils.js +0 -177
  70. package/dist/src/utils/file-utils.js.map +0 -1
  71. package/dist/src/utils/logging.d.ts +0 -9
  72. package/dist/src/utils/logging.js +0 -50
  73. package/dist/src/utils/logging.js.map +0 -1
  74. package/dist/src/utils/package-json.d.ts +0 -25
  75. package/dist/src/utils/package-json.js +0 -27
  76. package/dist/src/utils/package-json.js.map +0 -1
  77. package/dist/src/utils/package-manager.d.ts +0 -21
  78. package/dist/src/utils/package-manager.js +0 -208
  79. package/dist/src/utils/package-manager.js.map +0 -1
  80. package/dist/src/utils/query.d.ts +0 -8
  81. package/dist/src/utils/query.js +0 -27
  82. package/dist/src/utils/query.js.map +0 -1
  83. package/dist/src/utils/rules/add-editor-rules.d.ts +0 -9
  84. package/dist/src/utils/rules/add-editor-rules.js +0 -90
  85. package/dist/src/utils/rules/add-editor-rules.js.map +0 -1
  86. package/dist/src/utils/rules/add-editor-rules.ts +0 -86
  87. package/dist/src/utils/rules/next-rules.md +0 -9
  88. package/dist/src/utils/rules/react-native-rules.md +0 -7
  89. package/dist/src/utils/rules/react-rules.md +0 -7
  90. package/dist/src/utils/rules/svelte-rules.md +0 -7
  91. package/dist/src/utils/rules/universal.md +0 -20
  92. package/dist/src/utils/semver.d.ts +0 -5
  93. package/dist/src/utils/semver.js +0 -25
  94. package/dist/src/utils/semver.js.map +0 -1
  95. package/dist/src/utils/string.d.ts +0 -1
  96. package/dist/src/utils/string.js +0 -9
  97. package/dist/src/utils/string.js.map +0 -1
  98. package/dist/src/utils/types.d.ts +0 -48
  99. package/dist/src/utils/types.js +0 -3
  100. package/dist/src/utils/types.js.map +0 -1
  101. package/dist/src/utils/urls.d.ts +0 -4
  102. package/dist/src/utils/urls.js +0 -35
  103. package/dist/src/utils/urls.js.map +0 -1
  104. package/dist/src/utils/vendor/is-unicorn-supported.d.ts +0 -1
  105. package/dist/src/utils/vendor/is-unicorn-supported.js +0 -24
  106. package/dist/src/utils/vendor/is-unicorn-supported.js.map +0 -1
@@ -1,257 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNextjsPagesRouterDocs = exports.getNextjsAppRouterDocs = void 0;
4
- const urls_1 = require("../utils/urls");
5
- const getNextjsAppRouterDocs = ({ host, language, }) => {
6
- return `
7
- ==============================
8
- FILE: PostHogProvider.${language === 'typescript' ? 'tsx' : 'jsx'} (put it somewhere where client files are, like the components folder)
9
- LOCATION: Wherever other providers are, or the components folder
10
- ==============================
11
- Changes:
12
- - Create a PostHogProvider component that will be imported into the layout file.
13
-
14
- Example:
15
- --------------------------------------------------
16
- "use client"
17
-
18
- import posthog from "posthog-js"
19
- import { PostHogProvider as PHProvider, usePostHog } from "posthog-js/react"
20
- import { Suspense, useEffect } from "react"
21
- import { usePathname, useSearchParams } from "next/navigation"
22
-
23
- export function PostHogProvider({ children }: { children: React.ReactNode }) {
24
- useEffect(() => {
25
- posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
26
- api_host: "/ingest",
27
- ui_host: "${(0, urls_1.getUiHostFromHost)(host)}",
28
- capture_pageview: false, // We capture pageviews manually
29
- capture_pageleave: true, // Enable pageleave capture
30
- debug: process.env.NODE_ENV === "development",
31
- })
32
- }, [])
33
-
34
- return (
35
- <PHProvider client={posthog}>
36
- <SuspendedPostHogPageView />
37
- {children}
38
- </PHProvider>
39
- )
40
- }
41
-
42
-
43
- function PostHogPageView() {
44
- const pathname = usePathname()
45
- const searchParams = useSearchParams()
46
- const posthog = usePostHog()
47
-
48
- useEffect(() => {
49
- if (pathname && posthog) {
50
- let url = window.origin + pathname
51
- const search = searchParams.toString()
52
- if (search) {
53
- url += "?" + search
54
- }
55
- posthog.capture("$pageview", { "$current_url": url })
56
- }
57
- }, [pathname, searchParams, posthog])
58
-
59
- return null
60
- }
61
-
62
- function SuspendedPostHogPageView() {
63
- return (
64
- <Suspense fallback={null}>
65
- <PostHogPageView />
66
- </Suspense>
67
- )
68
- }
69
- --------------------------------------------------
70
-
71
- ==============================
72
- FILE: layout.${language === 'typescript' ? 'tsx' : 'jsx'}
73
- LOCATION: Wherever the root layout is
74
- ==============================
75
- Changes:
76
- - Import the PostHogProvider from the providers file and wrap the app in it.
77
-
78
- Example:
79
- --------------------------------------------------
80
- // other imports
81
- import { PostHogProvider } from "LOCATION_OF_POSTHOG_PROVIDER"
82
-
83
- export default function RootLayout({ children }) {
84
- return (
85
- <html lang="en">
86
- <body>
87
- <PostHogProvider>
88
- {/* other providers */}
89
- {children}
90
- {/* other providers */}
91
- </PostHogProvider>
92
- </body>
93
- </html>
94
- )
95
- }
96
- --------------------------------------------------
97
-
98
- ==============================
99
- FILE: posthog.${language === 'typescript' ? 'ts' : 'js'}
100
- LOCATION: Wherever works best given the project structure
101
- ==============================
102
- Changes:
103
- - Initialize the PostHog Node.js client
104
-
105
- Example:
106
- --------------------------------------------------
107
- import { PostHog } from "posthog-node"
108
-
109
- export default function PostHogClient() {
110
- const posthogClient = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
111
- host: process.env.NEXT_PUBLIC_POSTHOG_HOST,
112
- flushAt: 1,
113
- flushInterval: 0,
114
- })
115
- return posthogClient
116
- }
117
- --------------------------------------------------
118
-
119
- ==============================
120
- FILE: next.config.{js,ts,mjs,cjs}
121
- LOCATION: Wherever the root next config is
122
- ==============================
123
- Changes:
124
- - Add rewrites to the Next.js config to support PostHog, if there are existing rewrites, add the PostHog rewrites to them.
125
- - Add skipTrailingSlashRedirect to the Next.js config to support PostHog trailing slash API requests.
126
- - This can be of type js, ts, mjs, cjs etc. You should adapt the file according to what extension it uses, and if it does not exist yet use '.js'.
127
-
128
- Example:
129
- --------------------------------------------------
130
- const nextConfig = {
131
- // other config
132
- async rewrites() {
133
- return [
134
- {
135
- source: "/ingest/static/:path*",
136
- destination: "${(0, urls_1.getAssetHostFromHost)(host)}/static/:path*",
137
- },
138
- {
139
- source: "/ingest/:path*",
140
- destination: "${host}/:path*",
141
- },
142
- {
143
- source: "/ingest/decide",
144
- destination: "${host}/decide",
145
- },
146
- ];
147
- },
148
- // This is required to support PostHog trailing slash API requests
149
- skipTrailingSlashRedirect: true,
150
- }
151
- module.exports = nextConfig
152
- --------------------------------------------------`;
153
- };
154
- exports.getNextjsAppRouterDocs = getNextjsAppRouterDocs;
155
- const getNextjsPagesRouterDocs = ({ host, language, }) => {
156
- return `
157
- ==============================
158
- FILE: _app.${language === 'typescript' ? 'tsx' : 'jsx'}
159
- LOCATION: Wherever the root _app.${language === 'typescript' ? 'tsx' : 'jsx'} file is
160
- ==============================
161
- Changes:
162
- - Initialize PostHog in _app.js.
163
- - Wrap the application in PostHogProvider.
164
- - Manually capture $pageview events.
165
-
166
- Example:
167
- --------------------------------------------------
168
- import { useEffect } from "react"
169
- import { Router } from "next/router"
170
- import posthog from "posthog-js"
171
- import { PostHogProvider } from "posthog-js/react"
172
-
173
- export default function App({ Component, pageProps }) {
174
- useEffect(() => {
175
- posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {
176
- api_host: "/ingest",
177
- ui_host: "${(0, urls_1.getUiHostFromHost)(host)}",
178
- loaded: (posthog) => {
179
- if (process.env.NODE_ENV === "development") posthog.debug()
180
- },
181
- debug: process.env.NODE_ENV === "development",
182
- })
183
-
184
- const handleRouteChange = () => posthog?.capture("$pageview")
185
- Router.events.on("routeChangeComplete", handleRouteChange)
186
-
187
- return () => {
188
- Router.events.off("routeChangeComplete", handleRouteChange)
189
- }
190
- }, [])
191
-
192
- return (
193
- <PostHogProvider client={posthog}>
194
- <Component {...pageProps} />
195
- </PostHogProvider>
196
- )
197
- }
198
- --------------------------------------------------
199
-
200
- ==============================
201
- FILE: posthog.${language === 'typescript' ? 'ts' : 'js'}
202
- LOCATION: Wherever works best given the project structure
203
- ==============================
204
- Changes:
205
- - Initialize the PostHog Node.js client
206
-
207
- Example:
208
- --------------------------------------------------
209
- import { PostHog } from "posthog-node"
210
-
211
- export default function PostHogClient() {
212
- const posthogClient = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
213
- host: process.env.NEXT_PUBLIC_POSTHOG_HOST,
214
- flushAt: 1,
215
- flushInterval: 0,
216
- })
217
- return posthogClient
218
- }
219
- --------------------------------------------------
220
-
221
- ==============================
222
- FILE: next.config.{js,ts,mjs,cjs}
223
- LOCATION: Wherever the root next config is
224
- ==============================
225
- Changes:
226
- - Add rewrites to the Next.js config to support PostHog, if there are existing rewrites, add the PostHog rewrites to them.
227
- - Add skipTrailingSlashRedirect to the Next.js config to support PostHog trailing slash API requests.
228
- - This can be of type js, ts, mjs, cjs etc. You should adapt the file according to what extension it uses, and if it does not exist yet use '.js'.
229
-
230
- Example:
231
- --------------------------------------------------
232
- const nextConfig = {
233
- // other config
234
- async rewrites() {
235
- return [
236
- {
237
- source: "/ingest/static/:path*",
238
- destination: "${(0, urls_1.getAssetHostFromHost)(host)}/static/:path*",
239
- },
240
- {
241
- source: "/ingest/:path*",
242
- destination: "${host}/:path*",
243
- },
244
- {
245
- source: "/ingest/decide",
246
- destination: "${host}/decide",
247
- },
248
- ];
249
- },
250
- // This is required to support PostHog trailing slash API requests
251
- skipTrailingSlashRedirect: true,
252
- }
253
- module.exports = nextConfig
254
- --------------------------------------------------`;
255
- };
256
- exports.getNextjsPagesRouterDocs = getNextjsPagesRouterDocs;
257
- //# sourceMappingURL=docs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/nextjs/docs.ts"],"names":[],"mappings":";;;AAAA,wCAAwE;AAEjE,MAAM,sBAAsB,GAAG,CAAC,EACrC,IAAI,EACJ,QAAQ,GAIT,EAAE,EAAE;IACH,OAAO;;wBAGL,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KACtC;;;;;;;;;;;;;;;;;;;kBAmBgB,IAAA,wBAAiB,EAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA6C1B,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BxC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAqC/B,IAAA,2BAAoB,EAAC,IAAI,CAAC;;;;wBAI1B,IAAI;;;;wBAIJ,IAAI;;;;;;;;mDAQuB,CAAC;AACpD,CAAC,CAAC;AA5JW,QAAA,sBAAsB,0BA4JjC;AAEK,MAAM,wBAAwB,GAAG,CAAC,EACvC,IAAI,EACJ,QAAQ,GAIT,EAAE,EAAE;IACH,OAAO;;aAEI,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;mCAElD,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KACtC;;;;;;;;;;;;;;;;;;kBAkBgB,IAAA,wBAAiB,EAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;gBAwBzB,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAqC/B,IAAA,2BAAoB,EAAC,IAAI,CAAC;;;;wBAI1B,IAAI;;;;wBAIJ,IAAI;;;;;;;;mDAQuB,CAAC;AACpD,CAAC,CAAC;AA5GW,QAAA,wBAAwB,4BA4GnC","sourcesContent":["import { getAssetHostFromHost, getUiHostFromHost } from '../utils/urls';\n\nexport const getNextjsAppRouterDocs = ({\n host,\n language,\n}: {\n host: string;\n language: 'typescript' | 'javascript';\n}) => {\n return `\n==============================\nFILE: PostHogProvider.${\n language === 'typescript' ? 'tsx' : 'jsx'\n } (put it somewhere where client files are, like the components folder)\nLOCATION: Wherever other providers are, or the components folder\n==============================\nChanges:\n- Create a PostHogProvider component that will be imported into the layout file.\n\nExample:\n--------------------------------------------------\n\"use client\"\n\nimport posthog from \"posthog-js\"\nimport { PostHogProvider as PHProvider, usePostHog } from \"posthog-js/react\"\nimport { Suspense, useEffect } from \"react\"\nimport { usePathname, useSearchParams } from \"next/navigation\"\n\nexport function PostHogProvider({ children }: { children: React.ReactNode }) {\n useEffect(() => {\n posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {\n api_host: \"/ingest\",\n ui_host: \"${getUiHostFromHost(host)}\",\n capture_pageview: false, // We capture pageviews manually\n capture_pageleave: true, // Enable pageleave capture\n debug: process.env.NODE_ENV === \"development\",\n })\n }, [])\n\n return (\n <PHProvider client={posthog}>\n <SuspendedPostHogPageView />\n {children}\n </PHProvider>\n )\n}\n\n\nfunction PostHogPageView() {\n const pathname = usePathname()\n const searchParams = useSearchParams()\n const posthog = usePostHog()\n\n useEffect(() => {\n if (pathname && posthog) {\n let url = window.origin + pathname\n const search = searchParams.toString()\n if (search) {\n url += \"?\" + search\n }\n posthog.capture(\"$pageview\", { \"$current_url\": url })\n }\n }, [pathname, searchParams, posthog])\n\n return null\n}\n\nfunction SuspendedPostHogPageView() {\n return (\n <Suspense fallback={null}>\n <PostHogPageView />\n </Suspense>\n )\n}\n--------------------------------------------------\n\n==============================\nFILE: layout.${language === 'typescript' ? 'tsx' : 'jsx'}\nLOCATION: Wherever the root layout is\n==============================\nChanges:\n- Import the PostHogProvider from the providers file and wrap the app in it.\n\nExample:\n--------------------------------------------------\n// other imports\nimport { PostHogProvider } from \"LOCATION_OF_POSTHOG_PROVIDER\"\n\nexport default function RootLayout({ children }) {\n return (\n <html lang=\"en\">\n <body>\n <PostHogProvider>\n {/* other providers */}\n {children}\n {/* other providers */}\n </PostHogProvider>\n </body>\n </html>\n )\n}\n--------------------------------------------------\n\n==============================\nFILE: posthog.${language === 'typescript' ? 'ts' : 'js'}\nLOCATION: Wherever works best given the project structure\n==============================\nChanges:\n- Initialize the PostHog Node.js client\n\nExample:\n--------------------------------------------------\nimport { PostHog } from \"posthog-node\"\n\nexport default function PostHogClient() {\n const posthogClient = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {\n host: process.env.NEXT_PUBLIC_POSTHOG_HOST,\n flushAt: 1,\n flushInterval: 0,\n })\n return posthogClient\n}\n--------------------------------------------------\n\n==============================\nFILE: next.config.{js,ts,mjs,cjs}\nLOCATION: Wherever the root next config is\n==============================\nChanges:\n- Add rewrites to the Next.js config to support PostHog, if there are existing rewrites, add the PostHog rewrites to them.\n- Add skipTrailingSlashRedirect to the Next.js config to support PostHog trailing slash API requests.\n- This can be of type js, ts, mjs, cjs etc. You should adapt the file according to what extension it uses, and if it does not exist yet use '.js'.\n\nExample:\n--------------------------------------------------\nconst nextConfig = {\n // other config\n async rewrites() {\n return [\n {\n source: \"/ingest/static/:path*\",\n destination: \"${getAssetHostFromHost(host)}/static/:path*\",\n },\n {\n source: \"/ingest/:path*\",\n destination: \"${host}/:path*\",\n },\n {\n source: \"/ingest/decide\",\n destination: \"${host}/decide\",\n },\n ];\n },\n // This is required to support PostHog trailing slash API requests\n skipTrailingSlashRedirect: true,\n}\nmodule.exports = nextConfig\n--------------------------------------------------`;\n};\n\nexport const getNextjsPagesRouterDocs = ({\n host,\n language,\n}: {\n host: string;\n language: 'typescript' | 'javascript';\n}) => {\n return `\n==============================\nFILE: _app.${language === 'typescript' ? 'tsx' : 'jsx'}\nLOCATION: Wherever the root _app.${\n language === 'typescript' ? 'tsx' : 'jsx'\n } file is\n==============================\nChanges:\n- Initialize PostHog in _app.js.\n- Wrap the application in PostHogProvider.\n- Manually capture $pageview events.\n\nExample:\n--------------------------------------------------\nimport { useEffect } from \"react\"\nimport { Router } from \"next/router\"\nimport posthog from \"posthog-js\"\nimport { PostHogProvider } from \"posthog-js/react\"\n\nexport default function App({ Component, pageProps }) {\n useEffect(() => {\n posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {\n api_host: \"/ingest\",\n ui_host: \"${getUiHostFromHost(host)}\",\n loaded: (posthog) => {\n if (process.env.NODE_ENV === \"development\") posthog.debug()\n },\n debug: process.env.NODE_ENV === \"development\",\n })\n\n const handleRouteChange = () => posthog?.capture(\"$pageview\")\n Router.events.on(\"routeChangeComplete\", handleRouteChange)\n\n return () => {\n Router.events.off(\"routeChangeComplete\", handleRouteChange)\n }\n }, [])\n\n return (\n <PostHogProvider client={posthog}>\n <Component {...pageProps} />\n </PostHogProvider>\n )\n}\n--------------------------------------------------\n\n==============================\nFILE: posthog.${language === 'typescript' ? 'ts' : 'js'}\nLOCATION: Wherever works best given the project structure\n==============================\nChanges:\n- Initialize the PostHog Node.js client\n\nExample:\n--------------------------------------------------\nimport { PostHog } from \"posthog-node\"\n\nexport default function PostHogClient() {\n const posthogClient = new PostHog(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {\n host: process.env.NEXT_PUBLIC_POSTHOG_HOST,\n flushAt: 1,\n flushInterval: 0,\n })\n return posthogClient\n}\n--------------------------------------------------\n\n==============================\nFILE: next.config.{js,ts,mjs,cjs}\nLOCATION: Wherever the root next config is\n==============================\nChanges:\n- Add rewrites to the Next.js config to support PostHog, if there are existing rewrites, add the PostHog rewrites to them.\n- Add skipTrailingSlashRedirect to the Next.js config to support PostHog trailing slash API requests.\n- This can be of type js, ts, mjs, cjs etc. You should adapt the file according to what extension it uses, and if it does not exist yet use '.js'.\n\nExample:\n--------------------------------------------------\nconst nextConfig = {\n // other config\n async rewrites() {\n return [\n {\n source: \"/ingest/static/:path*\",\n destination: \"${getAssetHostFromHost(host)}/static/:path*\",\n },\n {\n source: \"/ingest/:path*\",\n destination: \"${host}/:path*\",\n },\n {\n source: \"/ingest/decide\",\n destination: \"${host}/decide\",\n },\n ];\n },\n // This is required to support PostHog trailing slash API requests\n skipTrailingSlashRedirect: true,\n}\nmodule.exports = nextConfig\n--------------------------------------------------`;\n};\n"]}
@@ -1,2 +0,0 @@
1
- import type { WizardOptions } from '../utils/types';
2
- export declare function runNextjsWizard(options: WizardOptions): Promise<void>;
@@ -1,121 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.runNextjsWizard = runNextjsWizard;
7
- /* eslint-disable max-lines */
8
- const clack_utils_1 = require("../utils/clack-utils");
9
- const package_json_1 = require("../utils/package-json");
10
- const utils_1 = require("./utils");
11
- const clack_1 = __importDefault(require("../utils/clack"));
12
- const constants_1 = require("../lib/constants");
13
- const docs_1 = require("./docs");
14
- const analytics_1 = require("../utils/analytics");
15
- const environment_1 = require("../utils/environment");
16
- const file_utils_1 = require("../utils/file-utils");
17
- const clack_utils_2 = require("../utils/clack-utils");
18
- const add_editor_rules_1 = require("../utils/rules/add-editor-rules");
19
- const messages_1 = require("../lib/messages");
20
- async function runNextjsWizard(options) {
21
- (0, clack_utils_1.printWelcome)({
22
- wizardName: 'PostHog Next.js Wizard',
23
- });
24
- const aiConsent = await (0, clack_utils_1.askForAIConsent)(options);
25
- if (!aiConsent) {
26
- 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);
27
- }
28
- const cloudRegion = options.cloudRegion ?? (await (0, clack_utils_2.askForCloudRegion)());
29
- const typeScriptDetected = (0, clack_utils_1.isUsingTypeScript)(options);
30
- await (0, clack_utils_1.confirmContinueIfNoOrDirtyGitRepo)(options);
31
- const packageJson = await (0, clack_utils_1.getPackageDotJson)(options);
32
- await (0, clack_utils_1.ensurePackageIsInstalled)(packageJson, 'next', 'Next.js');
33
- const nextVersion = (0, package_json_1.getPackageVersion)('next', packageJson);
34
- analytics_1.analytics.setTag('nextjs-version', (0, utils_1.getNextJsVersionBucket)(nextVersion));
35
- const { projectApiKey, wizardHash, host } = await (0, clack_utils_1.getOrAskForProjectData)({
36
- ...options,
37
- cloudRegion,
38
- });
39
- const sdkAlreadyInstalled = (0, package_json_1.hasPackageInstalled)('posthog-js', packageJson);
40
- analytics_1.analytics.setTag('sdk-already-installed', sdkAlreadyInstalled);
41
- const { packageManager: packageManagerFromInstallStep } = await (0, clack_utils_1.installPackage)({
42
- packageName: 'posthog-js',
43
- packageNameDisplayLabel: 'posthog-js',
44
- alreadyInstalled: !!packageJson?.dependencies?.['posthog-js'],
45
- forceInstall: options.forceInstall,
46
- askBeforeUpdating: false,
47
- installDir: options.installDir,
48
- integration: constants_1.Integration.nextjs,
49
- });
50
- await (0, clack_utils_1.installPackage)({
51
- packageName: 'posthog-node',
52
- packageNameDisplayLabel: 'posthog-node',
53
- packageManager: packageManagerFromInstallStep,
54
- alreadyInstalled: !!packageJson?.dependencies?.['posthog-node'],
55
- forceInstall: options.forceInstall,
56
- askBeforeUpdating: false,
57
- installDir: options.installDir,
58
- integration: constants_1.Integration.nextjs,
59
- });
60
- const router = await (0, utils_1.getNextJsRouter)(options);
61
- const relevantFiles = await (0, file_utils_1.getRelevantFilesForIntegration)({
62
- installDir: options.installDir,
63
- integration: constants_1.Integration.nextjs,
64
- });
65
- const installationDocumentation = getInstallationDocumentation({
66
- router,
67
- host,
68
- language: typeScriptDetected ? 'typescript' : 'javascript',
69
- });
70
- clack_1.default.log.info(`Reviewing PostHog documentation for ${(0, utils_1.getNextJsRouterName)(router)}`);
71
- const filesToChange = await (0, file_utils_1.getFilesToChange)({
72
- integration: constants_1.Integration.nextjs,
73
- relevantFiles,
74
- documentation: installationDocumentation,
75
- wizardHash,
76
- cloudRegion,
77
- });
78
- await (0, file_utils_1.generateFileChangesForIntegration)({
79
- integration: constants_1.Integration.nextjs,
80
- filesToChange,
81
- wizardHash,
82
- installDir: options.installDir,
83
- documentation: installationDocumentation,
84
- cloudRegion,
85
- });
86
- await (0, environment_1.addOrUpdateEnvironmentVariables)({
87
- variables: {
88
- NEXT_PUBLIC_POSTHOG_KEY: projectApiKey,
89
- NEXT_PUBLIC_POSTHOG_HOST: host,
90
- },
91
- installDir: options.installDir,
92
- integration: constants_1.Integration.nextjs,
93
- });
94
- const packageManagerForOutro = packageManagerFromInstallStep ?? (await (0, clack_utils_1.getPackageManager)(options));
95
- await (0, clack_utils_1.runPrettierIfInstalled)({
96
- installDir: options.installDir,
97
- integration: constants_1.Integration.nextjs,
98
- });
99
- const addedEditorRules = await (0, add_editor_rules_1.addEditorRules)({
100
- rulesName: 'next-rules.md',
101
- installDir: options.installDir,
102
- integration: constants_1.Integration.nextjs,
103
- default: options.default,
104
- });
105
- const outroMessage = (0, messages_1.getOutroMessage)({
106
- options,
107
- integration: constants_1.Integration.nextjs,
108
- cloudRegion,
109
- addedEditorRules,
110
- packageManager: packageManagerForOutro,
111
- });
112
- clack_1.default.outro(outroMessage);
113
- await analytics_1.analytics.shutdown('success');
114
- }
115
- function getInstallationDocumentation({ router, host, language, }) {
116
- if (router === utils_1.NextJsRouter.PAGES_ROUTER) {
117
- return (0, docs_1.getNextjsPagesRouterDocs)({ host, language });
118
- }
119
- return (0, docs_1.getNextjsAppRouterDocs)({ host, language });
120
- }
121
- //# sourceMappingURL=nextjs-wizard.js.map
@@ -1 +0,0 @@
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 runPrettierIfInstalled,\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 { addOrUpdateEnvironmentVariables } 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 { addEditorRules } from '../utils/rules/add-editor-rules';\nimport { getOutroMessage } from '../lib/messages';\n\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 await addOrUpdateEnvironmentVariables({\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 packageManagerForOutro =\n packageManagerFromInstallStep ?? (await getPackageManager(options));\n\n await runPrettierIfInstalled({\n installDir: options.installDir,\n integration: Integration.nextjs,\n });\n\n const addedEditorRules = await addEditorRules({\n rulesName: 'next-rules.md',\n installDir: options.installDir,\n integration: Integration.nextjs,\n default: options.default,\n });\n\n const outroMessage = getOutroMessage({\n options,\n integration: Integration.nextjs,\n cloudRegion,\n addedEditorRules,\n packageManager: packageManagerForOutro,\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"]}
@@ -1,9 +0,0 @@
1
- import type { WizardOptions } from '../utils/types';
2
- export declare function getNextJsVersionBucket(version: string | undefined): string;
3
- export declare enum NextJsRouter {
4
- APP_ROUTER = "app-router",
5
- PAGES_ROUTER = "pages-router"
6
- }
7
- export declare const IGNORE_PATTERNS: string[];
8
- export declare function getNextJsRouter({ installDir, }: Pick<WizardOptions, 'installDir'>): Promise<NextJsRouter>;
9
- export declare const getNextJsRouterName: (router: NextJsRouter) => "app router" | "pages router";
@@ -1,83 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getNextJsRouterName = exports.IGNORE_PATTERNS = exports.NextJsRouter = void 0;
7
- exports.getNextJsVersionBucket = getNextJsVersionBucket;
8
- exports.getNextJsRouter = getNextJsRouter;
9
- const semver_1 = require("semver");
10
- const fast_glob_1 = __importDefault(require("fast-glob"));
11
- const clack_utils_1 = require("../utils/clack-utils");
12
- const clack_1 = __importDefault(require("../utils/clack"));
13
- function getNextJsVersionBucket(version) {
14
- if (!version) {
15
- return 'none';
16
- }
17
- try {
18
- const minVer = (0, semver_1.minVersion)(version);
19
- if (!minVer) {
20
- return 'invalid';
21
- }
22
- const majorVersion = (0, semver_1.major)(minVer);
23
- if (majorVersion >= 11) {
24
- return `${majorVersion}.x`;
25
- }
26
- return '<11.0.0';
27
- }
28
- catch {
29
- return 'unknown';
30
- }
31
- }
32
- var NextJsRouter;
33
- (function (NextJsRouter) {
34
- NextJsRouter["APP_ROUTER"] = "app-router";
35
- NextJsRouter["PAGES_ROUTER"] = "pages-router";
36
- })(NextJsRouter || (exports.NextJsRouter = NextJsRouter = {}));
37
- exports.IGNORE_PATTERNS = [
38
- '**/node_modules/**',
39
- '**/dist/**',
40
- '**/build/**',
41
- '**/public/**',
42
- ];
43
- async function getNextJsRouter({ installDir, }) {
44
- const pagesMatches = await (0, fast_glob_1.default)('**/pages/_app.@(ts|tsx|js|jsx)', {
45
- dot: true,
46
- cwd: installDir,
47
- ignore: exports.IGNORE_PATTERNS,
48
- });
49
- const hasPagesDir = pagesMatches.length > 0;
50
- const appMatches = await (0, fast_glob_1.default)('**/app/**/layout.@(ts|tsx|js|jsx)', {
51
- dot: true,
52
- cwd: installDir,
53
- ignore: exports.IGNORE_PATTERNS,
54
- });
55
- const hasAppDir = appMatches.length > 0;
56
- if (hasPagesDir && !hasAppDir) {
57
- clack_1.default.log.info(`Detected ${(0, exports.getNextJsRouterName)(NextJsRouter.PAGES_ROUTER)} 📃`);
58
- return NextJsRouter.PAGES_ROUTER;
59
- }
60
- if (hasAppDir && !hasPagesDir) {
61
- clack_1.default.log.info(`Detected ${(0, exports.getNextJsRouterName)(NextJsRouter.APP_ROUTER)} 📱`);
62
- return NextJsRouter.APP_ROUTER;
63
- }
64
- const result = await (0, clack_utils_1.abortIfCancelled)(clack_1.default.select({
65
- message: 'What router are you using?',
66
- options: [
67
- {
68
- label: (0, exports.getNextJsRouterName)(NextJsRouter.APP_ROUTER),
69
- value: NextJsRouter.APP_ROUTER,
70
- },
71
- {
72
- label: (0, exports.getNextJsRouterName)(NextJsRouter.PAGES_ROUTER),
73
- value: NextJsRouter.PAGES_ROUTER,
74
- },
75
- ],
76
- }));
77
- return result;
78
- }
79
- const getNextJsRouterName = (router) => {
80
- return router === NextJsRouter.APP_ROUTER ? 'app router' : 'pages router';
81
- };
82
- exports.getNextJsRouterName = getNextJsRouterName;
83
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/nextjs/utils.ts"],"names":[],"mappings":";;;;;;AAMA,wDAkBC;AAaD,0CAkDC;AAvFD,mCAA2C;AAC3C,0DAA2B;AAC3B,sDAAwD;AACxD,2DAAmC;AAGnC,SAAgB,sBAAsB,CAAC,OAA2B;IAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,YAAY,GAAG,IAAA,cAAK,EAAC,MAAM,CAAC,CAAC;QACnC,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;YACvB,OAAO,GAAG,YAAY,IAAI,CAAC;QAC7B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,yCAAyB,CAAA;IACzB,6CAA6B,CAAA;AAC/B,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AAEY,QAAA,eAAe,GAAG;IAC7B,oBAAoB;IACpB,YAAY;IACZ,aAAa;IACb,cAAc;CACf,CAAC;AACK,KAAK,UAAU,eAAe,CAAC,EACpC,UAAU,GACwB;IAClC,MAAM,YAAY,GAAG,MAAM,IAAA,mBAAE,EAAC,gCAAgC,EAAE;QAC9D,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,uBAAe;KACxB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,MAAM,IAAA,mBAAE,EAAC,mCAAmC,EAAE;QAC/D,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,uBAAe;KACxB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAExC,IAAI,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,eAAK,CAAC,GAAG,CAAC,IAAI,CACZ,YAAY,IAAA,2BAAmB,EAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAChE,CAAC;QACF,OAAO,YAAY,CAAC,YAAY,CAAC;IACnC,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,eAAK,CAAC,GAAG,CAAC,IAAI,CACZ,YAAY,IAAA,2BAAmB,EAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAC9D,CAAC;QACF,OAAO,YAAY,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAiB,MAAM,IAAA,8BAAgB,EACjD,eAAK,CAAC,MAAM,CAAC;QACX,OAAO,EAAE,4BAA4B;QACrC,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,IAAA,2BAAmB,EAAC,YAAY,CAAC,UAAU,CAAC;gBACnD,KAAK,EAAE,YAAY,CAAC,UAAU;aAC/B;YACD;gBACE,KAAK,EAAE,IAAA,2BAAmB,EAAC,YAAY,CAAC,YAAY,CAAC;gBACrD,KAAK,EAAE,YAAY,CAAC,YAAY;aACjC;SACF;KACF,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,MAAM,mBAAmB,GAAG,CAAC,MAAoB,EAAE,EAAE;IAC1D,OAAO,MAAM,KAAK,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;AAC5E,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B","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';\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 );\n\n return result;\n}\n\nexport const getNextJsRouterName = (router: NextJsRouter) => {\n return router === NextJsRouter.APP_ROUTER ? 'app router' : 'pages router';\n};\n"]}
@@ -1,4 +0,0 @@
1
- export declare const getReactDocumentation: ({ language, envVarPrefix, }: {
2
- language: "typescript" | "javascript";
3
- envVarPrefix: string;
4
- }) => string;
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getReactDocumentation = void 0;
4
- const getReactDocumentation = ({ language, envVarPrefix, }) => {
5
- const apiKeyText = envVarPrefix === 'VITE_PUBLIC_'
6
- ? 'import.meta.env.VITE_PUBLIC_POSTHOG_KEY'
7
- : `process.env.${envVarPrefix}POSTHOG_KEY`;
8
- const hostText = envVarPrefix === 'VITE_PUBLIC_'
9
- ? 'import.meta.env.VITE_PUBLIC_POSTHOG_HOST'
10
- : `process.env.${envVarPrefix}POSTHOG_HOST`;
11
- return `
12
- ==============================
13
- FILE: {index / App}.${language === 'typescript' ? 'tsx' : 'jsx'} (wherever the root of the app is)
14
- LOCATION: Wherever the root of the app is
15
- ==============================
16
- Changes:
17
- - Add the PostHogProvider to the root of the app in the provider tree.
18
-
19
- Example:
20
- --------------------------------------------------
21
- import React from 'react';
22
- import ReactDOM from 'react-dom/client';
23
- import App from './App';
24
-
25
- import { PostHogProvider} from 'posthog-js/react'
26
-
27
- const root = ReactDOM.createRoot(document.getElementById('root'));
28
-
29
- root.render(
30
- <React.StrictMode>
31
- <PostHogProvider
32
- apiKey={${apiKeyText}}
33
- options={{
34
- api_host: ${hostText},
35
- debug: ${envVarPrefix === 'VITE_PUBLIC_'
36
- ? 'import.meta.env.MODE === "development"'
37
- : 'process.env.NODE_ENV === "development"'},
38
- }}
39
- >
40
- <App />
41
- </PostHogProvider>
42
- </React.StrictMode>
43
- --------------------------------------------------`;
44
- };
45
- exports.getReactDocumentation = getReactDocumentation;
46
- //# sourceMappingURL=docs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/react/docs.ts"],"names":[],"mappings":";;;AAAO,MAAM,qBAAqB,GAAG,CAAC,EACpC,QAAQ,EACR,YAAY,GAIb,EAAE,EAAE;IACH,MAAM,UAAU,GACd,YAAY,KAAK,cAAc;QAC7B,CAAC,CAAC,yCAAyC;QAC3C,CAAC,CAAC,eAAe,YAAY,aAAa,CAAC;IAE/C,MAAM,QAAQ,GACZ,YAAY,KAAK,cAAc;QAC7B,CAAC,CAAC,0CAA0C;QAC5C,CAAC,CAAC,eAAe,YAAY,cAAc,CAAC;IAEhD,OAAO;;sBAGL,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KACtC;;;;;;;;;;;;;;;;;;;gBAmBc,UAAU;;oBAEN,QAAQ;iBAElB,YAAY,KAAK,cAAc;QAC7B,CAAC,CAAC,wCAAwC;QAC1C,CAAC,CAAC,wCACN;;;;;;mDAM2C,CAAC;AACpD,CAAC,CAAC;AAtDW,QAAA,qBAAqB,yBAsDhC","sourcesContent":["export const getReactDocumentation = ({\n language,\n envVarPrefix,\n}: {\n language: 'typescript' | 'javascript';\n envVarPrefix: string;\n}) => {\n const apiKeyText =\n envVarPrefix === 'VITE_PUBLIC_'\n ? 'import.meta.env.VITE_PUBLIC_POSTHOG_KEY'\n : `process.env.${envVarPrefix}POSTHOG_KEY`;\n\n const hostText =\n envVarPrefix === 'VITE_PUBLIC_'\n ? 'import.meta.env.VITE_PUBLIC_POSTHOG_HOST'\n : `process.env.${envVarPrefix}POSTHOG_HOST`;\n\n return `\n==============================\nFILE: {index / App}.${\n language === 'typescript' ? 'tsx' : 'jsx'\n } (wherever the root of the app is)\nLOCATION: Wherever the root of the app is\n==============================\nChanges:\n- Add the PostHogProvider to the root of the app in the provider tree.\n\nExample:\n--------------------------------------------------\nimport React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App';\n\nimport { PostHogProvider} from 'posthog-js/react'\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\n\nroot.render(\n <React.StrictMode>\n <PostHogProvider\n apiKey={${apiKeyText}}\n options={{\n api_host: ${hostText},\n debug: ${\n envVarPrefix === 'VITE_PUBLIC_'\n ? 'import.meta.env.MODE === \"development\"'\n : 'process.env.NODE_ENV === \"development\"'\n },\n }}\n >\n <App />\n </PostHogProvider>\n </React.StrictMode>\n--------------------------------------------------`;\n};\n"]}
@@ -1,2 +0,0 @@
1
- import type { WizardOptions } from '../utils/types';
2
- export declare function runReactWizard(options: WizardOptions): Promise<void>;