2021/08/01〜2022/08/07の最新情報

Deno v1.24.2 Deno v1.24.2がリリースされました。 FFIに関する改善 Deno.UnsafePointerView#getArrayBufferがpointerが指すデータのコピーではなく、pointerが指すデータを直接返すように修正されています。 また、Deno.PointerValueが追加されています。 これに合わせて、ポインタを取り扱う各APIの戻り値などでもこの型が使用されるように修正されています。 その他には、戻り値が64ビット値の関数に対してもV8 Fast API Callsによる最適化が適用されるようになりました。 その他の変更点 プロパティにErrorオブジェクトが設定されたオブジェクトをthrowすると、プロセスがパニックする問題が修正されました。 deno vendor: dynamic importに失敗した際に、プロセスがパニックする問題が修正されました。 deno lsp: import節の入力補完において、レジストリ補完の最中のみ/がコミット文字として使用されるように修正されました。 https://github.com/denoland/deno/releases/tag/v1.24.2 deno_std v0.151.0 deno_std v0.151.0がリリースされました。 Node.jsの互換レイヤーに関するバグ修正や機能の追加が実施されています。 変更点: node/fs: fs.existsSync()が例外をthrowする可能性がある問題が修正されました。 node/fs: fs.watchFile()とfs.unwatchFile()が実装されました。 node/http(s): http.request()などでprotocolを省略した際に、デフォルトで適切なプロトコルが設定されるように修正されました。 https://github.com/denoland/deno_std/releases/tag/0.151.0 Deno Merch Deno公式のショップサイトが公開されました。 https://merch.deno.com/ ソースコードも公開されており、Fresh/Twind/SWR/GraphQL Storefront API (Shopify)をベースに実装されているようです。 https://github.com/denoland/merch Freshのロードマップ Freshのロードマップが公開されました。 Roadmap (#563) 直近では、以下の変更が予定されているようです。 プラグインシステムの実装 (現状、Twindプラグインの実装が進行しているようです) <Head>コンポーネントの非推奨化 (<head>タグによって直接メタ情報を埋め込めるようにする予定のようです) https://github.com/denoland/fresh/issues/563 PrismaのDenoサポートについて Prismaの以下のissueで、Denoのサポートについて議論されています。...

August 7, 2022

2021/07/25〜2022/07/31の最新情報

Deno v1.24.1 Deno v1.24.1がリリースされました。 このリリースはバグ修正がメインです。 "unhandledrejection"イベントに関する修正 "unhandledrejection"イベントのリスナに関する型定義が修正されています。 また、モジュールのトップレベルで同期的にエラーが発生した際にも"unhandledrejection"イベントが発火されるように修正されています。 Deno.Child.unref()に関する修正 Deno.Child.unref()を呼ぶと、Deno.Child.stdoutやDeno.Child.stderrもunrefされるように修正されています。 その他の変更点 型チェック時(--check)に、TypeScriptのjsxFactoryとjsxFragmentFactoryオプションが自動で設定される問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.24.1 deno_std v0.150.0 deno_std v0.150.0がリリースされました。 http/http_errors createHttpErrorでheadersオプションがサポートされています。 import { createHttpError } from "https://deno.land/std@0.150.0/http/http_errors.ts"; import { Status, STATUS_TEXT } from "https://deno.land/std@0.150.0/http/http_status.ts"; const error = createHttpError( Status.Unauthorized, STATUS_TEXT[Status.Unauthorized], { headers: { "WWW-Authenticate": "Basic" } } ); error.headers; // => `Headers { "www-authenticate": "Basic" }` io/writers StringWriterにデータを書き込む際に、引数のUint8Arrayがコピーされるようになりました。 引数に渡したUint8Arrayが別の箇所で変更されると、StringWriter#toStringが返却する文字列にも影響が出てしまう問題があったようです。 import { StringWriter } from "https://deno.land/std@0.150.0/io/writers.ts"; const encoder = new TextEncoder(); const w = new StringWriter(); const bytes = encoder....

