@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.
- package/package.json +1 -2
- package/src/_internal/logger.ts +0 -59
- package/src/array/array.test.ts +0 -35
- package/src/array/array.ts +0 -25
- package/src/array/index.ts +0 -1
- package/src/assert/assert.test.ts +0 -86
- package/src/assert/assert.ts +0 -42
- package/src/assert/index.ts +0 -2
- package/src/async/barrier.test.ts +0 -90
- package/src/async/barrier.ts +0 -58
- package/src/async/cancellation.test.ts +0 -85
- package/src/async/cancellation.ts +0 -193
- package/src/async/index.ts +0 -18
- package/src/async/queue/queue.test.ts +0 -70
- package/src/async/queue/queue.ts +0 -56
- package/src/async/queue/task.test.ts +0 -155
- package/src/async/queue/task.ts +0 -67
- package/src/async/utils.test.ts +0 -28
- package/src/async/utils.ts +0 -8
- package/src/async/wait.ts +0 -9
- package/src/byte/format.test.ts +0 -64
- package/src/byte/format.ts +0 -44
- package/src/byte/index.ts +0 -2
- package/src/byte/node_modules/.vitest/results.json +0 -1
- package/src/byte/var.ts +0 -11
- package/src/cache/index.ts +0 -2
- package/src/cache/lru-with-timeout.test.ts +0 -88
- package/src/cache/lru-with-timeout.ts +0 -85
- package/src/cache/lru.test.ts +0 -56
- package/src/cache/lru.ts +0 -59
- package/src/context/context.test.ts +0 -17
- package/src/context/context.ts +0 -60
- package/src/context/index.ts +0 -8
- package/src/di/base.ts +0 -73
- package/src/di/container-service.test.ts +0 -179
- package/src/di/context.web.tsx +0 -41
- package/src/di/descriptor.ts +0 -31
- package/src/di/idle-value.test.ts +0 -73
- package/src/di/idle-value.ts +0 -63
- package/src/di/index.common.ts +0 -32
- package/src/di/index.ts +0 -2
- package/src/di/instantiation-service.interface.ts +0 -46
- package/src/di/instantiation-service.test.ts +0 -337
- package/src/di/instantiation-service.ts +0 -468
- package/src/di/lazy/foo.mock.ts +0 -28
- package/src/di/lazy/idle-load.ts +0 -39
- package/src/di/lazy/index.ts +0 -4
- package/src/di/lazy/lazy-service.test.ts +0 -65
- package/src/di/lazy/lazy-service.ts +0 -71
- package/src/di/lazy/type.ts +0 -5
- package/src/di/node_modules/.vitest/results.json +0 -1
- package/src/di/proxy-builder.test.ts +0 -45
- package/src/di/proxy-builder.ts +0 -38
- package/src/di/service-collection.test.ts +0 -27
- package/src/di/service-collection.ts +0 -46
- package/src/di/service-ownership-collection.test.ts +0 -39
- package/src/di/service-ownership-collection.ts +0 -38
- package/src/di/service-registry.test.ts +0 -66
- package/src/di/service-registry.ts +0 -99
- package/src/di/trace.ts +0 -85
- package/src/dispose/disposable-store.test.ts +0 -57
- package/src/dispose/disposable-store.ts +0 -80
- package/src/dispose/disposable-t.test.ts +0 -123
- package/src/dispose/disposable-t.ts +0 -238
- package/src/dispose/disposable-utils.test.ts +0 -15
- package/src/dispose/disposable-utils.ts +0 -28
- package/src/dispose/dispose-base.ts +0 -9
- package/src/dispose/index.ts +0 -34
- package/src/dispose/logger.test.ts +0 -65
- package/src/dispose/logger.ts +0 -39
- package/src/dispose/timer.test.ts +0 -30
- package/src/dispose/timer.ts +0 -16
- package/src/dispose/tracker.test.ts +0 -51
- package/src/dispose/tracker.ts +0 -105
- package/src/error/error-base.ts +0 -45
- package/src/error/error-code.ts +0 -39
- package/src/error/error-const.test.ts +0 -30
- package/src/error/error-const.ts +0 -16
- package/src/error/error-or.test.ts +0 -44
- package/src/error/error-or.ts +0 -2
- package/src/error/error-t.test.ts +0 -116
- package/src/error/error-t.ts +0 -100
- package/src/error/index.ts +0 -24
- package/src/error/node_modules/.vitest/results.json +0 -1
- package/src/event/disposable-linked-list.ts +0 -29
- package/src/event/emitter.test.ts +0 -191
- package/src/event/emitter.ts +0 -162
- package/src/event/error-handler.ts +0 -22
- package/src/event/index.ts +0 -34
- package/src/event/once.ts +0 -29
- package/src/event/phase-emitter.test.ts +0 -212
- package/src/event/phase-emitter.ts +0 -209
- package/src/event/shortcut-event-utils.ts +0 -33
- package/src/event/utils.ts +0 -6
- package/src/event/when.ts +0 -40
- package/src/function/debounce.test.ts +0 -274
- package/src/function/debounce.ts +0 -168
- package/src/function/index.ts +0 -2
- package/src/function/node_modules/.vitest/results.json +0 -1
- package/src/function/throttle.test.ts +0 -179
- package/src/function/throttle.ts +0 -26
- package/src/hash/hash-t.test.ts +0 -100
- package/src/hash/hash-t.ts +0 -51
- package/src/hash/index.ts +0 -3
- package/src/json/index.ts +0 -1
- package/src/json/node_modules/.vitest/results.json +0 -1
- package/src/json/parse.ts +0 -19
- package/src/launch/abstract-job.ts +0 -45
- package/src/launch/cost-recorder.ts +0 -22
- package/src/launch/index.ts +0 -2
- package/src/launch/job-scheduler.test.ts +0 -122
- package/src/launch/job-scheduler.ts +0 -118
- package/src/launch/node_modules/.vitest/deps/_metadata.json +0 -8
- package/src/launch/node_modules/.vitest/deps/package.json +0 -3
- package/src/launch/node_modules/.vitest/results.json +0 -1
- package/src/lock/README.md +0 -11
- package/src/lock/capability.test.ts +0 -110
- package/src/lock/capability.ts +0 -89
- package/src/lock/index.ts +0 -15
- package/src/lock/node_modules/.vitest/results.json +0 -1
- package/src/lock/semaphore.ts +0 -21
- package/src/lock/shared-mutex.test.ts +0 -537
- package/src/lock/shared-mutex.ts +0 -242
- package/src/lock/utils.test.ts +0 -165
- package/src/lock/utils.ts +0 -135
- package/src/lodash-es/index.ts +0 -1
- package/src/math/degree.ts +0 -16
- package/src/math/index.ts +0 -7
- package/src/math/math.test.ts +0 -40
- package/src/math/math.ts +0 -64
- package/src/math/node_modules/.vitest/results.json +0 -1
- package/src/math/vector.test.ts +0 -73
- package/src/math/vector.ts +0 -114
- package/src/network/client.interface.ts +0 -104
- package/src/network/client.web.ts +0 -24
- package/src/network/index.common.ts +0 -10
- package/src/network/index.ts +0 -2
- package/src/network/plugins/retry.ts +0 -98
- package/src/objects/deep-clone.test.ts +0 -40
- package/src/objects/deep-clone.ts +0 -13
- package/src/objects/deep-equal.test.ts +0 -86
- package/src/objects/deep-equal.ts +0 -60
- package/src/objects/index.ts +0 -4
- package/src/platform/index.ts +0 -64
- package/src/promise/index.ts +0 -16
- package/src/promise/promise.test.ts +0 -254
- package/src/promise/promise.ts +0 -212
- package/src/scheduler/callback-token.ts +0 -31
- package/src/scheduler/core/actuator-args.test.ts +0 -47
- package/src/scheduler/core/actuator.test.ts +0 -82
- package/src/scheduler/core/actuator.ts +0 -58
- package/src/scheduler/core/chunk-scheduler.test.ts +0 -54
- package/src/scheduler/core/chunk-scheduler.ts +0 -28
- package/src/scheduler/core/node_modules/.vitest/results.json +0 -1
- package/src/scheduler/core/scheduler.test.ts +0 -328
- package/src/scheduler/core/scheduler.ts +0 -172
- package/src/scheduler/core/task-queue.test.ts +0 -78
- package/src/scheduler/core/task-queue.ts +0 -44
- package/src/scheduler/core/task.test.ts +0 -34
- package/src/scheduler/core/task.ts +0 -52
- package/src/scheduler/core/utils.ts +0 -48
- package/src/scheduler/executor/abstract-executor.test.ts +0 -44
- package/src/scheduler/executor/abstract-executor.ts +0 -38
- package/src/scheduler/executor/executor.interface.ts +0 -39
- package/src/scheduler/executor/idle-callback-executor.test.ts +0 -70
- package/src/scheduler/executor/idle-callback-executor.ts +0 -98
- package/src/scheduler/executor/make-executor.ts +0 -18
- package/src/scheduler/executor/post-message-executor.test.ts +0 -66
- package/src/scheduler/executor/post-message-executor.ts +0 -52
- package/src/scheduler/index.ts +0 -15
- package/src/scheduler/lv-scheduler-callback.ts +0 -19
- package/src/scheduler/lv-scheduler-config.ts +0 -17
- package/src/scheduler/type.ts +0 -48
- package/src/sprintf/index.ts +0 -2
- package/src/sprintf/sprintf.test.ts +0 -95
- package/src/sprintf/sprintf.ts +0 -97
- package/src/structure/graph.test.ts +0 -181
- package/src/structure/graph.ts +0 -105
- package/src/structure/index.ts +0 -8
- package/src/structure/linked-list.test.ts +0 -74
- package/src/structure/linked-list.ts +0 -145
- package/src/structure/min-heap.test.ts +0 -71
- package/src/structure/min-heap.ts +0 -91
- package/src/type/REAME.md +0 -2
- package/src/type/distributive-omit.interface.ts +0 -4
- package/src/type/index.ts +0 -3
- package/src/type/object-key-paths.interface.ts +0 -40
- package/src/undo-redo-stack/README.md +0 -61
- package/src/undo-redo-stack/action-stack.test.ts +0 -330
- package/src/undo-redo-stack/action-stack.ts +0 -150
- package/src/undo-redo-stack/element.ts +0 -4
- package/src/undo-redo-stack/index.ts +0 -7
- package/src/undo-redo-stack/state-stack.test.ts +0 -118
- package/src/undo-redo-stack/state-stack.ts +0 -133
- package/src/uuid/index.ts +0 -7
- package/src/uuid/uuid.ts +0 -86
- package/src/worker/cors-worker.ts +0 -38
- package/src/worker/index.ts +0 -4
- package/src/worker/node_modules/.vitest/results.json +0 -1
- package/src/worker/promise-worker-main-thread.test.ts +0 -91
- package/src/worker/promise-worker-main-thread.ts +0 -76
- package/src/worker/promise-worker-worker-thread.ts +0 -64
- package/src/worker/promise-worker.interface.ts +0 -15
package/src/di/idle-value.ts
DELETED
|
@@ -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
|
-
}
|
package/src/di/index.common.ts
DELETED
|
@@ -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,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
|
-
});
|