deno v1.0.0-rc1の変更点まとめ

https://github.com/denoland/deno/releases/tag/v1.0.0-rc1

denoのv1.0.0-rc1の変更点をまとめます。

# 破壊的変更

## (`std/ws`) `WebSocket`から`receive`メソッドが削除され、直接AsyncIteratorを実装するよう変更された

`Deno.Listener`等の型との一貫性を向上させることを目的とした変更のようです。

```typescript:v1.0.0-rc1
const ws = await connectWebSocket(endpoint);
for await (const msg of ws) { // v0.42.0までは`ws.receive()`とする必要があった
  ...
}
```

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

## `deno <script>.ts`形式が廃止された

v0.42.0までは、以下の形式でスクリプトを実行することができました。

```shell
$ deno ./mod.ts
```

v1.0.0-rc1からはこの形式が廃止されます。スクリプトを実行する際は`run`サブコマンドを使用する必要があります。

```shell
$ deno run ./mod.ts
```

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

## JSONファイルのimportが廃止された

セキュリティ上の理由から廃止されました。

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

## `window.location`、`globalThis.location`、及び`self.location`が削除されました

現時点ではWeb標準に準拠できていないなどの理由から削除されました。

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

## (`std/io/utils`) `copyBytes`関数の引数の順序が変更されました

`copyBytes`関数の`src`引数と`dst`引数の順番が入れ替わりました。

v0.42.0における`Deno.copy`の変更に合わせた修正のようです。

```typescript:v0.42.0
copyBytes(src, dst, off)
```

```typescript:v1.0.0-rc1
copyBytes(dst, src, off) 
```

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

# 新機能

## (`deno install`) スクリプト名が、インストールするファイルの名前を元に決定されるよう変更された

例えば、以下を実行すると、ファイル名である`file_server.ts`を元に、スクリプト名が`file_server`と決定されます。

```shell
$ deno install --allow-net --allow-read https://deno.land/std/http/file_server.ts
$ file_server
```

この変更に伴い、スクリプト名を明示的に指定できるよう`--name`フラグがサポートされました。

例えば、以下を実行した場合、スクリプト名は`fs`になります。

```shell
$ deno install --name fs --allow-net --allow-read https://deno.land/std/http/file_server.ts
$ fs
```

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

## (`deno fmt`) `deno-fmt-ignore`/`deno-fmt-ignore-file`コメントがサポートされた

`deno fmt`の実行を制御するための特殊なコメントが追加されました。

特定のコードのフォーマットを無効化したいときは、`deno-fmt-ignore`コメントを使います。

```typescript
// deno-fmt-ignore
function add(
     a: number,
  b: number,
): number {
  return a + b;
}
```

特定のファイルに対してフォーマットを無効化したいときは、`deno-fmt-ignore-file`コメントを使います。

```typescript
// deno-fmt-ignore-file

function add(
     a: number,
  b: number,
): number {
  return a + b;
}

add(
     1
  ,      2);
```

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

## (`std/node/process`) `global.process`が設定されるようになった

`std/node/process.ts`を`import`とした際に、`global`オブジェクトの`process`プロパティが自動で設定されるようになりました。

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

## `WritableStream`/`TransformStream`が実装された

```typescript
const r = new ReadableStream();
const w = new WritableStream();
r.pipeTo(w);
```

https://github.com/denoland/deno/pull/5042
https://github.com/denoland/deno/pull/4980

## `Deno.cwd`が`--allow-read`を要求するようになった

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

# その他変更点

## 特定の文字が含まれていると、`console.table`を使用した際に、列の幅が揃わなくなる問題が修正された

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

## (`std/http`) `ServerRequest#respond(r: Response)`が引数の`headers`プロパティを変更しないよう修正された

以下のように`Headers`オブジェクトを再利用していると、`ServerRequest#respond`の呼び出しがhangするケースが存在したため、修正されました。

```typescript
const headers = new Headers({ 'Content-Type': 'text', });
for await (const req of server) {
  ...
  req.respond({ headers, body });
}
```

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

## `Deno.chdir`が`--allow-write`ではなく`--allow-read`フラグを要求するようになった

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

## リモートモジュールからローカルモジュールへのimportが禁止された

リモートモジュール(`http://...`, `https://...`)からローカルモジュール(`file://...`)のimportが禁止されました。

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