testCollectionsWaitForAsyncSchemas
tcmts.content.test.testCollectionsWaitForAsyncSchemas · #jrdf5cen · function
import { collection } from "#codebase/tcmts/content";
import type { StandardSchema } from "#codebase/tcmts/content";
import { postSchema } from "#codebase/tcmts/content/test";
import assert from "node:assert/strict";
export const testCollectionsWaitForAsyncSchemas = async () => {
// postSchema, answering later (as Zod's async refinements do)
const later: StandardSchema<{ title: string; date: string }> = {
"~standard": {
...postSchema["~standard"],
validate: async (v) => postSchema["~standard"].validate(v),
},
};
const posts = collection(
{
a: "---\ntitle: A\ndate: 2026-11-07\n---\nHi.\n",
b: "---\ntitle: B\ndate: 2026-11-08\n---\n",
},
{ schema: later },
);
assert.throws(() => posts.all(), /checks asynchronously: `await` its `load\(\)`/);
await posts.load();
assert.deepEqual(
posts.all().map((e) => e.data.title),
["A", "B"],
);
assert.equal(posts.get("b")?.data.date, "2026-11-08");
// tcm's check, as a file is saved: a promise of what's wrong
const check = (posts as unknown as Record<symbol, (n: string, t: string) => Promise<string[]>>)[
Symbol.for("tcm.collection")
]!;
assert.deepEqual(await check("x", "---\ntitle: 3\n---\n"), [
"title: a title, as text",
"date: a day, YYYY-MM-DD",
]);
assert.deepEqual(await check("x", "---\ntitle: T\ndate: 2026-11-07\n---\n"), []);
}
uses