@compassdigital/sdk.typescript 3.0.0-beta.21 → 3.0.0-beta.3

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.
Files changed (226) hide show
  1. package/README.md +9 -126
  2. package/gen.ts +41 -86
  3. package/lib/announcement.d.ts.map +1 -0
  4. package/lib/announcement.js +3 -0
  5. package/lib/announcement.js.map +1 -0
  6. package/lib/base.d.ts +4 -141
  7. package/lib/base.d.ts.map +1 -1
  8. package/lib/base.js +35 -328
  9. package/lib/base.js.map +1 -1
  10. package/lib/brand.d.ts.map +1 -0
  11. package/lib/brand.js +3 -0
  12. package/lib/brand.js.map +1 -0
  13. package/lib/calendar.d.ts.map +1 -0
  14. package/lib/calendar.js +3 -0
  15. package/lib/calendar.js.map +1 -0
  16. package/lib/config.d.ts.map +1 -0
  17. package/lib/config.js +3 -0
  18. package/lib/config.js.map +1 -0
  19. package/lib/datalake.d.ts.map +1 -0
  20. package/lib/datalake.js +3 -0
  21. package/lib/datalake.js.map +1 -0
  22. package/lib/delivery.d.ts.map +1 -0
  23. package/lib/delivery.js +3 -0
  24. package/lib/delivery.js.map +1 -0
  25. package/lib/dh.d.ts.map +1 -0
  26. package/lib/dh.js +3 -0
  27. package/lib/dh.js.map +1 -0
  28. package/lib/email.d.ts +5 -0
  29. package/lib/email.d.ts.map +1 -0
  30. package/lib/email.js +3 -0
  31. package/lib/email.js.map +1 -0
  32. package/lib/file.d.ts.map +1 -0
  33. package/lib/file.js +3 -0
  34. package/lib/file.js.map +1 -0
  35. package/lib/index.d.ts +264 -503
  36. package/lib/index.d.ts.map +1 -1
  37. package/lib/index.js +242 -534
  38. package/lib/index.js.map +1 -1
  39. package/lib/{interface/kds.d.ts → kds.d.ts} +0 -1
  40. package/lib/kds.d.ts.map +1 -0
  41. package/lib/kds.js +3 -0
  42. package/lib/kds.js.map +1 -0
  43. package/lib/{interface/location.d.ts → location.d.ts} +18 -23
  44. package/lib/location.d.ts.map +1 -0
  45. package/lib/location.js +3 -0
  46. package/lib/location.js.map +1 -0
  47. package/lib/logger.d.ts.map +1 -0
  48. package/lib/logger.js +3 -0
  49. package/lib/logger.js.map +1 -0
  50. package/lib/loyalty.d.ts.map +1 -0
  51. package/lib/loyalty.js +3 -0
  52. package/lib/loyalty.js.map +1 -0
  53. package/lib/mealplan.d.ts.map +1 -0
  54. package/lib/mealplan.js +3 -0
  55. package/lib/mealplan.js.map +1 -0
  56. package/lib/message.d.ts.map +1 -0
  57. package/lib/message.js +3 -0
  58. package/lib/message.js.map +1 -0
  59. package/lib/{interface/order.d.ts → order.d.ts} +4 -11
  60. package/lib/order.d.ts.map +1 -0
  61. package/lib/order.js +3 -0
  62. package/lib/order.js.map +1 -0
  63. package/lib/{interface/partner.d.ts → partner.d.ts} +4 -243
  64. package/lib/partner.d.ts.map +1 -0
  65. package/lib/partner.js +3 -0
  66. package/lib/partner.js.map +1 -0
  67. package/lib/{interface/payment.d.ts → payment.d.ts} +0 -1
  68. package/lib/payment.d.ts.map +1 -0
  69. package/lib/payment.js +3 -0
  70. package/lib/payment.js.map +1 -0
  71. package/lib/promo.d.ts.map +1 -0
  72. package/lib/promo.js +3 -0
  73. package/lib/promo.js.map +1 -0
  74. package/lib/report.d.ts.map +1 -0
  75. package/lib/report.js +3 -0
  76. package/lib/report.js.map +1 -0
  77. package/lib/schedule.d.ts.map +1 -0
  78. package/lib/schedule.js +3 -0
  79. package/lib/schedule.js.map +1 -0
  80. package/lib/{interface/shoppingcart.d.ts → shoppingcart.d.ts} +1 -10
  81. package/lib/shoppingcart.d.ts.map +1 -0
  82. package/lib/shoppingcart.js +3 -0
  83. package/lib/shoppingcart.js.map +1 -0
  84. package/lib/task.d.ts.map +1 -0
  85. package/lib/task.js +3 -0
  86. package/lib/task.js.map +1 -0
  87. package/lib/{interface/user.d.ts → user.d.ts} +0 -19
  88. package/lib/user.d.ts.map +1 -0
  89. package/lib/user.js +3 -0
  90. package/lib/user.js.map +1 -0
  91. package/lib/vote.d.ts.map +1 -0
  92. package/lib/vote.js +3 -0
  93. package/lib/vote.js.map +1 -0
  94. package/manifest.json +50 -29
  95. package/package.json +5 -19
  96. package/src/{interface/announcement.ts → announcement.ts} +0 -2
  97. package/src/base.ts +17 -330
  98. package/src/{interface/brand.ts → brand.ts} +0 -2
  99. package/src/{interface/calendar.ts → calendar.ts} +0 -2
  100. package/src/{interface/config.ts → config.ts} +0 -2
  101. package/src/{interface/datalake.ts → datalake.ts} +0 -2
  102. package/src/{interface/delivery.ts → delivery.ts} +0 -2
  103. package/src/{interface/dh.ts → dh.ts} +0 -2
  104. package/src/email.ts +4 -0
  105. package/src/{interface/file.ts → file.ts} +0 -2
  106. package/src/index.ts +503 -2219
  107. package/src/{interface/kds.ts → kds.ts} +0 -4
  108. package/src/{interface/location.ts → location.ts} +33 -41
  109. package/src/{interface/logger.ts → logger.ts} +0 -2
  110. package/src/{interface/loyalty.ts → loyalty.ts} +0 -2
  111. package/src/{interface/mealplan.ts → mealplan.ts} +0 -2
  112. package/src/{interface/message.ts → message.ts} +0 -2
  113. package/src/{interface/order.ts → order.ts} +6 -21
  114. package/src/{interface/partner.ts → partner.ts} +5 -291
  115. package/src/{interface/payment.ts → payment.ts} +0 -4
  116. package/src/{interface/promo.ts → promo.ts} +0 -2
  117. package/src/{interface/report.ts → report.ts} +0 -2
  118. package/src/{interface/schedule.ts → schedule.ts} +0 -2
  119. package/src/{interface/shoppingcart.ts → shoppingcart.ts} +1 -14
  120. package/src/{interface/task.ts → task.ts} +0 -2
  121. package/src/{interface/user.ts → user.ts} +1 -34
  122. package/src/{interface/vote.ts → vote.ts} +0 -2
  123. package/template.ejs +2 -3
  124. package/bin/gen.js +0 -472
  125. package/bin/index.js +0 -3
  126. package/lib/interface/announcement.d.ts.map +0 -1
  127. package/lib/interface/announcement.js +0 -4
  128. package/lib/interface/announcement.js.map +0 -1
  129. package/lib/interface/brand.d.ts.map +0 -1
  130. package/lib/interface/brand.js +0 -4
  131. package/lib/interface/brand.js.map +0 -1
  132. package/lib/interface/calendar.d.ts.map +0 -1
  133. package/lib/interface/calendar.js +0 -4
  134. package/lib/interface/calendar.js.map +0 -1
  135. package/lib/interface/config.d.ts.map +0 -1
  136. package/lib/interface/config.js +0 -4
  137. package/lib/interface/config.js.map +0 -1
  138. package/lib/interface/datalake.d.ts.map +0 -1
  139. package/lib/interface/datalake.js +0 -4
  140. package/lib/interface/datalake.js.map +0 -1
  141. package/lib/interface/delivery.d.ts.map +0 -1
  142. package/lib/interface/delivery.js +0 -4
  143. package/lib/interface/delivery.js.map +0 -1
  144. package/lib/interface/dh.d.ts.map +0 -1
  145. package/lib/interface/dh.js +0 -4
  146. package/lib/interface/dh.js.map +0 -1
  147. package/lib/interface/email.d.ts +0 -21
  148. package/lib/interface/email.d.ts.map +0 -1
  149. package/lib/interface/email.js +0 -4
  150. package/lib/interface/email.js.map +0 -1
  151. package/lib/interface/file.d.ts.map +0 -1
  152. package/lib/interface/file.js +0 -4
  153. package/lib/interface/file.js.map +0 -1
  154. package/lib/interface/kds.d.ts.map +0 -1
  155. package/lib/interface/kds.js +0 -4
  156. package/lib/interface/kds.js.map +0 -1
  157. package/lib/interface/location.d.ts.map +0 -1
  158. package/lib/interface/location.js +0 -4
  159. package/lib/interface/location.js.map +0 -1
  160. package/lib/interface/logger.d.ts.map +0 -1
  161. package/lib/interface/logger.js +0 -4
  162. package/lib/interface/logger.js.map +0 -1
  163. package/lib/interface/loyalty.d.ts.map +0 -1
  164. package/lib/interface/loyalty.js +0 -4
  165. package/lib/interface/loyalty.js.map +0 -1
  166. package/lib/interface/mealplan.d.ts.map +0 -1
  167. package/lib/interface/mealplan.js +0 -4
  168. package/lib/interface/mealplan.js.map +0 -1
  169. package/lib/interface/menu.d.ts +0 -444
  170. package/lib/interface/menu.d.ts.map +0 -1
  171. package/lib/interface/menu.js +0 -4
  172. package/lib/interface/menu.js.map +0 -1
  173. package/lib/interface/message.d.ts.map +0 -1
  174. package/lib/interface/message.js +0 -4
  175. package/lib/interface/message.js.map +0 -1
  176. package/lib/interface/order.d.ts.map +0 -1
  177. package/lib/interface/order.js +0 -4
  178. package/lib/interface/order.js.map +0 -1
  179. package/lib/interface/partner.d.ts.map +0 -1
  180. package/lib/interface/partner.js +0 -4
  181. package/lib/interface/partner.js.map +0 -1
  182. package/lib/interface/payment.d.ts.map +0 -1
  183. package/lib/interface/payment.js +0 -4
  184. package/lib/interface/payment.js.map +0 -1
  185. package/lib/interface/promo.d.ts.map +0 -1
  186. package/lib/interface/promo.js +0 -4
  187. package/lib/interface/promo.js.map +0 -1
  188. package/lib/interface/report.d.ts.map +0 -1
  189. package/lib/interface/report.js +0 -4
  190. package/lib/interface/report.js.map +0 -1
  191. package/lib/interface/schedule.d.ts.map +0 -1
  192. package/lib/interface/schedule.js +0 -4
  193. package/lib/interface/schedule.js.map +0 -1
  194. package/lib/interface/shoppingcart.d.ts.map +0 -1
  195. package/lib/interface/shoppingcart.js +0 -4
  196. package/lib/interface/shoppingcart.js.map +0 -1
  197. package/lib/interface/task.d.ts.map +0 -1
  198. package/lib/interface/task.js +0 -4
  199. package/lib/interface/task.js.map +0 -1
  200. package/lib/interface/user.d.ts.map +0 -1
  201. package/lib/interface/user.js +0 -4
  202. package/lib/interface/user.js.map +0 -1
  203. package/lib/interface/vote.d.ts.map +0 -1
  204. package/lib/interface/vote.js +0 -4
  205. package/lib/interface/vote.js.map +0 -1
  206. package/src/interface/email.ts +0 -30
  207. package/src/interface/menu.ts +0 -644
  208. package/test/client.test.ts +0 -192
  209. package/test/gen.test.ts +0 -22
  210. /package/lib/{interface/announcement.d.ts → announcement.d.ts} +0 -0
  211. /package/lib/{interface/brand.d.ts → brand.d.ts} +0 -0
  212. /package/lib/{interface/calendar.d.ts → calendar.d.ts} +0 -0
  213. /package/lib/{interface/config.d.ts → config.d.ts} +0 -0
  214. /package/lib/{interface/datalake.d.ts → datalake.d.ts} +0 -0
  215. /package/lib/{interface/delivery.d.ts → delivery.d.ts} +0 -0
  216. /package/lib/{interface/dh.d.ts → dh.d.ts} +0 -0
  217. /package/lib/{interface/file.d.ts → file.d.ts} +0 -0
  218. /package/lib/{interface/logger.d.ts → logger.d.ts} +0 -0
  219. /package/lib/{interface/loyalty.d.ts → loyalty.d.ts} +0 -0
  220. /package/lib/{interface/mealplan.d.ts → mealplan.d.ts} +0 -0
  221. /package/lib/{interface/message.d.ts → message.d.ts} +0 -0
  222. /package/lib/{interface/promo.d.ts → promo.d.ts} +0 -0
  223. /package/lib/{interface/report.d.ts → report.d.ts} +0 -0
  224. /package/lib/{interface/schedule.d.ts → schedule.d.ts} +0 -0
  225. /package/lib/{interface/task.d.ts → task.d.ts} +0 -0
  226. /package/lib/{interface/vote.d.ts → vote.d.ts} +0 -0
