25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
/** Writes the terminal protocol as JSON Schema, for generating the app's models. */
|
|
import { mkdirSync, writeFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { z } from 'zod';
|
|
import {
|
|
imageUploadResponseSchema, registerTerminalRequestSchema, registerTerminalResponseSchema, syncRequestSchema,
|
|
syncResponseSchema, terminalEventSchema,
|
|
} from '../src/terminal';
|
|
|
|
const schemas = {
|
|
TerminalEvent: [terminalEventSchema, 'input'],
|
|
RegisterTerminalRequest: [registerTerminalRequestSchema, 'input'],
|
|
RegisterTerminalResponse: [registerTerminalResponseSchema, 'output'],
|
|
SyncRequest: [syncRequestSchema, 'input'],
|
|
SyncResponse: [syncResponseSchema, 'output'],
|
|
ImageUploadResponse: [imageUploadResponseSchema, 'output'],
|
|
} as const;
|
|
|
|
const out = join(__dirname, '..', 'schema');
|
|
mkdirSync(out, { recursive: true });
|
|
for (const [name, [schema, io]] of Object.entries(schemas)) {
|
|
writeFileSync(join(out, `${name}.json`), JSON.stringify(z.toJSONSchema(schema, { io }), null, 2) + '\n');
|
|
}
|
|
console.log(`Wrote ${Object.keys(schemas).length} schemas to ${out}`);
|