const dylib = Deno.dlopen("./add.so", {
add: {
parameters: ["i32", "i32"],
result: "i32",
},
});
console.assert(dylib.symbols.add(1, 2) === 3);
deno test --doc
でMarkdownがサポートされました <!-- README.md -->
## Usage
```ts
import { connect } from "https://deno.land/x/redis/mod.ts";
const redis = await connect({ hostname: "127.0.0.1" });
console.assert(await redis.ping() === "PONG");
console.assert(await redis.quit() === "OK");
```
$ deno test --doc --import-map=import_map.test.json README.md
https://uki00a.github.io/blog/articles/007-how-to-effectively-test-README-with-deno-test-doc/
const stream = new WebSocketStream("ws://localhost:3000");
const { readable, writable } = await stream.connection;
const writer = writable.getWriter();
await writer.write("Hello world!");
setTimeout(() => stream.close(), 5000);
for await (const message of readable) {
console.log(message);
}
self.structuredClone
のサポートDeno.writeFile
でAbortSignal
がサポートDENO_TLS_CA_STORE
--unsafely-treat-insecure-origin-as-secure
オプションがサポートSubtleCrypto#importKey/exportKey
でのHMACのサポートなど)deno lsp
でRefactoringアクションがサポートObject.hasOwn
のサポートなど)より詳しくはmaguroさんの記事や公式のリリースノートを参照
deno_std v0.104.0で追加された新規モジュール
標準のWeb Crypto APIを拡張し、様々なアルゴリズムを提供します。
Deno本体でWeb Crypto APIの実装が進んできたため、元々存在したstd/hashは将来的にこちらへ置き換えられる予定のようです。
deno_std v0.102.0で追加された新規モジュール
Kotlinの標準ライブラリに影響を受けているようです。
import { groupBy } from "https://deno.land/std@0.106.0/collections/group_by.ts";
const users = [{ name: "foo", group: "admin" }, { name: "bar", group: "normal" }];
const usersByGroup = groupBy(users, (it) => it.group);
console.log(usersByGroup["admin"]);
Deno.readFile
, Deno.listen
, 及びDeno.serveHttp
などのAPIがサポートMDNの互換性テーブルの欄にDenoが掲載されました
例)
deno info --json
と同様の機能を提供してくれるRustクレート
JavaScriptからも利用できます。
import { createGraph } from "https://deno.land/x/deno_graph@0.4.0/mod.ts";
const graph = await createGraph("https://deno.land/x/deno_graph@0.4.0/mod.ts");
console.log(graph.toJSON().modules.map((x) => x.specifier));
import { doc } from "https://deno.land/x/deno_doc@v0.13.0/mod.ts";
const nodes = await doc("https://deno.land/x/deno_doc@v0.13.0/mod.ts");
console.log(nodes.map((x) => x.name));
公式マニュアルがdenoland/denoからdenoland/manualへ移行
コントリビューションしやすくなりそう
Next.jsに影響を受けたフレームワーク
まだベータ版なので、ここで紹介した機能はうまく動かないケースも発生する可能性もあると思います
元々、Aleph.jsではビルド基盤としてtscが使用されていました。
v0.3ベータにてビルド基盤がswc+esbuildへ移行されました。
ビルドの高速化などが期待されます。
Next.jsにおけるgetStaticProps
/ getStaticPaths
相当の機能
import React from 'react'
import type { SSROptions } from 'aleph/types'
export const ssr: SSROptions = {
props: async router => ({ date: Date.now() }),
paths: async () => [],
}
export default function Page(props) {
return (
<p>{props.date}</p>
)
}
Aleph.jsのランタイムを拡張する仕組み
// aleph.config.ts
import windicss from 'https://deno.land/x/aleph_plugin_windicss@v0.0.2/plugin.ts'
import type { Config } from 'aleph/types'
export default {
plugins: [windicss]
} as Config
これだけでTailwind CSS互換のクラスが使用できます!
import React from 'react'
export default function App() {
return (
<>
<link rel="stylesheet" href="../style/app.module.css" />
<h1 className="$title">Hello world!</h1>
</>
)
}
Deno+ReactベースのWebフレームワーク
DB#queryなどのメソッドで型パラメータがサポート、Rowsタイプへの破壊的変更、パフォーマンスの向上などが実施されています。
Cookie関連のAPIが非同期に変更、Deno Deployのサポートの強化など