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フォーマットでのストリーミングがサポートされています。
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}`,
])
.pipeThrough(new JSONParseStream());
for await (const json of readable) {
console.log(json);
// Output:
// { name: "foo" }
// { a: 1, b: true }
}
ConcatenatedJSONParseStream
を使うと、Concatenated JSON
を取り扱うことができます。
import { ConcatenatedJSONParseStream } 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([`{"a": 1}{"name": "foo","b":true}{"arr":[1,2,3]}`])
.pipeThrough(new ConcatenatedJSONParseStream());
for await (const json of readable) {
console.log(json);
// Output:
// { a: 1 }
// { name: "foo", b: true }
// { arr: [ 1, 2, 3 ] }
}
JSONStringifyStream
を使うと、値を上記4つのいずれかの形式でストリーミングを行うことができます。
import { JSONStringifyStream } 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 file = await Deno.open("data.jsonl", { create: true, write: true });
await readableStreamFromIterable([{ name: "foo" }, { b: true, n: 123 }])
.pipeThrough(new JSONStringifyStream())
.pipeThrough(new TextEncoderStream())
.pipeTo(file.writable);
その他の変更点
std/flags
:parse()
の戻り値の型がオプションの内容からより賢く推論されるようになりました。std/media_types
:contentType()
の型定義が改善されました。- 元々、戻り値の型定義が
string | undefined
だったため、Headers
オブジェクトなどと併用するのが難しい問題がありました。 - 例えば、下記のように、あらかじめ
std/media_types
が把握しているタイプを引数に指定すると、戻り値がstring
型として絞り込まれるように型定義が改善されています。
contentType(".json"); // => string
- 元々、戻り値の型定義が
std/encoding/csv/stream
: CRの取り扱いが改善されました。
https://github.com/denoland/deno_std/releases/tag/0.145.0
Denoが$21Mを調達
詳細については、下記の記事で解説されています。
DenoやDeno Deployがどのような背景・目的で開発されているのかについても解説されています。
webview_deno v0.7.0
webview_deno v0.7.0がリリースされています。
大きな変更点として、内部実装がFFI(Deno.dlopen
)を使用した形式へ書き直されています。
また、Denoで定義した関数をwebview側から呼ぶために、Webview#bind
が追加されています。
https://github.com/webview/webview_deno/releases/tag/0.7.0
Fresh v1.0.0-rc.1
Fresh v1.0.0のRC版が公開されました。
合わせて、deno.land/xにFreshが公開されています。
これにより、バージョンを明示した上でFreshを利用できるようになりました。
https://github.com/lucacasonato/fresh/releases/tag/1.0.0-rc.1