July 31, 2022

2021/06/27〜2022/07/03の最新情報

Deno v1.23.2 Deno v1.23.2がリリースされました。 スレッドセーフコールバックのサポート(FFI) 例えば、メインスレッドで登録したコールバック(Deno.UnsafeCallback)をWorkerスレッドから呼び出したり、その逆にWorkerスレッドで登録したコールバックをメインスレッドから呼び出すことができるようになりました。 また、Deno.UnsafeCallbackにrefとunrefメソッドが実装されており、refを呼ぶことでDenoプロセスの停止を防止することができます。(Deno.refTimerなどと同様の挙動) https://github.com/denoland/deno/pull/14942 その他の変更点 FFIで空のArrayBufferを渡すとプロセスパニックする問題が修正されています。 deno lspのdeno/cacheメソッド(vscode-denoだとDeno: Cache Dependenciesコマンド)で依存関係をキャッシュした際に、TypeScriptのランゲージサービスが自動で再起動されるようになりました。 Deno.bench()やDeno.test()を含むファイルをdeno runで実行すると、エラーが発生する問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.23.2 deno_std v0.146.0 deno_std v0.146.0がリリースされました。 collections: BSTreeとRBTreeのリネーム collectionsモジュールで提供されているBSTreeがBinarySearchTreeに、RBTreeがRedBlackTreeにリネームされています。 その他の変更点 testing/asserts: assertEqualsで同じ要素を持つSet同士を比較しているにも関わらず、例外が発生するケースがあったため、修正されています。 streams/delimiter: TextLineStreamで大きなチャンクを処理する際にMaximum call stack size exceededエラーが発生することがある問題が修正されました。 node/util: util.inspect()やutil.format()で6つを超える要素数の配列が正しくフォーマットされるように修正されています。 https://github.com/denoland/deno_std/releases/tag/0.146.0 JITコンパイラによるFFIの最適化 Deno本体へのJITコンパイラの導入により、FFIバインディングを最適化するPRが作成されています。 perf(ext/ffi): JIT compiler for FFI (#15006) 内部的には、tinyccが使用されているようです。 https://github.com/denoland/deno/pull/15006 Fresh v1 Fresh v1.0.0がリリースされました。 これに合わせて、Freshのリポジトリがdenoland organization配下に移動されています。 また、Deno公式でFreshの紹介記事が公開されています。 Fresh 1.0 https://github.com/denoland/fresh denoland/meet-me Deno公式で、Calendlyのクローンアプリが公開されています。...

July 3, 2022

2021/06/20〜2022/06/26の最新情報

Deno v1.23.1 Deno v1.23.1がリリースされました。 FFI関連の変更点 破壊的変更としてDeno.UnsafePointerが削除されました。 (正確にはDeno.UnsafePointer.ofのみ残されています) 今後、ポインタはbigintで表現されます。 その他には、unstable APIとしてDeno.UnsafeCallbackが追加されています。 JavaScriptの関数を関数ポインタとして受け渡すために利用できます。 deno fmtの改善 deno fmtコマンドがnode_modulesと.gitディレクトリを無視するようになりました。 また、JavaScriptファイルのパースに失敗した際に、deno fmt --checkがちゃんと失敗するように修正されています。 その他の変更点 fetchの呼び出し時に、デフォルトでAccept-Language: *ヘッダが設定されるように修正されました。 deno replコマンドで、直前の文字が空白のときにTabキーを押すと、タブ(\t)が挿入されるように修正されました。 deno runコマンドで.d.ctsや.d.mtsファイルを実行すると、プロセスがパニックする問題が修正されました。 https://github.com/denoland/deno/releases/tag/v1.23.1 deno_std v0.145.0 deno_std v0.145.0がリリースされました。 std/encoding/json/stream std/encoding/json/streamが追加されました。 このモジュールでは、下記4フォーマットでのストリーミングがサポートされています。 JSON Lines ndjson JSON Text Sequences Concatenated JSON JSONParseStreamは上記の上から3つのフォーマットをサポートしています。 import { JSONParseStream } from "https://deno.land/std@0.145.0/encoding/json/stream.ts"; import { readableStreamFromIterable } from "https://deno.land/std@0.145.0/streams/conversion.ts"; const readable = readableStreamFromIterable([ `{"name": "foo"}`, `{"a": 1, "b": true}`, ]) ....

