summaryrefslogtreecommitdiff
path: root/node_modules/@jet/environment/dependencies/object-graph.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@jet/environment/dependencies/object-graph.js')
-rw-r--r--node_modules/@jet/environment/dependencies/object-graph.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/node_modules/@jet/environment/dependencies/object-graph.js b/node_modules/@jet/environment/dependencies/object-graph.js
new file mode 100644
index 0000000..e591f3f
--- /dev/null
+++ b/node_modules/@jet/environment/dependencies/object-graph.js
@@ -0,0 +1,49 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.inject = exports.ObjectGraph = void 0;
+const optional_1 = require("../types/optional");
+/* eslint-disable no-underscore-dangle */
+class ObjectGraph {
+ constructor(name) {
+ this._members = {};
+ this.name = name;
+ }
+ adding(type, member) {
+ const clone = this.clone();
+ clone._members[type.name] = member;
+ return clone;
+ }
+ removing(type) {
+ const clone = this.clone();
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
+ delete clone._members[type.name];
+ return clone;
+ }
+ optional(type) {
+ return this._members[type.name];
+ }
+ required(type) {
+ const member = this._members[type.name];
+ if ((0, optional_1.isNothing)(member)) {
+ // eslint-disable-next-line @typescript-eslint/require-array-sort-compare
+ const candidates = Object.keys(this._members).sort().join(", ");
+ throw new Error(`No member with type ${type.name} found in ${this.name}. Candidates ${candidates}`);
+ }
+ return member;
+ }
+ clone() {
+ const ctor = this.constructor;
+ // eslint-disable-next-line new-cap
+ const clone = new ctor(this.name);
+ for (const [type, member] of Object.entries(this._members)) {
+ clone._members[type] = member;
+ }
+ return clone;
+ }
+}
+exports.ObjectGraph = ObjectGraph;
+function inject(type, objectGraph) {
+ return objectGraph.required(type);
+}
+exports.inject = inject;
+//# sourceMappingURL=object-graph.js.map \ No newline at end of file