2023/05/01〜2023/05/07の最新情報

Deno v1.33.2 Deno v1.33.2がリリースされました。 Deno KV Deno.KvU64にvalueOf/toStringが実装されました。 assert(new Deno.KvU64(1n) + 2n === 3n); assert(new Deno.KvU64(123n).toString() === "123"); また、Deno.Kvのコンストラクタを直接呼ぶと、エラーが発生するように変更されました。(Deno.openKvの使用が推奨されるため) Node.js互換性 node:process: process.releaseが実装されました。 node:http: ClientRequest.setTimeoutに0を渡すとタイムアウトが無効化されるように修正されました。 その他 パフォーマンス向上のため、Windows以外の環境では、グローバルアロケータやArrayBufferの割り当ての用途としてjemallocが使用されるように変更されました。 beforeunloadのリスナ内でpreventDefaultを呼んでいると、Deno.test内で発生したUncaught Errorが画面に表示されなくなる問題が修正されました。 WebSocketクライアントが適切にクローズされなかった場合、WebSocketサーバがハングする問題が修正されました。 引数なしでURL.canParse()が呼ばれた際に、falseを返すのではなくTypeErrorが発生するように修正されました。 deno_std v0.186.0 deno_std v0.186.0がリリースされました。 std/path sepが非推奨化されました。 今後はSEPの使用が推奨されます。 std/async deadline.ts: signalオプションによるキャンセルがサポートされました。 pool.tsがブラウザ互換になりました。 std/http/method.tsの追加 isHttpMethodで与えられた文字列が正しいHTTPメソッドであるか判定できます。 import { isHttpMethod } from "https://deno.land/std@0.186.0/http/method.ts"; assert(isHttpMethod("GET")); assert(isHttpMethod("POST")); assert(!isHttpMethod("get")); assert(!isHttpMethod("foo")); std/http/file_server.ts Rangeヘッダが仕様どおりにハンドリングされるように改善されました。 std/http/server.ts serve()ですでに使用中のportを指定した際に、たまにAddrInUseではなくTypeError: Cannot read properties of undefined (reading 'port')が発生する問題が修正されました。...

May 7, 2023

2023/04/24〜2023/04/30の最新情報

Deno v1.33 Deno v1.33がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.33 Deno v2.0について Deno v1.33のリリースノートでDeno v2.0のリリース時期について書かれています。 https://deno.com/blog/v1.33 数カ月後にリリースが予定されているようです。 それまでの間、今後のマイナーリリースではパフォーマンスやNode.js互換性、セキュリティなどの改善が行われる想定のようです。 deno_std v0.185.0 deno_std v0.185.0がリリースされました。 std/uuid: UUID v3のサポート std/uuid/v3.tsが実装されています。 MD5を利用してUUIDを生成するgenerate()や、UUIDの検証をするvalidate()が提供されています。 std/dotenv: --allow-envなしでの読み込みがサポート restrictEnvAccessToオプションに空の配列やnullまたはundefinedを指定した際に、環境変数を参照せずに.envの内容のみが読み込まれるようになりました。 この場合、--allow-envの指定が不要になります。 esbuild_deno_loader v0.7.0 esbuild_deno_loader v0.7.0がリリースされました。 v0.6.0で提供されていたdenoPluginが以下のように2つのプラグインに分割されています。 denoResolverPlugin: Import mapsを考慮した上でspecifierを解決する denoLoaderPlugin: denoResolverPluginが解決したspecifierを元にモジュールを読み込む プラグインを分割することにより、カスタムのスキーマや拡張子などをサポートできるようになったようです。 例えば、以下ではカスタムのemoji:スキーマをサポートする例が紹介されています。 examples/custom_scheme_plugin.ts また、configPathとimportMapURLオプションが追加されており、これらにより各プラグインが利用するdeno.jsonやImport Mapsファイルへのパスを指定することができるようです。 Deno KV Deno KVのホームページが正式に公開されました。 https://deno.com/kv @ayame113さんによるDeno KVの解説記事も公開されています。 Deno KV 正式発表!cloudflare KVとcloudflare D1のいいとこ取り?

April 30, 2023

Deno v1.33

Deno v1.33がリリースされました。 この記事では主な変更点などについて解説します。 dynamic importに関するパーミッションチェックの見直し 静的に解析可能なdynamic importの実行時に、パーミッションが要求されないように挙動が変更されました。 このリリース以降、以下のコードを実行する際に--allow-netの指定が不要になります。(v1.32までは--allow-netが要求されます) const { delay } = await import("https://deno.land/std@0.185.0/async/delay.ts"); await delay(3000); ただし、以下のようにURLを動的に構築している場合などは、従来通り--allow-netの指定が必要です。 // Denoが`import()`の引数を静的に解析できない場合は、従来どおりパーミッションが要求されます const { delay } = await import(`https://deno.land/std@0.185.0/async/${"delay.ts"}`); await delay(3000); Deno KV Deno.AtomicOperationにmin/maxメソッドが追加 minは引数で指定された値と現在の値を比較し、小さい方の値でエントリを上書きします。maxはその逆の操作です。 const kv = await Deno.openKv(":memory:"); const result = await kv.set(["key"], new Deno.KvU64(1n)); const commitResult = await kv.atomic() .check({ key: ["key"], versionstamp: result.versionstamp }) .max(["key"], 2n) .commit(); assert(commitResult.ok); const result2 = await kv....