package/README.md CHANGED
@@ -2,152 +2,35 @@
2
2
 
3
3
  Compass Digital Labs TypeScript SDK
4
4
 
5
- ## Install
6
-
7
- ```
8
- $ npm install --save @compassdigital/sdk.typescript@latest
9
- ```
10
-
11
- ## Example Server Usage
12
-
13
- ``` typescript
14
- import Provider from "@compassdigital/provider";
15
- import { GetTaskRequest, GetTaskResponse } from "@compassdigital/sdk.typescript/interface/task";
16
-
17
- const provider = new Provider({ type: "payment" });
18
-
19
- provider.on<GetTaskRequest, GetTaskResponse>("get_task", function (req, next): void {
20
- // ...
21
- })
22
- ```
23
-
24
5
  ## Example Client Usage
25
6
 
26
- **Instanciate Client:**
27
7
 
28
8
  ``` typescript
29
9
  import { ServiceClient } from "@compassdigital/sdk.typescript";
30
10
 
31
11
  const api = new ServiceClient({ stage: "dev" });
32
- ```
33
-
34
- **Basic Request:**
35
-
36
- ``` typescript
37
- const task = await api.get_task(id);
38
- ```
39
-
40
- **Request Options:**
41
-
42
- * These options may be passed to any request.
43
12
 
