Skip to content

Commit a053338

Browse files
authored
Updated ts client generator (#315)
1 parent fca462e commit a053338

File tree

1 file changed

+71
-12
lines changed

1 file changed

+71
-12
lines changed

typescript-generator/client.js

Lines changed: 71 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,27 @@ const clientDefinitions = `/*
4242
* under the License.
4343
*/
4444
45-
import * as T from './types'
45+
/// <reference types="node" />
46+
4647
import {
47-
TransportRequestPromise,
48+
ClientOptions,
49+
ConnectionPool,
50+
Serializer,
51+
Transport,
52+
errors,
53+
RequestEvent,
54+
ResurrectEvent,
55+
ApiError
56+
} from '../index'
57+
import Helpers from '../lib/Helpers'
58+
import {
59+
ApiResponse,
4860
TransportRequestCallback,
49-
TransportRequestOptions,
50-
ApiError,
51-
ApiResponse
61+
TransportRequestPromise,
62+
TransportRequestParams,
63+
TransportRequestOptions
5264
} from '../lib/Transport'
65+
import * as T from './types'
5366
5467
/**
5568
* We are still working on this type, it will arrive soon.
@@ -58,8 +71,42 @@ import {
5871
*/
5972
type TODO = Record<string, any>
6073
74+
// Extend API
75+
interface ClientExtendsCallbackOptions {
76+
ConfigurationError: errors.ConfigurationError,
77+
makeRequest(params: TransportRequestParams, options?: TransportRequestOptions): Promise<void> | void;
78+
result: {
79+
body: null,
80+
statusCode: null,
81+
headers: null,
82+
warnings: null
83+
}
84+
}
85+
declare type extendsCallback = (options: ClientExtendsCallbackOptions) => any;
86+
// /Extend API
87+
6188
declare type callbackFn<TResponse, TContext> = (err: ApiError, result: ApiResponse<TResponse, TContext>) => void;
62-
declare class ESAPI {\n`
89+
interface NewClientTypes {
90+
connectionPool: ConnectionPool
91+
transport: Transport
92+
serializer: Serializer
93+
extend(method: string, fn: extendsCallback): void
94+
extend(method: string, opts: { force: boolean }, fn: extendsCallback): void;
95+
helpers: Helpers
96+
child(opts?: ClientOptions): NewClientTypes
97+
close(callback: Function): void;
98+
close(): Promise<void>;
99+
emit(event: string | symbol, ...args: any[]): boolean;
100+
on(event: 'request', listener: (err: ApiError, meta: RequestEvent) => void): this;
101+
on(event: 'response', listener: (err: ApiError, meta: RequestEvent) => void): this;
102+
on(event: 'sniff', listener: (err: ApiError, meta: RequestEvent) => void): this;
103+
on(event: 'resurrect', listener: (err: null, meta: ResurrectEvent) => void): this;
104+
once(event: 'request', listener: (err: ApiError, meta: RequestEvent) => void): this;
105+
once(event: 'response', listener: (err: ApiError, meta: RequestEvent) => void): this;
106+
once(event: 'sniff', listener: (err: ApiError, meta: RequestEvent) => void): this;
107+
once(event: 'resurrect', listener: (err: null, meta: ResurrectEvent) => void): this;
108+
off(event: string | symbol, listener: (...args: any[]) => void): this;
109+
`
63110

64111
const kibanaDefinitions = `/*
65112
* Licensed to Elasticsearch B.V. under one or more contributor
@@ -175,7 +222,7 @@ function createClientTypes (kibana = false) {
175222
if (kibana) {
176223
definitions += '}\n\nexport { KibanaClient }\n'
177224
} else {
178-
definitions += '}\n\nexport default ESAPI\n'
225+
definitions += '}\n\nexport { NewClientTypes }\n'
179226
}
180227

181228
writeFileSync(
@@ -209,8 +256,11 @@ function createClientTypes (kibana = false) {
209256
let requestGenerics = ''
210257

211258
if (Array.isArray(requestType.generics)) {
212-
requestDefinition = `T.${requestType.name.name}<${requestType.generics.join(', ')}>`
213-
requestGenerics = requestType.generics.map(unknownify).join(', ') + ', '
259+
requestDefinition = `T.${requestType.name.name}<${requestType.generics.map(unwrapGeneric).join(', ')}>`
260+
requestGenerics = requestType.generics
261+
.map(unwrapGeneric)
262+
.map(unknownify)
263+
.join(', ') + ', '
214264
} else if (requestType === null) {
215265
requestDefinition = 'TODO'
216266
} else {
@@ -221,8 +271,12 @@ function createClientTypes (kibana = false) {
221271
let responseGenerics = ''
222272

223273
if (Array.isArray(responseType.generics)) {
224-
responseDefinition = `T.${responseType.name.name}<${responseType.generics.map(avoidCollisions).join(', ')}>`
225-
responseGenerics = responseType.generics.map(avoidCollisions).map(unknownify).join(', ') + ', '
274+
responseDefinition = `T.${responseType.name.name}<${responseType.generics.map(unwrapGeneric).map(avoidCollisions).join(', ')}>`
275+
responseGenerics = responseType.generics
276+
.map(unwrapGeneric)
277+
.map(avoidCollisions)
278+
.map(unknownify)
279+
.join(', ') + ', '
226280
} else if (responseType === null) {
227281
responseDefinition = 'TODO'
228282
} else {
@@ -264,7 +318,7 @@ function createClientTypes (kibana = false) {
264318
function avoidCollisions (generic) {
265319
if (requestType === null || !Array.isArray(requestType.generics)) {
266320
return generic
267-
} else if (requestType.generics.includes(generic)) {
321+
} else if (requestType.generics.map(unwrapGeneric).includes(generic)) {
268322
return generic + 'R'
269323
} else {
270324
return generic
@@ -274,6 +328,11 @@ function createClientTypes (kibana = false) {
274328
function unknownify (generic) {
275329
return `${generic} = unknown`
276330
}
331+
332+
function unwrapGeneric (generic) {
333+
if (typeof generic === 'string') return generic
334+
return generic.name
335+
}
277336
}
278337

279338
function getType (name) {

0 commit comments

Comments
 (0)