import { test } from 'vitest'; import { z } from 'zod'; import { getServiceSchema, type ServiceSchema } from './getServiceSchema'; import { Method } from './Method'; import { Service } from './Service'; test('gen php', () => { const schema = getServiceSchema(HelloService); if (!schema) { throw new Error('schema not found'); } console.log(genPHPService(schema)); }); function genPHPService(schema: ServiceSchema) { const sb = []; sb.push(` #[Service([ 'name' => '${schema.name}', ])] interface ${schema.name.split('.').at(-1)} { ${schema.methods .map((v) => ` #[Method()] function ${v.name}($req, $meta = null); `.trim(), ) .join('\n') .replaceAll(/^/gm, ' ')} } `); return sb.join('\n'); } const HelloRequestSchema = z.object({ name: z.string() }); type HelloRequest = z.infer; @Service({ name: 'hello.HelloService' }) class HelloService { @Method({ input: HelloRequestSchema }) hello(_req: HelloRequest) {} @Method({ input: HelloRequestSchema }) hi(_req: HelloRequest) {} }