deno v0.40.0の変更点まとめ

https://github.com/denoland/deno/releases/tag/v0.40.0

denoのv0.40.0がリリースされたため、変更点をまとめます。

# 破壊的変更

## `deno fetch`が`deno cache`にリネームされた

https://github.com/denoland/deno/pull/4656

## `std/testing/runner.ts`が削除された

`deno test`コマンドが存在するため、削除されました。

https://github.com/denoland/deno/pull/4649

# 新規機能

## (`std/flags`) unknown関数がkeyとvalueパラメータを受け取るように変更された

```typescript
import { parse } from "https://deno.land/std@v0.40.0/flags/mod.ts";

parse(["--hoge", "true", "--piyo", "false"], {
  unknown: (unknown, key, value) => {
    console.log(unknown, key, value);
  }
});
// --hoge hoge true
// --piyo piyo false
```

https://github.com/denoland/deno/pull/4637

## (`std/http`) 不正なフォーマットのリクエストを受信した際は400レスポンスを返却する

https://github.com/denoland/deno/pull/4614

## (`std/node/fs`) `exists`/`existsSync`が実装された

```typescript
import * as fs from "https://deno.land/std@v0.40.0/node/fs.ts";

fs.exists("test.txt", exists => {
  console.log(exists);
});
```

https://nodejs.org/api/fs.html#fs_fs_exists_path_callback

https://github.com/denoland/deno/pull/4655

## `Blob#text/stream/arrayBuffer`が実装された

@keroxp さんによって対応されました。

また、この対応に伴い、[ReadableStream](https://developer.mozilla.org/ja/docs/Web/API/ReadableStream)が公開されました。

```typescript
const b = new Blob(["hello"]);
console.log(await b.text()); // hello
```

https://github.com/denoland/deno/pull/4581

## `deno bundle`コマンドが`--importmap`オプションに対応した

```json:import-map.json
{
  "imports": {
    "add": "./add.ts"
  }
}
```

```typescript:add.ts
export function add(a: number, b: number): number {
  return a + b;
}
```

```typescript:mod.ts
import { add } from "add";
console.log(add(1, 3));
```

```sh
$ deno bundle --importmap ./import-map.json mod.ts bundle.ts
$ deno bundle.ts
4
```

https://github.com/denoland/deno/pull/4651

# その他変更点

## `Deno.utime`に`Date`オブジェクトを渡す

下記のように、`Deno.utime`に`Date`オブジェクトを渡すと、例外が発生する問題があったため、修正されました。

```typescript
await Deno.utime("./test.txt", new Date(), new Date());
```

https://github.com/denoland/deno/pull/4575

## (`std/http/file_server`) .ts/.tsx/.jsxファイルを返却する際のMIMEタイプが変更された

ブラウザで`.ts`ファイル等を表示しようとすると、ダウンロードされてしまう問題がありました。

v0.40.0ではMIMEタイプが変更され、ブラウザ上でファイルの内容を閲覧できるようになりました。

https://github.com/denoland/deno/pull/4620

## (`std/testing`) アサーションに失敗した際に、bigint型の値を適切にフォーマットする

```typescript
import { assertEquals } from "https://deno.land/std@v0.40.0/testing/asserts.ts";

assertEquals(123n, 456n);
//     [Diff] Left / Right
//
//
// -   123n
// +   456n
```

https://github.com/denoland/deno/pull/4626

## `.js`ファイルを実行する際も型定義ファイルを読み込む

`deno run`や`deno fetch`等で.jsファイルを指定すると、`X-TypeScript-Types`ヘッダ等で指定された型定義ファイルが読み込まれない問題がありました。

v0.40.0でこの問題が修正され、.jsファイルを実行する際も、型定義ファイルが読み込まれます。

```javascript:mod.js
import sinon from 'https://cdn.pika.dev/sinon@^8.1.1';

console.log(sinon);
```

```sh
$ deno run -r ./mod.js
Download https://cdn.pika.dev/sinon@^8.1.1
Download https://cdn.pika.dev/-/sinon@v8.1.1-tBhxC2jmZsnRfA7AaVBW/dist=es2019/types/index.d.ts
Download https://cdn.pika.dev/-/sinon@v8.1.1-tBhxC2jmZsnRfA7AaVBW/dist=es2019/sinon.js
...
```

https://github.com/denoland/deno/pull/4652

## `deno doc`の改善

- JSON形式(`deno doc --json`)でドキュメントを出力した際に、型パラメータに関する情報も出力されるようになった
- モジュールの再エクスポート(`export * from "./hoge.ts"`等)に対応した

https://github.com/denoland/deno/pull/4672
https://github.com/denoland/deno/pull/4625