2022/11/28〜2022/12/04の最新情報

Deno v1.28.3 Deno v1.28.3がリリースされました。 大きな変更点として、Deno v1.28.0で実装されたDeno.Commandに関するAPIの変更が実施されています。(Deno.CommandAPIの見直しについて) また、Node.js互換性の改善についても引き続き実施されています。 node:moduleのcreateRequireで絶対パスがサポート deno runコマンドでnpm:と--inspect-brkの併用がサポート packages.jsonのexports.typesサポートに関する改善 その他の変更点 プロセス停止前に未解決のPromiseが存在する際のエラーメッセージが改善 (問題が発生している箇所がエラーメッセージに表示されるように) ReadableStreamのリーダー周辺の型定義の改善 Denoのトランスパイル結果のキャッシュとdeno test --coverageで生成されたカバレッジの整合性が取れなかった場合に、プロセスがパニックする問題が修正 deno replの履歴管理に関する信頼性の向上 https://github.com/denoland/deno/releases/tag/v1.28.3 deno_std v0.167.0 deno_std v0.167.0がリリースされています。 std/async/retryモジュールの追加 std/asyncにExponential backoffアルゴリズムに基づいたリトライ機能を提供するモジュールが追加されました。 import { retry } from "https://deno.land/std@0.167.0/async/retry.ts"; const result = await retry(async () => { const result = await doSomeAsyncOperation(); return result; }, { multiplier: 2, maxTimeout: 16_000, maxAttempts: 10, minTimeout: 500, }); std/testing/typesモジュールの追加 std/testingにTypeScriptの型をテストするためのモジュールが追加されています。...

December 4, 2022

2022/11/21〜2022/11/27の最新情報

Deno v1.28.2 Deno v1.28.2がリリースされました。 CPUプロファイリング 新機能として、以下の3メソッドが実装されています。 console.profile console.profileEnd console.timeStamp これらのAPIはDenoを実行する際に--inspectを指定した場合のみ有効化されます。 --inspectオプションが指定された状態でconsole.profile(label)が呼ばれると、console.profileEnd(label)の呼び出しまでの間に実行された処理に関するCPUプロファイルを計測することができます。 計測結果はChrome DevToolsの「Profile」タブから閲覧することができます。 Node.js互換性の改善 Import Mapsファイルの定義に/が含まれれているとマッピングがうまく動作しない問題が解消されています { "imports": { "preact/": "npm:preact/" } } module.createRequire()でURLオブジェクトがサポート deno infoで循環したnpm依存が適切に取り扱われるように改善 型定義ファイルの検出に関する挙動の改善 importのパスにディレクトリが指定された際の型定義ファイルの検出が改善 (import * as mod from ./sub_dirとすると、./sub_dir/index.d.tsなどのファイルが自動で探索されます) package.jsonでexportsとtypesの両方が定義されているときに、exportsから先に処理されるように修正 package.jsonでtypesエントリが未定義だった際に、mainで指定されたエントリポイントを元に型定義が解決されるように挙動が改善 その他の変更点 Deno.serveと--watchオプションを併用したときに、AddrInUseエラーが出る問題が解消されています。 https://github.com/denoland/deno/releases/tag/v1.28.2 deno_std v0.166.0 deno_std v0.166.0がリリースされました。 std/fmtに関する破壊的変更 std/fmt/bytesのprettyBytes()関数がformat()にリネームされています。 既存のprettyBytes()は非推奨化されており、今後のバージョンで削除される予定です。 また、std/fmt/durationのprettyDuration()も同様にformat()へリネームされています。 std/node - Node.js互換性の改善 Deno本体でのNode....

November 27, 2022

2022/11/14〜2022/11/20の最新情報