April 30, 2023

2023/04/17〜2023/04/23の最新情報

Deno v1.32.5 Deno v1.32.5がリリースされました。 KV Deno.AtomicOperation.sumが実装されました。 const kv = await Deno.openKv(":memory:"); const result = await kv.set(["key"], new Deno.KvU64(1n)); const ok = await kv.atomic() .check({ key: ["key"], versionstamp: result.versionstamp }) .mutate({ type: "sum", key: ["key"], value: new Deno.KvU64(2n) }) .commit(); assert(ok); const result2 = await kv.get(["key"]); assert(result2.value instanceof Deno.KvU64); assert(result2.value.value === 3n); Node.js互換性 node:http: ClientRequest.socket.remoteAddressが実装されました node:crypto: createVerifyが実装されました node:path: fromFileUrlなどのNode.jsでは提供されないシンボルがexportされていた問題が修正されました npm: ロックファイルで指定されたバージョンがキャッシュに見つからなかった場合に、そのバージョンのパッケージをダウンロードするように挙動が変更されました (このような場合、今まではエラーが起きていました) バグ修正 deno lsp: Unix系のOSでstatusページが返ってこなくなっていた問題が修正されました deno test --watchの実行中にSIGINTを送信しても、プロセスを停止できない問題が修正されました Deno....

April 23, 2023

2023/04/10〜2023/04/16の最新情報

