UNPKG

@chord-ts/rpc

Version:

💎 Cutting edge transport framework vanishing borders between frontend and backend

247 lines (246 loc) • 7.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.example = exports.SchemaGenerator = void 0; const server_1 = require("../server"); class SchemaGenerator { constructor(config) { const openrpc = config?.openrpc ?? '1.2.6'; const info = config?.info ?? { title: 'OpenRPC Docs', description: 'Automatically generated by Chord RPC framework', version: '0.0.1', license: { name: 'Apache 2.0' } }; const servers = config?.servers ?? [{ url: 'http://localhost:5173' }]; const methods = []; for (const [, v] of server_1.Composer.methods.entries()) { const desc = this.describeMethod(v); if (!desc) continue; methods.push(desc); } this.schema = { openrpc, info, servers, methods }; } describeMethod(method) { if (!method.validators?.in) return; return; const name = method.key.toString(); const [serviceName, methodName] = name.split('.'); const tags = [{ name: serviceName }]; let params = []; let result; } render() { return JSON.stringify(this.schema, null, 2); } } exports.SchemaGenerator = SchemaGenerator; exports.example = { openrpc: '1.2.1', info: { version: '1.0.0', title: 'Petstore', license: { name: 'MIT' } }, servers: [ { url: 'http://localhost:8080' } ], methods: [ { name: 'list_pets', summary: 'List all pets', tags: [ { name: 'pets' } ], params: [ { name: 'limit', description: 'How many items to return at one time (max 100)', required: false, schema: { type: 'integer', minimum: 1 } } ], result: { name: 'pets', description: 'A paged array of pets', schema: { $ref: '#/components/schemas/Pets' } }, errors: [ { code: 100, message: 'pets busy' } ], examples: [ { name: 'listPetExample', description: 'List pet example', params: [ { name: 'limit', value: 1 } ], result: { name: 'listPetResultExample', value: [ { id: 7, name: 'fluffy', tag: 'poodle' } ] } } ] }, { name: 'create_pet', summary: 'Create a pet', tags: [ { name: 'pets' } ], params: [ { name: 'newPetName', description: 'Name of pet to create', required: true, schema: { type: 'string' } }, { name: 'newPetTag', description: 'Pet tag to create', schema: { type: 'string' } } ], examples: [ { name: 'createPetExample', description: 'Create pet example', params: [ { name: 'newPetName', value: 'fluffy' }, { name: 'tag', value: 'poodle' } ], result: { name: 'listPetResultExample', value: 7 } } ], result: { $ref: '#/components/contentDescriptors/PetId' } }, { name: 'get_pet', summary: 'Info for a specific pet', tags: [ { name: 'pets' } ], params: [ { $ref: '#/components/contentDescriptors/PetId' } ], result: { name: 'pet', description: 'Expected response to a valid request', schema: { $ref: '#/components/schemas/Pet' } }, examples: [ { name: 'getPetExample', description: 'get pet example', params: [ { name: 'petId', value: 7 } ], result: { name: 'getPetExampleResult', value: { name: 'fluffy', tag: 'poodle', id: 7 } } } ] } ], components: { contentDescriptors: { PetId: { name: 'petId', required: true, description: 'The id of the pet to retrieve', schema: { $ref: '#/components/schemas/PetId' } } }, schemas: { PetId: { type: 'integer', minimum: 0 }, Pet: { type: 'object', required: ['id', 'name'], properties: { id: { $ref: '#/components/schemas/PetId' }, name: { type: 'string' }, tag: { type: 'string' } } }, Pets: { type: 'array', items: { $ref: '#/components/schemas/Pet' } } } } };