{"id":"3671e7d832867259","repo":"vitejs/vite","slug":"not-implemented","errorCode":null,"errorMessage":"Not implemented","messagePattern":"Not implemented","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vite/src/node/optimizer/pluginConverter.ts","lineNumber":72,"sourceCode":"        {\n          platform,\n          plugins:\n            plugins?.flatMap((p) =>\n              p && 'name' in p\n                ? [\n                    {\n                      name: p.name,\n                      // eslint-disable-next-line @typescript-eslint/no-empty-function\n                      setup() {},\n                    },\n                  ]\n                : [],\n            ) ?? [],\n        },\n        {\n          get(target, p, _receiver) {\n            if (p in target) return (target as any)[p]\n            throw new Error('Not implemented')\n          },\n        },\n      ) as esbuild.BuildOptions,\n      resolve() {\n        throw new Error('Not implemented')\n      },\n      onStart(callback) {\n        onStartCallbacks.push(callback)\n      },\n      onEnd(callback) {\n        onEndCallbacks.push(callback)\n      },\n      onResolve(options, callback) {\n        onResolveCallbacks.push([options, callback])\n      },\n      onLoad(options, callback) {\n        onLoadCallbacks.push([options, callback])\n      },","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/vitejs/vite/blob/89620f09afcfef6b35e7bb8660132ab5b4d0cd3b/packages/vite/src/node/optimizer/pluginConverter.ts#L54-L90","documentation":"Vite converts esbuild-style plugins to rolldown plugins for dependency optimization via `esbuildPluginToRolldownPlugin`. The shimmed `PluginBuild.initialOptions` is a Proxy over a minimal object (`platform`, `plugins`); reading any other property throws 'Not implemented' at pluginConverter.ts:72. Only a curated subset of esbuild's BuildOptions is supported.","triggerScenarios":"An esbuild-format plugin's `setup(build)` reads `build.initialOptions.<x>` for an option Vite doesn't carry (e.g. `outfile`, `bundle`, `tsconfig`, `entryPoints`, `write`).","commonSituations":"Passing a generic esbuild plugin via `optimizeDeps.esbuildOptions.plugins` that introspects the full build config; porting a plugin written for raw esbuild into Vite's optimizer.","solutions":["Avoid reading unsupported `initialOptions` keys in your esbuild plugin; only rely on `platform` and `plugins`.","Pass the needed option through a different channel (your own closure/config) instead of reading it off `build.initialOptions`.","Rewrite the plugin as a native rolldown plugin instead of using the esbuild shim.","Drop the plugin from `optimizeDeps.esbuildOptions.plugins` if it isn't essential."],"exampleFix":"// before\nsetup(build) {\n  const entry = build.initialOptions.entryPoints // throws\n}\n\n// after\nsetup(build) {\n  const platform = build.initialOptions.platform // supported\n}","handlingStrategy":"validation","validationCode":"const SUPPORTED_INITIAL = new Set(['platform', 'plugins'])\nfunction assertEsbuildPluginAccessesSupportedKeys(plugin: any) {\n  // static check: scan setup source for build.initialOptions.<key> usage\n  const src = plugin.setup.toString()\n  const used = [...src.matchAll(/initialOptions\\.(\\w+)/g)].map((m) => m[1])\n  const bad = used.filter((k) => !SUPPORTED_INITIAL.has(k))\n  if (bad.length) throw new Error(`esbuild plugin reads unsupported initialOptions: ${bad.join(', ')}`)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only read platform/plugins from build.initialOptions in esbuild plugins passed to Vite.","Prefer writing native rolldown plugins over esbuild shims."],"tags":["optimizer","plugin","esbuild","rolldown","interop"],"analyzedSha":"89620f09afcfef6b35e7bb8660132ab5b4d0cd3b","analyzedAt":"2026-08-03T19:28:02.920Z","schemaVersion":2}