Deno v1.32.4 Deno v1.32.4がリリースされました。 Deno v1.32.2以降、Freshが動かなくなっていた問題が解消されています。(#18572) Node.js互換性 node:cryptoで以下のAPIが実装されています: X509Certificate generateKey hkdf 特定のnpmパッケージのバージョンを更新しようとすると、以下のエラーが起きる問題が解消されています。 Could not find npm package '<package>’ matching <version>. Try retrieving the latest npm package information by running with --reload deno cache --reload npm:<package>を実行すると、依存している全npmパッケージが再インストールされる問題が解消されています。 KV Deno.Kvの各メソッドで、キーに配列以外の値を渡せないように挙動が変更されました。 例えば、今まではkv.get("key")のような呼び方ができましたが、今後はkv.get(["key"])のように呼ぶ必要あります。 Cache API プログラムの実行をまたいで同一のリクエストに対して複数回Cache.putを呼んだ際に、値がうまく上書きされなくなる問題が修正されています (#18649) deno_std v0.183.0 deno_std v0.183.0がリリースされました。 std/encoding/varint/の削除 非推奨化されていたstd/encoding/varint/が削除されました。 deno_std v0.179.0でstd/encoding/varint.tsにTypeScriptベースのAPIが追加されているため、今後はこれらの使用が推奨されます。 std/csv 破壊的変更 CsvStreamがCsvParseStreamへリネームされています。(CsvStreamはまだ削除はされていないものの、非推奨化されています) この変更はJsonParseStream/JsonStringifyStreamを提供するstd/jsonとの一貫性の向上を目的としています。 parse()などのAPIの型定義が改善されています。 具体的には、以下のように型推論が効くように変更されています。 import { parse } from "https://deno.land/std@0.183.0/csv/parse.ts"; const records: Array<Record<"id" | "name", string>> = parse("1,a\n2,b", { columns: ["id", "name"], }); std/http/etag....

April 16, 2023

2023/03/27〜2023/04/02の最新情報

Deno v1.32.2 Deno v1.32.2がリリースされました。 KV (Deno.Kv) Deno.KvCommitResult型が追加されています。 これには、KVにコミットされた値に設定された新しいversionstampが含まれます。 この追加に合わせて、以下の変更も実施されています。 Deno.AtomicOperation.commitの戻り値がPromise<boolean>からPromise<Deno.KvCommitResult | null>に変更されています。(コミット成功時はDeno.KvCommitResult、失敗時はnullが返却されます) Deno.Kv.setの戻り値がPromise<void>からPromise<KvCommitResult>に変更されています。 Deno.KvEntryMaybeが追加されています。(この型の実体はDeno.KvEntry<T> | { key: Deno.KvKey, value: null, versionstamp: null }のaliasです) これに合わせて、以下のAPIに型引数を指定できるように変更されました。 Deno.KvListIterator → Deno.KvListIterator<T> Deno.KvEntry → Deno.KvEntry<T> これらの変更により、エントリを取得する際に値の型を指定できるようになりました。 const entry: Deno.KvEntryMaybe<string> = await kv.get<string>(["str"]); const entries: [Deno.KvEntryMaybe<string>, Deno.KvEntryMaybe<number>] = await kv.getMany<[string, number]>([["str"], ["n"]]); Deno.Kv#getManyが実装されました。 複数のエントリをまとめて取得できます。 await kv.set(["key", 1], "foo"); await kv.set(["key", 2], "bar"); const entries = await kv.getMany([ ["key", 1], ["key", 2] ]); assert(entries....

April 2, 2023

Deno v1.32

Deno v1.32がリリースされました。 この記事では主な変更点などについて解説します。 WebGPU APIの削除 Deno v1.8で追加されたWebGPU APIが削除されました。 バイナリサイズや起動速度に影響があったというのが理由のようです。 ただし、削除は一時的なもののようで、将来的には再びWebGPU APIが追加される想定のようです。 KVストア Deno本体にKVストアが実装されています。 ただし、こちらについてはまだ公式では紹介などはされておらず、今後、APIなどに大きな変更が入る可能性もあります。 詳細については、以下の記事を参照いただければと思います。 Deno v1.32でKVストアが実装されました TypeScript TypeScript v5.0.2へのアップデート Deno内部に搭載されているTypeScriptがv5.0.2へアップデートされました。 ただし、制限として、ES Decoratorsのサポートについては現時点では除外されているようです。 --allを指定しなかった際の初回の型チェックの実行が高速化 Denoでは型チェックの実行結果をSQLiteにキャッシュしておくことで、型チェックの効率化を図っています。 しかし、初回の型チェック実行時についてはこのキャッシュの仕組みが効かないため、型チェックの実行効率が少し落ちてしまいます。 この問題を解消するために、--allが指定されていない際は、ローカルのファイルのみを型チェックするように挙動が変更されました。 これによって、キャッシュが効いていない場合でも、場合によっては2倍程度の高速化が見られることもあるようです。 CLIに関する改善 deno compileでdynamic importとWeb Workerがサポート deno compileでdynamic importとWeb Workerを使用したコードのバイナリが作成できるようになりました。 例えば、以下のようなファイルがあったとします。 // sum.js export function sum(...numbers) { return numbers.reduce((a, b) => a + b, 0); } // main.js const { sum } = await import("./sum.js"); console.info(sum(1, 2, 3)); このようにシンプルなケースでは、特に設定などは不要でうまく動いてくれます。 $ deno compile -o main main....

March 26, 2023

2023/03/13〜2023/03/19の最新情報

Deno v1.31.3 Deno v1.31.3がリリースされました。 CLI/APIに関する改善 deno infoとdeno docコマンドで--no-lock/--lockオプションがサポートされました。(挙動はdeno runコマンドなどと同様です) deno.jsonなどでcompilerOptions.typesエントリが定義されていると、型エラーが起きる問題が修正されています。 REPLでglobalThis.Denoやその配下で定義されたプロパティを削除しようとすると、プロセスがパニックする問題が修正されています。 Deno.makeTempFile(Sync)でファイルがすでに存在した際にリトライが行われるように挙動が改善されています。 Deno.serveHttp()でレスポンスエラーが発生した際に、nextRequestから返されるRequestのsignalがabortedに設定されるように修正されました。 Node.js互換性に関する改善 package.jsonが存在する または --node-modules-dirオプションが指定されたが、実行されたスクリプトではnpmパッケージがimportされていない場合に、node_modulesが作成されないように挙動が改善されました。 node_modulesのセットアップ中にプログレスバーが表示されるように挙動が改善されました。(#18136) node:crypto: createCipheriv()が実装されました。 (aes-128-cbcのみサポート) node:fs: writeFile()でencoding: "ascii"オプションがサポートされました。 https://github.com/denoland/deno/releases/tag/v1.31.3 deno_std v0.180.0 deno_std v0.180.0がリリースされました。 std/encoding関連モジュールのディレクトリ構造の見直し (破壊的変更) std/encodingで提供されていたcsv/front_matter/json/jsonc/toml/yamlモジュールが、トップレベルのモジュールとして独立しました。 今後は、例えば、csvモジュールを利用したい場合はstd/csv/mod.ts、yamlモジュールを利用したい場合はstd/yaml/mod.tsから読み込む必要があります。 ディレクトリの移動に合わせて、以下の変更も実施されています。 csvモジュールの細分化 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。 csv/stringify.ts csv/parse.ts csv/stream.ts jsonモジュールの細分化 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。 json/json_parse_stream.ts json/json_stringify_stream.ts json/concatenated_json_parse_stream.ts tomlモジュールの細分化 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。 toml/parse.ts toml/stringify.ts std/http/server_sent_event....

March 19, 2023