eddev 2.0.0-beta.1 → 2.0.0-beta.100

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 (277) hide show
  1. package/dist/app/entry/HydrationOverlay.d.ts +1 -0
  2. package/dist/app/entry/HydrationOverlay.js +2 -0
  3. package/dist/app/entry/MetaTags.d.ts +7 -0
  4. package/dist/app/entry/MetaTags.js +17 -0
  5. package/dist/app/entry/boot-admin.d.ts +1 -0
  6. package/dist/app/entry/boot-admin.js +13 -0
  7. package/dist/app/entry/hydration-script.d.ts +1 -0
  8. package/dist/app/entry/hydration-script.js +18 -0
  9. package/dist/app/entry/spa-root.d.ts +1 -0
  10. package/dist/app/entry/spa-root.js +8 -0
  11. package/dist/app/entry/ssr-root-client.d.ts +6 -0
  12. package/dist/app/entry/ssr-root-client.js +20 -0
  13. package/dist/app/entry/ssr-root.d.ts +8 -0
  14. package/dist/app/entry/ssr-root.js +22 -0
  15. package/dist/app/lib/admin/index.d.ts +2 -2
  16. package/dist/app/lib/admin/index.js +2 -2
  17. package/dist/app/lib/admin/installFieldTypes.js +1 -1
  18. package/dist/app/lib/admin/runWidgets.js +1 -1
  19. package/dist/app/lib/blocks/ContentBlocks.d.ts +1 -1
  20. package/dist/app/lib/blocks/ContentBlocks.js +5 -5
  21. package/dist/app/lib/blocks/EditableText.d.ts +1 -1
  22. package/dist/app/lib/blocks/EditableText.js +3 -3
  23. package/dist/app/lib/blocks/InnerBlocks.d.ts +13 -3
  24. package/dist/app/lib/blocks/InnerBlocks.js +13 -5
  25. package/dist/app/lib/blocks/block-utils.d.ts +2 -2
  26. package/dist/app/lib/blocks/block-utils.js +2 -2
  27. package/dist/app/lib/blocks/editor/EditorHighlights.d.ts +7 -0
  28. package/dist/app/lib/blocks/editor/EditorHighlights.js +130 -0
  29. package/dist/app/lib/blocks/editor/EditorSupport.js +4 -5
  30. package/dist/app/lib/blocks/editor/editor-config.d.ts +17 -4
  31. package/dist/app/lib/blocks/editor/editor-config.js +21 -9
  32. package/dist/app/lib/blocks/editor/installGutenbergHooks.js +20 -14
  33. package/dist/app/lib/blocks/editor/root-blocks.d.ts +6 -0
  34. package/dist/app/lib/blocks/editor/root-blocks.js +30 -0
  35. package/dist/app/lib/blocks/editor/usePostEditor.d.ts +1 -1
  36. package/dist/app/lib/blocks/index.d.ts +9 -9
  37. package/dist/app/lib/blocks/index.js +9 -9
  38. package/dist/app/lib/blocks/inline-editing.d.ts +1 -1
  39. package/dist/app/lib/blocks/inline-editing.js +7 -5
  40. package/dist/app/lib/devtools/components/BreakpointIndicator.js +6 -4
  41. package/dist/app/lib/devtools/components/DevUI.js +4 -3
  42. package/dist/app/lib/devtools/components/GridIndicator.d.ts +1 -0
  43. package/dist/app/lib/devtools/components/GridIndicator.js +29 -0
  44. package/dist/app/lib/devtools/dev-tools-store.d.ts +9 -0
  45. package/dist/app/lib/devtools/dev-tools-store.js +8 -0
  46. package/dist/app/lib/devtools/hooks/usePersistState.d.ts +1 -1
  47. package/dist/app/lib/devtools/hooks/usePersistState.js +11 -2
  48. package/dist/app/lib/devtools/hooks/useTailwind.d.ts +1102 -1103
  49. package/dist/app/lib/devtools/hooks/useTailwind.js +6 -3
  50. package/dist/app/lib/devtools/index.d.ts +1 -0
  51. package/dist/app/lib/devtools/index.js +1 -1
  52. package/dist/app/lib/devtools/loader.js +8 -7
  53. package/dist/app/lib/devtools/useQueryDebug.d.ts +7 -1
  54. package/dist/app/lib/devtools/useQueryDebug.js +5 -8
  55. package/dist/app/lib/dynamic/dynamic.d.ts +1 -1
  56. package/dist/app/lib/dynamic/dynamic.js +5 -1
  57. package/dist/app/lib/dynamic/index.d.ts +1 -1
  58. package/dist/app/lib/dynamic/index.js +1 -1
  59. package/dist/app/lib/hooks/index.d.ts +4 -5
  60. package/dist/app/lib/hooks/index.js +4 -5
  61. package/dist/app/lib/hooks/queryUtils.d.ts +41 -4
  62. package/dist/app/lib/hooks/queryUtils.js +74 -37
  63. package/dist/app/lib/hooks/useAppData.js +1 -1
  64. package/dist/app/lib/hooks/useRPC.d.ts +0 -4
  65. package/dist/app/lib/hooks/useRPC.js +1 -8
  66. package/dist/app/lib/internal/finalize-rpc.d.ts +17 -0
  67. package/dist/app/lib/internal/finalize-rpc.js +3 -0
  68. package/dist/app/lib/internal/index.d.ts +5 -4
  69. package/dist/app/lib/internal/index.js +5 -4
  70. package/dist/app/lib/internal/internal-store.d.ts +0 -2
  71. package/dist/app/lib/internal/internal-store.js +1 -3
  72. package/dist/app/lib/internal/read-admin-manifest.d.ts +1 -1
  73. package/dist/app/lib/legacy-stitches/createStitches.d.ts +21 -21
  74. package/dist/app/lib/legacy-stitches/createStitches.js +1 -1
  75. package/dist/app/lib/legacy-stitches/index.d.ts +1 -1
  76. package/dist/app/lib/legacy-stitches/index.js +1 -1
  77. package/dist/app/lib/routing/components/BackButton.d.ts +49 -0
  78. package/dist/app/lib/routing/components/BackButton.js +47 -0
  79. package/dist/app/lib/routing/components/BrowserRouter.d.ts +4 -1
  80. package/dist/app/lib/routing/components/BrowserRouter.js +95 -19
  81. package/dist/app/lib/routing/components/ClientOnly.js +1 -1
  82. package/dist/app/lib/routing/components/Link.d.ts +1 -0
  83. package/dist/app/lib/routing/components/Link.js +11 -12
  84. package/dist/app/lib/routing/components/RouteRenderer.d.ts +1 -1
  85. package/dist/app/lib/routing/components/RouteRenderer.js +7 -6
  86. package/dist/app/lib/routing/components/SSRRouter.d.ts +2 -2
  87. package/dist/app/lib/routing/components/SSRRouter.js +5 -6
  88. package/dist/app/lib/routing/components/ScrollRestoration.js +5 -2
  89. package/dist/app/lib/routing/context.d.ts +8 -5
  90. package/dist/app/lib/routing/context.js +13 -96
  91. package/dist/app/lib/routing/hooks/useRestorableState.d.ts +2 -1
  92. package/dist/app/lib/routing/hooks/useRestorableState.js +2 -1
  93. package/dist/app/lib/routing/hooks/useRoute.d.ts +16 -1
  94. package/dist/app/lib/routing/hooks/useRoute.js +22 -1
  95. package/dist/app/lib/routing/hooks/useRouteMeta.d.ts +5 -0
  96. package/dist/app/lib/routing/hooks/useRouteMeta.js +9 -0
  97. package/dist/app/lib/routing/hooks/useRouteTransition.d.ts +1 -1
  98. package/dist/app/lib/routing/hooks/useRouteTransition.js +1 -1
  99. package/dist/app/lib/routing/hooks/useRouter.d.ts +1 -1
  100. package/dist/app/lib/routing/hooks/useRouter.js +1 -1
  101. package/dist/app/lib/routing/hooks/useRouterEvents.d.ts +1 -1
  102. package/dist/app/lib/routing/hooks/useRouterEvents.js +1 -1
  103. package/dist/app/lib/routing/hooks/useRouterState.d.ts +1 -1
  104. package/dist/app/lib/routing/hooks/useRouterState.js +1 -1
  105. package/dist/app/lib/routing/hooks/useSearchParams.js +2 -2
  106. package/dist/app/lib/routing/index.d.ts +14 -13
  107. package/dist/app/lib/routing/index.js +14 -13
  108. package/dist/app/lib/routing/loader.d.ts +2 -2
  109. package/dist/app/lib/routing/loader.js +26 -15
  110. package/dist/app/lib/routing/types.d.ts +36 -10
  111. package/dist/app/lib/routing/utils.d.ts +5 -2
  112. package/dist/app/lib/routing/utils.js +37 -4
  113. package/dist/app/lib/{hooks → runtime}/apiConfig.d.ts +6 -2
  114. package/dist/app/lib/runtime/apiConfig.js +6 -0
  115. package/dist/app/lib/runtime/errorHandling.d.ts +39 -0
  116. package/dist/app/lib/runtime/errorHandling.js +6 -0
  117. package/dist/app/lib/runtime/index.d.ts +2 -0
  118. package/dist/app/lib/runtime/index.js +2 -0
  119. package/dist/app/lib/views/index.d.ts +1 -1
  120. package/dist/app/lib/views/index.js +1 -1
  121. package/dist/app/server/defineRouter.d.ts +2 -0
  122. package/dist/app/server/defineRouter.js +4 -0
  123. package/dist/app/server/index.d.ts +5 -0
  124. package/dist/app/server/index.js +5 -0
  125. package/dist/app/server/proxy-wp-admin.d.ts +2 -0
  126. package/dist/app/server/proxy-wp-admin.js +124 -0
  127. package/dist/app/server/render-ssr-page.d.ts +21 -0
  128. package/dist/app/server/render-ssr-page.js +166 -0
  129. package/dist/app/server/rpc.d.ts +56 -0
  130. package/dist/app/server/rpc.js +18 -0
  131. package/dist/app/server/server-context.d.ts +72 -0
  132. package/dist/app/server/server-context.js +283 -0
  133. package/dist/app/server/utils/headers.d.ts +1 -0
  134. package/dist/app/server/utils/headers.js +17 -0
  135. package/dist/app/server/utils/replace-host.d.ts +6 -4
  136. package/dist/app/server/utils/replace-host.js +66 -11
  137. package/dist/app/server/utils/swr-cache.d.ts +4 -0
  138. package/dist/app/server/utils/swr-cache.js +31 -0
  139. package/dist/app/utils/APIProvider.d.ts +2 -0
  140. package/dist/app/utils/APIProvider.js +5 -0
  141. package/dist/app/utils/BlockErrorBoundary.d.ts +19 -0
  142. package/dist/app/utils/BlockErrorBoundary.js +38 -0
  143. package/dist/app/utils/ErrorMessage.d.ts +5 -0
  144. package/dist/app/utils/ErrorMessage.js +14 -0
  145. package/dist/app/utils/RouteErrorBoundary.d.ts +18 -0
  146. package/dist/app/utils/RouteErrorBoundary.js +38 -0
  147. package/dist/app/utils/asset-capture.d.ts +2 -0
  148. package/dist/app/utils/asset-capture.js +5 -0
  149. package/dist/app/utils/hydration-debugger.d.ts +13 -0
  150. package/dist/app/utils/hydration-debugger.js +11 -0
  151. package/dist/app/utils/query-client.d.ts +2 -0
  152. package/dist/app/utils/query-client.js +5 -1
  153. package/dist/app/utils/trpc-client.d.ts +2 -0
  154. package/dist/app/utils/trpc-client.js +39 -0
  155. package/dist/node/cli/cli-worker.d.ts +1 -1
  156. package/dist/node/cli/cli-worker.js +11 -3
  157. package/dist/node/cli/cli.js +112 -13
  158. package/dist/node/cli/display/CLIApp.d.ts +1 -1
  159. package/dist/node/cli/display/CLIApp.js +4 -7
  160. package/dist/node/cli/display/boot-cli-app.js +1 -1
  161. package/dist/node/cli/display/components/LogEntries.d.ts +1 -1
  162. package/dist/node/cli/display/hooks/useStatefulLog.d.ts +1 -1
  163. package/dist/node/cli/display/tools/CreateBlock.d.ts +1 -1
  164. package/dist/node/cli/display/tools/cli-tools.d.ts +1 -11
  165. package/dist/node/cli/display/tools/cli-tools.js +9 -9
  166. package/dist/node/cli/display/util/colors.d.ts +2 -2
  167. package/dist/node/cli/version.d.ts +1 -1
  168. package/dist/node/cli/version.js +1 -1
  169. package/dist/node/compiler/build-vinxi.d.ts +8 -0
  170. package/dist/node/compiler/build-vinxi.js +38 -0
  171. package/dist/node/compiler/bundler.admin.d.ts +2 -2
  172. package/dist/node/compiler/bundler.admin.js +4 -4
  173. package/dist/node/compiler/bundler.frontend.d.ts +1 -1
  174. package/dist/node/compiler/bundler.frontend.js +4 -4
  175. package/dist/node/compiler/{serverless.dev.d.ts → dev-server.d.ts} +7 -5
  176. package/dist/node/compiler/dev-server.js +107 -0
  177. package/dist/node/compiler/get-vite-config.d.ts +20 -0
  178. package/dist/node/compiler/get-vite-config.js +207 -0
  179. package/dist/node/compiler/vinxi-app.d.ts +22 -0
  180. package/dist/node/compiler/vinxi-app.js +228 -0
  181. package/dist/node/compiler/vinxi-codegen.d.ts +12 -0
  182. package/dist/node/compiler/vinxi-codegen.js +638 -0
  183. package/dist/node/graphql/graphql-codegen.d.ts +12 -2
  184. package/dist/node/graphql/graphql-codegen.js +213 -36
  185. package/dist/node/graphql/graphql-schema-loader.d.ts +2 -1
  186. package/dist/node/graphql/graphql-schema-loader.js +5 -19
  187. package/dist/node/graphql/plugins/gql-plugin-queries.js +1 -1
  188. package/dist/node/graphql/query-files-loader.d.ts +3 -0
  189. package/dist/node/graphql/query-files-loader.js +5 -0
  190. package/dist/node/project/config.d.ts +159 -73
  191. package/dist/node/project/config.js +70 -21
  192. package/dist/node/project/env.d.ts +5 -1
  193. package/dist/node/project/env.js +2 -1
  194. package/dist/node/project/manifest/block-manifest.js +3 -2
  195. package/dist/node/project/manifest/manifest.d.ts +2 -1
  196. package/dist/node/project/manifest/manifest.js +15 -11
  197. package/dist/node/project/manifest/routes-manifest.d.ts +20 -0
  198. package/dist/node/project/manifest/routes-manifest.js +74 -0
  199. package/dist/node/project/manifest/view-manifest.js +2 -2
  200. package/dist/node/project/project.d.ts +11 -2
  201. package/dist/node/project/project.js +49 -20
  202. package/dist/node/project/wp-info.d.ts +1 -0
  203. package/dist/node/project/wp-info.js +13 -3
  204. package/dist/node/types/block-type.d.ts +25 -20
  205. package/dist/node/types/block-type.js +1 -0
  206. package/dist/node/types/view-type.d.ts +7 -7
  207. package/dist/node/types/view-type.js +3 -4
  208. package/dist/node/utils/fetch-wp.d.ts +1 -0
  209. package/dist/node/utils/fetch-wp.js +27 -0
  210. package/dist/node/utils/fs-codegen.d.ts +42 -0
  211. package/dist/node/utils/fs-codegen.js +98 -0
  212. package/dist/node/utils/fs.js +2 -0
  213. package/dist/node/utils/{isDeploying.js → is-deploying.js} +1 -1
  214. package/dist/node/utils/{selfSignedCert.js → self-signed-cert.js} +1 -1
  215. package/dist/node/utils/{statefulLog.js → stateful-log.js} +3 -1
  216. package/dist/node/utils/watch-file-tree.d.ts +25 -0
  217. package/dist/node/utils/{watchFileTree.js → watch-file-tree.js} +12 -5
  218. package/package.json +40 -38
  219. package/types.app.d.ts +4 -2
  220. package/types.app.internal.d.ts +2 -2
  221. package/types.node.d.ts +3 -3
  222. package/dist/app/entry/Root.d.ts +0 -1
  223. package/dist/app/entry/Root.js +0 -9
  224. package/dist/app/entry/main.admin.d.ts +0 -3
  225. package/dist/app/entry/main.admin.js +0 -10
  226. package/dist/app/entry/main.frontend.spa.d.ts +0 -3
  227. package/dist/app/entry/main.frontend.spa.js +0 -13
  228. package/dist/app/entry/main.frontend.ssr.d.ts +0 -21
  229. package/dist/app/entry/main.frontend.ssr.js +0 -79
  230. package/dist/app/entry/main.serverless.dev.d.ts +0 -4
  231. package/dist/app/entry/main.serverless.dev.js +0 -21
  232. package/dist/app/lib/blocks/ErrorBoundaryFrontend.d.ts +0 -15
  233. package/dist/app/lib/blocks/ErrorBoundaryFrontend.js +0 -35
  234. package/dist/app/lib/hooks/apiConfig.js +0 -4
  235. package/dist/app/lib/hooks/usePageLoad.d.ts +0 -6
  236. package/dist/app/lib/hooks/usePageLoad.js +0 -5
  237. package/dist/app/server/create-api-builtin-hono.d.ts +0 -8
  238. package/dist/app/server/create-api-builtin-hono.js +0 -80
  239. package/dist/app/server/create-ssr-hono.d.ts +0 -18
  240. package/dist/app/server/create-ssr-hono.js +0 -104
  241. package/dist/app/server/utils/index.html.d.ts +0 -2
  242. package/dist/app/server/utils/index.html.js +0 -14
  243. package/dist/node/compiler/index.html.d.ts +0 -2
  244. package/dist/node/compiler/index.html.js +0 -15
  245. package/dist/node/compiler/serverless.dev.js +0 -215
  246. package/dist/node/compiler/vite/get-vite-config.d.ts +0 -13
  247. package/dist/node/compiler/vite/get-vite-config.js +0 -315
  248. package/dist/node/compiler/vite/plugin-admin.d.ts +0 -4
  249. package/dist/node/compiler/vite/plugin-admin.js +0 -67
  250. package/dist/node/compiler/vite/plugin-blocks.d.ts +0 -4
  251. package/dist/node/compiler/vite/plugin-blocks.js +0 -73
  252. package/dist/node/compiler/vite/plugin-entry.d.ts +0 -6
  253. package/dist/node/compiler/vite/plugin-entry.js +0 -16
  254. package/dist/node/compiler/vite/plugin-resolved-tailwind.d.ts +0 -4
  255. package/dist/node/compiler/vite/plugin-resolved-tailwind.js +0 -29
  256. package/dist/node/compiler/vite/plugin-theme.d.ts +0 -4
  257. package/dist/node/compiler/vite/plugin-theme.js +0 -40
  258. package/dist/node/compiler/vite/plugin-views.d.ts +0 -4
  259. package/dist/node/compiler/vite/plugin-views.js +0 -51
  260. package/dist/node/utils/console.d.ts +0 -21
  261. package/dist/node/utils/console.js +0 -28
  262. package/dist/node/utils/unsafe-fetch.d.ts +0 -2
  263. package/dist/node/utils/unsafe-fetch.js +0 -19
  264. package/dist/node/utils/watchFileTree.d.ts +0 -11
  265. package/tsup.config.ts +0 -40
  266. package/types.manifests.d.ts +0 -22
  267. /package/dist/node/utils/{formatZodError.d.ts → format-zod-error.d.ts} +0 -0
  268. /package/dist/node/utils/{formatZodError.js → format-zod-error.js} +0 -0
  269. /package/dist/node/utils/{getRepoInfo.d.ts → get-repo-info.d.ts} +0 -0
  270. /package/dist/node/utils/{getRepoInfo.js → get-repo-info.js} +0 -0
  271. /package/dist/node/utils/{highlightCode.d.ts → highlight-code.d.ts} +0 -0
  272. /package/dist/node/utils/{highlightCode.js → highlight-code.js} +0 -0
  273. /package/dist/node/utils/{isDeploying.d.ts → is-deploying.d.ts} +0 -0
  274. /package/dist/node/utils/{selfSignedCert.d.ts → self-signed-cert.d.ts} +0 -0
  275. /package/dist/node/utils/{statefulLog.d.ts → stateful-log.d.ts} +0 -0
  276. /package/dist/node/utils/{export-extractor.d.ts → ts-export-extractor.d.ts} +0 -0
  277. /package/dist/node/utils/{export-extractor.js → ts-export-extractor.js} +0 -0
