@arinoto/cdk-arch 0.1.3 → 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 +2 -2
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arinoto/cdk-arch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "CDK Architecture primitives for event-driven solution architectures",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -30,4 +30,4 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"constructs": "^10.4.5"
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}
|
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
|
}
|