Deno v1.16.0
Deno v1.16.0がリリースされました。
React 17 JSX Transformのサポート
React 17で導入された新しいJSX Transformのサポートが追加されました。
- https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html
- https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/#jsx-factories
.jsxまたは.tsxファイル中で@jsxImportSourceを使うことで有効化されます。
/** @jsxImportSource https://esm.sh/preact@10.5.15 */
export function Hello(props) {
return (
<div>Hello, {props.name}</div>
)
}
また、--configオプションで指定する設定ファイルで有効化することも可能です。
{
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "https://esm.sh/react@17.0.2"
}
}
※Denoの特性上、"jsx": "react-jsx"を指定した際は、jsxImportSourceの指定も必要です。
Deno API
新しいシグナルAPI
Deno.addSignalListenerとDeno.removeSignalListenerが実装されました (unstable)
const signalListener = () => {
// ...
};
Deno.addSignalListener("SIGTERM", signalListener);
Deno.removeSignalListener("SIGTERM", signalListener);
この変更に合わせて、既存のDeno.signalは削除されています。
Deno.TlsConn型の導入
Deno.TlsConnという新しいデータ型が導入されました。
これに合わせて、Deno.connectTlsなどのAPIがDeno.Connの代わりにDeno.TlsConnを返却するように修正されています。
このオブジェクトにはhandshakeメソッドが定義されており、明示的にハンドシェイクを行うことができます。
Deno.testのテストケースごとのパーミッション指定が安定化
Deno v1.10で実装されたテストケースごとにパーミッションを指定できる機能が安定化され、--unstableフラグなしでも利用できるようになりました。
Deno.test({
name: "This should fail",
permissions: {
net: false,
},
fn: async () => {
const _ = await fetch("https://example.com");
},
});
Deno.startTlsが安定化
Deno.startTlsが安定化され--unstableフラグなしでも利用できるようになりました。
シンボリックリンク関連のAPI
Deno.symlinkなどのAPIが--allow-writeに加えて--allow-readパーミッションを要求するように変更されました。
Node.js互換モードの機能向上
https:やblob:インポートがサポートされました。 (.mjsファイル中やpackage.jsonで"type": "module"が指定された際に有効化されます)
また、Import mapsとの統合もサポートされています。
Web API
localStorageで--locationの指定が不要になりました
localStorageが--locationオプションを指定せずに利用できるようになりました。
また、--locationが指定された際の挙動も若干変更されています。
- v1.15までと異なり、
--location https://deno.land/x/a.tsと--location https://deno.land/x/b.tsは同一のオリジンとして扱われます。 --locationが未指定 かつ--configが指定された場合、--configで指定された設定ファイルの絶対パスがオリジンとして使用されます。--locationも--configも指定されなかった場合、メインモジュールの絶対パスがオリジンとして使用されます。
fetchでローカルファイルのダウンロードがサポート
利用するには--allow-readパーミッションが必要です。
const res = await fetch("file:///home/uki00a/.vimrc");
console.log(await res.text());
AbortSignal.reasonのサポート
詳細についてはこちらを参照ください。
const controller = new AbortController();
controller.abort(new Error("Hello"));
console.log(controller.signal.reason);
Streams API
変更点:
- (破壊的変更)
ReadableStream#getIteratorが削除されました。ReadableStreamはAsyncIterableプロトコルを実装しているので、今後はそちらを使う必要があります。
- ReadableStreamBYOBReaderがサポートされました。
WritableStreamDefaultControllerにsignalプロパティが追加されました
エラー関連
Errorオブジェクトのcauseプロパティの値がconsole.logなどで出力されるようになりました。- OSエラーやdynamic importのエラーに
codeプロパティが定義されるようになりました。
V8のアップデート
V8が9.7にアップデートされました 。
Web AssemblyのReference Typesのサポートや、ArrayやTypedArrayへのfindLast及びfindLastIndexの実装などが追加されています。
バグ修正など
- TypeScriptの型エラーが発生した際にトランスパイル結果がキャッシュされる問題が修正されました。
deno fmt --watchまたはdeno lint --watchに引数が与えられなかった際に、うまく動かない問題が修正されました--no-checkでinlineSourcesコンパイラオプションが機能するようになりました。Deno.upgradeWebSocketでUpgradeヘッダに複数の値の指定が許可されるようになりました。fetchでPOSTやPUTリクエストを送信する際に、ボディがなくてもContent-Length: 0ヘッダが設定されるようになりました。deno lspでtextDocument/signatureHelpから返却されるドキュメントの形式がplain textからMarkdown形式に変更されました。deno lspでx-typescript-typesヘッダがうまく機能しない問題が修正されましたimportScriptsがfetchと同じHTTPクライアントを使用するように修正されました
Deno v1.16.1
Deno v1.16.1がリリースされました。
変更点:
- v1.16.0で追加された
AbortSignal.reasonの型定義が追加されました。 - ネイティブHTTPサーバで非アスキー文字を含む
Uint8Arrayのレスポンスの返却に失敗する問題が修正されました。 SubtleCrypto.deriveBitsでHKDFキーのビット列を得る際に、渡されたキー長が大きすぎるとプロセスがパニックする問題が修正されました。
https://github.com/denoland/deno/releases/tag/v1.16.1
deno_std v0.114.0
deno_std v0.114.0がリリースされました。
collections
- Deno v1.16での
Array.prototype.findLastなどの導入に合わせて、findLastとfindLastIndexが非推奨化されました。 deepMergeにプロトタイプ汚染攻撃への対策が入れられました。findSingleで述語関数の指定が必須になりました。
http/server
serveListener関数が追加されました。使用法はv0.113.0までのserve関数と同様です。
import { serveListener } from "https://deno.land/std@0.114.0/http/server.ts";
const listener = Deno.listen({ port: 8000 });
await serveListener(listener, (request) => {
return new Response("Hello", { status: 200 });
});
これに合わせてserveの使用法が変更されています。こちらはDeno.Listenerを渡す必要がありません。
import { serve } from "https://deno.land/std@0.114.0/http/server.ts";
await serve((request) => {
return new Response("Hello", { status: 200 });
}, { addr: ":8000" });
これらの変更に合わせて、下記関数が非推奨化されました。
listenAndServe(今後はserveの使用が推奨されます)listenAndServeTls(今後はserveTlsの使用が推奨されます)
Denoでサーバーを建てる方法 2021年11月版の記事でserveなどについて解説されています。
node
DenoのNode.js互換モードの強化に向けて、様々な機能の追加や変更が実施されています。
また、Deno Deployとの互換性の向上なども実施されています。
変更点:
readlineパッケージが追加されました (下記関数がサポート)clearLineclearScreenDowncursorTomoveCursor
vmパッケージが追加されました (現在は最低限の実装のみ)processprocess.onでシグナルをリスニングできるようになりました。process.execArgvが追加されました (現在は、常に空の配列が設定されます)process.archがNode.jsに一致するよう修正されました
fsパッケージでwatchFileが実装されましたhttpServerEventEmitterを継承し、'close'や'connection'イベントを発火するようになりました。closeメソッドやaddressメソッドが実装されました
ServerResponsestatusCodeとstatusMessageプロパティが定義されました。removeHeader,getHeaderNames,hasHeaderが実装されましたsetHeaderがthisを返却するようになりました。
child_processパッケージでstdioを介してバイナリデータの読み書きができるように修正されました。querystringunescapeBuffer()が実装されました。parse()やstringify()のNode.jsとの互換性が向上しました。
moduleパッケージで適切なメンバがexportされるよう修正されましたosパッケージでcpus()が実装されました
signal
Deno v1.16で実装されたシグナルAPIの変更に合わせて、内部実装が変更されています。
http/file_server
ファイル配信時にReadableStreamを使用してストリーミングが行われるように修正されました。
https://github.com/denoland/deno_std/releases/tag/0.114.0
deno-postgres v0.14.0
deno-postgres v0.14.0がリリースされました。
Deno v1.16でのDeno.startTlsの安定化に合わせ、deno-postgresも--unstableなしで利用できるようになっています
また、Client#queryObjectにcamelcaseオプションが追加され、データベースから返却されたスネークケース形式のカラム名をキャメルケース形式に変換できるようになりました。
const { rows } = await client.queryObject({
text: `SELECT * FROM users`,
camelcase: true,
});
その他の変更として、日付型の値が適切に解析されるように修正が行われています。
https://github.com/denodrivers/postgres/releases/tag/v0.14.0