June 26, 2022

2021/06/13〜2022/06/19の最新情報

Deno v1.23 Deno v1.23がリリースされました。 以下の記事に変更点をまとめたため、詳しくはこちらを参照いただければと思います。 Deno v1.23 deno_std v0.144.0 deno_std v0.144.0がリリースされました。 encoding/front_matter 新規モジュールとしてencoding/front_matterが追加されました。 import { extract } from "https://deno.land/std@0.144.0/encoding/front_matter.ts"; const { attrs, body } = extract<{ title: string, date: Date }>(`--- title: foobar date: 2022-06-12 --- Hello`); console.assert(attrs.title === "foobar"); console.assert(attrs.date instanceof Date); console.assert(body === "Hello"); collections collections/mod.tsをimportすると警告が表示されるようになりました。 必要に応じて、collections/deep_mergeやcollections/group_byなどの各ファイルを個別にimportすることが推奨されます。 node process.stdoutとprocess.stderrに下記メソッドが実装されています。 cursorTo moveCursor clearLine clearScreenDown https://github.com/denoland/deno_std/releases/tag/0.144.0 Freshのアップデート (CLIの削除) FreshからCLIが削除されています。 feat: remove fresh cli, do manifest generation in process (#223)...

June 19, 2022

2021/06/06〜2022/06/12の最新情報

Deno v1.22.3 Deno v1.22.3がリリースされました。 主な変更点: fetch APIの引数にURLオブジェクト渡す形式が非推奨ではなくなりました。(TypeScript公式の型定義でもサポートされたため) // Deno v1.22.3までは、下記の形式は非推奨でした const res = await fetch(new URL("https://example.com")); Import Mapファイルなどの.jsonや.jsonc形式のファイルが変更されたときに、deno lspが自動で変更を検知してくれるようになりました。 --watchオプションで、dynamic importされるファイルが監視されない問題が修正されました。 エラー以外の値がthrowされた際にコンソールへ出力される内容が改善されました。 https://github.com/denoland/deno/releases/tag/v1.22.3 deno_std v0.143.0 deno_std v0.143.0がリリースされました。 http/http_statusでの破壊的変更について STATUS_TEXTがMap<Status, string>からReadonly<Record<Status, String>>へ変更されています。(破壊的変更) その他にも、いくつかのヘルパー関数やタイプが追加されています。 import { isErrorStatus, STATUS_TEXT } from "https://deno.land/std@0.143.0/http/http_status.ts"; STATUS_TEXT[404]; // => "Not Found" isErrorStatus(404); // => true isErrorStatus(200); // => false flagsモジュールでnegatableオプションがサポート ここで指定されたフラグのみが、--no-プレフィックスの付与による否定がサポートされます。 import { parse } from "https://deno.land/std@0.143.0/flags/mod.ts"; parse(["deno", "fmt", "--no-config"], { string: ["config"], negatable: ["config"], }); // => { _: [ "deno", "fmt" ], config: false } parse(["deno", "fmt", "--no-config"], { string: ["config"], }); // => { _: [ "deno", "fmt" ], "no-config": true } dotenvモジュールでインラインコメントがサポート #に続けてコメントを記述できます。...

June 12, 2022

2021/02/28〜2022/03/06の最新情報

