@compassdigital/sdk.typescript 3.0.0-beta.8 → 3.0.0-rc.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/README.md +121 -8
- package/bin/gen.js +484 -0
- package/bin/index.js +3 -0
- package/gen.ts +99 -41
- package/lib/base.d.ts +134 -9
- package/lib/base.d.ts.map +1 -1
- package/lib/base.js +293 -48
- package/lib/base.js.map +1 -1
- package/lib/index.d.ts +592 -337
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +544 -245
- package/lib/index.js.map +1 -1
- package/lib/interface/announcement.d.ts.map +1 -0
- package/lib/interface/announcement.js +4 -0
- package/lib/interface/announcement.js.map +1 -0
- package/lib/interface/brand.d.ts.map +1 -0
- package/lib/interface/brand.js +4 -0
- package/lib/interface/brand.js.map +1 -0
- package/lib/{calendar.d.ts → interface/calendar.d.ts} +4 -1
- package/lib/interface/calendar.d.ts.map +1 -0
- package/lib/interface/calendar.js +4 -0
- package/lib/interface/calendar.js.map +1 -0
- package/lib/interface/config.d.ts.map +1 -0
- package/lib/interface/config.js +4 -0
- package/lib/interface/config.js.map +1 -0
- package/lib/interface/datalake.d.ts.map +1 -0
- package/lib/interface/datalake.js +4 -0
- package/lib/interface/datalake.js.map +1 -0
- package/lib/interface/delivery.d.ts.map +1 -0
- package/lib/interface/delivery.js +4 -0
- package/lib/interface/delivery.js.map +1 -0
- package/lib/interface/dh.d.ts.map +1 -0
- package/lib/interface/dh.js +4 -0
- package/lib/interface/dh.js.map +1 -0
- package/lib/interface/email.d.ts +21 -0
- package/lib/interface/email.d.ts.map +1 -0
- package/lib/interface/email.js +4 -0
- package/lib/interface/email.js.map +1 -0
- package/lib/interface/file.d.ts.map +1 -0
- package/lib/interface/file.js +4 -0
- package/lib/interface/file.js.map +1 -0
- package/lib/{kds.d.ts → interface/kds.d.ts} +1 -0
- package/lib/interface/kds.d.ts.map +1 -0
- package/lib/interface/kds.js +4 -0
- package/lib/interface/kds.js.map +1 -0
- package/lib/{location.d.ts → interface/location.d.ts} +50 -20
- package/lib/interface/location.d.ts.map +1 -0
- package/lib/interface/location.js +4 -0
- package/lib/interface/location.js.map +1 -0
- package/lib/interface/logger.d.ts.map +1 -0
- package/lib/interface/logger.js +4 -0
- package/lib/interface/logger.js.map +1 -0
- package/lib/interface/loyalty.d.ts.map +1 -0
- package/lib/interface/loyalty.js +4 -0
- package/lib/interface/loyalty.js.map +1 -0
- package/lib/interface/mealplan.d.ts.map +1 -0
- package/lib/interface/mealplan.js +4 -0
- package/lib/interface/mealplan.js.map +1 -0
- package/lib/interface/menu.d.ts +448 -0
- package/lib/interface/menu.d.ts.map +1 -0
- package/lib/interface/menu.js +4 -0
- package/lib/interface/menu.js.map +1 -0
- package/lib/interface/message.d.ts.map +1 -0
- package/lib/interface/message.js +4 -0
- package/lib/interface/message.js.map +1 -0
- package/lib/{order.d.ts → interface/order.d.ts} +11 -4
- package/lib/interface/order.d.ts.map +1 -0
- package/lib/interface/order.js +4 -0
- package/lib/interface/order.js.map +1 -0
- package/lib/{partner.d.ts → interface/partner.d.ts} +243 -4
- package/lib/interface/partner.d.ts.map +1 -0
- package/lib/interface/partner.js +4 -0
- package/lib/interface/partner.js.map +1 -0
- package/lib/{payment.d.ts → interface/payment.d.ts} +1 -0
- package/lib/interface/payment.d.ts.map +1 -0
- package/lib/interface/payment.js +4 -0
- package/lib/interface/payment.js.map +1 -0
- package/lib/{promo.d.ts → interface/promo.d.ts} +1 -0
- package/lib/interface/promo.d.ts.map +1 -0
- package/lib/interface/promo.js +4 -0
- package/lib/interface/promo.js.map +1 -0
- package/lib/{report.d.ts → interface/report.d.ts} +2 -0
- package/lib/interface/report.d.ts.map +1 -0
- package/lib/interface/report.js +4 -0
- package/lib/interface/report.js.map +1 -0
- package/lib/interface/schedule.d.ts.map +1 -0
- package/lib/interface/schedule.js +4 -0
- package/lib/interface/schedule.js.map +1 -0
- package/lib/{shoppingcart.d.ts → interface/shoppingcart.d.ts} +10 -1
- package/lib/interface/shoppingcart.d.ts.map +1 -0
- package/lib/interface/shoppingcart.js +4 -0
- package/lib/interface/shoppingcart.js.map +1 -0
- package/lib/interface/task.d.ts.map +1 -0
- package/lib/interface/task.js +4 -0
- package/lib/interface/task.js.map +1 -0
- package/lib/{user.d.ts → interface/user.d.ts} +19 -0
- package/lib/interface/user.d.ts.map +1 -0
- package/lib/interface/user.js +4 -0
- package/lib/interface/user.js.map +1 -0
- package/lib/interface/vote.d.ts.map +1 -0
- package/lib/interface/vote.js +4 -0
- package/lib/interface/vote.js.map +1 -0
- package/manifest.json +4 -0
- package/package.json +15 -5
- package/src/base.ts +315 -35
- package/src/index.ts +2630 -988
- package/src/{announcement.ts → interface/announcement.ts} +2 -0
- package/src/{brand.ts → interface/brand.ts} +2 -0
- package/src/{calendar.ts → interface/calendar.ts} +7 -1
- package/src/{config.ts → interface/config.ts} +2 -0
- package/src/{datalake.ts → interface/datalake.ts} +2 -0
- package/src/{delivery.ts → interface/delivery.ts} +2 -0
- package/src/{dh.ts → interface/dh.ts} +2 -0
- package/src/interface/email.ts +30 -0
- package/src/{file.ts → interface/file.ts} +2 -0
- package/src/{kds.ts → interface/kds.ts} +4 -0
- package/src/{location.ts → interface/location.ts} +76 -35
- package/src/{logger.ts → interface/logger.ts} +2 -0
- package/src/{loyalty.ts → interface/loyalty.ts} +2 -0
- package/src/{mealplan.ts → interface/mealplan.ts} +2 -0
- package/src/interface/menu.ts +649 -0
- package/src/{message.ts → interface/message.ts} +2 -0
- package/src/{order.ts → interface/order.ts} +21 -6
- package/src/{partner.ts → interface/partner.ts} +291 -5
- package/src/{payment.ts → interface/payment.ts} +4 -0
- package/src/{promo.ts → interface/promo.ts} +3 -0
- package/src/{report.ts → interface/report.ts} +4 -0
- package/src/{schedule.ts → interface/schedule.ts} +2 -0
- package/src/{shoppingcart.ts → interface/shoppingcart.ts} +14 -1
- package/src/{task.ts → interface/task.ts} +2 -0
- package/src/{user.ts → interface/user.ts} +34 -1
- package/src/{vote.ts → interface/vote.ts} +2 -0
- package/template.ejs +3 -3
- package/test/client.test.ts +192 -0
- package/test/gen.test.ts +22 -0
- package/lib/announcement.d.ts.map +0 -1
- package/lib/announcement.js +0 -3
- package/lib/announcement.js.map +0 -1
- package/lib/brand.d.ts.map +0 -1
- package/lib/brand.js +0 -3
- package/lib/brand.js.map +0 -1
- package/lib/calendar.d.ts.map +0 -1
- package/lib/calendar.js +0 -3
- package/lib/calendar.js.map +0 -1
- package/lib/config.d.ts.map +0 -1
- package/lib/config.js +0 -3
- package/lib/config.js.map +0 -1
- package/lib/datalake.d.ts.map +0 -1
- package/lib/datalake.js +0 -3
- package/lib/datalake.js.map +0 -1
- package/lib/delivery.d.ts.map +0 -1
- package/lib/delivery.js +0 -3
- package/lib/delivery.js.map +0 -1
- package/lib/dh.d.ts.map +0 -1
- package/lib/dh.js +0 -3
- package/lib/dh.js.map +0 -1
- package/lib/email.d.ts +0 -5
- package/lib/email.d.ts.map +0 -1
- package/lib/email.js +0 -3
- package/lib/email.js.map +0 -1
- package/lib/file.d.ts.map +0 -1
- package/lib/file.js +0 -3
- package/lib/file.js.map +0 -1
- package/lib/kds.d.ts.map +0 -1
- package/lib/kds.js +0 -3
- package/lib/kds.js.map +0 -1
- package/lib/location.d.ts.map +0 -1
- package/lib/location.js +0 -3
- package/lib/location.js.map +0 -1
- package/lib/logger.d.ts.map +0 -1
- package/lib/logger.js +0 -3
- package/lib/logger.js.map +0 -1
- package/lib/loyalty.d.ts.map +0 -1
- package/lib/loyalty.js +0 -3
- package/lib/loyalty.js.map +0 -1
- package/lib/mealplan.d.ts.map +0 -1
- package/lib/mealplan.js +0 -3
- package/lib/mealplan.js.map +0 -1
- package/lib/message.d.ts.map +0 -1
- package/lib/message.js +0 -3
- package/lib/message.js.map +0 -1
- package/lib/order.d.ts.map +0 -1
- package/lib/order.js +0 -3
- package/lib/order.js.map +0 -1
- package/lib/partner.d.ts.map +0 -1
- package/lib/partner.js +0 -3
- package/lib/partner.js.map +0 -1
- package/lib/payment.d.ts.map +0 -1
- package/lib/payment.js +0 -3
- package/lib/payment.js.map +0 -1
- package/lib/promo.d.ts.map +0 -1
- package/lib/promo.js +0 -3
- package/lib/promo.js.map +0 -1
- package/lib/report.d.ts.map +0 -1
- package/lib/report.js +0 -3
- package/lib/report.js.map +0 -1
- package/lib/schedule.d.ts.map +0 -1
- package/lib/schedule.js +0 -3
- package/lib/schedule.js.map +0 -1
- package/lib/shoppingcart.d.ts.map +0 -1
- package/lib/shoppingcart.js +0 -3
- package/lib/shoppingcart.js.map +0 -1
- package/lib/task.d.ts.map +0 -1
- package/lib/task.js +0 -3
- package/lib/task.js.map +0 -1
- package/lib/user.d.ts.map +0 -1
- package/lib/user.js +0 -3
- package/lib/user.js.map +0 -1
- package/lib/vote.d.ts.map +0 -1
- package/lib/vote.js +0 -3
- package/lib/vote.js.map +0 -1
- package/src/email.ts +0 -4
- /package/lib/{announcement.d.ts → interface/announcement.d.ts} +0 -0
- /package/lib/{brand.d.ts → interface/brand.d.ts} +0 -0
- /package/lib/{config.d.ts → interface/config.d.ts} +0 -0
- /package/lib/{datalake.d.ts → interface/datalake.d.ts} +0 -0
- /package/lib/{delivery.d.ts → interface/delivery.d.ts} +0 -0
- /package/lib/{dh.d.ts → interface/dh.d.ts} +0 -0
- /package/lib/{file.d.ts → interface/file.d.ts} +0 -0
- /package/lib/{logger.d.ts → interface/logger.d.ts} +0 -0
- /package/lib/{loyalty.d.ts → interface/loyalty.d.ts} +0 -0
- /package/lib/{mealplan.d.ts → interface/mealplan.d.ts} +0 -0
- /package/lib/{message.d.ts → interface/message.d.ts} +0 -0
- /package/lib/{schedule.d.ts → interface/schedule.d.ts} +0 -0
- /package/lib/{task.d.ts → interface/task.d.ts} +0 -0
- /package/lib/{vote.d.ts → interface/vote.d.ts} +0 -0
package/gen.ts
CHANGED
|
@@ -12,6 +12,8 @@ import {
|
|
|
12
12
|
import prettier from "prettier";
|
|
13
13
|
import path from "path";
|
|
14
14
|
import ejs from "ejs";
|
|
15
|
+
import yargs from "yargs/yargs";
|
|
16
|
+
import { hideBin } from "yargs/helpers";
|
|
15
17
|
|
|
16
18
|
interface Manifest {
|
|
17
19
|
services: ManifestService[];
|
|
@@ -60,28 +62,35 @@ const operationIDs : Record<string, string> = {
|
|
|
60
62
|
"get /promo": "get_promos",
|
|
61
63
|
"get /schedule": "get_schedules",
|
|
62
64
|
"get /brand": "get_brands",
|
|
63
|
-
"get /announcement/resource": "get_resources"
|
|
65
|
+
"get /announcement/resource": "get_resources",
|
|
66
|
+
"get /order/location/brand/{id}": "get_order_location_brand",
|
|
64
67
|
};
|
|
65
68
|
|
|
66
|
-
class CodeGenerator {
|
|
69
|
+
export class CodeGenerator {
|
|
67
70
|
|
|
68
71
|
private imports: ClientImport[] = [];
|
|
69
72
|
private methods: ClientMethod[] = [];
|
|
70
73
|
|
|
71
|
-
async
|
|
74
|
+
async manifest(manifest: Manifest): Promise<void> {
|
|
72
75
|
// generate service types
|
|
76
|
+
await fs.promises.mkdir(path.join("src", "interface"), { recursive: true });
|
|
73
77
|
for (const service of manifest.services) {
|
|
74
|
-
const print = new Printer();
|
|
75
78
|
console.log(`reading: ${service.swagger}`);
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
const code = prettier.format(print.code(), { parser: "typescript", printWidth: 100 });
|
|
80
|
-
const filename = path.join("src", `${service.name}.ts`);
|
|
81
|
-
fs.writeFileSync(filename, code);
|
|
79
|
+
const code = await this.service(service, false);
|
|
80
|
+
const filename = path.join("src", "interface", `${service.name}.ts`);
|
|
81
|
+
await fs.promises.writeFile(filename, code);
|
|
82
82
|
}
|
|
83
83
|
// generate client
|
|
84
|
+
const code = await this.client();
|
|
85
|
+
const filename = path.join("src", "index.ts");
|
|
86
|
+
await fs.promises.writeFile(filename, code);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async client(): Promise<string> {
|
|
84
90
|
const print = new Printer();
|
|
91
|
+
// "do not modify" warning
|
|
92
|
+
print.comment("THIS FILE IS AUTOMATICALLY GENERATED, DO NOT MODIFY");
|
|
93
|
+
print.blank();
|
|
85
94
|
// client imports
|
|
86
95
|
const imports: Record<string, string[]> = {};
|
|
87
96
|
for (const _import of this.imports) {
|
|
@@ -95,9 +104,15 @@ class CodeGenerator {
|
|
|
95
104
|
// client methods
|
|
96
105
|
const template = fs.readFileSync("template.ejs", "utf-8");
|
|
97
106
|
print.raw(ejs.render(template, { methods: this.methods }));
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
107
|
+
return prettier.format(print.code(), { parser: "typescript", printWidth: 100 });
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async service(service: ManifestService, ambient: boolean): Promise<string> {
|
|
111
|
+
const print = new Printer();
|
|
112
|
+
const doc = await load(service.swagger);
|
|
113
|
+
const details = analyse(doc);
|
|
114
|
+
this.transform(details, print, service, ambient);
|
|
115
|
+
return prettier.format(print.code(), { parser: "typescript", printWidth: 100 });
|
|
101
116
|
}
|
|
102
117
|
|
|
103
118
|
/**
|
|
@@ -106,14 +121,21 @@ class CodeGenerator {
|
|
|
106
121
|
private addImport(service: ManifestService, name: string): void {
|
|
107
122
|
this.imports.push({
|
|
108
123
|
name,
|
|
109
|
-
path:
|
|
124
|
+
path: `./interface/${service.name}`,
|
|
110
125
|
});
|
|
111
126
|
}
|
|
112
127
|
|
|
113
128
|
/**
|
|
114
129
|
* Generate typescript code from the document details.
|
|
115
130
|
*/
|
|
116
|
-
private transform(doc: DocumentDetails, print: Printer, service: ManifestService): void {
|
|
131
|
+
private transform(doc: DocumentDetails, print: Printer, service: ManifestService, ambient: boolean): void {
|
|
132
|
+
// "do not modify" warning
|
|
133
|
+
print.comment("THIS FILE IS AUTOMATICALLY GENERATED, DO NOT MODIFY");
|
|
134
|
+
print.blank();
|
|
135
|
+
// declaration if it's ambient
|
|
136
|
+
if (ambient) {
|
|
137
|
+
print.raw(`declare module "@compassdigital/sdk.typescript/interface/${service.name}" {`);
|
|
138
|
+
}
|
|
117
139
|
// definitions
|
|
118
140
|
for (const [name, schema] of Object.entries(doc.definitions)) {
|
|
119
141
|
print.schema(schema, name);
|
|
@@ -151,6 +173,10 @@ class CodeGenerator {
|
|
|
151
173
|
param.type = "string";
|
|
152
174
|
}
|
|
153
175
|
}
|
|
176
|
+
// add nocache query parameter if x-cache-control is specified
|
|
177
|
+
if (this.hasCacheControl(op) && !params.query.properties["nocache"]) {
|
|
178
|
+
params.query.setProperty("nocache", new Schema("boolean"));
|
|
179
|
+
}
|
|
154
180
|
const name = this.inferName(op, service);
|
|
155
181
|
let comment = `${op.method.toUpperCase()} ${path}`;
|
|
156
182
|
if (op.obj.summary) {
|
|
@@ -194,7 +220,7 @@ class CodeGenerator {
|
|
|
194
220
|
comment: comment,
|
|
195
221
|
name: name.snake,
|
|
196
222
|
params:[],
|
|
197
|
-
args: [`"${op.method}"`],
|
|
223
|
+
args: [`"${service.name}"`, `"${name.snake}"`, `"${op.method}"`],
|
|
198
224
|
response: responseT,
|
|
199
225
|
}
|
|
200
226
|
// turn the path into a template string and add the
|
|
@@ -233,7 +259,7 @@ class CodeGenerator {
|
|
|
233
259
|
}
|
|
234
260
|
options.setProperty("query", query);
|
|
235
261
|
}
|
|
236
|
-
options.merge(new Schema("
|
|
262
|
+
options.merge(new Schema("RequestOptions"));
|
|
237
263
|
method.params.push({
|
|
238
264
|
name: "options",
|
|
239
265
|
type: Printer.type(options),
|
|
@@ -243,13 +269,17 @@ class CodeGenerator {
|
|
|
243
269
|
method.args.push("options");
|
|
244
270
|
this.methods.push(method);
|
|
245
271
|
}
|
|
272
|
+
// close declaration
|
|
273
|
+
if (ambient) {
|
|
274
|
+
print.raw(`}`);
|
|
275
|
+
}
|
|
246
276
|
}
|
|
247
277
|
|
|
248
278
|
/**
|
|
249
279
|
* Infer the operation name from the method and parameter.
|
|
250
280
|
* These are a bunch of dirty hacks to make the generated names consistent.
|
|
251
281
|
*/
|
|
252
|
-
|
|
282
|
+
inferName(op: OperationDetails, service: ManifestService): OperationName {
|
|
253
283
|
let { method, path } = op;
|
|
254
284
|
let path_segments: string[] = [];
|
|
255
285
|
// use the operationId from our collection if we have one.
|
|
@@ -309,6 +339,14 @@ class CodeGenerator {
|
|
|
309
339
|
};
|
|
310
340
|
}
|
|
311
341
|
|
|
342
|
+
/**
|
|
343
|
+
* Check if the any response has caching enabled.
|
|
344
|
+
*/
|
|
345
|
+
private hasCacheControl(op: OperationDetails): boolean {
|
|
346
|
+
const responses = Object.values(op.obj.responses ?? {});
|
|
347
|
+
return responses.some(response => "x-cache-control" in response);
|
|
348
|
+
}
|
|
349
|
+
|
|
312
350
|
/**
|
|
313
351
|
* Find all the path parameter names.
|
|
314
352
|
*/
|
|
@@ -337,25 +375,6 @@ class CodeGenerator {
|
|
|
337
375
|
}
|
|
338
376
|
return request;
|
|
339
377
|
}
|
|
340
|
-
|
|
341
|
-
/**
|
|
342
|
-
* Create the type for the client method parameter.
|
|
343
|
-
*/
|
|
344
|
-
private toOptionsSchema(name: OperationName, details: OperationDetails): Schema {
|
|
345
|
-
const options = new Schema("empty");
|
|
346
|
-
if (!details.params.query.isEmpty()) {
|
|
347
|
-
const query = new Schema(`${name.pascal}Query`);
|
|
348
|
-
if (details.params.query.hasRequired()) {
|
|
349
|
-
query.required = true;
|
|
350
|
-
}
|
|
351
|
-
options.setProperty("query", query);
|
|
352
|
-
}
|
|
353
|
-
if (options.hasRequired()) {
|
|
354
|
-
options.required = true;
|
|
355
|
-
}
|
|
356
|
-
options.merge(new Schema("RequestOptions"));
|
|
357
|
-
return options;
|
|
358
|
-
}
|
|
359
378
|
}
|
|
360
379
|
|
|
361
380
|
|
|
@@ -364,9 +383,48 @@ class CodeGenerator {
|
|
|
364
383
|
* Main entry point.
|
|
365
384
|
*/
|
|
366
385
|
async function main() {
|
|
367
|
-
const
|
|
368
|
-
|
|
369
|
-
|
|
386
|
+
const { argv } = yargs(hideBin(process.argv))
|
|
387
|
+
.options("manifest", {
|
|
388
|
+
type: "string",
|
|
389
|
+
description: "manifest.json file to generate sdk from",
|
|
390
|
+
})
|
|
391
|
+
.options("swagger", {
|
|
392
|
+
type: "string",
|
|
393
|
+
description: "swagger.json file to generate interfaces from",
|
|
394
|
+
})
|
|
395
|
+
.options("service", {
|
|
396
|
+
type: "string",
|
|
397
|
+
description: "service name for generated interfaces",
|
|
398
|
+
})
|
|
399
|
+
.options("ambient", {
|
|
400
|
+
type: "boolean",
|
|
401
|
+
description: "wrap the types in a declare module directive",
|
|
402
|
+
default: true,
|
|
403
|
+
})
|
|
404
|
+
// generate sdk from manifest
|
|
405
|
+
if (argv.manifest) {
|
|
406
|
+
const data = await fs.promises.readFile(argv.manifest, "utf-8");
|
|
407
|
+
const manifest: Manifest = JSON.parse(data);
|
|
408
|
+
const gen = new CodeGenerator();
|
|
409
|
+
await gen.manifest(manifest);
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
// generate interfaces for a single swagger.json
|
|
413
|
+
if (argv.swagger || argv.service) {
|
|
414
|
+
if (!argv.swagger) {
|
|
415
|
+
throw new Error(`--swagger must be provided with --service`);
|
|
416
|
+
}
|
|
417
|
+
if (!argv.service) {
|
|
418
|
+
throw new Error(`--service must be provided with --swagger`);
|
|
419
|
+
}
|
|
420
|
+
const gen = new CodeGenerator();
|
|
421
|
+
const code = await gen.service({
|
|
422
|
+
name: argv.service,
|
|
423
|
+
swagger: argv.swagger,
|
|
424
|
+
}, argv.ambient);
|
|
425
|
+
console.log(code);
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
370
428
|
}
|
|
371
429
|
|
|
372
|
-
main();
|
|
430
|
+
main().catch(err => console.error(err.message));
|
package/lib/base.d.ts
CHANGED
|
@@ -1,33 +1,158 @@
|
|
|
1
1
|
export interface RequestOptions {
|
|
2
2
|
stage?: string;
|
|
3
|
-
headers?: Record<string, string>;
|
|
4
3
|
token?: string;
|
|
4
|
+
headers?: Record<string, string>;
|
|
5
5
|
debug?: boolean;
|
|
6
6
|
retry?: number;
|
|
7
7
|
base_url?: string;
|
|
8
|
-
|
|
8
|
+
intercept?: InterceptFn;
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* The request data provided to intercept
|
|
12
|
+
* functions.
|
|
13
|
+
*/
|
|
14
|
+
export interface RequestData {
|
|
15
|
+
name: string;
|
|
16
|
+
service: string;
|
|
17
|
+
url: string;
|
|
18
|
+
method: string;
|
|
19
|
+
headers: Record<string, string>;
|
|
20
|
+
body?: string;
|
|
11
21
|
}
|
|
12
|
-
|
|
22
|
+
/**
|
|
23
|
+
* The response data expected from
|
|
24
|
+
* intercept functions.
|
|
25
|
+
*/
|
|
26
|
+
export interface ResponseData {
|
|
27
|
+
ok: boolean;
|
|
28
|
+
status: number;
|
|
29
|
+
body: string;
|
|
30
|
+
err?: any;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A function that performs an https request.
|
|
34
|
+
*/
|
|
35
|
+
export declare type FetchFn = (req: RequestData) => Promise<ResponseData>;
|
|
36
|
+
/**
|
|
37
|
+
* A function that intercepts an http request and returns a response.
|
|
38
|
+
*/
|
|
39
|
+
export declare type InterceptFn = (req: RequestData, fetch: FetchFn) => Promise<ResponseData>;
|
|
40
|
+
/**
|
|
41
|
+
* We have to re-implement the promise methods instead of just existing
|
|
42
|
+
* the existing Promise class due to: https://github.com/microsoft/TypeScript/issues/15202
|
|
43
|
+
*/
|
|
44
|
+
export declare class ResponsePromise<T> implements Promise<T> {
|
|
45
|
+
private promise;
|
|
46
|
+
/**
|
|
47
|
+
* Implements Promise interface.
|
|
48
|
+
*/
|
|
49
|
+
[Symbol.toStringTag]: string;
|
|
50
|
+
constructor(promise: Promise<T>);
|
|
51
|
+
/**
|
|
52
|
+
* Implements Promise interface.
|
|
53
|
+
*/
|
|
54
|
+
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): ResponsePromise<TResult1 | TResult2>;
|
|
55
|
+
/**
|
|
56
|
+
* Implements Promise interface.
|
|
57
|
+
*/
|
|
58
|
+
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): ResponsePromise<T | TResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Implements Promise interface.
|
|
61
|
+
*/
|
|
62
|
+
finally(onfinally?: (() => void) | null): ResponsePromise<T>;
|
|
63
|
+
/**
|
|
64
|
+
* Returns a promise that resolves to null if http status code
|
|
65
|
+
* or service error code matches one of the provided codes.
|
|
66
|
+
* If no codes are specified, all codes are ignored.
|
|
67
|
+
*/
|
|
68
|
+
ignore(...codes: number[]): ResponsePromise<T | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Returns a promise that resolves to either the response body
|
|
71
|
+
* or a ServiceError.
|
|
72
|
+
*/
|
|
73
|
+
combine(...codes: number[]): Promise<EitherResponse<T>>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Either a response body or a service error.
|
|
77
|
+
*/
|
|
78
|
+
export declare type EitherResponse<T> = {
|
|
79
|
+
ok: true;
|
|
80
|
+
data: T;
|
|
81
|
+
err: null;
|
|
82
|
+
} | {
|
|
83
|
+
ok: false;
|
|
84
|
+
data: null;
|
|
85
|
+
err: ServiceError;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* An error returned from an api service.
|
|
89
|
+
*/
|
|
13
90
|
export declare class ServiceError extends Error {
|
|
14
91
|
status: number;
|
|
15
92
|
code: number;
|
|
16
93
|
constructor(status: number, // http status
|
|
17
94
|
code: number, // service error code
|
|
18
95
|
message: string);
|
|
19
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Returns the http status code from err.
|
|
98
|
+
* If err isn't an instance of ServiceError, -1 is returned.
|
|
99
|
+
*/
|
|
100
|
+
static status(err: any): number;
|
|
101
|
+
/**
|
|
102
|
+
* Returns the service error code from err.
|
|
103
|
+
* If err isn't an instance of ServiceError, -1 is returned.
|
|
104
|
+
*/
|
|
105
|
+
static code(err: any): number;
|
|
106
|
+
/**
|
|
107
|
+
* Returns a promise that resolves to null if http status code
|
|
108
|
+
* or service error code matches one of the provided codes.
|
|
109
|
+
* If no codes are specified, all codes are ignored.
|
|
110
|
+
*/
|
|
111
|
+
static ignore<T>(codes: number[], response: Promise<T>): Promise<T | null>;
|
|
112
|
+
/**
|
|
113
|
+
* Returns a promise that resolves to either T or a ServiceError.
|
|
114
|
+
*/
|
|
115
|
+
static combine<T>(codes: number[], response: Promise<T>): Promise<EitherResponse<T>>;
|
|
116
|
+
/**
|
|
117
|
+
* Constructs a ServiceError from the provided response data.
|
|
118
|
+
*/
|
|
119
|
+
static from_res(res: ResponseData): ServiceError;
|
|
20
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* BaseServiceClient contains the logic for executing http requests.
|
|
123
|
+
* This class is meant to be extended by the generated code.
|
|
124
|
+
*/
|
|
21
125
|
export declare abstract class BaseServiceClient {
|
|
22
126
|
private options;
|
|
23
|
-
constructor(options?:
|
|
127
|
+
constructor(options?: RequestOptions);
|
|
24
128
|
/**
|
|
25
129
|
* Combine the route and query parameters into a full url.
|
|
26
130
|
*/
|
|
27
131
|
private build_url;
|
|
28
|
-
|
|
29
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Perform the http request or pass it to the intercept function
|
|
134
|
+
* if one was configured.
|
|
135
|
+
*/
|
|
136
|
+
private fetch;
|
|
137
|
+
/**
|
|
138
|
+
* Returns true if the status code represents a transient error
|
|
139
|
+
* or it's a network error.
|
|
140
|
+
*/
|
|
141
|
+
private should_retry;
|
|
142
|
+
/**
|
|
143
|
+
* Returns the merged options.
|
|
144
|
+
*/
|
|
145
|
+
private get_options;
|
|
146
|
+
/**
|
|
147
|
+
* A delegate to _request that wraps the response in a ResponsePromise.
|
|
148
|
+
*/
|
|
149
|
+
protected request(service: string, name: string, method: string, route: string, body: any, options?: {
|
|
30
150
|
query?: any;
|
|
31
|
-
} & RequestOptions):
|
|
151
|
+
} & RequestOptions): ResponsePromise<any>;
|
|
152
|
+
/**
|
|
153
|
+
* The main logic for fulfilling a request as perscribed by
|
|
154
|
+
* the request options.
|
|
155
|
+
*/
|
|
156
|
+
private _request;
|
|
32
157
|
}
|
|
33
158
|
//# sourceMappingURL=base.d.ts.map
|
package/lib/base.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|