Skip to content

Commit

Permalink
chore(gatsby): convert dev-ssr to gatsby-worker
Browse files Browse the repository at this point in the history
  • Loading branch information
pieh committed Jun 28, 2021
1 parent 9e9b308 commit d5c0303
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 29 deletions.
1 change: 0 additions & 1 deletion packages/gatsby/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@
"invariant": "^2.2.4",
"is-relative": "^1.0.0",
"is-relative-url": "^3.0.0",
"jest-worker": "^24.9.0",
"joi": "^17.2.1",
"json-loader": "^0.5.7",
"json-stringify-safe": "^5.0.1",
Expand Down
2 changes: 0 additions & 2 deletions packages/gatsby/src/utils/dev-ssr/render-dev-html-child.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,5 +115,3 @@ exports.renderHTML = ({
exports.deleteModuleCache = htmlComponentRendererPath => {
delete require.cache[require.resolve(htmlComponentRendererPath)]
}

exports.warmup = () => `warmed`
62 changes: 36 additions & 26 deletions packages/gatsby/src/utils/dev-ssr/render-dev-html.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import JestWorker from "jest-worker"
import { WorkerPool } from "gatsby-worker"
import fs from "fs-extra"
import nodePath from "path"
import report from "gatsby-cli/lib/reporter"
Expand All @@ -11,30 +11,47 @@ import { getDevSSRWebpack } from "../../commands/build-html"
import { emitter, GatsbyReduxStore } from "../../redux"
import { IGatsbyPage } from "../../redux/types"

const startWorker = (): JestWorker => {
const newWorker = new JestWorker(require.resolve(`./render-dev-html-child`), {
exposedMethods: [`renderHTML`, `deleteModuleCache`, `warmup`],
numWorkers: 1,
forkOptions: {
silent: false,
interface IErrorRenderMeta {
codeFrame: string
source: string
line: number
column: number
sourceMessage?: string
stack?: string
}

// TODO: convert `render-dev-html-child.js` to TS and use `typeof import("./render-dev-html-child")`
// instead of defining interface here
interface IRenderDevHtmlChild {
renderHTML: (arg: {
path: string
componentPath: string
htmlComponentRendererPath: string
publicDir: string
isClientOnlyPage?: boolean
error?: IErrorRenderMeta
directory?: string
}) => Promise<string>
deleteModuleCache: (htmlComponentRendererPath: string) => void
}

const startWorker = (): WorkerPool<IRenderDevHtmlChild> => {
const newWorker = new WorkerPool<IRenderDevHtmlChild>(
require.resolve(`./render-dev-html-child`),
{
numWorkers: 1,
env: {
...process.env,
NODE_ENV: isCI() ? `production` : `development`,
forceColors: `true`,
GATSBY_EXPERIMENTAL_DEV_SSR: `true`,
},
},
})

// jest-worker is lazy with forking but we want to fork immediately so the user
// doesn't have to wait.
// @ts-ignore
newWorker.warmup()
}
)

return newWorker
}

let worker
let worker: WorkerPool<IRenderDevHtmlChild>
export const initDevWorkerPool = (): void => {
worker = startWorker()
}
Expand All @@ -53,7 +70,7 @@ export const restartWorker = (htmlComponentRendererPath: string): void => {
oldWorker.end()
changeCount = 0
} else {
worker.deleteModuleCache(htmlComponentRendererPath)
worker.all.deleteModuleCache(htmlComponentRendererPath)
}
}

Expand Down Expand Up @@ -136,14 +153,7 @@ interface IRenderDevHtmlProps {
page: IGatsbyPage
skipSsr?: boolean
store: GatsbyReduxStore
error?: {
codeFrame: string
source: string
line: number
column: number
sourceMessage?: string
stack?: string
}
error?: IErrorRenderMeta
htmlComponentRendererPath: string
directory: string
}
Expand Down Expand Up @@ -243,7 +253,7 @@ export const renderDevHTML = ({
const publicDir = nodePath.join(directory, `public`)

try {
const htmlString = await worker.renderHTML({
const htmlString = await worker.single.renderHTML({
path,
componentPath: pageObj.component,
htmlComponentRendererPath,
Expand Down

0 comments on commit d5c0303

Please sign in to comment.