2021/01/31〜2022/02/06の最新情報

Deno v1.18.2 Deno v1.18.2がリリースされました。 Deno.getUid() Deno.getUid()が実装されました。 これを使うと、現在のユーザのIDを取得できます。(Windowsだとnullが返されます) const uid = Deno.getUid(); console.log(uid); 利用するには--allow-envと--unstableが必要です。 その他バグ修正 HOME環境変数に相対パスが設定されていると、プロセスがクラッシュする問題が修正されました。 拡張子なしでimportしようとした際に、メディアタイプを元に拡張子を推論されるようになりました。 クエリパラメータつきでローカルファイルをimportするとプロセスがクラッシュする問題が修正されました。 SubtleCrypto.decryptでAES-GCMによる復号を行う際に、タグ長が128ビットでないとプロセスがパニックする問題が修正されました deno lsp: リダイレクトが発生すると、X-Deno-Warningヘッダの内容が表示されなくなる問題が修正されました https://github.com/denoland/deno/releases/tag/v1.18.2 deno_std v0.125.0 deno_std v0.125.0がリリースされました。 std/nodeへの機能追加などを中心に行われています。 全般 std/fs/copyやstd/node、std/osなどの--unstableが必要なモジュールを--unstableなしで使用した際に、型エラーではなく実行時エラーが発生するように修正されました。 node punycodeパッケージが実装されました url.resolve()が実装されました child_process.spawn()などでAbortSignalがサポートされました fs.createWriteStream()が実装されました fs.copyFile()で4引数の形式がサポートされました https://github.com/denoland/deno_std/commit/3b43d075ea6977e10bb1d9bd58fbeacc721a114e deno_stdへのdotenvモジュールの追加について dotenvモジュールをdeno_stdへ追加するPRが作成されています。 https://github.com/denoland/deno_std/pull/1877 経緯については下記のissueで議論されていますが、好意的な反応が多く、次のリリースなどで追加される可能性がありそうです。 https://github.com/denoland/deno/issues/13396 https://github.com/denoland/deno_std/pull/1877 Deno.Conn#setNoDelayとDeno.Conn#setKeepAliveの実装について Deno.ConnにsetNoDelayとsetKeepAliveを実装するPRがマージされました。(denoland/deno#13103) 今のところ、下記のように使用することが想定されています。 Deno.Conn#setNoDelay(true)を呼ぶとNagleアルゴリズムが無効化されます (TCP_NODELAYが設定される) Deno.Conn#setKeepAlive(true)を呼ぶとTCPキープアライブが有効化されます (SO_KEEPALIVEが設定される) この機能は次のDeno v1.19でリリースされる可能性がありそうです。 https://github.com/denoland/deno/pull/13103 Deno.run()でのIPCサポートについて Deno.run()でIPCをサポートするPRが作成されています。(denoland/deno#13566) 今のところ、下記のような方法での使用が想定されているようです。 Deno....

February 6, 2022

2021/01/24〜2022/01/30の最新情報

