Deno v1.24.3

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

fetch()でSOCKSがサポート

検証はしていないのですが、HTTP_PROXYHTTPS_PROXY環境変数にsocks5:またはsocks5h:形式のURLを指定すると利用できそうです。

Deno.UnsafePointerViewへの機能追加

Deno.UnsafePointerViewに以下の3つのstaticメソッドが追加されています。

これらのメソッドの挙動は、Deno.UnsafePointerViewの同名のインスタンスメソッドとほぼ同様です。

compilerOptions.jsxImportSourceが指定されていると、deno.json(c)をimportできない問題が修正

次のように、compilerOptions.jsxImportSourceが設定されたdeno.jsonが定義されていたとします。

{
  "compilerOptions": {
    "jsx": "react-jsx",
    "jsxImportSource": "preact"
  },
  "importMap": "./import_map.json"
}

このファイルをImport assertionsを使用して読み込もうとすると、エラーが発生する問題が修正されています。

import config from "./deno.json" assert { type: "json" }; // => `error: Loading unprepared module`

console.log(config);

この修正は、Freshにおけるfeat: support JSX automatic mode (#610)の対応のために実施されたようです。

その他の修正

  • --allow-netに空の値を指定するとプロセスがパニックする問題が修正されています。
  • --locationオプションが指定されていないときはglobalThis.locationが上書きできるようになりました。

https://github.com/denoland/deno/releases/tag/v1.24.3

deno_std v0.152.0

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

std/crypto: subtle.timingSafeEqual()が追加

import { crypto } from "https://deno.land/std@0.152.0/crypto/mod.ts";

const a = new Uint8Array([102, 111, 111, 98, 97, 114]);
const b = new Uint8Array([102, 111, 111, 98, 97, 114]);
crypto.subtle.timingSafeEqual(a, b); // => `true`

この機能はまだ標準化はされていないため、ひとまずDeno本体ではなくstd/cryptoに導入されたようです。

std/testing/mock: stub()で未定義のメソッドのスタブがサポート

stub()で、未定義のメソッドに対するスタブを作成できるようになりました。

const obj = {};
stub(obj, "doSomething", () => 123); // v0.151.0までだとエラー

https://github.com/denoland/deno_std/releases/tag/0.152.0

deno initコマンド

まだDraftの段階ですが、Deno本体にdeno initコマンドを追加するPRが作成されています。

feat: add “deno init” subcommand (#15469)

$ deno init path/to/dir

今のところ、このコマンドによって、

  • エントリポイント (mod.ts)
  • テストファイル (mod_test.ts)
  • 設定ファイル (deno.json(c))
  • Import mapsファイル
  • vscodeに関する設定

などのファイルを生成することが検討されているようです。


https://github.com/denoland/deno/pull/15469

deno bundleコマンドを非推奨化し、deno packコマンドを追加する提案

以下のissueでdeno packコマンドを追加する提案が行われています。

Proposal: deprecate deno bundle, add deno pack (#15463)

背景としては、deno bundleコマンドに関する以下の問題などの解消を目的としているようです。

  • 用途に関する誤解
    • deno bundleコマンドに対して、Webpackなどの汎用的かつ高機能なバンドラー相当の機能を求める要望が多くあるようです。
    • しかし、このdeno bundleコマンドは、Denoで書いたコードを依存関係のダウンロードをせずに簡単に再配布できるようにすることを目的に導入されたものであり、フロントエンド開発などの複雑な用途での利用が想定されたものではありませんでした。
  • 安定性に関する問題
    • 現在、deno bundleコマンドの内部で使用されているswcは、トランスパイル用途では安定しているものの、バンドラーとしての用途では問題が発生することがあるようです。

これらの問題の解消を目的として、deno packという新しいコマンドを導入することが提案されています。

このdeno packコマンドでは、swcを使用してSystemJS形式のモジュールを出力することで、deno bundleコマンドが抱えていた安定性に関する問題を解消することが計画されているようです。

ただし、deno bundleコマンドと同様に、高機能なバンドラーとしての利用は想定されておらず、そういった用途では、引き続きesbuildなどのサードパーティパッケージの使用が推奨されるようです。


https://github.com/denoland/deno/issues/15463

deno-jaのLP

hashrockさんによって、deno-jaコミュニティのLPが作成されています。

FreshやDeno Deployなどを活用して作成されています。


Denonomicon

Deno FFI(Deno.dlopen)などのコントリビューターであるAapo Alasuutariさんによって、Deno FFIの解説ページが公開されました。


deno_gi

FFIベース(Deno.dlopen)のGTKなどのバイディングライブラリ


https://github.com/ahgilak/deno_gi