@@ -0,0 +1,638 @@
1
+ import { code, imp } from "ts-poet";
2
+ import { FSCodegen } from "../utils/fs-codegen.js";
3
+ import { camelCase } from "change-case-all";
4
+ export function getVinxiFolder(opts) {
5
+ return (opts.mode === "development" ? "dev" : "prod") + (opts.serverless ? "" : "-spa");
6
+ }
7
+ export async function runVinxiCodegen(opts) {
8
+ const codegen = createVinxiCodegen(opts);
9
+ await codegen.run();
10
+ codegen.stop();
11
+ }
12
+ export function createVinxiCodegen(opts) {
13
+ const project = opts.project;
14
+ const folder = ".eddev/" + getVinxiFolder(opts);
15
+ const codegen = new FSCodegen(opts.project, {
16
+ outDir: folder,
17
+ });
18
+ if (opts.serverless) {
19
+ codegen.registerFile({
20
+ name: "context.ts",
21
+ generate: async () => {
22
+ const args = {
23
+ dev: opts.mode === "development",
24
+ origin: project.origin,
25
+ replaceUrls: {
26
+ from: project.origin,
27
+ to: opts.endpoint ?? "",
28
+ prefixes: [
29
+ { prefix: "/wp-content/uploads", replace: project.config?.serverless.uploads === "proxy" },
30
+ { prefix: "/wp-content/plugins", replace: project.config?.serverless.plugins === "proxy" },
31
+ ],
32
+ },
33
+ rpcBases: (await project.serverRoutes.get()).bases ?? [],
34
+ config: project.config,
35
+ };
36
+ return code /* tsx */ `
37
+ import { ServerContext } from "eddev/server"
38
+ import { getManifest } from "vinxi/manifest"
39
+
40
+ ServerContext.setRuntime({
41
+ getManifest
42
+ })
43
+
44
+ export const serverContext = new ServerContext({${Object.entries(args)
45
+ .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
46
+ .join(",\n")}
47
+ })
48
+ `.toString();
49
+ },
50
+ });
51
+ }
52
+ if (opts.serverless) {
53
+ codegen.registerFile({
54
+ name: "react-shim.js",
55
+ generate: code /* tsx */ `
56
+ import React from "react"
57
+ import ReactDOM from "react-dom/client"
58
+ Object.assign(React, window.React)
59
+ Object.assign(ReactDOM, window.ReactDOM)
60
+ `,
61
+ });
62
+ }
63
+ if (opts.serverless) {
64
+ // codegen.registerFile({
65
+ // name: "manifest/extra-routes.ts",
66
+ // generate: code/* tsx */ `
67
+ // import { createRouter, eventHandler, getRouterParam, getQuery, getWebRequest, getRequestHeaders } from "vinxi/http"
68
+ // import { serverContext } from "./context.js"
69
+ // export const routes = [
70
+ // {
71
+ // pattern: '/test1',
72
+ // handler: () => import('../../../test.ts')
73
+ // }
74
+ // ]
75
+ // export default eventHandler((event) => {
76
+ // routes
77
+ // })
78
+ // `,
79
+ // })
80
+ }
81
+ codegen.registerFile({
82
+ name: "entry.admin.tsx",
83
+ generate: () => {
84
+ return code /* tsx */ `
85
+ ${opts.serverless ? `import "./react-shim.js"` : ""}
86
+ ${opts.serverless ? `import "vinxi/client"` : ""}
87
+ import "../../views/index.css"
88
+ import "./manifest/admin"
89
+ import "./manifest/blocks"
90
+ import "./manifest/styles"
91
+ import bootAdmin from "eddev/_internal/boot-admin.js"
92
+
93
+ bootAdmin()
94
+ `;
95
+ },
96
+ });
97
+ codegen.registerFile({
98
+ name: "entry.client.tsx",
99
+ generate: () => {
100
+ if (opts.serverless) {
101
+ /**
102
+ * Client entry for SSR mode
103
+ */
104
+ return code /* tsx */ `
105
+ /// <reference types="vinxi/types/client" />
106
+ /**
107
+ * SSR-mode frontend entry.
108
+ * Hydrates the main app, including the html/head/body elements.
109
+ * Also ensures that the assets used during SSR are loaded.
110
+ */
111
+ import "vinxi/client"
112
+ import "../../views/index.css"
113
+ import "./manifest/blocks"
114
+ import "./manifest/views"
115
+
116
+ import * as React from "react"
117
+ import { Root, hydrateRoot } from "react-dom/client"
118
+ import { SSRClientRoot } from "eddev/_internal/ssr-root-client.js"
119
+ import { getManifest } from "vinxi/manifest"
120
+ import { createAssets } from "@vinxi/react"
121
+ import { devToolsStore } from 'eddev/devtools'
122
+
123
+ // Set up a dynamic entry which will load the configured tailwind manifest
124
+ devToolsStore.loadTailwindConfig = () => import('./manifest/tailwind-config.js')
125
+
126
+ // Create the asset renderer, which will ensure scripts/styles are mounted correctly
127
+ function getAssets() {
128
+ const Assets = createAssets(getManifest("client").handler, getManifest("client"))
129
+ return <React.Suspense><Assets /></React.Suspense>
130
+ }
131
+
132
+ window.$reactRoot =
133
+ window.$reactRoot ||
134
+ hydrateRoot(
135
+ document.getElementById('_root')!,
136
+ <SSRClientRoot assets={getAssets()} metaTags={window._PAGE_DATA.meta.head} />,
137
+ )
138
+
139
+ if (import.meta.hot) {
140
+ import.meta.hot.accept((mod) => {
141
+ if (mod) {
142
+ const app = <SSRClientRoot assets={getAssets()} metaTags={window._PAGE_DATA.meta.head} />
143
+ window.$reactRoot?.render(app)
144
+ }
145
+ })
146
+ }
147
+
148
+ declare global {
149
+ interface Window {
150
+ $reactRoot?: Root
151
+ _PAGE_DATA: any
152
+ }
153
+ }
154
+
155
+ `;
156
+ }
157
+ else {
158
+ return code /* tsx */ `
159
+ /**
160
+ * SPA-mode frontend entry.
161
+ * Renders the main app into the empty <div id='root'> element, and expects window._PAGE_DATA to be set.
162
+ */
163
+ import "./manifest/blocks"
164
+ import "./manifest/views"
165
+ import "../../views/index.css"
166
+ import { devToolsStore } from 'eddev/devtools'
167
+ import { createRoot } from "react-dom/client"
168
+ import { SPARoot } from "eddev/_internal/spa-root.js"
169
+ import * as React from "react"
170
+
171
+ devToolsStore.loadTailwindConfig = () => import('./manifest/tailwind-config')
172
+
173
+ createRoot(document.getElementById("root")!).render(<SPARoot />)
174
+ `;
175
+ }
176
+ },
177
+ });
178
+ if (opts.serverless) {
179
+ codegen.registerFile({
180
+ name: "handler.bypass.ts",
181
+ generate: code /* tsx */ `
182
+ /// <reference types="vinxi/types/server" />
183
+ import { createRouter, eventHandler, getCookie, setCookie } from "vinxi/http"
184
+
185
+ const BYPASS_TOKEN = process.env.VERCEL_BYPASS_TOKEN
186
+ const COOKIE_NAME = "__prerender_bypass"
187
+
188
+ const router = createRouter()
189
+ .get(
190
+ "/enable",
191
+ eventHandler(async (event) => {
192
+ if (!BYPASS_TOKEN) return false
193
+
194
+ setCookie(event, COOKIE_NAME, BYPASS_TOKEN, {
195
+ expires: new Date(Date.now() + 1000 * 60 * 60 * 24),
196
+ })
197
+
198
+ return true
199
+ }),
200
+ )
201
+ .get(
202
+ "/disable",
203
+ eventHandler(async (event) => {
204
+ setCookie(event, COOKIE_NAME, "")
205
+
206
+ return true
207
+ }),
208
+ )
209
+ .get(
210
+ "/check",
211
+ eventHandler(async (event) => {
212
+ const cookie = getCookie(event, COOKIE_NAME)
213
+
214
+ if (cookie === BYPASS_TOKEN) {
215
+ return true
216
+ }
217
+
218
+ return false
219
+ }),
220
+ )
221
+ export default router.handler
222
+ `,
223
+ });
224
+ // codegen.registerFile({
225
+ // name: "handler.data-api.ts",
226
+ // generate: code/* tsx */ `
227
+ // /// <reference types="vinxi/types/server" />
228
+ // import { createRouter, eventHandler, getRouterParam, getQuery, getWebRequest, getRequestHeaders, getRequestURL } from "vinxi/http"
229
+ // import { serverContext } from "./context.js"
230
+ // const router = createRouter()
231
+ // .get(
232
+ // "/route/",
233
+ // eventHandler(async (event) => {
234
+ // const id = "/"
235
+ // const url = getRequestURL(event);
236
+ // return await serverContext.fetchRouteData({
237
+ // pathname: id,
238
+ // newOrigin: url.origin,
239
+ // })
240
+ // }),
241
+ // )
242
+ // .get(
243
+ // "/route/**:name",
244
+ // eventHandler(async (event) => {
245
+ // const id = "/" + getRouterParam(event, "name")
246
+ // const url = getRequestURL(event);
247
+ // return await serverContext.fetchRouteData({
248
+ // pathname: id,
249
+ // newOrigin: url.origin,
250
+ // })
251
+ // }),
252
+ // )
253
+ // .get(
254
+ // "/query/**:name",
255
+ // eventHandler(async (event) => {
256
+ // const id = "/" + getRouterParam(event, "name")
257
+ // const paramString = getQuery(event).params
258
+ // const params = typeof paramString === "string" && paramString.length ? JSON.parse(paramString) : {}
259
+ // return await serverContext.fetchNamedQuery({
260
+ // name: id,
261
+ // params: params,
262
+ // headers: getRequestHeaders(event),
263
+ // })
264
+ // }),
265
+ // )
266
+ // .post(
267
+ // "/mutation/**:name",
268
+ // eventHandler(async (event) => {
269
+ // const id = "/" + getRouterParam(event, "name")
270
+ // const body = await getWebRequest(event).json()
271
+ // return await serverContext.fetchMutation({
272
+ // name: id,
273
+ // body,
274
+ // headers: getRequestHeaders(event),
275
+ // })
276
+ // }),
277
+ // )
278
+ // export default router.handler
279
+ // `,
280
+ // })
281
+ }
282
+ if (opts.serverless) {
283
+ codegen.registerFile({
284
+ name: "handler.ssr-page.ts",
285
+ generate: code /* tsx */ `
286
+ /// <reference types="vinxi/types/server" />
287
+ import "../../views/index.css"
288
+ import "./manifest/blocks.js"
289
+ import "./manifest/styles.js"
290
+ import "./manifest/views.js"
291
+ import "./context.js"
292
+ import { proxyWpAdmin, renderPage, ServerContext } from "eddev/server"
293
+ import {
294
+ createRouter,
295
+ eventHandler,
296
+ getQuery,
297
+ getRequestHeaders,
298
+ getRequestURL,
299
+ getRouterParam,
300
+ getWebRequest,
301
+ } from "vinxi/http"
302
+ import { handleRPC } from "./rpc.js"
303
+ import { serverContext } from "./context.js"
304
+ import { getManifest } from "vinxi/manifest"
305
+ import { inspect } from "node:util"
306
+
307
+ const router = createRouter()
308
+ .get(
309
+ "/_data/route/",
310
+ eventHandler(async (event) => {
311
+ const id = "/"
312
+ const url = getRequestURL(event)
313
+
314
+ return await serverContext.fetchRouteData({ pathname: id, newOrigin: url.origin })
315
+ }),
316
+ )
317
+ .get(
318
+ "/_data/route/**:name",
319
+ eventHandler(async (event) => {
320
+ const id = "/" + getRouterParam(event, "name")
321
+ const url = getRequestURL(event)
322
+
323
+ return await serverContext.fetchRouteData({ pathname: id, newOrigin: url.origin })
324
+ }),
325
+ )
326
+ .get(
327
+ "/_data/query/**:name",
328
+ eventHandler(async (event) => {
329
+ const id = "/" + getRouterParam(event, "name")
330
+ const paramString = getQuery(event).params
331
+
332
+ const params = typeof paramString === "string" && paramString.length ? JSON.parse(paramString) : {}
333
+
334
+ return await serverContext.fetchNamedQuery({ name: id, params: params, headers: getRequestHeaders(event) })
335
+ }),
336
+ )
337
+ .get(
338
+ "/_data/manifest/**:input",
339
+ eventHandler(async (event) => {
340
+ const manifest = getManifest("client")
341
+ const id = getRouterParam(event, "input")
342
+ const input = manifest.inputs[id === 'handler' ? manifest.handler : id]
343
+ const result = {
344
+ ...input,
345
+ id,
346
+ assets: await input.assets(),
347
+ }
348
+ const code = inspect(result, { depth: 10 })
349
+ return new Response(code, { headers: { "Content-Type": "text/plain" } })
350
+ }),
351
+ )
352
+ .post(
353
+ "/_data/mutation/**:name",
354
+ eventHandler(async (event) => {
355
+ const id = "/" + getRouterParam(event, "name")
356
+ const body = await getWebRequest(event).json()
357
+ return await serverContext.fetchMutation({ name: id, body, headers: getRequestHeaders(event) })
358
+ }),
359
+ )
360
+
361
+ export default eventHandler({
362
+ handler: async (event) => {
363
+ const serverContext = ServerContext.main
364
+ const url = getRequestURL(event)
365
+
366
+ // RPC
367
+ const isRPC = serverContext.rpcBases.some((base) => url.pathname.startsWith(base))
368
+ if (isRPC) {
369
+ return handleRPC(event)
370
+ }
371
+
372
+ // Data API
373
+ if (url.pathname.startsWith("/_data/")) {
374
+ return router.handler(event)
375
+ }
376
+
377
+ // Proxy WordPress
378
+ if (url.pathname.includes(".") || url.pathname.startsWith("/graphql") || url.pathname.startsWith("/wp-")) {
379
+ return proxyWpAdmin(event)
380
+ }
381
+
382
+ // SSR
383
+ return renderPage({ pathname: url.pathname, newOrigin: url.origin })
384
+ },
385
+ })
386
+ `,
387
+ });
388
+ }
389
+ if (opts.serverless) {
390
+ // codegen.registerFile({
391
+ // name: "handler.wp-proxy.ts",
392
+ // generate: code/* tsx */ `
393
+ // /// <reference types="vinxi/types/server" />
394
+ // import { proxyWpAdmin } from "eddev/server"
395
+ // import { eventHandler } from "vinxi/http"
396
+ // import "./context.js"
397
+ // export default eventHandler(async (event) => {
398
+ // return proxyWpAdmin(event)
399
+ // })
400
+ // `,
401
+ // })
402
+ }
403
+ codegen.registerFile({
404
+ name: "manifest/blocks.ts",
405
+ generate: async () => {
406
+ const blockManifest = await project.blocks.get();
407
+ return code /* ts */ `
408
+ import { blockManifestReader } from 'eddev/_internal'
409
+ import { dynamic } from 'eddev/dynamic'
410
+ import core from '../../../blocks/_core'
411
+
412
+ const manifest = {
413
+ ${Object.entries(blockManifest.blocks)
414
+ .filter(([name]) => !name.match(/^_[a-z]+$/i))
415
+ .map(([name, block]) => {
416
+ const importStatement = `dynamic(() => import(${JSON.stringify("../../../" + block.fileName)}), ${JSON.stringify(block.fileName)})`;
417
+ return JSON.stringify(block.acfName) + ": " + importStatement;
418
+ })
419
+ .join(",\n")},
420
+ ...core
421
+ }
422
+
423
+ const info = {
424
+ ${Object.entries(blockManifest.blocks)
425
+ .filter(([name]) => !name.match(/^_[a-z]+$/i))
426
+ .map(([name, block]) => {
427
+ return (JSON.stringify(block.acfName) +
428
+ ": " +
429
+ JSON.stringify({
430
+ slug: block.slug,
431
+ tags: block.tags,
432
+ flags: block.flags ?? {},
433
+ }));
434
+ })
435
+ .join(",\n")}
436
+ }
437
+
438
+ blockManifestReader.set(manifest, info)
439
+
440
+ export default manifest
441
+
442
+ if (import.meta.hot) {
443
+ import.meta.hot.accept()
444
+ }
445
+ `;
446
+ },
447
+ subscribe: project.blocks.subscribe,
448
+ });
449
+ codegen.registerFile({
450
+ name: "manifest/admin.ts",
451
+ generate: async () => {
452
+ const fieldManifest = await project.fields.get();
453
+ const widgetManifest = await project.widgets.get();
454
+ return code /* ts */ `
455
+ import { adminManifestReader } from 'eddev/_internal'
456
+ import editorConfig from '../../../blocks/_editor'
457
+
458
+ const fields = {${Object.entries(fieldManifest.fields)
459
+ .map(([name, field]) => {
460
+ const importStatement = `() => import(${JSON.stringify("../../../" + field.fileName)}).then(m => m.default)`;
461
+ return JSON.stringify(field.slug) + ": " + importStatement;
462
+ })
463
+ .join(",\n")}}
464
+ const widgets = {${Object.entries(widgetManifest.widgets)
465
+ .map(([name, widget]) => {
466
+ const importStatement = `() => import(${JSON.stringify("../../../" + widget.fileName)}).then(m => m.default)`;
467
+ return JSON.stringify(widget.slug) + ": " + importStatement;
468
+ })
469
+ .join(",\n")}}
470
+
471
+ const manifest = {
472
+ fields,
473
+ widgets,
474
+ editorConfig
475
+ }
476
+
477
+ adminManifestReader.set(manifest)
478
+
479
+ export default manifest
480
+
481
+ export { editorConfig }
482
+
483
+ if (import.meta.hot) {
484
+ import.meta.hot.accept()
485
+ }
486
+ `;
487
+ },
488
+ subscribe: (callback) => {
489
+ const unsub = [project.fields.subscribe(callback), project.widgets.subscribe(callback)];
490
+ return () => unsub.forEach((u) => u());
491
+ },
492
+ });
493
+ codegen.registerFile({
494
+ name: "manifest/views.ts",
495
+ generate: async () => {
496
+ const viewManifest = await project.views.get();
497
+ return code /* ts */ `
498
+ import { viewManifestReader } from 'eddev/_internal'
499
+ import { dynamic } from 'eddev/dynamic'
500
+ const manifest = {${Object.entries(viewManifest.views).map(([name, view]) => {
501
+ const src = "../../../" + view.fileName;
502
+ let importStatement;
503
+ if (name.startsWith("_")) {
504
+ importStatement = imp(name + "=" + src);
505
+ }
506
+ else {
507
+ importStatement = code `dynamic(() => import(${JSON.stringify(src)}), ${JSON.stringify(view.fileName)})`;
508
+ }
509
+ return code `${JSON.stringify(view.slug)}: ${importStatement},\n`;
510
+ })}}
511
+
512
+ viewManifestReader.value = manifest
513
+
514
+ export default manifest
515
+
516
+ if (import.meta.hot) {
517
+ import.meta.hot.accept()
518
+ }
519
+ `;
520
+ },
521
+ subscribe: project.views.subscribe,
522
+ });
523
+ codegen.registerFile({
524
+ name: "manifest/styles.ts",
525
+ generate: async () => {
526
+ return code /* ts */ `
527
+ export const getCssText = undefined
528
+ export const editorGlobalStyles = () => {}
529
+ `;
530
+ },
531
+ });
532
+ codegen.registerFile({
533
+ name: "manifest/tailwind-config.ts",
534
+ generate: async () => {
535
+ return code /* ts */ `
536
+ import tw from "../../../tailwind.config.ts"
537
+ import resolveConfig from 'tailwindcss/resolveConfig'
538
+ import { devToolsStore } from 'eddev/devtools'
539
+
540
+ const value = resolveConfig(tw)
541
+ devToolsStore.tailwindConfig = value
542
+
543
+ if (import.meta.hot) {
544
+ import.meta.hot.accept()
545
+ }
546
+ `;
547
+ },
548
+ });
549
+ if (opts.serverless) {
550
+ codegen.registerFile({
551
+ name: "manifest/routes.ts",
552
+ generate: async () => {
553
+ const routeManifest = await project.serverRoutes.get();
554
+ return code /* ts */ `
555
+ import { instantiateRouter } from "eddev/server"
556
+ ${routeManifest.contextFileName
557
+ ? code /*ts*/ `
558
+ import createContext from "../../../${routeManifest.contextFileName}"
559
+ `
560
+ : code /*ts*/ `
561
+ const createContext = () => ({})
562
+ `}
563
+
564
+ const router = instantiateRouter({${Object.entries(routeManifest.routes).map(([name, route]) => {
565
+ const src = "../../../" + route.fileName;
566
+ const importStatement = imp(camelCase(name) + "=" + src);
567
+ return code `${JSON.stringify(route.prefix)}: ${importStatement},\n`;
568
+ })}})
569
+
570
+ export { createContext, router }
571
+ `;
572
+ },
573
+ subscribe: project.serverRoutes.subscribe,
574
+ });
575
+ codegen.registerFile({
576
+ name: "rpc.ts",
577
+ generate: code /* tsx */ `
578
+ /// <reference types="vinxi/types/server" />
579
+ import "./context.js"
580
+ import { fetchRequestHandler } from "@trpc/server/adapters/fetch"
581
+ import { parseURL, stringifyParsedURL } from "ufo"
582
+ import { EventHandlerRequest, getWebRequest, H3Event, setResponseHeaders } from "vinxi/http"
583
+ import { createContext, router } from "./manifest/routes.ts"
584
+ import { ServerContext } from "eddev/server"
585
+
586
+ export function handleRPC(event: H3Event<EventHandlerRequest>) {
587
+ const serverContext = ServerContext.main
588
+
589
+ // Handle CORS
590
+ setResponseHeaders(event, serverContext.getCorsHeaders(event.headers.get("origin") ?? event.headers.get("referer") ?? ""))
591
+ if (event.method === "OPTIONS") {
592
+ event.node.res.statusCode = 204
593
+ event.node.res.statusMessage = "No Content."
594
+ return "OK"
595
+ }
596
+
597
+ // Update URLs with dots, which tRPC prefers
598
+ const originalReq = getWebRequest(event)
599
+ const parsed = parseURL(originalReq.url)
600
+ parsed.pathname = "/" + parsed.pathname.replace(/(^\\/|\\/$)/g, "").replace(/\\//g, ".")
601
+ const req = new Request(stringifyParsedURL(parsed), originalReq)
602
+
603
+ // Handle any early results which are Responses
604
+ function processEarlyResult(value: any): Response | undefined {
605
+ if (value instanceof Response) {
606
+ return value
607
+ }
608
+ }
609
+
610
+ return new Promise(async (resolve) => {
611
+ let sent = false
612
+ const defaultResponse = await fetchRequestHandler({
613
+ endpoint: "/",
614
+ req: req,
615
+ router: router,
616
+ createContext,
617
+ onError: (err) => console.error(err),
618
+ batching: { enabled: false },
619
+ // If a Response object is returned by a route, it will be sent as the response
620
+ responseMeta(opts) {
621
+ const value = opts?.data?.[0]?.["result"]?.["data"]
622
+ const response = processEarlyResult(value)
623
+ if (response) {
624
+ sent = true
625
+ resolve(response)
626
+ }
627
+ return {}
628
+ },
629
+ })
630
+ if (sent) return
631
+ resolve(defaultResponse)
632
+ })
633
+ }
634
+ `,
635
+ });
636
+ }
637
+ return codegen;
638
+ }
@@ -1,7 +1,13 @@
1
1
  import { Project } from "../project/project.js";