Deno v1.18.1 Deno v1.18.1がリリースされました。 Deno.networkInterfaces() Deno.networkInterfaces()が実装されました。 利用可能なネットワークインターフェースの一覧を取得できます。 const interfaces = Deno.networkInterfaces(); 利用するには--allow-envと--unstableが必要です。 deno lsp deno lspでDENO_CERTとDENO_TLS_CA_STOREの環境変数がサポートされました。 これらの環境変数については、下記を参照ください。 https://deno.land/manual@v1.18.1/getting_started/setup_your_environment#environment-variables https://github.com/denoland/deno/releases/tag/v1.18.1 deno_std v0.123.0 deno_std v0.123.0がリリースされました。 std/node 新しく下記APIが実装されています: os.networkInterfaces() process.uptime() child_process.execFile() std/testing assertObjectMatchでArrayBufferを含むオブジェクトが適切に比較されない問題が修正されました。 https://github.com/denoland/deno_std/releases/tag/0.123.0 deno_std/archive/tarの現代化について deno_stdにはtarファイルを取り扱うためにarchive/tarが提供されています。 このarchive/tarはDeno.Readerをベースに実装されています。 現在、archive/tarをStreams APIで書き直すことが検討されています。 この一環として、archive/streams.tsを追加するPRが作成されています。 https://github.com/denoland/deno_std/pull/1855 archive/streams.tsではTarEncoderStreamとTarDecoderStreamを提供し、StreamsベースのAPIを介してtarファイルの操作を行うことができます。 まだマージされていないものの、次のリリースなどで追加される可能性がありそうです。 https://github.com/denoland/deno_std/issues/1658 https://github.com/denoland/deno_std/pull/1855 Deno in 2021 Denoの公式ブログポストとしてDeno in 2021という記事が公開されました。 この記事では、2021年中にDenoに起きたできごとや変更内容などについて解説されています。 また、Deno v2へのロードマップの公開などもまもなく実施予定とのことです。 https://deno.com/blog/deno-in-2021 I’m porting tsc to Go SWCの作者であるkdy1氏により、I’m porting tsc to Goという記事が公開されました。...

January 30, 2022

2021/01/17〜2022/01/23の最新情報

Deno v1.18.0 Deno v1.18.0がリリースされました。 設定ファイルの自動読み込みがサポート 今までは、設定ファイルを読み込むためには--configの指定が必要でした。 $ deno run --config ./deno.json ./main.ts 今後は、--configが指定されなかった場合、deno.jsonまたはdeno.jsoncという名前の設定ファイルを自動で読み込まれるようになります。 Deno.testのsub-steps APIが安定化 Deno.testでテストケースのグループ化を行うためのsub-steps APIが安定化されました。 今後は--unstableを指定しなくても利用できます。 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!...

January 23, 2022

2021/01/10〜2022/01/16の最新情報

Deno v1.17.3 Deno v1.17.3がリリースされました。 このリリースでは、バグ修正を中心に実施されています。 変更点: deno installで--allow-allを付与した際に、パーミッションが分解されてスクリプトが作成されないように修正されました。 具体的には、今まではdeno installで--allow-allを指定すると、下記のようなスクリプトが作成されていました。 #!/bin/sh # generated by deno install exec deno run --allow-read --allow-write --allow-net --allow-env --allow-run --allow-ffi --allow-hrtime --quiet --unstable 'http://localhost:3000/bin.ts' "$@" この形式でスクリプトが作成されてしまうと、将来的に新しい--allow-*オプションが導入された際などにスクリプトが意図した通りに動作しなくなってしまうため、この修正が実施されました。 deno bundleやdeno compileの--outputオプションにディレクトリを指定できるようになりました。 ディレクトリを指定した際は、バイナリ名は自動で推論されるようです。 deno coverageコマンドで型チェックが行われなくなりました。 あるモジュールが複数のファイルからimportされていた場合などに、適切にカバレッジが収集されなくなる問題が修正されました。 WorkerでDeno.memoryUsage()が使えない問題が修正されました。 lib.deno_core.d.tsのエラーが修正されました。 https://github.com/denoland/deno/releases/tag/v1.17.3 deno_std v0.121.0 deno_std v0.121.0がリリースされました。 変更点: crypto: MD4がサポートされました。 http/file_server: --quietオプションによりログ出力を無効化できるようになりました。 node: zlibパッケージが実装されました。 node/fs: fs.write()とfs.writeSync()が実装されました。 node/http: ClientRequest#abortが実装されました。また、'response'イベントが発火されるように修正されました。 node/url: url....

January 16, 2022

2021/01/03〜2022/01/09の最新情報

