gatsby 3.11.0 → 3.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.11.1](https://github.com/gatsbyjs/gatsby/compare/gatsby@3.11.0...gatsby@3.11.1) (2021-08-09)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **gatsby:** Silence process.send Error ([#32744](https://github.com/gatsbyjs/gatsby/issues/32744)) ([#32747](https://github.com/gatsbyjs/gatsby/issues/32747)) ([ac7c641](https://github.com/gatsbyjs/gatsby/commit/ac7c6410d168dd892739cda56e7e4d0e67b2fad3))
11
+
12
+ ### Features
13
+
14
+ - **gatsby:** allow sites to disable the dev 404 page ([#32686](https://github.com/gatsbyjs/gatsby/issues/32686)) ([#32745](https://github.com/gatsbyjs/gatsby/issues/32745)) ([54d3315](https://github.com/gatsbyjs/gatsby/commit/54d3315560041883e010b91610b1597a2a2466ec))
15
+
6
16
  # [3.11.0](https://github.com/gatsbyjs/gatsby/compare/gatsby@3.11.0-next.6...gatsby@3.11.0) (2021-08-04)
7
17
 
8
18
  ### Bug Fixes
@@ -143,6 +143,9 @@ class ControllableScript {
143
143
  type: `EXIT`,
144
144
  payload: code
145
145
  }
146
+ }, () => {// The try/catch won't suffice for this process.send
147
+ // So use the callback to manually catch the Error, otherwise it'll be thrown
148
+ // Ref: https://nodejs.org/api/child_process.html#child_process_subprocess_send_message_sendhandle_options_callback
146
149
  });
147
150
  }
