2021/07/11〜2022/07/17の最新情報

Deno v1.23.4 Deno v1.23.4がリリースされました。 V8 Fast API Calls+JITコンパイルによるFFIの最適化 V8 Fast API Callsとtinyccを使用したJITコンパイルにより、FFI(Deno.dlopen)の最適化が行われています。 Deno.dlopenを呼んだ際に、下記の条件が満たされる外部関数へのバインディングに対して、自動でFast API Calls+JITコンパイルによる最適化が適用されます。 非Windows環境であること (Windowsではまだこれらの最適化がサポートされていません) パラメータ及び戻り値の型にスカラ型のみが含まれる場合 もしこれらの最適化を無効化したい場合は、callbackオプションにtrueを指定する必要があります。 const lib = Deno.dlopen( "some_lib.so", { some_func: { parameters: ["usize", "usize"], result: "usize", callback: true }, } ); 細かな詳細については、deno_ffiも参照ください。 perf(ext/ffi): leverage V8 Fast Calls #15125 fix(ext/ffi): trampoline for fast calls #15139 fix(ext/ffi): allow opting out of fast ffi calls #15131 その他の変更点 Request#json()などに続けてRequest....

July 17, 2022

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/01〜2021/11/07の最新情報

2021年のDeno Advent Calendarが公開 Qiitaで2021年のDeno Advent Calendarが公開されました。 https://qiita.com/advent-calendar/2021/deno deployctlがアーカイブ Deno Deployのコマンドラインツールであるdeployctlがアーカイブされました。 今後は代わりにDeno CLIを使って開発していくようアナウンスされています。 Deno Deploy Beta 3が来たぞ Freshのアップデート PreactベースのWebフレームワークであるFreshがアップデートされ、MiddlewareとCSPのサポートが追加されました。 Middlewareサポート Middlewareを利用する際は、pagesディレクトリ配下に下記のいずれかの名前のファイルを用意し、handler関数をexportする必要があります。 /_middleware.tsx /_middleware.ts /_middleware.jsx /_middleware.js export async function handler(req: Request, handle: () => Promise<Response>) { const start = Date.now(); const resp = await handle(); const end = Date.now(); console.log(`${req.method}${req.url}- ${end - start}ms`); return resp; } CSPサポート CSPサポートを有効化したいときは、対象ページでcspオプションにtrueを設定したconfigオブジェクトをexportします。 import type { PageConfig } from "....

November 7, 2021

2021/06/28〜2021/07/04の最新情報

Deno v1.11.3のリリース Denoのv1.11.3がリリースされました。 このリリースではバグ修正などを中心に実施されています。 変更点: Deno.emit()でグラフエラーの内容がdiagnostics配列に含まれるようになりました。 存在しないファイルをimportしようとした際などに、その内容がdiagnostics配列で報告されるようになりました。 https://github.com/denoland/deno/security/advisories/GHSA-xpwj-7v8q-mcgj の修正により、–allow-netパーミッションなしでDeno.emitを実行すると、リモート依存がバンドルに含まれないように修正されたことによる影響のようです console.logなどの呼び出し時にエラーが発生すると、denoプロセスがパニックする問題が修正されました fetch APIでユーザが指定したHostヘッダが無視されるように修正されました。 SignalStream#disposeを呼んだあとにもSignalStream#thenに渡したコールバックが呼ばれてしまう問題が修正されました。 SignalStreamはDeno.signal()で返却されるオブジェクトです。 Deno.signal(s)がdenoプロセスを終了しないようブロックしてしまう問題が修正されました。 localstorageの最大容量が5MBから10MBに拡大されました。 REPLなどでEvent.prototypeを評価しようとすると例外が発生する問題が修正されました。 Eventの読み込み専用プロパティへ書き込みができなくなりました。(https://developer.mozilla.org/en-US/docs/Web/API/Event) deno lspコマンドから--parent-pidフラグが削除されました。 https://github.com/denoland/deno/releases/tag/v1.11.3 Denoの2021年Q3ロードマップが公開 Denoの2021年Q3のロードマップが公開されました。 今後、Denoの本体やdeno lspなどで実施される予定の変更内容が公開されています。 https://github.com/denoland/deno/issues/11168 deno_std v0.100.0のリリース deno_stdのv0.100.0がリリースされました。 変更点: testing: assertEqualsなどの関数で文字列どうしを比較した際に、差分が大幅に見やすくなりました。 testing: assertExists関数のシグネチャがType Guardを使用して宣言されるように修正されました。 node/events: EventEmitter#addListenerがNode.jsと同様の挙動をするように修正されました。 path/glob: tsconfig.jsonで"noImplicitAny": falseを指定した際にタイプエラーが発生する問題が修正されました。 https://github.com/denoland/deno_std/pull/987 Oak v7.7.0 DenoのWebフレームワークであるOakのv7.7.0がリリースされました。 主な変更点: Context#sendEventsでkeepAliveオプションが追加され、Server-Sent Eventsサーバでコネクションのポーリングが行えるようになりました。 proxyミドルウェアでクエリパラメータが送信されない問題が修正されました。 https://github.com/oakserver/oak/commit/5403ac08ddf295cda388ac4f1f12f630d2e77a2f Trex v1.8.0 Denoのパッケージ管理ツールであるTrexのv1.8.0がリリースされました。 このリリースではtrex execコマンドがサポートされ、deno.land/xで公開されているCLIツールをインストールせずに直接実行できるようになりました。...

