diff --git a/src/generator/common.ts b/src/generator/common.ts index bcf8d3d..8bad331 100644 --- a/src/generator/common.ts +++ b/src/generator/common.ts @@ -44,15 +44,15 @@ export const generateSchemas = async ({ const schemaName = toValidIdentifier(`${mapName}_${path}`); const zodSchema = schemaToZod(schema); - write(`const ${schemaName} = lazyObject(() => ${zodSchema});`); + await write(`const ${schemaName} = lazyObject(() => ${zodSchema});`); pathToSchemaMap.set(path, schemaName); } - write(`const ${mapName} = lazyObject(() => ({`); + await write(`const ${mapName} = lazyObject(() => ({`); for (const [scriptPath, schemaName] of pathToSchemaMap) { - write(`${JSON.stringify(scriptPath)}: ${schemaName},`); + await write(`${JSON.stringify(scriptPath)}: ${schemaName},`); } - write("} as const))"); + await write("} as const))"); }; export type SchemaToZodOptions = { diff --git a/src/generator/index.ts b/src/generator/index.ts index 146b193..0b526e3 100644 --- a/src/generator/index.ts +++ b/src/generator/index.ts @@ -9,8 +9,9 @@ import { runWithBuffer } from "./common.js"; export const generate = async (output: Writable) => { const allResourceTypes = await listResourceTypes(); + return run(output, allResourceTypes, async () => { - writePreamble(); + await writePreamble(); const results = await Promise.all( [generateResources, generateScripts, generateFlows].map((fn) => diff --git a/src/generator/preamble.ts b/src/generator/preamble.ts index 9de25ef..8ef1598 100644 --- a/src/generator/preamble.ts +++ b/src/generator/preamble.ts @@ -20,8 +20,8 @@ const preamble = dedent` } `; -export const writePreamble = () => { +export const writePreamble = async () => { const { write } = getContext()!; - write(preamble); + await write(preamble); }; diff --git a/src/generator/resources.ts b/src/generator/resources.ts index cc25d7f..7dc9540 100644 --- a/src/generator/resources.ts +++ b/src/generator/resources.ts @@ -22,7 +22,7 @@ const preamble = dedent` export const generateResources = async () => { const { write, allResourceTypes } = getContext()!; - write(preamble); + await write(preamble); const resourcesByType = new Map(); for await (const { @@ -45,35 +45,37 @@ export const generateResources = async () => { resourceTypeToSchema: resourceTypeSchemaName, }); - write(`const ${typeSchemaName} = lazyObject(() => ${resourceTypeSchema});`); + await write( + `const ${typeSchemaName} = lazyObject(() => ${resourceTypeSchema});`, + ); const referencesSchemaName = resourceReferencesSchemaName( resourceType.name, ); const referencesSchema = schemaToZod(makeReferencesSchema(paths)); - write( + await write( `const ${referencesSchemaName} = lazyObject(() => ${referencesSchema});`, ); } - write(`const ${resourceToTypeMap} = lazyObject(() => ({`); + await write(`const ${resourceToTypeMap} = lazyObject(() => ({`); for (const [resourceTypeName, paths] of resourcesByType) { const typeSchemaName = resourceTypeSchemaName(resourceTypeName); for (const path of paths) { - write(`${JSON.stringify(path)}: ${typeSchemaName},`); + await write(`${JSON.stringify(path)}: ${typeSchemaName},`); } } - write(`} as const));`); + await write(`} as const));`); - write("export type ResourceTypes = {"); + await write("export type ResourceTypes = {"); for (const resourceTypeName of [...resourcesByType.keys()].toSorted()) { const typeSchemaName = resourceTypeSchemaName(resourceTypeName); - write( + await write( `${JSON.stringify(resourceTypeName)}: z.infer,`, ); } - write("}"); + await write("}"); }; export const resourceReferencesSchemaName = (resourceType: string) =>