{"record":{"id":"591677a82965197c","repo":"parcel-bundler/parcel","slug":"supplied-workerfarm-is-ending","errorCode":null,"errorMessage":"Supplied WorkerFarm is ending","messagePattern":"Supplied WorkerFarm is ending","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/core/src/Parcel.js","lineNumber":117,"sourceCode":"      return;\n    }\n\n    await initSourcemaps;\n    await initRust?.();\n\n    let resolvedOptions: ParcelOptions = await resolveOptions(\n      this.#initialOptions,\n    );\n    this.#resolvedOptions = resolvedOptions;\n\n    let {config} = await loadParcelConfig(resolvedOptions);\n    this.#config = new ParcelConfig(config, resolvedOptions);\n\n    setFeatureFlags(resolvedOptions.featureFlags);\n\n    if (this.#initialOptions.workerFarm) {\n      if (this.#initialOptions.workerFarm.ending) {\n        throw new Error('Supplied WorkerFarm is ending');\n      }\n      this.#farm = this.#initialOptions.workerFarm;\n    } else {\n      this.#farm = createWorkerFarm({\n        shouldPatchConsole: resolvedOptions.shouldPatchConsole,\n        shouldTrace: resolvedOptions.shouldTrace,\n      });\n    }\n\n    await resolvedOptions.cache.ensure();\n\n    let {dispose: disposeOptions, ref: optionsRef} =\n      await this.#farm.createSharedReference(resolvedOptions, false);\n    this.#optionsRef = optionsRef;\n\n    this.#disposable = new Disposable();\n    if (this.#initialOptions.workerFarm) {\n      // If we don't own the farm, dispose of only these references when","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L99-L135","documentation":"Parcel can accept an externally-supplied WorkerFarm via `options.workerFarm` (e.g. to share workers across multiple Parcel instances). Before adopting it, Parcel checks the farm's `ending` flag: a farm that is already shutting down cannot accept new work and would deadlock the build. The check fails fast to surface the lifecycle misuse.","triggerScenarios":"Constructing `new Parcel({...workerFarm})` where `workerFarm.end()` was already called (or is mid-shutdown).","commonSituations":"Sharing one WorkerFarm across several Parcel instances and ending it after the first finishes; reusing a farm from a disposed Parcel.","solutions":["Do not call `workerFarm.end()` before passing it to a new Parcel instance.","Create a fresh WorkerFarm via `createWorkerFarm()` for each independent Parcel, or omit `workerFarm` so Parcel manages its own.","If sharing, end the farm only after all Parcel instances are disposed."],"exampleFix":"// before\nfarm.end();\nconst p = new Parcel({workerFarm: farm});\n\n// after\n// drop the end() call, or create a new farm:\nconst p = new Parcel({workerFarm: createWorkerFarm()});","handlingStrategy":"validation","validationCode":"// Reject an ending farm before handing it to Parcel.\nif (options.workerFarm && options.workerFarm.ending) {\n  throw new Error('workerFarm is ending; create a new one');\n}","typeGuard":"function isActiveWorkerFarm(f: ?{ending?: boolean}): boolean {\n  return f != null && f.ending !== true;\n}","tryCatchPattern":null,"preventionTips":["Never call farm.end() before reuse.","Omit workerFarm to let Parcel own the lifecycle.","Track farm ownership explicitly when sharing across Parcel instances."],"tags":["worker-farm","lifecycle","concurrency"],"backgroundTag":null,"analyzedSha":"59484858a1a0bcbb71f74088956bb437a2db6505","analyzedAt":"2026-08-13T04:06:35.925Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}