JSer.info #747 - Zod 4.1.0がリリースされ、新しいCodecs APIが追加されました。
スキーマの定義に加えて、データのencode/decodeを定義できるCodecs APIが新たに追加されています。また、.safeExtend()
メソッド、z.has()
やz.hex()
の新しいバリデーション関数も追加されています。
debug
やchalk
などの著名なnpmパッケージが侵害され、マルウェアを含むバージョンが公開されるという問題が発生しました。
現在はnpm registryから該当バージョンは削除されています。
- npm debug and chalk packages compromised
- パッケージオーナーのコメント: https://github.com/debug-js/debug/issues/1005#issuecomment-3266868187
影響を受けたパッケージには[email protected]
、[email protected]
、[email protected]
などが含まれており、該当のバージョンではブラウザで動作するマルウェアが仕込まれていました。現在は該当バージョンがnpm registryから削除されています。
マルウェアとなったバージョンが依存に入ってるかは、次のコマンドで確認できます。
# npm - 結果が空なら影響なし
npm list "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]"
# pnpm - 結果が空なら影響なし
pnpm list --depth=Infinity "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]" "[email protected]"
# yarnはlistコマンドがない
マルウェアがnode_modules
やビルドファイルなどにないかは、次のコマンドで確認できます。
# ripgrepが必要です
rg -uu --max-columns=80 --glob '*.js' _0x112fa8
今回の問題では、パッケージオーナーはnpmの2要素認証を有効にしていましたが、攻撃者はフィッシング(フィッシングサイト上でTOTPも入力させる)を利用して有効なnpm tokenを取得し、悪意のあるバージョンを公開したようです。
次の記事では、npmのTrusted PublishingとOIDCを使い、CIからnpm tokenを使わずにパッケージを公開する方法が紹介されています。
npm Trusted Publishingの設定方法、GitHub ActionsでのOIDC設定、単体/monorepoパッケージの運用方法、GitHubのProtectionの設定などについても解説されています。
また、npmのRequire two-factor authentication and disallow tokensの設定について書かれています。
"Require two-factor authentication and disallow tokens" が有効なパッケージは、パッケージの公開にも2要素認証が必要になるため、npmのアカウントを乗っ取られた場合にも複数回のMFA認証が必要となり、被害を軽減できる可能性があります。
Node.jsとTypeScriptで書かれたmonorepoアプリケーションをnode --experimental-strip-types
へ移行した事例が紹介されています。
monorepoとnode_modules
内のコードに対して--experimental-strip-types
が効かない問題を、--conditions
フラグでパス解決を調整することで解決しています。ESMへの移行、stub作成、CommonJSの対応、erasableSyntaxOnly
設定による未対応構文の対応などを行っています。TypeScriptコードを直接実行できるようにした具体的な手順が詳しく説明されています。
Node.js v22.18.0 (LTS)で--experimental-strip-types
はフラグが外れ、デフォルトでNode.jsがTypeScriptファイルを実行できるようになっています。
JSer.infoをサポートするには
- 😘 知り合いにJSer.infoをおすすめする
- ❤️ GitHub Sponsorsで@azuのスポンサーになる
- 🐦 X(Twitter)で@jser_infoをフォローする
JSer.info Sponsors
JSer.info SponsorsはGitHub SponsorsとしてJSer.infoを支援してくれている方々です。
ヘッドライン
Release v4.1.0 · colinhacks/zod
github.com/colinhacks/zod/releases/tag/v4.1.0
zod 4.1.0リリース。
encode/decodeを定義するCodecs APIを追加、.safeExtend()
を追加、z.has()
/z.hex()
を追加など
Fresh 2.0 Graduates to Beta, Adds Vite Support | Deno
Fresh 2.0 Betaリリース。
Viteを使ったHMRの対応、react
のaliasの対応、<Head>
の追加など
Nuxt 4.1 · Nuxt Blog
Nuxt v4.1リリース。
Import Mapを使ったchunkのキャッシュの改善、実験的なRolldownのサポート、getLayerDirectories
の追加など
アーティクル
fetch() では Host ヘッダーを設定できないし話はそこまで単純じゃない - Object.create(null)
susisu.hatenablog.com/entry/2025/08/31/190757
Fetch APIとHostヘッダーについて。
サーバサイドの実行環境であるNode.js/Deno/Claudflare Workersなどの挙動について
tsx と Node.js Type Stripping の違い - mizdra's blog
www.mizdra.net/entry/2025/08/28/122040
tsx
パッケージとNode.jsのType Strippingの挙動の違いについて
Why I Won’t Use JSDOM | Epic Web Dev
www.epicweb.dev/why-i-won-t-use-jsdom
JSDOMの制限とブラウザでのコンポーネントテストについて
npm Trusted PublishingでOIDCを使ってトークンレスでCIからnpmパッケージを公開する | Web Scratch
efcl.info/2025/09/07/npm-oidc/
npm Trusted PublishingとOIDCによるトークンレスなCI/CDからのnpmパッケージ公開について。
設定手順、ブラウザで完結するリリースフロー、
新規/既存/monorepoパッケージの運用方法、GitHubのProtectionの設定などについて
npm debug and chalk packages compromised
www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised
debug
やchalk
など著名なnpmパッケージにブラウザで動作するマルウェアを含むバージョンが公開された問題について。
現在はnpm registryから該当のバージョンは削除されている。
次のパッケージのバージョン影響を受けていた。
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
- (RESOLVED) Version 4.4.2 published to npm is compromised · Issue #1005 · debug-js/debug
- npm debug, color-convert, backslash, error-ex, simple-swizzle, is-arrayish, color-name, color-string have incorrect wildcard version in their malware advisory (2025-09-08) · Issue #6099 · github/advisory-database
Bringing Node.js HTTP servers to Cloudflare Workers
blog.cloudflare.com/bringing-node-js-http-servers-to-cloudflare-workers/
Cloudflare WorkersのNode.js http
serverの対応について。
How we migrated our Rush.js monorepo to Node type stripping — Calm Blog
blog.calm.com/engineering/how-we-migrated-our-rushjs-monorepo-to-node-type-stripping
TypeScriptで書かれたNode.jsアプリケーションのコードベースをどのようにtype strippingに移行したかについて。
monorepoとnode_modules
にコードがあるため、node --experimental-strip-types
が効かないが、--conditions
で参照するパスを解決している。
ESMへの移行、stub、CJSの対応、erasableSyntaxOnly
で未対応の構文の対応などを行い、node --experimental-strip-types
で実行できるようにした話。
スライド、動画関係
1から理解するWeb Push - Speaker Deck
speakerdeck.com/dora1998/1karali-jie-suruweb-push
Web PushとPush Serviceについて。
Web Pushがどのように動いてるのか、ブラウザベンダーのPush Serverの実装についてなど
書籍関係
JavaScript/TypeScript実力強化書 | 技術評論社
gihyo.jp/book/2025/978-4-297-15194-2
2025年9月29日発売
JavaScript/TypeScriptについての書籍