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
パッケージが追加されました (下記関数がサポート)clearLine
clearScreenDown
cursorTo
moveCursor
vm
パッケージが追加されました (現在は最低限の実装のみ)process
process.on
でシグナルをリスニングできるようになりました。process.execArgv
が追加されました (現在は、常に空の配列が設定されます)process.arch
がNode.jsに一致するよう修正されました
fs
パッケージでwatchFile
が実装されましたhttp
Server
EventEmitter
を継承し、'close'
や'connection'
イベントを発火するようになりました。close
メソッドやaddress
メソッドが実装されました
ServerResponse
statusCode
とstatusMessage
プロパティが定義されました。removeHeader
,getHeaderNames
,hasHeader
が実装されましたsetHeader
がthis
を返却するようになりました。
child_process
パッケージでstdioを介してバイナリデータの読み書きができるように修正されました。querystring
unescapeBuffer()
が実装されました。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