@goast/typescript 0.0.5 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/{service → client}/angular/request-builder.ts +6 -2
- package/assets/client/fetch/{url-builder.ts → fetch-client.utils.ts} +15 -0
- package/assets/stubs/easy-network-stub/easy-network-stub.utils.ts +258 -0
- package/cjs/lib/ast/_index.js +108 -0
- package/cjs/lib/ast/common.js +2 -0
- package/cjs/lib/ast/index.js +5 -0
- package/cjs/lib/ast/node.js +10 -0
- package/cjs/lib/ast/nodes/argument.js +20 -0
- package/cjs/lib/ast/nodes/array-type.js +27 -0
- package/cjs/lib/ast/nodes/arrow-function.js +51 -0
- package/cjs/lib/ast/nodes/call.js +26 -0
- package/cjs/lib/ast/nodes/class.js +70 -0
- package/cjs/lib/ast/nodes/constructor-parameter.js +46 -0
- package/cjs/lib/ast/nodes/constructor.js +42 -0
- package/cjs/lib/ast/nodes/decorator.js +38 -0
- package/cjs/lib/ast/nodes/doc-tag.js +64 -0
- package/cjs/lib/ast/nodes/doc.js +57 -0
- package/cjs/lib/ast/nodes/enum-value.js +35 -0
- package/cjs/lib/ast/nodes/enum.js +46 -0
- package/cjs/lib/ast/nodes/export.js +27 -0
- package/cjs/lib/ast/nodes/function-type.js +35 -0
- package/cjs/lib/ast/nodes/function.js +60 -0
- package/cjs/lib/ast/nodes/generic-parameter.js +40 -0
- package/cjs/lib/ast/nodes/indexer.js +32 -0
- package/cjs/lib/ast/nodes/interface.js +60 -0
- package/cjs/lib/ast/nodes/intersection-type.js +44 -0
- package/cjs/lib/ast/nodes/lookup-type.js +30 -0
- package/cjs/lib/ast/nodes/method.js +82 -0
- package/cjs/lib/ast/nodes/object-type.js +24 -0
- package/cjs/lib/ast/nodes/object.js +24 -0
- package/cjs/lib/ast/nodes/parameter.js +45 -0
- package/cjs/lib/ast/nodes/property-accessor.js +128 -0
- package/cjs/lib/ast/nodes/property.js +119 -0
- package/cjs/lib/ast/nodes/reference.js +63 -0
- package/cjs/lib/ast/nodes/string.js +30 -0
- package/cjs/lib/ast/nodes/tuple.js +28 -0
- package/cjs/lib/ast/nodes/type-alias.js +36 -0
- package/cjs/lib/ast/nodes/typeof.js +23 -0
- package/cjs/lib/ast/nodes/types.js +2 -0
- package/cjs/lib/ast/nodes/union-type.js +44 -0
- package/cjs/lib/ast/nodes/variable.js +38 -0
- package/cjs/lib/ast/references/angular.js +12 -0
- package/cjs/lib/ast/references/easy-network-stub.js +8 -0
- package/cjs/lib/ast/references/index.js +8 -0
- package/cjs/lib/ast/references/rxjs.js +9 -0
- package/cjs/lib/ast/references/typescript.js +33 -0
- package/cjs/lib/ast/utils/get-type-script-builder-options.js +19 -0
- package/cjs/lib/ast/utils/to-ts-node.js +24 -0
- package/cjs/lib/ast/utils/write-ts-generic-parameters.js +11 -0
- package/cjs/lib/ast/utils/write-ts-members.js +18 -0
- package/cjs/lib/ast/utils/write-ts-nodes.js +24 -0
- package/cjs/lib/ast/utils/write-ts-parameters.js +14 -0
- package/cjs/lib/config.js +5 -3
- package/cjs/lib/file-builder.js +45 -202
- package/cjs/lib/generators/file-generator.js +2 -18
- package/cjs/lib/generators/index.js +1 -0
- package/cjs/lib/generators/models/model-generator.js +144 -205
- package/cjs/lib/generators/models/models-generator.js +12 -26
- package/cjs/lib/generators/models/models.js +1 -1
- package/cjs/lib/generators/services/angular-services/angular-service-generator.js +183 -306
- package/cjs/lib/generators/services/angular-services/angular-services-generator.js +168 -76
- package/cjs/lib/generators/services/angular-services/models.js +10 -1
- package/cjs/lib/generators/services/angular-services/refs.js +24 -0
- package/cjs/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +169 -0
- package/cjs/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +133 -0
- package/cjs/lib/generators/services/easy-network-stub/index.js +6 -0
- package/cjs/lib/generators/services/easy-network-stub/models.js +10 -0
- package/cjs/lib/generators/services/easy-network-stub/refs.js +23 -0
- package/cjs/lib/generators/services/fetch-clients/fetch-client-generator.js +121 -181
- package/cjs/lib/generators/services/fetch-clients/fetch-clients-generator.js +9 -4
- package/cjs/lib/generators/services/fetch-clients/refs.js +17 -0
- package/cjs/lib/import-collection.js +18 -19
- package/esm/lib/ast/_index.js +37 -0
- package/esm/lib/ast/common.js +1 -0
- package/esm/lib/ast/index.js +2 -0
- package/esm/lib/ast/node.js +6 -0
- package/esm/lib/ast/nodes/argument.js +16 -0
- package/esm/lib/ast/nodes/array-type.js +23 -0
- package/esm/lib/ast/nodes/arrow-function.js +47 -0
- package/esm/lib/ast/nodes/call.js +22 -0
- package/esm/lib/ast/nodes/class.js +66 -0
- package/esm/lib/ast/nodes/constructor-parameter.js +42 -0
- package/esm/lib/ast/nodes/constructor.js +38 -0
- package/esm/lib/ast/nodes/decorator.js +34 -0
- package/esm/lib/ast/nodes/doc-tag.js +60 -0
- package/esm/lib/ast/nodes/doc.js +53 -0
- package/esm/lib/ast/nodes/enum-value.js +31 -0
- package/esm/lib/ast/nodes/enum.js +42 -0
- package/esm/lib/ast/nodes/export.js +22 -0
- package/esm/lib/ast/nodes/function-type.js +31 -0
- package/esm/lib/ast/nodes/function.js +56 -0
- package/esm/lib/ast/nodes/generic-parameter.js +36 -0
- package/esm/lib/ast/nodes/indexer.js +28 -0
- package/esm/lib/ast/nodes/interface.js +56 -0
- package/esm/lib/ast/nodes/intersection-type.js +40 -0
- package/esm/lib/ast/nodes/lookup-type.js +26 -0
- package/esm/lib/ast/nodes/method.js +77 -0
- package/esm/lib/ast/nodes/object-type.js +20 -0
- package/esm/lib/ast/nodes/object.js +20 -0
- package/esm/lib/ast/nodes/parameter.js +41 -0
- package/esm/lib/ast/nodes/property-accessor.js +121 -0
- package/esm/lib/ast/nodes/property.js +113 -0
- package/esm/lib/ast/nodes/reference.js +59 -0
- package/esm/lib/ast/nodes/string.js +26 -0
- package/esm/lib/ast/nodes/tuple.js +24 -0
- package/esm/lib/ast/nodes/type-alias.js +32 -0
- package/esm/lib/ast/nodes/typeof.js +18 -0
- package/esm/lib/ast/nodes/types.js +1 -0
- package/esm/lib/ast/nodes/union-type.js +40 -0
- package/esm/lib/ast/nodes/variable.js +34 -0
- package/esm/lib/ast/references/angular.js +9 -0
- package/esm/lib/ast/references/easy-network-stub.js +5 -0
- package/esm/lib/ast/references/index.js +7 -0
- package/esm/lib/ast/references/rxjs.js +6 -0
- package/esm/lib/ast/references/typescript.js +30 -0
- package/esm/lib/ast/utils/get-type-script-builder-options.js +15 -0
- package/esm/lib/ast/utils/to-ts-node.js +20 -0
- package/esm/lib/ast/utils/write-ts-generic-parameters.js +7 -0
- package/esm/lib/ast/utils/write-ts-members.js +14 -0
- package/esm/lib/ast/utils/write-ts-nodes.js +19 -0
- package/esm/lib/ast/utils/write-ts-parameters.js +10 -0
- package/esm/lib/config.js +5 -3
- package/esm/lib/file-builder.js +44 -202
- package/esm/lib/generators/file-generator.js +2 -18
- package/esm/lib/generators/index.js +1 -0
- package/esm/lib/generators/models/model-generator.js +149 -210
- package/esm/lib/generators/models/models-generator.js +15 -29
- package/esm/lib/generators/models/models.js +1 -1
- package/esm/lib/generators/services/angular-services/angular-service-generator.js +186 -309
- package/esm/lib/generators/services/angular-services/angular-services-generator.js +170 -78
- package/esm/lib/generators/services/angular-services/models.js +10 -1
- package/esm/lib/generators/services/angular-services/refs.js +20 -0
- package/esm/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +165 -0
- package/esm/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +129 -0
- package/esm/lib/generators/services/easy-network-stub/index.js +3 -0
- package/esm/lib/generators/services/easy-network-stub/models.js +7 -0
- package/esm/lib/generators/services/easy-network-stub/refs.js +19 -0
- package/esm/lib/generators/services/fetch-clients/fetch-client-generator.js +123 -183
- package/esm/lib/generators/services/fetch-clients/fetch-clients-generator.js +9 -4
- package/esm/lib/generators/services/fetch-clients/refs.js +13 -0
- package/esm/lib/import-collection.js +17 -18
- package/package.json +6 -6
- package/types/lib/ast/_index.d.ts +38 -0
- package/types/lib/ast/common.d.ts +1 -0
- package/types/lib/ast/index.d.ts +1 -0
- package/types/lib/ast/node.d.ts +4 -0
- package/types/lib/ast/nodes/argument.d.ts +17 -0
- package/types/lib/ast/nodes/array-type.d.ts +19 -0
- package/types/lib/ast/nodes/arrow-function.d.ts +29 -0
- package/types/lib/ast/nodes/call.d.ts +20 -0
- package/types/lib/ast/nodes/class.d.ts +41 -0
- package/types/lib/ast/nodes/constructor-parameter.d.ts +19 -0
- package/types/lib/ast/nodes/constructor.d.ts +25 -0
- package/types/lib/ast/nodes/decorator.d.ts +22 -0
- package/types/lib/ast/nodes/doc-tag.d.ts +73 -0
- package/types/lib/ast/nodes/doc.d.ts +28 -0
- package/types/lib/ast/nodes/enum-value.d.ts +21 -0
- package/types/lib/ast/nodes/enum.d.ts +26 -0
- package/types/lib/ast/nodes/export.d.ts +19 -0
- package/types/lib/ast/nodes/function-type.d.ts +23 -0
- package/types/lib/ast/nodes/function.d.ts +35 -0
- package/types/lib/ast/nodes/generic-parameter.d.ts +25 -0
- package/types/lib/ast/nodes/indexer.d.ts +23 -0
- package/types/lib/ast/nodes/interface.d.ts +36 -0
- package/types/lib/ast/nodes/intersection-type.d.ts +17 -0
- package/types/lib/ast/nodes/lookup-type.d.ts +19 -0
- package/types/lib/ast/nodes/method.d.ts +45 -0
- package/types/lib/ast/nodes/object-type.d.ts +20 -0
- package/types/lib/ast/nodes/object.d.ts +19 -0
- package/types/lib/ast/nodes/parameter.d.ts +28 -0
- package/types/lib/ast/nodes/property-accessor.d.ts +53 -0
- package/types/lib/ast/nodes/property.d.ts +84 -0
- package/types/lib/ast/nodes/reference.d.ts +46 -0
- package/types/lib/ast/nodes/string.d.ts +18 -0
- package/types/lib/ast/nodes/tuple.d.ts +17 -0
- package/types/lib/ast/nodes/type-alias.d.ts +27 -0
- package/types/lib/ast/nodes/typeof.d.ts +18 -0
- package/types/lib/ast/nodes/types.d.ts +18 -0
- package/types/lib/ast/nodes/union-type.d.ts +17 -0
- package/types/lib/ast/nodes/variable.d.ts +28 -0
- package/types/lib/ast/references/angular.d.ts +37 -0
- package/types/lib/ast/references/easy-network-stub.d.ts +26 -0
- package/types/lib/ast/references/index.d.ts +4 -0
- package/types/lib/ast/references/rxjs.d.ts +30 -0
- package/types/lib/ast/references/typescript.d.ts +133 -0
- package/types/lib/ast/utils/get-type-script-builder-options.d.ts +3 -0
- package/types/lib/ast/utils/to-ts-node.d.ts +8 -0
- package/types/lib/ast/utils/write-ts-generic-parameters.d.ts +3 -0
- package/types/lib/ast/utils/write-ts-members.d.ts +5 -0
- package/types/lib/ast/utils/write-ts-nodes.d.ts +6 -0
- package/types/lib/ast/utils/write-ts-parameters.d.ts +3 -0
- package/types/lib/common-results.d.ts +4 -0
- package/types/lib/config.d.ts +5 -2
- package/types/lib/file-builder.d.ts +21 -98
- package/types/lib/generators/file-generator.d.ts +3 -7
- package/types/lib/generators/index.d.ts +1 -0
- package/types/lib/generators/models/model-generator.d.ts +18 -23
- package/types/lib/generators/models/models-generator.d.ts +4 -5
- package/types/lib/generators/models/models.d.ts +4 -4
- package/types/lib/generators/services/angular-services/angular-service-generator.d.ts +15 -35
- package/types/lib/generators/services/angular-services/angular-services-generator.d.ts +12 -10
- package/types/lib/generators/services/angular-services/models.d.ts +67 -22
- package/types/lib/generators/services/angular-services/refs.d.ts +34 -0
- package/types/lib/generators/services/easy-network-stub/easy-network-stub-generator.d.ts +32 -0
- package/types/lib/generators/services/easy-network-stub/easy-network-stubs-generator.d.ts +28 -0
- package/types/lib/generators/services/easy-network-stub/index.d.ts +3 -0
- package/types/lib/generators/services/easy-network-stub/models.d.ts +55 -0
- package/types/lib/generators/services/easy-network-stub/refs.d.ts +63 -0
- package/types/lib/generators/services/fetch-clients/fetch-client-generator.d.ts +10 -22
- package/types/lib/generators/services/fetch-clients/models.d.ts +7 -3
- package/types/lib/generators/services/fetch-clients/refs.d.ts +23 -0
- package/types/lib/import-collection.d.ts +13 -5
- package/assets/client/fetch/types.ts +0 -14
- package/assets/service/angular/api-configuration.ts +0 -18
- package/assets/service/angular/base-service.ts +0 -29
- package/assets/service/angular/response-handlers.ts +0 -127
- package/assets/service/angular/strict-http-response.ts +0 -8
|
@@ -40,7 +40,7 @@ abstract class Parameter {
|
|
|
40
40
|
public value: any,
|
|
41
41
|
public options: ParameterOptions,
|
|
42
42
|
defaultStyle: string,
|
|
43
|
-
defaultExplode: boolean
|
|
43
|
+
defaultExplode: boolean,
|
|
44
44
|
) {
|
|
45
45
|
this.options = options || {};
|
|
46
46
|
if (this.options.style === null || this.options.style === undefined) {
|
|
@@ -220,7 +220,11 @@ export class RequestBuilder {
|
|
|
220
220
|
_bodyContent: any | null;
|
|
221
221
|
_bodyContentType?: string;
|
|
222
222
|
|
|
223
|
-
constructor(
|
|
223
|
+
constructor(
|
|
224
|
+
public rootUrl: string,
|
|
225
|
+
public operationPath: string,
|
|
226
|
+
public method: string,
|
|
227
|
+
) {}
|
|
224
228
|
|
|
225
229
|
/**
|
|
226
230
|
* Sets a path parameter
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
type _VoidResponse = Omit<Response, 'json'> & {
|
|
2
|
+
isVoidResponse: true;
|
|
3
|
+
};
|
|
4
|
+
type _TypedResponse<T> = Response & {
|
|
5
|
+
json(): Promise<T>;
|
|
6
|
+
isVoidResponse: false;
|
|
7
|
+
};
|
|
8
|
+
export type TypedResponse<T> = void extends T ? _VoidResponse : _TypedResponse<T>;
|
|
9
|
+
|
|
10
|
+
export type FetchClientOptions = {
|
|
11
|
+
baseUrl?: string;
|
|
12
|
+
fetch?: typeof fetch;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
};
|
|
15
|
+
|
|
1
16
|
export class UrlBuilder {
|
|
2
17
|
private path: string = '';
|
|
3
18
|
private pathParams: Record<string, string> = {};
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { EasyNetworkStub, ErrorResponse, HttpMethod, RouteResponseCallback } from 'easy-network-stub';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Options for the `EasyNetworkStubWrapper`.
|
|
5
|
+
*/
|
|
6
|
+
export type EasyNetworkStubWrapperOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* Delay in milliseconds before responding.
|
|
9
|
+
* @default 0
|
|
10
|
+
*/
|
|
11
|
+
delay: number;
|
|
12
|
+
/**
|
|
13
|
+
* Whether to log requests to the console.
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
logRequests: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Whether to log responses to the console.
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
logResponses: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to remember requests. Remebered requests can be accessed via the `requests` property.
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
rememberRequests: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Function to call when a response is sent.
|
|
29
|
+
* @param response The response that was sent.
|
|
30
|
+
* @default undefined
|
|
31
|
+
*/
|
|
32
|
+
responseCallback?: (response: unknown) => void;
|
|
33
|
+
/**
|
|
34
|
+
* A prefix to add to the URL in log messages.
|
|
35
|
+
* @default /api/
|
|
36
|
+
*/
|
|
37
|
+
logUrlPrefix: string;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Represents a request intercepted by the `EasyNetworkStubWrapper`.
|
|
42
|
+
*/
|
|
43
|
+
export type StubRequestItem = {
|
|
44
|
+
/**
|
|
45
|
+
* The HTTP method of the request.
|
|
46
|
+
*/
|
|
47
|
+
method: HttpMethod;
|
|
48
|
+
/**
|
|
49
|
+
* The route of the request.
|
|
50
|
+
*/
|
|
51
|
+
route: string;
|
|
52
|
+
/**
|
|
53
|
+
* The request information provided by `easy-network-stub`.
|
|
54
|
+
*/
|
|
55
|
+
request: StubRequestInfo;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Represents the request information provided by `easy-network-stub`.
|
|
60
|
+
*/
|
|
61
|
+
export type StubRequestInfo<TRoute extends string = string, TBody = unknown> = Parameters<
|
|
62
|
+
RouteResponseCallback<TRoute, TBody>
|
|
63
|
+
>[0];
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* A strict version of `RouteResponseCallback` that allows for a responder to be passed as the first argument.
|
|
67
|
+
*/
|
|
68
|
+
export type StrictRouteResponseCallback<T, P extends string, R> = (
|
|
69
|
+
respondWith: R,
|
|
70
|
+
...args: Parameters<RouteResponseCallback<P, T>>
|
|
71
|
+
) => ErrorResponse<any> | Promise<ErrorResponse<any>>;
|
|
72
|
+
|
|
73
|
+
type _UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
74
|
+
type __StubResponder<T extends Record<number, unknown>, S> = S extends number
|
|
75
|
+
? [T[S]] extends [never]
|
|
76
|
+
? (statusCode: S) => ErrorResponse<T[S]>
|
|
77
|
+
: (statusCode: S, content: T[S]) => ErrorResponse<T[S]>
|
|
78
|
+
: never;
|
|
79
|
+
type _StubResponder<T extends Record<number, unknown>> = _UnionToIntersection<__StubResponder<T, keyof T>>;
|
|
80
|
+
const untypedResponder = (statusCode: number, content?: unknown) => ({ statusCode, content });
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Gets the responder function typed to a specific set of status codes.
|
|
84
|
+
* @returns The responder function.
|
|
85
|
+
*/
|
|
86
|
+
export function getStubResponder<T extends Record<number, unknown>>(): _StubResponder<T> {
|
|
87
|
+
return untypedResponder as _StubResponder<T>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Wrapper for `EasyNetworkStub` that adds additional functionality.
|
|
92
|
+
*/
|
|
93
|
+
export class EasyNetworkStubWrapper {
|
|
94
|
+
private _requests: StubRequestItem[] = [];
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The options for the wrapper.
|
|
98
|
+
*/
|
|
99
|
+
public readonly options: Readonly<EasyNetworkStubWrapperOptions>;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The requests that have been intercepted by the wrapper.
|
|
103
|
+
*/
|
|
104
|
+
public get requests(): ReadonlyArray<StubRequestItem> {
|
|
105
|
+
return this._requests;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
constructor(
|
|
109
|
+
public readonly wrappedStub: EasyNetworkStub,
|
|
110
|
+
options?: Partial<EasyNetworkStubWrapperOptions>,
|
|
111
|
+
) {
|
|
112
|
+
this.options = {
|
|
113
|
+
delay: options?.delay ?? 0,
|
|
114
|
+
logRequests: options?.logRequests ?? false,
|
|
115
|
+
logResponses: options?.logResponses ?? false,
|
|
116
|
+
rememberRequests: options?.rememberRequests ?? false,
|
|
117
|
+
responseCallback: options?.responseCallback,
|
|
118
|
+
logUrlPrefix: options?.logUrlPrefix ?? '/api/',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Add a single api stub to your intercepted routes.
|
|
124
|
+
* @param method The http method that should be stubbed
|
|
125
|
+
* @param route The route that should be stubbed. Supports parameters in the form of {name:type}.
|
|
126
|
+
* @param response The callback in which you can process the request and reply with the stub. When a Promise is returned, the stub response will be delayed until it is resolved.
|
|
127
|
+
*/
|
|
128
|
+
public stub<Route extends string>(
|
|
129
|
+
method: HttpMethod,
|
|
130
|
+
route: Route,
|
|
131
|
+
response: RouteResponseCallback<Route, unknown>,
|
|
132
|
+
): void {
|
|
133
|
+
this.wrappedStub.stub<Route>(method, route, async (request) => {
|
|
134
|
+
if (this.options.delay > 0) await sleep(this.options.delay);
|
|
135
|
+
return await this.runRequest(method, route, response, request);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* The stub2 method provides a way to set the type of the body that is sent.
|
|
141
|
+
* Due to restrictions in TypeScript (https://github.com/microsoft/TypeScript/issues/10571, https://github.com/Microsoft/TypeScript/pull/26349),
|
|
142
|
+
* We have to hacke a bit here. Calling stub2<T>() will return the stub method with a body of type T.
|
|
143
|
+
*
|
|
144
|
+
* Usage:
|
|
145
|
+
* ```
|
|
146
|
+
* .stub2<MyRequest>()('GET', '/api/test', ({ body }) => {
|
|
147
|
+
* // body is of type MyRequest
|
|
148
|
+
* });
|
|
149
|
+
* ```
|
|
150
|
+
* @returns The stub method with a body of type T.
|
|
151
|
+
*/
|
|
152
|
+
public stub2<T>(): <Route extends string>(
|
|
153
|
+
method: HttpMethod,
|
|
154
|
+
route: Route,
|
|
155
|
+
response: RouteResponseCallback<Route, T>,
|
|
156
|
+
) => void {
|
|
157
|
+
return <Route extends string>(method: HttpMethod, route: Route, response: RouteResponseCallback<Route, T>) => {
|
|
158
|
+
this.wrappedStub.stub2<T>()<Route>(method, route, async (request) => {
|
|
159
|
+
if (this.options.delay > 0) await sleep(this.options.delay);
|
|
160
|
+
return await this.runRequest(method, route, response, request);
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Reset the stubs and requests.
|
|
167
|
+
*/
|
|
168
|
+
public reset(): void {
|
|
169
|
+
this._requests = [];
|
|
170
|
+
this.wrappedStub['_config'].stubs = [];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private async runRequest<Route extends string, T>(
|
|
174
|
+
method: HttpMethod,
|
|
175
|
+
route: Route,
|
|
176
|
+
response: RouteResponseCallback<Route, T>,
|
|
177
|
+
request: StubRequestInfo<Route, T>,
|
|
178
|
+
): Promise<unknown> {
|
|
179
|
+
if (this.options.rememberRequests) {
|
|
180
|
+
this._requests.push({ method, route, request });
|
|
181
|
+
}
|
|
182
|
+
this.log('request', method, route, request, '#7FFFFF');
|
|
183
|
+
try {
|
|
184
|
+
const r = await response(request);
|
|
185
|
+
this.options.responseCallback?.(r);
|
|
186
|
+
this.log('response', method, route, r, '#7FFF8E');
|
|
187
|
+
return r;
|
|
188
|
+
} catch (error: unknown) {
|
|
189
|
+
this.options.responseCallback?.(error);
|
|
190
|
+
if (isHttpResponse(error) && error.statusCode >= 200 && error.statusCode < 300) {
|
|
191
|
+
this.log('response', method, route, error.content, '#7FFF8E');
|
|
192
|
+
throw error;
|
|
193
|
+
} else {
|
|
194
|
+
const isError = isHttpResponse(error) && error.statusCode >= 400 && error.statusCode < 600;
|
|
195
|
+
this.log('response', method, route, error, isError ? '#FF7F7F' : '7F7F7F');
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
private log(type: 'request' | 'response', method: HttpMethod, route: string, data: unknown, color: string) {
|
|
202
|
+
if (type === 'request' && !this.options.logRequests) return;
|
|
203
|
+
if (type === 'response' && !this.options.logResponses) return;
|
|
204
|
+
const typeDisplay = type === 'request' ? ' [req]' : '[resp]';
|
|
205
|
+
const strippedRoute = route.match(/[^?]*(?=\?)?/)?.[0];
|
|
206
|
+
console.log(`%c${typeDisplay} ${method}: ${this.options.logUrlPrefix}${strippedRoute}`, `color:${color};`, data);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Base class for generated easy network stubs.
|
|
212
|
+
*/
|
|
213
|
+
export class EasyNetworkStubBase {
|
|
214
|
+
protected readonly stubWrapper: EasyNetworkStubWrapper;
|
|
215
|
+
protected readonly ownsStubWrapper: boolean;
|
|
216
|
+
|
|
217
|
+
constructor(stub: EasyNetworkStub | EasyNetworkStubWrapper, options?: EasyNetworkStubWrapperOptions) {
|
|
218
|
+
this.stubWrapper = stub instanceof EasyNetworkStubWrapper ? stub : new EasyNetworkStubWrapper(stub, options);
|
|
219
|
+
this.ownsStubWrapper = !(stub instanceof EasyNetworkStubWrapper);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
public reset() {
|
|
223
|
+
if (this.ownsStubWrapper) {
|
|
224
|
+
this.stubWrapper.reset();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export type EasyNetworkStubGroup<Group, GroupContainer> = Group & {
|
|
230
|
+
(stubActions: (stubs: Group) => void): GroupContainer;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
234
|
+
declare interface GroupType<T> extends Function {
|
|
235
|
+
new (stubWrapper: EasyNetworkStubWrapper): T;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export function createEasyNetworkStubGroup<GroupContainer, Group>(
|
|
239
|
+
container: GroupContainer,
|
|
240
|
+
stubWrapper: EasyNetworkStubWrapper,
|
|
241
|
+
groupType: GroupType<Group>,
|
|
242
|
+
): EasyNetworkStubGroup<Group, GroupContainer> {
|
|
243
|
+
const group = new groupType(stubWrapper);
|
|
244
|
+
const groupFn = (stubActions: (stubs: Group) => void) => {
|
|
245
|
+
stubActions(group);
|
|
246
|
+
return container;
|
|
247
|
+
};
|
|
248
|
+
Object.setPrototypeOf(groupFn, groupType.prototype);
|
|
249
|
+
return Object.assign(groupFn, group);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function sleep(ms: number): Promise<void> {
|
|
253
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function isHttpResponse(value: unknown): value is ErrorResponse<unknown> {
|
|
257
|
+
return typeof value === 'object' && value !== null && 'statusCode' in value;
|
|
258
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Property = exports.parameter = exports.Parameter = exports.objectType = exports.ObjectType = exports.object = exports.Object = exports.method = exports.Method = exports.lookupType = exports.LookupType = exports.intersectionType = exports.IntersectionType = exports.interface = exports.Interface = exports.indexer = exports.Indexer = exports.genericParameter = exports.GenericParameter = exports.functionType = exports.FunctionType = exports.function = exports.Function = exports.export = exports.Export = exports.enumValue = exports.EnumValue = exports.enum = exports.Enum = exports.docTag = exports.DocTag = exports.doc = exports.Doc = exports.decorator = exports.Decorator = exports.constructorParameter = exports.ConstructorParameter = exports.constructor = exports.Constructor = exports.class = exports.Class = exports.call = exports.Call = exports.arrowFunction = exports.ArrowFunction = exports.arrayType = exports.ArrayType = exports.argument = exports.Argument = exports.Node = void 0;
|
|
4
|
+
exports.toNode = exports.getBuilderOptions = exports.refs = exports.typeof = exports.Typeof = exports.variable = exports.Variable = exports.unionType = exports.UnionType = exports.typeAlias = exports.TypeAlias = exports.tuple = exports.Tuple = exports.string = exports.String = exports.reference = exports.Reference = exports.property = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
var node_1 = require("./node");
|
|
7
|
+
Object.defineProperty(exports, "Node", { enumerable: true, get: function () { return node_1.TsNode; } });
|
|
8
|
+
var argument_1 = require("./nodes/argument");
|
|
9
|
+
Object.defineProperty(exports, "Argument", { enumerable: true, get: function () { return argument_1.TsArgument; } });
|
|
10
|
+
Object.defineProperty(exports, "argument", { enumerable: true, get: function () { return argument_1.tsArgument; } });
|
|
11
|
+
var array_type_1 = require("./nodes/array-type");
|
|
12
|
+
Object.defineProperty(exports, "ArrayType", { enumerable: true, get: function () { return array_type_1.TsArrayType; } });
|
|
13
|
+
Object.defineProperty(exports, "arrayType", { enumerable: true, get: function () { return array_type_1.tsArrayType; } });
|
|
14
|
+
var arrow_function_1 = require("./nodes/arrow-function");
|
|
15
|
+
Object.defineProperty(exports, "ArrowFunction", { enumerable: true, get: function () { return arrow_function_1.TsArrowFunction; } });
|
|
16
|
+
Object.defineProperty(exports, "arrowFunction", { enumerable: true, get: function () { return arrow_function_1.tsArrowFunction; } });
|
|
17
|
+
var call_1 = require("./nodes/call");
|
|
18
|
+
Object.defineProperty(exports, "Call", { enumerable: true, get: function () { return call_1.TsCall; } });
|
|
19
|
+
Object.defineProperty(exports, "call", { enumerable: true, get: function () { return call_1.tsCall; } });
|
|
20
|
+
var class_1 = require("./nodes/class");
|
|
21
|
+
Object.defineProperty(exports, "Class", { enumerable: true, get: function () { return class_1.TsClass; } });
|
|
22
|
+
Object.defineProperty(exports, "class", { enumerable: true, get: function () { return class_1.tsClass; } });
|
|
23
|
+
var constructor_1 = require("./nodes/constructor");
|
|
24
|
+
Object.defineProperty(exports, "Constructor", { enumerable: true, get: function () { return constructor_1.TsConstructor; } });
|
|
25
|
+
Object.defineProperty(exports, "constructor", { enumerable: true, get: function () { return constructor_1.tsConstructor; } });
|
|
26
|
+
var constructor_parameter_1 = require("./nodes/constructor-parameter");
|
|
27
|
+
Object.defineProperty(exports, "ConstructorParameter", { enumerable: true, get: function () { return constructor_parameter_1.TsConstructorParameter; } });
|
|
28
|
+
Object.defineProperty(exports, "constructorParameter", { enumerable: true, get: function () { return constructor_parameter_1.tsConstructorParameter; } });
|
|
29
|
+
var decorator_1 = require("./nodes/decorator");
|
|
30
|
+
Object.defineProperty(exports, "Decorator", { enumerable: true, get: function () { return decorator_1.TsDecorator; } });
|
|
31
|
+
Object.defineProperty(exports, "decorator", { enumerable: true, get: function () { return decorator_1.tsDecorator; } });
|
|
32
|
+
var doc_1 = require("./nodes/doc");
|
|
33
|
+
Object.defineProperty(exports, "Doc", { enumerable: true, get: function () { return doc_1.TsDoc; } });
|
|
34
|
+
Object.defineProperty(exports, "doc", { enumerable: true, get: function () { return doc_1.tsDoc; } });
|
|
35
|
+
var doc_tag_1 = require("./nodes/doc-tag");
|
|
36
|
+
Object.defineProperty(exports, "DocTag", { enumerable: true, get: function () { return doc_tag_1.TsDocTag; } });
|
|
37
|
+
Object.defineProperty(exports, "docTag", { enumerable: true, get: function () { return doc_tag_1.tsDocTag; } });
|
|
38
|
+
var enum_1 = require("./nodes/enum");
|
|
39
|
+
Object.defineProperty(exports, "Enum", { enumerable: true, get: function () { return enum_1.TsEnum; } });
|
|
40
|
+
Object.defineProperty(exports, "enum", { enumerable: true, get: function () { return enum_1.tsEnum; } });
|
|
41
|
+
var enum_value_1 = require("./nodes/enum-value");
|
|
42
|
+
Object.defineProperty(exports, "EnumValue", { enumerable: true, get: function () { return enum_value_1.TsEnumValue; } });
|
|
43
|
+
Object.defineProperty(exports, "enumValue", { enumerable: true, get: function () { return enum_value_1.tsEnumValue; } });
|
|
44
|
+
var export_1 = require("./nodes/export");
|
|
45
|
+
Object.defineProperty(exports, "Export", { enumerable: true, get: function () { return export_1.TsExport; } });
|
|
46
|
+
Object.defineProperty(exports, "export", { enumerable: true, get: function () { return export_1.tsExport; } });
|
|
47
|
+
var function_1 = require("./nodes/function");
|
|
48
|
+
Object.defineProperty(exports, "Function", { enumerable: true, get: function () { return function_1.TsFunction; } });
|
|
49
|
+
Object.defineProperty(exports, "function", { enumerable: true, get: function () { return function_1.tsFunction; } });
|
|
50
|
+
var function_type_1 = require("./nodes/function-type");
|
|
51
|
+
Object.defineProperty(exports, "FunctionType", { enumerable: true, get: function () { return function_type_1.TsFunctionType; } });
|
|
52
|
+
Object.defineProperty(exports, "functionType", { enumerable: true, get: function () { return function_type_1.tsFunctionType; } });
|
|
53
|
+
var generic_parameter_1 = require("./nodes/generic-parameter");
|
|
54
|
+
Object.defineProperty(exports, "GenericParameter", { enumerable: true, get: function () { return generic_parameter_1.TsGenericParameter; } });
|
|
55
|
+
Object.defineProperty(exports, "genericParameter", { enumerable: true, get: function () { return generic_parameter_1.tsGenericParameter; } });
|
|
56
|
+
var indexer_1 = require("./nodes/indexer");
|
|
57
|
+
Object.defineProperty(exports, "Indexer", { enumerable: true, get: function () { return indexer_1.TsIndexer; } });
|
|
58
|
+
Object.defineProperty(exports, "indexer", { enumerable: true, get: function () { return indexer_1.tsIndexer; } });
|
|
59
|
+
var interface_1 = require("./nodes/interface");
|
|
60
|
+
Object.defineProperty(exports, "Interface", { enumerable: true, get: function () { return interface_1.TsInterface; } });
|
|
61
|
+
Object.defineProperty(exports, "interface", { enumerable: true, get: function () { return interface_1.tsInterface; } });
|
|
62
|
+
var intersection_type_1 = require("./nodes/intersection-type");
|
|
63
|
+
Object.defineProperty(exports, "IntersectionType", { enumerable: true, get: function () { return intersection_type_1.TsIntersectionType; } });
|
|
64
|
+
Object.defineProperty(exports, "intersectionType", { enumerable: true, get: function () { return intersection_type_1.tsIntersectionType; } });
|
|
65
|
+
var lookup_type_1 = require("./nodes/lookup-type");
|
|
66
|
+
Object.defineProperty(exports, "LookupType", { enumerable: true, get: function () { return lookup_type_1.TsLookupType; } });
|
|
67
|
+
Object.defineProperty(exports, "lookupType", { enumerable: true, get: function () { return lookup_type_1.tsLookupType; } });
|
|
68
|
+
var method_1 = require("./nodes/method");
|
|
69
|
+
Object.defineProperty(exports, "Method", { enumerable: true, get: function () { return method_1.TsMethod; } });
|
|
70
|
+
Object.defineProperty(exports, "method", { enumerable: true, get: function () { return method_1.tsMethod; } });
|
|
71
|
+
var object_1 = require("./nodes/object");
|
|
72
|
+
Object.defineProperty(exports, "Object", { enumerable: true, get: function () { return object_1.TsObject; } });
|
|
73
|
+
Object.defineProperty(exports, "object", { enumerable: true, get: function () { return object_1.tsObject; } });
|
|
74
|
+
var object_type_1 = require("./nodes/object-type");
|
|
75
|
+
Object.defineProperty(exports, "ObjectType", { enumerable: true, get: function () { return object_type_1.TsObjectType; } });
|
|
76
|
+
Object.defineProperty(exports, "objectType", { enumerable: true, get: function () { return object_type_1.tsObjectType; } });
|
|
77
|
+
var parameter_1 = require("./nodes/parameter");
|
|
78
|
+
Object.defineProperty(exports, "Parameter", { enumerable: true, get: function () { return parameter_1.TsParameter; } });
|
|
79
|
+
Object.defineProperty(exports, "parameter", { enumerable: true, get: function () { return parameter_1.tsParameter; } });
|
|
80
|
+
var property_1 = require("./nodes/property");
|
|
81
|
+
Object.defineProperty(exports, "Property", { enumerable: true, get: function () { return property_1.TsProperty; } });
|
|
82
|
+
Object.defineProperty(exports, "property", { enumerable: true, get: function () { return property_1.tsProperty; } });
|
|
83
|
+
var reference_1 = require("./nodes/reference");
|
|
84
|
+
Object.defineProperty(exports, "Reference", { enumerable: true, get: function () { return reference_1.TsReference; } });
|
|
85
|
+
Object.defineProperty(exports, "reference", { enumerable: true, get: function () { return reference_1.tsReference; } });
|
|
86
|
+
var string_1 = require("./nodes/string");
|
|
87
|
+
Object.defineProperty(exports, "String", { enumerable: true, get: function () { return string_1.TsString; } });
|
|
88
|
+
Object.defineProperty(exports, "string", { enumerable: true, get: function () { return string_1.tsString; } });
|
|
89
|
+
var tuple_1 = require("./nodes/tuple");
|
|
90
|
+
Object.defineProperty(exports, "Tuple", { enumerable: true, get: function () { return tuple_1.TsTuple; } });
|
|
91
|
+
Object.defineProperty(exports, "tuple", { enumerable: true, get: function () { return tuple_1.tsTuple; } });
|
|
92
|
+
var type_alias_1 = require("./nodes/type-alias");
|
|
93
|
+
Object.defineProperty(exports, "TypeAlias", { enumerable: true, get: function () { return type_alias_1.TsTypeAlias; } });
|
|
94
|
+
Object.defineProperty(exports, "typeAlias", { enumerable: true, get: function () { return type_alias_1.tsTypeAlias; } });
|
|
95
|
+
var union_type_1 = require("./nodes/union-type");
|
|
96
|
+
Object.defineProperty(exports, "UnionType", { enumerable: true, get: function () { return union_type_1.TsUnionType; } });
|
|
97
|
+
Object.defineProperty(exports, "unionType", { enumerable: true, get: function () { return union_type_1.tsUnionType; } });
|
|
98
|
+
var variable_1 = require("./nodes/variable");
|
|
99
|
+
Object.defineProperty(exports, "Variable", { enumerable: true, get: function () { return variable_1.TsVariable; } });
|
|
100
|
+
Object.defineProperty(exports, "variable", { enumerable: true, get: function () { return variable_1.tsVariable; } });
|
|
101
|
+
var typeof_1 = require("./nodes/typeof");
|
|
102
|
+
Object.defineProperty(exports, "Typeof", { enumerable: true, get: function () { return typeof_1.TsTypeof; } });
|
|
103
|
+
Object.defineProperty(exports, "typeof", { enumerable: true, get: function () { return typeof_1.tsTypeof; } });
|
|
104
|
+
exports.refs = tslib_1.__importStar(require("./references"));
|
|
105
|
+
var get_type_script_builder_options_1 = require("./utils/get-type-script-builder-options");
|
|
106
|
+
Object.defineProperty(exports, "getBuilderOptions", { enumerable: true, get: function () { return get_type_script_builder_options_1.getTypeScriptBuilderOptions; } });
|
|
107
|
+
var to_ts_node_1 = require("./utils/to-ts-node");
|
|
108
|
+
Object.defineProperty(exports, "toNode", { enumerable: true, get: function () { return to_ts_node_1.toTsNode; } });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TsNode = void 0;
|
|
4
|
+
const core_1 = require("@goast/core");
|
|
5
|
+
class TsNode extends core_1.AstNode {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super(options);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.TsNode = TsNode;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tsArgument = exports.TsArgument = void 0;
|
|
4
|
+
const node_1 = require("../node");
|
|
5
|
+
const write_ts_nodes_1 = require("../utils/write-ts-nodes");
|
|
6
|
+
const write_ts_parameters_1 = require("../utils/write-ts-parameters");
|
|
7
|
+
class TsArgument extends node_1.TsNode {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super(options);
|
|
10
|
+
this.value = options.value;
|
|
11
|
+
}
|
|
12
|
+
onWrite(builder) {
|
|
13
|
+
(0, write_ts_nodes_1.writeTsNode)(builder, this.value);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.TsArgument = TsArgument;
|
|
17
|
+
const createArgument = (value, options) => new TsArgument(Object.assign(Object.assign({}, options), { value }));
|
|
18
|
+
exports.tsArgument = Object.assign(createArgument, {
|
|
19
|
+
write: write_ts_parameters_1.writeTsParameters,
|
|
20
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tsArrayType = exports.TsArrayType = void 0;
|
|
4
|
+
const node_1 = require("../node");
|
|
5
|
+
const write_ts_nodes_1 = require("../utils/write-ts-nodes");
|
|
6
|
+
class TsArrayType extends node_1.TsNode {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
var _a;
|
|
9
|
+
super(options);
|
|
10
|
+
this.readonly = (_a = options.readonly) !== null && _a !== void 0 ? _a : false;
|
|
11
|
+
this.type = options.type;
|
|
12
|
+
}
|
|
13
|
+
onWrite(builder) {
|
|
14
|
+
if (this.readonly)
|
|
15
|
+
builder.append('readonly ');
|
|
16
|
+
builder
|
|
17
|
+
.append(this.inject.beforeType)
|
|
18
|
+
.parenthesize('()', (b) => (0, write_ts_nodes_1.writeTsNode)(b, this.type))
|
|
19
|
+
.append(this.inject.afterType);
|
|
20
|
+
builder.append('[]');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.TsArrayType = TsArrayType;
|
|
24
|
+
const createArrayType = (type, options) => new TsArrayType(Object.assign(Object.assign({}, options), { type }));
|
|
25
|
+
exports.tsArrayType = Object.assign(createArrayType, {
|
|
26
|
+
write: write_ts_nodes_1.writeTsNodes,
|
|
27
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tsArrowFunction = exports.TsArrowFunction = void 0;
|
|
4
|
+
const core_1 = require("@goast/core");
|
|
5
|
+
const generic_parameter_1 = require("./generic-parameter");
|
|
6
|
+
const parameter_1 = require("./parameter");
|
|
7
|
+
const node_1 = require("../node");
|
|
8
|
+
const write_ts_nodes_1 = require("../utils/write-ts-nodes");
|
|
9
|
+
class TsArrowFunction extends node_1.TsNode {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
12
|
+
super(options);
|
|
13
|
+
this.async = (_a = options.async) !== null && _a !== void 0 ? _a : false;
|
|
14
|
+
this.generics = (_c = (_b = options.generics) === null || _b === void 0 ? void 0 : _b.filter(core_1.notNullish)) !== null && _c !== void 0 ? _c : [];
|
|
15
|
+
this.parameters = (_e = (_d = options.parameters) === null || _d === void 0 ? void 0 : _d.filter(core_1.notNullish)) !== null && _e !== void 0 ? _e : [];
|
|
16
|
+
this.returnType = (_f = options.returnType) !== null && _f !== void 0 ? _f : null;
|
|
17
|
+
this.singleExpression = (_g = options.singleExpression) !== null && _g !== void 0 ? _g : false;
|
|
18
|
+
this.body = (_h = options.body) !== null && _h !== void 0 ? _h : null;
|
|
19
|
+
}
|
|
20
|
+
onWrite(builder) {
|
|
21
|
+
if (this.async) {
|
|
22
|
+
builder.append('async ');
|
|
23
|
+
}
|
|
24
|
+
builder.append(this.inject.beforeGenerics);
|
|
25
|
+
generic_parameter_1.tsGenericParameter.write(builder, this.generics);
|
|
26
|
+
builder.append(this.inject.afterGenerics);
|
|
27
|
+
builder.append(this.inject.beforeParams);
|
|
28
|
+
parameter_1.tsParameter.write(builder, this.parameters);
|
|
29
|
+
builder.append(this.inject.afterParams);
|
|
30
|
+
if (this.returnType) {
|
|
31
|
+
builder.append(': ');
|
|
32
|
+
builder.append(this.inject.beforeReturnType);
|
|
33
|
+
(0, write_ts_nodes_1.writeTsNode)(builder, this.returnType);
|
|
34
|
+
builder.append(this.inject.afterReturnType);
|
|
35
|
+
}
|
|
36
|
+
builder.append(' => ');
|
|
37
|
+
builder.append(this.inject.beforeBody);
|
|
38
|
+
if (this.singleExpression && this.body) {
|
|
39
|
+
builder.append(this.body);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
builder.parenthesize('{}', this.body, { multiline: !!this.body });
|
|
43
|
+
}
|
|
44
|
+
builder.append(this.inject.afterBody);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.TsArrowFunction = TsArrowFunction;
|
|
48
|
+
const createArrowFunction = (options) => new TsArrowFunction(options !== null && options !== void 0 ? options : {});
|
|
49
|
+
exports.tsArrowFunction = Object.assign(createArrowFunction, {
|
|
50
|
+
write: write_ts_nodes_1.writeTsNodes,
|
|
51
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tsCall = exports.TsCall = void 0;
|
|
4
|
+
const core_1 = require("@goast/core");
|
|
5
|
+
const argument_1 = require("./argument");
|
|
6
|
+
const node_1 = require("../node");
|
|
7
|
+
const write_ts_nodes_1 = require("../utils/write-ts-nodes");
|
|
8
|
+
class TsCall extends node_1.TsNode {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
super(options);
|
|
12
|
+
this.path = options.path.filter(core_1.notNullish);
|
|
13
|
+
this.arguments = (_b = (_a = options.arguments) === null || _a === void 0 ? void 0 : _a.filter(core_1.notNullish)) !== null && _b !== void 0 ? _b : null;
|
|
14
|
+
}
|
|
15
|
+
onWrite(builder) {
|
|
16
|
+
(0, write_ts_nodes_1.writeTsNodes)(builder, this.path, { separator: '.' });
|
|
17
|
+
if (this.arguments) {
|
|
18
|
+
argument_1.tsArgument.write(builder, this.arguments);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.TsCall = TsCall;
|
|
23
|
+
const createCall = (path, args, options) => new TsCall(Object.assign(Object.assign({}, options), { path: Array.isArray(path) ? path : [path], arguments: args }));
|
|
24
|
+
exports.tsCall = Object.assign(createCall, {
|
|
25
|
+
write: write_ts_nodes_1.writeTsNodes,
|
|
26
|
+
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tsClass = exports.TsClass = void 0;
|
|
4
|
+
const core_1 = require("@goast/core");
|
|
5
|
+
const decorator_1 = require("./decorator");
|
|
6
|
+
const doc_1 = require("./doc");
|
|
7
|
+
const generic_parameter_1 = require("./generic-parameter");
|
|
8
|
+
const node_1 = require("../node");
|
|
9
|
+
const write_ts_members_1 = require("../utils/write-ts-members");
|
|
10
|
+
const write_ts_nodes_1 = require("../utils/write-ts-nodes");
|
|
11
|
+
class TsClass extends node_1.TsNode {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
14
|
+
super(options);
|
|
15
|
+
this.doc = (_a = options.doc) !== null && _a !== void 0 ? _a : null;
|
|
16
|
+
this.decorators = (_c = (_b = options.decorators) === null || _b === void 0 ? void 0 : _b.filter(core_1.notNullish)) !== null && _c !== void 0 ? _c : [];
|
|
17
|
+
this.export = (_d = options.export) !== null && _d !== void 0 ? _d : false;
|
|
18
|
+
this.abstract = (_e = options.abstract) !== null && _e !== void 0 ? _e : false;
|
|
19
|
+
this.name = options.name;
|
|
20
|
+
this.generics = (_g = (_f = options.generics) === null || _f === void 0 ? void 0 : _f.filter(core_1.notNullish)) !== null && _g !== void 0 ? _g : [];
|
|
21
|
+
this.extends = (_h = options.extends) !== null && _h !== void 0 ? _h : null;
|
|
22
|
+
this.implements = (_k = (_j = options.implements) === null || _j === void 0 ? void 0 : _j.filter(core_1.notNullish)) !== null && _k !== void 0 ? _k : [];
|
|
23
|
+
this.members = (_m = (_l = options.members) === null || _l === void 0 ? void 0 : _l.filter(core_1.notNullish)) !== null && _m !== void 0 ? _m : [];
|
|
24
|
+
}
|
|
25
|
+
onWrite(builder) {
|
|
26
|
+
builder.append(this.inject.beforeDoc);
|
|
27
|
+
doc_1.tsDoc.write(builder, doc_1.tsDoc.get(this.doc, { generics: this.generics }));
|
|
28
|
+
builder.append(this.inject.afterDoc);
|
|
29
|
+
builder.append(this.inject.beforeDecorators);
|
|
30
|
+
decorator_1.tsDecorator.write(builder, this.decorators, { multiline: true });
|
|
31
|
+
builder.append(this.inject.afterDecorators);
|
|
32
|
+
builder.append(this.inject.beforeModifiers);
|
|
33
|
+
if (this.export)
|
|
34
|
+
builder.append('export ');
|
|
35
|
+
if (this.abstract)
|
|
36
|
+
builder.append('abstract ');
|
|
37
|
+
builder.append(this.inject.afterModifiers);
|
|
38
|
+
builder.append('class ');
|
|
39
|
+
builder.append(this.inject.beforeName, this.name, this.inject.afterName);
|
|
40
|
+
builder.append(this.inject.beforeGenerics);
|
|
41
|
+
generic_parameter_1.tsGenericParameter.write(builder, this.generics);
|
|
42
|
+
builder.append(this.inject.afterGenerics);
|
|
43
|
+
if (this.extends) {
|
|
44
|
+
builder.append(' extends ');
|
|
45
|
+
builder.append(this.inject.beforeExtends);
|
|
46
|
+
(0, write_ts_nodes_1.writeTsNode)(builder, this.extends);
|
|
47
|
+
builder.append(this.inject.afterExtends);
|
|
48
|
+
}
|
|
49
|
+
if (this.implements.length > 0) {
|
|
50
|
+
builder.append(' implements ');
|
|
51
|
+
builder.append(this.inject.beforeImplements);
|
|
52
|
+
(0, write_ts_nodes_1.writeTsNodes)(builder, this.implements, { separator: ', ' });
|
|
53
|
+
builder.append(this.inject.afterImplements);
|
|
54
|
+
}
|
|
55
|
+
builder.append(' ');
|
|
56
|
+
builder.append(this.inject.beforeBody);
|
|
57
|
+
builder.parenthesize('{}', (b) => {
|
|
58
|
+
b.append(this.inject.beforeMembers);
|
|
59
|
+
(0, write_ts_members_1.writeTsMembers)(b, this.members);
|
|
60
|
+
b.append(this.inject.afterMembers);
|
|
61
|
+
}, { multiline: this.members.length > 0 });
|
|
62
|
+
builder.append(this.inject.afterBody);
|
|
63
|
+
builder.appendLine();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.TsClass = TsClass;
|
|
67
|
+
const createClass = (name, options) => new TsClass(Object.assign(Object.assign({}, options), { name }));
|
|
68
|
+
exports.tsClass = Object.assign(createClass, {
|
|
69
|
+
write: write_ts_nodes_1.writeTsNodes,
|
|
70
|
+
});
|