@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.
@@ -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"}
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyx5Q0FBbUQ7QUErQm5EOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLFlBQW9ELFNBQVEsc0JBQVM7SUFHaEYsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxTQUFrQixFQUFhO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FDTixJQUFZLEVBQ1osSUFBWSxFQUNaLE9BQWlDO1FBRWhDLElBQUksQ0FBQyxNQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRLENBQW1DLElBQU87UUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSw2QkFBNkIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQStCLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQjtRQUNmLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDM0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLHNCQUFXLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0Y7QUFyQ0Qsb0NBcUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBGdW5jdGlvbiwgVEJERnVuY3Rpb24gfSBmcm9tICcuL2Z1bmN0aW9uJztcblxuLyoqXG4gKiBBIHJvdXRlIGVudHJ5IHRoYXQgY2FwdHVyZXMgdGhlIGhhbmRsZXIncyBhcmd1bWVudCBhbmQgcmV0dXJuIHR5cGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlRW50cnk8VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBUUmV0dXJuID0gYW55PiB7XG4gIHBhdGg6IHN0cmluZztcbiAgaGFuZGxlcjogRnVuY3Rpb248VEFyZ3MsIFRSZXR1cm4+O1xufVxuXG4vKipcbiAqIEJhc2UgdHlwZSBmb3Igcm91dGUgZGVmaW5pdGlvbnMgLSBtYXBzIHJvdXRlIG5hbWVzIHRvIHJvdXRlIGVudHJpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIEFwaVJvdXRlcyA9IHtcbiAgW25hbWU6IHN0cmluZ106IFJvdXRlRW50cnk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgaGFuZGxlciBzaWduYXR1cmUgZnJvbSBhIEZ1bmN0aW9uIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIEhhbmRsZXJPZjxUPiA9IFQgZXh0ZW5kcyBGdW5jdGlvbjxpbmZlciBBcmdzLCBpbmZlciBSZXR1cm4+XG4gID8gKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8UmV0dXJuPlxuICA6IG5ldmVyO1xuXG4vKipcbiAqIEV4dHJhY3QgaGFuZGxlciBzaWduYXR1cmVzIGZyb20gYWxsIHJvdXRlcyBpbiBhbiBBcGlSb3V0ZXMgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgUm91dGVIYW5kbGVyczxUUm91dGVzIGV4dGVuZHMgQXBpUm91dGVzPiA9IHtcbiAgW0sgaW4ga2V5b2YgVFJvdXRlc106IEhhbmRsZXJPZjxUUm91dGVzW0tdWydoYW5kbGVyJ10+O1xufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEFQSSBjb250YWluZXIgdGhhdCByb3V0ZXMgcmVxdWVzdHMgdG8gZnVuY3Rpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVFJvdXRlcyAtIFRoZSB0eXBlIG9mIHRoZSByb3V0ZXMgb2JqZWN0LCBwcmVzZXJ2aW5nIHJvdXRlIG5hbWVzIGFuZCBoYW5kbGVyIHNpZ25hdHVyZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFwaSA9IG5ldyBBcGlDb250YWluZXIoYXJjaCwgJ2FwaScsIHtcbiAqICAgaGVsbG86IHsgcGF0aDogJ0dFVCAvdjEvYXBpL2hlbGxvL3tuYW1lfScsIGhhbmRsZXI6IGhlbGxvRnVuY3Rpb24gfSxcbiAqICAgaGVsbG9zOiB7IHBhdGg6ICdHRVQgL3YxL2FwaS9oZWxsb3MnLCBoYW5kbGVyOiBoZWxsb3NGdW5jdGlvbiB9XG4gKiB9KTtcbiAqIC8vIGFwaSBoYXMgdHlwZSBBcGlDb250YWluZXI8eyBoZWxsbzogUm91dGVFbnRyeTxbc3RyaW5nXSwgc3RyaW5nPiwgaGVsbG9zOiBSb3V0ZUVudHJ5PFtdLCBHcmVldGluZ1tdPiB9PlxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlDb250YWluZXI8VFJvdXRlcyBleHRlbmRzIEFwaVJvdXRlcyA9IEFwaVJvdXRlcz4gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVzOiBUUm91dGVzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHJvdXRlczogVFJvdXRlcyA9IHt9IGFzIFRSb3V0ZXMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucm91dGVzID0gcm91dGVzO1xuICB9XG5cbiAgYWRkUm91dGU8VEFyZ3MgZXh0ZW5kcyBhbnlbXSwgVFJldHVybj4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBoYW5kbGVyOiBGdW5jdGlvbjxUQXJncywgVFJldHVybj5cbiAgKTogdm9pZCB7XG4gICAgKHRoaXMucm91dGVzIGFzIEFwaVJvdXRlcylbbmFtZV0gPSB7IHBhdGgsIGhhbmRsZXIgfTtcbiAgfVxuXG4gIGdldFJvdXRlPEsgZXh0ZW5kcyBrZXlvZiBUUm91dGVzICYgc3RyaW5nPihuYW1lOiBLKTogVFJvdXRlc1tLXSB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLnJvdXRlc1tuYW1lXTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdXRlICcke25hbWV9JyBub3QgZm91bmQgaW4gY29udGFpbmVyICcke3RoaXMubm9kZS5pZH0nYCk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGxpc3RSb3V0ZXMoKTogKGtleW9mIFRSb3V0ZXMgJiBzdHJpbmcpW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnJvdXRlcykgYXMgKGtleW9mIFRSb3V0ZXMgJiBzdHJpbmcpW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgVEJERnVuY3Rpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBvdmVybG9hZGVkLlxuICAgKiBVc2UgdGhpcyB0byB2YWxpZGF0ZSB0aGF0IGFsbCByZXF1aXJlZCBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgdmFsaWRhdGVPdmVybG9hZHMoKTogRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5yb3V0ZXMpXG4gICAgICAubWFwKGVudHJ5ID0+IGVudHJ5LmhhbmRsZXIpXG4gICAgICAuZmlsdGVyKGZuID0+IGZuIGluc3RhbmNlb2YgVEJERnVuY3Rpb24gJiYgIWZuLmhhc092ZXJsb2FkKCkpO1xuICB9XG59XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyx5Q0FBbUQ7QUErQm5EOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLFlBQW9ELFNBQVEsc0JBQVM7SUFHaEYsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxTQUFrQixFQUFhO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FDTixJQUFZLEVBQ1osSUFBWSxFQUNaLE9BQWlDO1FBRWhDLElBQUksQ0FBQyxNQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRLENBQW1DLElBQU87UUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSw2QkFBNkIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQStCLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsTUFBYyxFQUFFLFNBQXVCO1FBQzNDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUI7UUFDZixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM5QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzNCLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxzQkFBVyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGO0FBbERELG9DQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRnVuY3Rpb24sIFRCREZ1bmN0aW9uIH0gZnJvbSAnLi9mdW5jdGlvbic7XG5cbi8qKlxuICogQSByb3V0ZSBlbnRyeSB0aGF0IGNhcHR1cmVzIHRoZSBoYW5kbGVyJ3MgYXJndW1lbnQgYW5kIHJldHVybiB0eXBlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUVudHJ5PFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybiA9IGFueT4ge1xuICBwYXRoOiBzdHJpbmc7XG4gIGhhbmRsZXI6IEZ1bmN0aW9uPFRBcmdzLCBUUmV0dXJuPjtcbn1cblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIHJvdXRlIGRlZmluaXRpb25zIC0gbWFwcyByb3V0ZSBuYW1lcyB0byByb3V0ZSBlbnRyaWVzLlxuICovXG5leHBvcnQgdHlwZSBBcGlSb3V0ZXMgPSB7XG4gIFtuYW1lOiBzdHJpbmddOiBSb3V0ZUVudHJ5O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIGhhbmRsZXIgc2lnbmF0dXJlIGZyb20gYSBGdW5jdGlvbiB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBIYW5kbGVyT2Y8VD4gPSBUIGV4dGVuZHMgRnVuY3Rpb248aW5mZXIgQXJncywgaW5mZXIgUmV0dXJuPlxuICA/ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldHVybj5cbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBFeHRyYWN0IGhhbmRsZXIgc2lnbmF0dXJlcyBmcm9tIGFsbCByb3V0ZXMgaW4gYW4gQXBpUm91dGVzIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFJvdXRlSGFuZGxlcnM8VFJvdXRlcyBleHRlbmRzIEFwaVJvdXRlcz4gPSB7XG4gIFtLIGluIGtleW9mIFRSb3V0ZXNdOiBIYW5kbGVyT2Y8VFJvdXRlc1tLXVsnaGFuZGxlciddPjtcbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBUEkgY29udGFpbmVyIHRoYXQgcm91dGVzIHJlcXVlc3RzIHRvIGZ1bmN0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRSb3V0ZXMgLSBUaGUgdHlwZSBvZiB0aGUgcm91dGVzIG9iamVjdCwgcHJlc2VydmluZyByb3V0ZSBuYW1lcyBhbmQgaGFuZGxlciBzaWduYXR1cmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhcGkgPSBuZXcgQXBpQ29udGFpbmVyKGFyY2gsICdhcGknLCB7XG4gKiAgIGhlbGxvOiB7IHBhdGg6ICdHRVQgL3YxL2FwaS9oZWxsby97bmFtZX0nLCBoYW5kbGVyOiBoZWxsb0Z1bmN0aW9uIH0sXG4gKiAgIGhlbGxvczogeyBwYXRoOiAnR0VUIC92MS9hcGkvaGVsbG9zJywgaGFuZGxlcjogaGVsbG9zRnVuY3Rpb24gfVxuICogfSk7XG4gKiAvLyBhcGkgaGFzIHR5cGUgQXBpQ29udGFpbmVyPHsgaGVsbG86IFJvdXRlRW50cnk8W3N0cmluZ10sIHN0cmluZz4sIGhlbGxvczogUm91dGVFbnRyeTxbXSwgR3JlZXRpbmdbXT4gfT5cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXBpQ29udGFpbmVyPFRSb3V0ZXMgZXh0ZW5kcyBBcGlSb3V0ZXMgPSBBcGlSb3V0ZXM+IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlczogVFJvdXRlcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCByb3V0ZXM6IFRSb3V0ZXMgPSB7fSBhcyBUUm91dGVzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnJvdXRlcyA9IHJvdXRlcztcbiAgfVxuXG4gIGFkZFJvdXRlPFRBcmdzIGV4dGVuZHMgYW55W10sIFRSZXR1cm4+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogRnVuY3Rpb248VEFyZ3MsIFRSZXR1cm4+XG4gICk6IHZvaWQge1xuICAgICh0aGlzLnJvdXRlcyBhcyBBcGlSb3V0ZXMpW25hbWVdID0geyBwYXRoLCBoYW5kbGVyIH07XG4gIH1cblxuICBnZXRSb3V0ZTxLIGV4dGVuZHMga2V5b2YgVFJvdXRlcyAmIHN0cmluZz4obmFtZTogSyk6IFRSb3V0ZXNbS10ge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5yb3V0ZXNbbmFtZV07XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3V0ZSAnJHtuYW1lfScgbm90IGZvdW5kIGluIGNvbnRhaW5lciAnJHt0aGlzLm5vZGUuaWR9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBsaXN0Um91dGVzKCk6IChrZXlvZiBUUm91dGVzICYgc3RyaW5nKVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5yb3V0ZXMpIGFzIChrZXlvZiBUUm91dGVzICYgc3RyaW5nKVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdW50IGFsbCByb3V0ZXMgZnJvbSBhbm90aGVyIGNvbnRhaW5lciB1bmRlciBhIHBhdGggcHJlZml4LlxuICAgKiBFbmFibGVzIHNlcnZpbmcgYSBzdWItY29udGFpbmVyJ3MgQVBJIGF0IGEgbmVzdGVkIHBhdGgsIGUuZy4gbW91bnRpbmdcbiAgICogYSBncmFwaCBjb250YWluZXIgdW5kZXIgJy9ncmFwaCcgc28gY29uc29saWRhdG9ycyBjYW4gYmluZCB2aWEgSFRUUC5cbiAgICovXG4gIG1vdW50KHByZWZpeDogc3RyaW5nLCBjb250YWluZXI6IEFwaUNvbnRhaW5lcik6IHZvaWQge1xuICAgIGNvbnRhaW5lci5saXN0Um91dGVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY29udGFpbmVyLmdldFJvdXRlKG5hbWUpO1xuICAgICAgY29uc3QgW21ldGhvZCwgcGF0aF0gPSBlbnRyeS5wYXRoLnNwbGl0KCcgJywgMik7XG4gICAgICB0aGlzLmFkZFJvdXRlKGAke2NvbnRhaW5lci5ub2RlLmlkfS8ke25hbWV9YCwgYCR7bWV0aG9kfSAke3ByZWZpeH0ke3BhdGh9YCwgZW50cnkuaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgVEJERnVuY3Rpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBvdmVybG9hZGVkLlxuICAgKiBVc2UgdGhpcyB0byB2YWxpZGF0ZSB0aGF0IGFsbCByZXF1aXJlZCBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgdmFsaWRhdGVPdmVybG9hZHMoKTogRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5yb3V0ZXMpXG4gICAgICAubWFwKGVudHJ5ID0+IGVudHJ5LmhhbmRsZXIpXG4gICAgICAuZmlsdGVyKGZuID0+IGZuIGluc3RhbmNlb2YgVEJERnVuY3Rpb24gJiYgIWZuLmhhc092ZXJsb2FkKCkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export type RuntimeContext = Record<string, unknown>;
2
+ export declare function getCurrentContext(): RuntimeContext | undefined;
3
+ export declare function runWithContext<T>(ctx: RuntimeContext, fn: () => Promise<T>): Promise<T>;
4
+ //# sourceMappingURL=context.d.ts.map
@@ -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"}
@@ -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=
@@ -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, TRuntimeContext extends FunctionRuntimeContextMarker = any> extends Construct {
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.
@@ -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,MAAM,MAAM,4BAA4B,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC;AAEvE;;;GAGG;AACH,qBAAa,QAAQ,CAAC,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG,EAAE,eAAe,SAAS,4BAA4B,GAAG,GAAG,CAAE,SAAQ,SAAS;IAC7I,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;IAKxC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;CAIrF;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"}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBTXZDOzs7R0FHRztBQUNILE1BQWEsUUFBaUgsU0FBUSxzQkFBUztJQUk3SSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE9BQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxPQUF3QztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFHLElBQVc7UUFDMUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVNLHdCQUF3QixDQUFDLElBQVcsRUFBRSxHQUFvQjtRQUMvRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRjtBQTlCRCw0QkE4QkM7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFdBQXdELFNBQVEsUUFBd0I7SUFDbkcsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSw0REFBNEQsQ0FBQyxDQUFDLENBQW9DLENBQUMsQ0FBQztJQUN0SyxDQUFDO0NBQ0Y7QUFKRCxrQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkhhbmRsZXI8VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBUUmV0dXJuID0gYW55PiA9ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPjtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25SdW50aW1lQ29udGV4dE1hcmtlciA9IHsgcnVudGltZUNvbnRleHQ/OiBib29sZWFufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2VydmVybGVzcyBmdW5jdGlvbiBvciBoYW5kbGVyIGluIHRoZSBhcmNoaXRlY3R1cmUuXG4gKiBHZW5lcmljIG92ZXIgYXJndW1lbnQgdHlwZXMgKFRBcmdzKSBhbmQgcmV0dXJuIHR5cGUgKFRSZXR1cm4pLlxuICovXG5leHBvcnQgY2xhc3MgRnVuY3Rpb248VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLCBUUmV0dXJuID0gYW55LCBUUnVudGltZUNvbnRleHQgZXh0ZW5kcyBGdW5jdGlvblJ1bnRpbWVDb250ZXh0TWFya2VyID0gYW55PiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBoYW5kbGVyOiBGdW5jdGlvbkhhbmRsZXI8VEFyZ3MsIFRSZXR1cm4+O1xuICBwcml2YXRlIF9vdmVybG9hZD86IEZ1bmN0aW9uSGFuZGxlcjxUQXJncywgVFJldHVybj47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgaGFuZGxlcjogRnVuY3Rpb25IYW5kbGVyPFRBcmdzLCBUUmV0dXJuPikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiBhdCBydW50aW1lLlxuICAgKiBVc2VkIGZvciByZXBsYWNpbmcgaW4tbWVtb3J5IGltcGxlbWVudGF0aW9ucyB3aXRoIHN0b3JhZ2UgYWRhcHRlcnMgb3IgSFRUUCBjYWxscy5cbiAgICovXG4gIG92ZXJsb2FkKGhhbmRsZXI6IEZ1bmN0aW9uSGFuZGxlcjxUQXJncywgVFJldHVybj4pOiB2b2lkIHtcbiAgICB0aGlzLl9vdmVybG9hZCA9IGhhbmRsZXI7XG4gIH1cblxuICBoYXNPdmVybG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxvYWQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBpbnZva2UoLi4uYXJnczogVEFyZ3MpOiBQcm9taXNlPFRSZXR1cm4+IHtcbiAgICBjb25zdCBmbiA9IHRoaXMuX292ZXJsb2FkID8/IHRoaXMuaGFuZGxlcjtcbiAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gIH1cblxuICBwdWJsaWMgaW52b2tlV2l0aFJ1bnRpbWVDb250ZXh0KGFyZ3M6IFRBcmdzLCBjdHg6IFRSdW50aW1lQ29udGV4dCk6IFByb21pc2U8VFJldHVybj4ge1xuICAgIGNvbnN0IGZuID0gdGhpcy5fb3ZlcmxvYWQgPz8gdGhpcy5oYW5kbGVyO1xuICAgIHJldHVybiBmbi5hcHBseSh7IHJ1bnRpbWVDb250ZXh0OiB0cnVlLCAuLi5jdHggfSwgYXJncyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHBsYWNlaG9sZGVyIGZ1bmN0aW9uIHRoYXQgbXVzdCBiZSBvdmVybG9hZGVkIGJlZm9yZSB1c2UuXG4gKiBVc2UgdGhpcyB3aGVuIGRlZmluaW5nIGFuIEFQSSBjb250cmFjdCB3aXRob3V0IHByb3ZpZGluZyBhbiBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRCREZ1bmN0aW9uPFRBcmdzIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgVFJldHVybiA9IGFueT4gZXh0ZW5kcyBGdW5jdGlvbjxUQXJncywgVFJldHVybj4ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCAoKCkgPT4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBGdW5jdGlvbiAnJHtpZH0nIGlzIG5vdCBpbXBsZW1lbnRlZC4gUHJvdmlkZSBhbiBvdmVybG9hZCBiZWZvcmUgaW52b2tpbmcuYCkpKSBhcyBGdW5jdGlvbkhhbmRsZXI8VEFyZ3MsIFRSZXR1cm4+KTtcbiAgfVxufVxuIl19
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, FunctionRuntimeContextMarker } from './function';
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
@@ -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,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAClG,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"}
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXVDO0FBQTlCLHVHQUFBLFNBQVMsT0FBQTtBQUNsQiwrQ0FBMkY7QUFBbEYsNEdBQUEsWUFBWSxPQUFBO0FBQ3JCLHVDQUFrRztBQUF6RixvR0FBQSxRQUFRLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFDOUIsaURBQWdHO0FBQXZGLDZHQUFBLFlBQVksT0FBQTtBQUNyQixxQ0FBc0Y7QUFBN0UsOEdBQUEsbUJBQW1CLE9BQUE7QUFBbUIsOEdBQUEsbUJBQW1CLE9BQUE7QUFDbEUsK0NBQTBFO0FBQWpFLDJHQUFBLFdBQVcsT0FBQTtBQUFFLGtIQUFBLGtCQUFrQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5leHBvcnQgeyBBcmNoaXRlY3R1cmUsIEFyY2hpdGVjdHVyZURlZmluaXRpb24sIENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuL2FyY2hpdGVjdHVyZSc7XG5leHBvcnQgeyBGdW5jdGlvbiwgVEJERnVuY3Rpb24sIEZ1bmN0aW9uSGFuZGxlciwgRnVuY3Rpb25SdW50aW1lQ29udGV4dE1hcmtlciB9IGZyb20gJy4vZnVuY3Rpb24nO1xuZXhwb3J0IHsgQXBpQ29udGFpbmVyLCBBcGlSb3V0ZXMsIFJvdXRlRW50cnksIEhhbmRsZXJPZiwgUm91dGVIYW5kbGVycyB9IGZyb20gJy4vYXBpLWNvbnRhaW5lcic7XG5leHBvcnQgeyBBcmNoaXRlY3R1cmVCaW5kaW5nLCBTZXJ2aWNlRW5kcG9pbnQsIGFyY2hpdGVjdHVyZUJpbmRpbmcgfSBmcm9tICcuL2JpbmRpbmcnO1xuZXhwb3J0IHsgaHR0cEhhbmRsZXIsIGNyZWF0ZUh0dHBCaW5kaW5ncywgRmV0Y2hlciB9IGZyb20gJy4vaHR0cC1oYW5kbGVyJztcbiJdfQ==
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.6.1",
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"
@@ -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, TRuntimeContext extends FunctionRuntimeContextMarker = any> extends Construct {
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, FunctionRuntimeContextMarker } from './function';
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';