{"version":3,"sources":["../lib/client.ts","../lib/tools.ts","../lib/config.ts","../lib/plugin.ts"],"sourcesContent":["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 { 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 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}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,qBAA6G;;;ACD7G,0BAA4C;;;ACA5C,sBAA6B;AAEtB,IAAM,sBAAN,MAA0B;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACJ;AAKO,IAAM,aAAN,cAAyB,oBAAoB;AAAA,EAChD,YAAY,SAAe;AACvB,UAAM;AACN,WAAO,OAAO,MAAM,OAAO;AAAA,EAC/B;AACJ;AAEA,IAAO,iBAAQ,6BAAa,KAAK,YAAY,UAAU;;;ADhBvD,kBAAqB;AAEd,IAAM,YAAY,CAAC,SAAoC;AAC1D,aAAO,kCAAS,kBAAK,eAAW,MAAM,IAAI,GAAG;AAAA,IACzC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,EACZ,CAAC;AACL;;;AEZA,yBAA4C;AAK5C,IAAM,eAAN,MAAmB;AAAA,EAEf,oBAAiC,CAAC;AAAA,EAElC,cAAc;AACV,YAAQ,IAAI,QAAQ;AAAA,EACxB;AAAA,EAEA,oBAAoB,YAAwB;AACxC,SAAK,kBAAkB,KAAK,UAAU;AAAA,EAC1C;AAAA,EAEA,qBAAqB,KAAU,YAAqC;AAChE,UAAM,mBAAe,mBAAAA,SAAQ,CAAC,EAAE,OAAO,KAAK,mBAAmB,CAAC,UAAU,CAAC,CAAC;AAC5E,WAAO,aAAa,GAAG;AAAA,EAC3B;AACJ;AAGA,IAAM,eAAe,IAAI,aAAa;AAEtC,IAAO,iBAAQ;;;AHNf,IAAM,SAAS,CAAC,UAAwB,UAAU,QAAQ,UAAU;AAMpE,IAAO,iBAAQ,CAA2B,YAA8B;AACpE,QAAM,aAAa,UAAU,QAAQ,IAAI;AACzC,wBAAG,CAAC,OAAO,UAAU,GAAG,gBAAM,QAAQ,IAAI,qBAAM;AAChD,QAAM,iBAAyB,sCAAsB,UAAU;AAC/D,wBAAG,CAAC,OAAO,UAAU,GAAG,gBAAM,QAAQ,IAAI,qBAAM;AAChD,QAAM,cAAc,WAAW,QAAQ,OAAO;AAC9C,wBAAG,CAAC,OAAO,WAAW,GAAG,WAAW,QAAQ,OAAO,2BAAO;AAC1D,QAAM,oBAAqB,YAAY,QAAQ,OAAO;AACtD,wBAAG,CAAC,OAAO,WAAW,GAAG,WAAW,QAAQ,OAAO,2BAAO;AAC1D,QAAM,aAAa,IAAI,kBAAkB,QAAQ,MAAM,QAAQ,eAAe,2BAAY,eAAe,CAAC;AAE1G,QAAM,SAAY,IAAI,MAAM,YAAY;AAAA,IACpC,KAAK,CAAC,QAAQ,SAAS,aAAa;AAChC,UAAI,QAAQ,QAAQ,IAAI,QAAQ,SAAS,QAAQ;AACjD,UAAI,OAAO,UAAU,cAAc,CAAC,QAAQ,WAAW,SAAS,OAAO,OAAO,CAAC,GAAG;AAC9E,eAAO;AAAA,MACX;AACA,YAAM,OAAO;AAEb,YAAM,MAAM,CAAC,WAA8B;AACvC,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,gBAAM,WAAW,CAAC,KAAK,aAAa,MAAM,OAAO,GAAG,IAAI,QAAQ,QAAQ;AACxE,eAAK,MAAM,YAAY,CAAC,QAAQ,QAAQ,CAAC;AAAA,QAC7C,CAAC;AAAA,MACL;AAEA,aAAO,CAAC,SAAc,eAAa,qBAAqB,MAAM,GAAG;AAAA,IACrE;AAAA,EACJ,CAAC;AAED,SAAO;AACX;","names":["compose"]}