Deno v1.17.2 Deno v1.17.2がリリースされました。 バグ修正などが中心に行われています。 主な変更点: deno testとdeno fmtで拡張子が.mts, .cjs, 及び.ctsのファイルがサポートされました。 JSON modulesを使用するとdeno bundleが失敗する問題が修正されました。 ファイルの末尾に空行があると、全コードが実行されていたとしてもカバレッジが100%にならない問題が修正されました。 SubtleCrypto.exportKeyでAES/HMACキーをJWK形式でエクスポートする際にbase64ではなくbase64urlを使用するように修正されました。 SubtleCrypto.deriveKeyでAES-CTRがサポートされました。 FFI経由で関数を呼ぶ際に不正な形式のパラメータを渡すとプロセスがパニックする問題が修正されました。 以下のような名前付き関数を使用したテストケースでdeno lspのテスト用コードレンズが動かない問題が修正されました。 Deno.test(function name() {}); Deno.addSignalListener()でSIGSEGVなどのシグナルのハンドラを登録しようとした際に、プロセスがパニックする問題が修正されました。 https://github.com/denoland/deno/releases/tag/v1.17.2 deno_std v0.120.0 deno_std v0.120.0がリリースされました。 crypto Tigerハッシュがサポートされました。 uuid version()が実装されました。 node https.request()が実装されました。 process.execPathが実装されました。 vm.runInThisContext()が追加されました。 process.exit()を使うと'exit'イベントが2回発火する問題が修正されました。 fs.readdir()でディレクトリが存在しなかったときにエラーが正しく扱われない問題が修正されました。 child_process.spawnでenvオプションに数値やBoolean型の値を指定できるようになりました。 path/glob joinGlobs()のextendedオプションのデフォルト値がtrueに変更されました。 fs/expand_glob expandGlob()のextendedオプションのデフォルト値がtrueに変更されました。 testing/asserts assertEqualsで0と-0が不一致と判断される問題が修正されました。 https://github.com/denoland/deno_std/releases/tag/0.120.0 設定ファイル(deno.json)の自動読み込みについて 以下のPRでDenoに設定ファイルの自動読み込み機能が実装されています (まだマージはされていません)...

January 9, 2022

2021/12/27〜2022/01/02の最新情報

ShadowRealmサポートについて DenoでのShadowRealmのサポートに向けて、deno_coreクレートでレルムの作成をサポートすること提案されています。 その準備として、まずはdeno_coreクレートでリファクタリングなどを進めることが提案されています。 https://github.com/denoland/deno/issues/13239 現在の進捗については上記issueから確認できます。 https://github.com/denoland/deno/issues/13239 https://github.com/tc39/proposal-shadowrealm Je Xia氏とDivy Srivastava氏がDeno Land Inc.にジョイン Je Xia氏(esm.shやAleph.jsの作者)と Divy Srivastava氏(Elsaやautopilot-denoなどの作者)がDeno Land Inc.にジョインしたようです。 現在、Je Xia氏は様々なサーバレス環境で動作させるためにAleph.jsのリライトなどを実施されているようです。 https://twitter.com/jexia_/status/1473582071238987777 https://twitter.com/jexia_/status/1473131210776150017 https://twitter.com/undefined_void/status/1476975389603811328 https://twitter.com/jexia_/status/1473582071238987777 Diplo Rustで書かれたDenoのスクリプトランナー兼パッケージマネージャ diplo.tomlという設定ファイルでタスクの定義や依存関係の管理などを行うようです。 https://github.com/Tricked-dev/diplo deno_python DenoからPythonコードを実行するためのモジュール FFI(Deno.dlopen)を利用してPythonのC APIを実行することで実現されているようです。 https://github.com/denosaurs/deno_python

January 2, 2022

2021/12/20〜2021/12/26の最新情報

