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