@zk-tech/bedrock 0.0.1 → 0.0.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 (203) hide show
  1. package/package.json +1 -2
  2. package/src/_internal/logger.ts +0 -59
  3. package/src/array/array.test.ts +0 -35
  4. package/src/array/array.ts +0 -25
  5. package/src/array/index.ts +0 -1
  6. package/src/assert/assert.test.ts +0 -86
  7. package/src/assert/assert.ts +0 -42
  8. package/src/assert/index.ts +0 -2
  9. package/src/async/barrier.test.ts +0 -90
  10. package/src/async/barrier.ts +0 -58
  11. package/src/async/cancellation.test.ts +0 -85
  12. package/src/async/cancellation.ts +0 -193
  13. package/src/async/index.ts +0 -18
  14. package/src/async/queue/queue.test.ts +0 -70
  15. package/src/async/queue/queue.ts +0 -56
  16. package/src/async/queue/task.test.ts +0 -155
  17. package/src/async/queue/task.ts +0 -67
  18. package/src/async/utils.test.ts +0 -28
  19. package/src/async/utils.ts +0 -8
  20. package/src/async/wait.ts +0 -9
  21. package/src/byte/format.test.ts +0 -64
  22. package/src/byte/format.ts +0 -44
  23. package/src/byte/index.ts +0 -2
  24. package/src/byte/node_modules/.vitest/results.json +0 -1
  25. package/src/byte/var.ts +0 -11
  26. package/src/cache/index.ts +0 -2
  27. package/src/cache/lru-with-timeout.test.ts +0 -88
  28. package/src/cache/lru-with-timeout.ts +0 -85
  29. package/src/cache/lru.test.ts +0 -56
  30. package/src/cache/lru.ts +0 -59
  31. package/src/context/context.test.ts +0 -17
  32. package/src/context/context.ts +0 -60
  33. package/src/context/index.ts +0 -8
  34. package/src/di/base.ts +0 -73
  35. package/src/di/container-service.test.ts +0 -179
  36. package/src/di/context.web.tsx +0 -41
  37. package/src/di/descriptor.ts +0 -31
  38. package/src/di/idle-value.test.ts +0 -73
  39. package/src/di/idle-value.ts +0 -63
  40. package/src/di/index.common.ts +0 -32
  41. package/src/di/index.ts +0 -2
  42. package/src/di/instantiation-service.interface.ts +0 -46
  43. package/src/di/instantiation-service.test.ts +0 -337
  44. package/src/di/instantiation-service.ts +0 -468
  45. package/src/di/lazy/foo.mock.ts +0 -28
  46. package/src/di/lazy/idle-load.ts +0 -39
  47. package/src/di/lazy/index.ts +0 -4
  48. package/src/di/lazy/lazy-service.test.ts +0 -65
  49. package/src/di/lazy/lazy-service.ts +0 -71
  50. package/src/di/lazy/type.ts +0 -5
  51. package/src/di/node_modules/.vitest/results.json +0 -1
  52. package/src/di/proxy-builder.test.ts +0 -45
  53. package/src/di/proxy-builder.ts +0 -38
  54. package/src/di/service-collection.test.ts +0 -27
  55. package/src/di/service-collection.ts +0 -46
  56. package/src/di/service-ownership-collection.test.ts +0 -39
  57. package/src/di/service-ownership-collection.ts +0 -38
  58. package/src/di/service-registry.test.ts +0 -66
  59. package/src/di/service-registry.ts +0 -99
  60. package/src/di/trace.ts +0 -85
  61. package/src/dispose/disposable-store.test.ts +0 -57
  62. package/src/dispose/disposable-store.ts +0 -80
  63. package/src/dispose/disposable-t.test.ts +0 -123
  64. package/src/dispose/disposable-t.ts +0 -238
  65. package/src/dispose/disposable-utils.test.ts +0 -15
  66. package/src/dispose/disposable-utils.ts +0 -28
  67. package/src/dispose/dispose-base.ts +0 -9
  68. package/src/dispose/index.ts +0 -34
  69. package/src/dispose/logger.test.ts +0 -65
  70. package/src/dispose/logger.ts +0 -39
  71. package/src/dispose/timer.test.ts +0 -30
  72. package/src/dispose/timer.ts +0 -16
  73. package/src/dispose/tracker.test.ts +0 -51
  74. package/src/dispose/tracker.ts +0 -105
  75. package/src/error/error-base.ts +0 -45
  76. package/src/error/error-code.ts +0 -39
  77. package/src/error/error-const.test.ts +0 -30
  78. package/src/error/error-const.ts +0 -16
  79. package/src/error/error-or.test.ts +0 -44
  80. package/src/error/error-or.ts +0 -2
  81. package/src/error/error-t.test.ts +0 -116
  82. package/src/error/error-t.ts +0 -100
  83. package/src/error/index.ts +0 -24
  84. package/src/error/node_modules/.vitest/results.json +0 -1
  85. package/src/event/disposable-linked-list.ts +0 -29
  86. package/src/event/emitter.test.ts +0 -191
  87. package/src/event/emitter.ts +0 -162
  88. package/src/event/error-handler.ts +0 -22
  89. package/src/event/index.ts +0 -34
  90. package/src/event/once.ts +0 -29
  91. package/src/event/phase-emitter.test.ts +0 -212
  92. package/src/event/phase-emitter.ts +0 -209
  93. package/src/event/shortcut-event-utils.ts +0 -33
  94. package/src/event/utils.ts +0 -6
  95. package/src/event/when.ts +0 -40
  96. package/src/function/debounce.test.ts +0 -274
  97. package/src/function/debounce.ts +0 -168
  98. package/src/function/index.ts +0 -2
  99. package/src/function/node_modules/.vitest/results.json +0 -1
  100. package/src/function/throttle.test.ts +0 -179
  101. package/src/function/throttle.ts +0 -26
  102. package/src/hash/hash-t.test.ts +0 -100
  103. package/src/hash/hash-t.ts +0 -51
  104. package/src/hash/index.ts +0 -3
  105. package/src/json/index.ts +0 -1
  106. package/src/json/node_modules/.vitest/results.json +0 -1
  107. package/src/json/parse.ts +0 -19
  108. package/src/launch/abstract-job.ts +0 -45
  109. package/src/launch/cost-recorder.ts +0 -22
  110. package/src/launch/index.ts +0 -2
  111. package/src/launch/job-scheduler.test.ts +0 -122
  112. package/src/launch/job-scheduler.ts +0 -118
  113. package/src/launch/node_modules/.vitest/deps/_metadata.json +0 -8
  114. package/src/launch/node_modules/.vitest/deps/package.json +0 -3
  115. package/src/launch/node_modules/.vitest/results.json +0 -1
  116. package/src/lock/README.md +0 -11
  117. package/src/lock/capability.test.ts +0 -110
  118. package/src/lock/capability.ts +0 -89
  119. package/src/lock/index.ts +0 -15
  120. package/src/lock/node_modules/.vitest/results.json +0 -1
  121. package/src/lock/semaphore.ts +0 -21
  122. package/src/lock/shared-mutex.test.ts +0 -537
  123. package/src/lock/shared-mutex.ts +0 -242
  124. package/src/lock/utils.test.ts +0 -165
  125. package/src/lock/utils.ts +0 -135
  126. package/src/lodash-es/index.ts +0 -1
  127. package/src/math/degree.ts +0 -16
  128. package/src/math/index.ts +0 -7
  129. package/src/math/math.test.ts +0 -40
  130. package/src/math/math.ts +0 -64
  131. package/src/math/node_modules/.vitest/results.json +0 -1
  132. package/src/math/vector.test.ts +0 -73
  133. package/src/math/vector.ts +0 -114
  134. package/src/network/client.interface.ts +0 -104
  135. package/src/network/client.web.ts +0 -24
  136. package/src/network/index.common.ts +0 -10
  137. package/src/network/index.ts +0 -2
  138. package/src/network/plugins/retry.ts +0 -98
  139. package/src/objects/deep-clone.test.ts +0 -40
  140. package/src/objects/deep-clone.ts +0 -13
  141. package/src/objects/deep-equal.test.ts +0 -86
  142. package/src/objects/deep-equal.ts +0 -60
  143. package/src/objects/index.ts +0 -4
  144. package/src/platform/index.ts +0 -64
  145. package/src/promise/index.ts +0 -16
  146. package/src/promise/promise.test.ts +0 -254
  147. package/src/promise/promise.ts +0 -212
  148. package/src/scheduler/callback-token.ts +0 -31
  149. package/src/scheduler/core/actuator-args.test.ts +0 -47
  150. package/src/scheduler/core/actuator.test.ts +0 -82
  151. package/src/scheduler/core/actuator.ts +0 -58
  152. package/src/scheduler/core/chunk-scheduler.test.ts +0 -54
  153. package/src/scheduler/core/chunk-scheduler.ts +0 -28
  154. package/src/scheduler/core/node_modules/.vitest/results.json +0 -1
  155. package/src/scheduler/core/scheduler.test.ts +0 -328
  156. package/src/scheduler/core/scheduler.ts +0 -172
  157. package/src/scheduler/core/task-queue.test.ts +0 -78
  158. package/src/scheduler/core/task-queue.ts +0 -44
  159. package/src/scheduler/core/task.test.ts +0 -34
  160. package/src/scheduler/core/task.ts +0 -52
  161. package/src/scheduler/core/utils.ts +0 -48
  162. package/src/scheduler/executor/abstract-executor.test.ts +0 -44
  163. package/src/scheduler/executor/abstract-executor.ts +0 -38
  164. package/src/scheduler/executor/executor.interface.ts +0 -39
  165. package/src/scheduler/executor/idle-callback-executor.test.ts +0 -70
  166. package/src/scheduler/executor/idle-callback-executor.ts +0 -98
  167. package/src/scheduler/executor/make-executor.ts +0 -18
  168. package/src/scheduler/executor/post-message-executor.test.ts +0 -66
  169. package/src/scheduler/executor/post-message-executor.ts +0 -52
  170. package/src/scheduler/index.ts +0 -15
  171. package/src/scheduler/lv-scheduler-callback.ts +0 -19
  172. package/src/scheduler/lv-scheduler-config.ts +0 -17
  173. package/src/scheduler/type.ts +0 -48
  174. package/src/sprintf/index.ts +0 -2
  175. package/src/sprintf/sprintf.test.ts +0 -95
  176. package/src/sprintf/sprintf.ts +0 -97
  177. package/src/structure/graph.test.ts +0 -181
  178. package/src/structure/graph.ts +0 -105
  179. package/src/structure/index.ts +0 -8
  180. package/src/structure/linked-list.test.ts +0 -74
  181. package/src/structure/linked-list.ts +0 -145
  182. package/src/structure/min-heap.test.ts +0 -71
  183. package/src/structure/min-heap.ts +0 -91
  184. package/src/type/REAME.md +0 -2
  185. package/src/type/distributive-omit.interface.ts +0 -4
  186. package/src/type/index.ts +0 -3
  187. package/src/type/object-key-paths.interface.ts +0 -40
  188. package/src/undo-redo-stack/README.md +0 -61
  189. package/src/undo-redo-stack/action-stack.test.ts +0 -330
  190. package/src/undo-redo-stack/action-stack.ts +0 -150
  191. package/src/undo-redo-stack/element.ts +0 -4
  192. package/src/undo-redo-stack/index.ts +0 -7
  193. package/src/undo-redo-stack/state-stack.test.ts +0 -118
  194. package/src/undo-redo-stack/state-stack.ts +0 -133
  195. package/src/uuid/index.ts +0 -7
  196. package/src/uuid/uuid.ts +0 -86
  197. package/src/worker/cors-worker.ts +0 -38
  198. package/src/worker/index.ts +0 -4
  199. package/src/worker/node_modules/.vitest/results.json +0 -1
  200. package/src/worker/promise-worker-main-thread.test.ts +0 -91
  201. package/src/worker/promise-worker-main-thread.ts +0 -76
  202. package/src/worker/promise-worker-worker-thread.ts +0 -64
  203. package/src/worker/promise-worker.interface.ts +0 -15
