WinterTC
https://wintercg.org/static/logo.svg
WinterTC (TC55) is an Ecma International Technical Committee
https://wintertc.org/
JavaScript は主に ECMAScript(言語仕様)と Web 標準仕様で構成されている。近年非ブラウザランタイムにも Web 標準 API が取り入れられるようになってきている。これは Web アプリケーションの JavaScript コード実行場所がサーバーサイドとクライアントサイドで曖昧となり、コードの共有化を可能とするために広がっていったためと理解している。
ところで Web 標準 API はあくまでブラウザで実行されることを考慮しているため、非ブラウザランタイムで扱うには機能が十分に提供できないことがある(特に Fetch API)。
この問題に取り組むために生まれたのが Web-interoperable Runtimes Community Group (WinterCG)、のちに標準化作業を W3C CG から Ecma TC55 に移行しWinterTC となる。
https://github.com/wintercg/admin/issues/58
基本的に W3C や WHATWG の既存のワークストリームに対して提案することを第一としているが、ブラウザでは特に必要のないと結論付けられた仕様については WinterTC で独自に仕様を策定することとなる。
https://blog.cloudflare.com/introducing-the-wintercg-ja-jp#--1
Node.js、Deno、Cloudflare、Vercel などが参加している。議事録については GitHub issues を見ればよさそう。
https://github.com/wintercg/admin/issues
なお Bun は参加していない。
Bun の非互換な拡張 API
現状の主要な仕様一覧
Runtime Keys
非ブラウザランタイムを一意に定めるためのキー。
https://runtime-keys.proposal.wintercg.org/
Vercel が edge や edge-runtime という強い名前で登録しようとして反対され、最終的に edge-light になったのが面白かった。
https://github.com/wintercg/runtime-keys/pull/2
Minimum Common Web Platform API
非ブラウザランタイムが実装すべき Web 仕様 API がまとめられている。
https://common-min-api.proposal.wintercg.org/
ブラウザランタイムとの差分がある場合は特筆されることとなる。例えば非ブラウザには HTMLFormElement がないため、FormData のコンストラクタが少し異なることが書かれている。
リポジトリでは Node.js が独自で実装している AsyncLocalStorage についても規定している。これと同等の機能については TC39 に Async Context として提案されてもいる。
https://github.com/wintercg/proposal-common-minimum-api/blob/main/asynclocalstorage.md
Fetch
CORS がなかったり、Cookie Store がなかったりと特にブラウザと差分の大きい Fetch API についてまとめている仕様。
https://fetch.spec.wintercg.org/
Sockets API
TCP 接続する Socket API の仕様。
https://sockets-api.proposal.wintercg.org/
Web Crypto Streams
Web Crypto API にストリーム機能を入れる仕様。W3C に提出しようと動いている。
https://webcrypto-streams.proposal.wintercg.org/