@visactor/vrender-core 0.17.0-alpha.0 → 0.17.0-alpha.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.
Files changed (206) hide show
  1. package/cjs/allocator/canvas-allocate.d.ts +2 -0
  2. package/cjs/allocator/canvas-allocate.js +12 -6
  3. package/cjs/allocator/canvas-allocate.js.map +1 -1
  4. package/cjs/common/inversify/annotation/inject.d.ts +1 -0
  5. package/cjs/common/inversify/annotation/inject.js +10 -0
  6. package/cjs/common/inversify/annotation/inject.js.map +1 -0
  7. package/cjs/common/inversify/annotation/inject_base.d.ts +14 -0
  8. package/cjs/common/inversify/annotation/inject_base.js +39 -0
  9. package/cjs/common/inversify/annotation/inject_base.js.map +1 -0
  10. package/cjs/common/inversify/annotation/injectable.d.ts +1 -0
  11. package/cjs/common/{inversify-lite/annotation/post_construct.js → inversify/annotation/injectable.js} +15 -5
  12. package/cjs/common/inversify/annotation/injectable.js.map +1 -0
  13. package/cjs/common/inversify/annotation/multi_inject.d.ts +1 -0
  14. package/cjs/common/inversify/annotation/multi_inject.js +10 -0
  15. package/cjs/common/inversify/annotation/multi_inject.js.map +1 -0
  16. package/cjs/common/inversify/annotation/named.d.ts +1 -0
  17. package/cjs/common/inversify/annotation/named.js +14 -0
  18. package/cjs/common/inversify/annotation/named.js.map +1 -0
  19. package/cjs/common/inversify/binding.d.ts +18 -0
  20. package/cjs/common/inversify/binding.js +26 -0
  21. package/cjs/common/inversify/binding.js.map +1 -0
  22. package/cjs/common/inversify/container.d.ts +28 -0
  23. package/cjs/common/inversify/container.js +155 -0
  24. package/cjs/common/inversify/container.js.map +1 -0
  25. package/cjs/common/inversify/cotainer-module.d.ts +6 -0
  26. package/cjs/common/inversify/cotainer-module.js +16 -0
  27. package/cjs/common/inversify/cotainer-module.js.map +1 -0
  28. package/cjs/common/inversify/index.d.ts +7 -0
  29. package/cjs/common/inversify/index.js +75 -0
  30. package/cjs/common/inversify/index.js.map +1 -0
  31. package/cjs/common/inversify/interfaces.d.ts +218 -0
  32. package/cjs/common/inversify/interfaces.js +6 -0
  33. package/cjs/common/inversify/interfaces.js.map +1 -0
  34. package/cjs/common/inversify/literal_types.d.ts +5 -0
  35. package/cjs/common/inversify/literal_types.js +34 -0
  36. package/cjs/common/inversify/literal_types.js.map +1 -0
  37. package/cjs/common/inversify/meta-data.d.ts +6 -0
  38. package/cjs/common/inversify/meta-data.js +19 -0
  39. package/cjs/common/inversify/meta-data.js.map +1 -0
  40. package/cjs/common/inversify/metadata_keys.d.ts +12 -0
  41. package/cjs/common/inversify/metadata_keys.js +15 -0
  42. package/cjs/common/inversify/metadata_keys.js.map +1 -0
  43. package/cjs/common/inversify/metadata_reader.d.ts +6 -0
  44. package/cjs/common/inversify/metadata_reader.js +28 -0
  45. package/cjs/common/inversify/metadata_reader.js.map +1 -0
  46. package/cjs/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
  47. package/cjs/common/inversify/syntax/binding_in_syntax.js +29 -0
  48. package/cjs/common/inversify/syntax/binding_in_syntax.js.map +1 -0
  49. package/cjs/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
  50. package/cjs/common/inversify/syntax/binding_to_syntax.js +40 -0
  51. package/cjs/common/inversify/syntax/binding_to_syntax.js.map +1 -0
  52. package/cjs/common/inversify/syntax/constraint_helpers.d.ts +2 -0
  53. package/cjs/common/inversify/syntax/constraint_helpers.js +18 -0
  54. package/cjs/common/inversify/syntax/constraint_helpers.js.map +1 -0
  55. package/cjs/common/inversify-lite/index.d.ts +1 -8
  56. package/cjs/common/inversify-lite/index.js +1 -64
  57. package/cjs/common/inversify-lite/index.js.map +1 -1
  58. package/cjs/common/utils.d.ts +1 -0
  59. package/cjs/common/utils.js +10 -1
  60. package/cjs/common/utils.js.map +1 -1
  61. package/cjs/core/global.d.ts +2 -0
  62. package/cjs/core/global.js +4 -3
  63. package/cjs/core/global.js.map +1 -1
  64. package/cjs/core/graphic-utils.d.ts +5 -2
  65. package/cjs/core/graphic-utils.js +14 -4
  66. package/cjs/core/graphic-utils.js.map +1 -1
  67. package/cjs/core/stage.d.ts +4 -1
  68. package/cjs/core/stage.js +26 -22
  69. package/cjs/core/stage.js.map +1 -1
  70. package/cjs/core/window.js +2 -2
  71. package/cjs/core/window.js.map +1 -1
  72. package/cjs/graphic/builtin-symbol/index.d.ts +1 -0
  73. package/cjs/graphic/builtin-symbol/index.js +8 -2
  74. package/cjs/graphic/builtin-symbol/index.js.map +1 -1
  75. package/cjs/graphic/config.js +4 -1
  76. package/cjs/graphic/config.js.map +1 -1
  77. package/cjs/graphic/richtext/paragraph.js +12 -11
  78. package/cjs/graphic/richtext/paragraph.js.map +1 -1
  79. package/cjs/graphic/symbol.js +3 -2
  80. package/cjs/graphic/symbol.js.map +1 -1
  81. package/cjs/graphic/text.d.ts +1 -0
  82. package/cjs/graphic/text.js +93 -7
  83. package/cjs/graphic/text.js.map +1 -1
  84. package/cjs/graphic/wrap-text.js +6 -5
  85. package/cjs/graphic/wrap-text.js.map +1 -1
  86. package/cjs/interface/global.d.ts +1 -0
  87. package/cjs/interface/global.js.map +1 -1
  88. package/cjs/interface/graphic/richText.d.ts +1 -1
  89. package/cjs/interface/graphic/richText.js.map +1 -1
  90. package/cjs/interface/graphic/text.d.ts +4 -1
  91. package/cjs/interface/graphic/text.js.map +1 -1
  92. package/cjs/render/contributions/render/draw-contribution.d.ts +2 -0
  93. package/cjs/render/contributions/render/draw-contribution.js +18 -9
  94. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  95. package/cjs/render/contributions/render/line-render.d.ts +1 -0
  96. package/cjs/render/contributions/render/line-render.js +21 -6
  97. package/cjs/render/contributions/render/line-render.js.map +1 -1
  98. package/cjs/render/contributions/render/text-render.js +12 -10
  99. package/cjs/render/contributions/render/text-render.js.map +1 -1
  100. package/dist/index.js +611 -1515
  101. package/dist/index.min.js +1 -1
  102. package/es/allocator/canvas-allocate.d.ts +2 -0
  103. package/es/allocator/canvas-allocate.js +12 -6
  104. package/es/allocator/canvas-allocate.js.map +1 -1
  105. package/es/common/inversify/annotation/inject.d.ts +1 -0
  106. package/es/common/inversify/annotation/inject.js +6 -0
  107. package/es/common/inversify/annotation/inject.js.map +1 -0
  108. package/es/common/inversify/annotation/inject_base.d.ts +14 -0
  109. package/es/common/inversify/annotation/inject_base.js +29 -0
  110. package/es/common/inversify/annotation/inject_base.js.map +1 -0
  111. package/es/common/inversify/annotation/injectable.d.ts +1 -0
  112. package/es/common/inversify/annotation/injectable.js +10 -0
  113. package/es/common/inversify/annotation/injectable.js.map +1 -0
  114. package/es/common/inversify/annotation/multi_inject.d.ts +1 -0
  115. package/es/common/inversify/annotation/multi_inject.js +6 -0
  116. package/es/common/inversify/annotation/multi_inject.js.map +1 -0
  117. package/es/common/inversify/annotation/named.d.ts +1 -0
  118. package/es/common/inversify/annotation/named.js +10 -0
  119. package/es/common/inversify/annotation/named.js.map +1 -0
  120. package/es/common/inversify/binding.d.ts +18 -0
  121. package/es/common/inversify/binding.js +22 -0
  122. package/es/common/inversify/binding.js.map +1 -0
  123. package/es/common/inversify/container.d.ts +28 -0
  124. package/es/common/inversify/container.js +155 -0
  125. package/es/common/inversify/container.js.map +1 -0
  126. package/es/common/inversify/cotainer-module.d.ts +6 -0
  127. package/es/common/inversify/cotainer-module.js +8 -0
  128. package/es/common/inversify/cotainer-module.js.map +1 -0
  129. package/es/common/inversify/index.d.ts +7 -0
  130. package/es/common/inversify/index.js +14 -0
  131. package/es/common/inversify/index.js.map +1 -0
  132. package/es/common/inversify/interfaces.d.ts +218 -0
  133. package/es/common/inversify/interfaces.js +2 -0
  134. package/es/common/inversify/interfaces.js.map +1 -0
  135. package/es/common/inversify/literal_types.d.ts +5 -0
  136. package/es/common/inversify/literal_types.js +20 -0
  137. package/es/common/inversify/literal_types.js.map +1 -0
  138. package/es/common/inversify/meta-data.d.ts +6 -0
  139. package/es/common/inversify/meta-data.js +11 -0
  140. package/es/common/inversify/meta-data.js.map +1 -0
  141. package/es/common/inversify/metadata_keys.d.ts +12 -0
  142. package/es/common/inversify/metadata_keys.js +28 -0
  143. package/es/common/inversify/metadata_keys.js.map +1 -0
  144. package/es/common/inversify/metadata_reader.d.ts +6 -0
  145. package/es/common/inversify/metadata_reader.js +18 -0
  146. package/es/common/inversify/metadata_reader.js.map +1 -0
  147. package/es/common/inversify/syntax/binding_in_syntax.d.ts +10 -0
  148. package/es/common/inversify/syntax/binding_in_syntax.js +24 -0
  149. package/es/common/inversify/syntax/binding_in_syntax.js.map +1 -0
  150. package/es/common/inversify/syntax/binding_to_syntax.d.ts +12 -0
  151. package/es/common/inversify/syntax/binding_to_syntax.js +36 -0
  152. package/es/common/inversify/syntax/binding_to_syntax.js.map +1 -0
  153. package/es/common/inversify/syntax/constraint_helpers.d.ts +2 -0
  154. package/es/common/inversify/syntax/constraint_helpers.js +16 -0
  155. package/es/common/inversify/syntax/constraint_helpers.js.map +1 -0
  156. package/es/common/inversify-lite/index.d.ts +1 -8
  157. package/es/common/inversify-lite/index.js +1 -15
  158. package/es/common/inversify-lite/index.js.map +1 -1
  159. package/es/common/utils.d.ts +1 -0
  160. package/es/common/utils.js +8 -1
  161. package/es/common/utils.js.map +1 -1
  162. package/es/core/global.d.ts +2 -0
  163. package/es/core/global.js +4 -2
  164. package/es/core/global.js.map +1 -1
  165. package/es/core/graphic-utils.d.ts +5 -2
  166. package/es/core/graphic-utils.js +14 -4
  167. package/es/core/graphic-utils.js.map +1 -1
  168. package/es/core/stage.d.ts +4 -1
  169. package/es/core/stage.js +27 -23
  170. package/es/core/stage.js.map +1 -1
  171. package/es/core/window.js +3 -3
  172. package/es/core/window.js.map +1 -1
  173. package/es/graphic/builtin-symbol/index.d.ts +1 -0
  174. package/es/graphic/builtin-symbol/index.js +8 -0
  175. package/es/graphic/builtin-symbol/index.js.map +1 -1
  176. package/es/graphic/config.js +4 -1
  177. package/es/graphic/config.js.map +1 -1
  178. package/es/graphic/richtext/paragraph.js +5 -2
  179. package/es/graphic/richtext/paragraph.js.map +1 -1
  180. package/es/graphic/symbol.js +4 -3
  181. package/es/graphic/symbol.js.map +1 -1
  182. package/es/graphic/text.d.ts +1 -0
  183. package/es/graphic/text.js +90 -9
  184. package/es/graphic/text.js.map +1 -1
  185. package/es/graphic/wrap-text.js +6 -4
  186. package/es/graphic/wrap-text.js.map +1 -1
  187. package/es/interface/global.d.ts +1 -0
  188. package/es/interface/global.js.map +1 -1
  189. package/es/interface/graphic/richText.d.ts +1 -1
  190. package/es/interface/graphic/richText.js.map +1 -1
  191. package/es/interface/graphic/text.d.ts +4 -1
  192. package/es/interface/graphic/text.js.map +1 -1
  193. package/es/render/contributions/render/draw-contribution.d.ts +2 -0
  194. package/es/render/contributions/render/draw-contribution.js +18 -9
  195. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  196. package/es/render/contributions/render/line-render.d.ts +1 -0
  197. package/es/render/contributions/render/line-render.js +21 -6
  198. package/es/render/contributions/render/line-render.js.map +1 -1
  199. package/es/render/contributions/render/text-render.js +13 -9
  200. package/es/render/contributions/render/text-render.js.map +1 -1
  201. package/package.json +5 -3
  202. package/cjs/common/inversify-lite/annotation/post_construct.d.ts +0 -4
  203. package/cjs/common/inversify-lite/annotation/post_construct.js.map +0 -1
  204. package/es/common/inversify-lite/annotation/post_construct.d.ts +0 -4
  205. package/es/common/inversify-lite/annotation/post_construct.js +0 -10
  206. package/es/common/inversify-lite/annotation/post_construct.js.map +0 -1
