Denoばた会議 Monthly 第5回

Deno v1.18

設定ファイルの自動読み込み

今まで、設定ファイルを読み込むためには--configの指定が必要でした。

$ deno run --config ./deno.json ./main.ts

今後は、deno.jsonまたはdeno.jsoncという名前の設定ファイルがあれば、それが自動で読み込まれます。

Deno.testのsub-steps APIが安定化

Deno.test("nested test case", async (t) => {
  const success = await t.step("step 1", async (t) => {
    const success = await t.step("step 1-1", () => {
      throw new Error("Failed!");
    });
    if (!success) throw new Error("Failed!");

    await t.step("step 1-2", () => {});
  });

  if (success) throw new Error("Failed!");
});

FFI

シンボル定義を元にした型推論やシンボルへの別名の設定がサポート

const dylib = Deno.dlopen("./add.so", {
  plus: {
    name: "add",
    parameters: ["i32", "i32"],
    result: "i32",
  } as const,
});
const result = dylib.symbols.plus("1", 2); // NG! (型エラー)

また、Deno.UnsafeFnPointerが実装され、関数ポインタを取り扱えるようになりました。

Web Cryptography APIの実装が完了

今回のリリースでWeb Cryptography APIの実装が完了

現状、WPTの98.1%のテストが成功しているようです。

WebSocket

WebSocketStreamでハンドシェイク時に送信するヘッダを設定できるようになりました。

const wss = new WebSocketStream("wss://localhost:4000/ws", {
  headers: { "X-FOO": "foo" },
});

また、WebSocketサーバ(Deno.upgradeWebSocket)でping/pongメッセージのハンドリングがサポートされました。

その他の変更点

  • Denoランタイムの起動が33%、Deno内部のtscの起動が10%高速化されました
  • Uncaught Errorの発生時に、Error.causeの内容が表示されるようになりました
  • deno install--promptオプションがサポート

Deno by exampleが公開

Go by ExampleライクなWebサイトが公開されました。

Denoの使用方法などについて解説されています。

https://examples.deno.land/

deployctlの開発が再開

合わせて、deployctlのv0.5.0がリリース

deployctl deployコマンドにより、Deno Deployへのリリースがサポートされました。

また、check, run, 及びtypesコマンドが削除されています。

deno vendorコマンドの提案

# リモートモジュールを_vendorにキャッシュ+Import mapの生成
$ deno vendor main.ts

# deno vendorで生成されたImport mapを利用
$ deno run --import-map=_vendor/import_map.json main.ts

より詳しくは#13346を参照ください

Denoからwindow変数を削除する提案

#13367のissueでDenoからwindow変数を削除する提案が行われています。

2.0のリリースに合わせて変更が実施される可能性もあるかもしれません。

deno_std/testingへの改善提案

Jestライクなアサーションの提供

#1779のissueにて、testing/expect.tsの追加が提案されています。

import { expect } from "https://deno.land/std/testing/expect.ts";

expect(add(1, 2)).toEqual(3)

Mochaポリフィルの追加

#1831のissueにて、Deno.testのsub-steps APIをベースにして、Mochaポリフィルの追加が提案されています。

describe("doSomethingAsync()", () => {
  beforeEach(setup);
  afterEach(cleanup);

  it("should work", async () => {
    await doSomethingAsync({ name: "foo" });
  });
});

denoland/ga

DenoからGoogle Analyticsへ情報を送信するためのモジュール

import { createReporter } from "https://deno.land/x/g_a@0.1.2/mod.ts";
import { serve } from "https://deno.land/std@0.122.0/http/server.ts";

const ga = createReporter();

serve(async (req, conn) => {
  const start = performance.now();
  const res = new Response("Hello");
  await ga(req, conn, res, start, null);
  return res;
}, { port: 3000 });

Astrodon

TauriとFFI(Deno.dlopen)をベースにしたデスクトップアプリケーションフレームワーク

https://github.com/astrodon/astrodon