Deno v1.19.2 Deno v1.19.2がリリースされました。 リモートスクリプトでのdeno.json(c)の自動読み込みが無効化 Deno v1.18でdeno.json(c)の自動読み込みがサポートされました。 このリリースでは、リモートスクリプト実行時のdeno.json(c)の自動探索が無効化されています。 リモートスクリプトを実行する際に、ローカルのdeno.json(c)が読まれてしまうことによる不整合を防止することが目的のようです。 Proposal: disable auto-discovery of config file for deno run deno testの実行時はデフォルトで--no-promptが有効化 Deno v1.19で--promptがデフォルトで有効化されました。 しかし、deno testの実行時は--promptオプションの必要性が薄いため、このリリースで無効化されています。 その他の変更点 deno replでnullが適切に表示されない問題が修正されました。 非TTY環境でconsoleを使用した際の色付けが無効化されない問題が修正されました。 https://github.com/denoland/deno/releases/tag/v1.19.2 deno_std v0.128.0 deno_std v0.128.0がリリースされました。 新機能 streamsモジュールにTextLineStreamが追加されています。 import { TextLineStream } from "https://deno.land/std@0.128.0/streams/delimiter.ts"; const file = await Deno.open("./path/to/file.txt"); const readable = file.readable .pipeThrough(new TextDecoderStream()) .pipeThrough(new TextLineStream()); for await (const line of readable) { console....

March 6, 2022

2021/02/21〜2022/02/27の最新情報

Deno v1.19.1 Deno v1.19.1がリリースされました。 新機能としてDeno.dlopenでstatic変数の参照がサポートされています。 Deno.ForeignStatic その他にも、deno compileで--import-mapオプションがうまく動かなくなっていた問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.19.1 deno_std v0.127.0 deno_std v0.127.0がリリースされました。 dotenvの追加 deno-dotenvモジュールがdeno_stdにマージされました。 マイグレーション手順も公開されているので、もしdeno-dotenvを利用されていた場合は参考にするとよさそうです。 async/abortableの追加 Promiseをキャンセルできるようにするためのユーティリティが追加されています。 import { abortable } from "https://deno.land/std@0.127.0/async/abortable.ts"; import { delay } from "https://deno.land/std@0.127.0/async/delay.ts"; const controller = new AbortController(); const promise = delay(5000); setTimeout(() => controller.abort(), 2000); await abortable(promise, controller.signal); // => AbortError node fs: fs.realpath.nativeが追加されました。 tls: tls.createServerの基本的なサポートが追加されました。 その他 http/file_server: serveDir関数が追加されました。 testing/aserts: assertAlmostEqualsが追加されました。 https://github.com/denoland/deno_std/releases/tag/0.127.0 deno.json(c)でのImport Mapサポートについて deno....

February 27, 2022

2021/02/14〜2022/02/20の最新情報

Deno v1.19 Deno v1.19がリリースされました。 --promptオプションの挙動がデフォルト化 例えば、以下のようなファイルがあったとします。 const content = await Deno.readTextFile("README.md"); このファイルを権限なしで実行しようとすると、下記のように権限を付与するか尋ねられるようになります。 $ deno run main.ts ⚠️ ️Deno requests read access to "README.md". Run again with --allow-read to bypass this prompt. Allow? [y/n (y = yes allow, n = no deny)] Deno v1.18以前の挙動に戻したいときは--no-promptを指定する必要があります。 deno vendorコマンドの追加 サードパーティモジュールもバージョン管理に含めたいなどの要求を解決すべく導入されたコマンドです。 具体的な使い方としては、下記のようにエントリポイントを指定します。 $ deno vendor mod.ts これにより、vendorディレクトリにmod.tsから依存されているサードパーティモジュールが保存されます。 また、vendorディレクトリに次のような内容でimport_map.jsonが作成されます。 { "imports": { "https://deno.land/": "./deno.land/", "https://unpkg.com/": "./unpkg.com/" }, "scopes": { "....

February 20, 2022

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