@@ -2,6 +2,8 @@ import type { ICanvas, Releaseable, IAllocate } from '../interface';
2
2
  export declare class DefaultCanvasAllocate implements IAllocate<ICanvas>, Releaseable {
3
3
  protected pools: ICanvas[];
4
4
  protected _commonCanvas: any;
5
+ protected allocatedCanvas: ICanvas[];
6
+ shareCanvas(): ICanvas;
5
7
  getCommonCanvas(): ICanvas;
6
8
  allocate(data: {
7
9
  width: number;
@@ -4,7 +4,10 @@ import { wrapCanvas } from "../canvas/util";
4
4
 
5
5
  export class DefaultCanvasAllocate {
6
6
  constructor() {
7
- this.pools = [];
7
+ this.pools = [], this.allocatedCanvas = [];
8
+ }
9
+ shareCanvas() {
10
+ return this.allocatedCanvas.length ? this.allocatedCanvas[0] : this.getCommonCanvas();
8
11
  }
9
12
  getCommonCanvas() {
10
13
  return this._commonCanvas || (this._commonCanvas = this.allocate({
@@ -14,9 +17,12 @@ export class DefaultCanvasAllocate {
14
17
  })), this._commonCanvas;
15
18
  }
16
19
  allocate(data) {
17
- if (!this.pools.length) return wrapCanvas(Object.assign({
18
- nativeCanvas: application.global.createCanvas(data)
19
- }, data));
20
+ if (!this.pools.length) {
21
+ const c = wrapCanvas(Object.assign({
22
+ nativeCanvas: application.global.createCanvas(data)
23
+ }, data));
24
+ return this.allocatedCanvas.push(c), c;
25
+ }
20
26
  const m = this.pools.pop();
21
27
  return m.resize(data.width, data.height), m.dpr = data.dpr, m;
22
28
  }
@@ -26,10 +32,10 @@ export class DefaultCanvasAllocate {
26
32
  width: canvas.width / canvas.dpr,
27
33
  height: canvas.height / canvas.dpr,
28
34
  dpr: canvas.dpr
29
- };
30
- return wrapCanvas(Object.assign({
35
+ }, c = wrapCanvas(Object.assign({
31
36
  nativeCanvas: application.global.createCanvas(data)
32
37
  }, data));
38
+ return this.allocatedCanvas.push(c), c;
33
39
  }
34
40
  const m = this.pools.pop();
35
41
  return m.width = canvas.width, m.height = canvas.height, m;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/allocator/canvas-allocate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,OAAO,qBAAqB;IAAlC;QACY,UAAK,GAAc,EAAE,CAAC;IA8ClC,CAAC;IA5CC,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;SACzE;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,QAAQ,CAAC,IAAoD;QAC3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACtB,OAAO,UAAU,iBACf,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAChD,IAAI,EACP,CAAC;SACJ;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,aAAa,CAAC,MAAe;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG;gBAChC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG;gBAClC,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB,CAAC;YACF,OAAO,UAAU,iBACf,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAChD,IAAI,EACP,CAAC;SACJ;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,CAAU;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,MAAW;QACpB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC","file":"canvas-allocate.js","sourcesContent":["import { application } from '../application';\nimport type { ICanvas, Releaseable, IAllocate } from '../interface';\nimport { wrapCanvas } from '../canvas/util';\n\nexport class DefaultCanvasAllocate implements IAllocate<ICanvas>, Releaseable {\n protected pools: ICanvas[] = [];\n protected _commonCanvas: any;\n getCommonCanvas(): ICanvas {\n if (!this._commonCanvas) {\n this._commonCanvas = this.allocate({ width: 100, height: 100, dpr: 2 });\n }\n return this._commonCanvas;\n }\n allocate(data: { width: number; height: number; dpr: number }): ICanvas {\n if (!this.pools.length) {\n return wrapCanvas({\n nativeCanvas: application.global.createCanvas(data),\n ...data\n });\n }\n const m = this.pools.pop();\n m.resize(data.width, data.height);\n m.dpr = data.dpr;\n return m;\n }\n allocateByObj(canvas: ICanvas): ICanvas {\n if (!this.pools.length) {\n const data = {\n width: canvas.width / canvas.dpr,\n height: canvas.height / canvas.dpr,\n dpr: canvas.dpr\n };\n return wrapCanvas({\n nativeCanvas: application.global.createCanvas(data),\n ...data\n });\n }\n const m = this.pools.pop();\n m.width = canvas.width;\n m.height = canvas.height;\n return m;\n }\n free(d: ICanvas) {\n this.pools.push(d);\n }\n get length(): number {\n return this.pools.length;\n }\n release(...params: any): void {\n this.pools = [];\n }\n}\n\nexport const canvasAllocate = new DefaultCanvasAllocate();\n"]}
1
+ {"version":3,"sources":["../src/allocator/canvas-allocate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,OAAO,qBAAqB;IAAlC;QACY,UAAK,GAAc,EAAE,CAAC;QAGtB,oBAAe,GAAc,EAAE,CAAC;IAuD5C,CAAC;IAtDC,WAAW;QACT,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;YAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SAChC;QACD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IACD,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;SACzE;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,QAAQ,CAAC,IAAoD;QAC3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACtB,MAAM,CAAC,GAAG,UAAU,iBAClB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAChD,IAAI,EACP,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC;SACV;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,aAAa,CAAC,MAAe;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG;gBAChC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG;gBAClC,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB,CAAC;YACF,MAAM,CAAC,GAAG,UAAU,iBAClB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAChD,IAAI,EACP,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC;SACV;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,CAAU;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,MAAW;QACpB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC","file":"canvas-allocate.js","sourcesContent":["import { application } from '../application';\nimport type { ICanvas, Releaseable, IAllocate } from '../interface';\nimport { wrapCanvas } from '../canvas/util';\n\nexport class DefaultCanvasAllocate implements IAllocate<ICanvas>, Releaseable {\n protected pools: ICanvas[] = [];\n protected _commonCanvas: any;\n // 已经被分配出去的canvas\n protected allocatedCanvas: ICanvas[] = [];\n shareCanvas(): ICanvas {\n if (this.allocatedCanvas.length) {\n return this.allocatedCanvas[0];\n }\n return this.getCommonCanvas();\n }\n getCommonCanvas(): ICanvas {\n if (!this._commonCanvas) {\n this._commonCanvas = this.allocate({ width: 100, height: 100, dpr: 2 });\n }\n return this._commonCanvas;\n }\n allocate(data: { width: number; height: number; dpr: number }): ICanvas {\n if (!this.pools.length) {\n const c = wrapCanvas({\n nativeCanvas: application.global.createCanvas(data),\n ...data\n });\n this.allocatedCanvas.push(c);\n return c;\n }\n const m = this.pools.pop();\n m.resize(data.width, data.height);\n m.dpr = data.dpr;\n return m;\n }\n allocateByObj(canvas: ICanvas): ICanvas {\n if (!this.pools.length) {\n const data = {\n width: canvas.width / canvas.dpr,\n height: canvas.height / canvas.dpr,\n dpr: canvas.dpr\n };\n const c = wrapCanvas({\n nativeCanvas: application.global.createCanvas(data),\n ...data\n });\n this.allocatedCanvas.push(c);\n return c;\n }\n const m = this.pools.pop();\n m.width = canvas.width;\n m.height = canvas.height;\n return m;\n }\n free(d: ICanvas) {\n this.pools.push(d);\n }\n get length(): number {\n return this.pools.length;\n }\n release(...params: any): void {\n this.pools = [];\n }\n}\n\nexport const canvasAllocate = new DefaultCanvasAllocate();\n"]}
@@ -0,0 +1 @@
1
+ export declare const inject: <T = unknown>(serviceIdentifier: any) => (target: import("./inject_base").DecoratorTarget<T>, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => void;
@@ -0,0 +1,6 @@
1
+ import { INJECT_TAG } from "../metadata_keys";
2
+
3
+ import { injectBase } from "./inject_base";
4
+
5
+ export const inject = injectBase(INJECT_TAG);
6
+ //# sourceMappingURL=inject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/annotation/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC","file":"inject.js","sourcesContent":["import { INJECT_TAG } from '../metadata_keys';\nimport { injectBase } from './inject_base';\n\nexport const inject = injectBase(INJECT_TAG);\n"]}
@@ -0,0 +1,14 @@
1
+ import { Metadata } from '../meta-data';
2
+ export declare function createTaggedDecorator(metadata: Metadata): <T>(target: DecoratorTarget, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => void;
3
+ type Prototype<T> = {
4
+ [Property in keyof T]: T[Property] extends NewableFunction ? T[Property] : T[Property] | undefined;
5
+ } & {
6
+ constructor: NewableFunction;
7
+ };
8
+ interface ConstructorFunction<T = Record<string, unknown>> {
9
+ new (...args: unknown[]): T;
10
+ prototype: Prototype<T>;
11
+ }
12
+ export type DecoratorTarget<T = unknown> = ConstructorFunction<T> | Prototype<T>;
13
+ export declare function injectBase(metadataKey: string): <T = unknown>(serviceIdentifier: any) => (target: DecoratorTarget<T>, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => void;
14
+ export {};
@@ -0,0 +1,29 @@
1
+ import { Metadata } from "../meta-data";
2
+
3
+ import { TAGGED } from "../metadata_keys";
4
+
5
+ import Reflect from "../../Reflect-metadata";
6
+
7
+ function _tagParameterOrProperty(metadataKey, annotationTarget, key, metadata) {
8
+ const metadatas = [ metadata ];
9
+ let paramsOrPropertiesMetadata = {};
10
+ Reflect.hasOwnMetadata(metadataKey, annotationTarget) && (paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget));
11
+ let paramOrPropertyMetadata = paramsOrPropertiesMetadata[key];
12
+ void 0 === paramOrPropertyMetadata && (paramOrPropertyMetadata = []), paramOrPropertyMetadata.push(...metadatas),
13
+ paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata, Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);
14
+ }
15
+
16
+ function tagParameter(annotationTarget, parameterName, parameterIndex, metadata) {
17
+ _tagParameterOrProperty(TAGGED, annotationTarget, parameterIndex.toString(), metadata);
18
+ }
19
+
20
+ export function createTaggedDecorator(metadata) {
21
+ return (target, targetKey, indexOrPropertyDescriptor) => {
22
+ tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);
23
+ };
24
+ }
25
+
26
+ export function injectBase(metadataKey) {
27
+ return serviceIdentifier => (target, targetKey, indexOrPropertyDescriptor) => createTaggedDecorator(new Metadata(metadataKey, serviceIdentifier))(target, targetKey, indexOrPropertyDescriptor);
28
+ }
29
+ //# sourceMappingURL=inject_base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/annotation/inject_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAE7C,SAAS,uBAAuB,CAC9B,WAAmB,EACnB,gBAAiC,EACjC,GAAoB,EACpB,QAAkB;IAElB,MAAM,SAAS,GAAe,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,0BAA0B,GAAoD,EAAE,CAAC;IAErF,IAAK,OAAe,CAAC,cAAc,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE;QAClE,0BAA0B,GAAI,OAAe,CAAC,WAAW,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;KAC1F;IAED,IAAI,uBAAuB,GAA2B,0BAA0B,CAAC,GAAa,CAAC,CAAC;IAEhG,IAAI,uBAAuB,KAAK,SAAS,EAAE;QACzC,uBAAuB,GAAG,EAAE,CAAC;KAC9B;IAGD,uBAAuB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3C,0BAA0B,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC;IACzD,OAAe,CAAC,cAAc,CAAC,WAAW,EAAE,0BAA0B,EAAE,gBAAgB,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,YAAY,CACnB,gBAAiC,EACjC,aAA0C,EAC1C,cAAsB,EACtB,QAAkB;IAElB,uBAAuB,CAAC,MAAM,EAAE,gBAAuC,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACtD,OAAO,CAAI,MAAuB,EAAE,SAA2B,EAAE,yBAAkC,EAAE,EAAE;QACrG,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,OAAO,CAAc,iBAAsB,EAAE,EAAE;QAC7C,OAAO,CAAC,MAA0B,EAAE,SAA2B,EAAE,yBAAkC,EAAE,EAAE;YACrG,OAAO,qBAAqB,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CACxE,MAAM,EACN,SAAS,EACT,yBAAyB,CAC1B,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","file":"inject_base.js","sourcesContent":["import { Metadata } from '../meta-data';\nimport { TAGGED } from '../metadata_keys';\nimport Reflect from '../../Reflect-metadata';\n\nfunction _tagParameterOrProperty(\n metadataKey: string,\n annotationTarget: NewableFunction,\n key: string | symbol,\n metadata: Metadata\n) {\n const metadatas: Metadata[] = [metadata];\n\n let paramsOrPropertiesMetadata: Record<string | symbol, Metadata[] | undefined> = {};\n // read metadata if available\n if ((Reflect as any).hasOwnMetadata(metadataKey, annotationTarget)) {\n paramsOrPropertiesMetadata = (Reflect as any).getMetadata(metadataKey, annotationTarget);\n }\n\n let paramOrPropertyMetadata: Metadata[] | undefined = paramsOrPropertiesMetadata[key as string];\n\n if (paramOrPropertyMetadata === undefined) {\n paramOrPropertyMetadata = [];\n }\n\n // set metadata\n paramOrPropertyMetadata.push(...metadatas);\n paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;\n (Reflect as any).defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget);\n}\n\nfunction tagParameter(\n annotationTarget: DecoratorTarget,\n parameterName: string | symbol | undefined,\n parameterIndex: number,\n metadata: Metadata\n) {\n _tagParameterOrProperty(TAGGED, annotationTarget as ConstructorFunction, parameterIndex.toString(), metadata);\n}\n\nexport function createTaggedDecorator(metadata: Metadata) {\n return <T>(target: DecoratorTarget, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => {\n tagParameter(target, targetKey, indexOrPropertyDescriptor, metadata);\n };\n}\n\ntype Prototype<T> = {\n [Property in keyof T]: T[Property] extends NewableFunction ? T[Property] : T[Property] | undefined;\n} & { constructor: NewableFunction };\n\ninterface ConstructorFunction<T = Record<string, unknown>> {\n new (...args: unknown[]): T;\n prototype: Prototype<T>;\n}\n\nexport type DecoratorTarget<T = unknown> = ConstructorFunction<T> | Prototype<T>;\n\nexport function injectBase(metadataKey: string) {\n return <T = unknown>(serviceIdentifier: any) => {\n return (target: DecoratorTarget<T>, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => {\n return createTaggedDecorator(new Metadata(metadataKey, serviceIdentifier))(\n target,\n targetKey,\n indexOrPropertyDescriptor\n );\n };\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare function injectable(): <T extends abstract new (...args: any) => unknown>(target: T) => T;
@@ -0,0 +1,10 @@
1
+ import * as METADATA_KEY from "../metadata_keys";
2
+
3
+ import Reflect from "../../Reflect-metadata";
4
+
5
+ export function injectable() {
6
+ return function(target) {
7
+ return Reflect.defineMetadata(METADATA_KEY.PARAM_TYPES, null, target), target;
8
+ };
9
+ }
10
+ //# sourceMappingURL=injectable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/annotation/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,kBAAkB,CAAC;AACjD,OAAO,OAAO,MAAM,wBAAwB,CAAC;AAE7C,MAAM,UAAU,UAAU;IACxB,OAAO,UAA4D,MAAS;QACzE,OAAe,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAExE,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC","file":"injectable.js","sourcesContent":["import * as METADATA_KEY from '../metadata_keys';\nimport Reflect from '../../Reflect-metadata';\n\nexport function injectable() {\n return function <T extends abstract new (...args: any) => unknown>(target: T) {\n (Reflect as any).defineMetadata(METADATA_KEY.PARAM_TYPES, null, target);\n\n return target;\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const multiInject: <T = unknown>(serviceIdentifier: any) => (target: import("./inject_base").DecoratorTarget<T>, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => void;
@@ -0,0 +1,6 @@
1
+ import { MULTI_INJECT_TAG } from "../metadata_keys";
2
+
3
+ import { injectBase } from "./inject_base";
4
+
5
+ export const multiInject = injectBase(MULTI_INJECT_TAG);
6
+ //# sourceMappingURL=multi_inject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/annotation/multi_inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC","file":"multi_inject.js","sourcesContent":["import { MULTI_INJECT_TAG } from '../metadata_keys';\nimport { injectBase } from './inject_base';\n\nexport const multiInject = injectBase(MULTI_INJECT_TAG);\n"]}
@@ -0,0 +1 @@
1
+ export declare function named(name: string | number | symbol): <T>(target: import("./inject_base").DecoratorTarget<unknown>, targetKey?: string | symbol, indexOrPropertyDescriptor?: number) => void;
@@ -0,0 +1,10 @@
1
+ import { Metadata } from "../meta-data";
2
+
3
+ import { NAMED_TAG } from "../metadata_keys";
4
+
5
+ import { createTaggedDecorator } from "./inject_base";
6
+
7
+ export function named(name) {
8
+ return createTaggedDecorator(new Metadata(NAMED_TAG, name));
9
+ }
10
+ //# sourceMappingURL=named.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/annotation/named.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,UAAU,KAAK,CAAC,IAA8B;IAClD,OAAO,qBAAqB,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC","file":"named.js","sourcesContent":["import { Metadata } from '../meta-data';\nimport { NAMED_TAG } from '../metadata_keys';\nimport { createTaggedDecorator } from './inject_base';\n\nexport function named(name: string | number | symbol) {\n return createTaggedDecorator(new Metadata(NAMED_TAG, name));\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { interfaces } from './interfaces';
2
+ declare class Binding<TActivated> implements interfaces.Binding<TActivated> {
3
+ id: number;
4
+ moduleId: interfaces.ContainerModuleBase['id'];
5
+ activated: boolean;
6
+ serviceIdentifier: interfaces.ServiceIdentifier<TActivated>;
7
+ implementationType: interfaces.Newable<TActivated> | TActivated | null;
8
+ cache: TActivated | null;
9
+ dynamicValue: interfaces.DynamicValue<TActivated> | null;
10
+ scope: interfaces.BindingScope;
11
+ type: interfaces.BindingType;
12
+ factory: interfaces.FactoryCreator<unknown> | null;
13
+ provider: interfaces.ProviderCreator<unknown> | null;
14
+ constraint: interfaces.ConstraintFunction;
15
+ constructor(serviceIdentifier: interfaces.ServiceIdentifier<TActivated>, scope: interfaces.BindingScope);
16
+ clone(): interfaces.Binding<TActivated>;
17
+ }
18
+ export { Binding };
@@ -0,0 +1,22 @@
1
+ import { Generator } from "../generator";
2
+
3
+ import { BindingScopeEnum, BindingTypeEnum } from "./literal_types";
4
+
5
+ class Binding {
6
+ constructor(serviceIdentifier, scope) {
7
+ this.id = Generator.GenAutoIncrementId(), this.activated = !1, this.serviceIdentifier = serviceIdentifier,
8
+ this.scope = scope, this.type = BindingTypeEnum.Invalid, this.constraint = request => !0,
9
+ this.implementationType = null, this.cache = null, this.factory = null, this.provider = null,
10
+ this.dynamicValue = null;
11
+ }
12
+ clone() {
13
+ const clone = new Binding(this.serviceIdentifier, this.scope);
14
+ return clone.activated = clone.scope === BindingScopeEnum.Singleton && this.activated,
15
+ clone.implementationType = this.implementationType, clone.dynamicValue = this.dynamicValue,
16
+ clone.scope = this.scope, clone.type = this.type, clone.provider = this.provider,
17
+ clone.constraint = this.constraint, clone.cache = this.cache, clone;
18
+ }
19
+ }
20
+
21
+ export { Binding };
22
+ //# sourceMappingURL=binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEpE,MAAM,OAAO;IA0CX,YAAY,iBAA2D,EAAE,KAA8B;QACrG,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,CAAC,OAAkC,EAAE,EAAE,CAAC,IAAI,CAAC;QAC/D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAGrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,KAAK,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QACtF,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACnD,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAGnC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,OAAO,EAAE,OAAO,EAAE,CAAC","file":"binding.js","sourcesContent":["import { Generator } from '../generator';\nimport type { interfaces } from './interfaces';\nimport { BindingScopeEnum, BindingTypeEnum } from './literal_types';\n\nclass Binding<TActivated> implements interfaces.Binding<TActivated> {\n id: number;\n moduleId!: interfaces.ContainerModuleBase['id'];\n\n // Determines weather the bindings has been already activated\n // The activation action takes place when an instance is resolved\n // If the scope is singleton it only happens once\n activated: boolean;\n\n // A runtime identifier because at runtime we don't have interfaces\n serviceIdentifier: interfaces.ServiceIdentifier<TActivated>;\n\n // constructor from binding to or toConstructor\n implementationType: interfaces.Newable<TActivated> | TActivated | null;\n\n // Cache used to allow singleton scope and BindingType.ConstantValue bindings\n cache: TActivated | null;\n\n // Cache used to allow BindingType.DynamicValue bindings\n dynamicValue: interfaces.DynamicValue<TActivated> | null;\n\n // The scope mode to be used\n scope: interfaces.BindingScope;\n\n // The kind of binding\n type: interfaces.BindingType;\n\n // A factory method used in BindingType.Factory bindings\n factory: interfaces.FactoryCreator<unknown> | null;\n\n // An async factory method used in BindingType.Provider bindings\n provider: interfaces.ProviderCreator<unknown> | null;\n\n // A constraint used to limit the contexts in which this binding is applicable\n constraint: interfaces.ConstraintFunction;\n\n // // On activation handler (invoked just before an instance is added to cache and injected)\n // onActivation: interfaces.BindingActivation<TActivated> | null;\n\n // // On deactivation handler (invoked just before an instance is unbinded and removed from container)\n // onDeactivation: interfaces.BindingDeactivation<TActivated> | null;\n\n constructor(serviceIdentifier: interfaces.ServiceIdentifier<TActivated>, scope: interfaces.BindingScope) {\n this.id = Generator.GenAutoIncrementId();\n this.activated = false;\n this.serviceIdentifier = serviceIdentifier;\n this.scope = scope;\n this.type = BindingTypeEnum.Invalid;\n this.constraint = (request: interfaces.Request | null) => true;\n this.implementationType = null;\n this.cache = null;\n this.factory = null;\n this.provider = null;\n // this.onActivation = null;\n // this.onDeactivation = null;\n this.dynamicValue = null;\n }\n\n clone(): interfaces.Binding<TActivated> {\n const clone = new Binding(this.serviceIdentifier, this.scope);\n clone.activated = clone.scope === BindingScopeEnum.Singleton ? this.activated : false;\n clone.implementationType = this.implementationType;\n clone.dynamicValue = this.dynamicValue;\n clone.scope = this.scope;\n clone.type = this.type;\n // clone.factory = this.factory;\n clone.provider = this.provider;\n clone.constraint = this.constraint;\n // clone.onActivation = this.onActivation;\n // clone.onDeactivation = this.onDeactivation;\n clone.cache = this.cache;\n return clone;\n }\n}\n\nexport { Binding };\n"]}
@@ -0,0 +1,28 @@
1
+ import type { interfaces } from './interfaces';
2
+ export declare class Container {
3
+ id: number;
4
+ readonly options: interfaces.ContainerOptions;
5
+ private _bindingDictionary;
6
+ private _metadataReader;
7
+ constructor(containerOptions?: interfaces.ContainerOptions);
8
+ load(module: interfaces.ContainerModule): void;
9
+ get<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): T;
10
+ getAll<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): T[];
11
+ getTagged<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T;
12
+ getNamed<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, named: string | number | symbol): T;
13
+ isBound(serviceIdentifier: interfaces.ServiceIdentifier<unknown>): boolean;
14
+ bind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T>;
15
+ unbind(serviceIdentifier: interfaces.ServiceIdentifier): void;
16
+ rebind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T>;
17
+ private _getContainerModuleHelpersFactory;
18
+ private _getNotAllArgs;
19
+ private _getAllArgs;
20
+ private _get;
21
+ private _getChildRequest;
22
+ private _resolveFromBinding;
23
+ private _getResolvedFromBinding;
24
+ private _resolveInstance;
25
+ private _createInstance;
26
+ private _resolveRequests;
27
+ private _saveToScope;
28
+ }
@@ -0,0 +1,155 @@
1
+ import { Generator } from "../generator";
2
+
3
+ import { Binding } from "./binding";
4
+
5
+ import { BindingScopeEnum, BindingTypeEnum } from "./literal_types";
6
+
7
+ import { INJECT_TAG, MULTI_INJECT_TAG, NAMED_TAG } from "./metadata_keys";
8
+
9
+ import { MetadataReader } from "./metadata_reader";
10
+
11
+ import { BindingToSyntax } from "./syntax/binding_to_syntax";
12
+
13
+ export class Container {
14
+ constructor(containerOptions) {
15
+ const options = containerOptions || {};
16
+ options.defaultScope = options.defaultScope || BindingScopeEnum.Transient, this.options = options,
17
+ this.id = Generator.GenAutoIncrementId(), this._bindingDictionary = new Map, this._metadataReader = new MetadataReader;
18
+ }
19
+ load(module) {
20
+ const containerModuleHelpers = this._getContainerModuleHelpersFactory()(module.id);
21
+ module.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction);
22
+ }
23
+ get(serviceIdentifier) {
24
+ const getArgs = this._getNotAllArgs(serviceIdentifier, !1);
25
+ return this._get(getArgs);
26
+ }
27
+ getAll(serviceIdentifier) {
28
+ const getArgs = this._getAllArgs(serviceIdentifier);
29
+ return this._get(getArgs);
30
+ }
31
+ getTagged(serviceIdentifier, key, value) {
32
+ const getArgs = this._getNotAllArgs(serviceIdentifier, !1, key, value);
33
+ return this._get(getArgs);
34
+ }
35
+ getNamed(serviceIdentifier, named) {
36
+ return this.getTagged(serviceIdentifier, NAMED_TAG, named);
37
+ }
38
+ isBound(serviceIdentifier) {
39
+ return this._bindingDictionary.has(serviceIdentifier);
40
+ }
41
+ bind(serviceIdentifier) {
42
+ const scope = this.options.defaultScope, binding = new Binding(serviceIdentifier, scope), list = this._bindingDictionary.get(serviceIdentifier) || [];
43
+ return list.push(binding), this._bindingDictionary.set(serviceIdentifier, list),
44
+ new BindingToSyntax(binding);
45
+ }
46
+ unbind(serviceIdentifier) {
47
+ this._bindingDictionary.delete(serviceIdentifier);
48
+ }
49
+ rebind(serviceIdentifier) {
50
+ return this.unbind(serviceIdentifier), this.bind(serviceIdentifier);
51
+ }
52
+ _getContainerModuleHelpersFactory() {
53
+ const setModuleId = (bindingToSyntax, moduleId) => {
54
+ bindingToSyntax._binding.moduleId = moduleId;
55
+ }, getBindFunction = moduleId => serviceIdentifier => {
56
+ const bindingToSyntax = this.bind(serviceIdentifier);
57
+ return setModuleId(bindingToSyntax, moduleId), bindingToSyntax;
58
+ }, getUnbindFunction = () => serviceIdentifier => this.unbind(serviceIdentifier), getIsboundFunction = () => serviceIdentifier => this.isBound(serviceIdentifier), getRebindFunction = moduleId => serviceIdentifier => {
59
+ const bindingToSyntax = this.rebind(serviceIdentifier);
60
+ return setModuleId(bindingToSyntax, moduleId), bindingToSyntax;
61
+ };
62
+ return mId => ({
63
+ bindFunction: getBindFunction(mId),
64
+ isboundFunction: getIsboundFunction(),
65
+ rebindFunction: getRebindFunction(mId),
66
+ unbindFunction: getUnbindFunction(),
67
+ unbindAsyncFunction: serviceIdentifier => null
68
+ });
69
+ }
70
+ _getNotAllArgs(serviceIdentifier, isMultiInject, key, value) {
71
+ return {
72
+ avoidConstraints: !1,
73
+ isMultiInject: isMultiInject,
74
+ serviceIdentifier: serviceIdentifier,
75
+ key: key,
76
+ value: value
77
+ };
78
+ }
79
+ _getAllArgs(serviceIdentifier) {
80
+ return {
81
+ avoidConstraints: !0,
82
+ isMultiInject: !0,
83
+ serviceIdentifier: serviceIdentifier
84
+ };
85
+ }
86
+ _get(getArgs) {
87
+ const result = [];
88
+ return this._bindingDictionary.get(getArgs.serviceIdentifier).forEach((binding => {
89
+ result.push(this._resolveFromBinding(binding));
90
+ })), getArgs.isMultiInject || 1 !== result.length ? result : result[0];
91
+ }
92
+ _getChildRequest(binding) {
93
+ const constr = binding.implementationType, {userGeneratedMetadata: userGeneratedMetadata} = this._metadataReader.getConstructorMetadata(constr), keys = Object.keys(userGeneratedMetadata), arr = [];
94
+ for (let i = 0; i < keys.length; i++) {
95
+ const constructorArgsMetadata = userGeneratedMetadata[i], targetMetadataMap = {};
96
+ constructorArgsMetadata.forEach((md => {
97
+ targetMetadataMap[md.key] = md.value;
98
+ }));
99
+ const metadata = {
100
+ inject: targetMetadataMap[INJECT_TAG],
101
+ multiInject: targetMetadataMap[MULTI_INJECT_TAG]
102
+ }, injectIdentifier = metadata.inject || metadata.multiInject, target = {
103
+ serviceIdentifier: injectIdentifier,
104
+ constructorArgsMetadata: constructorArgsMetadata
105
+ }, request = {
106
+ injectIdentifier: injectIdentifier,
107
+ metadata: constructorArgsMetadata,
108
+ bindings: this._bindingDictionary.get(injectIdentifier).filter((b => b.constraint(target)))
109
+ };
110
+ arr.push(request);
111
+ }
112
+ return arr;
113
+ }
114
+ _resolveFromBinding(binding) {
115
+ const result = this._getResolvedFromBinding(binding);
116
+ return this._saveToScope(binding, result), result;
117
+ }
118
+ _getResolvedFromBinding(binding) {
119
+ let result;
120
+ switch (binding.type) {
121
+ case BindingTypeEnum.ConstantValue:
122
+ case BindingTypeEnum.Function:
123
+ result = binding.cache;
124
+ break;
125
+
126
+ case BindingTypeEnum.Instance:
127
+ result = this._resolveInstance(binding, binding.implementationType);
128
+ break;
129
+
130
+ default:
131
+ result = binding.dynamicValue({
132
+ container: this
133
+ });
134
+ }
135
+ return result;
136
+ }
137
+ _resolveInstance(binding, constr) {
138
+ if (binding.activated) return binding.cache;
139
+ const childRequests = this._getChildRequest(binding);
140
+ return this._createInstance(constr, childRequests);
141
+ }
142
+ _createInstance(constr, childRequests) {
143
+ if (childRequests.length) {
144
+ return new constr(...this._resolveRequests(childRequests));
145
+ }
146
+ return new constr;
147
+ }
148
+ _resolveRequests(childRequests) {
149
+ return childRequests.map((request => request.bindings.length > 1 ? request.bindings.map((binding => this._resolveFromBinding(binding))) : this._resolveFromBinding(request.bindings[0])));
150
+ }
151
+ _saveToScope(binding, result) {
152
+ binding.scope === BindingScopeEnum.Singleton && (binding.cache = result, binding.activated = !0);
153
+ }
154
+ }
155
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAgB7D,MAAM,OAAO,SAAS;IAMpB,YAAY,gBAA8C;QACxD,MAAM,OAAO,GAAG,gBAAgB,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,gBAAgB,CAAC,SAAS,CAAC;QAE1E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,MAAkC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAE5D,MAAM,sBAAsB,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAErD,MAAM,CAAC,QAAQ,CACb,sBAAsB,CAAC,YAA+B,EACtD,sBAAsB,CAAC,cAAc,EACrC,sBAAsB,CAAC,eAAe,EACtC,sBAAsB,CAAC,cAAmC,CAC3D,CAAC;IACJ,CAAC;IAED,GAAG,CAAI,iBAAkD;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAE9D,OAAO,IAAI,CAAC,IAAI,CAAI,OAAO,CAAM,CAAC;IACpC,CAAC;IAED,MAAM,CAAI,iBAAkD;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC,IAAI,CAAI,OAAO,CAAQ,CAAC;IACtC,CAAC;IAED,SAAS,CAAI,iBAAkD,EAAE,GAA6B,EAAE,KAAc;QAC5G,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAE1E,OAAO,IAAI,CAAC,IAAI,CAAI,OAAO,CAAM,CAAC;IACpC,CAAC;IAED,QAAQ,CAAI,iBAAkD,EAAE,KAA+B;QAC7F,OAAO,IAAI,CAAC,SAAS,CAAI,iBAAiB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,iBAAwD;QAC9D,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxD,CAAC;IAGD,IAAI,CAAI,iBAAkD;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACrD,OAAO,IAAI,eAAe,CAAI,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,iBAA+C;QACpD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAI,iBAAkD;QAC1D,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACtC,CAAC;IAEO,iCAAiC;QACvC,MAAM,WAAW,GAAG,CAClB,eAAoD,EACpD,QAA8C,EAC9C,EAAE;YAKA,eACD,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACjC,CAAC,CAAC;QAEF,MAAM,eAAe,GACnB,CAAI,QAA8C,EAAE,EAAE,CACtD,CAAC,iBAA+C,EAAE,EAAE;YAClD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrD,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACvC,OAAO,eAAqC,CAAC;QAC/C,CAAC,CAAC;QAEJ,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC,iBAA+C,EAAE,EAAE;YAClF,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC,iBAA+C,EAAE,EAAE;YACvF,OAAO,IAAW,CAAC;QAErB,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC,iBAA+C,EAAE,EAAE;YACnF,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,MAAM,iBAAiB,GACrB,CAAc,QAA8C,EAAE,EAAE,CAChE,CAAC,iBAA+C,EAAE,EAAE;YAClD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACvD,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACvC,OAAO,eAAqC,CAAC;QAC/C,CAAC,CAAC;QACJ,OAAO,CAAC,GAAyC,EAAE,EAAE,CAAC,CAAC;YACrD,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC;YAClC,eAAe,EAAE,kBAAkB,EAAE;YACrC,cAAc,EAAE,iBAAiB,CAAC,GAAG,CAAC;YACtC,cAAc,EAAE,iBAAiB,EAAE;YACnC,mBAAmB,EAAE,sBAAsB,EAAE;SAC9C,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CACpB,iBAAkD,EAClD,aAAsB,EACtB,GAA0C,EAC1C,KAAe;QAEf,OAAO;YACL,gBAAgB,EAAE,KAAK;YACvB,aAAa;YACb,iBAAiB;YACjB,GAAG;YACH,KAAK;SACN,CAAC;IACJ,CAAC;IAEO,WAAW,CAAI,iBAAkD;QACvE,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,aAAa,EAAE,IAAI;YACnB,iBAAiB;SAClB,CAAC;IACJ,CAAC;IAEO,IAAI,CAAI,OAAmB;QACjC,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAiB,CAAC;QACxF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAI,OAAO,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,CAAC;IAEO,gBAAgB,CAAC,OAAyB;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC1C,MAAM,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,MAAa,CAAC,CAAC;QAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,iBAAiB,GAAG,EAAE,CAAC;YAC7B,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACnC,iBAAiB,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACvC,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC;gBACrC,WAAW,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;aACjD,CAAC;YACF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,WAAW,CAAC;YACjE,MAAM,MAAM,GAAG;gBACb,iBAAiB,EAAE,gBAAgB;gBACnC,uBAAuB;aACxB,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACxE,OAAO,CAAC,CAAC,UAAU,CAAC,MAAa,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG;gBACd,gBAAgB;gBAChB,QAAQ,EAAE,uBAAuB;gBACjC,QAAQ;aACT,CAAC;YAEF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACnB;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,mBAAmB,CAAI,OAAmB;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAI,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,uBAAuB,CAAI,OAAmB;QACpD,IAAI,MAAS,CAAC;QACd,QAAQ,OAAO,CAAC,IAAI,EAAE;YACpB,KAAK,eAAe,CAAC,aAAa,CAAC;YACnC,KAAK,eAAe,CAAC,QAAQ;gBAC3B,MAAM,GAAG,OAAO,CAAC,KAAU,CAAC;gBAC5B,MAAM;YACR,KAAK,eAAe,CAAC,QAAQ;gBAC3B,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAI,OAAO,EAAE,OAAO,CAAC,kBAA2C,CAAC,CAAC;gBAChG,MAAM;YACR;gBACE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAS,CAAC,CAAC;SAC7D;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CAAI,OAAmB,EAAE,MAA6B;QAC5E,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,OAAO,OAAO,CAAC,KAAK,CAAC;SACtB;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC;IAEO,eAAe,CAAI,MAA6B,EAAE,aAA8B;QACtF,IAAI,aAAa,CAAC,MAAM,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC;YACpC,OAAO,GAAG,CAAC;SACZ;QACD,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,gBAAgB,CAAC,aAA8B;QACrD,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACjC,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAChC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBACpE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,OAAyB,EAAE,MAAW;QACzD,IAAI,OAAO,CAAC,KAAK,KAAK,gBAAgB,CAAC,SAAS,EAAE;YAChD,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC;YACvB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;SAC1B;IACH,CAAC;CACF","file":"container.js","sourcesContent":["import { Generator } from '../generator';\nimport { Binding } from './binding';\nimport type { interfaces } from './interfaces';\nimport { BindingScopeEnum, BindingTypeEnum } from './literal_types';\nimport { Metadata } from './meta-data';\nimport { INJECT_TAG, MULTI_INJECT_TAG, NAMED_TAG } from './metadata_keys';\nimport { MetadataReader } from './metadata_reader';\nimport { BindingToSyntax } from './syntax/binding_to_syntax';\n\ninterface IChildRequest {\n injectIdentifier: any;\n metadata: interfaces.Metadata<unknown>[];\n bindings: Binding<unknown>[];\n}\n\ninterface GetArgs<T> {\n avoidConstraints: boolean;\n isMultiInject: boolean;\n serviceIdentifier: interfaces.ServiceIdentifier<T>;\n key: string | symbol;\n value: any;\n}\n\nexport class Container {\n id: number;\n readonly options: interfaces.ContainerOptions;\n private _bindingDictionary: Map<any, Binding<unknown>[]>;\n private _metadataReader: interfaces.MetadataReader;\n\n constructor(containerOptions?: interfaces.ContainerOptions) {\n const options = containerOptions || {};\n options.defaultScope = options.defaultScope || BindingScopeEnum.Transient;\n // console.log(this);\n this.options = options;\n this.id = Generator.GenAutoIncrementId();\n this._bindingDictionary = new Map();\n this._metadataReader = new MetadataReader();\n }\n\n load(module: interfaces.ContainerModule) {\n const getHelpers = this._getContainerModuleHelpersFactory();\n\n const containerModuleHelpers = getHelpers(module.id);\n\n module.registry(\n containerModuleHelpers.bindFunction as interfaces.Bind,\n containerModuleHelpers.unbindFunction,\n containerModuleHelpers.isboundFunction,\n containerModuleHelpers.rebindFunction as interfaces.Rebind\n );\n }\n\n get<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): T {\n const getArgs = this._getNotAllArgs(serviceIdentifier, false);\n\n return this._get<T>(getArgs) as T;\n }\n\n getAll<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): T[] {\n const getArgs = this._getAllArgs(serviceIdentifier);\n\n return this._get<T>(getArgs) as T[];\n }\n\n getTagged<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, key: string | number | symbol, value: unknown): T {\n const getArgs = this._getNotAllArgs(serviceIdentifier, false, key, value);\n\n return this._get<T>(getArgs) as T;\n }\n\n getNamed<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, named: string | number | symbol): T {\n return this.getTagged<T>(serviceIdentifier, NAMED_TAG, named);\n }\n\n isBound(serviceIdentifier: interfaces.ServiceIdentifier<unknown>): boolean {\n return this._bindingDictionary.has(serviceIdentifier);\n }\n\n // Registers a type binding\n bind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T> {\n const scope = this.options.defaultScope;\n const binding = new Binding<T>(serviceIdentifier, scope);\n const list = this._bindingDictionary.get(serviceIdentifier) || [];\n list.push(binding);\n this._bindingDictionary.set(serviceIdentifier, list);\n return new BindingToSyntax<T>(binding);\n }\n\n unbind(serviceIdentifier: interfaces.ServiceIdentifier): void {\n this._bindingDictionary.delete(serviceIdentifier);\n }\n\n rebind<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T> {\n this.unbind(serviceIdentifier);\n return this.bind(serviceIdentifier);\n }\n\n private _getContainerModuleHelpersFactory() {\n const setModuleId = (\n bindingToSyntax: interfaces.BindingToSyntax<unknown>,\n moduleId: interfaces.ContainerModuleBase['id']\n ) => {\n // TODO: Implement an internal type `_BindingToSyntax<T>` wherein this member\n // can be public. Let `BindingToSyntax<T>` be the presentational type that\n // depends on it, and does not expose this member as public.\n (\n bindingToSyntax as unknown as { _binding: { moduleId: interfaces.ContainerModuleBase['id'] } }\n )._binding.moduleId = moduleId;\n };\n\n const getBindFunction =\n <T>(moduleId: interfaces.ContainerModuleBase['id']) =>\n (serviceIdentifier: interfaces.ServiceIdentifier) => {\n const bindingToSyntax = this.bind(serviceIdentifier);\n setModuleId(bindingToSyntax, moduleId);\n return bindingToSyntax as BindingToSyntax<T>;\n };\n\n const getUnbindFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return this.unbind(serviceIdentifier);\n };\n\n const getUnbindAsyncFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return null as any;\n // return this.unbindAsync(serviceIdentifier);\n };\n\n const getIsboundFunction = () => (serviceIdentifier: interfaces.ServiceIdentifier) => {\n return this.isBound(serviceIdentifier);\n };\n\n const getRebindFunction =\n <T = unknown>(moduleId: interfaces.ContainerModuleBase['id']) =>\n (serviceIdentifier: interfaces.ServiceIdentifier) => {\n const bindingToSyntax = this.rebind(serviceIdentifier);\n setModuleId(bindingToSyntax, moduleId);\n return bindingToSyntax as BindingToSyntax<T>;\n };\n return (mId: interfaces.ContainerModuleBase['id']) => ({\n bindFunction: getBindFunction(mId),\n isboundFunction: getIsboundFunction(),\n rebindFunction: getRebindFunction(mId),\n unbindFunction: getUnbindFunction(),\n unbindAsyncFunction: getUnbindAsyncFunction()\n });\n }\n\n private _getNotAllArgs<T>(\n serviceIdentifier: interfaces.ServiceIdentifier<T>,\n isMultiInject: boolean,\n key?: string | number | symbol | undefined,\n value?: unknown\n ): any {\n return {\n avoidConstraints: false,\n isMultiInject,\n serviceIdentifier,\n key,\n value\n };\n }\n\n private _getAllArgs<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): any {\n return {\n avoidConstraints: true,\n isMultiInject: true,\n serviceIdentifier\n };\n }\n\n private _get<T>(getArgs: GetArgs<T>): T | T[] {\n const result: T[] = [];\n const bindings = this._bindingDictionary.get(getArgs.serviceIdentifier) as Binding<T>[];\n bindings.forEach(binding => {\n result.push(this._resolveFromBinding<T>(binding));\n });\n\n return !getArgs.isMultiInject && result.length === 1 ? result[0] : result;\n }\n\n private _getChildRequest(binding: Binding<unknown>) {\n const constr = binding.implementationType;\n const { userGeneratedMetadata } = this._metadataReader.getConstructorMetadata(constr as any);\n const keys = Object.keys(userGeneratedMetadata);\n const arr = [];\n for (let i = 0; i < keys.length; i++) {\n const constructorArgsMetadata = userGeneratedMetadata[i];\n const targetMetadataMap = {};\n constructorArgsMetadata.forEach(md => {\n targetMetadataMap[md.key] = md.value;\n });\n const metadata = {\n inject: targetMetadataMap[INJECT_TAG],\n multiInject: targetMetadataMap[MULTI_INJECT_TAG]\n };\n const injectIdentifier = metadata.inject || metadata.multiInject;\n const target = {\n serviceIdentifier: injectIdentifier,\n constructorArgsMetadata\n };\n const bindings = this._bindingDictionary.get(injectIdentifier).filter(b => {\n return b.constraint(target as any);\n });\n const request = {\n injectIdentifier,\n metadata: constructorArgsMetadata,\n bindings\n };\n\n arr.push(request);\n }\n\n return arr;\n }\n\n private _resolveFromBinding<T>(binding: Binding<T>): T {\n const result = this._getResolvedFromBinding<T>(binding);\n\n this._saveToScope(binding, result);\n\n return result;\n }\n\n private _getResolvedFromBinding<T>(binding: Binding<T>) {\n let result: T;\n switch (binding.type) {\n case BindingTypeEnum.ConstantValue:\n case BindingTypeEnum.Function:\n result = binding.cache as T;\n break;\n case BindingTypeEnum.Instance:\n result = this._resolveInstance<T>(binding, binding.implementationType as interfaces.Newable<T>);\n break;\n default:\n result = binding.dynamicValue({ container: this } as any);\n }\n\n return result;\n }\n\n private _resolveInstance<T>(binding: Binding<T>, constr: interfaces.Newable<T>): T {\n if (binding.activated) {\n return binding.cache;\n }\n\n const childRequests = this._getChildRequest(binding);\n return this._createInstance(constr, childRequests);\n }\n\n private _createInstance<T>(constr: interfaces.Newable<T>, childRequests: IChildRequest[]) {\n if (childRequests.length) {\n const resolved = this._resolveRequests(childRequests);\n const obj = new constr(...resolved);\n return obj;\n }\n const obj = new constr();\n return obj;\n }\n\n private _resolveRequests(childRequests: IChildRequest[]): any[] {\n return childRequests.map(request => {\n return request.bindings.length > 1\n ? request.bindings.map(binding => this._resolveFromBinding(binding))\n : this._resolveFromBinding(request.bindings[0]);\n });\n }\n\n private _saveToScope(binding: Binding<unknown>, result: any) {\n if (binding.scope === BindingScopeEnum.Singleton) {\n binding.cache = result;\n binding.activated = true;\n }\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { interfaces } from '../inversify-lite';
2
+ export declare class ContainerModule {
3
+ id: number;
4
+ registry: interfaces.ContainerModuleCallBack;
5
+ constructor(registry: interfaces.ContainerModuleCallBack);
6
+ }
@@ -0,0 +1,8 @@
1
+ import { Generator } from "../generator";
2
+
3
+ export class ContainerModule {
4
+ constructor(registry) {
5
+ this.id = Generator.GenAutoIncrementId(), this.registry = registry;
6
+ }
7
+ }
8
+ //# sourceMappingURL=cotainer-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/cotainer-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,OAAO,eAAe;IAI1B,YAAY,QAA4C;QACtD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF","file":"cotainer-module.js","sourcesContent":["import { Generator } from '../generator';\nimport type { interfaces } from '../inversify-lite';\n\nexport class ContainerModule {\n id: number;\n registry: interfaces.ContainerModuleCallBack;\n\n constructor(registry: interfaces.ContainerModuleCallBack) {\n this.id = Generator.GenAutoIncrementId();\n this.registry = registry;\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export { ContainerModule } from './cotainer-module';
2
+ export { inject } from './annotation/inject';
3
+ export { multiInject } from './annotation/multi_inject';
4
+ export { injectable } from './annotation/injectable';
5
+ export { named } from './annotation/named';
6
+ export { Container } from './container';
7
+ export * from './interfaces';
@@ -0,0 +1,14 @@
1
+ export { ContainerModule } from "./cotainer-module";
2
+
3
+ export { inject } from "./annotation/inject";
4
+
5
+ export { multiInject } from "./annotation/multi_inject";
6
+
7
+ export { injectable } from "./annotation/injectable";
8
+
9
+ export { named } from "./annotation/named";
10
+
11
+ export { Container } from "./container";
12
+
13
+ export * from "./interfaces";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/inversify/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,cAAc,cAAc,CAAC","file":"index.js","sourcesContent":["/**\n * 该文件夹下所有文件来源于inversify\n * https://github.com/inversify/InversifyJS\n * The MIT License (MIT)\n\nCopyright (c) 2015-2017 Remo H. Jansen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n */\n\nexport { ContainerModule } from './cotainer-module';\nexport { inject } from './annotation/inject';\nexport { multiInject } from './annotation/multi_inject';\nexport { injectable } from './annotation/injectable';\nexport { named } from './annotation/named';\nexport { Container } from './container';\n// export { postConstruct } from './annotation/post_construct';\nexport * from './interfaces';\n"]}