User a51b30e12f init hai 4 meses
..
auto a51b30e12f init hai 4 meses
MultipartBody.d.ts a51b30e12f init hai 4 meses
MultipartBody.d.ts.map a51b30e12f init hai 4 meses
MultipartBody.js a51b30e12f init hai 4 meses
MultipartBody.js.map a51b30e12f init hai 4 meses
MultipartBody.mjs a51b30e12f init hai 4 meses
MultipartBody.mjs.map a51b30e12f init hai 4 meses
README.md a51b30e12f init hai 4 meses
bun-runtime.d.ts a51b30e12f init hai 4 meses
bun-runtime.d.ts.map a51b30e12f init hai 4 meses
bun-runtime.js a51b30e12f init hai 4 meses
bun-runtime.js.map a51b30e12f init hai 4 meses
bun-runtime.mjs a51b30e12f init hai 4 meses
bun-runtime.mjs.map a51b30e12f init hai 4 meses
index.d.ts a51b30e12f init hai 4 meses
index.js a51b30e12f init hai 4 meses
index.mjs a51b30e12f init hai 4 meses
manual-types.d.ts a51b30e12f init hai 4 meses
manual-types.js a51b30e12f init hai 4 meses
manual-types.mjs a51b30e12f init hai 4 meses
node-runtime.d.ts a51b30e12f init hai 4 meses
node-runtime.d.ts.map a51b30e12f init hai 4 meses
node-runtime.js a51b30e12f init hai 4 meses
node-runtime.js.map a51b30e12f init hai 4 meses
node-runtime.mjs a51b30e12f init hai 4 meses
node-runtime.mjs.map a51b30e12f init hai 4 meses
node-types.d.ts a51b30e12f init hai 4 meses
node-types.js a51b30e12f init hai 4 meses
node-types.mjs a51b30e12f init hai 4 meses
registry.d.ts a51b30e12f init hai 4 meses
registry.d.ts.map a51b30e12f init hai 4 meses
registry.js a51b30e12f init hai 4 meses
registry.js.map a51b30e12f init hai 4 meses
registry.mjs a51b30e12f init hai 4 meses
registry.mjs.map a51b30e12f init hai 4 meses
web-runtime.d.ts a51b30e12f init hai 4 meses
web-runtime.d.ts.map a51b30e12f init hai 4 meses
web-runtime.js a51b30e12f init hai 4 meses
web-runtime.js.map a51b30e12f init hai 4 meses
web-runtime.mjs a51b30e12f init hai 4 meses
web-runtime.mjs.map a51b30e12f init hai 4 meses
web-types.d.ts a51b30e12f init hai 4 meses
web-types.js a51b30e12f init hai 4 meses
web-types.mjs a51b30e12f init hai 4 meses

README.md

👋 Wondering what everything in here does?

openai supports a wide variety of runtime environments like Node.js, Deno, Bun, browsers, and various edge runtimes, as well as both CommonJS (CJS) and EcmaScript Modules (ESM).

To do this, openai provides shims for either using node-fetch when in Node (because fetch is still experimental there) or the global fetch API built into the environment when not in Node.

It uses conditional exports to automatically select the correct shims for each environment. However, conditional exports are a fairly new feature and not supported everywhere. For instance, the TypeScript "moduleResolution": "node"

setting doesn't consult the exports map, compared to "moduleResolution": "nodeNext", which does. Unfortunately that's still the default setting, and it can result in errors like getting the wrong raw Response type from .asResponse(), for example.

The user can work around these issues by manually importing one of:

  • import 'openai/shims/node'
  • import 'openai/shims/web'

All of the code here in _shims handles selecting the automatic default shims or manual overrides.

How it works - Runtime

Runtime shims get installed by calling setShims exported by openai/_shims/registry.

Manually importing openai/shims/node or openai/shims/web, calls setShims with the respective runtime shims.

All client code imports shims from openai/_shims/index, which:

  • checks if shims have been set manually
  • if not, calls setShims with the shims from openai/_shims/auto/runtime
  • re-exports the installed shims from openai/_shims/registry.

openai/_shims/auto/runtime exports web runtime shims. If the node export condition is set, the export map replaces it with openai/_shims/auto/runtime-node.

How it works - Type time

All client code imports shim types from openai/_shims/index, which selects the manual types from openai/_shims/manual-types if they have been declared, otherwise it exports the auto types from openai/_shims/auto/types.

openai/_shims/manual-types exports an empty namespace. Manually importing openai/shims/node or openai/shims/web merges declarations into this empty namespace, so they get picked up by openai/_shims/index.

openai/_shims/auto/types exports web type definitions. If the node export condition is set, the export map replaces it with openai/_shims/auto/types-node, though TS only picks this up if "moduleResolution": "nodenext" or "moduleResolution": "bundler".