July 4, 2021

2021/03/29〜2021/04/04の最新情報

Deno本体の最新情報 Deno v1.8.3がリリース Deno v1.8.3がリリースされました。このリリースでは、deno lspへの機能の追加やバグ修正などが行われています。 変更点: deno lspでimportの補完がサポートされた deno lspでtextDocument/selectionRangeが実装された WebSocket#closeですでに閉じているコネクションを再び閉じようとしたときに、例外が投げられないように修正された AbortController.abort()が追加された TypeScriptのlibとしてdom.asynciterableが追加された(Denoのいずれかのバージョンで誤って削除されてしまったようです) https://github.com/denoland/deno/releases/tag/v1.8.3 deno_std v0.92.0がリリース deno_stdのv0.92.0がリリースされました。 変更点: io/bufio: Deno Deployに対応した node/fs: symlinkとsymlinkSyncが実装された node/util: format関数が実装された io: io/buffer及びio/utilが追加された (Deno v2.0に向けて、Deno.Buffer/readAll/readAllSync/writeAll/writeAllSyncをDeno名前空間からstdへ移行することが目的のようです) https://github.com/denoland/deno_std/releases/tag/0.92.0 Deno Deployが公開された Deno Deployが公開されました。 Deno DeployはCDN Edge上でTypeScriptやWebAssemblyなどを動作させることができるサービスです。Cloudflare WorkersのAPIと互換性があります。 https://deno.com/deploy/docs サードパーティモジュールなどの最新情報 Snel - DenoでSvelteアプリを開発するためのツール SnelはDenoでSvelteアプリを開発するためのツール/フレームワークです。 .svelteファイルをJavaScriptファイルへコンパイルしたり、HMRを搭載したdevサーバなどが提供されています。 将来的にはSSRやSSGなどの機能も提供される予定のようです。 https://github.com/crewdevio/Snel Sift - Deno Deployのルーティングライブラリ SiftはDeno Deployのルーティングライブラリです。 path-to-regexpでサポートされている形式で、ルーティングを定義することができます。 他にも、静的ファイルの配信やJSXのレンダリングなどがサポートされています。 https://github.com/satyarohith/sift deno-dom - Denoで利用できるDOM APIの実装 deno-domは、Denoから利用することのできるDOM APIの実装を提供しています。...

April 4, 2021

2021/02/01〜2021/02/07の最新情報

Deno本体の最新情報 Deno v1.7.2がリリース Deno v1.7.2がリリースされました。これに合わせて、deno_std v0.86.0もリリースされています。 主な変更点: deno lspでtextDocument/codeLens及びtextDocument/codeActionが実装された WPTにパスするよう、File及びBlobの実装がリライトされた https://github.com/denoland/deno/releases/tag/v1.7.2 https://github.com/denoland/deno_std/releases/tag/0.86.0 deno_stdのリポジトリがdeno本体のリポジトリから分離された Denoには標準モジュールとしてdeno_stdが存在します。 今まで、このdeno_stdの開発は、deno本体と同じリポジトリ内(denoland/deno)で行われていました。 この度、deno_stdが個別のリポジトリへと分離されました。 これにより、deno_stdの開発時にRustのセットアップが必要なくなるため、deno_stdへのコントリビューションが行いやすくなるのではないかと思われます。 https://github.com/denoland/deno_std サードパーティモジュールの最新情報 emacs-ng emacs-ngはEmacsのフォークです。 以下のような機能を備えているようです: Denoを組み込むことで、Emacs内でJavaScript/TypeScriptコードの実行を可能とする MozillaのWebRenderをサポート https://github.com/emacs-ng/emacs-ng deno-postgres v0.7.0がリリースされた deno-postgres v0.7.0がリリースされました。 v0.6.0までは、deno-postgresがサポートしていないデータ型を利用しようとすると、例外が発生しました。 このリリースにおいて、現時点でdeno-postgresでサポートされていない全てのデータ型が、JavaScriptのStringとして返却されるように挙動が変更されました。 将来的には、ライブラリの利用者が各データ型のハンドリング方法を制御できるようにするために、カスタムのハンドラを登録できるようにすることも検討されているようです。 https://github.com/denodrivers/postgres/issues/239 https://github.com/denodrivers/postgres/releases/tag/v0.7.0 Trex v1.5.0がリリースされた TrexはDenoのパッケージマネージャです。 このリリースではtrex lsコマンドが実装され、インストールされた依存パッケージの一覧を表示できるようになりました。 https://github.com/crewdevio/Trex/releases/tag/v1.5.0 Deno Module Visualizer Deno Module Visualizerが公開されました。 Deno Module Visualizerは、あるモジュールとその依存関係をGraphvizを使って可視化してくれます。 使用例: deno-postgres v0.7.0 deno-redis v0.17.0 https://deno-visualizer.danopia.net/

February 7, 2021