2
- export declare const graphqlLog: import("../utils/statefulLog.js").StatefulLog<GraphQLGenerator>;
2
+ export declare const graphqlLog: import("../utils/stateful-log.js").StatefulLog<GraphQLGenerator>;
3
+ type GraphQLGeneratorOptions = {
4
+ watch?: boolean;
5
+ optimize?: boolean;
6
+ generate?: boolean;
7
+ };
3
8
  export declare class GraphQLGenerator {
4
9
  project: Project;
10
+ opts: GraphQLGeneratorOptions;
5
11
  private needsRegenerate;
6
12
  private needsReload;
7
13
  private regenerateReason;
@@ -9,22 +15,26 @@ export declare class GraphQLGenerator {
9
15
  private isGenerating;
10
16
  private schemaLoader;
11
17
  private fileLoader;
18
+ private optimizeWriter;
12
19
  private debouncer?;
13
20
  private retryTimer?;
14
- constructor(project: Project);
21
+ constructor(project: Project, opts: GraphQLGeneratorOptions);
15
22
  queueRegenerate(full: boolean, reason: string, info?: string | string[]): Promise<void>;
16
23
  start(): Promise<void>;
17
24
  private listen;
18
25
  scheduleRetry(): void;
19
26
  generate(): Promise<void>;
27
+ private getOptimizedQueries;
20
28
  /**
21
29
  * Validates a GraphQL manifest against a schema, ensuring there are no user errors.
22
30
  */
23
31
  private validateGraphQLFiles;
24
32
  private generateTS;
25
33
  generateUtilTypes(): Promise<unknown[]>;
34
+ generateAPITypes(): Promise<unknown[]>;
26
35
  /**
27
36
  * Saves the schema to a file, for use by the VSCode GraphQL extension
28
37
  */
29
38
  private writeSchemaFile;
30
39
  }
40
+ export {};