44
- ``` typescript
45
- interface RequestOptions {
46
- // environment to make requests to
47
- stage?: string;
48
- // authentication token
49
- token?: string;
50
- // additional headers
51
- headers?: Record<string, string>;
52
- // log all requests and responses
53
- debug?: boolean;
54
- // the number of times to retry a request
55
- retry?: number;
56
- // make requests against this base url
57
- // note: the stage property is ignored if base_url is set
58
- base_url?: string;
59
- // intercept outgoing http requests
60
- intercept?: InterceptFn;
13
+ async function main() {
14
+ const task = await api.get_task(task_id);
61
15
  }
62
16
  ```
63
17
 
64
- * The `RequestOptions` can be provided to the `ServiceClient` constructor or at the request call site.
65
- * The options provided at the call site will overide options passed to the constructor.
18
+ ## Example Server Usage
66
19
 
67
20
  ``` typescript
21
+ import { PostPaymentTokenRequest, PostPaymentTokenResponse } from "@compassdigital/sdk.typescript/payment";
22
+ import { Provider } from "@compassdigital/provider";
23
+ import { NextFn } from "@compassdigital/provider/interface"
68
24
 
69
- const api = new ServiceClient({
70
- token: "<token>",
71
- retry: 2,
72
- })
25
+ const provider = new Provider({ type: "payment" });
73
26
 
74
- const location = await api.get_location(id, {
75
- token: "<token>",
76
- retry: 2,
27
+ provider.on("post_payment_token", function (req: PostPaymentTokenRequest, next: NextFn<PostPaymentTokenResponse>): void {
28
+ // ...
77
29
  })
78
30
  ```
