Deno v1.25.2

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

(破壊的変更) Node.js互換モード(--compat)の削除

Deno v1.25.0でnpmパッケージのサポートが追加されたため、Node.js互換モード(--compat)が削除されました。

FFI

Rustのdynasmrt crateを使用して、JITの仕組みが再実装されています。

こちらのコメントによると、これにより以下の点などが改善されているようです。

  • Windows x64 PCでもv8 Fast APIを使用した最適化が適用されるようになりました。
  • Denoからtinyccへの依存がなくなりました。
  • SElinuxが有効化されている環境でもFFIが動作するようになりました。

その他には、bool型のサポートが追加されています。

const dylib = Deno.dlopen(libPath, {
  "do_something_with_bool": {
    parameters: ["bool"],
    result: "bool",
  },
});

npmパッケージサポートの改善

pre-releaseタグがサポートされています。(例: npm:some-package@1.2.3-alpha.4)

また、パッケージのバージョンが指定されなかった際に、そのパッケージの最新バージョンがインストールされるように改善されています。(dist-tagslatest で指定されたバージョンがダウンロードされます)

その他には、npm:経由で読み込んだパッケージ内ではwindow変数が削除され、cjsモジュールが再帰的に解析されるように改善されています。

これによりVue.jsがimportできるようになっているようです。

import { createApp } from "npm:vue@3.2.39"

console.log(createApp);

deno_std v0.155.0

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

std/encoding/csv: stringify()のシグネチャが変更 (破壊的変更)

stringify()が同期的に動作するように変更されています。

また、columnsオプションがオプショナルに変更されています。

具体的には、以下のように型定義が変更されています。

v0.154.0:

stringify(
  data: DataItem[],
  columns: Column[],
  options?: StringifyOptions,
): Promise<string>

v0.155.0:

stringify(data: DataItem[], options?: StringifyOptions): string

そのため、使用法が以下のように変わっています。

// v0.154.0 (Promise<string>が返却されます)
const csvText = await stringify(data, columns, options);

// v0.155.0 (stringが返却されます)
const csvText = stringify(data, { columns, ...options });

std/dotenv: アクセスされる環境変数に制限を掛けられるように

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

const conf = await config({
  restrictEnvAccessTo: ["HOST", "PORT", "DB_URL"],
});

このオプションを指定すると、Deno.env.toObject()を使用せずに、指定された環境変数のみがアクセスされるため、より安全に環境変数を取り扱えるようになります。

std/log

setup()が同期的に動作するように変更されています。

std/node

node/streamの実装がreadable-streamベースのものに変更されました。 これにより、互換性の向上が期待できそうです。

また、url.formatの互換性が向上しており、これによりaxiosが利用できるようになったようです。

import axios from "npm:axios@0.27.2"

const res = await axios.get("https://api.github.com/repos/denoland/fresh");
console.info(res.data);

Fresh v1.1

Fresh v1.1がリリースされました。

変更点については以下にまとめたため、よろしければ参照ください。

Cache API

DenoにCache APIを実装するPRが作成されています。

WIP: Cache API (#15829)

いまのところ、SQLiteをベースに、CacheStorageCacheなどのAPIが実装されているようです。

Deno.setRawの安定化について

以下のissueでDeno.setRawの安定化が提案されています。

Stabilize Deno.setRaw (#15796)

安定化にあたって、まず、Deno v1.26でDeno.setRawDeno.stdinのメソッドに変更することが検討されているようです。

その後、Deno v1.27で--unstableオプションを外すことが予定されているようです。

Denoの新機能「npmインポート」について予習する

Deno v1.25で実装されたnpmパッケージサポートに関する解説記事が公開されています。