Deno v1.17.1 Deno v1.17.1がリリースされました。 以下の新機能が追加されています。 deno lspでのテストのデバッグ用コードレンズ deno replでのImport Assertionsのサポート https://github.com/denoland/deno/releases/tag/v1.17.1 deno_std v0.119.0 deno_std v0.119.0がリリースされました。 std/hash Tigerハッシュのサポートが追加されました。 std/cryptoへのTigerハッシュの追加は次のリリース以降になりそうです (#1749) std/uuid uuid/mod.tsでvalidate関数が実装されています。 与えられた文字列が正しい形式のUUIDであるかをチェックできます。 https://doc.deno.land/https://deno.land/std@0.119.0/uuid/mod.ts/~/validate std/node util.debuglog()が利用できるようになりました。 https://github.com/denoland/deno_std/releases/tag/0.119.0 Denoでネットワークインターフェースを取得するためのopが実装 下記issueにて提案されていたネットワークインターフェース(IPアドレス、MACアドレス)を取得するための機能が部分的に実装されました。 Get all the network interfaces in Deno 以下のPRではopのみが実装されており、JavaScript APIはまだ実装されていません。(今のところ、利用するためには--allow-envの指定が必要で、JavaScript APIの名前はDeno.networkInterfacesになりそうです。) feat(ext/net): add op_network_interfaces リリースされるバージョンはまだ未定ですが、早ければ次のv1.18で入る可能性がありそうです。 Get all the network interfaces in Deno feat(ext/net): add op_network_interfaces

December 26, 2021

2021/12/13〜2021/12/19の最新情報

Deno v1.17.0 Deno v1.17.0がリリースされました。 --no-check=remoteのサポート リモートモジュール(http:またはhttps:で始まるモジュール)の型チェックのみが無効化されます。 $ deno run --no-check=remote mod.ts Import assertionsのサポート Import assertionsが実装されました。 現在はJSON modulesのみがサポートされています。 import modules from "./modules.json" assert { type: "json" }; Object.keys(modules); Deno.testのシグネチャの向上 Deno v1.16.4までは下記の形式のみがサポートされていました。 Deno.test(name: string, fn: (t: Deno.TestContext) => void | Promise<void>): void Deno.test(t: Deno.TestDefinition): void v1.17で以下のオーバーロードが追加され、使い勝手が向上しました。 // オプションを第2引数、テスト関数を第3引数で指定 Deno.test("foo", { permissions: { read: false } }, () => { Deno.cwd(); }); // オプションを第1引数、テスト関数を第2引数で指定 Deno.test({ name: "bar", ignore: Deno....

December 19, 2021

2021/12/06〜2021/12/12の最新情報

Deno.spawnDenoを追加する提案 以下のissueでDeno.spawnDenoというAPIの追加が提案されています https://github.com/denoland/deno/issues/13041 背景として、まずdenoland/deno#11016でDeno.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のサブプロセスを起動する機能のようです。 起動する際にWorkerのdeno.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....

December 12, 2021

2021/11/29〜2021/12/05の最新情報

Deno v1.16.4 Deno v1.16.4がリリースされました。 このリリースはバグ修正がメインです。 変更点: SubtleCrypto.encryptで指定されたキーとアルゴリズムが一致しない場合、例外が投げられるようになりました deno testのOpサニタイザーの安定性が向上しました WebSocketStreamの作成後にAbortControllerで中断すると、AbortErrorではなくDeno.errors.BadResourceエラーが発生する問題が修正されました Worker#terminateを呼ぶと、プロセスがまれにパニックする問題が修正されました WorkerのメインモジュールでTop-Level Awaitが使われておりなおかつWorkerが作成後即座にterminateされると発生した模様 https://github.com/denoland/deno/releases/tag/v1.16.4 deno_std v0.117.0 deno_std v0.117.0がリリースされました。 httpモジュールでの新機能の追加やnodeモジュールのNode.jsとの互換性の向上が実施されています。 httpモジュール serveなどの関数でonErrorオプションがサポートされ、handlerで発生したエラーを補足できるようになりました const handler = (request: Request) => { throw new Error("Hello"); }; const servePromise = serve(handler, { addr: "localhost:3000", onError(_error) { return new Response("Internal Server Error", { status: 500 }); }, }); nodeモジュール readline: createInterface()が実装されました process: process.stdin.read()で読み込みが非同期に行われるようになりました buffer: Bufferでbase64エンコーディングがサポートされました....

December 5, 2021