Deno v2.2.3

Deno v2.2.3がリリースされています。

deno lint

プラグインシステムにおけるセレクターの改善

セレクターにおいて、以下のように特定のプロパティを保持するノードのみの問い合わせがサポートされています (#28324)

const plugin: Deno.lint.Plugin = {
  name: "sample-plugin",
  rules: {
    "some-rule": {
      create: (ctx) => {
        const visitor = {
          ".callee": (node) => {
            // `.callee`を保持するNodeのみを問い合わせる
          },
        };
        return visitor;
      },
    },
  },
};

また、セレクターの構文における:has()/:is()/:where()/:not()や属性に対する正規表現によるマッチング (例: MemberExpression[property.name=/Object/])がサポートされています (#28348, #28340)

これらの機能の追加に合わせて、公式ドキュメントも改善されています (https://github.com/denoland/docs/pull/1508)

プラグイン実行時のパーミッションの取り扱いの変更

プラグインの実行時に--no-promptが有効化されるよう挙動が変更されています (#28305)

deno lspdeno lintでJavaScriptプラグインを実行する際の方式を統一することを目的とした変更のようです。

現状、deno lintにおいては--allow-readなどのパーミッションフラグを指定する方法はありませんが、要望はすでに挙げられているようです:

プラグインに関する型定義の修正

Deno.lint.PropertyDefinition.keyの型定義にDeno.lint.PrivateIdentifierが追加されています (#28358)

また、Deno.lint.FixDataが削除され、Deno.lint.Fixを使用するよう統一されています (#28344)

プラグインシステムに関するバグの修正

Deno.lint.ObjectPatternTSESTreeに準拠するよう修正されています (#28359)

また、Deno.lint.ExportAllDeclarationにおいてexportedsourceが逆に設定されていた問題が修正されています (#28357)

Node.js互換性の改善

"module.exports"

ESM形式のモジュールをrequire()で読み込んだ際に、"module.exports"という名前でexportされている要素があった場合、Node.jsと同様にそれが返却されるよう修正されています (#28376)

また、CommonJSモジュールをimportした際に、module.exportsキーが定義されるよう挙動が改善されています (#28373)

// sample.cjs
module.exports = 123;

// sample.mjs
import * as mod from "./sample.cjs";
console.info(mod); // [Module: null prototype] { default: 123, "module.exports": 123 }

node:sqlite

StatementSync#getを呼ぶと、データベースがロックされたままとなってしまう問題が修正されています (#28298)

deno lsp - 変数をリネームする際の挙動の改善

deno lspで変数をリネームする際の挙動が改善されています (#28327)

例えば、以下のケースにおいてhosthostnameにリネームした際に…

async function fetchUsers({host, port}: FetchUserOptions) {
  const res = await fetch(`https://${host}:${port}/api/users`);
  // ...
}

v2.2.2においては、以下のようにリネームされてしまっていたようです:

async function fetchUsers({hostname, port}: FetchUserOptions) {
  const res = await fetch(`https://${hostname}:${port}/api/users`);
  // ...
}

このリリースでは、以下のようにリネームされるよう修正されています:

async function fetchUsers({host: hostname, port}: FetchUserOptions) {
  const res = await fetch(`https://${hostname}:${port}/api/users`);
  // ...
}

OpenTelemetry - Tracer#startActiveSpanに関する修正

モジュールのトップレベルでTracer#startActiveSpanを呼ぶと、エラーが発生する問題が修正されています (#28323)

deno_stdのリリース

deno_stdがリリースされています (release-2025.03.04)

@std/cli@1.0.14

@std/cli@1.0.14がリリースされています。

@std/cli/unstable-progress-bar - インターバルの調整

ProgressBarの再描画に関するインターバルが200msから1sに変更されています (#6402)

@std/fs@1.0.14

@std/fs@1.0.14がリリースされています。

Node.jsサポートの改善

Node.jsサポートの改善に向けて、以下のモジュールが追加されています:

  • @std/fs/unstable-remove (remove()removeSync()が提供されます)
  • @std/fs/unstable-umask (umask()が提供されます)
  • @std/fs/unstable-utime (utime()utimeSync()が提供されます)
  • @std/fs/unstable-mkdir (mkdir()mkdirSync()が提供されます)
  • @std/fs/unstable-copy-file (copyFile()copyFileSync()が提供されます)
  • @std/fs/unstable-truncate (truncate()truncateSync()が提供されます)
  • @std/fs/unstable-read-text-file (readTextFile()readTextFileSync()が提供されます)

@std/tar@0.1.6

@std/tar@0.1.6がリリースされています。

mode/uid/gidの取り扱いの変更

TarStream及びUntarStreamにおいてmode/uid/gidの3つが10進数ではなく8進数で取り扱われるよう修正されています (#6440)

@std/text@1.0.11

@std/text@1.0.11がリリースされています。

@std/text/unstable-reverseが追加

新規モジュールとして@std/text/unstable-reverseが追加されています。Unicodeに基づいて文字列を反転するreverse()が提供されています (esreverをベースに実装されているようです)

@std/uuid@1.0.5

@std/uuid@1.0.5がリリースされています。

@std/uuid/v1のバグ修正

rngオプションを指定した場合、適切なUUIDが生成されない問題が修正されています。

Nitro v2.11.0

Nitro v2.11.0がリリースされています。

Deno v2との互換性の改善データベースレイヤーにおけるnode:sqliteのサポートなどが実施されているようです。

Platform Node.js compat

Platform Node.js compatというページにおいて、Deno DeployやCloudflare Workers, Netlify Edgeなどの各プラットフォームにおけるNode.jsとの互換性について掲載されています:

前述したNitroにおいて、各プラットフォーム向けのプリセットの開発を行いやすくすることが目的のようです。