Deno v1.32.2

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

KV (Deno.Kv)

Deno.KvCommitResult型が追加されています。

これには、KVにコミットされた値に設定された新しいversionstampが含まれます。

この追加に合わせて、以下の変更も実施されています。

  • Deno.AtomicOperation.commitの戻り値がPromise<boolean>からPromise<Deno.KvCommitResult | null>に変更されています。(コミット成功時はDeno.KvCommitResult、失敗時はnullが返却されます)
  • Deno.Kv.setの戻り値がPromise<void>からPromise<KvCommitResult>に変更されています。

Deno.KvEntryMaybeが追加されています。(この型の実体はDeno.KvEntry<T> | { key: Deno.KvKey, value: null, versionstamp: null }のaliasです)

これに合わせて、以下のAPIに型引数を指定できるように変更されました。

これらの変更により、エントリを取得する際に値の型を指定できるようになりました。

const entry: Deno.KvEntryMaybe<string> = await kv.get<string>(["str"]);

const entries: [Deno.KvEntryMaybe<string>, Deno.KvEntryMaybe<number>] = await kv.getMany<[string, number]>([["str"], ["n"]]);

Deno.Kv#getManyが実装されました。

複数のエントリをまとめて取得できます。

await kv.set(["key", 1], "foo");
await kv.set(["key", 2], "bar");

const entries = await kv.getMany([
  ["key", 1],
  ["key", 2]
]);

assert(entries.length === 2);
assert(entries[0].value === "foo");
assert(entries[1].value === "bar");

Node.js互換性の改善

node:cryptoの改善

以下の機能が実装されています。

  • checkPrime
  • createSecretKey
  • createCipherivcreateDecipherivaes-128-ecbがサポート
  • createSign
    • 以下のアルゴリズムがサポートされています。
      • sha224
      • sha256
      • sha384
      • sha512
      • RSA-SHA224
      • RSA-SHA256
      • RSA-SHA384
      • RSA-SHA512
  • crypto.Cipher/crypto.DecipherをNode.jsのTransform Streamとして扱えるように改善されています。

REPL(deno repl)でのpackage.jsonサポートが改善されています。

  • package.jsonで定義されたパッケージのbare specifierによる読み込みがサポート
  • LSPの警告メッセージが表示される問題が解消されています。
  • 実際に使用されるまでは、package.jsonで定義された依存パッケージが読み込まれないように挙動が改善されました。

deno coverageでnpmパッケージを使用したコードのカバレッジを計測する際に、依存しているnpmパッケージに対してもカバレッジが計測されてしまう問題が解消されています。

deno testの改善

サニタイザやレポーティングに関するコードがJavaScriptからRustへ移植されています。

これにより以下のような改善がなされたようです。

  • 非ユーザーエラーに関するレポーティングの改善
  • テストステップ(Deno.TestContext.step)における失敗がテスト結果のサマリにも含まれるように
  • 出力の一貫性が向上

deno lspのバグ修正

  • Go to referencesの実行時に、まだエディタで開いたことのないファイルの定義が表示されない問題が修正されています。
  • data:URLからimportしているファイルでエラーが発生する問題が修正されています。
  • textDocument/referencescontext.includeDeclarationパラメータが考慮されていなかった問題が修正されています。

Web APIに関するバグ修正

  • ReadableStreamByobReaderFloat64Arrayを与えた際に意図した通りに動作しなかった問題が解消されています。
  • TextEncoder.encodeIntoに1バイトの非ascii文字を含む文字列を渡すと、誤った結果が返される問題が修正されています。

Deno v1.32.3

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

一部の状況でdeno replが停止してしまう問題が起きていたため、それに関する改善などが実施されています。

deno lsp

deno replに関する問題を修正するために、deno replからLSPを起動するときのみファイルのプリロードが無効化されました。

また、メモリ使用量の削減などのため、deno lspがプリロードするファイル数にも制限が入りました。(デフォルトは1000で、今のところこの制限を調整する方法はまだ提供されていません)

型チェックに関する修正

Deno v1.32.0以降、エントリポイント以外のTypeScriptファイルに型エラーがあった場合、その型エラーを修正したとしても、キャッシュされた実行結果が表示されてしまう問題が修正されています。


deno_std v0.182.0

deno_std v0.182.0がリリースされました。

std/fs

exists()の非推奨化が解除されました。

また、Windowsで読み込み権限のないファイルをチェックした場合、trueを返すように挙動が変更されています。

その他にも、新しく以下のオプションが追加されています。

オプション説明
isReadabletrueを指定すると、ファイルが存在して かつ 読み込み可能なときだけtrueを返却します
isDirectorytrueを指定すると、対象のパスがディレクトリのときのみtrueを返却します
isFiletrueを指定すると、対象のパスがファイルのときのみtrueを返却します

std/fs/walk

WalkErrorが追加されました。

walkでのエラー発生時に、このエラーが投げられます。

std/streams/text_delimiter_stream

TextDelimiterStreamdispositionオプションが追加されました。

挙動はDelimiterStreamの同名のオプションと同様です。

std/csv

CsvStringifyStreamが追加されました。

import { CsvStringifyStream } from "https://deno.land/std@0.182.0/csv/csv_stringify_stream.ts";
import { readableStreamFromIterable } from "https://deno.land/std@0.182.0/streams/readable_stream_from_iterable.ts";

const file = await Deno.open("data.csv", { create: true, write: true });
const readable = readableStreamFromIterable([
  { id: 1, name: "foo" },
  { id: 2, name: "bar" },
  { id: 3, name: "baz" },
]);

await readable
  .pipeThrough(new CsvStringifyStream({ columns: ["id", "name"] }))
  .pipeThrough(new TextEncoderStream())
  .pipeTo(file.writable);

std/encoding/base58

decode()で先頭のバイトが欠けた状態で結果が返却されてしまう問題が修正されています。

Cicada

CicadaというCI/CDパイプラインをDenoで記述するためのフレームワークが公開されています。

現在はまだアーリーアクセス版のようですが、将来的にはOSSとして公開される予定のようです。