79
31
 
80
- **Error Handling:**
81
-
82
- * non-200 responses are rejected with a `ServiceError`.
83
-
84
- ``` typescript
85
- try {
86
- const shoppingcart = await api.get_shoppingcart(id);
87
- } catch (err) {
88
- // Since the error type is `unknown` we must type assert before
89
- // accessing the properties.
90
- if (err instanceof ServiceError) {
91
- console.log(err.status, err.code, err.message);
92
- }
93
-
94
- // There are helpers for accessing the status and code
95
- if (ServiceError.code(err) === 400.31) {
96
- console.log("Failed to get menu");
97
- }
98
- }
99
- ```
100
-
101
- * There is a `ignore` convenience method for ignoring specific status & error codes.
102
-
103
- ``` typescript
104
- const issue: OrderIssue = { items: [] };
105
- await api.post_order_issue(id, issue).ignore(400.18, 400.21);
106
- ```
107
-
108
- * There is a `combine` convenience method for returning an object which contains the response or error.
109
-
110
- ``` typescript
111
- const res = await api.get_task(id).combine();
112
-
113
- if (res.ok) {
114
- console.log("task", res.data);
115
- } else {
116
- console.log("error", res.err);
117
- }
118
- ```
119
-
120
- **Testing:**
121
-
122
- * You can register an `intercept` function which will recieve all request.
123
-
124
- ``` typescript
125
-
126
- import {
127
- ServiceClient,
128
- RequestData,
129
- ResponseData,
130
- FetchFn,
131
- } from "@compassdigital/sdk.typescript";
132
-
133
- async function intercept(req: RequestData, fetch: FetchFn): Promise<ResponseData> {
134
- expect(req.name).toBe("get_shoppingcart");
135
- return { ok: true, status: 200, body: JSON.stringify({}) }
136
- }
137
-
138
- const api = new ServiceClient({ intercept });
139
- ```
140
-
141
32
  ## Code Gen
