Denoの直近のアップデート

typescript-goのサポートがマージ (--unstable-tsgo)

以前に紹介したdeno checkコマンドでtypescript-goをサポートするPRがマージされています (#30920)。まだリリースはされていませんが、canary バージョンで動作を試すことが可能です。

deno checkを実行する際に--unstable-tsgoオプションを指定することで、まずdenoland/typescript-go${DENO_DIR}/dlへダウンロードされます。

その後、--apiオプションを指定して起動されたtsgoとプロセス間で通信することによって型チェックが実行されているようです (microsoft/typescript-go/cmd/tsgo/main.go#L19-L20)

$ deno check --unstable-tsgo mod.ts

詳細はdenoland/deno/docs/tsgo.mdにて解説されています。

deno.jsonでのminimumDependencyAgeのサポート

先週に紹介したdeno.jsonでのminimumDependencyAgeのサポートがマージされています (#31007)

さらに、特定のパッケージを対象から除外できるよう、minimumDependencyAgeにおいてオブジェクト形式での設定がサポートされています:

minimumDependencyAge.ageフィールドに猶予期間、minimumDependencyAge.excludeフィールドに適用対象から除外したいパッケージを指定できます。

{
  "minimumDependencyAge": {
    "age": "PT5H",
    "exclude": ["npm:preact"]
  }
}

deno auditコマンド

以前に紹介したdeno auditコマンドの実装がマージされています。

npmレジストリの Full Audit エンドポイント (/-/npm/v1/security/audits) を利用したパッケージの検査がサポートされています。

内部的には firewall-api.socket.dev を使用した検証の実装も含まれているようですが、現時点ではまだユーザーから利用するための手段は提供されていなさそうです。

ecosystem_compat_test

内部的な変更ではありますが、日次でnpm/ yarn/pnpmをDenoで実行し、互換性を検証する仕組みが導入されています:

テスト用のリポジトリとしてはlucacasonato/nextjs-demoのリポジトリが使用されており、Next.jsやTailwind CSSのインストールが検証されています。

Deno Deployのアップデート

データベースマイグレーションのサポート

Databasesにおいて、各ビルドの成功後に実行するマイグレーションコマンドの指定がサポートされています:

上記PRではnode-pg-migrateprisma migrate deployとの連携例が追加されています。

dependencies/devDependenciesのサポートについて

まだDraft状態でありマージされるかどうかはわかりませんが、Denoへのdependencies/devDependenciesサポートに関するPRが作成されています:

1d2e6e7b524da176eca452496b59a817b48f9eab時点においては、deno.jsondependencies/devDependenciesフィールドが追加される想定のようです。importsフィールドとの違いとして、以下のようにバージョンレンジにおけるパッケージ名を省略できる想定のようです:

{
  "dependencies": {
    "preact": "npm:^10",
    "@fresh/core": "jsr:^2"
  }
}

この機能が検討されている背景としては、以下のような点などが挙げられています:

  • deno auditの導入に伴い、本番向けと開発向けのパッケージを区別できるようにしたい
  • deno compileで実行可能ファイルを生成する際は、開発向けのパッケージは除外したい

まだ正式にこの機能が導入されるかどうかはわかりませんが、このPR内においては、Denoにdependencies/devDependenciesのサポートを追加する代わりに、Import maps 標準へ機能を追加すること (conditionsフィールドの追加)も提案されています。

freshのリリース

freshのリリースが行われています (2.1.3)

@fresh/init@2.2.1

@fresh/init@2.2.1がリリースされています。

プロジェクトのセットアップ時に@/のパスエイリアスが設定されるよう改善されています (#3562)。今後、新しく生成されたプロジェクトでは以下のようなパスで各モジュールを参照できます。

import { Button } from "@/components/Button.tsx";
import { define } from "@/utils.ts";

@fresh/core@2.1.3

@fresh/core@2.1.3がリリースされています。以下のバグ修正が実施されています。

  • App#fsRoutes()pattern引数が機能していなかった問題が修正されています (#3571)
  • 開発時に意図せぬファイルが返却されることを防止するため、開発環境ではstaticFiles()におけるETagが無効化されています (#3561)
  • HEADメソッドの取り扱いに関して、以下の修正が実施されています (#3563)
    1. リクエストボディが返却されないようにする
    2. HEADメソッド向けにハンドラーが登録されていない場合は代わりにGETメソッドのハンドラーを実行する

@fresh/plugin-vite@1.0.6

@fresh/plugin-vite@1.0.6がリリースされています。

routesディレクトリ中のテストファイルがデフォルトでバンドルされてしまわないよう修正されています (#3559)