{"version":3,"sources":["../lib/index.ts","../lib/grpc-service.ts","../lib/config.ts","../lib/client.ts","../lib/tools.ts","../lib/plugin.ts","../lib/service.ts"],"sourcesContent":["export { default as grpcServerService } from './grpc-service.ts'\nexport { credentials } from '@grpc/grpc-js'\nexport * from './client.ts'\nexport { default as createClient } from './client.ts'\nexport { default as createService } from './service.ts'\nimport './plugin.ts'\nexport { default as pluginManage } from './plugin.ts'\nexport * from './plugin.ts'","import { IService, logger } from \"fly-boot\";\nimport { GrpcService } from \"./service.ts\";\nimport { Server, ServerCredentials } from \"@grpc/grpc-js\";\nimport grpcConfig from \"./config.ts\";\n\n\nclass GrpcServerService implements IService {\n    private readonly server: Server;\n    constructor() {\n        this.server = new Server();\n    }\n\n    addServices(services: Array<GrpcService>) {\n        for (const { service, mapper } of services) {\n            this.server.addService(service, mapper);\n        }\n    }\n\n    async listen() {\n        this.server.bindAsync(`${grpcConfig.host}:${grpcConfig.port}`, ServerCredentials.createInsecure(), (err, port) => {\n            logger.success('grpc listening', `${grpcConfig.host}:${grpcConfig.port}`)\n        });\n    }\n}\n\nexport default new GrpcServerService()","import { ConfigLoader } from \"fly-boot\";\n\nexport class GrpcConfigInterface {\n    path: string\n    host: string\n    port: number\n}\n\n/**\n * 服务配置\n */\nexport class GrpcConfig extends GrpcConfigInterface {\n    constructor(options?: any) {\n        super();\n        Object.assign(this, options)\n    }\n}\n\nexport default ConfigLoader.load(GrpcConfig, \"grpc.yml\")","import { ok } from 'assert'\nimport { ChannelCredentials, GrpcObject, ServiceClientConstructor, credentials, loadPackageDefinition } from \"@grpc/grpc-js\";\nimport { loadProto } from \"./tools.ts\";\nimport pluginManage from './plugin.ts';\n\nexport type ClientOptions = {\n    host: string,\n    path: string,\n    package: string,\n    service: string,\n    interfaces: Array<string>,\n    credentials?: ChannelCredentials,\n}\n\n\nexport type ClientFunction = (message: Record<any, any>) => Promise<void>\n\nexport type ClientInstance = { [key: string]: ClientFunction | any }\n\n\nconst isNull = (value: any): boolean => value === null || value === undefined\nconst callbackToPromise = () => {\n\n}\n\n\nexport default <M extends ClientInstance>(options: ClientOptions): M => {\n    const definition = loadProto(options.path);\n    ok(!isNull(definition), `加载 ${options.path} 出错！`)\n    const grpcObject: GrpcObject = loadPackageDefinition(definition);\n    ok(!isNull(grpcObject), `加载 ${options.path} 出错！`)\n    const grpcPackage = grpcObject[options.package]\n    ok(!isNull(grpcPackage), `package ${options.package} 不存在！`)\n    const ClientConstructor = (grpcPackage[options.service] as ServiceClientConstructor);\n    ok(!isNull(grpcPackage), `service ${options.service} 不存在！`)\n    const grpcClient = new ClientConstructor(options.host, options.credentials ?? credentials.createInsecure()) as unknown as M;\n\n    const client: M = new Proxy(grpcClient, {\n        get: (target, propKey, receiver) => {\n            let value = Reflect.get(target, propKey, receiver);\n            if (typeof value !== 'function' || !options.interfaces.includes(String(propKey))) {\n                return value;\n            }\n            const call = value as Function\n\n            const run = (params: any): Promise<any> => {\n                return new Promise((reslove, reject) => {\n                    const callback = (err, response) => err ? reject(err) : reslove(response)\n                    call.apply(grpcClient, [params, callback]);\n                })\n            }\n\n            return (args: any) => pluginManage.callClientMiddleware(args, run)\n        }\n    });\n\n    return client;\n}","import { PackageDefinition, loadSync } from \"@grpc/proto-loader\"\nimport grpcConfig from \"./config.ts\"\nimport { join } from 'path'\n\nexport const loadProto = (path: string): PackageDefinition => {\n    return loadSync(join(grpcConfig.path, path), {\n        keepCase: true,\n        longs: String,\n        enums: String,\n        defaults: true,\n        oneofs: true\n    })\n}","import compose, { ComposedMiddleware } from 'koa-compose';\n\ntype Middleware = compose.Middleware<any>\ntype Middlewares = Array<Middleware>\n\nclass PluginManage {\n\n    clientMiddlewares: Middlewares = []\n\n    constructor() {\n        console.log(\"Plugin\")\n    }\n\n    addClientMiddleware(middleware: Middleware) {\n        this.clientMiddlewares.push(middleware)\n    }\n\n    callClientMiddleware(ctx: any, callClient: ComposedMiddleware<any>) {\n        const fnMiddleware = compose([].concat(this.clientMiddlewares, [callClient]));\n        return fnMiddleware(ctx);\n    }\n}\n\n\nconst pluginManage = new PluginManage()\n\nexport default pluginManage;\n\ntype AddPluginOptions = {\n    clientMiddleware?: Middleware,\n}\n\nexport const addPlugin = ({ clientMiddleware }: AddPluginOptions) => {\n    clientMiddleware && pluginManage.addClientMiddleware(clientMiddleware)\n}","import { GrpcObject, ServiceClientConstructor, ServiceDefinition, UntypedServiceImplementation, loadPackageDefinition } from \"@grpc/grpc-js\";\nimport { loadProto } from \"./tools.ts\";\nimport { PackageDefinition } from \"@grpc/proto-loader\";\n\nexport type ServiceOptions = {\n    path: string\n    package: string\n    service: string\n}\n\nexport type GrpcService = {\n    service: ServiceDefinition,\n    mapper: UntypedServiceImplementation\n}\n\nexport default (options: ServiceOptions, mapper: UntypedServiceImplementation): GrpcService => {\n    const definition: PackageDefinition = loadProto(options.path);\n    const grpcObject: GrpcObject = loadPackageDefinition(definition);\n    const grpcPackage: GrpcObject = grpcObject[options.package] as GrpcObject;\n    const grpcService = grpcPackage[options.service] as ServiceClientConstructor;\n    return { service: grpcService.service, mapper }\n}"],"mappings":"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","names":["import_fly_boot","import_grpc_js","import_grpc_js","compose","import_grpc_js"]}