148
151
  } catch (err) {// Ignore error if process has crashed or already quit.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/develop.ts"],"names":["requireUncached","file","require","cache","resolve","e","doesConfigChangeRequireRestart","lastConfig","newConfig","replacer","_","v","RegExp","toString","oldConfigString","JSON","stringify","siteMetadata","newConfigString","getDebugPort","port","getDebugInfo","program","Object","prototype","hasOwnProperty","call","inspect","break","inspectBrk","ControllableScript","constructor","script","debugInfo","start","args","tmpFileName","tmp","tmpNameSync","tmpdir","path","join","process","cwd","fs","outputFileSync","isRunning","push","execa","node","env","stdio","stop","signal","code","Error","kill","send","type","action","payload","err","Promise","on","removeAllListeners","undefined","onMessage","callback","onExit","msg","isRestarting","REGEX_IP","module","exports","parseInt","developProcessPath","telemetryServerPath","message","exit","proxyPort","rootFile","directory","statusServerPort","developPort","telemetryServerPort","all","INTERNAL_STATUS_PORT","https","reporter","panic","sslHost","host","test","ssl","name","caFile","certFile","keyFile","proxy","targetPort","developProcess","telemetryServerProcess","unlocks","statusUnlock","developUnlock","telemetryUnlock","sitePackageJson","sitePath","pid","lastRun","Date","now","data","console","error","concat","statusServer","createServer","http","listen","io","SocketIO","cors","origin","cookie","handleChildProcessIPC","emit","serveSite","socket","respond","serveRestartingScreen","files","watcher","chokidar","watch","filePath","basename","warn","dirtyFile","shutdownServices","_code","services","close","server","forEach","unlock","catch","then"],"mappings":"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","sourcesContent":["// NOTE(@mxstbr): Do not use the reporter in this file, as that has side-effects on import which break structured logging\nimport path from \"path\"\nimport http from \"http\"\nimport https from \"https\"\nimport tmp from \"tmp\"\nimport { ChildProcess } from \"child_process\"\nimport execa from \"execa\"\nimport chokidar from \"chokidar\"\nimport getRandomPort from \"detect-port\"\nimport { detectPortInUseAndPrompt } from \"../utils/detect-port-in-use-and-prompt\"\nimport { Server as SocketIO } from \"socket.io\"\nimport fs from \"fs-extra\"\nimport onExit from \"signal-exit\"\nimport {\n isCI,\n slash,\n createServiceLock,\n getService,\n updateSiteMetadata,\n UnlockFn,\n} from \"gatsby-core-utils\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { getSslCert } from \"../utils/get-ssl-cert\"\nimport { IProxyControls, startDevelopProxy } from \"../utils/develop-proxy\"\nimport { IProgram, IDebugInfo } from \"./types\"\nimport { flush as telemetryFlush } from \"gatsby-telemetry\"\n\n// Adapted from https://stackoverflow.com/a/16060619\nconst requireUncached = (file: string): any => {\n try {\n delete require.cache[require.resolve(file)]\n } catch (e) {\n return null\n }\n\n try {\n return require(file)\n } catch (e) {\n return null\n }\n}\n\n// Heuristics for gatsby-config.js, as not all changes to it require a full restart to take effect\nconst doesConfigChangeRequireRestart = (\n lastConfig: Record<string, any>,\n newConfig: Record<string, any>\n): boolean => {\n // Ignore changes to siteMetadata\n const replacer = (_, v): string | void => {\n if (typeof v === `function` || v instanceof RegExp) {\n return v.toString()\n } else {\n return v\n }\n }\n\n const oldConfigString = JSON.stringify(\n { ...lastConfig, siteMetadata: null },\n replacer\n )\n const newConfigString = JSON.stringify(\n { ...newConfig, siteMetadata: null },\n replacer\n )\n\n if (oldConfigString === newConfigString) return false\n\n return true\n}\n\n// Return a user-supplied port otherwise the default Node.js debugging port\nconst getDebugPort = (port?: number): number => port ?? 9229\n\nexport const getDebugInfo = (program: IProgram): IDebugInfo | null => {\n if (Object.prototype.hasOwnProperty.call(program, `inspect`)) {\n return {\n port: getDebugPort(program.inspect),\n break: false,\n }\n } else if (Object.prototype.hasOwnProperty.call(program, `inspectBrk`)) {\n return {\n port: getDebugPort(program.inspectBrk),\n break: true,\n }\n } else {\n return null\n }\n}\n\nclass ControllableScript {\n private process?: ChildProcess\n private script\n private debugInfo: IDebugInfo | null\n public isRunning\n constructor(script, debugInfo: IDebugInfo | null) {\n this.script = script\n this.debugInfo = debugInfo\n }\n start(): void {\n const args: Array<string> = []\n const tmpFileName = tmp.tmpNameSync({\n tmpdir: path.join(process.cwd(), `.cache`),\n })\n fs.outputFileSync(tmpFileName, this.script)\n this.isRunning = true\n // Passing --inspect isn't necessary for the child process to launch a port but it allows some editors to automatically attach\n if (this.debugInfo) {\n if (this.debugInfo.break) {\n args.push(`--inspect-brk=${this.debugInfo.port}`)\n } else {\n args.push(`--inspect=${this.debugInfo.port}`)\n }\n }\n\n this.process = execa.node(tmpFileName, args, {\n env: process.env,\n stdio: [`inherit`, `inherit`, `inherit`, `ipc`],\n })\n }\n async stop(\n signal: NodeJS.Signals | null = null,\n code?: number\n ): Promise<void> {\n if (!this.process) {\n throw new Error(`Trying to stop the process before starting it`)\n }\n\n this.isRunning = false\n try {\n if (signal) {\n this.process.kill(signal)\n } else {\n this.process.send({\n type: `COMMAND`,\n action: {\n type: `EXIT`,\n payload: code,\n },\n })\n }\n } catch (err) {\n // Ignore error if process has crashed or already quit.\n // Ref: https://github.com/gatsbyjs/gatsby/issues/28011#issuecomment-877302917\n }\n\n return new Promise(resolve => {\n if (!this.process) {\n throw new Error(`Trying to stop the process before starting it`)\n }\n\n this.process.on(`exit`, () => {\n if (this.process) {\n this.process.removeAllListeners()\n }\n this.process = undefined\n resolve()\n })\n })\n }\n onMessage(callback: (msg: any) => void): void {\n if (!this.process) {\n throw new Error(`Trying to attach message handler before process started`)\n }\n this.process.on(`message`, callback)\n }\n onExit(\n callback: (code: number | null, signal: NodeJS.Signals | null) => void\n ): void {\n if (!this.process) {\n throw new Error(`Trying to attach exit handler before process started`)\n }\n this.process.on(`exit`, callback)\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n send(msg: any): void {\n if (!this.process) {\n throw new Error(`Trying to send a message before process started`)\n }\n\n this.process.send(msg)\n }\n}\n\nlet isRestarting\n\n// checks if a string is a valid ip\nconst REGEX_IP = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$/\n\nmodule.exports = async (program: IProgram): Promise<void> => {\n // In some cases, port can actually be a string. But our codebase is expecting it to be a number.\n // So we want to early just force it to a number to ensure we always act on a correct type.\n program.port = parseInt(program.port + ``, 10)\n const developProcessPath = slash(require.resolve(`./develop-process`))\n const telemetryServerPath = slash(\n require.resolve(`../utils/telemetry-server`)\n )\n\n try {\n program.port = await detectPortInUseAndPrompt(program.port)\n } catch (e) {\n if (e.message === `USER_REJECTED`) {\n process.exit(0)\n }\n\n throw e\n }\n\n // Run the actual develop server on a random port, and the proxy on the program port\n // which users will access\n const proxyPort = program.port\n const debugInfo = getDebugInfo(program)\n\n const rootFile = (file: string): string => path.join(program.directory, file)\n\n // Require gatsby-config.js before accessing process.env, to enable the user to change\n // environment variables from the config file.\n let lastConfig = requireUncached(rootFile(`gatsby-config.js`))\n\n // INTERNAL_STATUS_PORT allows for setting the websocket port used for monitoring\n // when the browser should prompt the user to restart the develop process.\n // This port is randomized by default and in most cases should never be required to configure.\n // It is exposed for environments where port access needs to be explicit, such as with Docker.\n // As the port is meant for internal usage only, any attempt to interface with features\n // it exposes via third-party software is not supported.\n const [\n statusServerPort,\n developPort,\n telemetryServerPort,\n ] = await Promise.all([\n getRandomPort(process.env.INTERNAL_STATUS_PORT),\n getRandomPort(),\n getRandomPort(),\n ])\n\n // In order to enable custom ssl, --cert-file --key-file and -https flags must all be\n // used together\n if ((program[`cert-file`] || program[`key-file`]) && !program.https) {\n reporter.panic(\n `for custom ssl --https, --cert-file, and --key-file must be used together`\n )\n }\n\n // Check if https is enabled, then create or get SSL cert.\n // Certs are named 'devcert' and issued to the host.\n // NOTE(@mxstbr): We mutate program.ssl _after_ passing it\n // to the develop process controllable script above because\n // that would mean we double SSL browser => proxy => server\n if (program.https) {\n const sslHost =\n program.host === `0.0.0.0` || program.host === `::`\n ? `localhost`\n : program.host\n\n if (REGEX_IP.test(sslHost)) {\n reporter.panic(\n `You're trying to generate a ssl certificate for an IP (${sslHost}). Please use a hostname instead.`\n )\n }\n\n const ssl = await getSslCert({\n name: sslHost,\n caFile: program[`ca-file`],\n certFile: program[`cert-file`],\n keyFile: program[`key-file`],\n directory: program.directory,\n })\n\n if (ssl) {\n program.ssl = ssl\n }\n }\n\n // NOTE(@mxstbr): We need to start the develop proxy before the develop process to ensure\n // codesandbox detects the right port to expose by default\n const proxy = startDevelopProxy({\n proxyPort: proxyPort,\n targetPort: developPort,\n program,\n })\n\n const developProcess = new ControllableScript(\n `\n const cmd = require(${JSON.stringify(developProcessPath)});\n const args = ${JSON.stringify({\n ...program,\n port: developPort,\n proxyPort,\n // Don't pass SSL options down to the develop process, it should always use HTTP\n ssl: null,\n debugInfo,\n })};\n cmd(args);\n `,\n debugInfo\n )\n\n const telemetryServerProcess = new ControllableScript(\n `require(${JSON.stringify(telemetryServerPath)}).default(${JSON.stringify(\n telemetryServerPort\n )})`,\n null\n )\n\n let unlocks: Array<UnlockFn | null> = []\n if (!isCI()) {\n const statusUnlock = await createServiceLock(\n program.directory,\n `developstatusserver`,\n {\n port: statusServerPort,\n }\n )\n const developUnlock = await createServiceLock(\n program.directory,\n `developproxy`,\n {\n port: proxyPort,\n }\n )\n const telemetryUnlock = await createServiceLock(\n program.directory,\n `telemetryserver`,\n {\n port: telemetryServerPort,\n }\n )\n await updateSiteMetadata({\n name: program.sitePackageJson.name,\n sitePath: program.directory,\n pid: process.pid,\n lastRun: Date.now(),\n })\n\n if (!statusUnlock || !developUnlock) {\n const data = await getService(program.directory, `developproxy`)\n const port = data?.port || 8000\n console.error(\n `Looks like develop for this site is already running, can you visit ${\n program.ssl ? `https:` : `http:`\n }//localhost:${port} ? If it is not, try again in five seconds!`\n )\n process.exit(1)\n }\n\n unlocks = unlocks.concat([statusUnlock, developUnlock, telemetryUnlock])\n }\n\n const statusServer = program.ssl\n ? https.createServer(program.ssl)\n : http.createServer()\n statusServer.listen(statusServerPort)\n\n const io = new SocketIO(statusServer, {\n // whitelist all (https://github.com/expressjs/cors#configuration-options)\n cors: {\n origin: true,\n },\n cookie: true,\n })\n\n const handleChildProcessIPC = (msg): void => {\n if (msg.type === `HEARTBEAT`) return\n if (process.send) {\n // Forward IPC\n process.send(msg)\n }\n\n io.emit(`structured-log`, msg)\n\n if (\n msg.type === `LOG_ACTION` &&\n msg.action.type === `SET_STATUS` &&\n msg.action.payload === `SUCCESS`\n ) {\n proxy.serveSite()\n }\n }\n\n io.on(`connection`, socket => {\n socket.on(`develop:restart`, async respond => {\n isRestarting = true\n proxy.serveRestartingScreen()\n // respond() responds to the client, which in our case prompts it to reload the page to show the restarting screen\n if (respond) respond(`develop:is-starting`)\n await developProcess.stop()\n developProcess.start()\n developProcess.onMessage(handleChildProcessIPC)\n isRestarting = false\n })\n })\n\n developProcess.start()\n developProcess.onMessage(handleChildProcessIPC)\n\n telemetryServerProcess.start()\n\n // Plugins can call `process.exit` which would be sent to `develop-process` (child process)\n // This needs to be propagated back to the parent process\n developProcess.onExit(\n (code: number | null, signal: NodeJS.Signals | null) => {\n try {\n telemetryFlush()\n } catch (e) {\n // nop\n }\n if (isRestarting) return\n if (signal !== null) {\n process.kill(process.pid, signal)\n return\n }\n if (code !== null) {\n process.exit(code)\n }\n\n // This should not happen:\n // https://nodejs.org/api/child_process.html#child_process_event_exit\n // The 'exit' event is emitted after the child process ends. If the process\n // exited, code is the final exit code of the process, otherwise null.\n // If the process terminated due to receipt of a signal, signal is the\n // string name of the signal, otherwise null. One of the two will always be\n // non - null.\n //\n // but just in case let do non-zero exit, because we are in situation\n // we don't expect to be possible\n process.exit(1)\n }\n )\n\n const files = [rootFile(`gatsby-config.js`), rootFile(`gatsby-node.js`)]\n let watcher: chokidar.FSWatcher\n\n if (!isCI()) {\n watcher = chokidar.watch(files).on(`change`, filePath => {\n const file = path.basename(filePath)\n\n if (file === `gatsby-config.js`) {\n const newConfig = requireUncached(rootFile(`gatsby-config.js`))\n\n if (!doesConfigChangeRequireRestart(lastConfig, newConfig)) {\n lastConfig = newConfig\n return\n }\n\n lastConfig = newConfig\n }\n\n console.warn(\n `develop process needs to be restarted to apply the changes to ${file}`\n )\n io.emit(`structured-log`, {\n type: `LOG_ACTION`,\n action: {\n type: `DEVELOP`,\n payload: `RESTART_REQUIRED`,\n dirtyFile: file,\n },\n })\n })\n }\n\n // route ipc messaging to the original develop process\n process.on(`message`, msg => {\n developProcess.send(msg)\n })\n\n process.on(`SIGINT`, async () => {\n await shutdownServices(\n {\n developProcess,\n telemetryServerProcess,\n unlocks,\n statusServer,\n proxy,\n watcher,\n },\n `SIGINT`\n )\n\n process.exit(0)\n })\n\n process.on(`SIGTERM`, async () => {\n await shutdownServices(\n {\n developProcess,\n telemetryServerProcess,\n unlocks,\n statusServer,\n proxy,\n watcher,\n },\n `SIGTERM`\n )\n\n process.exit(0)\n })\n\n onExit((_code, signal) => {\n shutdownServices(\n {\n developProcess,\n telemetryServerProcess,\n unlocks,\n statusServer,\n proxy,\n watcher,\n },\n signal as NodeJS.Signals\n )\n })\n}\n\ninterface IShutdownServicesOptions {\n statusServer: https.Server | http.Server\n developProcess: ControllableScript\n proxy: IProxyControls\n unlocks: Array<UnlockFn | null>\n watcher: chokidar.FSWatcher\n telemetryServerProcess: ControllableScript\n}\n\nfunction shutdownServices(\n {\n statusServer,\n developProcess,\n proxy,\n unlocks,\n watcher,\n telemetryServerProcess,\n }: IShutdownServicesOptions,\n signal: NodeJS.Signals\n): Promise<void> {\n try {\n telemetryFlush()\n } catch (e) {\n // nop\n }\n const services = [\n developProcess.stop(signal),\n telemetryServerProcess.stop(),\n watcher?.close(),\n new Promise(resolve => statusServer.close(resolve)),\n new Promise(resolve => proxy.server.close(resolve)),\n ]\n\n unlocks.forEach(unlock => {\n if (unlock) {\n services.push(unlock())\n }\n })\n\n return Promise.all(services)\n .catch(() => {})\n .then(() => {})\n}\n"],"file":"develop.js"}
1
+ {"version":3,"sources":["../../src/commands/develop.ts"],"names":["requireUncached","file","require","cache","resolve","e","doesConfigChangeRequireRestart","lastConfig","newConfig","replacer","_","v","RegExp","toString","oldConfigString","JSON","stringify","siteMetadata","newConfigString","getDebugPort","port","getDebugInfo","program","Object","prototype","hasOwnProperty","call","inspect","break","inspectBrk","ControllableScript","constructor","script","debugInfo","start","args","tmpFileName","tmp","tmpNameSync","tmpdir","path","join","process","cwd","fs","outputFileSync","isRunning","push","execa","node","env","stdio","stop","signal","code","Error","kill","send","type","action","payload","err","Promise","on","removeAllListeners","undefined","onMessage","callback","onExit","msg","isRestarting","REGEX_IP","module","exports","parseInt","developProcessPath","telemetryServerPath","message","exit","proxyPort","rootFile","directory","statusServerPort","developPort","telemetryServerPort","all","INTERNAL_STATUS_PORT","https","reporter","panic","sslHost","host","test","ssl","name","caFile","certFile","keyFile","proxy","targetPort","developProcess","telemetryServerProcess","unlocks","statusUnlock","developUnlock","telemetryUnlock","sitePackageJson","sitePath","pid","lastRun","Date","now","data","console","error","concat","statusServer","createServer","http","listen","io","SocketIO","cors","origin","cookie","handleChildProcessIPC","emit","serveSite","socket","respond","serveRestartingScreen","files","watcher","chokidar","watch","filePath","basename","warn","dirtyFile","shutdownServices","_code","services","close","server","forEach","unlock","catch","then"],"mappings":"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","sourcesContent":["// NOTE(@mxstbr): Do not use the reporter in this file, as that has side-effects on import which break structured logging\nimport path from \"path\"\nimport http from \"http\"\nimport https from \"https\"\nimport tmp from \"tmp\"\nimport { ChildProcess } from \"child_process\"\nimport execa from \"execa\"\nimport chokidar from \"chokidar\"\nimport getRandomPort from \"detect-port\"\nimport { detectPortInUseAndPrompt } from \"../utils/detect-port-in-use-and-prompt\"\nimport { Server as SocketIO } from \"socket.io\"\nimport fs from \"fs-extra\"\nimport onExit from \"signal-exit\"\nimport {\n isCI,\n slash,\n createServiceLock,\n getService,\n updateSiteMetadata,\n UnlockFn,\n} from \"gatsby-core-utils\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport { getSslCert } from \"../utils/get-ssl-cert\"\nimport { IProxyControls, startDevelopProxy } from \"../utils/develop-proxy\"\nimport { IProgram, IDebugInfo } from \"./types\"\nimport { flush as telemetryFlush } from \"gatsby-telemetry\"\n\n// Adapted from https://stackoverflow.com/a/16060619\nconst requireUncached = (file: string): any => {\n try {\n delete require.cache[require.resolve(file)]\n } catch (e) {\n return null\n }\n\n try {\n return require(file)\n } catch (e) {\n return null\n }\n}\n\n// Heuristics for gatsby-config.js, as not all changes to it require a full restart to take effect\nconst doesConfigChangeRequireRestart = (\n lastConfig: Record<string, any>,\n newConfig: Record<string, any>\n): boolean => {\n // Ignore changes to siteMetadata\n const replacer = (_, v): string | void => {\n if (typeof v === `function` || v instanceof RegExp) {\n return v.toString()\n } else {\n return v\n }\n }\n\n const oldConfigString = JSON.stringify(\n { ...lastConfig, siteMetadata: null },\n replacer\n )\n const newConfigString = JSON.stringify(\n { ...newConfig, siteMetadata: null },\n replacer\n )\n\n if (oldConfigString === newConfigString) return false\n\n return true\n}\n\n// Return a user-supplied port otherwise the default Node.js debugging port\nconst getDebugPort = (port?: number): number => port ?? 9229\n\nexport const getDebugInfo = (program: IProgram): IDebugInfo | null => {\n if (Object.prototype.hasOwnProperty.call(program, `inspect`)) {\n return {\n port: getDebugPort(program.inspect),\n break: false,\n }\n } else if (Object.prototype.hasOwnProperty.call(program, `inspectBrk`)) {\n return {\n port: getDebugPort(program.inspectBrk),\n break: true,\n }\n } else {\n return null\n }\n}\n\nclass ControllableScript {\n private process?: ChildProcess\n private script\n private debugInfo: IDebugInfo | null\n public isRunning\n constructor(script, debugInfo: IDebugInfo | null) {\n this.script = script\n this.debugInfo = debugInfo\n }\n start(): void {\n const args: Array<string> = []\n const tmpFileName = tmp.tmpNameSync({\n tmpdir: path.join(process.cwd(), `.cache`),\n })\n fs.outputFileSync(tmpFileName, this.script)\n this.isRunning = true\n // Passing --inspect isn't necessary for the child process to launch a port but it allows some editors to automatically attach\n if (this.debugInfo) {\n if (this.debugInfo.break) {\n args.push(`--inspect-brk=${this.debugInfo.port}`)\n } else {\n args.push(`--inspect=${this.debugInfo.port}`)\n }\n }\n\n this.process = execa.node(tmpFileName, args, {\n env: process.env,\n stdio: [`inherit`, `inherit`, `inherit`, `ipc`],\n })\n }\n async stop(\n signal: NodeJS.Signals | null = null,\n code?: number\n ): Promise<void> {\n if (!this.process) {\n throw new Error(`Trying to stop the process before starting it`)\n }\n\n this.isRunning = false\n try {\n if (signal) {\n this.process.kill(signal)\n } else {\n this.process.send(\n {\n type: `COMMAND`,\n action: {\n type: `EXIT`,\n payload: code,\n },\n },\n () => {\n // The try/catch won't suffice for this process.send\n // So use the callback to manually catch the Error, otherwise it'll be thrown\n // Ref: https://nodejs.org/api/child_process.html#child_process_subprocess_send_message_sendhandle_options_callback\n }\n )\n }\n } catch (err) {\n // Ignore error if process has crashed or already quit.\n // Ref: https://github.com/gatsbyjs/gatsby/issues/28011#issuecomment-877302917\n }\n\n return new Promise(resolve => {\n if (!this.process) {\n throw new Error(`Trying to stop the process before starting it`)\n }\n\n this.process.on(`exit`, () => {\n if (this.process) {\n this.process.removeAllListeners()\n }\n this.process = undefined\n resolve()\n })\n })\n }\n onMessage(callback: (msg: any) => void): void {\n if (!this.process) {\n throw new Error(`Trying to attach message handler before process started`)\n }\n this.process.on(`message`, callback)\n }\n onExit(\n callback: (code: number | null, signal: NodeJS.Signals | null) => void\n ): void {\n if (!this.process) {\n throw new Error(`Trying to attach exit handler before process started`)\n }\n this.process.on(`exit`, callback)\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n send(msg: any): void {\n if (!this.process) {\n throw new Error(`Trying to send a message before process started`)\n }\n\n this.process.send(msg)\n }\n}\n\nlet isRestarting\n\n// checks if a string is a valid ip\nconst REGEX_IP = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$/\n\nmodule.exports = async (program: IProgram): Promise<void> => {\n // In some cases, port can actually be a string. But our codebase is expecting it to be a number.\n // So we want to early just force it to a number to ensure we always act on a correct type.\n program.port = parseInt(program.port + ``, 10)\n const developProcessPath = slash(require.resolve(`./develop-process`))\n const telemetryServerPath = slash(\n require.resolve(`../utils/telemetry-server`)\n )\n\n try {\n program.port = await detectPortInUseAndPrompt(program.port)\n } catch (e) {\n if (e.message === `USER_REJECTED`) {\n process.exit(0)\n }\n\n throw e\n }\n\n // Run the actual develop server on a random port, and the proxy on the program port\n // which users will access\n const proxyPort = program.port\n const debugInfo = getDebugInfo(program)\n\n const rootFile = (file: string): string => path.join(program.directory, file)\n\n // Require gatsby-config.js before accessing process.env, to enable the user to change\n // environment variables from the config file.\n let lastConfig = requireUncached(rootFile(`gatsby-config.js`))\n\n // INTERNAL_STATUS_PORT allows for setting the websocket port used for monitoring\n // when the browser should prompt the user to restart the develop process.\n // This port is randomized by default and in most cases should never be required to configure.\n // It is exposed for environments where port access needs to be explicit, such as with Docker.\n // As the port is meant for internal usage only, any attempt to interface with features\n // it exposes via third-party software is not supported.\n const [\n statusServerPort,\n developPort,\n telemetryServerPort,\n ] = await Promise.all([\n getRandomPort(process.env.INTERNAL_STATUS_PORT),\n getRandomPort(),\n getRandomPort(),\n ])\n\n // In order to enable custom ssl, --cert-file --key-file and -https flags must all be\n // used together\n if ((program[`cert-file`] || program[`key-file`]) && !program.https) {\n reporter.panic(\n `for custom ssl --https, --cert-file, and --key-file must be used together`\n )\n }\n\n // Check if https is enabled, then create or get SSL cert.\n // Certs are named 'devcert' and issued to the host.\n // NOTE(@mxstbr): We mutate program.ssl _after_ passing it\n // to the develop process controllable script above because\n // that would mean we double SSL browser => proxy => server\n if (program.https) {\n const sslHost =\n program.host === `0.0.0.0` || program.host === `::`\n ? `localhost`\n : program.host\n\n if (REGEX_IP.test(sslHost)) {\n reporter.panic(\n `You're trying to generate a ssl certificate for an IP (${sslHost}). Please use a hostname instead.`\n )\n }\n\n const ssl = await getSslCert({\n name: sslHost,\n caFile: program[`ca-file`],\n certFile: program[`cert-file`],\n keyFile: program[`key-file`],\n directory: program.directory,\n })\n\n if (ssl) {\n program.ssl = ssl\n }\n }\n\n // NOTE(@mxstbr): We need to start the develop proxy before the develop process to ensure\n // codesandbox detects the right port to expose by default\n const proxy = startDevelopProxy({\n proxyPort: proxyPort,\n targetPort: developPort,\n program,\n })\n\n const developProcess = new ControllableScript(\n `\n const cmd = require(${JSON.stringify(developProcessPath)});\n const args = ${JSON.stringify({\n ...program,\n port: developPort,\n proxyPort,\n // Don't pass SSL options down to the develop process, it should always use HTTP\n ssl: null,\n debugInfo,\n })};\n cmd(args);\n `,\n debugInfo\n )\n\n const telemetryServerProcess = new ControllableScript(\n `require(${JSON.stringify(telemetryServerPath)}).default(${JSON.stringify(\n telemetryServerPort\n )})`,\n null\n )\n\n let unlocks: Array<UnlockFn | null> = []\n if (!isCI()) {\n const statusUnlock = await createServiceLock(\n program.directory,\n `developstatusserver`,\n {\n port: statusServerPort,\n }\n )\n const developUnlock = await createServiceLock(\n program.directory,\n `developproxy`,\n {\n port: proxyPort,\n }\n )\n const telemetryUnlock = await createServiceLock(\n program.directory,\n `telemetryserver`,\n {\n port: telemetryServerPort,\n }\n )\n await updateSiteMetadata({\n name: program.sitePackageJson.name,\n sitePath: program.directory,\n pid: process.pid,\n lastRun: Date.now(),\n })\n\n if (!statusUnlock || !developUnlock) {\n const data = await getService(program.directory, `developproxy`)\n const port = data?.port || 8000\n console.error(\n `Looks like develop for this site is already running, can you visit ${\n program.ssl ? `https:` : `http:`\n }//localhost:${port} ? If it is not, try again in five seconds!`\n )\n process.exit(1)\n }\n\n unlocks = unlocks.concat([statusUnlock, developUnlock, telemetryUnlock])\n }\n\n const statusServer = program.ssl\n ? https.createServer(program.ssl)\n : http.createServer()\n statusServer.listen(statusServerPort)\n\n const io = new SocketIO(statusServer, {\n // whitelist all (https://github.com/expressjs/cors#configuration-options)\n cors: {\n origin: true,\n },\n cookie: true,\n })\n\n const handleChildProcessIPC = (msg): void => {\n if (msg.type === `HEARTBEAT`) return\n if (process.send) {\n // Forward IPC\n process.send(msg)\n }\n\n io.emit(`structured-log`, msg)\n\n if (\n msg.type === `LOG_ACTION` &&\n msg.action.type === `SET_STATUS` &&\n msg.action.payload === `SUCCESS`\n ) {\n proxy.serveSite()\n }\n }\n\n io.on(`connection`, socket => {\n socket.on(`develop:restart`, async respond => {\n isRestarting = true\n proxy.serveRestartingScreen()\n // respond() responds to the client, which in our case prompts it to reload the page to show the restarting screen\n if (respond) respond(`develop:is-starting`)\n await developProcess.stop()\n developProcess.start()\n developProcess.onMessage(handleChildProcessIPC)\n isRestarting = false\n })\n })\n\n developProcess.start()\n developProcess.onMessage(handleChildProcessIPC)\n\n telemetryServerProcess.start()\n\n // Plugins can call `process.exit` which would be sent to `develop-process` (child process)\n // This needs to be propagated back to the parent process\n developProcess.onExit(\n (code: number | null, signal: NodeJS.Signals | null) => {\n try {\n telemetryFlush()\n } catch (e) {\n // nop\n }\n if (isRestarting) return\n if (signal !== null) {\n process.kill(process.pid, signal)\n return\n }\n if (code !== null) {\n process.exit(code)\n }\n\n // This should not happen:\n // https://nodejs.org/api/child_process.html#child_process_event_exit\n // The 'exit' event is emitted after the child process ends. If the process\n // exited, code is the final exit code of the process, otherwise null.\n // If the process terminated due to receipt of a signal, signal is the\n // string name of the signal, otherwise null. One of the two will always be\n // non - null.\n //\n // but just in case let do non-zero exit, because we are in situation\n // we don't expect to be possible\n process.exit(1)\n }\n )\n\n const files = [rootFile(`gatsby-config.js`), rootFile(`gatsby-node.js`)]\n let watcher: chokidar.FSWatcher\n\n if (!isCI()) {\n watcher = chokidar.watch(files).on(`change`, filePath => {\n const file = path.basename(filePath)\n\n if (file === `gatsby-config.js`) {\n const newConfig = requireUncached(rootFile(`gatsby-config.js`))\n\n if (!doesConfigChangeRequireRestart(lastConfig, newConfig)) {\n lastConfig = newConfig\n return\n }\n\n lastConfig = newConfig\n }\n\n console.warn(\n `develop process needs to be restarted to apply the changes to ${file}`\n )\n io.emit(`structured-log`, {\n type: `LOG_ACTION`,\n action: {\n type: `DEVELOP`,\n payload: `RESTART_REQUIRED`,\n dirtyFile: file,\n },\n })\n })\n }\n\n // route ipc messaging to the original develop process\n process.on(`message`, msg => {\n developProcess.send(msg)\n })\n\n process.on(`SIGINT`, async () => {\n await shutdownServices(\n {\n developProcess,\n telemetryServerProcess,\n unlocks,\n statusServer,\n proxy,\n watcher,\n },\n `SIGINT`\n )\n\n process.exit(0)\n })\n\n process.on(`SIGTERM`, async () => {\n await shutdownServices(\n {\n developProcess,\n telemetryServerProcess,\n unlocks,\n statusServer,\n proxy,\n watcher,\n },\n `SIGTERM`\n )\n\n process.exit(0)\n })\n\n onExit((_code, signal) => {\n shutdownServices(\n {\n developProcess,\n telemetryServerProcess,\n unlocks,\n statusServer,\n proxy,\n watcher,\n },\n signal as NodeJS.Signals\n )\n })\n}\n\ninterface IShutdownServicesOptions {\n statusServer: https.Server | http.Server\n developProcess: ControllableScript\n proxy: IProxyControls\n unlocks: Array<UnlockFn | null>\n watcher: chokidar.FSWatcher\n telemetryServerProcess: ControllableScript\n}\n\nfunction shutdownServices(\n {\n statusServer,\n developProcess,\n proxy,\n unlocks,\n watcher,\n telemetryServerProcess,\n }: IShutdownServicesOptions,\n signal: NodeJS.Signals\n): Promise<void> {\n try {\n telemetryFlush()\n } catch (e) {\n // nop\n }\n const services = [\n developProcess.stop(signal),\n telemetryServerProcess.stop(),\n watcher?.close(),\n new Promise(resolve => statusServer.close(resolve)),\n new Promise(resolve => proxy.server.close(resolve)),\n ]\n\n unlocks.forEach(unlock => {\n if (unlock) {\n services.push(unlock())\n }\n })\n\n return Promise.all(services)\n .catch(() => {})\n .then(() => {})\n}\n"],"file":"develop.js"}
@@ -20,7 +20,7 @@ class Dev404Page extends React.Component {
20
20
 
21
21
  this.state = {
22
22
  hasMounted: false,
23
- showCustom404: false,
23
+ showCustom404: process.env.GATSBY_DISABLE_CUSTOM_404 || false,
24
24
  initPagePaths: pagePaths,
25
25
  pagePathSearchTerms: initialPagePathSearchTerms,
26
26
  pagePaths: this.getFilteredPagePaths(