Deno v1.45

Deno v1.45がリリースされました。 この記事では主な変更点などについて解説します。 ワークスペース 先週紹介したワークスペースに関する改善が正式にリリースされました。 deno.jsonでワークスペースを定義するためのworkspacesキーがworkspaceにリネームされています。 また、オブジェクト形式でワークスペースに関する設定が定義できるようになりました (cli/schemas/config-file.v1.json#L607-L629) { "workspace": { "members": ["./member1", "./member2"] } } 現時点では設定項目としてworkspace.membersのみが存在しますが、今後、追加される可能性もありそうです。 このworkspace.membersにはdeno.jsonを含むディレクトリだけでなく、package.jsonを含むディレクトリをワークスペースのメンバーとして指定することもできるようです。 deno_stdでもすでに新しいフォーマットへ移行されているようです。 chore: use new format for workspaces and re-enable using Deno canary and v1.x (denoland/deno_std#5375) Node.js互換性の改善 npm workspacesのサポート 先週紹介したnpm workspacesに関するサポートが正式にDenoに導入されました。Denoがpackage.jsonのworkspacesキーを認識してくれます。 以下のようなワイルドカード形式でのワークスペースメンバーの指定もサポートが導入されています。 { "workspaces": ["packages/*"] } また、deno publishコマンドでもnpm workspacesに関するサポートが導入されているようです。#24507によると、以下のような構成のプロジェクトにおいてdeno publishを実行すると、packages/member-1とpackages/member-2がJSRに公開されるようです。 project/ package.json ("workspaces": ["packages/*"]が設定) packages/ member-1/ pakcage.json jsr.json member-2/ package.json jsr....

July 14, 2024

2024/05/27〜2024/06/02の最新情報

Deno v1.44 Deno v1.44がリリースされています。 以下に内容をまとめたため、よろしければこちらを参照いただければと思います。 Deno v1.44 deno_stdのリリース deno_stdがリリースされています。 @std/uuid@0.224.3 @std/uuid/v1 generateのbufとoffset引数が非推奨化されています。 また、V1OptionsがGenerateOptionsにリネームされています。 @std/data-structures@0.225.0 BinarySearchNodeがprivate APIに変更されています Hono v4.4.0 Hono v4.4.0がリリースされています。 HonoがJSRに公開されています。 @hono/hono

June 2, 2024

2024/05/13〜2024/05/19の最新情報

Deno v1.43.4 Deno v1.43.4がリリースされました。このリリースはバグ修正やパフォーマンス改善などがメインです。 deno publish expandoプロパティのサポート deno publish(fast check)やdeno docでexpandoプロパティが認識されない問題が修正されています。 --dry-runの改善 deno publish --dry-runの実行時に、以下のケースでエラーが発生するように挙動が改善されています。 バージョン指定がないjsr:specifierが検出された場合 deno.jsonが存在しない場合 Node.js互換性の改善 node:worker_threads メインスレッドとWorkerスレッドでモジュールキャッシュが分離されました。SvelteKitなどのパッケージがこの挙動に依存しているようです。(#23461) node:os homedirの互換性が改善されています。 node:fs EISDIRが発生する状況下でReferenceErrorが発生してしまう問題が修正されています。 Deno API "junction"に関する型定義の追加 Deno.SymlinkOptionsのtypeプロパティの型定義に"junction"が追加されています。 "junction"のサポートは以前に実装されていたものの、型定義が追加されていなかったようです。 ReadableStream ReadableStreamのSymbol.asyncIteratorメソッドが返却する非同期イテレーターに対して.return()の直後に.next()を呼ぶと、.next()が返却したPromiseが.return()が返却したものよりも先に解決される問題が修正されています。 Update ongoing promise in async iterator return() method #22389 その他 DenoがTypeScriptなどのファイルをトランスパイルする際に、トランスパイル後のソースからコメントが削除されてしまう問題が修正されています。 Deno v1.43.5 Deno v1.43.5がリリースされています。 Deno v1.43.4でいくつかのnpmパッケージを使おうとするとエラーが発生していたため、その修正が行われています。(#23862) deno_stdのリリース deno_stdのリリースが行われています。主要な変更点だけ抜粋します。 @std/collections@0.224.2 invertとinvertByが追加されています。オブジェクトのキーと値を入れ替えることができます。 const actual = invert({ "foo": 1, "bar": 2 }); const expected = { "1": "foo", "2": "bar" }; assertEquals(actual, expected); freshのホームページの新デザイン freshのホームページのデザインが更新されています。...

May 19, 2024

2024/05/06〜2024/05/12の最新情報

Deno v1.43.2 Deno v1.43.2がリリースされています。 N-API napi_get_elementとnapi_set_elementがオブジェクトでも動作するように改善されています。この改善により、duckdb-nodeのexampleが動くようです。 deno lsp いくつかのQuickfixの実行時にDebug Failureが発生することのある問題が修正されています。 また、deno lspからnpmパッケージがキャッシュできないことがある問題も修正されています。 deno publish パッケージでクラスがexportされていて かつ その基底クラスがパッケージでexportされていない場合、deno publishが失敗する問題が修正されています。 deno test deno test --docで適切に型チェックが行われなくなっていた問題が修正されています。 ランタイム Deno v1.43から/etc配下のファイルへの読み書きに--allow-allフラグが要求されていた問題が修正されています。 Web API createImageBitmapにBlobオブジェクトを渡すとTypeErrorが発生する問題が修正されています。 また、importScriptsでスクリプトが並列に読み込まれるように改善されています。 TypeScript Denoに組み込まれたTypeScriptがv5.4.3からv5.3.5へアップデートされています。 Deno v1.43.3 Deno v1.43.3がリリースされています。 ランタイム Homebrewなどでインストールした場合にDenoがパニックする問題が修正されています。 また、v1.43.2での/etcに関する変更に合わせて、/dev/fd配下のファイルを--allow-allを指定しないと読み込めなかった問題が修正されています。 deno lsp usingまたはawait usingを使っている場合でも補完が動作するように改善されています。 deno task deno taskでnpx <npmバイナリ> ...のように定義されたスクリプトを実行する際に、対象のnpmバイナリをうまく検出できないことがあった問題が修正されています。 deno_stdのリリース (2024/05/07) deno_stdの以下のパッケージで最新バージョンがリリースされています (release-2024.05.07) @std/assert@0.225.1 @std/bytes@1.0.0-rc.1 @std/cli@0.224.1 @std/collections@0.224.1 @std/log@0.224.1 deno_std v1向けに、各モジュールごとに独立してリリースする運用が開始されたようです。 主要な変更についていくつか紹介します。 @std/bytes@1.0.0-rc.1 特に大きな変更はないものの、@std/bytesのv1に向けたRCバージョンが公開されています。 @std/cli@0.224.1 @std/cli/spinner.tsでNO_COLOR環境変数によってスピナーに色を付けないように制御できるような改善が導入されています。 @std/collections@0.224.1 chunkに不正なサイズが与えられた際に、ErrorではなくRangeErrorがthrowされるように改善されています。 @std/log@0.224.1 FileHandlerにバッファーサイズを調節するためのbufferSizeオプションが追加されています。...

May 12, 2024

Deno v1.43

Deno v1.43がリリースされました。 この記事では主な変更点などについて解説します。 HTTPサーバー deno serveコマンド HTTPサーバーの起動を簡略化するためにdeno serveコマンドが追加されました。 使い方などについてはこちらのページを参照いただければと思います。 公式ブログによると、将来的にはロードバランシングなどの仕組みをdeno serveコマンドに導入することなども検討されているようです。 Request.signalのサポート Deno.serveのハンドラーに渡されるRequestオブジェクトでsignalプロパティがサポートされています。 これについても詳細はこちらのページを参照いただければと思います。 Deno.HttpServer.addr Deno.HttpServerにaddrプロパティが追加されています。HTTPサーバーの起動ポートなどを確認できます。 const server = Deno.serve((req) => new Response("OK")); console.info(server.addr.port); // => 8000 TypeScript compilerOptions.jsxImportSourceTypes deno.jsonにcompilerOptions.jsxImportSourceTypesというDeno独自のオプションが導入されました。 { "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "npm:react@18.3.1", "jsxImportSourceTypes": "npm:@types/react@18.3.1" } } JSX Transformを有効化した場合、TypeScriptは<some-jsx-package>/jsx-runtimeをimportするようなコードを生成します。 // 例) Reactの場合、以下のようなコードが生成されます import {jsx as _jsx} from 'react/jsx-runtime'; // ... 元々、この<some-jsx-package>/jsx-runtimeのimportに対して適用すべき型定義を判断する方法がDenoには存在せず、JSX Transformを有効化してReactなどを使う場合に型エラーが発生する課題がありました。(TypeScriptによって自動生成されるコードのため@deno-typesプラグマを適用することもできない) この課題を解消するため、compilerOptions.jsxImportSourceTypesが導入されたようです。このオプションを指定することで、上記のような<some-jsx-package/jsx-runtimeのimportに対して、Denoがどの型定義を適用すればよいか判断できるようになります。また、@jsxImportSourceなどと同様に、ソースコード内で@jsxImportSourceTypesプラグマを指定することも可能です。 /** @jsxImportSourceTypes npm:@types/react@18.3.1 */ Preactの場合はパッケージ内に型定義が同梱されているのでこの問題が起きなかったようなのですが、Reactの場合は@types/reactで別管理されている関係もあり、専用の解決策が必要と判断されて導入されたようです。 https://github....

May 5, 2024

2024/04/22〜2024/04/28の最新情報

Deno v1.43.0について Deno v1.43.0は先週にリリース予定だったようですが、延期されることになりました。 ただし、直近でv1.43.0向けと思われる機能がいくつか入っていたので紹介します。(⚠️正式にリリースされる際には仕様などが変わる可能性があります) deno serveコマンド deno serveコマンドが追加されています。 以下のようにfetch関数を実装したオブジェクトをdefault exportしたファイルを用意します。 // main.ts export default { fetch(req: Request) { return new Response("OK"); }, }; このファイルを指定してdeno serveコマンドを実行すると、HTTPサーバーが起動されます。 $ deno serve main.ts deno serve: Listening on http://localhost:8000/ $ curl http://localhost:8000 OK ポートはデフォルトで8000が使用されますが、--portオプションで変更が可能です。 Deno.serveでRequest.signalがサポート Deno.serveのハンドラーに渡されれるRequestオブジェクトでsignalプロパティがサポートされています。先程のdeno serveコマンドでも利用可能です。 export default { fetch(req: Request) { // レスポンスがクライアントへ送信されると`abort`が発火します req.signal.addEventListener("abort", () => console.info("aborted")); return new Promise<void>((resolve) => { setTimeout(() => { resolve(new Response("OK")); }, 5000); }); }, }; V8コードキャッシュ V8によって生成されたコードキャッシュを保存する仕組みが導入されています。...

April 28, 2024

2024/04/15〜2024/04/21の最新情報

deno_stdの安定化について deno_stdの安定化とそれに関する運用について以下のようなissueが公開されています。 The Road to Stabilizing the Standard Library (denoland/deno_std#4600) 今後の運用と計画について 今までdeno_stdは全てのモジュール(std/assert, std/pathなど)がdeno.land/stdで単一のパッケージとして公開されていました。JSRがリリースされたことで、各モジュールを個別のパッケージとして公開することが可能になりました。そのため、今後は@std/assertや@std/pathなどの各パッケージごとに独立してバージョンを割り当てて管理することが想定されているようです。 また、今後はdeno_stdのリリースをDeno本体とは独立して行うことも計画されているようです。 Deno v1.42.4 Deno v1.42.4がリリースされています。 Node.js互換性の改善 node:vmでrejectされたPromiseがうまく取り扱われるように改善されています。これによりDenoでdocusaurus buildコマンドが動作するようになったようです。そのためdeno-docsリポジトリではDenoを使用してDocusaurusのビルドを実行するように変更が行われています。 use Deno (denoland/deno-docs#423) deno publish classのprivate指定されたプロパティでdefinite assignment assertionが使用されている場合に、deno publishコマンドが失敗する問題が修正されています。 kvdex v1 kvdex v1がリリースされています。 JSRパッケージが公開されています。また、@deno/kvもサポートすることで、Node.jsやBunでの利用がサポートされているようです。

April 21, 2024

2024/04/08〜2024/04/14の最新情報

Deno v1.42.3 Deno v1.42.3がリリースされています。 deno run --inspect Inspector用のポートがすでに使用されていた場合に、deno run --inspectがパニックする問題が修正されています。 nodeModulesDir (--node-modules-dir) "nodeModulesDir": trueの有効化時に、同一npmパッケージが重複して二重に読まれてしまうことのある問題が修正されています。 jsr 型チェックなどに関する様々なバグが修正されています。 dynamic importでjsr:がうまく解決されないことのある問題が修正されています。 オーバーロード関数の定義にスプレットパラメータが使用されているものがあった場合、deno publishなどによる型チェックが失敗する問題が修正されています。 https://github.com/denoland/deno/pull/23187 deno_std v0.222.0 deno_std v0.222.0がリリースされています。 std/testing/bdd.ts 以下のエイリアスが追加されています。 test (itのエイリアス) before (beforeAllのエイリアス) after (afterAllのエイリアス) std/expect expect.addSnapshotSerializersが実装されています。 std/semver std/semver/types.ts Comparatorオブジェクトの非推奨化されていたsemverプロパティが削除されています。 greaterThanRange/lessThanRange 新しいAPIとしてgreaterThanRangeとlessThanRangeが追加されました。 std/console std/consoleがstd/cliに統合されています。std/consoleはまだ削除されずに残っているものの非推奨化されています。 std/crypto/crypto.ts 下記APIが非推奨化されています。 FNVAlgorithms wasmDigestAlgorithms (DIGEST_ALGORITHM_NAMESへの移行が推奨) WasmDigestAlgorithm (DigestAlgorithmNameへの移行が推奨) std/encoding/varint.ts std/encodingにおける他のモジュールとの命名の一貫性向上のため、以下のAPIが非推奨化されています。 非推奨API 移行先 decode decodeVarint decode32 decodeVarint32 encode encodeVarint std/yaml/schema 下記の定数がリネームされています。...

April 14, 2024

2024/04/01〜2024/04/07の最新情報

Deno v1.42.1 Deno v1.42.1がリリースされています。 deno publish compilerOptions.{noUnusedParameters,noUnusedLocals}にtrueが設定されていると、deno publishの実行時にリモートモジュールで型エラーが発生する問題が修正されています。 node:tty ReadStreamでTypeError: Cannot read properties of undefinedエラーが発生する問題が修正されています。 Introducing Simpler Project Creation in Deno Deploy Deno公式からDeno Deployのアップデートに関する記事が公開されています。 Introducing Simpler Project Creation in Deno Deploy プロジェクトを新規作成する際のフローに関して、以下のような改善が行われているようです。 既存のGitHubリポジトリをDeno Deployに接続する際のフレームワークの自動検出がサポート 任意でビルドステップの指定がサポート。ビルド時に実行するコマンドを入力することで、Deno Deployが自動でGitHub Actionsの設定ファイルを作成してくれるようです deno.re deno.reというモジュールレジストリが公開されています。 モジュールの公開などにあたって特に作業などは不要で、GitHubに公開された任意のモジュールをタグまたはコミットを指定して読み込むことができるようです。また、必要に応じてモジュールのminifyなども実行してくれるようです。 thoth thothというDeno KVをベースに全文検索機能を提供してくれるjsrパッケージが公開されています。

April 7, 2024

2024/03/25〜2024/03/31の最新情報

Deno v1.42 Deno v1.42がリリースされています。 以下に内容をまとめたため、よろしければこちらを参照いただければと思います。 Deno v1.42 deno_std v0.221.0 deno_std v0.221.0がリリースされています。 @std/expect 以下のAPIが実装されました。 expect.closeTo expect.stringContaining expect.stringMatching @std/crypto FNVハッシュ関連の実装がTypeScriptからRust+Wasmベースへ移行されています。 これによりWeb StreamsなどのIterableな入力も処理できるように改善されているようです。 https://github.com/denoland/deno_std/pull/4515 Deno v2におけるBYONMのデフォルトでの有効化について Deno v2におけるBYONMのデフォルトでの有効化に関するissueが作成されています。 Enable BYONM by default for Deno 2 (#23151) まずDENO_FUTURE=1が指定された際にBYONMをデフォルトで有効化することが検討されているようです。 @david/publish-on-tag Gitタグの作成時にGitHub Actionsからjsrへパッケージを公開するためのツールが公開されています。 @david/publish-on-tag

March 31, 2024