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

Denoのnpm workspacesサポートについて Deno本体にnpm workspacesのサポートを追加するPRがマージされています。おそらくDeno v1.45.0あたりでリリースされる可能性がありそうです。 feat: npm workspace and better Deno workspace support (#24334) Denoがpackage.jsonのworkspacesフィールドを認識してくれるようです。 現状では、各ワークスペースの依存関係はプロジェクトのルートディレクトリ直下のnode_modulesディレクトリにまとめてインストールされるようです。今後、この挙動は改善が検討されているようです。 また、以下のようなワイルドカードによる指定についてもまだサポートはされておらず、今後、対応が検討されているようです (#24420) { "workspaces": ["packages/*"] } Denoのワークスペース機能への変更 この対応に合わせて、Denoのワークスペース機能にも変更が加わっており、deno.jsonのworkspacesキーがworkspaceにリネームされています。 また、このdeno.jsonのworkspaceにはpackage.jsonを含むディレクトリをワークスペースのメンバーとして指定できるように改善されています。(今まではdeno.jsonを含むディレクトリのみがワークスペースのメンバーとしてサポートされていました) deno_stdのリリース deno_stdのリリースが行われています。 @std/crypto@1.0.0 @std/crypto@1.0.0がリリースされました。 @std/assert@1.0.0-rc.3 @std/assert@1.0.0-rc.3がリリースされています。 各ファイルの名前からassert_のプレフィックスが削除されています。例として、@std/assert/assert_equalsは@std/assert/equalsに、@std/assert/assert_rejectsは@std/assert/rejectsへリネームされています。 @std/csv@1.0.0-rc.1 @std/csv@1.0.0-rc.1がリリースされています。 各ファイルの名前からcsv_プレフィックスが削除されています。例えば、@std/csv/csv_parse_streamは@std/csv/parse_stream、@std/csv/csv_stringify_streamは@std/csv/stringify_streamにリネームされています。 また、ReadOptionsが非公開APIに変更されています。 @std/expect@1.0.0-rc.1 @std/expect@1.0.0-rc.1がリリースされています。 Immutable.jsのオブジェクトに関するサポートが削除されています。 また、expect().toHaveBeenNthCalledWith()で0以下の数値が指定された際に、例外が発生するように挙動が修正されています。 @std/json@1.0.0-rc.2 @std/json@1.0.0-rc.2がリリースされています。 各ファイル名からjson_プレフィックスが削除されています。例えば、@std/json/json_parse_streamは@std/json/parse_stream、@std/json/json_stringify_streamは@std/json/stringify_streamにリネームされています。 @std/semver@1.0.0-rc.1 @std/semver@1.0.0-rc.1がリリースされています。 非推奨化されていた以下のAPIが削除されています。 rangeMax() (greaterThanRange()への移行が推奨) rangeMin() (lessThanRange()への移行が推奨) testRange() (satisfies()への移行が推奨) また、SEMVER_SPEC_VERSION定数が削除されており、@std/semver/constantsも非公開モジュールに変更されています。 @std/yaml@1.0.0-rc.1 @std/yaml@1.0.0-rc.1がリリースされています。 APIの削除 parse()APIの以下のオプションが削除されています。 legacy filename listener TypeとSchema型も非公開になりました。parse()のschemaオプションには文字列を渡せるのでそちらへの移行が推奨されます。 また、parseAll()のiterator引数が削除されています。 リネーム DumpOptionsがStringifyOptionsにリネームされています。...

July 7, 2024

2024/06/17〜2024/06/23の最新情報

History of WebGPU in Deno (Web Engines Hackfest ‘24) Web Engines Hackfest 2024でのcrowlKats氏の発表内容が公開されています。 動画 スライド DenoにおけるWebGPU APIの実装やWebGPU APIが一時的に削除された背景、WebGPU APIに関する今後の計画などについて解説されています。今後、OffscreenCanvasなどの実装も検討されているようです feat(ext/canvas): OffscreenCanvas (#23773) Deno v1.44.3 Deno v1.44.3がリリースされています。 deno lsp ワークスペース直下以外の各ディレクトリに存在するdeno.jsonが認識されるように改善されています。 feat(lsp): multi deno.json resolver scopes (#24206) この改善によって、例えば、以下のような構成のプロジェクトにおいて、各deno.jsonがdeno lspによって認識されるようです。 ./frontend/deno.json ./backend/deno.json ./backend/sub_dir/deno.json 上記のPRによると、各deno.jsonごとに型チェックの振る舞いや設定などを分離できるようにすることなども今後、検討されているようです。 Node.js互換性の改善 node:net: BlockListとSocketAddressが追加されています。 node:http: Server#closeでGraceful shutdownが行われるように改善されています。 node:diagnostics_channel: dd-traceのサポート向けにNode.jsとの互換性が改善されています。 AbortSignal AbortSignal.timeoutのリソースリークが修正されています。 Deno v1.44.4 Deno v1.44.4がリリースされています。 Deno.addSignalListener Deno.addSignalListenerで'SIGPOLL'と'SIGUNUSED'がサポートされています。 node:fs DirentにparentPathとpathプロパティが追加されています。 deno_stdのリリース deno_stdがリリースされています。...

June 23, 2024

2024/06/10〜2024/06/16の最新情報

Deno v1.44.2 Deno v1.44.2がリリースされています。 CLI deno lsp textDocument/formattingで DocumentFormattingParamsのoptionsが考慮されるように挙動が改善されています。(LSP: Formatting ignores passed formatting options (#23257)) また、auto importにおいて.d.tsなどが提案されるべき場面で、誤って.jsが提案されてしまうことがある問題が修正されています。(lsp: import suggestion imports .d.ts file as .js (#23017)) deno lint BOM付きのUTF-8形式のファイルでdeno lintがパニックする問題が修正されています。 バグ修正 複数のDenoプロセスが並列で同時にリモートモジュールのダウンロードを行っていると、処理が失敗することがある問題が修正されています。 また、dynamic importをするとプロセスがハングすることがある問題が修正されています。(Investigating hung/paused process while dynamically importing async module (#24098)) Node.js互換性の改善 Node-API Node-APIの実装がリライトされています。これにより、Prismaがハングしてしまう問題が解消されるようです。(Prisma library using N-API hangs often (#24010)) node:child_process stdioオプションで'ipc'とファイルディスクリプタ(整数)の指定がサポートされました。 node:http ServerResponse#setHeaderのvalue引数に配列が指定された場合の挙動が修正されています。 今までの挙動: 配列の各値をカンマ区切りで結合し、単一のヘッダーとして追加されていました。 Deno v1.44.2: 配列の各要素ごとにヘッダーが追加されます。 node:vm Scriptにおける以下の問題が修正されています。 node:processがimportできない問題 (#22441) globalが未定義になる問題 (#23852) メモリリーク (#23913) WebSocket WebSocketでBlobを送信する際に、順番通りにメッセージが送られない問題が修正されています。(websocket....

June 16, 2024

2024/06/03〜2024/06/09の最新情報

Deno v1.44.1 Deno v1.44.1がリリースされています。 Node.js互換性の改善 dynamic import 以下のような形式のdynamic importがサポートされています (ただし、importの引数に指定された変数が静的に解析可能な場合にのみ限定されます) const specifier = "npm:chalk@5.3.0"; const chalk = await import(specifier); .npmrc あるパッケージのtarballのURLに対して、常にそのパッケージが属するスコープ向けの認証設定が適用されてしまう問題が修正されています。 fix(npm): use configured auth for tarball urls instead of scope auth (#24111) レジストリとパッケージのtarballを配信するドメインが異なる場合、v1.44.0の時点では、それぞれのドメインに対して別々の認証設定を適用できない課題があったようです。 Workerにおけるパッケージ解決の改善 Workerにおいて特定のnpmパッケージを利用しようとすると、プロセスがパニックしてしまうことがある問題が修正されています。 deno lsp jsr:向けのマッピングがImport mapsで定義されている場合、うまく補完が動作しない問題が修正されています。(#24050) Deno.exitCode Deno.exitCodeに整数以外の値を設定しようとした際にTypeErrorが発生するように挙動が変更されています。 deno_stdのリリース deno_stdのリリースが行われています。 release-2024.06.03 release-2024.06.06 @std/bytes@1.0.0 @std/bytes@1.0.0がリリースされています。特に大きい変更はありませんが、deno_stdのパッケージとしては初の安定版リリースになります。 @std/assert 0.226.0と1.0.0-rc.1の2つのバージョンがリリースされています。 0.226.0 assertEqualsからformatterオプションが削除されています。 @std/assert@0.226.0 1.0.0-rc.1 assertAlmostEqualsのtolerance引数のデフォルト値が変更されています。 今までは1e-7がデフォルト値として使用されていました。 このバージョンでは、デフォルト値が以下のように変更されています。 expected引数が有限な値であればexpected * 1e-7 そうでなければ1e-7 @std/assert@1....

June 9, 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

Deno v1.44

Deno v1.44がリリースされました。 この記事では主な変更点などについて解説します。 Node.js互換性の改善 .npmrcのサポート プライベートレジストリからnpmパッケージを読み込むために、.npmrcのサポートが追加されています。 現時点ではpackage.jsonまたはdeno.jsonと同一ディレクトリにある.npmrcのみが探索されます (ホームディレクトリなどからの読みこみはまだサポートされていません) .npmrcの設定内容はnpm:などによりnpmパッケージを利用する場合に適用されます。設定内容としては、現時点では_authTokenと_authのみがサポートされています。 組み込みパッケージ 主にgrpc-nodeやNext.js, Eleventyなどに関連したNode.js組み込みパッケージの互換性が改善されています。 Next.jsのサポートについて 公式ブログによると、DENO_FUTURE=1の指定が必要なもののNext.jsが動作するようになったようです (後日ブログポストが公開予定とのこと) @google-cloud/visionのサポート @google-cloud/visionも動作するようになったようです。 主な変更点 node:buffer: isUtf8とisAsciiが実装されています node:fs: fstatSyncでthrowIfNoEntryオプションがサポートされています node:fs: writeなどでposition引数がうまく機能しない問題が修正されています node:http: ServerResponseでstatusCodeのデフォルト値がundefinedから200に変更されています @11ty/eleventy-dev-serverを動かすための対応 (#78) node_modules/.bin Denoがnode_modulesを作成する際に、node_modules/.binが作成されるようになりました。 $ deno run --allow-env --allow-read --node-modules-dir npm:cowsay@1.6.0 hi $ ls node_modules/.bin cowsay cowthink deno.lockサポート 今までdeno.lockはdeno.jsonがある場合は自動的に生成されていました。今回のリリースでpackage.jsonがある場合にも自動でdeno.lockが作成されるように挙動が変更されました。 またDENO_FUTURE=1が設定された状態でdeno installを実行した際に、deno.lockをベースにパッケージを解決することによりパフォーマンスの改善も図られています (#23918) deno task deno taskでスクリプトを実行する際に、そのスクリプトでnpm runが利用されていて かつ npm runにフラグが指定されていなければ、npm runをdeno taskに置きかえた上でpackage.jsonのスクリプトが実行されるように挙動が変更されています。 例えば、以下のような内容のdeno.jsonとpackage.jsonが存在する場合、deno task testを実行すると、package.jsonのhiスクリプトが実行されます。 deno.json: { "tasks": { "hi": "echo deno....

June 2, 2024

2024/05/20〜2024/05/26の最新情報

Fresh v2のアルファバージョンが公開 Fresh v2向けに開発されていたコードがmainブランチに取り込まれています。 major: import Fresh 2.0 code (denoland/fresh#2449) 合わせて、Fresh v2のアルファバージョンとして公開されています。 現状、大きな変更として以下のような内容がありそうです。 FreshのJSRへの公開 preactやesbuildなどのパッケージがnpm:経由で読み込まれるように変更されています (例: www/deno.json) ExpressライクなAPIの採用 (例: www/main.ts) ハンドラーやページコンポーネントなどの定義方法の改善 (例: www/routes/showcase.tsx) 現状、わかっている変更点などを少しずつ以下のページにまとめているため、もし興味がありましたら参照ください。 https://scrapbox.io/uki00a/Fresh_v2 Deno v1.43.6 Deno v1.43.6がリリースされています。 Node.js互換性の改善 JestやVitest, avaなどのテストフレームワーク向けの対応を中心に進められています。 node:worker_threads: Workerを介して転送されるメッセージの中にMessagePortがあった場合に、addListenerなどのメソッドが未定義になってしまう問題が修正されています (vitestなど向けの対応) node:module: avaを動かせるようにするため、findSourceMapの空実装が追加されています。 node:process: process.listeners()に'SIG*'を渡した際に、きちんとリスナー数が返却されるように改善されています。 deno task deno.jsonでnodeModulesDir: true設定されていて かつ node_modulesディレクトリがない場合に、deno taskの実行に失敗してしまう問題が修正されています。 deno serve deno serveコマンドで指定されたエントリポイントでfetchが引数を受け取らない形式で定義されている場合に、TypeErrorが発生する問題が修正されています。 URL.{canParse,parse}の型定義の改善 URL.canParseの第2引数にURLオブジェクトを渡せるように型定義が改善されています。 URL.parseの型定義が追加されています。 deno_stdのリリース deno_stdのリリースが行われています。主要な変更点についてのみ紹介します。 @std/collections@1.0.0-rc.1 @std/collections v1のRCバージョンが公開されています。近いうちにv1がリリースされる可能性がありそうです。 @std/streams@0.224.1 新規APIとしてconcatReadableStreamsが追加されています。...

May 26, 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