diff --git a/dist/functions/server/server-post-build-fn.js b/dist/functions/server/server-post-build-fn.js index 74d5c1b..ea7e3c4 100644 --- a/dist/functions/server/server-post-build-fn.js +++ b/dist/functions/server/server-post-build-fn.js @@ -14,8 +14,9 @@ export default async function serverPostBuildFn() { } const target_artifact = global.BUNDLER_CTX_MAP[controller.target_map.local_path]; const mock_req = new Request(controller.page_url); - const { serverRes, bundledMap, module, root_module } = await grabPageComponent({ + const { serverRes } = await grabPageComponent({ req: mock_req, + return_server_res_only: true, }); const final_artifact = { ..._.omit(controller, ["controller"]), diff --git a/dist/functions/server/web-pages/generate-web-page-get-cache-page.d.ts b/dist/functions/server/web-pages/generate-web-page-get-cache-page.d.ts index 8a953a3..546abeb 100644 --- a/dist/functions/server/web-pages/generate-web-page-get-cache-page.d.ts +++ b/dist/functions/server/web-pages/generate-web-page-get-cache-page.d.ts @@ -1,7 +1,7 @@ import type { BunextPageModule, BunextPageModuleServerReturn, BunxRouteParams } from "../../../types"; type Params = { html: string; - module: BunextPageModule; + module?: BunextPageModule; root_module?: BunextPageModule; routeParams?: BunxRouteParams; serverRes?: BunextPageModuleServerReturn; diff --git a/dist/functions/server/web-pages/generate-web-page-get-cache-page.js b/dist/functions/server/web-pages/generate-web-page-get-cache-page.js index ed10b67..2474574 100644 --- a/dist/functions/server/web-pages/generate-web-page-get-cache-page.js +++ b/dist/functions/server/web-pages/generate-web-page-get-cache-page.js @@ -2,7 +2,7 @@ import _ from "lodash"; import { log } from "../../../utils/log"; import writeCache from "../../cache/write-cache"; export default async function generateWebPageGetCachePage({ module, routeParams, serverRes, root_module, html, }) { - const config = _.merge(root_module?.config, module.config); + const config = _.merge(root_module?.config, module?.config); const cache_page = config?.cachePage || serverRes?.cachePage || false; const expiry_seconds = config?.cacheExpiry || serverRes?.cacheExpiry; if (cache_page && routeParams?.url) { diff --git a/dist/functions/server/web-pages/grab-page-combined-server-res.d.ts b/dist/functions/server/web-pages/grab-page-combined-server-res.d.ts new file mode 100644 index 0000000..5f6226e --- /dev/null +++ b/dist/functions/server/web-pages/grab-page-combined-server-res.d.ts @@ -0,0 +1,12 @@ +import type { BunextPageModuleServerReturn, BunxRouteParams } from "../../../types"; +type Params = { + file_path: string; + debug?: boolean; + url?: URL; + query?: any; + routeParams?: BunxRouteParams; +}; +export default function grabPageCombinedServerRes({ file_path, debug, url, query, routeParams, }: Params): Promise<{ + serverRes: BunextPageModuleServerReturn; +}>; +export {}; diff --git a/dist/functions/server/web-pages/grab-page-combined-server-res.js b/dist/functions/server/web-pages/grab-page-combined-server-res.js new file mode 100644 index 0000000..9d2e183 --- /dev/null +++ b/dist/functions/server/web-pages/grab-page-combined-server-res.js @@ -0,0 +1,42 @@ +import _ from "lodash"; +import { log } from "../../../utils/log"; +import grabRootFilePath from "./grab-root-file-path"; +import grabPageServerRes from "./grab-page-server-res"; +import grabPageServerPath from "./grab-page-server-path"; +export default async function grabPageCombinedServerRes({ file_path, debug, url, query, routeParams, }) { + const now = Date.now(); + const { root_file_path } = grabRootFilePath(); + const { server_file_path: root_server_file_path } = root_file_path + ? grabPageServerPath({ file_path: root_file_path }) + : {}; + const root_server_module = root_server_file_path + ? await import(`${root_server_file_path}?t=${now}`) + : undefined; + const root_server_fn = root_server_module?.default || root_server_module?.server; + const rootServerRes = root_server_fn + ? await grabPageServerRes({ + server_function: root_server_fn, + url, + query, + routeParams, + }) + : undefined; + if (debug) { + log.info(`rootServerRes:`, rootServerRes); + } + const { server_file_path } = grabPageServerPath({ file_path }); + const server_module = server_file_path + ? await import(`${server_file_path}?t=${now}`) + : undefined; + const server_fn = server_module?.default || server_module?.server; + const serverRes = server_fn + ? await grabPageServerRes({ + server_function: server_fn, + url, + query, + routeParams, + }) + : undefined; + const mergedServerRes = _.merge(rootServerRes || {}, serverRes || {}); + return { serverRes: mergedServerRes }; +} diff --git a/dist/functions/server/web-pages/grab-page-component.d.ts b/dist/functions/server/web-pages/grab-page-component.d.ts index b9756bc..bcc938a 100644 --- a/dist/functions/server/web-pages/grab-page-component.d.ts +++ b/dist/functions/server/web-pages/grab-page-component.d.ts @@ -3,6 +3,7 @@ type Params = { req?: Request; file_path?: string; debug?: boolean; + return_server_res_only?: boolean; }; -export default function grabPageComponent({ req, file_path: passed_file_path, debug, }: Params): Promise; +export default function grabPageComponent({ req, file_path: passed_file_path, debug, return_server_res_only, }: Params): Promise; export {}; diff --git a/dist/functions/server/web-pages/grab-page-component.js b/dist/functions/server/web-pages/grab-page-component.js index 58d0173..6ca61d6 100644 --- a/dist/functions/server/web-pages/grab-page-component.js +++ b/dist/functions/server/web-pages/grab-page-component.js @@ -7,9 +7,10 @@ import grabRootFilePath from "./grab-root-file-path"; import grabPageServerRes from "./grab-page-server-res"; import grabPageServerPath from "./grab-page-server-path"; import grabPageModules from "./grab-page-modules"; +import grabPageCombinedServerRes from "./grab-page-combined-server-res"; class NotFoundError extends Error { } -export default async function grabPageComponent({ req, file_path: passed_file_path, debug, }) { +export default async function grabPageComponent({ req, file_path: passed_file_path, debug, return_server_res_only, }) { const url = req?.url ? new URL(req.url) : undefined; const router = global.ROUTER; let routeParams = undefined; @@ -45,6 +46,16 @@ export default async function grabPageComponent({ req, file_path: passed_file_pa if (debug) { log.info(`bundledMap:`, bundledMap); } + if (return_server_res_only) { + const { serverRes } = await grabPageCombinedServerRes({ + file_path, + debug, + query: match?.query, + routeParams, + url, + }); + return { serverRes }; + } const { component, module, serverRes, root_module } = await grabPageModules({ file_path, debug, diff --git a/dist/functions/server/web-pages/grab-page-modules.js b/dist/functions/server/web-pages/grab-page-modules.js index 0ff6574..e23a7a8 100644 --- a/dist/functions/server/web-pages/grab-page-modules.js +++ b/dist/functions/server/web-pages/grab-page-modules.js @@ -4,55 +4,28 @@ import { log } from "../../../utils/log"; import grabRootFilePath from "./grab-root-file-path"; import grabPageServerRes from "./grab-page-server-res"; import grabPageServerPath from "./grab-page-server-path"; +import grabPageCombinedServerRes from "./grab-page-combined-server-res"; export default async function grabPageModules({ file_path, debug, url, query, routeParams, }) { const now = Date.now(); const { root_file_path } = grabRootFilePath(); const root_module = root_file_path ? await import(`${root_file_path}?t=${now}`) : undefined; - const { server_file_path: root_server_file_path } = root_file_path - ? grabPageServerPath({ file_path: root_file_path }) - : {}; - const root_server_module = root_server_file_path - ? await import(`${root_server_file_path}?t=${now}`) - : undefined; - const root_server_fn = root_server_module?.default || root_server_module?.server; - const rootServerRes = root_server_fn - ? await grabPageServerRes({ - server_function: root_server_fn, - url, - query, - routeParams, - }) - : undefined; - if (debug) { - log.info(`rootServerRes:`, rootServerRes); - } const module = await import(`${file_path}?t=${now}`); - const { server_file_path } = grabPageServerPath({ file_path }); - const server_module = server_file_path - ? await import(`${server_file_path}?t=${now}`) - : undefined; if (debug) { log.info(`module:`, module); } - const server_fn = server_module?.default || server_module?.server; - const serverRes = server_fn - ? await grabPageServerRes({ - server_function: server_fn, - url, - query, - routeParams, - }) - : undefined; - if (debug) { - log.info(`serverRes:`, serverRes); - } - const mergedServerRes = _.merge(rootServerRes || {}, serverRes || {}); + const { serverRes } = await grabPageCombinedServerRes({ + file_path, + debug, + query, + routeParams, + url, + }); const { component } = (await grabPageBundledReactComponent({ file_path, root_file_path, - server_res: mergedServerRes, + server_res: serverRes, })) || {}; if (!component) { throw new Error(`Couldn't grab page component`); @@ -62,7 +35,7 @@ export default async function grabPageModules({ file_path, debug, url, query, ro } return { component, - serverRes: mergedServerRes, + serverRes, module, root_module, }; diff --git a/dist/types/index.d.ts b/dist/types/index.d.ts index 3f5695a..e640c24 100644 --- a/dist/types/index.d.ts +++ b/dist/types/index.d.ts @@ -245,11 +245,11 @@ export type BunextPageModuleMetadata = { description?: string; }; export type GrabPageComponentRes = { - component: JSX.Element; + component?: JSX.Element; serverRes?: BunextPageModuleServerReturn; routeParams?: BunxRouteParams; bundledMap?: BundlerCTXMap; - module: BunextPageModule; + module?: BunextPageModule; root_module?: BunextRootModule; debug?: boolean; }; diff --git a/package.json b/package.json index e4da0dd..4b417f7 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@moduletrace/bunext", "module": "index.ts", "type": "module", - "version": "1.0.41", + "version": "1.0.42", "main": "dist/index.js", "types": "dist/index.d.ts", "exports": { diff --git a/src/functions/server/server-post-build-fn.ts b/src/functions/server/server-post-build-fn.ts index 0aced28..b6996c7 100644 --- a/src/functions/server/server-post-build-fn.ts +++ b/src/functions/server/server-post-build-fn.ts @@ -1,5 +1,5 @@ import _ from "lodash"; -import type { BundlerCTXMap, GlobalHMRControllerObject } from "../../types"; +import type { GlobalHMRControllerObject } from "../../types"; import grabPageComponent from "./web-pages/grab-page-component"; export default async function serverPostBuildFn() { @@ -23,10 +23,10 @@ export default async function serverPostBuildFn() { const mock_req = new Request(controller.page_url); - const { serverRes, bundledMap, module, root_module } = - await grabPageComponent({ - req: mock_req, - }); + const { serverRes } = await grabPageComponent({ + req: mock_req, + return_server_res_only: true, + }); const final_artifact: Omit = { ..._.omit(controller, ["controller"]), diff --git a/src/functions/server/web-pages/generate-web-page-get-cache-page.tsx b/src/functions/server/web-pages/generate-web-page-get-cache-page.tsx index f62c234..98f7eba 100644 --- a/src/functions/server/web-pages/generate-web-page-get-cache-page.tsx +++ b/src/functions/server/web-pages/generate-web-page-get-cache-page.tsx @@ -9,7 +9,7 @@ import writeCache from "../../cache/write-cache"; type Params = { html: string; - module: BunextPageModule; + module?: BunextPageModule; root_module?: BunextPageModule; routeParams?: BunxRouteParams; serverRes?: BunextPageModuleServerReturn; @@ -22,7 +22,7 @@ export default async function generateWebPageGetCachePage({ root_module, html, }: Params) { - const config = _.merge(root_module?.config, module.config); + const config = _.merge(root_module?.config, module?.config); const cache_page = config?.cachePage || serverRes?.cachePage || false; const expiry_seconds = config?.cacheExpiry || serverRes?.cacheExpiry; diff --git a/src/functions/server/web-pages/grab-page-combined-server-res.ts b/src/functions/server/web-pages/grab-page-combined-server-res.ts new file mode 100644 index 0000000..d62e8c1 --- /dev/null +++ b/src/functions/server/web-pages/grab-page-combined-server-res.ts @@ -0,0 +1,73 @@ +import type { + BunextPageModuleServerReturn, + BunextPageServerModule, + BunxRouteParams, +} from "../../../types"; +import _ from "lodash"; +import { log } from "../../../utils/log"; +import grabRootFilePath from "./grab-root-file-path"; +import grabPageServerRes from "./grab-page-server-res"; +import grabPageServerPath from "./grab-page-server-path"; + +type Params = { + file_path: string; + debug?: boolean; + url?: URL; + query?: any; + routeParams?: BunxRouteParams; +}; + +export default async function grabPageCombinedServerRes({ + file_path, + debug, + url, + query, + routeParams, +}: Params) { + const now = Date.now(); + + const { root_file_path } = grabRootFilePath(); + const { server_file_path: root_server_file_path } = root_file_path + ? grabPageServerPath({ file_path: root_file_path }) + : {}; + const root_server_module: BunextPageServerModule = root_server_file_path + ? await import(`${root_server_file_path}?t=${now}`) + : undefined; + + const root_server_fn = + root_server_module?.default || root_server_module?.server; + + const rootServerRes: BunextPageModuleServerReturn | undefined = + root_server_fn + ? await grabPageServerRes({ + server_function: root_server_fn, + url, + query, + routeParams, + }) + : undefined; + + if (debug) { + log.info(`rootServerRes:`, rootServerRes); + } + + const { server_file_path } = grabPageServerPath({ file_path }); + const server_module: BunextPageServerModule = server_file_path + ? await import(`${server_file_path}?t=${now}`) + : undefined; + + const server_fn = server_module?.default || server_module?.server; + + const serverRes: BunextPageModuleServerReturn | undefined = server_fn + ? await grabPageServerRes({ + server_function: server_fn, + url, + query, + routeParams, + }) + : undefined; + + const mergedServerRes = _.merge(rootServerRes || {}, serverRes || {}); + + return { serverRes: mergedServerRes }; +} diff --git a/src/functions/server/web-pages/grab-page-component.tsx b/src/functions/server/web-pages/grab-page-component.tsx index 0130cda..520216a 100644 --- a/src/functions/server/web-pages/grab-page-component.tsx +++ b/src/functions/server/web-pages/grab-page-component.tsx @@ -15,6 +15,7 @@ import grabRootFilePath from "./grab-root-file-path"; import grabPageServerRes from "./grab-page-server-res"; import grabPageServerPath from "./grab-page-server-path"; import grabPageModules from "./grab-page-modules"; +import grabPageCombinedServerRes from "./grab-page-combined-server-res"; class NotFoundError extends Error {} @@ -22,12 +23,14 @@ type Params = { req?: Request; file_path?: string; debug?: boolean; + return_server_res_only?: boolean; }; export default async function grabPageComponent({ req, file_path: passed_file_path, debug, + return_server_res_only, }: Params): Promise { const url = req?.url ? new URL(req.url) : undefined; const router = global.ROUTER; @@ -78,6 +81,18 @@ export default async function grabPageComponent({ log.info(`bundledMap:`, bundledMap); } + if (return_server_res_only) { + const { serverRes } = await grabPageCombinedServerRes({ + file_path, + debug, + query: match?.query, + routeParams, + url, + }); + + return { serverRes }; + } + const { component, module, serverRes, root_module } = await grabPageModules({ file_path, diff --git a/src/functions/server/web-pages/grab-page-modules.tsx b/src/functions/server/web-pages/grab-page-modules.tsx index e66f2e8..cb49989 100644 --- a/src/functions/server/web-pages/grab-page-modules.tsx +++ b/src/functions/server/web-pages/grab-page-modules.tsx @@ -12,6 +12,7 @@ import grabRootFilePath from "./grab-root-file-path"; import grabPageServerRes from "./grab-page-server-res"; import grabPageServerPath from "./grab-page-server-path"; import type { JSX } from "react"; +import grabPageCombinedServerRes from "./grab-page-combined-server-res"; type Params = { file_path: string; @@ -34,62 +35,26 @@ export default async function grabPageModules({ const root_module: BunextRootModule | undefined = root_file_path ? await import(`${root_file_path}?t=${now}`) : undefined; - const { server_file_path: root_server_file_path } = root_file_path - ? grabPageServerPath({ file_path: root_file_path }) - : {}; - const root_server_module: BunextPageServerModule = root_server_file_path - ? await import(`${root_server_file_path}?t=${now}`) - : undefined; - - const root_server_fn = - root_server_module?.default || root_server_module?.server; - - const rootServerRes: BunextPageModuleServerReturn | undefined = - root_server_fn - ? await grabPageServerRes({ - server_function: root_server_fn, - url, - query, - routeParams, - }) - : undefined; - - if (debug) { - log.info(`rootServerRes:`, rootServerRes); - } const module: BunextPageModule = await import(`${file_path}?t=${now}`); - const { server_file_path } = grabPageServerPath({ file_path }); - const server_module: BunextPageServerModule = server_file_path - ? await import(`${server_file_path}?t=${now}`) - : undefined; if (debug) { log.info(`module:`, module); } - const server_fn = server_module?.default || server_module?.server; - - const serverRes: BunextPageModuleServerReturn | undefined = server_fn - ? await grabPageServerRes({ - server_function: server_fn, - url, - query, - routeParams, - }) - : undefined; - - if (debug) { - log.info(`serverRes:`, serverRes); - } - - const mergedServerRes = _.merge(rootServerRes || {}, serverRes || {}); + const { serverRes } = await grabPageCombinedServerRes({ + file_path, + debug, + query, + routeParams, + url, + }); const { component } = (await grabPageBundledReactComponent({ file_path, root_file_path, - server_res: mergedServerRes, + server_res: serverRes, })) || {}; if (!component) { @@ -102,7 +67,7 @@ export default async function grabPageModules({ return { component, - serverRes: mergedServerRes, + serverRes, module, root_module, }; diff --git a/src/types/index.ts b/src/types/index.ts index e89c196..d54ccf5 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -278,11 +278,11 @@ export type BunextPageModuleMetadata = { }; export type GrabPageComponentRes = { - component: JSX.Element; + component?: JSX.Element; serverRes?: BunextPageModuleServerReturn; routeParams?: BunxRouteParams; bundledMap?: BundlerCTXMap; - module: BunextPageModule; + module?: BunextPageModule; root_module?: BunextRootModule; debug?: boolean; };