@arinoto/cdk-arch 0.1.4 → 0.2.0
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/dist/api-container.d.ts +2 -5
- package/dist/api-container.d.ts.map +1 -1
- package/dist/api-container.js +9 -12
- package/dist/binding.js +2 -2
- package/package.json +1 -1
- package/src/api-container.ts +10 -15
- package/src/binding.ts +1 -1
package/dist/api-container.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Construct } from 'constructs';
|
|
2
2
|
import { Function } from './function';
|
|
3
3
|
export interface ApiRoutes {
|
|
4
|
-
[
|
|
4
|
+
[name: string]: RouteEntry;
|
|
5
5
|
}
|
|
6
6
|
export interface RouteEntry {
|
|
7
7
|
name: string;
|
|
@@ -13,13 +13,10 @@ export interface RouteEntry {
|
|
|
13
13
|
*/
|
|
14
14
|
export declare class ApiContainer extends Construct {
|
|
15
15
|
readonly routes: ApiRoutes;
|
|
16
|
-
private namedRoutes;
|
|
17
16
|
constructor(scope: Construct, id: string, routes?: ApiRoutes);
|
|
18
17
|
addRoute(name: string, path: string, handler: Function): void;
|
|
19
|
-
getRoute(
|
|
20
|
-
getRouteByName(name: string): RouteEntry | undefined;
|
|
18
|
+
getRoute(name: string): RouteEntry;
|
|
21
19
|
listRoutes(): string[];
|
|
22
|
-
listNamedRoutes(): RouteEntry[];
|
|
23
20
|
/**
|
|
24
21
|
* Returns a list of TBDFunctions that have not been overloaded.
|
|
25
22
|
* Use this to validate that all required implementations are provided.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-container.d.ts","sourceRoot":"","sources":["../src/api-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAe,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,CAAC,IAAI,EAAE,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"api-container.d.ts","sourceRoot":"","sources":["../src/api-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAe,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,SAAS;IACzC,SAAgB,MAAM,EAAE,SAAS,CAAC;gBAEtB,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,SAAc;IAKhE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;IAI7D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAQlC,UAAU,IAAK,MAAM,EAAE;IAIvB;;;OAGG;IACH,iBAAiB,IAAI,QAAQ,EAAE;CAKhC"}
|
package/dist/api-container.js
CHANGED
|
@@ -9,33 +9,30 @@ const function_1 = require("./function");
|
|
|
9
9
|
class ApiContainer extends constructs_1.Construct {
|
|
10
10
|
constructor(scope, id, routes = {}) {
|
|
11
11
|
super(scope, id);
|
|
12
|
-
this.namedRoutes = new Map();
|
|
13
12
|
this.routes = routes;
|
|
14
13
|
}
|
|
15
14
|
addRoute(name, path, handler) {
|
|
16
|
-
this.routes[
|
|
17
|
-
this.namedRoutes.set(name, { name, path, handler });
|
|
15
|
+
this.routes[name] = { name, path, handler };
|
|
18
16
|
}
|
|
19
|
-
getRoute(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
getRoute(name) {
|
|
18
|
+
const entry = this.routes[name];
|
|
19
|
+
if (!entry) {
|
|
20
|
+
throw new Error(`Route '${name}' not found in container '${this.node.id}'`);
|
|
21
|
+
}
|
|
22
|
+
return entry;
|
|
24
23
|
}
|
|
25
24
|
listRoutes() {
|
|
26
25
|
return Object.keys(this.routes);
|
|
27
26
|
}
|
|
28
|
-
listNamedRoutes() {
|
|
29
|
-
return Array.from(this.namedRoutes.values());
|
|
30
|
-
}
|
|
31
27
|
/**
|
|
32
28
|
* Returns a list of TBDFunctions that have not been overloaded.
|
|
33
29
|
* Use this to validate that all required implementations are provided.
|
|
34
30
|
*/
|
|
35
31
|
validateOverloads() {
|
|
36
32
|
return Object.values(this.routes)
|
|
33
|
+
.map(entry => entry.handler)
|
|
37
34
|
.filter(fn => fn instanceof function_1.TBDFunction && !fn.hasOverload());
|
|
38
35
|
}
|
|
39
36
|
}
|
|
40
37
|
exports.ApiContainer = ApiContainer;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyx5Q0FBbUQ7QUFZbkQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUd6QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFNBQW9CLEVBQUU7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsT0FBaUI7UUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksNkJBQTZCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNmLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLHNCQUFXLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0Y7QUFqQ0Qsb0NBaUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBGdW5jdGlvbiwgVEJERnVuY3Rpb24gfSBmcm9tICcuL2Z1bmN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBBcGlSb3V0ZXMge1xuICBbbmFtZTogc3RyaW5nXTogUm91dGVFbnRyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUVudHJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIGhhbmRsZXI6IEZ1bmN0aW9uO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gQVBJIGNvbnRhaW5lciB0aGF0IHJvdXRlcyByZXF1ZXN0cyB0byBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUNvbnRhaW5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXM6IEFwaVJvdXRlcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCByb3V0ZXM6IEFwaVJvdXRlcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnJvdXRlcyA9IHJvdXRlcztcbiAgfVxuXG4gIGFkZFJvdXRlKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBoYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMucm91dGVzW25hbWVdID0geyBuYW1lLCBwYXRoLCBoYW5kbGVyIH07XG4gIH1cblxuICBnZXRSb3V0ZShuYW1lOiBzdHJpbmcpOiBSb3V0ZUVudHJ5IHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMucm91dGVzW25hbWVdO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGUgJyR7bmFtZX0nIG5vdCBmb3VuZCBpbiBjb250YWluZXIgJyR7dGhpcy5ub2RlLmlkfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgbGlzdFJvdXRlcygpIDogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnJvdXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgVEJERnVuY3Rpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBvdmVybG9hZGVkLlxuICAgKiBVc2UgdGhpcyB0byB2YWxpZGF0ZSB0aGF0IGFsbCByZXF1aXJlZCBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgdmFsaWRhdGVPdmVybG9hZHMoKTogRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5yb3V0ZXMpXG4gICAgICAubWFwKGVudHJ5ID0+IGVudHJ5LmhhbmRsZXIpXG4gICAgICAuZmlsdGVyKGZuID0+IGZuIGluc3RhbmNlb2YgVEJERnVuY3Rpb24gJiYgIWZuLmhhc092ZXJsb2FkKCkpO1xuICB9XG59XG4iXX0=
|
package/dist/binding.js
CHANGED
|
@@ -19,7 +19,7 @@ class ArchitectureBinding {
|
|
|
19
19
|
bind(component, options) {
|
|
20
20
|
this.bindings.set(component, { host: options.host, port: options.port });
|
|
21
21
|
Object.entries(options.overloads ?? {}).forEach(([name, handler]) => {
|
|
22
|
-
const route = component.
|
|
22
|
+
const route = component.getRoute(name);
|
|
23
23
|
if (!route) {
|
|
24
24
|
throw new Error(`Route '${name}' not found in component '${component.node.id}'`);
|
|
25
25
|
}
|
|
@@ -58,4 +58,4 @@ exports.ArchitectureBinding = ArchitectureBinding;
|
|
|
58
58
|
* Global binding registry
|
|
59
59
|
*/
|
|
60
60
|
exports.architectureBinding = new ArchitectureBinding();
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9iaW5kaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHlDQUF1RDtBQXFCdkQ7OztHQUdHO0FBQ0gsTUFBYSxtQkFBbUI7SUFBaEM7UUFDVSxhQUFRLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsb0JBQWUsR0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQWlEdEQsQ0FBQztJQS9DQzs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLFNBQXVCLEVBQUUsT0FBb0I7UUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLDZCQUE2QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLFlBQVksbUJBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLDZCQUE2QixDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxTQUF1QixFQUFFLFNBQWlCLEVBQUUsU0FBMkM7UUFDakcsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFNBQW9CO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFvQjtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQW9CO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBbkRELGtEQW1EQztBQUVEOztHQUVHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEFwaUNvbnRhaW5lciB9IGZyb20gJy4vYXBpLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBGdW5jdGlvbiwgRnVuY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi9mdW5jdGlvbic7XG5cbi8qKlxuICogU2VydmljZSBkaXNjb3ZlcnkgY29uZmlndXJhdGlvbiBmb3IgcnVudGltZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VFbmRwb2ludCB7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJpbmRpbmcgb3B0aW9ucyBmb3IgYW4gQXBpQ29udGFpbmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluZE9wdGlvbnMgZXh0ZW5kcyBTZXJ2aWNlRW5kcG9pbnQge1xuICAvKipcbiAgICogT3ZlcnJpZGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zLlxuICAgKiBLZXlzIGFyZSBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBvbiB0aGUgY29udGFpbmVyLlxuICAgKi9cbiAgb3ZlcmxvYWRzPzogUmVjb3JkPHN0cmluZywgRnVuY3Rpb25IYW5kbGVyPjtcbn1cblxuLyoqXG4gKiBCaW5kaW5nIGJldHdlZW4gYXJjaGl0ZWN0dXJhbCBjb21wb25lbnRzIGFuZCB0aGVpciBydW50aW1lIGVuZHBvaW50cy5cbiAqIFN1cHBvcnRzIGZ1bmN0aW9uIG92ZXJsb2FkaW5nIGZvciByZXBsYWNpbmcgaW1wbGVtZW50YXRpb25zIGF0IHJ1bnRpbWUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBcmNoaXRlY3R1cmVCaW5kaW5nIHtcbiAgcHJpdmF0ZSBiaW5kaW5nczogTWFwPENvbnN0cnVjdCwgU2VydmljZUVuZHBvaW50PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBsb2NhbENvbXBvbmVudHM6IFNldDxDb25zdHJ1Y3Q+ID0gbmV3IFNldCgpO1xuXG4gIC8qKlxuICAgKiBCaW5kIGFuIGFyY2hpdGVjdHVyYWwgY29tcG9uZW50IHRvIGEgc2VydmljZSBlbmRwb2ludC5cbiAgICogT3B0aW9uYWxseSBvdmVycmlkZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgd2l0aCB0aGUgb3ZlcmxvYWRzIG9wdGlvbi5cbiAgICogT3ZlcmxvYWQga2V5cyBtdXN0IGJlIHJvdXRlIG5hbWVzIHJlZ2lzdGVyZWQgdmlhIGFkZFJvdXRlLlxuICAgKi9cbiAgYmluZChjb21wb25lbnQ6IEFwaUNvbnRhaW5lciwgb3B0aW9uczogQmluZE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmJpbmRpbmdzLnNldChjb21wb25lbnQsIHsgaG9zdDogb3B0aW9ucy5ob3N0LCBwb3J0OiBvcHRpb25zLnBvcnQgfSk7XG5cbiAgICBPYmplY3QuZW50cmllcyhvcHRpb25zLm92ZXJsb2FkcyA/PyB7fSkuZm9yRWFjaCgoW25hbWUsIGhhbmRsZXJdKSA9PiB7XG4gICAgICBjb25zdCByb3V0ZSA9IGNvbXBvbmVudC5nZXRSb3V0ZShuYW1lKTtcbiAgICAgIGlmICghcm91dGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3V0ZSAnJHtuYW1lfScgbm90IGZvdW5kIGluIGNvbXBvbmVudCAnJHtjb21wb25lbnQubm9kZS5pZH0nYCk7XG4gICAgICB9XG4gICAgICBpZiAoIShyb3V0ZS5oYW5kbGVyIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGUgJyR7bmFtZX0nIGhhbmRsZXIgaXMgbm90IGEgRnVuY3Rpb25gKTtcbiAgICAgIH1cbiAgICAgIHJvdXRlLmhhbmRsZXIub3ZlcmxvYWQoaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQmluZCBhIGNvbXBvbmVudCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogTG9va3MgZm9yIHtQUkVGSVh9X0hPU1QgYW5kIHtQUkVGSVh9X1BPUlQgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKi9cbiAgYmluZEZyb21FbnYoY29tcG9uZW50OiBBcGlDb250YWluZXIsIGVudlByZWZpeDogc3RyaW5nLCBvdmVybG9hZHM/OiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbkhhbmRsZXI+KTogdm9pZCB7XG4gICAgY29uc3QgaG9zdCA9IHByb2Nlc3MuZW52W2Ake2VudlByZWZpeH1fSE9TVGBdO1xuICAgIGNvbnN0IHBvcnQgPSBwcm9jZXNzLmVudltgJHtlbnZQcmVmaXh9X1BPUlRgXTtcbiAgICBpZiAoaG9zdCAmJiBwb3J0KSB7XG4gICAgICB0aGlzLmJpbmQoY29tcG9uZW50LCB7IGhvc3QsIHBvcnQ6IHBhcnNlSW50KHBvcnQpLCBvdmVybG9hZHMgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RW5kcG9pbnQoY29tcG9uZW50OiBDb25zdHJ1Y3QpOiBTZXJ2aWNlRW5kcG9pbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJpbmRpbmdzLmdldChjb21wb25lbnQpO1xuICB9XG5cbiAgZ2V0QWxsQmluZGluZ3MoKTogTWFwPENvbnN0cnVjdCwgU2VydmljZUVuZHBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuYmluZGluZ3M7XG4gIH1cblxuICBzZXRMb2NhbChjb21wb25lbnQ6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxDb21wb25lbnRzLmFkZChjb21wb25lbnQpO1xuICB9XG5cbiAgaXNMb2NhbChjb21wb25lbnQ6IENvbnN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsQ29tcG9uZW50cy5oYXMoY29tcG9uZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEdsb2JhbCBiaW5kaW5nIHJlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBjb25zdCBhcmNoaXRlY3R1cmVCaW5kaW5nID0gbmV3IEFyY2hpdGVjdHVyZUJpbmRpbmcoKTtcbiJdfQ==
|
package/package.json
CHANGED
package/src/api-container.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Construct } from 'constructs';
|
|
|
2
2
|
import { Function, TBDFunction } from './function';
|
|
3
3
|
|
|
4
4
|
export interface ApiRoutes {
|
|
5
|
-
[
|
|
5
|
+
[name: string]: RouteEntry;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export interface RouteEntry {
|
|
@@ -16,7 +16,6 @@ export interface RouteEntry {
|
|
|
16
16
|
*/
|
|
17
17
|
export class ApiContainer extends Construct {
|
|
18
18
|
public readonly routes: ApiRoutes;
|
|
19
|
-
private namedRoutes: Map<string, RouteEntry> = new Map();
|
|
20
19
|
|
|
21
20
|
constructor(scope: Construct, id: string, routes: ApiRoutes = {}) {
|
|
22
21
|
super(scope, id);
|
|
@@ -24,32 +23,28 @@ export class ApiContainer extends Construct {
|
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
addRoute(name: string, path: string, handler: Function): void {
|
|
27
|
-
this.routes[
|
|
28
|
-
this.namedRoutes.set(name, { name, path, handler });
|
|
26
|
+
this.routes[name] = { name, path, handler };
|
|
29
27
|
}
|
|
30
28
|
|
|
31
|
-
getRoute(
|
|
32
|
-
|
|
29
|
+
getRoute(name: string): RouteEntry {
|
|
30
|
+
const entry = this.routes[name];
|
|
31
|
+
if (!entry) {
|
|
32
|
+
throw new Error(`Route '${name}' not found in container '${this.node.id}'`);
|
|
33
|
+
}
|
|
34
|
+
return entry;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
return this.namedRoutes.get(name);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
listRoutes(): string[] {
|
|
37
|
+
listRoutes() : string[] {
|
|
40
38
|
return Object.keys(this.routes);
|
|
41
39
|
}
|
|
42
40
|
|
|
43
|
-
listNamedRoutes(): RouteEntry[] {
|
|
44
|
-
return Array.from(this.namedRoutes.values());
|
|
45
|
-
}
|
|
46
|
-
|
|
47
41
|
/**
|
|
48
42
|
* Returns a list of TBDFunctions that have not been overloaded.
|
|
49
43
|
* Use this to validate that all required implementations are provided.
|
|
50
44
|
*/
|
|
51
45
|
validateOverloads(): Function[] {
|
|
52
46
|
return Object.values(this.routes)
|
|
47
|
+
.map(entry => entry.handler)
|
|
53
48
|
.filter(fn => fn instanceof TBDFunction && !fn.hasOverload());
|
|
54
49
|
}
|
|
55
50
|
}
|
package/src/binding.ts
CHANGED
|
@@ -38,7 +38,7 @@ export class ArchitectureBinding {
|
|
|
38
38
|
this.bindings.set(component, { host: options.host, port: options.port });
|
|
39
39
|
|
|
40
40
|
Object.entries(options.overloads ?? {}).forEach(([name, handler]) => {
|
|
41
|
-
const route = component.
|
|
41
|
+
const route = component.getRoute(name);
|
|
42
42
|
if (!route) {
|
|
43
43
|
throw new Error(`Route '${name}' not found in component '${component.node.id}'`);
|
|
44
44
|
}
|