Deno v1.25.1
Deno v1.25.1がリリースされました。
Node.js互換に関する変更点
依存関係の解析結果に関するキャッシュが存在する場合、
deno compile
が失敗する問題が修正されています。npm:
URLで読み込まれたパッケージ内で、global
とglobalThis
が一致するように修正されました。- node-fetchなどの
global.Promise
を参照するパッケージが動かない問題があったようです。
- node-fetchなどの
semverの取り扱いに関するnpmとの互換性の向上
- 元々、Rustのsemver crateが使われていましたが、自前でパーサが実装されたようです。
*
付きのConditional exportsがサポートされています。{ "exports": { ".": { "types": "./types/src/index.d.ts", "require": "./cjs/index.cjs", "import": "./esm/index.js" }, "./driver": { "types": "./types/src/driver/index.d.ts", "import": "./esm/driver/index.js" }, "./driver/*": { "types": "./types/src/driver/*.d.ts", "import": "./esm/driver/*.js" } } }
package.json
で"type": "module"
が指定されたパッケージについては、"main"
ではなく"module"
で指定されたファイルが読み込まれるように修正されました。fs-extraなどのパッケージが読み込めない問題が修正されました。
- 例えば、
copy
ディレクトリとcopy/index.js
が両方存在するようなパッケージでエラーが発生していたようです。
- 例えば、
下記のように、Node.jsのグローバルAPIと同名の変数を定義しているコードの読み込みに失敗する問題が修正されました。
const process = require('process');
その他の変更点
Deno.serve()
のport
オプションに使用中のポートを指定すると、プロセスがパニックする問題が修正されました。deno check
コマンドに--remote
と--no-remote
が同時に与えられたときは、エラーが発生するように修正されました。Deno.readTextFile()
などでv8の最大文字列長を超えるファイルを読もうとすると、プロセスがパニックする問題が修正されました。- サーバから送信されたもののまだ読み込まれていないメッセージが存在すると、
WebSocketStream.close
が永遠に解決しない問題が修正されました。 TextDecoder
の最適化- deno-csvのベンチマークが1.4x程に高速化されているようです。
https://github.com/denoland/deno/releases/tag/v1.25.1
deno_std v0.154.0
deno_std v0.154.0がリリースされました。
頭字語に関する命名形式の変更 (破壊的変更)
deno_stdで提供されているAPIの頭字語に関する命名形式が以下のように変更されています。
CSVStream
=>CsvStream
JSONParseStream
=>JsonParseStream
TextProtoReader#readMIMEHeader
=>TextProtoReader#readMimeHeader
古い形式の命名は非推奨化されています。
std/encoding/csv
: ColumnOptions
が削除 (破壊的変更)
parse()
のcolumns
オプションにArray<string>
形式の値を渡すことで代替できるため、ColumnOptions
が削除されています。
import { parse } from "https://deno.land/std@0.154.0/encoding/csv.ts";
const records = parse(`1,foo\n2,bar`, { columns: ["id", "name"] });
console.log(records); // => [ { id: "1", name: "foo" }, { id: "2", name: "bar" } ]
std/encoding/base58
Base58のエンコーディング・デコーディング用のモジュールが追加されています。
import { encode } from "https://deno.land/std@0.154.0/encoding/base58.ts";
console.log(encode("foobar")); // => "t1Zv2yaZ"
std/encoding/json(c)
JSONValue
型の型定義が改善されています。
std/fs
各APIでURLオブジェクトが引数として渡せるようになりました。
import { move } from "https://deno.land/std@0.154.0/fs/move.ts";
await move(
new URL("./old.txt", import.meta.url),
new URL("./new.txt", import.meta.url),
);
また、copy
やmove
などの関数で、適切な箇所ではError
の代わりにDeno.errors.AlreadyExists
が使われるように修正されました。
std/testing/asserts
assertFalse
の型定義が改善されています。
また、assertNotInstanceOf
の型定義がAssertion Functions
を使って改善されています。
std/node
node/http
: Fastifyを動かすために、Server.setTimeout()
のメソッドの定義が追加されています。(実装はまだのようです)node/fs
:opendir()
とopendirSync()
が実装されています。node/fs
:accessSync()
で対象ファイルの所有者が自分自身であれば、そのファイルに設定された所有者向けのパーミションをチェックするように修正されています。
https://github.com/denoland/deno_std/releases/tag/0.154.0
Node.js互換モード(--compat
)の削除について
Deno v1.25.0でnpmパッケージのサポートが入ったためか、Node.js互換モード(--compat
)を削除するPRが作成されています。
このPRはすでにマージされており、次のv1.26あたりでリリースされる可能性がありそうです。
https://github.com/denoland/deno/pull/15678
Denoへの--no-npm
オプションの追加について
現在、Denoに--no-npm
オプションを追加するPRが作成されています。
このオプションを指定することにより、npm:
形式でのimport
を無効化できるようにすることが想定されているようです。
$ deno run --no-npm main.mjs
このPRはv1.26のマイルストーンに含まれており、次のマイナーリリースで追加される可能性がありそうです。
https://github.com/denoland/deno/pull/15673
Deno.escapeHtml
ReactコンポーネントをSSRした場合などに生成される巨大なHTMLなどを高速にエスケープすることを目的に、Deno.escapeHtml()
というAPIの追加が検討されているようです。
Deno.escapeHtml("<div>あいうえお</div>");
まだリリースされるかは不明なものの、すでにPRが作成されています。
https://github.com/denoland/deno/pull/15761
deno-redis v0.27.0
deno-redis v0.27.0がリリースされています。
Redisから返却されたnull値を表現するBulkNil型がundefined
からnull
へ変更されています。(破壊的変更)
const value = await redis.get("no-such-key");
assert(value === null); // => v0.26までだと`false`
同様に、RedisのNull Arrayが空の配列([]
)ではなくnull
として返却されるように変更されています。(破壊的変更)
const result = await redis.blpop(1, "no-such-list");
assert(result === null); // v0.26までだと`false`