Deno v1.28.0 Deno v1.28がリリースされました。 以下に変更内容をまとめたため、よろしければ参照ください。 Deno v1.28 Deno v1.28.1 Deno v1.28.1がリリースされました。 deno installコマンドでnpm:がサポートされています。 その他には、npmパッケージサポートに関する細かなバグ修正などが実施されています: Conditional exportsで指定されたエントリポイントが型定義を持っていない場合にエラーが発生する問題が修正 npmパッケージにfoo.server.jsのようにベースネーム部分に.を含むファイルが存在する場合に、うまく読み込みができない問題が修正 あるnpmパッケージの依存関係のバージョンにdist tagが指定されていた際に、うまく取り扱われない問題が修正 scopedパッケージに対して@types/*パッケージの型定義が適切に適用されない問題が修正 --lock-writeを指定すると、deno.lockからnpmパッケージが消えてしまう問題が解消 https://github.com/denoland/deno/releases/tag/v1.28.1 deno_std v0.164.0 deno_std v0.164.0がリリースされました。 std/fmt: durationモジュールが追加 ミリ秒単位で指定された時間のフォーマットされた文字列を取得することができます。 import { prettyDuration } from "https://deno.land/std@0.165.0/fmt/duration.ts"; prettyDuration(130000, { ignoreZero: true, formatType: "full" }); // => "2 minutes, 10 seconds" 補足) prettyDurationは以下のPRでformatにリネームされています。この変更は、おそらくv0.166.0あたりでリリースされると思われるため、今後利用する際はprettyDurationではなくformatを使用するとよさそうです。 https://github.com/denoland/deno_std/pull/2896 std/node: 互換性の向上 node/fs: - read()でコールバックが非同期に呼ばれるように修正 node/http: ServerResponse.finishedが実装 node/http: --unstableが指定されていると、Buffer形式のレスポンスが適切に取り扱われない問題が修正 node/string_decoder: StringDecoder....

November 20, 2022

2022/11/07〜2022/11/13の最新情報

Deno v1.27.2 Deno v1.27.2がリリースされています。 peerDependenciesのサポート DenoでnpmパッケージのpeerDependenciesがサポートされました。 あるパッケージでpeerDependenciesが定義されていた場合、以下のような動作をするようです。 依存グラフの中から祖先をたどっていき、もしpeerDependenciesで指定された要件を満たすパッケージが見つからなかった場合、通常のdependenciesと同様に依存が解決されます。(npm v7と同様の挙動) optionalPeerDependenciesについては、依存グラフの祖先に指定された要件を満たすパッケージが見つかった場合のみ解決されます。 それ以外の場合は、pnpmと同様の挙動でoptionalPeerDependenciesが解決されます。 https://github.com/denoland/deno/pull/16561 その他の変更点 いくつかのバグ修正が実施されています。 data:URLに対してロックファイルのremoteエントリが作られてしまう問題が修正されています。 Deno.serveHttpで起動したHTTPサーバで圧縮が有効化された状態でストリーミングを行う際に、各チャンクが適切にフラッシュされるように修正されています。 ローカルのnode_modules内のコードでrequireによる相対パス形式での読み込みが行われた際に適切に動作するように修正されています。 https://github.com/denoland/deno/releases/tag/v1.27.2 deno_std v0.163.0 deno_std v0.163.0がリリースされています。 std/semverモジュールでinc()とdiff()が非推奨化されました。 今後は、新しく追加されているincrement()とdifference()の使用が推奨されます。 (動作はそれぞれincとdiffと同様です) https://github.com/denoland/deno_std/releases/tag/0.163.0 denoland/fresh-wordpress-themes WordPressをHeadless CMSとして使いつつ、フロントエンドをFreshで開発するためのテンプレートがDeno公式で公開されました。 https://github.com/denoland/fresh-wordpress-themes 以下の記事で使用方法などが解説されています。 Introducing Fresh WordPress Themes esm.sh v98 esm.sh v98がリリースされました。 新機能としてTree shakingのサポートが追加されています。 exportsパラメータを指定することで適用されます。 https://github.com/ije/esm.sh/releases/tag/v98

November 13, 2022

2022/10/31〜2022/11/06の最新情報

Deno v1.27.1 ロックファイルに関する機能の追加や改善などが実施されています。 ロックファイルの自動探索 ロックファイルの自動探索が実装されました。 これは、deno.json(c)と同じディレクトリにdeno.lockというファイルがあれば、それを元に自動でインテグリティチェックを実行する機能です。 現状、この機能は--unstableを指定したときのみ有効化されます。(Deno v1.28にて安定化予定のようです) また、この自動探索を無効化する目的で、--no-lockというオプションも追加されています。 これらの変更に合わせて、--lockオプションの引数がオプショナルに変更されました。(未指定の場合は、デフォルトでdeno.lockが読み込まれます) また、--lock-writeオプションを指定する際の--lockオプションの指定も不要になっています。 ロックファイルによるインテグリティチェックの挙動が変更 ロックファイルの自動探索機能の実装に合わせて、インテグリティチェックに関する挙動が変更されています。 具体的には、ロックファイルに列挙されていないパッケージが見つかったときに、インテグリティチェックが失敗しないように挙動が変更されています。 もしこのようなパッケージがあった際は、ロックファイルへ自動でハッシュが書き込まれ、次回以降からそのパッケージに対するインテグリティチェックが実施されます。 その他の変更点 deno infoコマンドでnpm:がサポートされました。 Deno.osRelease()が--unstableなしだと利用できなかった問題が解消されています。(このAPIは元々、Deno v1.27.0で安定化される予定でした) Change Array by copyに関する型定義ファイルが追加されました。 Promise.prototype.thenが上書きされても、DenoのコアAPIが影響を受けないように実装が変更されました。 WindowsでDeno.hostname()が空文字列を返すことがある問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.27.1 deno_std v0.162.0 deno_std v0.162.0がリリースされました。 std/encoding/front_matter - YAML以外のフォーマットのサポート std/encoding/front_matter/any.tsを使うと、YAML/TOML/JSONのいずれかのフォーマットで記述されたFront Matterブロックを読み込むことができます。 import { extract } from "https://deno.land/std@0.162.0/encoding/front_matter/any.ts"; // YAMLでの記述例) let { attrs, body } = extract<{ title: string, date: Date }>(`--- title: foobar date: 2022-06-12 --- Hello`); assert(attrs.title === "foobar"); assert(attrs.date instanceof Date); assert(body === "Hello"); // TOMLでの記述例) ({ attrs, body } = extract<{ title: string, date: Date }>(`---toml title='foobar' date=2022-06-12 --- Hello`)); assert(attrs....

November 6, 2022

2022/10/24〜2022/10/30の最新情報

Deno v1.27 Deno v1.27がリリースされました。 以下に変更内容をまとめたため、よろしければ参照ください。 Deno v1.27 deno_std v0.161.0 deno_std v0.161.0がリリースされました。 std/hashの削除 非推奨化されていたstd/hashモジュールが削除されています。 今後は、std/cryptoの使用が推奨されます。 std/node Deno v1.27でのNode-APIのサポートに合わせて、require()での.nodeファイルの読み込みがサポートされています。 その他には、net.Serverの"close"イベントの発火タイミングの改善やfs.openDirの互換性の向上などが実施されています。 std/fs/expand_glob expandGlobで、globstarにfalseが指定された際に、"**"が"*"として扱われるように修正されています。 https://github.com/denoland/deno_std/releases/tag/0.161.0 MongooseでのDenoサポートについて 以下のPRでMongooseでのDenoサポートが進められているようです。 Deno support (#12397) 今のところ、v6.8でのリリースを目標に作業が進められているようです。 Babel v7.20.0 @babel/preset-envで"deno"ターゲットがサポートされたようです。 "targets"オプションで対象のDenoバージョンを指定することができます。 https://babeljs.io/blog/2022/10/27/7.20.0

October 30, 2022

2022/10/17〜2022/10/23の最新情報

Deno v1.26.2 Deno v1.26.2がリリースされました。 サブプロセス関連のAPIやnpmサポートの改善、fetch()の互換性の向上などが実施されています。 Deno.SpawnOptionsでwindowsRawArgumentsオプションがサポート Windows上でこのオプションにtrueを指定すると、コマンドライン引数のクォーテーションの付与とエスケープがスキップされます。 const { success, stdout } = await Deno.spawn(cmd, { args, windowsRawArguments: true, }); この機能は、後述するdeno_std v0.160.0におけるwindowsVerbatimArgumentsの実装に利用されています。 npmサポートの改善 dist-tagがサポートされています。 例) import ts from "npm:typescript@next"; その他の改善として、npmレジストリからのパッケージ情報のダウンロード処理が並列化されています。 Fetch APIの互換性の向上 Fetch Standardとの互換性の改善が実施されています。 例) Headersで不正な形式のヘッダを連続で解析すると、二度目以降の解析時にエラーが発生しない問題が修正 fetch()の呼び出し時にRangeヘッダが指定された際は、Accept-Encoding: identityが自動で設定されるように修正 ResponseやRequestに空のFormDataを渡せるように改善 Responseに設定したReadableStreamから非Uint8Array型のチャンクが読み込まれた際は、TypeErrorが発生するように修正 レスポンスボディがContent-Lengthを超過した際などにTypeErrorが発生するように修正 それ以外にもCache APIやWeb Streams APIなどでも互換性の向上が実施されています。 その他の変更点 deno taskでのスクリプト実行時にINIT_CWD環境変数が設定されるように修正 (npm runとの互換性の向上が目的のようです) deno.json(c)のimportMapオプションにリモートURLを指定できるように改善 deno lspでの補完時に、スニペットが適切に取り扱われるように修正 コンパイル対象ファイルの名前が@で始まるときに、deno compileがパニックする問題が修正 https://github.com/denoland/deno/releases/tag/v1.26.2 deno_std v0.160.0 deno_std v0.160.0がリリースされました。 このリリースではstd/nodeのNode.js互換性の向上が実施されています。 変更点: std/node/readline/promisesが実装 std/node/child_process: windowsVerbatimArgumentsオプションがサポート std/node/fs: Windowsでfs....

October 23, 2022

2022/10/03〜2022/10/09の最新情報

Deno v1.26.1 Deno v1.26.1がリリースされました。 Node-APIの実装 DenoでNode-APIが実装されました。 Node-APIで実装されたアドオンのrequire()での読み込みがサポートされます。 Node-APIを有効化するためには、今のところ、--allow-ffiの指定が必要なようです。 (ただし、将来的にオプションが変わる可能性はあるようです) いまのところ、lightningcssやlz4-napiなどが動作することが確認されているようです。(napi-rs/napi-rs#900) Node.js互換に関する改善 Node-APIの実装以外に関する改善として、npm:経由で読まれたパッケージの依存関係の解析結果がキャッシュされるようになりました。 これにより、キャッシュが存在する場合は、Viteの起動が3倍近く高速化されているようです。 キャッシュの仕組みはSQLiteをベースに実装されており、$DENO_DIR/node_analysis_cache_v1にデータベースが作成されます。 その他の改善として、deno cacheでのnpm:のサポートやrequire()でのJSONファイルの読み込みなどがサポートされています。 Web Cache APIのバグ修正 Deno v1.26で追加されたCache APIに関するバグ修正が実施されています。 Cache.put()に渡したResponseオブジェクトがconsumed状態にならない問題が修正 Cache.put()に渡したResponseに紐づくReadableStreamの読み込みでエラーが起きると、リソースリークが発生する問題が修正 Cache.put()で書き込みに失敗したときに、中途半端にキャッシュが保存されないように改善 その他の修正 --unstableを付けないと、Deno.hostname()がundefinedになる問題が修正 (Deno.hostname()はDeno v1.26で安定化されています) リクエストボディの読み込みが最適化 (perf(ext/fetch): consume body using ops (#16038)) 一度、Request#text()などでリクエストボディを消費したにも関わらず、再度Request.bodyを参照するとRequest.bodyUsedがfalseに戻ってしまう問題が修正 Deno.serve()で、ステータスコードが204の際はContent-Lengthが設定されないように修正 SubtleCrypto.deriveBits()でlength引数に与えられた長さが考慮されない問題が修正 https://github.com/denoland/deno/releases/tag/v1.26.1 deno_std v0.159.0 deno_std v0.159.0がリリースされました。 std/textprotoの非推奨化 以下の理由などから、std/textprotoが非推奨化されました。 現在はdeno_stdの内部で使われていないこと deno_stdの方針として、GoスタイルのAPI(Deno.Reader/Deno.Writer)からWeb Streams APIベースへ移行されていること 今後は、このモジュールの使用は避けることが推奨されます。 std/streams/conversion: iterateReaderのバグ修正 iterateReaderに長年存在していたバグが修正されています。 具体的な修正内容については、以下の記事で詳細に内容が解説されています。 Deno のめっちゃ難しいバグを修正した - Qiita また、この修正に関連してiterateReader()の実装が効率化されています。(perf(streams): memory optimizations by avoiding large buffer allocation in a loop (#2748))...

October 9, 2022

2022/09/26〜2022/10/02の最新情報

Deno v1.26 Deno v1.26がリリースされました。 以下に変更内容をまとめたため、よろしければ参照ください。 Deno v1.26 deno_std v0.158.0 deno_std v0.158.0がリリースされました。 std/node child_processパッケージでexec/execFileSync/execSyncが実装されています。 その他には、process.getuid()とprocess.getgid()が実装されています。 また、fsパッケージのread()やWriteStreamなどの互換性が向上しています。 std/http/server handlerが返却したResponseのボディがすでに消費されている場合に、500エラーが発生するように修正されています。 https://github.com/denoland/deno_std/releases/tag/0.158.0 plug v1.0.0-rc.0 Deno FFI(Deno.dlopen)のヘルパーモジュールであるplugのv1.0.0 RC版が公開されています。 このリリースでの主要な変更点として、ダイナミックライブラリを読み込むためのprepare()がdlopen()にリネームされています。 https://github.com/denosaurs/plug/releases/tag/1.0.0-rc.0

October 2, 2022

2022/09/19〜2022/09/25の最新情報

Deno v1.25.4 Deno v1.25.4がリリースされました。 --node-modules-dirのサポート node_modulesディレクトリの存在に依存したnpmパッケージを動かせるようにするために、--node-modules-dirオプションが実装されました。 $ deno run -A --unstable --node-modules-dir npm:vite このオプションを指定すると、pnpmライクなレイアウトでnode_modulesが作られます。 これによって、npm installなしでViteが動かせるようになったようです。 詳しくは以下を参照いただければと思います。 vite-deno-example --reload=オプションでnpmパッケージがサポート --reload=npm:で全npmパッケージの再読込み、--reload=npm:<package>で指定されたパッケージだけを再読込みができます。 パフォーマンスチューニング いくつかのパフォーマンスチューニングが実施されています。 例) CLIの起動の高速化 console.log()などで文字列を出力する際のパフォーマンスが3倍近くまで高速化 TextEncoder.encodeInto()が5.4倍近くまで高速化 ファイルシステム関連のAPIの最適化 CLIの起動の高速化については、現在、様々なアイデアが検討されており、詳細については以下を参照いただければと思います。 perf: ideas to improve startup time (#15945) その他の変更点 同一ファイルに対して複数回deno docを実行すると、処理が失敗してしまう問題が修正されています。 Windows上でdeno compileを実行したときに、拡張子が非.exe形式の場合に、それが取り除かれてしまう問題が修正されています。 Deno.env.get/Deno.env.setに不正な変数名を指定した際のエラーメッセージが改善されています。 https://github.com/denoland/deno/releases/tag/v1.25.4 deno_std v0.157.0 deno_std v0.157.0がリリースされました。 std/collections/deep_merge.tsのバグ修正 ネストされたプロパティにおいてdeepMerge()のreplaceオプションが機能しない問題が修正されています。 std/nodeの改善 child_process.spawnSyncが実装されています。 また、FreeBSDでもstd/nodeが動作するように修正が行われています。 その他には、以下の改善などが実施されています。 fs.read()やfs.ReadStreamの互換性の向上 net.connect()が失敗したときに、'error' ⇒ 'close'の順にイベントが発火されるように修正されています。 process.envに不正な文字を含む環境変数が指定されたときに、TypeErrorを投げるのではなくundefinedを返すように修正されています。 Windows上でprocess.on('SIGTERM')が無視されるように修正されています。 https://github....

September 25, 2022