142
33
 
143
34
  1. Add new services to `manifest.json`.
144
35
  2. Run `npm run gen`.
145
36
 
146
- ## Ad-Hoc Code Gen
147
-
148
- If you need types for a service you're working on and the sdk hasn't been updated yet, then
149
- you can generate local types from your swagger.
150
-
151
- ```
152
- $ sdk.typescript --swagger ./swagger.json --service my_service > types/my_service.d.ts
153
- ```
package/gen.ts CHANGED
@@ -12,8 +12,6 @@ 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";
17
15
 
18
16
  interface Manifest {
19
17
  services: ManifestService[];
@@ -22,6 +20,7 @@ interface Manifest {
22
20
  interface ManifestService {
23
21
  name: string; // service name
24
22
  swagger: string; // swagger url or file
23
+ output: string; // typescript output file
25
24
  }
26
25
 
27
26
  interface ClientImport {
@@ -62,35 +61,29 @@ const operationIDs : Record<string, string> = {
62
61
  "get /promo": "get_promos",
63
62
  "get /schedule": "get_schedules",
64
63
  "get /brand": "get_brands",
65
- "get /announcement/resource": "get_resources",
66
- "get /order/location/brand/{id}": "get_order_location_brand",
64
+ "get /announcement/resource": "get_resources"
67
65
  };
68
66
 
69
- export class CodeGenerator {
67
+ class CodeGenerator {
70
68
 
71
69
  private imports: ClientImport[] = [];
72
70
  private methods: ClientMethod[] = [];
73
71
 
74
- async manifest(manifest: Manifest): Promise<void> {
72
+ async generate(manifest: Manifest): Promise<void> {
75
73
  // generate service types
76
- await fs.promises.mkdir(path.join("src", "interface"), { recursive: true });
77
74
  for (const service of manifest.services) {
75
+ const print = new Printer();
78
76
  console.log(`reading: ${service.swagger}`);
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);
77
+ const doc = await load(service.swagger);
78
+ const details = analyse(doc);
79
+ this.transform(details, print, service);
80
+ const code = prettier.format(print.code(), { parser: "typescript", printWidth: 100 });
81
+ console.log(`writing: ${service.output}`);
82
+ fs.mkdirSync(path.dirname(service.output), { recursive: true });
83
+ fs.writeFileSync(service.output, code);
82
84
  }
83
85
  // 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> {
90
86
  const print = new Printer();
91
- // "do not modify" warning
92
- print.comment("THIS FILE IS AUTOMATICALLY GENERATED, DO NOT MODIFY");
93
- print.blank();
94
87
  // client imports
95
88
  const imports: Record<string, string[]> = {};
96
89
  for (const _import of this.imports) {
@@ -104,15 +97,8 @@ export class CodeGenerator {
104
97
  // client methods
105
98
  const template = fs.readFileSync("template.ejs", "utf-8");
106
99
  print.raw(ejs.render(template, { methods: this.methods }));
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 });
100
+ const code = prettier.format(print.code(), { parser: "typescript", printWidth: 100 });
101
+ fs.writeFileSync("src/index.ts", code);
116
102
  }
117
103
 
118
104
  /**
@@ -121,21 +107,14 @@ export class CodeGenerator {
121
107
  private addImport(service: ManifestService, name: string): void {
122
108
  this.imports.push({
123
109
  name,
124
- path: `./interface/${service.name}`,
110
+ path: `./${service.name}`,
125
111
  });
126
112
  }
127
113
 
128
114
  /**
129
115
  * Generate typescript code from the document details.
130
116
  */
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
+ private transform(doc: DocumentDetails, print: Printer, service: ManifestService): void {
139
118
  // definitions
140
119
  for (const [name, schema] of Object.entries(doc.definitions)) {
141
120
  print.schema(schema, name);
@@ -216,7 +195,7 @@ export class CodeGenerator {
216
195
  comment: comment,
217
196
  name: name.snake,
218
197
  params:[],
219
- args: [`"${service.name}"`, `"${name.snake}"`, `"${op.method}"`],
198
+ args: [`"${op.method}"`],
220
199
  response: responseT,
221
200
  }
222
201
  // turn the path into a template string and add the
@@ -265,17 +244,13 @@ export class CodeGenerator {
265
244
  method.args.push("options");
266
245
  this.methods.push(method);
267
246
  }
268
- // close declaration
269
- if (ambient) {
270
- print.raw(`}`);
271
- }
272
247
  }
273
248
 
274
249
  /**
275
250
  * Infer the operation name from the method and parameter.
276
251
  * These are a bunch of dirty hacks to make the generated names consistent.
277
252
  */
278
- inferName(op: OperationDetails, service: ManifestService): OperationName {
253
+ private inferName(op: OperationDetails, service: ManifestService): OperationName {
279
254
  let { method, path } = op;
280
255
  let path_segments: string[] = [];
281
256
  // use the operationId from our collection if we have one.
@@ -363,6 +338,25 @@ export class CodeGenerator {
363
338
  }
364
339
  return request;
365
340
  }
341
+
342
+ /**
343
+ * Create the type for the client method parameter.
344
+ */
345
+ private toOptionsSchema(name: OperationName, details: OperationDetails): Schema {
346
+ const options = new Schema("empty");
347
+ if (!details.params.query.isEmpty()) {
348
+ const query = new Schema(`${name.pascal}Query`);
349
+ if (details.params.query.hasRequired()) {
350
+ query.required = true;
351
+ }
352
+ options.setProperty("query", query);
353
+ }
354
+ if (options.hasRequired()) {
355
+ options.required = true;
356
+ }
357
+ options.merge(new Schema("RequestOptions"));
358
+ return options;
359
+ }
366
360
  }
367
361
 
368
362
 
@@ -371,48 +365,9 @@ export class CodeGenerator {
371
365
  * Main entry point.
372
366
  */
373
367
  async function main() {
374
- const { argv } = yargs(hideBin(process.argv))
375
- .options("manifest", {
376
- type: "string",
377
- description: "manifest.json file to generate sdk from",
378
- })
379
- .options("swagger", {
380
- type: "string",
381
- description: "swagger.json file to generate interfaces from",
382
- })
383
- .options("service", {
384
- type: "string",
385
- description: "service name for generated interfaces",
386
- })
387
- .options("ambient", {
388
- type: "boolean",
389
- description: "wrap the types in a declare module directive",
390
- default: true,
391
- })
392
- // generate sdk from manifest
393
- if (argv.manifest) {
394
- const data = await fs.promises.readFile(argv.manifest, "utf-8");
395
- const manifest: Manifest = JSON.parse(data);
396
- const gen = new CodeGenerator();
397
- await gen.manifest(manifest);
398
- return;
399
- }
400
- // generate interfaces for a single swagger.json
401
- if (argv.swagger || argv.service) {
402
- if (!argv.swagger) {
403
- throw new Error(`--swagger must be provided with --service`);
404
- }
405
- if (!argv.service) {
406
- throw new Error(`--service must be provided with --swagger`);
407
- }
408
- const gen = new CodeGenerator();
409
- const code = await gen.service({
410
- name: argv.service,
411
- swagger: argv.swagger,
412
- }, argv.ambient);
413
- console.log(code);
414
- return;
415
- }
368
+ const manifest: Manifest = JSON.parse(await fs.promises.readFile("manifest.json", "utf-8"));
369
+ const gen = new CodeGenerator();
370
+ await gen.generate(manifest);
416
371
  }
417
372
 
418
- main().catch(err => console.error(err.message));
373
+ main();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announcement.d.ts","sourceRoot":"","sources":["../src/announcement.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAE3B,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,IAAI,CAAC,EAAE;QACL,EAAE,CAAC,EAAE,iBAAiB,CAAC;QACvB,EAAE,CAAC,EAAE,iBAAiB,CAAC;KACxB,CAAC;IACF,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,oBAAY,oBAAoB,GAAG,YAAY,CAAC;AAEhD,oBAAY,wBAAwB,GAAG,YAAY,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAID,MAAM,WAAW,2BAA2B;IAE1C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,4BAA4B;IAE3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,oBAAY,+BAA+B,GAAG,aAAa,CAAC;AAE5D,MAAM,WAAW,8BACf,SAAQ,4BAA4B,EAClC,2BAA2B;CAAG;AAIlC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,oBAAY,gCAAgC,GAAG,aAAa,CAAC;AAE7D,MAAM,WAAW,+BAAgC,SAAQ,6BAA6B;CAAG;AAIzF,MAAM,WAAW,mBAAmB;IAElC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,oBAAY,uBAAuB,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;CAAG;AAItE,MAAM,WAAW,mBAAmB;IAElC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,oBAAY,mBAAmB,GAAG,YAAY,CAAC;AAE/C,oBAAY,uBAAuB,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAID,MAAM,WAAW,sBAAsB;IAErC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,oBAAY,0BAA0B,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;CAAG"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=announcement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announcement.js","sourceRoot":"","sources":["../src/announcement.ts"],"names":[],"mappings":""}
package/lib/base.d.ts CHANGED
@@ -1,127 +1,11 @@
1
1
  export interface RequestOptions {
2
2
  stage?: string;
3
- token?: string;
4
3
  headers?: Record<string, string>;
4
+ token?: string;
5
5
  debug?: boolean;
6
6
  retry?: number;
7
7
  base_url?: string;
8
- intercept?: InterceptFn;
9
- }
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;
21
- }
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
- */
90
- export declare class ServiceError extends Error {
91
- status: number;
92
- code: number;
93
- constructor(status: number, // http status
94
- code: number, // service error code
95
- message: string);
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;
120
8
  }
121
- /**
122
- * BaseServiceClient contains the logic for executing http requests.
123
- * This class is meant to be extended by the generated code.
124
- */
125
9
  export declare abstract class BaseServiceClient {
126
10
  private options;
127
11
  constructor(options?: RequestOptions);
@@ -129,30 +13,9 @@ export declare abstract class BaseServiceClient {
129
13
  * Combine the route and query parameters into a full url.
130
14
  */
131
15
  private build_url;
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?: {
16
+ private is_4xx;
17
+ protected request(method: string, route: string, body: any, options?: {
150
18
  query?: any;
151
- } & RequestOptions): ResponsePromise<any>;
152
- /**
153
- * The main logic for fulfilling a request as perscribed by
154
- * the request options.
155
- */
156
- private _request;
19
+ } & RequestOptions): Promise<any>;
157
20
  }
158
21
  //# 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":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8BAAsB,iBAAiB;IACrC,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,CAAC,EAAE,cAAc;IAIpC;;OAEG;IACH,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,MAAM;cAIE,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,GAAG,EACT,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,cAAmB,GAC7C,OAAO,CAAC,GAAG,CAAC;CAmChB"}