diff --git a/public/posts/v1-4.json b/public/posts/v1-4.json
new file mode 100644
index 000000000..a213790dd
--- /dev/null
+++ b/public/posts/v1-4.json
@@ -0,0 +1,7 @@
+{
+ "title": "Deno 1.4",
+ "author": "Bartek Iwańczuk and Luca Casonato",
+ "publish_date": "2020-09-13T00:00:00.000Z",
+ "images": [],
+ "snippet": ""
+}
diff --git a/public/posts/v1-4.md b/public/posts/v1-4.md
new file mode 100644
index 000000000..c89a73805
--- /dev/null
+++ b/public/posts/v1-4.md
@@ -0,0 +1,71 @@
+## isolatedModules
+
+For all users using `--unstable` the `isolatedModules` TypeScript compiler
+option will be enabled by default starting with this release. This enables some
+stricter checks in the TypeScript compiler that will likely lead to some new
+errors you have not seen before:
+
+```
+ERROR TS1205: Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'.
+```
+
+This error occurs when types are imported or exported using
+`import { MyType } from "./types.ts"` or `export { MyType } from "./types.ts"`
+instead of `import type` and `export type`. To fix this error, change your type
+imports and exports to use `import type { MyType } from "./types.ts"` and
+`export type { MyType } from "./types.ts"`;
+
+```ts
+// Bad
+import { MyType } from "./file.ts";
+export { MyType };
+
+// Good
+import type { MyType } from "./types.ts";
+export type { MyType };
+```
+
+```
+ "Only ECMAScript imports may use 'import type'.": {
+ "category": "Error",
+ "code": 1370
+ },
+ "This import is never used as a value and must use 'import type' because the 'importsNotUsedAsValues' is set to 'error'.": {
+ "category": "Error",
+ "code": 1371
+ },
+
+ "Cannot access ambient const enums when the '--isolatedModules' flag is provided.": {
+ "category": "Error",
+ "code": 2748
+ },
+```
+
+- feat(unstable): enable isolatedModules by default (#7327)
+
+- feat: Implement WebSocket API (#7051)
+- chore(std): remove std/ws connect method (#7403)
+
+- feat(run): run --watch
+
+- feat(test): coverage
+
+- feat(info): Dependency count and sizes (#6786)
+
+- feat(console): support CSS styling with "%c" (#7357)
+
+- doc updgades
+
+- lint upgrades
+
+# deno_core
+
+- refactor(core): rename CoreIsolate to JsRuntime (#7373)
+- refactor(core): merge CoreIsolate and EsIsolate (#7370)
+
+# deno_std
+
+- BREAKING(std/fs): remove writeJson and writeJsonSync (#7256)
+- BREAKING(std/fs): remove readJson and readJsonSync (#7255)
+
+# vscode changes
From 7228afb1346a7360e6be38e94259d4a3a9a47a71 Mon Sep 17 00:00:00 2001
From: Luca Casonato
Date: Sat, 12 Sep 2020 16:42:57 +0200
Subject: [PATCH 02/14] Add websocket and deno run --watch
---
public/posts/v1-4.md | 151 ++++++++++++++++++++++++++-------
public/posts/v1-4/websocket.js | 25 ++++++
2 files changed, 147 insertions(+), 29 deletions(-)
create mode 100644 public/posts/v1-4/websocket.js
diff --git a/public/posts/v1-4.md b/public/posts/v1-4.md
index c89a73805..267f7c639 100644
--- a/public/posts/v1-4.md
+++ b/public/posts/v1-4.md
@@ -1,54 +1,147 @@
-## isolatedModules
+Today we are releasing Deno 1.4.0. It is the largest feature release yet, with
+great additions like the web standard `WebSocket API`, `deno run --watch`, and
+integrated test coverage.
-For all users using `--unstable` the `isolatedModules` TypeScript compiler
-option will be enabled by default starting with this release. This enables some
-stricter checks in the TypeScript compiler that will likely lead to some new
-errors you have not seen before:
+If you already have Deno installed you can upgrade to 1.4 by running
+`deno upgrade`. If you are installing Deno for the first time, you can use one
+of the methods listed below:
+
+```shell
+# Using Shell (macOS and Linux):
+curl -fsSL https://deno.land/x/install/install.sh | sh
+
+# Using PowerShell (Windows):
+iwr https://deno.land/x/install/install.ps1 -useb | iex
+
+# Using Homebrew (macOS):
+brew install deno
+
+# Using Scoop (Windows):
+scoop install deno
+
+# Using Chocolatey (Windows):
+choco install deno
+```
+
+You can find more installation methods at
+https://deno.land/manual/getting_started/installation.
+
+# What's New in Deno?
+
+## Stricter type checks in `--unstable`
+
+For all users using `--unstable` the `isolatedModules` and
+`importsNotUsedAsValues` TypeScript compiler option will be enabled by default
+starting with this release. This enables some stricter checks in the TypeScript
+compiler that will likely lead to some new errors you have not seen before:
```
ERROR TS1205: Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'.
+
+ERROR TS1371: This import is never used as a value and must use 'import type' because the 'importsNotUsedAsValues' is set to 'error'.
```
-This error occurs when types are imported or exported using
+These errors occur when types are imported or re-exported using
`import { MyType } from "./types.ts"` or `export { MyType } from "./types.ts"`
-instead of `import type` and `export type`. To fix this error, change your type
-imports and exports to use `import type { MyType } from "./types.ts"` and
-`export type { MyType } from "./types.ts"`;
+instead of `import type` or `export type`. To fix this error, change your type
+imports and re-exports to use `export type { MyType } from "./types.ts"` and
+`export type { MyType } from "./types.ts"`. Example:
```ts
// Bad
import { MyType } from "./file.ts";
-export { MyType };
+export { MyType } from "./file.ts";
// Good
import type { MyType } from "./types.ts";
-export type { MyType };
+export type { MyType } from "./types.ts";
```
+These flags also disallow the use of `const enum`.
+
+## WebSocket API
+
+This release adds support for the web standard
+[`WebSocket API`](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API),
+available in all modern browsers. It can be used to communicate with remote
+servers over the WebSocket protocol.
+
+Here is a short example of how it works:
+
+```js
+// Start the connection to the WebSocket server at echo.websocket.org
+const ws = new WebSocket("ws://echo.websocket.org/");
+
+// Register event listeners for the open, close, and message events
+ws.onopen = () => {
+ console.log("WebSocket ready!");
+
+ // Send a message over the WebSocket to the server
+ ws.send("Hello World!");
+};
+ws.onmessage = (message) => {
+ // Log the message we recieve:
+ console.log("Received data:", message.data);
+
+ // Close the websocket after receiving the message
+ ws.close();
+};
+ws.onclose = () => console.log("WebSocket closed!");
+ws.onerror = (err) => console.log("WebSocket error:", err.error);
+
+// When running this the following is logged to the console:
+//
+// WebSocket ready!
+// Received data: Hello World!
+// WebSocket closed!
```
- "Only ECMAScript imports may use 'import type'.": {
- "category": "Error",
- "code": 1370
- },
- "This import is never used as a value and must use 'import type' because the 'importsNotUsedAsValues' is set to 'error'.": {
- "category": "Error",
- "code": 1371
- },
-
- "Cannot access ambient const enums when the '--isolatedModules' flag is provided.": {
- "category": "Error",
- "code": 2748
- },
+
+You can try it out locally:
+`deno run --allow-net echo.websocket.org https://deno.land/posts/v1-4/websocket.js`
+
+This release also removes the websocket connect methods from `std/ws`. Use the
+`WebSocket API` instead.
+
+## deno run --watch
+
+Deno now has an integrated file watcher that can be used to restart a script
+when any of its dependencies change.
+
+To use it run your script like you usually would, but add the --watch flag. You
+additionally have to add the `--unstable` flag, because this feature is not
+stable yet.
+
+```shell
+$ echo "console.log('Hello World!')" > ./mod.ts
+$ deno run --watch ./mod.ts
+Check file:///home/deno/mod.ts
+Hello World
+Watcher Process terminated! Restarting on file change...
+# now run `echo "console.log('File watching works!')" > ./mod.ts` in a different terminal
+Watcher File change detected! Restarting!
+Check file:///home/deno/mod.ts
+File watching works!
+Watcher Process terminated! Restarting on file change...
```
-- feat(unstable): enable isolatedModules by default (#7327)
+The watch flag takes no arguments for directories or files to watch. Instead it
+automatically determines all of the local imports of your script, and watches
+those.
+
+Currently file watching is only supported for `deno run`, but in the future it
+will also be added to `deno test`, `deno lint`, and other subcommands.
+
+## deno test --cover
+
+## deno info improvements
+
+## CSS styling in console.log
-- feat: Implement WebSocket API (#7051)
-- chore(std): remove std/ws connect method (#7403)
+## Updates to `deno lint`
-- feat(run): run --watch
+## Updates to `deno doc`
-- feat(test): coverage
+## Updates to `deno_core`
- feat(info): Dependency count and sizes (#6786)
diff --git a/public/posts/v1-4/websocket.js b/public/posts/v1-4/websocket.js
new file mode 100644
index 000000000..acec6b72a
--- /dev/null
+++ b/public/posts/v1-4/websocket.js
@@ -0,0 +1,25 @@
+// Start the connection to the WebSocket server at echo.websocket.org
+const ws = new WebSocket("ws://echo.websocket.org/");
+
+// Register event listeners for the open, close, and message events
+ws.onopen = () => {
+ console.log("WebSocket ready!");
+
+ // Send a message over the WebSocket to the server
+ ws.send("Hello World!");
+};
+ws.onmessage = (message) => {
+ // Log the message we recieve:
+ console.log("Received data:", message.data);
+
+ // Close the websocket after receiving the message
+ ws.close();
+};
+ws.onclose = () => console.log("WebSocket closed!");
+ws.onerror = (err) => console.log("WebSocket error:", err.error);
+
+// When running this the following is logged to the console:
+//
+// WebSocket ready!
+// Received data: Hello World!
+// WebSocket closed!
From 8bdd8d2ec5bac030669dce3a8db61a0e06e1f7c2 Mon Sep 17 00:00:00 2001
From: Luca Casonato
Date: Sat, 12 Sep 2020 18:14:42 +0200
Subject: [PATCH 03/14] Finished up deno, std, and vscode part of release post
---
public/posts/v1-4.json | 7 -
public/posts/v1-4.md | 164 -----------
public/posts/whats-new-in-deno-1-4.json | 7 +
public/posts/whats-new-in-deno-1-4.md | 267 ++++++++++++++++++
.../whats-new-in-deno-1-4/deno_lint_demo.mp4 | Bin 0 -> 588784 bytes
public/posts/whats-new-in-deno-1-4/info.png | Bin 0 -> 109736 bytes
public/posts/whats-new-in-deno-1-4/rainbow.js | 21 ++
.../posts/whats-new-in-deno-1-4/rainbow.png | Bin 0 -> 48458 bytes
.../remote_intellisense.mp4 | Bin 0 -> 1223341 bytes
.../websocket.js | 3 +
10 files changed, 298 insertions(+), 171 deletions(-)
delete mode 100644 public/posts/v1-4.json
delete mode 100644 public/posts/v1-4.md
create mode 100644 public/posts/whats-new-in-deno-1-4.json
create mode 100644 public/posts/whats-new-in-deno-1-4.md
create mode 100644 public/posts/whats-new-in-deno-1-4/deno_lint_demo.mp4
create mode 100644 public/posts/whats-new-in-deno-1-4/info.png
create mode 100644 public/posts/whats-new-in-deno-1-4/rainbow.js
create mode 100644 public/posts/whats-new-in-deno-1-4/rainbow.png
create mode 100644 public/posts/whats-new-in-deno-1-4/remote_intellisense.mp4
rename public/posts/{v1-4 => whats-new-in-deno-1-4}/websocket.js (86%)
diff --git a/public/posts/v1-4.json b/public/posts/v1-4.json
deleted file mode 100644
index a213790dd..000000000
--- a/public/posts/v1-4.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "title": "Deno 1.4",
- "author": "Bartek Iwańczuk and Luca Casonato",
- "publish_date": "2020-09-13T00:00:00.000Z",
- "images": [],
- "snippet": ""
-}
diff --git a/public/posts/v1-4.md b/public/posts/v1-4.md
deleted file mode 100644
index 267f7c639..000000000
--- a/public/posts/v1-4.md
+++ /dev/null
@@ -1,164 +0,0 @@
-Today we are releasing Deno 1.4.0. It is the largest feature release yet, with
-great additions like the web standard `WebSocket API`, `deno run --watch`, and
-integrated test coverage.
-
-If you already have Deno installed you can upgrade to 1.4 by running
-`deno upgrade`. If you are installing Deno for the first time, you can use one
-of the methods listed below:
-
-```shell
-# Using Shell (macOS and Linux):
-curl -fsSL https://deno.land/x/install/install.sh | sh
-
-# Using PowerShell (Windows):
-iwr https://deno.land/x/install/install.ps1 -useb | iex
-
-# Using Homebrew (macOS):
-brew install deno
-
-# Using Scoop (Windows):
-scoop install deno
-
-# Using Chocolatey (Windows):
-choco install deno
-```
-
-You can find more installation methods at
-https://deno.land/manual/getting_started/installation.
-
-# What's New in Deno?
-
-## Stricter type checks in `--unstable`
-
-For all users using `--unstable` the `isolatedModules` and
-`importsNotUsedAsValues` TypeScript compiler option will be enabled by default
-starting with this release. This enables some stricter checks in the TypeScript
-compiler that will likely lead to some new errors you have not seen before:
-
-```
-ERROR TS1205: Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'.
-
-ERROR TS1371: This import is never used as a value and must use 'import type' because the 'importsNotUsedAsValues' is set to 'error'.
-```
-
-These errors occur when types are imported or re-exported using
-`import { MyType } from "./types.ts"` or `export { MyType } from "./types.ts"`
-instead of `import type` or `export type`. To fix this error, change your type
-imports and re-exports to use `export type { MyType } from "./types.ts"` and
-`export type { MyType } from "./types.ts"`. Example:
-
-```ts
-// Bad
-import { MyType } from "./file.ts";
-export { MyType } from "./file.ts";
-
-// Good
-import type { MyType } from "./types.ts";
-export type { MyType } from "./types.ts";
-```
-
-These flags also disallow the use of `const enum`.
-
-## WebSocket API
-
-This release adds support for the web standard
-[`WebSocket API`](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API),
-available in all modern browsers. It can be used to communicate with remote
-servers over the WebSocket protocol.
-
-Here is a short example of how it works:
-
-```js
-// Start the connection to the WebSocket server at echo.websocket.org
-const ws = new WebSocket("ws://echo.websocket.org/");
-
-// Register event listeners for the open, close, and message events
-ws.onopen = () => {
- console.log("WebSocket ready!");
-
- // Send a message over the WebSocket to the server
- ws.send("Hello World!");
-};
-ws.onmessage = (message) => {
- // Log the message we recieve:
- console.log("Received data:", message.data);
-
- // Close the websocket after receiving the message
- ws.close();
-};
-ws.onclose = () => console.log("WebSocket closed!");
-ws.onerror = (err) => console.log("WebSocket error:", err.error);
-
-// When running this the following is logged to the console:
-//
-// WebSocket ready!
-// Received data: Hello World!
-// WebSocket closed!
-```
-
-You can try it out locally:
-`deno run --allow-net echo.websocket.org https://deno.land/posts/v1-4/websocket.js`
-
-This release also removes the websocket connect methods from `std/ws`. Use the
-`WebSocket API` instead.
-
-## deno run --watch
-
-Deno now has an integrated file watcher that can be used to restart a script
-when any of its dependencies change.
-
-To use it run your script like you usually would, but add the --watch flag. You
-additionally have to add the `--unstable` flag, because this feature is not
-stable yet.
-
-```shell
-$ echo "console.log('Hello World!')" > ./mod.ts
-$ deno run --watch ./mod.ts
-Check file:///home/deno/mod.ts
-Hello World
-Watcher Process terminated! Restarting on file change...
-# now run `echo "console.log('File watching works!')" > ./mod.ts` in a different terminal
-Watcher File change detected! Restarting!
-Check file:///home/deno/mod.ts
-File watching works!
-Watcher Process terminated! Restarting on file change...
-```
-
-The watch flag takes no arguments for directories or files to watch. Instead it
-automatically determines all of the local imports of your script, and watches
-those.
-
-Currently file watching is only supported for `deno run`, but in the future it
-will also be added to `deno test`, `deno lint`, and other subcommands.
-
-## deno test --cover
-
-## deno info improvements
-
-## CSS styling in console.log
-
-## Updates to `deno lint`
-
-## Updates to `deno doc`
-
-## Updates to `deno_core`
-
-- feat(info): Dependency count and sizes (#6786)
-
-- feat(console): support CSS styling with "%c" (#7357)
-
-- doc updgades
-
-- lint upgrades
-
-# deno_core
-
-- refactor(core): rename CoreIsolate to JsRuntime (#7373)
-- refactor(core): merge CoreIsolate and EsIsolate (#7370)
-
-# deno_std
-
-- BREAKING(std/fs): remove writeJson and writeJsonSync (#7256)
-- BREAKING(std/fs): remove readJson and readJsonSync (#7255)
-
-# vscode changes
diff --git a/public/posts/whats-new-in-deno-1-4.json b/public/posts/whats-new-in-deno-1-4.json
new file mode 100644
index 000000000..43674e21c
--- /dev/null
+++ b/public/posts/whats-new-in-deno-1-4.json
@@ -0,0 +1,7 @@
+{
+ "title": "What's new in Deno 1.4?",
+ "author": "Bartek Iwańczuk and Luca Casonato",
+ "publish_date": "2020-09-13T00:00:00.000Z",
+ "images": [],
+ "snippet": "Today we are releasing Deno 1.4.0. It is the largest feature release yet, with great additions like the web standard `WebSocket API`, `deno run --watch`, and integrated test coverage."
+}
diff --git a/public/posts/whats-new-in-deno-1-4.md b/public/posts/whats-new-in-deno-1-4.md
new file mode 100644
index 000000000..ec35f3d54
--- /dev/null
+++ b/public/posts/whats-new-in-deno-1-4.md
@@ -0,0 +1,267 @@
+Today we are releasing Deno 1.4.0. It is the largest feature release yet, with
+great additions like the web standard `WebSocket API`, `deno run --watch`, and
+integrated test coverage.
+
+If you already have Deno installed you can upgrade to 1.4 by running
+`deno upgrade`. If you are installing Deno for the first time, you can use one
+of the methods listed below:
+
+```shell
+# Using Shell (macOS and Linux):
+curl -fsSL https://deno.land/x/install/install.sh | sh
+
+# Using PowerShell (Windows):
+iwr https://deno.land/x/install/install.ps1 -useb | iex
+
+# Using Homebrew (macOS):
+brew install deno
+
+# Using Scoop (Windows):
+scoop install deno
+
+# Using Chocolatey (Windows):
+choco install deno
+```
+
+You can find more installation methods at
+https://deno.land/manual/getting_started/installation.
+
+The full release notes, including bug fixes, can be found at
+https://github.com/denoland/deno/releases/tag/v1.4.0.
+
+# New features and changes
+
+## Stricter type checks in `--unstable`
+
+For all users using `--unstable` the `isolatedModules` and
+`importsNotUsedAsValues` TypeScript compiler options will be switched on by
+default now. We will enable these flags by default for everyone in `v1.5`. These
+flags enable some stricter checks in the TypeScript compiler that will likely
+lead to some new errors you have not seen before:
+
+```
+ERROR TS1205: Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'.
+
+ERROR TS1371: This import is never used as a value and must use 'import type' because the 'importsNotUsedAsValues' is set to 'error'.
+```
+
+These errors occur when types are imported or re-exported using
+`import { MyType } from "./types.ts"` or `export { MyType } from "./types.ts"`
+instead of `import type` or `export type`. To fix this error, change your type
+imports and re-exports to use `export type { MyType } from "./types.ts"` and
+`export type { MyType } from "./types.ts"`. Example:
+
+```ts
+// Bad
+import { MyType } from "./file.ts";
+export { MyType } from "./file.ts";
+
+// Good
+import type { MyType } from "./types.ts";
+export type { MyType } from "./types.ts";
+```
+
+These flags also disallow the use of `const enum`.
+
+## WebSocket API
+
+This release adds support for the web standard
+[`WebSocket API`](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API),
+available in all modern browsers. It can be used to communicate with remote
+servers over the WebSocket protocol.
+
+Here is a short example of how it works:
+
+```js
+// Start the connection to the WebSocket server at echo.websocket.org
+const ws = new WebSocket("ws://echo.websocket.org/");
+
+// Register event listeners for the open, close, and message events
+ws.onopen = () => {
+ console.log("WebSocket ready!");
+
+ // Send a message over the WebSocket to the server
+ ws.send("Hello World!");
+};
+ws.onmessage = (message) => {
+ // Log the message we recieve:
+ console.log("Received data:", message.data);
+
+ // Close the websocket after receiving the message
+ ws.close();
+};
+ws.onclose = () => console.log("WebSocket closed!");
+ws.onerror = (err) => console.log("WebSocket error:", err.error);
+
+// When running this the following is logged to the console:
+//
+// WebSocket ready!
+// Received data: Hello World!
+// WebSocket closed!
+```
+
+You can try it out locally:
+`deno run --allow-net echo.websocket.org https://deno.land/posts/whats-new-in-deno-1-4/websocket.js`
+
+This release also removes the websocket connect methods from `std/ws`. Use the
+`WebSocket API` instead.
+
+## `deno run --watch`
+
+Deno now has an integrated file watcher that can be used to restart a script
+when any of its dependencies change.
+
+To use it run your script like you usually would, but add the `--watch` flag.
+You additionally have to add the `--unstable` flag because this feature is not
+stable yet.
+
+```shell
+$ echo "console.log('Hello World!')" > ./mod.ts
+$ deno run --watch ./mod.ts
+Check file:///home/deno/mod.ts
+Hello World
+Watcher Process terminated! Restarting on file change...
+# now run `echo "console.log('File watching works!')" > ./mod.ts` in a different terminal
+Watcher File change detected! Restarting!
+Check file:///home/deno/mod.ts
+File watching works!
+Watcher Process terminated! Restarting on file change...
+```
+
+The watch flag takes no arguments for directories or files to watch. Instead it
+automatically determines all of the local imports of your script, and watches
+those.
+
+Currently file watching is only supported for `deno run`, but in the future it
+will also be added to `deno test`, `deno lint`, and other subcommands.
+
+## `deno test --coverage`
+
+You can now find code that is not covered by your tests using the `--coverage`
+flag for `deno test`. When enabled this will print a summary of your code
+coverage per file after all tests are run. You additionally have to add the
+`--unstable` flag because this feature is not stable yet.
+
+```
+$ git clone git@github.com:denosaurs/deno_brotli.git && cd deno_brotli
+$ deno test --coverage --unstable
+Debugger listening on ws://127.0.0.1:9229/ws/5a593019-d185-478b-a928-ebc33e5834be
+Check file:///home/deno/deno_brotli/.deno.test.ts
+running 2 tests
+test compress ... ok (26ms)
+test decompress ... ok (13ms)
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (40ms)
+
+test coverage:
+file:///home/deno/deno_brotli/mod.ts 100.000%
+file:///home/deno/deno_brotli/wasm.js 100.000%
+```
+
+Currently the only available output format is the text summary. Other output
+formats like `lcov` and `json` will be added in the future.
+
+## `deno info` improvements
+
+The `deno info` tool for doing dependency analysis has gotten a major overhaul
+this update. It is now faster, more accurate, and it does not crash on type or
+runtime errors anymore.
+
+Additionally the file size of dependencies is now displayed making it very easy
+to figure out what dependencies are adding a lot of code to your project.
+
+![a screenshot of running `deno info https://deno.land/x/brotli/mod.ts`, which prints the a module graph for the `https://deno.land/x/brotli/mod.ts` module](/posts/whats-new-in-deno-1-4/info.png)
+
+## CSS styling in console.log
+
+Most modern browsers support styling `console.log` messages with CSS. In our
+ongoing effor to be as web compatible as possible, Deno now also supports CSS
+styling for `console.log`.
+
+To style a message, add a `%c` format parameter to your message, and specify the
+styles to apply as an argument to `console.log`:
+
+```js
+console.log("%cStop!", "color:red;font-weight:bold");
+// This will print a bold red `Stop!` to the console.
+```
+
+Deno supports the CSS properties `color`, `background-color`, `font-weight`,
+`font-style`, `text-decoration-color`, and `text-decoration-line`. Support for
+these properties, and custom rgb, hex, and hsl colors depdend on if your
+terminal's support for ANSI.
+
+![a screenshot of running `deno run https://deno.land/posts/whats-new-in-deno-1-4/rainbow.js`, which prints a rainbow with Deno 1.4 written on it to the console](/posts/whats-new-in-deno-1-4/rainbow.png)
+_View the source code at
+https://deno.land/posts/whats-new-in-deno-1-4/rainbow.js_
+
+## Updates to `deno lint`
+
+In this release the adds the final 5 rules required to get `deno lint` rules on
+par with recommended `eslint` and `typescript-eslint` ruleset. This means that
+`deno lint` should be able to catch all errors that `@eslint/recommended` and
+`@typescript-eslint/recommended` can (at an order of magnitude better
+performance). This is a major step towards stabilizing `deno lint`.
+
+## Updates to `deno doc`
+
+`deno doc` and https://doc.deno.land has also gotten a round of new featuers and
+fixes this release. Support for the `export { foo };` syntax has been added
+(exporting a statement after declartaion), and re-exports of multiple symbols
+with the same name are now supported.
+
+To try out these new features, just browse any module on https://doc.deno.land.
+It has been updated with the new release already.
+
+# Changes in deno.land/std
+
+In this release the `writeJson`, `writeJsonSync`, `readJson`, and `readJsonSync`
+functions have been removed from the https://deno.land/std/fs. You can easially
+switch them out with these functions:
+
+```diff
+- const accounting = await readJson("accounting.json");
++ const accounting = JSON.parse(await Deno.readTextFile("accounting.json"));
+
+- const accounting = writeJsonSync("accounting.json");
++ const accounting = JSON.parse(Deno.readTextFileSync("accounting.json"));
+
+- await writeJson("hello_world.json", { "hello": "world" });
++ await Deno.writeTextFile("hello_world.json", JSON.stringify({ "hello": "world" }));
+
+- writeJsonSync("hello_world.json", { "hello": "world" });
++ Deno.writeTextFileSync("hello_world.json", JSON.stringify({ "hello": "world" }));
+```
+
+# Changes to `deno_core`
+
+
+
+# Updates to the VS Code extension
+
+The official
+[VS Code extension for Deno](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno)
+has had some major feature releases recently. Here is a quick summary:
+
+## Remote URL IntelliSense
+
+A great new feature of the extension is IntelliSense for deno.land imports. It
+gives you autocomplete suggestions for module names on deno.land/x, all of their
+versions, and their full directory listing. All of this is done without actually
+downloading the module source code, instead it is all powered by
+[the recent updates to deno.land/x](http://localhost:3000/posts/registry2).
+
+
+
+## Inline `deno lint` diagnostics
+
+`deno lint` is now fully integrated with the extension. To enable it, just set
+the `deno.unstable` and `deno.lint` settings in the extension to `true`. After
+doing this you will get inline real-time diagnostics for your code:
+
+
diff --git a/public/posts/whats-new-in-deno-1-4/deno_lint_demo.mp4 b/public/posts/whats-new-in-deno-1-4/deno_lint_demo.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..fa41e34841c1652e1406537f8ed238ea7c060770
GIT binary patch
literal 588784
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