const kv = await Deno.openKv(":memory:");
// メッセージを追加します。
const res = await kv.enqueue({ id: 1, payload: "foo" });
assert(res.ok);
let message;
const listenPromise = kv.listenQueue((_message) => { // キューを購読します
message = _message;
});
kv.close();
await listenPromise; // closeするとresolveされます
console.info(message); // Output: { id: 1, payload: "foo" }
ReadableStream.from
が実装const readableStream = ReadableStream.from(gen());
for await (const i of readableStream) {
console.info(i);
}
async function* gen() {
for (let i = 0; i < 5; i++) {
await sleep(i * 1000);
yield i;
}
}
function sleep(ms) {
return new Promise((ok) => setTimeout(ok, ms));
}
deno lint
にfresh向けのルールが追加deno.json
で"fresh"
タグを指定することで有効化できます。
{
"lint": {
"rules": {
"tags": ["fresh", "recommended"]
}
}
}
props.children
がサポートimport type { PageProps } from "$fresh/server.ts";
import Collapse from "../islands/Collapse.tsx";
export default function Index(props: PageProps) {
return (
<Collapse>
<Collapse>
<Content />
</Collapse>
</Collapse>
);
}
// islands/Example.tsx
import truncate from "npm:lodash.truncate@4.4.2";
interface Props {
text: string;
}
export default function Example({ text }: Props) {
return <span>{ truncate(text) }</span>;
}
renderAsync
フックがサポートSSRの実行前後に非同期処理を仕込めるようになりました。
これにより、UnoCSSの公式サポートが入る可能性があるかもしれません。
// routes/users/[id].tsx
export default async function User(
req: Request,
ctx: RouteContext,
) {
const user = await findUserByID(ctx.params.id);
return <UserDetail user={user} />;
}
import type { Plugin } from "$fresh/server.ts";
import { loggingMiddleware } from "./logging_middleware.ts";
import { SamplePage } from "./SamplePage.tsx";
export default function samplePlugin(options: { path: string }): Plugin {
return {
name: "samplePlugin",
middlewares: [{
middleware: { handler: loggingMiddleware },
path: "/",
}],
routes: [{
path: options.path,
component: SamplePage,
}],
};
}
// OK
const { deferred } = await import("https://deno.land/std@0.193.0/async/deferred.ts");
// 以下の形式はまだサポートされていません。
let mod = "async/retry.ts";
const { retry } = await import(`https://deno.land/std@0.193.0/${mod}`);