@spinajs/di 2.0.86 → 2.0.88

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.
Files changed (133) hide show
  1. package/lib/{array.d.ts → cjs/array.d.ts} +0 -0
  2. package/lib/cjs/array.d.ts.map +1 -0
  3. package/lib/cjs/array.js +14 -0
  4. package/lib/cjs/array.js.map +1 -0
  5. package/lib/{binder.d.ts → cjs/binder.d.ts} +0 -0
  6. package/lib/cjs/binder.d.ts.map +1 -0
  7. package/lib/cjs/binder.js +97 -0
  8. package/lib/cjs/binder.js.map +1 -0
  9. package/lib/{container-cache.d.ts → cjs/container-cache.d.ts} +0 -0
  10. package/lib/cjs/container-cache.d.ts.map +1 -0
  11. package/lib/cjs/container-cache.js +64 -0
  12. package/lib/cjs/container-cache.js.map +1 -0
  13. package/lib/cjs/container.d.ts +134 -0
  14. package/lib/cjs/container.d.ts.map +1 -0
  15. package/lib/cjs/container.js +466 -0
  16. package/lib/cjs/container.js.map +1 -0
  17. package/lib/{decorators.d.ts → cjs/decorators.d.ts} +0 -0
  18. package/lib/cjs/decorators.d.ts.map +1 -0
  19. package/lib/cjs/decorators.js +304 -0
  20. package/lib/cjs/decorators.js.map +1 -0
  21. package/lib/{enums.d.ts → cjs/enums.d.ts} +0 -0
  22. package/lib/cjs/enums.d.ts.map +1 -0
  23. package/lib/cjs/enums.js +36 -0
  24. package/lib/cjs/enums.js.map +1 -0
  25. package/lib/{exceptions.d.ts → cjs/exceptions.d.ts} +0 -0
  26. package/lib/cjs/exceptions.d.ts.map +1 -0
  27. package/lib/cjs/exceptions.js +26 -0
  28. package/lib/cjs/exceptions.js.map +1 -0
  29. package/lib/{helpers.d.ts → cjs/helpers.d.ts} +0 -0
  30. package/lib/cjs/helpers.d.ts.map +1 -0
  31. package/lib/cjs/helpers.js +69 -0
  32. package/lib/cjs/helpers.js.map +1 -0
  33. package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
  34. package/lib/cjs/index.d.ts.map +1 -0
  35. package/lib/cjs/index.js +42 -0
  36. package/lib/cjs/index.js.map +1 -0
  37. package/lib/cjs/interfaces.d.ts +152 -0
  38. package/lib/cjs/interfaces.d.ts.map +1 -0
  39. package/lib/cjs/interfaces.js +48 -0
  40. package/lib/cjs/interfaces.js.map +1 -0
  41. package/lib/{registry.d.ts → cjs/registry.d.ts} +0 -0
  42. package/lib/cjs/registry.d.ts.map +1 -0
  43. package/lib/cjs/registry.js +81 -0
  44. package/lib/cjs/registry.js.map +1 -0
  45. package/lib/{root.d.ts → cjs/root.d.ts} +0 -0
  46. package/lib/cjs/root.d.ts.map +1 -0
  47. package/lib/cjs/root.js +177 -0
  48. package/lib/cjs/root.js.map +1 -0
  49. package/lib/{types.d.ts → cjs/types.d.ts} +0 -0
  50. package/lib/cjs/types.d.ts.map +1 -0
  51. package/lib/cjs/types.js +3 -0
  52. package/lib/cjs/types.js.map +1 -0
  53. package/lib/mjs/array.d.ts +11 -0
  54. package/lib/mjs/array.d.ts.map +1 -0
  55. package/lib/{array.js → mjs/array.js} +0 -0
  56. package/lib/mjs/array.js.map +1 -0
  57. package/lib/mjs/binder.d.ts +40 -0
  58. package/lib/mjs/binder.d.ts.map +1 -0
  59. package/lib/{binder.js → mjs/binder.js} +0 -0
  60. package/lib/mjs/binder.js.map +1 -0
  61. package/lib/mjs/container-cache.d.ts +18 -0
  62. package/lib/mjs/container-cache.d.ts.map +1 -0
  63. package/lib/{container-cache.js → mjs/container-cache.js} +0 -0
  64. package/lib/mjs/container-cache.js.map +1 -0
  65. package/lib/{container.d.ts → mjs/container.d.ts} +0 -0
  66. package/lib/mjs/container.d.ts.map +1 -0
  67. package/lib/{container.js → mjs/container.js} +0 -0
  68. package/lib/mjs/container.js.map +1 -0
  69. package/lib/mjs/decorators.d.ts +142 -0
  70. package/lib/mjs/decorators.d.ts.map +1 -0
  71. package/lib/{decorators.js → mjs/decorators.js} +0 -0
  72. package/lib/mjs/decorators.js.map +1 -0
  73. package/lib/mjs/enums.d.ts +32 -0
  74. package/lib/mjs/enums.d.ts.map +1 -0
  75. package/lib/{enums.js → mjs/enums.js} +1 -1
  76. package/lib/mjs/enums.js.map +1 -0
  77. package/lib/mjs/exceptions.d.ts +18 -0
  78. package/lib/mjs/exceptions.d.ts.map +1 -0
  79. package/lib/{exceptions.js → mjs/exceptions.js} +0 -0
  80. package/lib/mjs/exceptions.js.map +1 -0
  81. package/lib/mjs/helpers.d.ts +26 -0
  82. package/lib/mjs/helpers.d.ts.map +1 -0
  83. package/lib/{helpers.js → mjs/helpers.js} +0 -0
  84. package/lib/mjs/helpers.js.map +1 -0
  85. package/lib/mjs/index.d.ts +13 -0
  86. package/lib/mjs/index.d.ts.map +1 -0
  87. package/lib/{index.js → mjs/index.js} +0 -0
  88. package/lib/mjs/index.js.map +1 -0
  89. package/lib/{interfaces.d.ts → mjs/interfaces.d.ts} +0 -0
  90. package/lib/mjs/interfaces.d.ts.map +1 -0
  91. package/lib/{interfaces.js → mjs/interfaces.js} +0 -0
  92. package/lib/mjs/interfaces.js.map +1 -0
  93. package/lib/mjs/registry.d.ts +15 -0
  94. package/lib/mjs/registry.d.ts.map +1 -0
  95. package/lib/{registry.js → mjs/registry.js} +0 -0
  96. package/lib/mjs/registry.js.map +1 -0
  97. package/lib/mjs/root.d.ts +107 -0
  98. package/lib/mjs/root.d.ts.map +1 -0
  99. package/lib/{root.js → mjs/root.js} +0 -0
  100. package/lib/mjs/root.js.map +1 -0
  101. package/lib/mjs/types.d.ts +14 -0
  102. package/lib/mjs/types.d.ts.map +1 -0
  103. package/lib/{types.js → mjs/types.js} +0 -0
  104. package/lib/mjs/types.js.map +1 -0
  105. package/lib/tsconfig.cjs.tsbuildinfo +1 -0
  106. package/lib/tsconfig.tsbuildinfo +1 -0
  107. package/package.json +11 -4
  108. package/lib/array.d.ts.map +0 -1
  109. package/lib/array.js.map +0 -1
  110. package/lib/binder.d.ts.map +0 -1
  111. package/lib/binder.js.map +0 -1
  112. package/lib/container-cache.d.ts.map +0 -1
  113. package/lib/container-cache.js.map +0 -1
  114. package/lib/container.d.ts.map +0 -1
  115. package/lib/container.js.map +0 -1
  116. package/lib/decorators.d.ts.map +0 -1
  117. package/lib/decorators.js.map +0 -1
  118. package/lib/enums.d.ts.map +0 -1
  119. package/lib/enums.js.map +0 -1
  120. package/lib/exceptions.d.ts.map +0 -1
  121. package/lib/exceptions.js.map +0 -1
  122. package/lib/helpers.d.ts.map +0 -1
  123. package/lib/helpers.js.map +0 -1
  124. package/lib/index.d.ts.map +0 -1
  125. package/lib/index.js.map +0 -1
  126. package/lib/interfaces.d.ts.map +0 -1
  127. package/lib/interfaces.js.map +0 -1
  128. package/lib/registry.d.ts.map +0 -1
  129. package/lib/registry.js.map +0 -1
  130. package/lib/root.d.ts.map +0 -1
  131. package/lib/root.js.map +0 -1
  132. package/lib/types.d.ts.map +0 -1
  133. package/lib/types.js.map +0 -1
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,gBAAgB;QACxB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;KACnD;CACF;AACD,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM;gBAAvB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM;CAG3C"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedArray = void 0;
4
+ class TypedArray extends Array {
5
+ constructor(Type) {
6
+ super();
7
+ this.Type = Type;
8
+ }
9
+ }
10
+ exports.TypedArray = TypedArray;
11
+ Array.ofType = function (type) {
12
+ return new TypedArray(type);
13
+ };
14
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":";;;AAOA,MAAa,UAAc,SAAQ,KAAQ;IACzC,YAAmB,IAAuB;QACxC,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAmB;IAE1C,CAAC;CACF;AAJD,gCAIC;AAED,KAAK,CAAC,MAAM,GAAG,UAAa,IAAuB;IACjD,OAAO,IAAI,UAAU,CAAI,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binder.d.ts","sourceRoot":"","sources":["../../src/binder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAqB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5C,qBAAa,MAAM,CAAC,CAAC,CAAE,YAAW,KAAK;IAIzB,OAAO,CAAC,cAAc;IAA4C,OAAO,CAAC,SAAS;IAH/F,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,aAAa,CAAU;gBAEX,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAAU,SAAS,EAAE,UAAU;IAK3G,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;IAYpC;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,IAAI;IAc7C;;;;;;;;OAQG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAoBpC;;;;OAIG;IACH,MAAM,IAAI,IAAI;IAad;;;OAGG;IACH,cAAc,IAAI,IAAI;CASvB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Binder = void 0;
4
+ const exceptions_js_1 = require("./exceptions.js");
5
+ const enums_js_1 = require("./enums.js");
6
+ const helpers_js_1 = require("./helpers.js");
7
+ const index_js_1 = require("./index.js");
8
+ class Binder {
9
+ constructor(implementation, container) {
10
+ this.implementation = implementation;
11
+ this.container = container;
12
+ this.isFactory = (0, helpers_js_1.isFactory)(implementation);
13
+ this.isConstructor = (0, helpers_js_1.isConstructor)(implementation);
14
+ }
15
+ as(type) {
16
+ this.container.Registry.register(type, this.implementation);
17
+ const iType = (0, helpers_js_1.getTypeName)(this.implementation);
18
+ const tType = (0, helpers_js_1.getTypeName)(type);
19
+ this.container.emit(`di.registered.${iType}`, this.implementation);
20
+ this.container.emit(`di.registered.${tType}`, this.implementation);
21
+ return this;
22
+ }
23
+ /**
24
+ * Add plain value to container. If value exists, it overrides content in container cache
25
+ *
26
+ * @param type - name of added value
27
+ * @param override - if true, any value registered before is overriden by new one
28
+ * @returns
29
+ */
30
+ asValue(type, override = false) {
31
+ if (override) {
32
+ if (this.container.Cache.has(type)) {
33
+ this.container.Cache.remove(type);
34
+ }
35
+ }
36
+ this.container.Cache.add(type, this.implementation);
37
+ const tType = (0, helpers_js_1.getTypeName)(type);
38
+ this.container.emit(`di.registered.${tType}`, this.implementation);
39
+ return this;
40
+ }
41
+ /**
42
+ *
43
+ * Add plain value to container, value is stored in hashmap for quick access
44
+ * eg. we have multiple value converters and we wanc o(1) access, instead searching for
45
+ * converter for specific type
46
+ *
47
+ * @param type - name of added value
48
+ * @param key - hashmap key
49
+ */
50
+ asMapValue(type, key) {
51
+ let map = null;
52
+ if (this.container.Cache.has(type)) {
53
+ map = this.container.Cache.get(type)[0];
54
+ }
55
+ else {
56
+ map = new Map();
57
+ this.container.Cache.add(type, map);
58
+ }
59
+ map.set(key, this.implementation);
60
+ const iType = (0, helpers_js_1.getTypeName)(this.implementation);
61
+ const tType = (0, helpers_js_1.getTypeName)(type);
62
+ this.container.emit(`di.registered.${iType}`, this.implementation);
63
+ this.container.emit(`di.registered.${tType}`, this.implementation);
64
+ return this;
65
+ }
66
+ /**
67
+ * Register type as itself. Usefull when we also want to register type as self instead of base class
68
+ * so we can retrieve just this specific instance.
69
+ * @returns this
70
+ */
71
+ asSelf() {
72
+ if (!this.isConstructor || this.isFactory) {
73
+ throw new exceptions_js_1.BindException('cannot register as self non class');
74
+ }
75
+ // we can safly cast to any, we checked params earlier
76
+ this.container.Registry.register(this.implementation, this.implementation);
77
+ const iType = (0, helpers_js_1.getTypeName)(this.implementation);
78
+ this.container.emit(`di.registered.${iType}`, this.implementation);
79
+ return this;
80
+ }
81
+ /**
82
+ * Mark type as SingleInstance resolve strategy.
83
+ * @returns this
84
+ */
85
+ singleInstance() {
86
+ if (this.isFactory || !this.isConstructor) {
87
+ throw new exceptions_js_1.BindException('Cannot bind factory function as singleton.');
88
+ }
89
+ else {
90
+ const descriptor = index_js_1.DI.RootContainer.extractDescriptor(this.implementation);
91
+ descriptor.resolver = enums_js_1.ResolveType.Singleton;
92
+ }
93
+ return this;
94
+ }
95
+ }
96
+ exports.Binder = Binder;
97
+ //# sourceMappingURL=binder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binder.js","sourceRoot":"","sources":["../../src/binder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-cache.d.ts","sourceRoot":"","sources":["../../src/container-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,qBAAa,cAAc;IAGb,OAAO,CAAC,SAAS;IAF7B,OAAO,CAAC,KAAK,CAAqB;gBAEd,SAAS,EAAE,UAAU;IAQxC,CAAC,MAAM,CAAC,QAAQ,CAAC;;;;IAQX,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAQ1E,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG;IAYpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAYnF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,GAAG;IActE,KAAK;CAIb"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContainerCache = void 0;
4
+ const helpers_js_1 = require("./helpers.js");
5
+ class ContainerCache {
6
+ constructor(container) {
7
+ this.container = container;
8
+ this.cache = new Map();
9
+ // add to cache container
10
+ // so we can inject container if needed
11
+ this.add(container, container);
12
+ }
13
+ *[Symbol.iterator]() {
14
+ for (const [key, value] of this.cache) {
15
+ for (const v of value) {
16
+ yield { key, value: v };
17
+ }
18
+ }
19
+ }
20
+ remove(key, parent) {
21
+ if (this.has(key)) {
22
+ this.cache.delete((0, helpers_js_1.getTypeName)(key));
23
+ }
24
+ else if (parent && this.container.Parent) {
25
+ this.container.Parent.uncache(key);
26
+ }
27
+ }
28
+ add(key, instance) {
29
+ const tName = (0, helpers_js_1.getTypeName)(key);
30
+ if (this.has(key)) {
31
+ if (this.cache.get(tName).indexOf(instance) === -1) {
32
+ this.cache.get(tName).push(instance);
33
+ }
34
+ }
35
+ else {
36
+ this.cache.set(tName, [instance]);
37
+ }
38
+ }
39
+ has(key, parent) {
40
+ if (this.cache.has((0, helpers_js_1.getTypeName)(key))) {
41
+ return true;
42
+ }
43
+ if (parent && this.container.Parent) {
44
+ return this.container.Parent.Cache.has(key, parent);
45
+ }
46
+ return false;
47
+ }
48
+ get(key, parent) {
49
+ const tName = (0, helpers_js_1.getTypeName)(key);
50
+ if (this.cache.has(tName)) {
51
+ return this.cache.get(tName);
52
+ }
53
+ if (parent && this.container.Parent) {
54
+ return this.container.Parent.Cache.get(key, parent);
55
+ }
56
+ return [];
57
+ }
58
+ clear() {
59
+ this.cache.clear();
60
+ this.add(this.container, this.container);
61
+ }
62
+ }
63
+ exports.ContainerCache = ContainerCache;
64
+ //# sourceMappingURL=container-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-cache.js","sourceRoot":"","sources":["../../src/container-cache.ts"],"names":[],"mappings":";;;AAEA,6CAA2C;AAI3C,MAAa,cAAc;IAGzB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;QAEtC,yBAAyB;QACzB,uCAAuC;QACvC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;YACrC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gBACrB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aACzB;SACF;IACH,CAAC;IAEM,MAAM,CAAC,GAA0C,EAAE,MAAgB;QACxE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC,CAAC;SACrC;aAAM,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAC1C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACpC;IACH,CAAC;IAEM,GAAG,CAAC,GAAiC,EAAE,QAAa;QACzD,MAAM,KAAK,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;gBAClD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACtC;SACF;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;SACnC;IACH,CAAC;IAEM,GAAG,CAAC,GAAmD,EAAE,MAAgB;QAC9E,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC;SACb;QAED,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACnC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SACrD;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,GAAG,CAAC,GAA0C,EAAE,MAAgB;QACrE,MAAM,KAAK,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC9B;QAED,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACnC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SACrD;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;CACF;AArED,wCAqEC"}
@@ -0,0 +1,134 @@
1
+ /// <reference types="node" />
2
+ import 'reflect-metadata';
3
+ import { TypedArray } from './array.js';
4
+ import { IBind, IContainer, IInjectDescriptor, IResolvedInjection, IToInject, AsyncService, ResolvableObject } from './interfaces.js';
5
+ import { Class, Factory } from './types.js';
6
+ import { EventEmitter } from 'events';
7
+ import { Registry } from './registry.js';
8
+ import { ContainerCache } from './container-cache.js';
9
+ /**
10
+ * Dependency injection container implementation
11
+ */
12
+ export declare class Container extends EventEmitter implements IContainer {
13
+ /**
14
+ * Handles information about what is registered as what
15
+ * eg. that class IConfiguration should be resolved as DatabaseConfiguration etc.
16
+ */
17
+ private registry;
18
+ /**
19
+ * Singletons cache, objects that should be created only once are stored here.
20
+ */
21
+ private cache;
22
+ /**
23
+ * Parent container if avaible
24
+ */
25
+ private parent;
26
+ /**
27
+ * Returns container cache - map object with resolved classes as singletons
28
+ */
29
+ get Cache(): ContainerCache;
30
+ get Registry(): Registry;
31
+ get Parent(): IContainer;
32
+ constructor(parent?: IContainer);
33
+ /**
34
+ * Clears container registry and cache. shorthand for container.clearCache() && container.clearRegistry()
35
+ */
36
+ clear(): void;
37
+ dispose(): Promise<void>;
38
+ /**
39
+ * clears container registered types information
40
+ */
41
+ clearCache(): void;
42
+ /**
43
+ * Clears container resolved types
44
+ */
45
+ clearRegistry(): void;
46
+ /**
47
+ * Register class/interface to DI.
48
+ * @param type - interface object to register
49
+ * @throws {@link InvalidArgument} if type is null or undefined
50
+ */
51
+ register<T>(implementation: Class<T> | Factory<T> | ResolvableObject): IBind;
52
+ unregister<T>(implementation: string | Class<T> | Factory<T> | ResolvableObject): void;
53
+ uncache<T>(implementation: string | Class<T> | TypedArray<T>, parent?: boolean): void;
54
+ /**
55
+ * Creates child DI container.
56
+ *
57
+ */
58
+ child(): IContainer;
59
+ /**
60
+ * Gets already resolved services. Works only for singleton classes.
61
+ *
62
+ * Do not try to get service by factory func, it will always return null.
63
+ * If you somehowe want to cache instances created by factory functions,
64
+ * factory itself should do that somehow and end user should always resolve by
65
+ * assigned type
66
+ *
67
+ * @param serviceName - name of service to get
68
+ * @returns null if no service has been resolved at given name
69
+ */
70
+ get<T>(service: TypedArray<T>, parent?: boolean): T[];
71
+ get<T>(service: string | Class<T>, parent?: boolean): T;
72
+ hasRegistered<T>(service: Class<T> | string, parent?: boolean): boolean;
73
+ /**
74
+ * Checks if service is already resolved and exists in container cache.
75
+ * NOTE: check is only valid for classes that are singletons.
76
+ *
77
+ * @param service - service name or class to check
78
+ * @returns true if service instance already exists, otherwise false.
79
+ * @throws {@link InvalidArgument} when service is null or empty
80
+ */
81
+ isResolved<T>(service: string | Class<T> | TypedArray<T>, parent?: boolean): boolean;
82
+ /**
83
+ *
84
+ * Resolves single instance of class
85
+ *
86
+ * @param type - what to resolve, can be class definition or factory function
87
+ * @param options - options passed to constructor / factory
88
+ */
89
+ resolve<T>(type: string, options?: unknown[], check?: boolean, tType?: Class<T>): T;
90
+ resolve<T>(type: string, check?: boolean): T;
91
+ /**
92
+ *
93
+ * Resolves single instance of class
94
+ *
95
+ * @param type - what to resolve, can be class definition or factory function
96
+ * @param options - options passed to constructor / factory
97
+ */
98
+ resolve<T>(type: Class<T>, options?: unknown[], check?: boolean): T extends AsyncService ? Promise<T> : T;
99
+ resolve<T>(type: Class<T>, check?: boolean): T extends AsyncService ? Promise<T> : T;
100
+ /**
101
+ *
102
+ * Resolves all instances of given class. Under single definition can be registered multiple implementations.
103
+ *
104
+ * @param type - typed array of specified type. since TS does not expose array metadata and type its uses TypedArray<T> consctruct
105
+ * @param options - options passed to constructor / factory
106
+ * @param check - strict check if serivice is registered in container before resolving. Default behavior is to not check and resolve
107
+ *
108
+ */
109
+ resolve<T>(type: TypedArray<T>, options?: unknown[], check?: boolean): T extends AsyncService ? Promise<T[]> : T[];
110
+ resolve<T>(type: TypedArray<T>, check?: boolean): T extends AsyncService ? Promise<T[]> : T[];
111
+ getRegisteredTypes<T>(service: string | Class<T> | TypedArray<T>, parent?: boolean): (Class<unknown> | Factory<unknown>)[];
112
+ private resolveType;
113
+ protected getNewInstance(typeToCreate: Class<unknown> | Factory<unknown>, a?: IResolvedInjection[], options?: unknown[]): Promise<unknown> | unknown;
114
+ hasRegisteredType<T>(source: Class<T> | string, type: Class<T> | string | TypedArray<T>, parent?: boolean): boolean;
115
+ protected resolveDependencies(toInject: IToInject<unknown>[]): (Promise<{
116
+ autoinject: boolean;
117
+ autoinjectKey: string;
118
+ instance: any;
119
+ }> | {
120
+ autoinject: boolean;
121
+ autoinjectKey: string;
122
+ instance: any;
123
+ })[] | Promise<({
124
+ autoinject: boolean;
125
+ autoinjectKey: string;
126
+ instance: any;
127
+ } | {
128
+ autoinject: boolean;
129
+ autoinjectKey: string;
130
+ instance: any;
131
+ })[]>;
132
+ extractDescriptor(type: Class<unknown>): IInjectDescriptor<unknown>;
133
+ }
134
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/container.ts"],"names":[],"mappings":"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"}