Deno.spawnDenoを追加する提案

以下のissueでDeno.spawnDenoというAPIの追加が提案されています

背景として、まずdenoland/deno#11016Deno.runとは異なる新しいサブプロセスAPIが提案されました。

このissueをベースに以下のようなAPIを追加するPRが作成されていますが、まだマージはされていないようです。

// 高レベルAPI
const cmd = Deno.Command(executable, { args });
const status = await cmd.status();

// 低レベルAPI
const cmd = Deno.Command(executable, { args });
const child = cmd.spawn({ stdin: "piped" });
const writer = child.writer.getWriter();
await writer.write(buffer);

この変更は今のところv1.17のマイルストーンに入っているため、次のリリースに含まれる可能性がありそうです。

そして、今回提案されているDeno.spawnDenoは、Node.jsにおけるchild_process.forkに相当する機能のようで、上記のAPIをベースにサンドボックス化されたDenoのサブプロセスを起動する機能のようです。

起動する際にWorkerdeno.permissionsと同様にパーミッションなどの指定をサポートすることが想定されています。

またこの提案に合わせて --no-permission-requestオプションの追加も提案されています。

このオプションが指定された際はDeno.permissions.requestを無効化し、Deno.spawnDeno経由で起動されたプロセスがパーミッションのエスカレーションをできないようにすることを目的としているようです。


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

サブステップAPIの安定化について

Deno v1.15で導入されたサブステップAPIの安定化が提案されています。

Deno v1.18での安定化が検討されているようです。

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!");
});

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

deno-remix

esbuildなどを利用してRemixをDenoで動かすサンプルが公開されています。


https://github.com/kentcdodds/deno-remix

Trex v1.10.0

DenoのパッケージマネージャであるTrexのv1.10.0がリリースされました。

trex checkコマンドが実装され、古くなった依存モジュールのチェックがサポートされています。(現在はdeno.land/stddeno.land/xのみがサポートされています)


https://github.com/crewdevio/Trex/pull/110