@arinoto/cdk-arch 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-handler.d.ts","sourceRoot":"","sources":["../src/http-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,MAAM;IAAE,KAAK,EAAE,OAAO,KAAK,CAAA;CAAE,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,SAAS,SAAS,EACzB,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAEhC,UAAU,eAAe,EACzB,WAAW,YAAY,CAAC,OAAO,CAAC,EAChC,WAAW,CAAC,EACZ,UAAS,OAAyB,KACjC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"http-handler.d.ts","sourceRoot":"","sources":["../src/http-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,MAAM;IAAE,KAAK,EAAE,OAAO,KAAK,CAAA;CAAE,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,SAAS,SAAS,EACzB,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAEhC,UAAU,eAAe,EACzB,WAAW,YAAY,CAAC,OAAO,CAAC,EAChC,WAAW,CAAC,EACZ,UAAS,OAAyB,KACjC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CA8C1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,SAAS,SAAS,EACzB,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,EAEhC,UAAU,eAAe,EACzB,WAAW,YAAY,CAAC,OAAO,CAAC,EAChC,YAAY,SAAS,CAAC,EAAE,EACxB,UAAS,OAAyB,KACjC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAQhC,CAAC"}
|
package/dist/http-handler.js
CHANGED
|
@@ -14,8 +14,13 @@ const httpHandler = (endpoint, container, routeName, fetcher = () => ({ fetch })
|
|
|
14
14
|
const extraArgs = args.slice(pathParams.length);
|
|
15
15
|
const isGet = (method ?? 'GET') === 'GET';
|
|
16
16
|
let url = baseUrl;
|
|
17
|
-
if (isGet && extraArgs.length > 0
|
|
18
|
-
const
|
|
17
|
+
if (isGet && extraArgs.length > 0) {
|
|
18
|
+
const extra = extraArgs[0];
|
|
19
|
+
if (extra == null || typeof extra !== 'object') {
|
|
20
|
+
throw new Error(`GET route '${route.path}' received a non-object extra arg (${typeof extra}) — ` +
|
|
21
|
+
`primitives cannot be serialized as query params. Wrap in an object instead.`);
|
|
22
|
+
}
|
|
23
|
+
const qs = new URLSearchParams(extra).toString();
|
|
19
24
|
if (qs) {
|
|
20
25
|
url = `${baseUrl}?${qs}`;
|
|
21
26
|
}
|
|
@@ -63,4 +68,4 @@ const createHttpBindings = (endpoint, container, routeNames, fetcher = () => ({
|
|
|
63
68
|
}, {});
|
|
64
69
|
};
|
|
65
70
|
exports.createHttpBindings = createHttpBindings;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2h0dHAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQTs7O0dBR0c7QUFDSSxNQUFNLFdBQVcsR0FBRyxDQUl6QixRQUF5QixFQUN6QixTQUFnQyxFQUNoQyxTQUFZLEVBQ1osVUFBbUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQ1AsRUFBRTtJQUM3QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFbEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNsRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQzdCLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUM7UUFFMUMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLElBQUksS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDYixjQUFjLEtBQUssQ0FBQyxJQUFJLHNDQUFzQyxPQUFPLEtBQUssTUFBTTtvQkFDaEYsNkVBQTZFLENBQzlFLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBK0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNFLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQUMsR0FBRyxHQUFHLEdBQUcsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQWdCO1lBQzNCLE1BQU0sRUFBRSxNQUFNLElBQUksS0FBSztZQUN2QixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUM3RixDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDN0gsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLE9BQU8sT0FBb0MsQ0FBQztBQUM5QyxDQUFDLENBQUM7QUF0RFcsUUFBQSxXQUFXLGVBc0R0QjtBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxDQUloQyxRQUF5QixFQUN6QixTQUFnQyxFQUNoQyxVQUF3QixFQUN4QixVQUFtQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFDRCxFQUFFO0lBQ25DLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FDdEIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDWixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSxtQkFBVyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUNELEVBQXFDLENBQ3RDLENBQUM7QUFDSixDQUFDLENBQUM7QUFoQlcsUUFBQSxrQkFBa0Isc0JBZ0I3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaUNvbnRhaW5lciwgQXBpUm91dGVzLCBSb3V0ZUhhbmRsZXJzIH0gZnJvbSAnLi9hcGktY29udGFpbmVyJztcbmltcG9ydCB7IEZ1bmN0aW9uSGFuZGxlciB9IGZyb20gJy4vZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi9iaW5kaW5nJztcblxuZXhwb3J0IHR5cGUgRmV0Y2hlciA9ICgpID0+IHsgZmV0Y2g6IHR5cGVvZiBmZXRjaCB9O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBIVFRQIGhhbmRsZXIgZm9yIGEgcm91dGUgYnkgbmFtZS5cbiAqIExvb2tzIHVwIHRoZSByb3V0ZSBwYXRoIGZyb20gdGhlIGNvbnRhaW5lcidzIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY29uc3QgaHR0cEhhbmRsZXIgPSA8XG4gIFRSb3V0ZXMgZXh0ZW5kcyBBcGlSb3V0ZXMsXG4gIEsgZXh0ZW5kcyBrZXlvZiBUUm91dGVzICYgc3RyaW5nXG4+KFxuICBlbmRwb2ludDogU2VydmljZUVuZHBvaW50LFxuICBjb250YWluZXI6IEFwaUNvbnRhaW5lcjxUUm91dGVzPixcbiAgcm91dGVOYW1lOiBLLFxuICBmZXRjaGVyOiBGZXRjaGVyID0gKCkgPT4gKHtmZXRjaH0pXG4pOiBSb3V0ZUhhbmRsZXJzPFRSb3V0ZXM+W0tdID0+IHtcbiAgY29uc3Qgcm91dGUgPSBjb250YWluZXIuZ2V0Um91dGUocm91dGVOYW1lKTtcblxuICBjb25zdCBbbWV0aG9kLCBwYXRoXSA9IHJvdXRlLnBhdGguc3BsaXQoJyAnKTtcbiAgY29uc3QgcGF0aFBhcmFtcyA9IHBhdGgubWF0Y2goL1xceyhcXHcrKVxcfS9nKSB8fCBbXTtcblxuICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHBhdGhQYXJhbXMucmVkdWNlKFxuICAgICAgKHUsIHBhcmFtLCBpKSA9PiBhcmdzW2ldICE9PSB1bmRlZmluZWQgPyB1LnJlcGxhY2UocGFyYW0sIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoYXJnc1tpXSkpKSA6IHUsXG4gICAgICBgJHtlbmRwb2ludC5iYXNlVXJsfSR7cGF0aH1gXG4gICAgKTtcblxuICAgIGNvbnN0IGV4dHJhQXJncyA9IGFyZ3Muc2xpY2UocGF0aFBhcmFtcy5sZW5ndGgpO1xuICAgIGNvbnN0IGlzR2V0ID0gKG1ldGhvZCA/PyAnR0VUJykgPT09ICdHRVQnO1xuXG4gICAgbGV0IHVybCA9IGJhc2VVcmw7XG4gICAgaWYgKGlzR2V0ICYmIGV4dHJhQXJncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHRyYSA9IGV4dHJhQXJnc1swXTtcbiAgICAgIGlmIChleHRyYSA9PSBudWxsIHx8IHR5cGVvZiBleHRyYSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHRVQgcm91dGUgJyR7cm91dGUucGF0aH0nIHJlY2VpdmVkIGEgbm9uLW9iamVjdCBleHRyYSBhcmcgKCR7dHlwZW9mIGV4dHJhfSkg4oCUIGAgK1xuICAgICAgICAgIGBwcmltaXRpdmVzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGFzIHF1ZXJ5IHBhcmFtcy4gV3JhcCBpbiBhbiBvYmplY3QgaW5zdGVhZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBxcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoZXh0cmEgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPikudG9TdHJpbmcoKTtcbiAgICAgIGlmIChxcykgeyB1cmwgPSBgJHtiYXNlVXJsfT8ke3FzfWA7IH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIG1ldGhvZDogbWV0aG9kIHx8ICdHRVQnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAuLi4oIWlzR2V0ICYmIGV4dHJhQXJncy5sZW5ndGggPiAwXG4gICAgICAgID8geyBib2R5OiBleHRyYUFyZ3MubGVuZ3RoID09PSAxID8gSlNPTi5zdHJpbmdpZnkoZXh0cmFBcmdzWzBdKSA6IEpTT04uc3RyaW5naWZ5KGV4dHJhQXJncykgfVxuICAgICAgICA6IHt9KVxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoZXIoKS5mZXRjaCh1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZW1vdGUgY2FsbCB0byAke3VybH0gd2l0aCAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfTtcblxuICByZXR1cm4gaGFuZGxlciBhcyBSb3V0ZUhhbmRsZXJzPFRSb3V0ZXM+W0tdO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgSFRUUCBiaW5kaW5ncyBmb3IgbXVsdGlwbGUgcm91dGVzIGFzIGEgY2FsbGFibGUgY2xpZW50LlxuICogUmV0dXJucyBhIHN0cm9uZ2x5LXR5cGVkIG9iamVjdCB3aGVyZSBlYWNoIHJvdXRlIG5hbWUgbWFwcyB0byBhbiBhc3luYyBmdW5jdGlvblxuICogd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIG9yaWdpbmFsIGhhbmRsZXIuXG4gKlxuICogQHR5cGVQYXJhbSBUUm91dGVzIC0gVGhlIHJvdXRlcyB0eXBlIGZyb20gdGhlIEFwaUNvbnRhaW5lclxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHN1YnNldCBvZiByb3V0ZSBuYW1lcyB0byBpbmNsdWRlIGluIHRoZSBjbGllbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYXBpID0gbmV3IEFwaUNvbnRhaW5lcihhcmNoLCAnYXBpJywge1xuICogICBoZWxsbzogeyBwYXRoOiAnR0VUIC92MS9hcGkvaGVsbG8ve25hbWV9JywgaGFuZGxlcjogaGVsbG9GdW5jdGlvbiB9LFxuICogICBoZWxsb3M6IHsgcGF0aDogJ0dFVCAvdjEvYXBpL2hlbGxvcycsIGhhbmRsZXI6IGhlbGxvc0Z1bmN0aW9uIH1cbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUh0dHBCaW5kaW5ncyhlbmRwb2ludCwgYXBpLCBbJ2hlbGxvJywgJ2hlbGxvcyddKTtcbiAqIGF3YWl0IGNsaWVudC5oZWxsbygnSm9obicpOyAgLy8gKG5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+XG4gKiBhd2FpdCBjbGllbnQuaGVsbG9zKCk7ICAgICAgIC8vICgpID0+IFByb21pc2U8R3JlZXRpbmdbXT5cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlSHR0cEJpbmRpbmdzID0gPFxuICBUUm91dGVzIGV4dGVuZHMgQXBpUm91dGVzLFxuICBLIGV4dGVuZHMga2V5b2YgVFJvdXRlcyAmIHN0cmluZ1xuPihcbiAgZW5kcG9pbnQ6IFNlcnZpY2VFbmRwb2ludCxcbiAgY29udGFpbmVyOiBBcGlDb250YWluZXI8VFJvdXRlcz4sXG4gIHJvdXRlTmFtZXM6IHJlYWRvbmx5IEtbXSxcbiAgZmV0Y2hlcjogRmV0Y2hlciA9ICgpID0+ICh7ZmV0Y2h9KVxuKTogUGljazxSb3V0ZUhhbmRsZXJzPFRSb3V0ZXM+LCBLPiA9PiB7XG4gIHJldHVybiByb3V0ZU5hbWVzLnJlZHVjZShcbiAgICAoYWNjLCBuYW1lKSA9PiB7XG4gICAgICBhY2NbbmFtZV0gPSBodHRwSGFuZGxlcihlbmRwb2ludCwgY29udGFpbmVyLCBuYW1lLCBmZXRjaGVyKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fSBhcyBQaWNrPFJvdXRlSGFuZGxlcnM8VFJvdXRlcz4sIEs+XG4gICk7XG59O1xuIl19
|
package/package.json
CHANGED
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/http-handler.ts
CHANGED
|
@@ -32,8 +32,15 @@ export const httpHandler = <
|
|
|
32
32
|
const isGet = (method ?? 'GET') === 'GET';
|
|
33
33
|
|
|
34
34
|
let url = baseUrl;
|
|
35
|
-
if (isGet && extraArgs.length > 0
|
|
36
|
-
const
|
|
35
|
+
if (isGet && extraArgs.length > 0) {
|
|
36
|
+
const extra = extraArgs[0];
|
|
37
|
+
if (extra == null || typeof extra !== 'object') {
|
|
38
|
+
throw new Error(
|
|
39
|
+
`GET route '${route.path}' received a non-object extra arg (${typeof extra}) — ` +
|
|
40
|
+
`primitives cannot be serialized as query params. Wrap in an object instead.`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
const qs = new URLSearchParams(extra as Record<string, string>).toString();
|
|
37
44
|
if (qs) { url = `${baseUrl}?${qs}`; }
|
|
38
45
|
}
|
|
39
46
|
|