@openuiai/next 15.6.0-bun.17 → 15.6.0-bun.19

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.
@@ -43,6 +43,10 @@ export class Worker {
43
43
  }
44
44
  const createWorker = ()=>{
45
45
  var _farmOptions_forkOptions;
46
+ // Preload the require-hook to handle package name resolution for forked packages
47
+ const requireHookPath = require.resolve('../server/require-hook');
48
+ const formattedNodeOptions = formatNodeOptions(nodeOptions);
49
+ const nodeOptionsWithHook = formattedNodeOptions ? `${formattedNodeOptions} -r ${requireHookPath}` : `-r ${requireHookPath}`;
46
50
  this._worker = new JestWorker(workerPath, {
47
51
  ...farmOptions,
48
52
  forkOptions: {
@@ -51,7 +55,7 @@ export class Worker {
51
55
  ...process.env,
52
56
  ...((_farmOptions_forkOptions = farmOptions.forkOptions) == null ? void 0 : _farmOptions_forkOptions.env) || {},
53
57
  IS_NEXT_WORKER: 'true',
54
- NODE_OPTIONS: formatNodeOptions(nodeOptions)
58
+ NODE_OPTIONS: nodeOptionsWithHook
55
59
  }
56
60
  },
57
61
  maxRetries: 0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/worker.ts"],"sourcesContent":["import type { ForkHandle } from './process-adapter'\nimport { Worker as JestWorker } from 'next/dist/compiled/jest-worker'\nimport { Transform } from 'stream'\nimport {\n formatDebugAddress,\n formatNodeOptions,\n getNodeDebugType,\n getParsedDebugAddress,\n getParsedNodeOptionsWithoutInspect,\n} from '../server/lib/utils'\n\ntype FarmOptions = NonNullable<ConstructorParameters<typeof JestWorker>[1]>\n\nconst RESTARTED = Symbol('restarted')\n\nconst cleanupWorkers = (worker: JestWorker) => {\n for (const curWorker of ((worker as any)._workerPool?._workers || []) as {\n _child?: ForkHandle\n }[]) {\n curWorker._child?.kill('SIGINT')\n }\n}\n\nexport function getNextBuildDebuggerPortOffset(_: {\n kind: 'export-page'\n}): number {\n // 0: export worker\n return 0\n}\n\nexport class Worker {\n private _worker: JestWorker | undefined\n\n constructor(\n workerPath: string,\n options: Omit<FarmOptions, 'forkOptions'> & {\n forkOptions?:\n | (Omit<NonNullable<FarmOptions['forkOptions']>, 'env'> & {\n env?: Partial<NodeJS.ProcessEnv> | undefined\n })\n | undefined\n /**\n * `-1` if not inspectable\n */\n debuggerPortOffset: number\n enableSourceMaps?: boolean\n /**\n * True if `--max-old-space-size` should not be forwarded to the worker.\n */\n isolatedMemory: boolean\n timeout?: number\n onActivity?: () => void\n onActivityAbort?: () => void\n onRestart?: (method: string, args: any[], attempts: number) => void\n logger?: Pick<typeof console, 'error' | 'info' | 'warn'>\n exposedMethods: ReadonlyArray<string>\n enableWorkerThreads?: boolean\n }\n ) {\n let {\n enableSourceMaps,\n timeout,\n onRestart,\n logger = console,\n debuggerPortOffset,\n isolatedMemory,\n ...farmOptions\n } = options\n\n let restartPromise: Promise<typeof RESTARTED>\n let resolveRestartPromise: (arg: typeof RESTARTED) => void\n let activeTasks = 0\n\n this._worker = undefined\n\n // ensure we end workers if they weren't before exit\n process.on('exit', () => {\n this.close()\n })\n\n const nodeOptions = getParsedNodeOptionsWithoutInspect()\n\n if (debuggerPortOffset !== -1) {\n const nodeDebugType = getNodeDebugType()\n if (nodeDebugType) {\n const address = getParsedDebugAddress()\n address.port =\n address.port +\n // current process runs on `address.port`\n 1 +\n debuggerPortOffset\n nodeOptions[nodeDebugType] = formatDebugAddress(address)\n }\n }\n\n if (enableSourceMaps) {\n nodeOptions['enable-source-maps'] = true\n }\n\n if (isolatedMemory) {\n delete nodeOptions['max-old-space-size']\n delete nodeOptions['max_old_space_size']\n }\n\n const createWorker = () => {\n this._worker = new JestWorker(workerPath, {\n ...farmOptions,\n forkOptions: {\n ...farmOptions.forkOptions,\n env: {\n ...process.env,\n ...((farmOptions.forkOptions?.env || {}) as any),\n IS_NEXT_WORKER: 'true',\n NODE_OPTIONS: formatNodeOptions(nodeOptions),\n } as any,\n },\n maxRetries: 0,\n }) as JestWorker\n restartPromise = new Promise(\n (resolve) => (resolveRestartPromise = resolve)\n )\n\n /**\n * Jest Worker has two worker types, ChildProcessWorker (uses child_process) and NodeThreadWorker (uses worker_threads)\n * Next.js uses ChildProcessWorker by default, but it can be switched to NodeThreadWorker with an experimental flag\n *\n * We only want to handle ChildProcessWorker's orphan process issue, so we access the private property \"_child\":\n * https://github.com/facebook/jest/blob/b38d7d345a81d97d1dc3b68b8458b1837fbf19be/packages/jest-worker/src/workers/ChildProcessWorker.ts\n *\n * But this property is not available in NodeThreadWorker, so we need to check if we are using ChildProcessWorker\n */\n if (!farmOptions.enableWorkerThreads) {\n for (const worker of ((this._worker as any)._workerPool?._workers ||\n []) as {\n _child?: ForkHandle\n }[]) {\n worker._child?.on('exit', (code, signal) => {\n if ((code || (signal && signal !== 'SIGINT')) && this._worker) {\n logger.error(\n `Next.js build worker exited with code: ${code} and signal: ${signal}`\n )\n\n // if a child process doesn't exit gracefully, we want to bubble up the exit code to the parent process\n process.exit(code ?? 1)\n }\n })\n\n // if a child process emits a particular message, we track that as activity\n // so the parent process can keep track of progress\n worker._child?.on('message', ([, data]: [number, unknown]) => {\n if (\n data &&\n typeof data === 'object' &&\n 'type' in data &&\n data.type === 'activity'\n ) {\n onActivity()\n }\n })\n }\n }\n\n let aborted = false\n const onActivityAbort = () => {\n if (!aborted) {\n options.onActivityAbort?.()\n aborted = true\n }\n }\n\n // Listen to the worker's stdout and stderr, if there's any thing logged, abort the activity first\n const abortActivityStreamOnLog = new Transform({\n transform(_chunk, _encoding, callback) {\n onActivityAbort()\n callback()\n },\n })\n // Stop the activity if there's any output from the worker\n this._worker.getStdout().pipe(abortActivityStreamOnLog)\n this._worker.getStderr().pipe(abortActivityStreamOnLog)\n\n // Pipe the worker's stdout and stderr to the parent process\n this._worker.getStdout().pipe(process.stdout)\n this._worker.getStderr().pipe(process.stderr)\n }\n createWorker()\n\n const onHanging = () => {\n const worker = this._worker\n if (!worker) return\n const resolve = resolveRestartPromise\n createWorker()\n logger.warn(\n `Sending SIGTERM signal to static worker due to timeout${\n timeout ? ` of ${timeout / 1000} seconds` : ''\n }. Subsequent errors may be a result of the worker exiting.`\n )\n worker.end().then(() => {\n resolve(RESTARTED)\n })\n }\n\n let hangingTimer: NodeJS.Timeout | false = false\n\n const onActivity = () => {\n if (hangingTimer) clearTimeout(hangingTimer)\n if (options.onActivity) options.onActivity()\n\n hangingTimer = activeTasks > 0 && setTimeout(onHanging, timeout)\n }\n\n for (const method of farmOptions.exposedMethods) {\n if (method.startsWith('_')) continue\n ;(this as any)[method] = timeout\n ? // eslint-disable-next-line no-loop-func\n async (...args: any[]) => {\n activeTasks++\n try {\n let attempts = 0\n for (;;) {\n onActivity()\n const result = await Promise.race([\n (this._worker as any)[method](...args),\n restartPromise,\n ])\n if (result !== RESTARTED) return result\n if (onRestart) onRestart(method, args, ++attempts)\n }\n } finally {\n activeTasks--\n onActivity()\n }\n }\n : (this._worker as any)[method].bind(this._worker)\n }\n }\n\n end(): ReturnType<JestWorker['end']> {\n const worker = this._worker\n if (!worker) {\n throw new Error('Farm is ended, no more calls can be done to it')\n }\n cleanupWorkers(worker)\n this._worker = undefined\n return worker.end()\n }\n\n /**\n * Quietly end the worker if it exists\n */\n close(): void {\n if (this._worker) {\n cleanupWorkers(this._worker)\n this._worker.end()\n }\n }\n}\n"],"names":["Worker","JestWorker","Transform","formatDebugAddress","formatNodeOptions","getNodeDebugType","getParsedDebugAddress","getParsedNodeOptionsWithoutInspect","RESTARTED","Symbol","cleanupWorkers","worker","curWorker","_workerPool","_workers","_child","kill","getNextBuildDebuggerPortOffset","_","constructor","workerPath","options","enableSourceMaps","timeout","onRestart","logger","console","debuggerPortOffset","isolatedMemory","farmOptions","restartPromise","resolveRestartPromise","activeTasks","_worker","undefined","process","on","close","nodeOptions","nodeDebugType","address","port","createWorker","forkOptions","env","IS_NEXT_WORKER","NODE_OPTIONS","maxRetries","Promise","resolve","enableWorkerThreads","code","signal","error","exit","data","type","onActivity","aborted","onActivityAbort","abortActivityStreamOnLog","transform","_chunk","_encoding","callback","getStdout","pipe","getStderr","stdout","stderr","onHanging","warn","end","then","hangingTimer","clearTimeout","setTimeout","method","exposedMethods","startsWith","args","attempts","result","race","bind","Error"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../src/lib/worker.ts"],"sourcesContent":["import type { ForkHandle } from './process-adapter'\nimport { Worker as JestWorker } from 'next/dist/compiled/jest-worker'\nimport { Transform } from 'stream'\nimport {\n formatDebugAddress,\n formatNodeOptions,\n getNodeDebugType,\n getParsedDebugAddress,\n getParsedNodeOptionsWithoutInspect,\n} from '../server/lib/utils'\n\ntype FarmOptions = NonNullable<ConstructorParameters<typeof JestWorker>[1]>\n\nconst RESTARTED = Symbol('restarted')\n\nconst cleanupWorkers = (worker: JestWorker) => {\n for (const curWorker of ((worker as any)._workerPool?._workers || []) as {\n _child?: ForkHandle\n }[]) {\n curWorker._child?.kill('SIGINT')\n }\n}\n\nexport function getNextBuildDebuggerPortOffset(_: {\n kind: 'export-page'\n}): number {\n // 0: export worker\n return 0\n}\n\nexport class Worker {\n private _worker: JestWorker | undefined\n\n constructor(\n workerPath: string,\n options: Omit<FarmOptions, 'forkOptions'> & {\n forkOptions?:\n | (Omit<NonNullable<FarmOptions['forkOptions']>, 'env'> & {\n env?: Partial<NodeJS.ProcessEnv> | undefined\n })\n | undefined\n /**\n * `-1` if not inspectable\n */\n debuggerPortOffset: number\n enableSourceMaps?: boolean\n /**\n * True if `--max-old-space-size` should not be forwarded to the worker.\n */\n isolatedMemory: boolean\n timeout?: number\n onActivity?: () => void\n onActivityAbort?: () => void\n onRestart?: (method: string, args: any[], attempts: number) => void\n logger?: Pick<typeof console, 'error' | 'info' | 'warn'>\n exposedMethods: ReadonlyArray<string>\n enableWorkerThreads?: boolean\n }\n ) {\n let {\n enableSourceMaps,\n timeout,\n onRestart,\n logger = console,\n debuggerPortOffset,\n isolatedMemory,\n ...farmOptions\n } = options\n\n let restartPromise: Promise<typeof RESTARTED>\n let resolveRestartPromise: (arg: typeof RESTARTED) => void\n let activeTasks = 0\n\n this._worker = undefined\n\n // ensure we end workers if they weren't before exit\n process.on('exit', () => {\n this.close()\n })\n\n const nodeOptions = getParsedNodeOptionsWithoutInspect()\n\n if (debuggerPortOffset !== -1) {\n const nodeDebugType = getNodeDebugType()\n if (nodeDebugType) {\n const address = getParsedDebugAddress()\n address.port =\n address.port +\n // current process runs on `address.port`\n 1 +\n debuggerPortOffset\n nodeOptions[nodeDebugType] = formatDebugAddress(address)\n }\n }\n\n if (enableSourceMaps) {\n nodeOptions['enable-source-maps'] = true\n }\n\n if (isolatedMemory) {\n delete nodeOptions['max-old-space-size']\n delete nodeOptions['max_old_space_size']\n }\n\n const createWorker = () => {\n // Preload the require-hook to handle package name resolution for forked packages\n const requireHookPath = require.resolve('../server/require-hook')\n const formattedNodeOptions = formatNodeOptions(nodeOptions)\n const nodeOptionsWithHook = formattedNodeOptions\n ? `${formattedNodeOptions} -r ${requireHookPath}`\n : `-r ${requireHookPath}`\n\n this._worker = new JestWorker(workerPath, {\n ...farmOptions,\n forkOptions: {\n ...farmOptions.forkOptions,\n env: {\n ...process.env,\n ...((farmOptions.forkOptions?.env || {}) as any),\n IS_NEXT_WORKER: 'true',\n NODE_OPTIONS: nodeOptionsWithHook,\n } as any,\n },\n maxRetries: 0,\n }) as JestWorker\n restartPromise = new Promise(\n (resolve) => (resolveRestartPromise = resolve)\n )\n\n /**\n * Jest Worker has two worker types, ChildProcessWorker (uses child_process) and NodeThreadWorker (uses worker_threads)\n * Next.js uses ChildProcessWorker by default, but it can be switched to NodeThreadWorker with an experimental flag\n *\n * We only want to handle ChildProcessWorker's orphan process issue, so we access the private property \"_child\":\n * https://github.com/facebook/jest/blob/b38d7d345a81d97d1dc3b68b8458b1837fbf19be/packages/jest-worker/src/workers/ChildProcessWorker.ts\n *\n * But this property is not available in NodeThreadWorker, so we need to check if we are using ChildProcessWorker\n */\n if (!farmOptions.enableWorkerThreads) {\n for (const worker of ((this._worker as any)._workerPool?._workers ||\n []) as {\n _child?: ForkHandle\n }[]) {\n worker._child?.on('exit', (code, signal) => {\n if ((code || (signal && signal !== 'SIGINT')) && this._worker) {\n logger.error(\n `Next.js build worker exited with code: ${code} and signal: ${signal}`\n )\n\n // if a child process doesn't exit gracefully, we want to bubble up the exit code to the parent process\n process.exit(code ?? 1)\n }\n })\n\n // if a child process emits a particular message, we track that as activity\n // so the parent process can keep track of progress\n worker._child?.on('message', ([, data]: [number, unknown]) => {\n if (\n data &&\n typeof data === 'object' &&\n 'type' in data &&\n data.type === 'activity'\n ) {\n onActivity()\n }\n })\n }\n }\n\n let aborted = false\n const onActivityAbort = () => {\n if (!aborted) {\n options.onActivityAbort?.()\n aborted = true\n }\n }\n\n // Listen to the worker's stdout and stderr, if there's any thing logged, abort the activity first\n const abortActivityStreamOnLog = new Transform({\n transform(_chunk, _encoding, callback) {\n onActivityAbort()\n callback()\n },\n })\n // Stop the activity if there's any output from the worker\n this._worker.getStdout().pipe(abortActivityStreamOnLog)\n this._worker.getStderr().pipe(abortActivityStreamOnLog)\n\n // Pipe the worker's stdout and stderr to the parent process\n this._worker.getStdout().pipe(process.stdout)\n this._worker.getStderr().pipe(process.stderr)\n }\n createWorker()\n\n const onHanging = () => {\n const worker = this._worker\n if (!worker) return\n const resolve = resolveRestartPromise\n createWorker()\n logger.warn(\n `Sending SIGTERM signal to static worker due to timeout${\n timeout ? ` of ${timeout / 1000} seconds` : ''\n }. Subsequent errors may be a result of the worker exiting.`\n )\n worker.end().then(() => {\n resolve(RESTARTED)\n })\n }\n\n let hangingTimer: NodeJS.Timeout | false = false\n\n const onActivity = () => {\n if (hangingTimer) clearTimeout(hangingTimer)\n if (options.onActivity) options.onActivity()\n\n hangingTimer = activeTasks > 0 && setTimeout(onHanging, timeout)\n }\n\n for (const method of farmOptions.exposedMethods) {\n if (method.startsWith('_')) continue\n ;(this as any)[method] = timeout\n ? // eslint-disable-next-line no-loop-func\n async (...args: any[]) => {\n activeTasks++\n try {\n let attempts = 0\n for (;;) {\n onActivity()\n const result = await Promise.race([\n (this._worker as any)[method](...args),\n restartPromise,\n ])\n if (result !== RESTARTED) return result\n if (onRestart) onRestart(method, args, ++attempts)\n }\n } finally {\n activeTasks--\n onActivity()\n }\n }\n : (this._worker as any)[method].bind(this._worker)\n }\n }\n\n end(): ReturnType<JestWorker['end']> {\n const worker = this._worker\n if (!worker) {\n throw new Error('Farm is ended, no more calls can be done to it')\n }\n cleanupWorkers(worker)\n this._worker = undefined\n return worker.end()\n }\n\n /**\n * Quietly end the worker if it exists\n */\n close(): void {\n if (this._worker) {\n cleanupWorkers(this._worker)\n this._worker.end()\n }\n }\n}\n"],"names":["Worker","JestWorker","Transform","formatDebugAddress","formatNodeOptions","getNodeDebugType","getParsedDebugAddress","getParsedNodeOptionsWithoutInspect","RESTARTED","Symbol","cleanupWorkers","worker","curWorker","_workerPool","_workers","_child","kill","getNextBuildDebuggerPortOffset","_","constructor","workerPath","options","enableSourceMaps","timeout","onRestart","logger","console","debuggerPortOffset","isolatedMemory","farmOptions","restartPromise","resolveRestartPromise","activeTasks","_worker","undefined","process","on","close","nodeOptions","nodeDebugType","address","port","createWorker","requireHookPath","require","resolve","formattedNodeOptions","nodeOptionsWithHook","forkOptions","env","IS_NEXT_WORKER","NODE_OPTIONS","maxRetries","Promise","enableWorkerThreads","code","signal","error","exit","data","type","onActivity","aborted","onActivityAbort","abortActivityStreamOnLog","transform","_chunk","_encoding","callback","getStdout","pipe","getStderr","stdout","stderr","onHanging","warn","end","then","hangingTimer","clearTimeout","setTimeout","method","exposedMethods","startsWith","args","attempts","result","race","bind","Error"],"mappings":"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","ignoreList":[0]}
@@ -65,6 +65,10 @@ class Worker {
65
65
  }
66
66
  const createWorker = ()=>{
67
67
  var _farmOptions_forkOptions;
68
+ // Preload the require-hook to handle package name resolution for forked packages
69
+ const requireHookPath = require.resolve('../server/require-hook');
70
+ const formattedNodeOptions = (0, _utils.formatNodeOptions)(nodeOptions);
71
+ const nodeOptionsWithHook = formattedNodeOptions ? `${formattedNodeOptions} -r ${requireHookPath}` : `-r ${requireHookPath}`;
68
72
  this._worker = new _jestworker.Worker(workerPath, {
69
73
  ...farmOptions,
70
74
  forkOptions: {
@@ -73,7 +77,7 @@ class Worker {
73
77
  ...process.env,
74
78
  ...((_farmOptions_forkOptions = farmOptions.forkOptions) == null ? void 0 : _farmOptions_forkOptions.env) || {},
75
79
  IS_NEXT_WORKER: 'true',
76
- NODE_OPTIONS: (0, _utils.formatNodeOptions)(nodeOptions)
80
+ NODE_OPTIONS: nodeOptionsWithHook
77
81
  }
78
82
  },
79
83
  maxRetries: 0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/worker.ts"],"sourcesContent":["import type { ForkHandle } from './process-adapter'\nimport { Worker as JestWorker } from 'next/dist/compiled/jest-worker'\nimport { Transform } from 'stream'\nimport {\n formatDebugAddress,\n formatNodeOptions,\n getNodeDebugType,\n getParsedDebugAddress,\n getParsedNodeOptionsWithoutInspect,\n} from '../server/lib/utils'\n\ntype FarmOptions = NonNullable<ConstructorParameters<typeof JestWorker>[1]>\n\nconst RESTARTED = Symbol('restarted')\n\nconst cleanupWorkers = (worker: JestWorker) => {\n for (const curWorker of ((worker as any)._workerPool?._workers || []) as {\n _child?: ForkHandle\n }[]) {\n curWorker._child?.kill('SIGINT')\n }\n}\n\nexport function getNextBuildDebuggerPortOffset(_: {\n kind: 'export-page'\n}): number {\n // 0: export worker\n return 0\n}\n\nexport class Worker {\n private _worker: JestWorker | undefined\n\n constructor(\n workerPath: string,\n options: Omit<FarmOptions, 'forkOptions'> & {\n forkOptions?:\n | (Omit<NonNullable<FarmOptions['forkOptions']>, 'env'> & {\n env?: Partial<NodeJS.ProcessEnv> | undefined\n })\n | undefined\n /**\n * `-1` if not inspectable\n */\n debuggerPortOffset: number\n enableSourceMaps?: boolean\n /**\n * True if `--max-old-space-size` should not be forwarded to the worker.\n */\n isolatedMemory: boolean\n timeout?: number\n onActivity?: () => void\n onActivityAbort?: () => void\n onRestart?: (method: string, args: any[], attempts: number) => void\n logger?: Pick<typeof console, 'error' | 'info' | 'warn'>\n exposedMethods: ReadonlyArray<string>\n enableWorkerThreads?: boolean\n }\n ) {\n let {\n enableSourceMaps,\n timeout,\n onRestart,\n logger = console,\n debuggerPortOffset,\n isolatedMemory,\n ...farmOptions\n } = options\n\n let restartPromise: Promise<typeof RESTARTED>\n let resolveRestartPromise: (arg: typeof RESTARTED) => void\n let activeTasks = 0\n\n this._worker = undefined\n\n // ensure we end workers if they weren't before exit\n process.on('exit', () => {\n this.close()\n })\n\n const nodeOptions = getParsedNodeOptionsWithoutInspect()\n\n if (debuggerPortOffset !== -1) {\n const nodeDebugType = getNodeDebugType()\n if (nodeDebugType) {\n const address = getParsedDebugAddress()\n address.port =\n address.port +\n // current process runs on `address.port`\n 1 +\n debuggerPortOffset\n nodeOptions[nodeDebugType] = formatDebugAddress(address)\n }\n }\n\n if (enableSourceMaps) {\n nodeOptions['enable-source-maps'] = true\n }\n\n if (isolatedMemory) {\n delete nodeOptions['max-old-space-size']\n delete nodeOptions['max_old_space_size']\n }\n\n const createWorker = () => {\n this._worker = new JestWorker(workerPath, {\n ...farmOptions,\n forkOptions: {\n ...farmOptions.forkOptions,\n env: {\n ...process.env,\n ...((farmOptions.forkOptions?.env || {}) as any),\n IS_NEXT_WORKER: 'true',\n NODE_OPTIONS: formatNodeOptions(nodeOptions),\n } as any,\n },\n maxRetries: 0,\n }) as JestWorker\n restartPromise = new Promise(\n (resolve) => (resolveRestartPromise = resolve)\n )\n\n /**\n * Jest Worker has two worker types, ChildProcessWorker (uses child_process) and NodeThreadWorker (uses worker_threads)\n * Next.js uses ChildProcessWorker by default, but it can be switched to NodeThreadWorker with an experimental flag\n *\n * We only want to handle ChildProcessWorker's orphan process issue, so we access the private property \"_child\":\n * https://github.com/facebook/jest/blob/b38d7d345a81d97d1dc3b68b8458b1837fbf19be/packages/jest-worker/src/workers/ChildProcessWorker.ts\n *\n * But this property is not available in NodeThreadWorker, so we need to check if we are using ChildProcessWorker\n */\n if (!farmOptions.enableWorkerThreads) {\n for (const worker of ((this._worker as any)._workerPool?._workers ||\n []) as {\n _child?: ForkHandle\n }[]) {\n worker._child?.on('exit', (code, signal) => {\n if ((code || (signal && signal !== 'SIGINT')) && this._worker) {\n logger.error(\n `Next.js build worker exited with code: ${code} and signal: ${signal}`\n )\n\n // if a child process doesn't exit gracefully, we want to bubble up the exit code to the parent process\n process.exit(code ?? 1)\n }\n })\n\n // if a child process emits a particular message, we track that as activity\n // so the parent process can keep track of progress\n worker._child?.on('message', ([, data]: [number, unknown]) => {\n if (\n data &&\n typeof data === 'object' &&\n 'type' in data &&\n data.type === 'activity'\n ) {\n onActivity()\n }\n })\n }\n }\n\n let aborted = false\n const onActivityAbort = () => {\n if (!aborted) {\n options.onActivityAbort?.()\n aborted = true\n }\n }\n\n // Listen to the worker's stdout and stderr, if there's any thing logged, abort the activity first\n const abortActivityStreamOnLog = new Transform({\n transform(_chunk, _encoding, callback) {\n onActivityAbort()\n callback()\n },\n })\n // Stop the activity if there's any output from the worker\n this._worker.getStdout().pipe(abortActivityStreamOnLog)\n this._worker.getStderr().pipe(abortActivityStreamOnLog)\n\n // Pipe the worker's stdout and stderr to the parent process\n this._worker.getStdout().pipe(process.stdout)\n this._worker.getStderr().pipe(process.stderr)\n }\n createWorker()\n\n const onHanging = () => {\n const worker = this._worker\n if (!worker) return\n const resolve = resolveRestartPromise\n createWorker()\n logger.warn(\n `Sending SIGTERM signal to static worker due to timeout${\n timeout ? ` of ${timeout / 1000} seconds` : ''\n }. Subsequent errors may be a result of the worker exiting.`\n )\n worker.end().then(() => {\n resolve(RESTARTED)\n })\n }\n\n let hangingTimer: NodeJS.Timeout | false = false\n\n const onActivity = () => {\n if (hangingTimer) clearTimeout(hangingTimer)\n if (options.onActivity) options.onActivity()\n\n hangingTimer = activeTasks > 0 && setTimeout(onHanging, timeout)\n }\n\n for (const method of farmOptions.exposedMethods) {\n if (method.startsWith('_')) continue\n ;(this as any)[method] = timeout\n ? // eslint-disable-next-line no-loop-func\n async (...args: any[]) => {\n activeTasks++\n try {\n let attempts = 0\n for (;;) {\n onActivity()\n const result = await Promise.race([\n (this._worker as any)[method](...args),\n restartPromise,\n ])\n if (result !== RESTARTED) return result\n if (onRestart) onRestart(method, args, ++attempts)\n }\n } finally {\n activeTasks--\n onActivity()\n }\n }\n : (this._worker as any)[method].bind(this._worker)\n }\n }\n\n end(): ReturnType<JestWorker['end']> {\n const worker = this._worker\n if (!worker) {\n throw new Error('Farm is ended, no more calls can be done to it')\n }\n cleanupWorkers(worker)\n this._worker = undefined\n return worker.end()\n }\n\n /**\n * Quietly end the worker if it exists\n */\n close(): void {\n if (this._worker) {\n cleanupWorkers(this._worker)\n this._worker.end()\n }\n }\n}\n"],"names":["Worker","getNextBuildDebuggerPortOffset","RESTARTED","Symbol","cleanupWorkers","worker","curWorker","_workerPool","_workers","_child","kill","_","constructor","workerPath","options","enableSourceMaps","timeout","onRestart","logger","console","debuggerPortOffset","isolatedMemory","farmOptions","restartPromise","resolveRestartPromise","activeTasks","_worker","undefined","process","on","close","nodeOptions","getParsedNodeOptionsWithoutInspect","nodeDebugType","getNodeDebugType","address","getParsedDebugAddress","port","formatDebugAddress","createWorker","JestWorker","forkOptions","env","IS_NEXT_WORKER","NODE_OPTIONS","formatNodeOptions","maxRetries","Promise","resolve","enableWorkerThreads","code","signal","error","exit","data","type","onActivity","aborted","onActivityAbort","abortActivityStreamOnLog","Transform","transform","_chunk","_encoding","callback","getStdout","pipe","getStderr","stdout","stderr","onHanging","warn","end","then","hangingTimer","clearTimeout","setTimeout","method","exposedMethods","startsWith","args","attempts","result","race","bind","Error"],"mappings":";;;;;;;;;;;;;;;IA8BaA,MAAM;eAANA;;IAPGC,8BAA8B;eAA9BA;;;4BAtBqB;wBACX;uBAOnB;AAIP,MAAMC,YAAYC,OAAO;AAEzB,MAAMC,iBAAiB,CAACC;QACG;IAAzB,KAAK,MAAMC,aAAc,EAAA,sBAAA,AAACD,OAAeE,WAAW,qBAA3B,oBAA6BC,QAAQ,KAAI,EAAE,CAE/D;YACHF;SAAAA,oBAAAA,UAAUG,MAAM,qBAAhBH,kBAAkBI,IAAI,CAAC;IACzB;AACF;AAEO,SAAST,+BAA+BU,CAE9C;IACC,mBAAmB;IACnB,OAAO;AACT;AAEO,MAAMX;IAGXY,YACEC,UAAkB,EAClBC,OAsBC,CACD;QACA,IAAI,EACFC,gBAAgB,EAChBC,OAAO,EACPC,SAAS,EACTC,SAASC,OAAO,EAChBC,kBAAkB,EAClBC,cAAc,EACd,GAAGC,aACJ,GAAGR;QAEJ,IAAIS;QACJ,IAAIC;QACJ,IAAIC,cAAc;QAElB,IAAI,CAACC,OAAO,GAAGC;QAEf,oDAAoD;QACpDC,QAAQC,EAAE,CAAC,QAAQ;YACjB,IAAI,CAACC,KAAK;QACZ;QAEA,MAAMC,cAAcC,IAAAA,yCAAkC;QAEtD,IAAIZ,uBAAuB,CAAC,GAAG;YAC7B,MAAMa,gBAAgBC,IAAAA,uBAAgB;YACtC,IAAID,eAAe;gBACjB,MAAME,UAAUC,IAAAA,4BAAqB;gBACrCD,QAAQE,IAAI,GACVF,QAAQE,IAAI,GACZ,yCAAyC;gBACzC,IACAjB;gBACFW,WAAW,CAACE,cAAc,GAAGK,IAAAA,yBAAkB,EAACH;YAClD;QACF;QAEA,IAAIpB,kBAAkB;YACpBgB,WAAW,CAAC,qBAAqB,GAAG;QACtC;QAEA,IAAIV,gBAAgB;YAClB,OAAOU,WAAW,CAAC,qBAAqB;YACxC,OAAOA,WAAW,CAAC,qBAAqB;QAC1C;QAEA,MAAMQ,eAAe;gBAORjB;YANX,IAAI,CAACI,OAAO,GAAG,IAAIc,kBAAU,CAAC3B,YAAY;gBACxC,GAAGS,WAAW;gBACdmB,aAAa;oBACX,GAAGnB,YAAYmB,WAAW;oBAC1BC,KAAK;wBACH,GAAGd,QAAQc,GAAG;wBACd,GAAKpB,EAAAA,2BAAAA,YAAYmB,WAAW,qBAAvBnB,yBAAyBoB,GAAG,KAAI,CAAC,CAAC;wBACvCC,gBAAgB;wBAChBC,cAAcC,IAAAA,wBAAiB,EAACd;oBAClC;gBACF;gBACAe,YAAY;YACd;YACAvB,iBAAiB,IAAIwB,QACnB,CAACC,UAAaxB,wBAAwBwB;YAGxC;;;;;;;;OAQC,GACD,IAAI,CAAC1B,YAAY2B,mBAAmB,EAAE;oBACd;gBAAtB,KAAK,MAAM5C,UAAW,EAAA,4BAAA,AAAC,IAAI,CAACqB,OAAO,CAASnB,WAAW,qBAAjC,0BAAmCC,QAAQ,KAC/D,EAAE,CAEC;wBACHH,gBAWA,2EAA2E;oBAC3E,mDAAmD;oBACnDA;qBAbAA,iBAAAA,OAAOI,MAAM,qBAAbJ,eAAewB,EAAE,CAAC,QAAQ,CAACqB,MAAMC;wBAC/B,IAAI,AAACD,CAAAA,QAASC,UAAUA,WAAW,QAAQ,KAAM,IAAI,CAACzB,OAAO,EAAE;4BAC7DR,OAAOkC,KAAK,CACV,CAAC,uCAAuC,EAAEF,KAAK,aAAa,EAAEC,QAAQ;4BAGxE,uGAAuG;4BACvGvB,QAAQyB,IAAI,CAACH,QAAQ;wBACvB;oBACF;qBAIA7C,kBAAAA,OAAOI,MAAM,qBAAbJ,gBAAewB,EAAE,CAAC,WAAW,CAAC,GAAGyB,KAAwB;wBACvD,IACEA,QACA,OAAOA,SAAS,YAChB,UAAUA,QACVA,KAAKC,IAAI,KAAK,YACd;4BACAC;wBACF;oBACF;gBACF;YACF;YAEA,IAAIC,UAAU;YACd,MAAMC,kBAAkB;gBACtB,IAAI,CAACD,SAAS;oBACZ3C,QAAQ4C,eAAe,oBAAvB5C,QAAQ4C,eAAe,MAAvB5C;oBACA2C,UAAU;gBACZ;YACF;YAEA,kGAAkG;YAClG,MAAME,2BAA2B,IAAIC,iBAAS,CAAC;gBAC7CC,WAAUC,MAAM,EAAEC,SAAS,EAAEC,QAAQ;oBACnCN;oBACAM;gBACF;YACF;YACA,0DAA0D;YAC1D,IAAI,CAACtC,OAAO,CAACuC,SAAS,GAAGC,IAAI,CAACP;YAC9B,IAAI,CAACjC,OAAO,CAACyC,SAAS,GAAGD,IAAI,CAACP;YAE9B,4DAA4D;YAC5D,IAAI,CAACjC,OAAO,CAACuC,SAAS,GAAGC,IAAI,CAACtC,QAAQwC,MAAM;YAC5C,IAAI,CAAC1C,OAAO,CAACyC,SAAS,GAAGD,IAAI,CAACtC,QAAQyC,MAAM;QAC9C;QACA9B;QAEA,MAAM+B,YAAY;YAChB,MAAMjE,SAAS,IAAI,CAACqB,OAAO;YAC3B,IAAI,CAACrB,QAAQ;YACb,MAAM2C,UAAUxB;YAChBe;YACArB,OAAOqD,IAAI,CACT,CAAC,sDAAsD,EACrDvD,UAAU,CAAC,IAAI,EAAEA,UAAU,KAAK,QAAQ,CAAC,GAAG,GAC7C,0DAA0D,CAAC;YAE9DX,OAAOmE,GAAG,GAAGC,IAAI,CAAC;gBAChBzB,QAAQ9C;YACV;QACF;QAEA,IAAIwE,eAAuC;QAE3C,MAAMlB,aAAa;YACjB,IAAIkB,cAAcC,aAAaD;YAC/B,IAAI5D,QAAQ0C,UAAU,EAAE1C,QAAQ0C,UAAU;YAE1CkB,eAAejD,cAAc,KAAKmD,WAAWN,WAAWtD;QAC1D;QAEA,KAAK,MAAM6D,UAAUvD,YAAYwD,cAAc,CAAE;YAC/C,IAAID,OAAOE,UAAU,CAAC,MAAM;YAC3B,AAAC,IAAI,AAAQ,CAACF,OAAO,GAAG7D,UAErB,OAAO,GAAGgE;gBACRvD;gBACA,IAAI;oBACF,IAAIwD,WAAW;oBACf,OAAS;wBACPzB;wBACA,MAAM0B,SAAS,MAAMnC,QAAQoC,IAAI,CAAC;4BAC/B,IAAI,CAACzD,OAAO,AAAQ,CAACmD,OAAO,IAAIG;4BACjCzD;yBACD;wBACD,IAAI2D,WAAWhF,WAAW,OAAOgF;wBACjC,IAAIjE,WAAWA,UAAU4D,QAAQG,MAAM,EAAEC;oBAC3C;gBACF,SAAU;oBACRxD;oBACA+B;gBACF;YACF,IACA,AAAC,IAAI,CAAC9B,OAAO,AAAQ,CAACmD,OAAO,CAACO,IAAI,CAAC,IAAI,CAAC1D,OAAO;QACrD;IACF;IAEA8C,MAAqC;QACnC,MAAMnE,SAAS,IAAI,CAACqB,OAAO;QAC3B,IAAI,CAACrB,QAAQ;YACX,MAAM,qBAA2D,CAA3D,IAAIgF,MAAM,mDAAV,qBAAA;uBAAA;4BAAA;8BAAA;YAA0D;QAClE;QACAjF,eAAeC;QACf,IAAI,CAACqB,OAAO,GAAGC;QACf,OAAOtB,OAAOmE,GAAG;IACnB;IAEA;;GAEC,GACD1C,QAAc;QACZ,IAAI,IAAI,CAACJ,OAAO,EAAE;YAChBtB,eAAe,IAAI,CAACsB,OAAO;YAC3B,IAAI,CAACA,OAAO,CAAC8C,GAAG;QAClB;IACF;AACF","ignoreList":[0]}
1
+ {"version":3,"sources":["../../src/lib/worker.ts"],"sourcesContent":["import type { ForkHandle } from './process-adapter'\nimport { Worker as JestWorker } from 'next/dist/compiled/jest-worker'\nimport { Transform } from 'stream'\nimport {\n formatDebugAddress,\n formatNodeOptions,\n getNodeDebugType,\n getParsedDebugAddress,\n getParsedNodeOptionsWithoutInspect,\n} from '../server/lib/utils'\n\ntype FarmOptions = NonNullable<ConstructorParameters<typeof JestWorker>[1]>\n\nconst RESTARTED = Symbol('restarted')\n\nconst cleanupWorkers = (worker: JestWorker) => {\n for (const curWorker of ((worker as any)._workerPool?._workers || []) as {\n _child?: ForkHandle\n }[]) {\n curWorker._child?.kill('SIGINT')\n }\n}\n\nexport function getNextBuildDebuggerPortOffset(_: {\n kind: 'export-page'\n}): number {\n // 0: export worker\n return 0\n}\n\nexport class Worker {\n private _worker: JestWorker | undefined\n\n constructor(\n workerPath: string,\n options: Omit<FarmOptions, 'forkOptions'> & {\n forkOptions?:\n | (Omit<NonNullable<FarmOptions['forkOptions']>, 'env'> & {\n env?: Partial<NodeJS.ProcessEnv> | undefined\n })\n | undefined\n /**\n * `-1` if not inspectable\n */\n debuggerPortOffset: number\n enableSourceMaps?: boolean\n /**\n * True if `--max-old-space-size` should not be forwarded to the worker.\n */\n isolatedMemory: boolean\n timeout?: number\n onActivity?: () => void\n onActivityAbort?: () => void\n onRestart?: (method: string, args: any[], attempts: number) => void\n logger?: Pick<typeof console, 'error' | 'info' | 'warn'>\n exposedMethods: ReadonlyArray<string>\n enableWorkerThreads?: boolean\n }\n ) {\n let {\n enableSourceMaps,\n timeout,\n onRestart,\n logger = console,\n debuggerPortOffset,\n isolatedMemory,\n ...farmOptions\n } = options\n\n let restartPromise: Promise<typeof RESTARTED>\n let resolveRestartPromise: (arg: typeof RESTARTED) => void\n let activeTasks = 0\n\n this._worker = undefined\n\n // ensure we end workers if they weren't before exit\n process.on('exit', () => {\n this.close()\n })\n\n const nodeOptions = getParsedNodeOptionsWithoutInspect()\n\n if (debuggerPortOffset !== -1) {\n const nodeDebugType = getNodeDebugType()\n if (nodeDebugType) {\n const address = getParsedDebugAddress()\n address.port =\n address.port +\n // current process runs on `address.port`\n 1 +\n debuggerPortOffset\n nodeOptions[nodeDebugType] = formatDebugAddress(address)\n }\n }\n\n if (enableSourceMaps) {\n nodeOptions['enable-source-maps'] = true\n }\n\n if (isolatedMemory) {\n delete nodeOptions['max-old-space-size']\n delete nodeOptions['max_old_space_size']\n }\n\n const createWorker = () => {\n // Preload the require-hook to handle package name resolution for forked packages\n const requireHookPath = require.resolve('../server/require-hook')\n const formattedNodeOptions = formatNodeOptions(nodeOptions)\n const nodeOptionsWithHook = formattedNodeOptions\n ? `${formattedNodeOptions} -r ${requireHookPath}`\n : `-r ${requireHookPath}`\n\n this._worker = new JestWorker(workerPath, {\n ...farmOptions,\n forkOptions: {\n ...farmOptions.forkOptions,\n env: {\n ...process.env,\n ...((farmOptions.forkOptions?.env || {}) as any),\n IS_NEXT_WORKER: 'true',\n NODE_OPTIONS: nodeOptionsWithHook,\n } as any,\n },\n maxRetries: 0,\n }) as JestWorker\n restartPromise = new Promise(\n (resolve) => (resolveRestartPromise = resolve)\n )\n\n /**\n * Jest Worker has two worker types, ChildProcessWorker (uses child_process) and NodeThreadWorker (uses worker_threads)\n * Next.js uses ChildProcessWorker by default, but it can be switched to NodeThreadWorker with an experimental flag\n *\n * We only want to handle ChildProcessWorker's orphan process issue, so we access the private property \"_child\":\n * https://github.com/facebook/jest/blob/b38d7d345a81d97d1dc3b68b8458b1837fbf19be/packages/jest-worker/src/workers/ChildProcessWorker.ts\n *\n * But this property is not available in NodeThreadWorker, so we need to check if we are using ChildProcessWorker\n */\n if (!farmOptions.enableWorkerThreads) {\n for (const worker of ((this._worker as any)._workerPool?._workers ||\n []) as {\n _child?: ForkHandle\n }[]) {\n worker._child?.on('exit', (code, signal) => {\n if ((code || (signal && signal !== 'SIGINT')) && this._worker) {\n logger.error(\n `Next.js build worker exited with code: ${code} and signal: ${signal}`\n )\n\n // if a child process doesn't exit gracefully, we want to bubble up the exit code to the parent process\n process.exit(code ?? 1)\n }\n })\n\n // if a child process emits a particular message, we track that as activity\n // so the parent process can keep track of progress\n worker._child?.on('message', ([, data]: [number, unknown]) => {\n if (\n data &&\n typeof data === 'object' &&\n 'type' in data &&\n data.type === 'activity'\n ) {\n onActivity()\n }\n })\n }\n }\n\n let aborted = false\n const onActivityAbort = () => {\n if (!aborted) {\n options.onActivityAbort?.()\n aborted = true\n }\n }\n\n // Listen to the worker's stdout and stderr, if there's any thing logged, abort the activity first\n const abortActivityStreamOnLog = new Transform({\n transform(_chunk, _encoding, callback) {\n onActivityAbort()\n callback()\n },\n })\n // Stop the activity if there's any output from the worker\n this._worker.getStdout().pipe(abortActivityStreamOnLog)\n this._worker.getStderr().pipe(abortActivityStreamOnLog)\n\n // Pipe the worker's stdout and stderr to the parent process\n this._worker.getStdout().pipe(process.stdout)\n this._worker.getStderr().pipe(process.stderr)\n }\n createWorker()\n\n const onHanging = () => {\n const worker = this._worker\n if (!worker) return\n const resolve = resolveRestartPromise\n createWorker()\n logger.warn(\n `Sending SIGTERM signal to static worker due to timeout${\n timeout ? ` of ${timeout / 1000} seconds` : ''\n }. Subsequent errors may be a result of the worker exiting.`\n )\n worker.end().then(() => {\n resolve(RESTARTED)\n })\n }\n\n let hangingTimer: NodeJS.Timeout | false = false\n\n const onActivity = () => {\n if (hangingTimer) clearTimeout(hangingTimer)\n if (options.onActivity) options.onActivity()\n\n hangingTimer = activeTasks > 0 && setTimeout(onHanging, timeout)\n }\n\n for (const method of farmOptions.exposedMethods) {\n if (method.startsWith('_')) continue\n ;(this as any)[method] = timeout\n ? // eslint-disable-next-line no-loop-func\n async (...args: any[]) => {\n activeTasks++\n try {\n let attempts = 0\n for (;;) {\n onActivity()\n const result = await Promise.race([\n (this._worker as any)[method](...args),\n restartPromise,\n ])\n if (result !== RESTARTED) return result\n if (onRestart) onRestart(method, args, ++attempts)\n }\n } finally {\n activeTasks--\n onActivity()\n }\n }\n : (this._worker as any)[method].bind(this._worker)\n }\n }\n\n end(): ReturnType<JestWorker['end']> {\n const worker = this._worker\n if (!worker) {\n throw new Error('Farm is ended, no more calls can be done to it')\n }\n cleanupWorkers(worker)\n this._worker = undefined\n return worker.end()\n }\n\n /**\n * Quietly end the worker if it exists\n */\n close(): void {\n if (this._worker) {\n cleanupWorkers(this._worker)\n this._worker.end()\n }\n }\n}\n"],"names":["Worker","getNextBuildDebuggerPortOffset","RESTARTED","Symbol","cleanupWorkers","worker","curWorker","_workerPool","_workers","_child","kill","_","constructor","workerPath","options","enableSourceMaps","timeout","onRestart","logger","console","debuggerPortOffset","isolatedMemory","farmOptions","restartPromise","resolveRestartPromise","activeTasks","_worker","undefined","process","on","close","nodeOptions","getParsedNodeOptionsWithoutInspect","nodeDebugType","getNodeDebugType","address","getParsedDebugAddress","port","formatDebugAddress","createWorker","requireHookPath","require","resolve","formattedNodeOptions","formatNodeOptions","nodeOptionsWithHook","JestWorker","forkOptions","env","IS_NEXT_WORKER","NODE_OPTIONS","maxRetries","Promise","enableWorkerThreads","code","signal","error","exit","data","type","onActivity","aborted","onActivityAbort","abortActivityStreamOnLog","Transform","transform","_chunk","_encoding","callback","getStdout","pipe","getStderr","stdout","stderr","onHanging","warn","end","then","hangingTimer","clearTimeout","setTimeout","method","exposedMethods","startsWith","args","attempts","result","race","bind","Error"],"mappings":"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","ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openuiai/next",
3
- "version": "15.6.0-bun.17",
3
+ "version": "15.6.0-bun.19",
4
4
  "description": "The React Framework - Self-Hosted First Fork with Full Bun Support",
5
5
  "main": "./dist/server/next.js",
6
6
  "license": "MIT",