@@ -1,63 +0,0 @@
1
- import { lvSchedulerCallback, PriorityLevel } from '@/scheduler';
2
- import type { IDisposable } from '@/dispose';
3
- import { Emitter, type Event } from '@/event';
4
-
5
- //
6
- // 容器类型,存放一个可以延迟初始化的值
7
- //
8
- export class IdleValue<T> implements IDisposable {
9
- private readonly _executor: () => void;
10
- private readonly _handle: IDisposable;
11
- private _executorEmitter?: Emitter<[]>;
12
-
13
- private _didRun = false;
14
- private _value?: T;
15
- private _error: unknown;
16
-
17
- constructor(executor: () => T) {
18
- this._executor = () => {
19
- try {
20
- this._value = executor();
21
- } catch (err) {
22
- this._error = err;
23
- throw err;
24
- } finally {
25
- this._didRun = true;
26
- if (this._value && this._executorEmitter) {
27
- this._executorEmitter.fire();
28
- }
29
- }
30
- };
31
- this._handle = lvSchedulerCallback(() => this._executor(), {
32
- priorityLevel: PriorityLevel.IdlePriority,
33
- });
34
- }
35
-
36
- get value(): T {
37
- // 如果没有run过,dispose之后再立刻执行
38
- if (!this._didRun) {
39
- this._handle.dispose();
40
- this._executor();
41
- }
42
- if (this._error) {
43
- // eslint-disable-next-line @typescript-eslint/no-throw-literal
44
- throw this._error;
45
- }
46
- return this._value!;
47
- }
48
-
49
- get isInitialized(): boolean {
50
- return this._didRun;
51
- }
52
-
53
- get onExecutor(): Event<[]> {
54
- if (!this._executorEmitter) {
55
- this._executorEmitter = new Emitter<[]>();
56
- }
57
- return this._executorEmitter.event;
58
- }
59
-
60
- dispose(): void {
61
- this._handle.dispose();
62
- }
63
- }
@@ -1,32 +0,0 @@
1
- export type { BrandedService } from './base';
2
- export type { ServiceIdentifier } from './base';
3
- export type { ServicesAccessor } from './base';
4
- export { createDecorator } from './base';
5
- export { refineServiceDecorator } from './base';
6
-
7
- export { SyncDescriptor } from './descriptor';
8
-
9
- export type { GetLeadingNonServiceArgs } from './instantiation-service.interface';
10
- export { IInstantiationService } from './instantiation-service.interface';
11
- export { InstantiationService } from './instantiation-service';
12
-
13
- // alias进行历史命名兼容
14
- export { InstantiationService as ContainerService } from './instantiation-service';
15
- export { IInstantiationService as IContainerService } from './instantiation-service.interface';
16
-
17
- export { getService } from './instantiation-service';
18
- export { InstantiationErrorType } from './instantiation-service';
19
-
20
- export type { IServiceCollection } from './service-collection';
21
- export { ServiceCollection } from './service-collection';
22
-
23
- export { ServiceOwnership } from './service-ownership-collection';
24
-
25
- export { ServiceRegistry } from './service-registry';
26
-
27
- export type { LazyService } from './lazy/type';
28
-
29
- export type { ILazyServiceLoader } from './lazy/lazy-service';
30
- export { LazyServiceLoader } from './lazy/lazy-service';
31
-
32
- export { makeLazyServiceIdleLoad } from './lazy/idle-load';
package/src/di/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './index.common';
2
- export { InstantiationContext, useService } from './context.web';
@@ -1,46 +0,0 @@
1
- import type { BrandedService, ServicesAccessor } from './base';
2
- import { createDecorator } from './base';
3
- import type { SyncDescriptor0 } from './descriptor';
4
- import type { ServiceCollection } from './service-collection';
5
-
6
- export type GetLeadingNonServiceArgs<TArgs extends any[]> = TArgs extends []
7
- ? []
8
- : TArgs extends [...infer TFirst, BrandedService]
9
- ? GetLeadingNonServiceArgs<TFirst>
10
- : TArgs;
11
-
12
- export interface IInstantiationService {
13
- readonly _serviceBrand: undefined;
14
-
15
- /**
16
- * Synchronously creates an instance that is denoted by the descriptor
17
- */
18
- createInstance: {
19
- <T>(descriptor: SyncDescriptor0<T>): T;
20
- <Ctor extends new (...args: any[]) => any, R extends InstanceType<Ctor>>(
21
- ctor: Ctor,
22
- ...args: GetLeadingNonServiceArgs<ConstructorParameters<Ctor>>
23
- ): R;
24
- };
25
-
26
- /**
27
- * Calls a function with a service accessor.
28
- */
29
- invokeFunction: <R, TS extends any[] = []>(
30
- fn: (accessor: ServicesAccessor, ...args: TS) => R,
31
- ...args: TS
32
- ) => R;
33
-
34
- /**
35
- * Creates a child of this service which inherits all current services
36
- * and adds/overwrites the given services.
37
- */
38
- createChild: (services: ServiceCollection) => IInstantiationService;
39
-
40
- /**
41
- * 生命周期归属该DI上下文的服务进行销毁
42
- */
43
- dispose: () => void;
44
- }
45
-
46
- export const IInstantiationService = createDecorator<IInstantiationService>('instantiation');
@@ -1,337 +0,0 @@
1
- import { createDecorator } from './base';
2
- import { SyncDescriptor } from './descriptor';
3
- import { getService, InstantiationService } from './instantiation-service';
4
- import { IInstantiationService } from './instantiation-service.interface';
5
- import { ServiceRegistry } from './service-registry';
6
-
7
- let serviceRegistry: ServiceRegistry;
8
-
9
- const IA = createDecorator<A>('a');
10
- const IB = createDecorator<B>('b');
11
- const IC = createDecorator<C>('c');
12
- const IX = createDecorator<X>('x');
13
- const IY = createDecorator<Y>('y');
14
-
15
- class Y {
16
- _serviceBrand: undefined;
17
- name = 'Y';
18
- }
19
-
20
- class X {
21
- _serviceBrand: undefined;
22
- name = 'X';
23
- y: Y;
24
-
25
- constructor(@IY y: Y) {
26
- this.y = y;
27
- }
28
- }
29
-
30
- class C {
31
- _serviceBrand: undefined;
32
- name = 'C';
33
- x: X;
34
-
35
- constructor(@IX x: X) {
36
- this.x = x;
37
- }
38
- }
39
-
40
- class B {
41
- _serviceBrand: undefined;
42
- name = 'B';
43
- c: C;
44
-
45
- constructor(@IC c: C) {
46
- this.c = c;
47
- }
48
- }
49
-
50
- class A {
51
- _serviceBrand: undefined;
52
- name = 'A';
53
- b: B;
54
- x: X;
55
-
56
- constructor(@IB b: B, @IX x: X) {
57
- this.b = b;
58
- this.x = x;
59
- }
60
- }
61
-
62
- describe('createInstance fail', () => {
63
- beforeEach(() => {
64
- serviceRegistry = new ServiceRegistry();
65
- });
66
-
67
- // 出现重复创建服务
68
- // Bar -> Foo
69
- // 当时Foo在创建过程中,动态的创建了Bar
70
- it('repeat', () => {
71
- const IFoo = createDecorator<Foo>('foo');
72
- const IBar = createDecorator<Bar>('bar');
73
-
74
- interface IFoo {
75
- _serviceBrand: undefined;
76
- name: string;
77
- }
78
-
79
- class Bar {
80
- _serviceBrand: undefined;
81
- name = 'Bar';
82
- foo: IFoo;
83
-
84
- constructor(@IFoo foo: IFoo) {
85
- this.foo = foo;
86
- }
87
- }
88
- serviceRegistry.register(IBar, Bar);
89
-
90
- class Foo implements IFoo {
91
- _serviceBrand: undefined;
92
- name = 'Foo';
93
- instantiationService: IInstantiationService;
94
-
95
- constructor(@IInstantiationService instantiationService: IInstantiationService) {
96
- this.instantiationService = instantiationService;
97
- instantiationService.createInstance(Bar);
98
- }
99
- }
100
- serviceRegistry.register(IFoo, Foo);
101
-
102
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
103
-
104
- expect(() => {
105
- instantiationService.createInstance(Bar);
106
- }).toThrow(`illegal state - RECURSIVELY instantiating service 'foo'`);
107
- });
108
-
109
- // 服务创建过程中出现环
110
- // Bar -> Foo -> Bar
111
- it('has cyclicDependency', () => {
112
- const IFoo = createDecorator<Foo>('foo');
113
- const IBar = createDecorator<Bar>('bar');
114
-
115
- interface IFoo {
116
- _serviceBrand: undefined;
117
- name: string;
118
- }
119
-
120
- interface IBar {
121
- _serviceBrand: undefined;
122
- name: string;
123
- }
124
-
125
- class Foo implements IFoo {
126
- _serviceBrand: undefined;
127
- name = 'Foo';
128
- bar: IBar;
129
-
130
- constructor(@IBar bar: IBar) {
131
- this.bar = bar;
132
- }
133
- }
134
- serviceRegistry.register(IFoo, Foo);
135
-
136
- class Bar implements IBar {
137
- _serviceBrand: undefined;
138
- name = 'Bar';
139
- foo: IFoo;
140
-
141
- constructor(@IFoo foo: IFoo) {
142
- this.foo = foo;
143
- }
144
- }
145
- serviceRegistry.register(IBar, Bar);
146
-
147
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
148
- expect(() => {
149
- instantiationService.createInstance(Bar);
150
- }).toThrow('foo -> bar -> foo');
151
- });
152
-
153
- // 依赖的服务没有注册
154
- it('service unregister', () => {
155
- serviceRegistry.register(IX, X);
156
-
157
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
158
- expect(() => {
159
- instantiationService.createInstance(X);
160
- }).toThrow('[createInstance] X depends on UNKNOWN service y.');
161
- });
162
- });
163
-
164
- describe('createInstance success1', () => {
165
- beforeEach(() => {
166
- serviceRegistry = new ServiceRegistry();
167
- });
168
-
169
- // 没有依赖
170
- it('no dependency', () => {
171
- serviceRegistry.register(IY, Y);
172
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
173
- let y: undefined | Y;
174
- expect(() => {
175
- y = instantiationService.createInstance(Y);
176
- }).not.toThrow('Cannot register a disposable on itself.');
177
- expect(y).not.toBeUndefined();
178
- expect(y!.name).toBe('Y');
179
- });
180
- });
181
-
182
- describe('createInstance success2', () => {
183
- beforeEach(() => {
184
- serviceRegistry = new ServiceRegistry();
185
- });
186
-
187
- // 存在依赖
188
- // X -> Y
189
- it('has dependency', () => {
190
- serviceRegistry.register(IX, X);
191
- serviceRegistry.register(IY, Y);
192
-
193
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
194
- let x: undefined | X;
195
- expect(() => {
196
- x = instantiationService.createInstance(X);
197
- }).not.toThrow('Cannot register a disposable on itself.');
198
- expect(x).not.toBeUndefined();
199
- expect(x!.name).toBe('X');
200
- expect(x!.y.name).toBe('Y');
201
- });
202
-
203
- // 较为复杂的依赖情况
204
- // A -> B -> C -> X -> Y
205
- // A -> X -> Y
206
- it('has dependency2', () => {
207
- serviceRegistry.register(IA, A);
208
- serviceRegistry.register(IB, B);
209
- serviceRegistry.register(IC, C);
210
- serviceRegistry.register(IX, X);
211
- serviceRegistry.register(IY, Y);
212
-
213
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
214
- let a: undefined | A;
215
- expect(() => {
216
- a = instantiationService.createInstance(A);
217
- }).not.toThrowError();
218
- expect(a).not.toBeUndefined();
219
- expect(a!.name).toBe('A');
220
- expect(a!.b.name).toBe('B');
221
- expect(a!.b.c.name).toBe('C');
222
- expect(a!.b.c.x.name).toBe('X');
223
- expect(a!.b.c.x.y.name).toBe('Y');
224
- expect(a!.x.name).toBe('X');
225
- expect(a!.x.y.name).toBe('Y');
226
- });
227
-
228
- // 底层依赖了上层
229
- // J(child) -> B(parent)
230
- it('has dependency3', () => {
231
- serviceRegistry.register(IY, Y);
232
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
233
-
234
- const IJ = createDecorator<J>('j');
235
-
236
- class J {
237
- _serviceBrand: undefined;
238
- name = 'J';
239
- y: Y;
240
-
241
- constructor(@IY y: Y) {
242
- this.y = y;
243
- }
244
- }
245
- const childRegister = new ServiceRegistry();
246
- childRegister.register(IJ, J);
247
- const childInstantiationService = instantiationService.createChild(childRegister.makeCollection());
248
- let j: undefined | J;
249
- expect(() => {
250
- j = childInstantiationService.createInstance(J);
251
- }).not.toThrowError();
252
- expect(j).not.toBeUndefined();
253
- expect(j!.name).toBe('J');
254
- expect(j!.y.name).toBe('Y');
255
- });
256
- });
257
-
258
- describe('createInstance success3', () => {
259
- beforeEach(() => {
260
- serviceRegistry = new ServiceRegistry();
261
- });
262
-
263
- // 支持静态参数,动态参数,注入的服务参数
264
- it('arguments', () => {
265
- class Foo {
266
- _serviceBrand: undefined;
267
- name = 'Foo';
268
- }
269
- const IFoo = createDecorator<Foo>('foo');
270
- serviceRegistry.register(IFoo, Foo);
271
-
272
- class Bar {
273
- _serviceBrand: undefined;
274
- name = 'Bar';
275
- foo: Foo;
276
- a1: number;
277
- a2: string;
278
-
279
- constructor(a1: number, a2: string, @IFoo foo: Foo) {
280
- this.a1 = a1;
281
- this.a2 = a2;
282
- this.foo = foo;
283
- }
284
- }
285
- const IBar = createDecorator<Bar>('bar');
286
- const descriptor = new SyncDescriptor(Bar, [100]);
287
- serviceRegistry.register(IBar, descriptor);
288
-
289
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
290
- let bar: undefined | Bar;
291
- expect(() => {
292
- bar = instantiationService.createInstance(descriptor, '123');
293
- }).not.toThrow('Cannot register a disposable on itself.');
294
- expect(bar).not.toBeUndefined();
295
- expect(bar!.foo.name).toBe('Foo');
296
- expect(bar!.a1).toBe(100);
297
- expect(bar!.a2).toBe('123');
298
- });
299
- });
300
-
301
- describe('get service success', () => {
302
- beforeEach(() => {
303
- serviceRegistry = new ServiceRegistry();
304
- });
305
-
306
- it('get', () => {
307
- const IFoo = createDecorator<Foo>('foo');
308
- const IBar = createDecorator<Bar>('bar');
309
-
310
- interface IFoo {
311
- _serviceBrand: undefined;
312
- name: string;
313
- }
314
-
315
- class Bar {
316
- _serviceBrand: undefined;
317
- name = 'Bar';
318
- foo: IFoo;
319
-
320
- constructor(@IFoo foo: IFoo) {
321
- this.foo = foo;
322
- }
323
- }
324
- serviceRegistry.register(IBar, Bar);
325
-
326
- class Foo implements IFoo {
327
- _serviceBrand: undefined;
328
- name = 'Foo';
329
- }
330
- const foo = new Foo();
331
- serviceRegistry.registerInstance(IFoo, foo);
332
-
333
- const instantiationService = new InstantiationService(serviceRegistry.makeCollection());
334
- expect(getService(instantiationService, IBar)).not.toBeUndefined();
335
- expect(getService(instantiationService, IFoo)).toBe(foo);
336
- });
337
- });