@arinoto/cdk-arch 0.6.1 → 0.7.2
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 +6 -0
- package/dist/api-container.d.ts.map +1 -1
- package/dist/api-container.js +13 -1
- package/dist/context.d.ts +4 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +13 -0
- package/dist/function.d.ts +1 -5
- package/dist/function.d.ts.map +1 -1
- package/dist/function.js +1 -5
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/package.json +5 -4
- package/src/api-container.ts +13 -0
- package/src/context.ts +13 -0
- package/src/function.ts +1 -7
- package/src/index.ts +2 -1
package/dist/api-container.d.ts
CHANGED
|
@@ -43,6 +43,12 @@ export declare class ApiContainer<TRoutes extends ApiRoutes = ApiRoutes> extends
|
|
|
43
43
|
addRoute<TArgs extends any[], TReturn>(name: string, path: string, handler: Function<TArgs, TReturn>): void;
|
|
44
44
|
getRoute<K extends keyof TRoutes & string>(name: K): TRoutes[K];
|
|
45
45
|
listRoutes(): (keyof TRoutes & string)[];
|
|
46
|
+
/**
|
|
47
|
+
* Mount all routes from another container under a path prefix.
|
|
48
|
+
* Enables serving a sub-container's API at a nested path, e.g. mounting
|
|
49
|
+
* a graph container under '/graph' so consolidators can bind via HTTP.
|
|
50
|
+
*/
|
|
51
|
+
mount(prefix: string, container: ApiContainer): void;
|
|
46
52
|
/**
|
|
47
53
|
* Returns a list of TBDFunctions that have not been overloaded.
|
|
48
54
|
* 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;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,IAAI,EAAE,MAAM,MAAM,CAAC,GACnE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,GAClC,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,SAAS,IAAI;KACpD,CAAC,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;CACvD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,SAAS;IAChF,SAAgB,MAAM,EAAE,OAAO,CAAC;gBAEpB,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,OAAuB;IAKzE,QAAQ,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAChC,IAAI;IAIP,QAAQ,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ/D,UAAU,IAAI,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE;IAIxC;;;OAGG;IACH,iBAAiB,IAAI,QAAQ,EAAE;CAKhC"}
|
|
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;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,IAAI,EAAE,MAAM,MAAM,CAAC,GACnE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,GAClC,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,SAAS,IAAI;KACpD,CAAC,IAAI,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;CACvD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,SAAS;IAChF,SAAgB,MAAM,EAAE,OAAO,CAAC;gBAEpB,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,OAAuB;IAKzE,QAAQ,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAChC,IAAI;IAIP,QAAQ,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ/D,UAAU,IAAI,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE;IAIxC;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAQpD;;;OAGG;IACH,iBAAiB,IAAI,QAAQ,EAAE;CAKhC"}
|
package/dist/api-container.js
CHANGED
|
@@ -35,6 +35,18 @@ class ApiContainer extends constructs_1.Construct {
|
|
|
35
35
|
listRoutes() {
|
|
36
36
|
return Object.keys(this.routes);
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Mount all routes from another container under a path prefix.
|
|
40
|
+
* Enables serving a sub-container's API at a nested path, e.g. mounting
|
|
41
|
+
* a graph container under '/graph' so consolidators can bind via HTTP.
|
|
42
|
+
*/
|
|
43
|
+
mount(prefix, container) {
|
|
44
|
+
container.listRoutes().forEach(name => {
|
|
45
|
+
const entry = container.getRoute(name);
|
|
46
|
+
const [method, path] = entry.path.split(' ', 2);
|
|
47
|
+
this.addRoute(`${container.node.id}/${name}`, `${method} ${prefix}${path}`, entry.handler);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
38
50
|
/**
|
|
39
51
|
* Returns a list of TBDFunctions that have not been overloaded.
|
|
40
52
|
* Use this to validate that all required implementations are provided.
|
|
@@ -46,4 +58,4 @@ class ApiContainer extends constructs_1.Construct {
|
|
|
46
58
|
}
|
|
47
59
|
}
|
|
48
60
|
exports.ApiContainer = ApiContainer;
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyx5Q0FBbUQ7QUErQm5EOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLFlBQW9ELFNBQVEsc0JBQVM7SUFHaEYsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxTQUFrQixFQUFhO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FDTixJQUFZLEVBQ1osSUFBWSxFQUNaLE9BQWlDO1FBRWhDLElBQUksQ0FBQyxNQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRLENBQW1DLElBQU87UUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSw2QkFBNkIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQStCLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsTUFBYyxFQUFFLFNBQXVCO1FBQzNDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUI7UUFDZixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM5QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzNCLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxzQkFBVyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGO0FBbERELG9DQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRnVuY3Rpb24sIFRCREZ1bmN0aW9uIH0gZnJvbSAnLi9mdW5jdGlvbic7XG5cbi8qKlxuICogQSByb3V0ZSBlbnRyeSB0aGF0IGNhcHR1cmVzIHRoZSBoYW5kbGVyJ3MgYXJndW1lbnQgYW5kIHJldHVybiB0eXBlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUVudHJ5PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybiA9IGFueT4ge1xuICBwYXRoOiBzdHJpbmc7XG4gIGhhbmRsZXI6IEZ1bmN0aW9uPFRBcmdzLCBUUmV0dXJuPjtcbn1cblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIHJvdXRlIGRlZmluaXRpb25zIC0gbWFwcyByb3V0ZSBuYW1lcyB0byByb3V0ZSBlbnRyaWVzLlxuICovXG5leHBvcnQgdHlwZSBBcGlSb3V0ZXMgPSB7XG4gIFtuYW1lOiBzdHJpbmddOiBSb3V0ZUVudHJ5O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIGhhbmRsZXIgc2lnbmF0dXJlIGZyb20gYSBGdW5jdGlvbiB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBIYW5kbGVyT2Y8VD4gPSBUIGV4dGVuZHMgRnVuY3Rpb248aW5mZXIgQXJncywgaW5mZXIgUmV0dXJuPlxuICA/ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldHVybj5cbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBFeHRyYWN0IGhhbmRsZXIgc2lnbmF0dXJlcyBmcm9tIGFsbCByb3V0ZXMgaW4gYW4gQXBpUm91dGVzIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFJvdXRlSGFuZGxlcnM8VFJvdXRlcyBleHRlbmRzIEFwaVJvdXRlcz4gPSB7XG4gIFtLIGluIGtleW9mIFRSb3V0ZXNdOiBIYW5kbGVyT2Y8VFJvdXRlc1tLXVsnaGFuZGxlciddPjtcbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBUEkgY29udGFpbmVyIHRoYXQgcm91dGVzIHJlcXVlc3RzIHRvIGZ1bmN0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRSb3V0ZXMgLSBUaGUgdHlwZSBvZiB0aGUgcm91dGVzIG9iamVjdCwgcHJlc2VydmluZyByb3V0ZSBuYW1lcyBhbmQgaGFuZGxlciBzaWduYXR1cmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhcGkgPSBuZXcgQXBpQ29udGFpbmVyKGFyY2gsICdhcGknLCB7XG4gKiAgIGhlbGxvOiB7IHBhdGg6ICdHRVQgL3YxL2FwaS9oZWxsby97bmFtZX0nLCBoYW5kbGVyOiBoZWxsb0Z1bmN0aW9uIH0sXG4gKiAgIGhlbGxvczogeyBwYXRoOiAnR0VUIC92MS9hcGkvaGVsbG9zJywgaGFuZGxlcjogaGVsbG9zRnVuY3Rpb24gfVxuICogfSk7XG4gKiAvLyBhcGkgaGFzIHR5cGUgQXBpQ29udGFpbmVyPHsgaGVsbG86IFJvdXRlRW50cnk8W3N0cmluZ10sIHN0cmluZz4sIGhlbGxvczogUm91dGVFbnRyeTxbXSwgR3JlZXRpbmdbXT4gfT5cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXBpQ29udGFpbmVyPFRSb3V0ZXMgZXh0ZW5kcyBBcGlSb3V0ZXMgPSBBcGlSb3V0ZXM+IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlczogVFJvdXRlcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCByb3V0ZXM6IFRSb3V0ZXMgPSB7fSBhcyBUUm91dGVzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnJvdXRlcyA9IHJvdXRlcztcbiAgfVxuXG4gIGFkZFJvdXRlPFRBcmdzIGV4dGVuZHMgYW55W10sIFRSZXR1cm4+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogRnVuY3Rpb248VEFyZ3MsIFRSZXR1cm4+XG4gICk6IHZvaWQge1xuICAgICh0aGlzLnJvdXRlcyBhcyBBcGlSb3V0ZXMpW25hbWVdID0geyBwYXRoLCBoYW5kbGVyIH07XG4gIH1cblxuICBnZXRSb3V0ZTxLIGV4dGVuZHMga2V5b2YgVFJvdXRlcyAmIHN0cmluZz4obmFtZTogSyk6IFRSb3V0ZXNbS10ge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5yb3V0ZXNbbmFtZV07XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3V0ZSAnJHtuYW1lfScgbm90IGZvdW5kIGluIGNvbnRhaW5lciAnJHt0aGlzLm5vZGUuaWR9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBsaXN0Um91dGVzKCk6IChrZXlvZiBUUm91dGVzICYgc3RyaW5nKVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5yb3V0ZXMpIGFzIChrZXlvZiBUUm91dGVzICYgc3RyaW5nKVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdW50IGFsbCByb3V0ZXMgZnJvbSBhbm90aGVyIGNvbnRhaW5lciB1bmRlciBhIHBhdGggcHJlZml4LlxuICAgKiBFbmFibGVzIHNlcnZpbmcgYSBzdWItY29udGFpbmVyJ3MgQVBJIGF0IGEgbmVzdGVkIHBhdGgsIGUuZy4gbW91bnRpbmdcbiAgICogYSBncmFwaCBjb250YWluZXIgdW5kZXIgJy9ncmFwaCcgc28gY29uc29saWRhdG9ycyBjYW4gYmluZCB2aWEgSFRUUC5cbiAgICovXG4gIG1vdW50KHByZWZpeDogc3RyaW5nLCBjb250YWluZXI6IEFwaUNvbnRhaW5lcik6IHZvaWQge1xuICAgIGNvbnRhaW5lci5saXN0Um91dGVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY29udGFpbmVyLmdldFJvdXRlKG5hbWUpO1xuICAgICAgY29uc3QgW21ldGhvZCwgcGF0aF0gPSBlbnRyeS5wYXRoLnNwbGl0KCcgJywgMik7XG4gICAgICB0aGlzLmFkZFJvdXRlKGAke2NvbnRhaW5lci5ub2RlLmlkfS8ke25hbWV9YCwgYCR7bWV0aG9kfSAke3ByZWZpeH0ke3BhdGh9YCwgZW50cnkuaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgVEJERnVuY3Rpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBvdmVybG9hZGVkLlxuICAgKiBVc2UgdGhpcyB0byB2YWxpZGF0ZSB0aGF0IGFsbCByZXF1aXJlZCBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgdmFsaWRhdGVPdmVybG9hZHMoKTogRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5yb3V0ZXMpXG4gICAgICAubWFwKGVudHJ5ID0+IGVudHJ5LmhhbmRsZXIpXG4gICAgICAuZmlsdGVyKGZuID0+IGZuIGluc3RhbmNlb2YgVEJERnVuY3Rpb24gJiYgIWZuLmhhc092ZXJsb2FkKCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAIrD,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvF"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCurrentContext = getCurrentContext;
|
|
4
|
+
exports.runWithContext = runWithContext;
|
|
5
|
+
const async_hooks_1 = require("async_hooks");
|
|
6
|
+
const als = new async_hooks_1.AsyncLocalStorage();
|
|
7
|
+
function getCurrentContext() {
|
|
8
|
+
return als.getStore();
|
|
9
|
+
}
|
|
10
|
+
function runWithContext(ctx, fn) {
|
|
11
|
+
return als.run(ctx, fn);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsOENBRUM7QUFFRCx3Q0FFQztBQVpELDZDQUFnRDtBQUloRCxNQUFNLEdBQUcsR0FBRyxJQUFJLCtCQUFpQixFQUFrQixDQUFDO0FBRXBELFNBQWdCLGlCQUFpQjtJQUMvQixPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFJLEdBQW1CLEVBQUUsRUFBb0I7SUFDekUsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdhc3luY19ob29rcyc7XG5cbmV4cG9ydCB0eXBlIFJ1bnRpbWVDb250ZXh0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmNvbnN0IGFscyA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxSdW50aW1lQ29udGV4dD4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0KCk6IFJ1bnRpbWVDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGFscy5nZXRTdG9yZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuV2l0aENvbnRleHQ8VD4oY3R4OiBSdW50aW1lQ29udGV4dCwgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIGFscy5ydW4oY3R4LCBmbik7XG59XG4iXX0=
|
package/dist/function.d.ts
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { Construct } from 'constructs';
|
|
2
2
|
export type FunctionHandler<TArgs extends any[] = any[], TReturn = any> = (...args: TArgs) => Promise<TReturn>;
|
|
3
|
-
export type FunctionRuntimeContextMarker = {
|
|
4
|
-
runtimeContext?: boolean;
|
|
5
|
-
};
|
|
6
3
|
/**
|
|
7
4
|
* Represents a serverless function or handler in the architecture.
|
|
8
5
|
* Generic over argument types (TArgs) and return type (TReturn).
|
|
9
6
|
*/
|
|
10
|
-
export declare class Function<TArgs extends any[] = any[], TReturn = any
|
|
7
|
+
export declare class Function<TArgs extends any[] = any[], TReturn = any> extends Construct {
|
|
11
8
|
readonly handler: FunctionHandler<TArgs, TReturn>;
|
|
12
9
|
private _overload?;
|
|
13
10
|
constructor(scope: Construct, id: string, handler: FunctionHandler<TArgs, TReturn>);
|
|
@@ -18,7 +15,6 @@ export declare class Function<TArgs extends any[] = any[], TReturn = any, TRunti
|
|
|
18
15
|
overload(handler: FunctionHandler<TArgs, TReturn>): void;
|
|
19
16
|
hasOverload(): boolean;
|
|
20
17
|
invoke(...args: TArgs): Promise<TReturn>;
|
|
21
|
-
invokeWithRuntimeContext(args: TArgs, ctx: TRuntimeContext): Promise<TReturn>;
|
|
22
18
|
}
|
|
23
19
|
/**
|
|
24
20
|
* A placeholder function that must be overloaded before use.
|
package/dist/function.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../src/function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/G
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../src/function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/G;;;GAGG;AACH,qBAAa,QAAQ,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG,CAAE,SAAQ,SAAS;IACjF,SAAgB,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,OAAO,CAAC,SAAS,CAAC,CAAkC;gBAExC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;IAKlF;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI;IAIxD,WAAW,IAAI,OAAO;IAIf,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;CAKhD;AAED;;;GAGG;AACH,qBAAa,WAAW,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG,CAAE,SAAQ,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBACvF,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM;CAGzC"}
|
package/dist/function.js
CHANGED
|
@@ -25,10 +25,6 @@ class Function extends constructs_1.Construct {
|
|
|
25
25
|
const fn = this._overload ?? this.handler;
|
|
26
26
|
return fn(...args);
|
|
27
27
|
}
|
|
28
|
-
invokeWithRuntimeContext(args, ctx) {
|
|
29
|
-
const fn = this._overload ?? this.handler;
|
|
30
|
-
return fn.apply({ runtimeContext: true, ...ctx }, args);
|
|
31
|
-
}
|
|
32
28
|
}
|
|
33
29
|
exports.Function = Function;
|
|
34
30
|
/**
|
|
@@ -41,4 +37,4 @@ class TBDFunction extends Function {
|
|
|
41
37
|
}
|
|
42
38
|
}
|
|
43
39
|
exports.TBDFunction = TBDFunction;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBSXZDOzs7R0FHRztBQUNILE1BQWEsUUFBcUQsU0FBUSxzQkFBUztJQUlqRixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE9BQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxPQUF3QztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFHLElBQVc7UUFDMUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQztDQUVGO0FBMUJELDRCQTBCQztBQUVEOzs7R0FHRztBQUNILE1BQWEsV0FBd0QsU0FBUSxRQUF3QjtJQUNuRyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLDREQUE0RCxDQUFDLENBQUMsQ0FBb0MsQ0FBQyxDQUFDO0lBQ3RLLENBQUM7Q0FDRjtBQUpELGtDQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uSGFuZGxlcjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFRSZXR1cm4gPSBhbnk+ID0gKC4uLmFyZ3M6IFRBcmdzKSA9PiBQcm9taXNlPFRSZXR1cm4+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzZXJ2ZXJsZXNzIGZ1bmN0aW9uIG9yIGhhbmRsZXIgaW4gdGhlIGFyY2hpdGVjdHVyZS5cbiAqIEdlbmVyaWMgb3ZlciBhcmd1bWVudCB0eXBlcyAoVEFyZ3MpIGFuZCByZXR1cm4gdHlwZSAoVFJldHVybikuXG4gKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFRSZXR1cm4gPSBhbnk+IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGhhbmRsZXI6IEZ1bmN0aW9uSGFuZGxlcjxUQXJncywgVFJldHVybj47XG4gIHByaXZhdGUgX292ZXJsb2FkPzogRnVuY3Rpb25IYW5kbGVyPFRBcmdzLCBUUmV0dXJuPjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBoYW5kbGVyOiBGdW5jdGlvbkhhbmRsZXI8VEFyZ3MsIFRSZXR1cm4+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIGF0IHJ1bnRpbWUuXG4gICAqIFVzZWQgZm9yIHJlcGxhY2luZyBpbi1tZW1vcnkgaW1wbGVtZW50YXRpb25zIHdpdGggc3RvcmFnZSBhZGFwdGVycyBvciBIVFRQIGNhbGxzLlxuICAgKi9cbiAgb3ZlcmxvYWQoaGFuZGxlcjogRnVuY3Rpb25IYW5kbGVyPFRBcmdzLCBUUmV0dXJuPik6IHZvaWQge1xuICAgIHRoaXMuX292ZXJsb2FkID0gaGFuZGxlcjtcbiAgfVxuXG4gIGhhc092ZXJsb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vdmVybG9hZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGludm9rZSguLi5hcmdzOiBUQXJncyk6IFByb21pc2U8VFJldHVybj4ge1xuICAgIGNvbnN0IGZuID0gdGhpcy5fb3ZlcmxvYWQgPz8gdGhpcy5oYW5kbGVyO1xuICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgfVxuXG59XG5cbi8qKlxuICogQSBwbGFjZWhvbGRlciBmdW5jdGlvbiB0aGF0IG11c3QgYmUgb3ZlcmxvYWRlZCBiZWZvcmUgdXNlLlxuICogVXNlIHRoaXMgd2hlbiBkZWZpbmluZyBhbiBBUEkgY29udHJhY3Qgd2l0aG91dCBwcm92aWRpbmcgYW4gaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBUQkRGdW5jdGlvbjxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10sIFRSZXR1cm4gPSBhbnk+IGV4dGVuZHMgRnVuY3Rpb248VEFyZ3MsIFRSZXR1cm4+IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgKCgpID0+IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgRnVuY3Rpb24gJyR7aWR9JyBpcyBub3QgaW1wbGVtZW50ZWQuIFByb3ZpZGUgYW4gb3ZlcmxvYWQgYmVmb3JlIGludm9raW5nLmApKSkgYXMgRnVuY3Rpb25IYW5kbGVyPFRBcmdzLCBUUmV0dXJuPik7XG4gIH1cbn1cbiJdfQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { Construct } from 'constructs';
|
|
2
2
|
export { Architecture, ArchitectureDefinition, ComponentDefinition } from './architecture';
|
|
3
|
-
export { Function, TBDFunction, FunctionHandler
|
|
3
|
+
export { Function, TBDFunction, FunctionHandler } from './function';
|
|
4
4
|
export { ApiContainer, ApiRoutes, RouteEntry, HandlerOf, RouteHandlers } from './api-container';
|
|
5
5
|
export { ArchitectureBinding, ServiceEndpoint, architectureBinding } from './binding';
|
|
6
6
|
export { httpHandler, createHttpBindings, Fetcher } from './http-handler';
|
|
7
|
+
export { RuntimeContext, getCurrentContext, runWithContext } from './context';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createHttpBindings = exports.httpHandler = exports.architectureBinding = exports.ArchitectureBinding = exports.ApiContainer = exports.TBDFunction = exports.Function = exports.Architecture = exports.Construct = void 0;
|
|
3
|
+
exports.runWithContext = exports.getCurrentContext = exports.createHttpBindings = exports.httpHandler = exports.architectureBinding = exports.ArchitectureBinding = exports.ApiContainer = exports.TBDFunction = exports.Function = exports.Architecture = exports.Construct = void 0;
|
|
4
4
|
var constructs_1 = require("constructs");
|
|
5
5
|
Object.defineProperty(exports, "Construct", { enumerable: true, get: function () { return constructs_1.Construct; } });
|
|
6
6
|
var architecture_1 = require("./architecture");
|
|
@@ -16,4 +16,7 @@ Object.defineProperty(exports, "architectureBinding", { enumerable: true, get: f
|
|
|
16
16
|
var http_handler_1 = require("./http-handler");
|
|
17
17
|
Object.defineProperty(exports, "httpHandler", { enumerable: true, get: function () { return http_handler_1.httpHandler; } });
|
|
18
18
|
Object.defineProperty(exports, "createHttpBindings", { enumerable: true, get: function () { return http_handler_1.createHttpBindings; } });
|
|
19
|
-
|
|
19
|
+
var context_1 = require("./context");
|
|
20
|
+
Object.defineProperty(exports, "getCurrentContext", { enumerable: true, get: function () { return context_1.getCurrentContext; } });
|
|
21
|
+
Object.defineProperty(exports, "runWithContext", { enumerable: true, get: function () { return context_1.runWithContext; } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXVDO0FBQTlCLHVHQUFBLFNBQVMsT0FBQTtBQUNsQiwrQ0FBMkY7QUFBbEYsNEdBQUEsWUFBWSxPQUFBO0FBQ3JCLHVDQUFvRTtBQUEzRCxvR0FBQSxRQUFRLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFDOUIsaURBQWdHO0FBQXZGLDZHQUFBLFlBQVksT0FBQTtBQUNyQixxQ0FBc0Y7QUFBN0UsOEdBQUEsbUJBQW1CLE9BQUE7QUFBbUIsOEdBQUEsbUJBQW1CLE9BQUE7QUFDbEUsK0NBQTBFO0FBQWpFLDJHQUFBLFdBQVcsT0FBQTtBQUFFLGtIQUFBLGtCQUFrQixPQUFBO0FBQ3hDLHFDQUE4RTtBQUFyRCw0R0FBQSxpQkFBaUIsT0FBQTtBQUFFLHlHQUFBLGNBQWMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuZXhwb3J0IHsgQXJjaGl0ZWN0dXJlLCBBcmNoaXRlY3R1cmVEZWZpbml0aW9uLCBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi9hcmNoaXRlY3R1cmUnO1xuZXhwb3J0IHsgRnVuY3Rpb24sIFRCREZ1bmN0aW9uLCBGdW5jdGlvbkhhbmRsZXIgfSBmcm9tICcuL2Z1bmN0aW9uJztcbmV4cG9ydCB7IEFwaUNvbnRhaW5lciwgQXBpUm91dGVzLCBSb3V0ZUVudHJ5LCBIYW5kbGVyT2YsIFJvdXRlSGFuZGxlcnMgfSBmcm9tICcuL2FwaS1jb250YWluZXInO1xuZXhwb3J0IHsgQXJjaGl0ZWN0dXJlQmluZGluZywgU2VydmljZUVuZHBvaW50LCBhcmNoaXRlY3R1cmVCaW5kaW5nIH0gZnJvbSAnLi9iaW5kaW5nJztcbmV4cG9ydCB7IGh0dHBIYW5kbGVyLCBjcmVhdGVIdHRwQmluZGluZ3MsIEZldGNoZXIgfSBmcm9tICcuL2h0dHAtaGFuZGxlcic7XG5leHBvcnQgeyBSdW50aW1lQ29udGV4dCwgZ2V0Q3VycmVudENvbnRleHQsIHJ1bldpdGhDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arinoto/cdk-arch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "CDK Architecture primitives for event-driven solution architectures",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
"main": "dist/index.js",
|
|
11
11
|
"types": "dist/index.d.ts",
|
|
12
12
|
"module": "dist/index.js",
|
|
13
|
-
"private": false,
|
|
14
13
|
"publishConfig": {
|
|
15
14
|
"access": "public"
|
|
16
15
|
},
|
|
@@ -21,7 +20,8 @@
|
|
|
21
20
|
"scripts": {
|
|
22
21
|
"build": "tsc",
|
|
23
22
|
"clean": "rm -rf dist",
|
|
24
|
-
"prepublish": "cp ../../IDEA.md ./README.md"
|
|
23
|
+
"prepublish": "cp ../../IDEA.md ./README.md",
|
|
24
|
+
"test": "vitest run"
|
|
25
25
|
},
|
|
26
26
|
"keywords": [
|
|
27
27
|
"cdk",
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^20.0.0",
|
|
34
|
-
"typescript": "^5.0.0"
|
|
34
|
+
"typescript": "^5.0.0",
|
|
35
|
+
"vitest": "^1.6.1"
|
|
35
36
|
},
|
|
36
37
|
"dependencies": {
|
|
37
38
|
"constructs": "^10.4.5"
|
package/src/api-container.ts
CHANGED
|
@@ -72,6 +72,19 @@ export class ApiContainer<TRoutes extends ApiRoutes = ApiRoutes> extends Constru
|
|
|
72
72
|
return Object.keys(this.routes) as (keyof TRoutes & string)[];
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Mount all routes from another container under a path prefix.
|
|
77
|
+
* Enables serving a sub-container's API at a nested path, e.g. mounting
|
|
78
|
+
* a graph container under '/graph' so consolidators can bind via HTTP.
|
|
79
|
+
*/
|
|
80
|
+
mount(prefix: string, container: ApiContainer): void {
|
|
81
|
+
container.listRoutes().forEach(name => {
|
|
82
|
+
const entry = container.getRoute(name);
|
|
83
|
+
const [method, path] = entry.path.split(' ', 2);
|
|
84
|
+
this.addRoute(`${container.node.id}/${name}`, `${method} ${prefix}${path}`, entry.handler);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
75
88
|
/**
|
|
76
89
|
* Returns a list of TBDFunctions that have not been overloaded.
|
|
77
90
|
* Use this to validate that all required implementations are provided.
|
package/src/context.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
2
|
+
|
|
3
|
+
export type RuntimeContext = Record<string, unknown>;
|
|
4
|
+
|
|
5
|
+
const als = new AsyncLocalStorage<RuntimeContext>();
|
|
6
|
+
|
|
7
|
+
export function getCurrentContext(): RuntimeContext | undefined {
|
|
8
|
+
return als.getStore();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function runWithContext<T>(ctx: RuntimeContext, fn: () => Promise<T>): Promise<T> {
|
|
12
|
+
return als.run(ctx, fn);
|
|
13
|
+
}
|
package/src/function.ts
CHANGED
|
@@ -2,13 +2,11 @@ import { Construct } from 'constructs';
|
|
|
2
2
|
|
|
3
3
|
export type FunctionHandler<TArgs extends any[] = any[], TReturn = any> = (...args: TArgs) => Promise<TReturn>;
|
|
4
4
|
|
|
5
|
-
export type FunctionRuntimeContextMarker = { runtimeContext?: boolean};
|
|
6
|
-
|
|
7
5
|
/**
|
|
8
6
|
* Represents a serverless function or handler in the architecture.
|
|
9
7
|
* Generic over argument types (TArgs) and return type (TReturn).
|
|
10
8
|
*/
|
|
11
|
-
export class Function<TArgs extends any[] = any[], TReturn = any
|
|
9
|
+
export class Function<TArgs extends any[] = any[], TReturn = any> extends Construct {
|
|
12
10
|
public readonly handler: FunctionHandler<TArgs, TReturn>;
|
|
13
11
|
private _overload?: FunctionHandler<TArgs, TReturn>;
|
|
14
12
|
|
|
@@ -34,10 +32,6 @@ export class Function<TArgs extends any[] = any[], TReturn = any, TRuntimeContex
|
|
|
34
32
|
return fn(...args);
|
|
35
33
|
}
|
|
36
34
|
|
|
37
|
-
public invokeWithRuntimeContext(args: TArgs, ctx: TRuntimeContext): Promise<TReturn> {
|
|
38
|
-
const fn = this._overload ?? this.handler;
|
|
39
|
-
return fn.apply({ runtimeContext: true, ...ctx }, args);
|
|
40
|
-
}
|
|
41
35
|
}
|
|
42
36
|
|
|
43
37
|
/**
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { Construct } from 'constructs';
|
|
2
2
|
export { Architecture, ArchitectureDefinition, ComponentDefinition } from './architecture';
|
|
3
|
-
export { Function, TBDFunction, FunctionHandler
|
|
3
|
+
export { Function, TBDFunction, FunctionHandler } from './function';
|
|
4
4
|
export { ApiContainer, ApiRoutes, RouteEntry, HandlerOf, RouteHandlers } from './api-container';
|
|
5
5
|
export { ArchitectureBinding, ServiceEndpoint, architectureBinding } from './binding';
|
|
6
6
|
export { httpHandler, createHttpBindings, Fetcher } from './http-handler';
|
|
7
|
+
export { RuntimeContext, getCurrentContext, runWithContext } from './context';
|