Deno v1.38.3

Deno v1.38.3がリリースされました。

deno publishコマンドについて

⚠️パッケージレジストリが公開されていないため、この機能はまだ利用できません。また、この機能には、今後、大きな変更が入る可能性があります。

Denoの新しいパッケージレジストリへパッケージを公開するためのコマンドが実装されているようです。(helpメッセージにはこのコマンドは表示されず、まだ使用は推奨されません)

feat(unstable): tar up directory with deno.json #21228

現時点では、公開したいパッケージが含まれるディレクトリを指定して利用することが想定されているようです。

$ deno publish path/to/package_directory

引数で指定したディレクトリには、以下の項目を設定したdeno.jsonを置いておく必要があります。

項目説明
versionパッケージのバージョン
nameパッケージ名(@<scope_name>/<package_name>のフォーマット)

また、もし指定されたディレクトリでワークスペースが有効化されている場合、ワークスペース内の各パッケージがまとめて公開されるようです。

パッケージが公開される際は、Import Mapsの内容を元に各ファイルのspecifierを解決した後、tarballが作成され、DENO_REGISTRY_URLへアップロードされるようです。

認証については、--tokenオプションでpublish用のAPIトークンを指定できます。もし--tokenオプションが指定されなかった場合は、以下のように認証が行われるようです。

  • GitHub Actionsで実行されていれば、OIDCを使用する。
  • そうでなければ、インタラクティブに認証をする。

その他の改善

  • node:stream: Writableで意図した通りにデータが書き込まれないことがある問題が修正されています。
  • @jsxプラグマとshebangを併用するとパニックする問題が修正されています。
  • deno repl/deno jupyterPromise was collectedエラーが起きることのある問題が修正されています。
  • NO_COLOR環境変数に空文字列が設定されている際は、Deno.noColortrueが設定されないように修正されています。

deno_std v0.208.0

deno_std v0.208.0がリリースされています。

既存モジュールの非推奨化

以下のモジュールが非推奨化されました。

  • std/collections/group_by.ts: 今後はObject.groupByの利用が推奨されます。
  • std/http/method.ts

std/expect

新規モジュールとしてstd/expectが追加されています。

Jestライクなアサーションが提供されています。

import { expect, fn } from "https://deno.land/std@0.208.0/expect/mod.ts";

expect(1).toBe(1);
expect("foo").not.toBe("bar");

const f = fn(() => 987);
expect(f(123, "bar")).toBe(987);
expect(f).toHaveBeenCalledWith(123, "bar");

std/crypto/crypto.ts

BLAKE2B-160がサポートされています。

esm.sh v135

esm.sh v135がリリースされています。

esm.sh/runというスクリプトが追加されており、これをHTMLから読み込むことで、ビルドなしでTypeScriptやJSXなどのコードをブラウザで動かせるようです。

内部ではesm.shのビルドAPIが活用されているようです。

その他には、package.jsonに"esm.sh"フィールドを記述しておくことで、バンドルに関する挙動を制御できるようにする機能が追加されています。

--unstable-unsafe-protoオプションの導入について

Deno本体に--unstable-unsafe-protoというオプションを追加するPRがマージされています。Deno v1.39あたりでリリースされる可能性がありそうです。

feat(unstable): –unstable-unsafe-proto #21313

セキュリティのため、DenoはデフォルトでObject.prototype.__proto__を削除します。--unstable-unsafe-protoを指定することで、この挙動を無効化できるようです。

一部のnpmパッケージを動かす際に、Object.prototype.__proto__が欲しい場面が出てくるというのが導入の背景のようです。

Consider –unstable-unsafe-proto flag #21276