@fougere/container 0.9.3-alpha.0 → 0.11.0-alpha.0
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/dist/{container/Container.d.ts → Container.d.ts} +2 -14
- package/dist/Container.d.ts.map +1 -0
- package/dist/{container/Container.js.map → Container.js.map} +1 -1
- package/dist/{container/Disposable.d.ts → Disposable.d.ts} +0 -1
- package/dist/Disposable.d.ts.map +1 -0
- package/dist/Disposable.js.map +1 -0
- package/dist/ScopeContainer.d.ts +27 -0
- package/dist/ScopeContainer.d.ts.map +1 -0
- package/dist/{container/ScopeContainer.js → ScopeContainer.js} +1 -6
- package/dist/ScopeContainer.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/registration/Constructor.d.ts +2 -0
- package/dist/registration/Constructor.d.ts.map +1 -0
- package/dist/registration/Constructor.js +2 -0
- package/dist/registration/Constructor.js.map +1 -0
- package/dist/registration/Lifetime.d.ts +6 -0
- package/dist/registration/Lifetime.d.ts.map +1 -0
- package/dist/registration/Lifetime.js +2 -0
- package/dist/registration/Lifetime.js.map +1 -0
- package/dist/registration/RegisterOptions.d.ts +11 -0
- package/dist/registration/RegisterOptions.d.ts.map +1 -0
- package/dist/registration/RegisterOptions.js +2 -0
- package/dist/registration/RegisterOptions.js.map +1 -0
- package/package.json +1 -1
- package/src/{container/Container.ts → Container.ts} +2 -16
- package/src/{container/Disposable.ts → Disposable.ts} +0 -1
- package/src/{container/ScopeContainer.ts → ScopeContainer.ts} +12 -9
- package/src/index.ts +8 -2
- package/src/registration/Constructor.ts +1 -0
- package/src/registration/Lifetime.ts +5 -0
- package/src/registration/RegisterOptions.ts +12 -0
- package/dist/container/Container.d.ts.map +0 -1
- package/dist/container/Disposable.d.ts.map +0 -1
- package/dist/container/Disposable.js.map +0 -1
- package/dist/container/ScopeContainer.d.ts +0 -3
- package/dist/container/ScopeContainer.d.ts.map +0 -1
- package/dist/container/ScopeContainer.js.map +0 -1
- /package/dist/{container/Container.js → Container.js} +0 -0
- /package/dist/{container/Disposable.js → Disposable.js} +0 -0
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* `'singleton'` builds once per scope and the container disposes it; `'transient'`
|
|
5
|
-
* builds per `resolve` and the caller closes it. Absent means `'transient'`.
|
|
6
|
-
*/
|
|
7
|
-
lifetime?: 'singleton' | 'transient';
|
|
8
|
-
/**
|
|
9
|
-
* The TYPE names of the constructor's parameters, resolved in this scope in order —
|
|
10
|
-
* `constructor(private users: UserRepository, private log: Logger)` is
|
|
11
|
-
* `deps: ['UserRepository', 'Logger']`.
|
|
12
|
-
*/
|
|
13
|
-
deps?: string[];
|
|
14
|
-
}
|
|
1
|
+
import type { Constructor } from './registration/Constructor.js';
|
|
2
|
+
import type { RegisterOptions } from './registration/RegisterOptions.js';
|
|
15
3
|
/** DI container interface — the only thing application code sees. */
|
|
16
4
|
export interface Container {
|
|
17
5
|
/** The container builds it: `register('UserService', UserService, { deps: ['UserRepository'] })`. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../src/Container.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,qGAAqG;IACrG,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAEjF,+GAA+G;IAC/G,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAE/C,yEAAyE;IACzE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;IAE5B,kEAAkE;IAClE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B,yEAAyE;IACzE,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAEvD,yEAAyE;IACzE,WAAW,IAAI,SAAS,CAAC;IAEzB,wGAAwG;IACxG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../src/Container.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Disposable.d.ts","sourceRoot":"","sources":["../src/Disposable.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,qBAAa,WAAW;IACtB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAM7C;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Disposable.js","sourceRoot":"","sources":["../src/Disposable.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,EAAE,CAAC,KAAc;QACtB,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,OAAQ,KAAoB,CAAC,OAAO,KAAK,UAAU,CACpD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Container } from './Container.js';
|
|
2
|
+
import type { Constructor } from './registration/Constructor.js';
|
|
3
|
+
import type { RegisterOptions } from './registration/RegisterOptions.js';
|
|
4
|
+
/** A scope reaches its parent and its children through members only a scope can read. */
|
|
5
|
+
export declare class ScopeContainer implements Container {
|
|
6
|
+
private readonly parent?;
|
|
7
|
+
private readonly registry;
|
|
8
|
+
private readonly built;
|
|
9
|
+
private readonly children;
|
|
10
|
+
private fallback;
|
|
11
|
+
private readonly resolving;
|
|
12
|
+
constructor(parent?: ScopeContainer | undefined);
|
|
13
|
+
register<T>(name: string, ctor: Constructor<T>, options?: RegisterOptions): void;
|
|
14
|
+
registerValue<T>(name: string, value: T): void;
|
|
15
|
+
resolve<T>(name: string): T;
|
|
16
|
+
has(name: string): boolean;
|
|
17
|
+
createScope(): Container;
|
|
18
|
+
dispose(): Promise<void>;
|
|
19
|
+
setFallback(resolve: (name: string) => unknown): void;
|
|
20
|
+
private entryOf;
|
|
21
|
+
/** Set on the root, honoured from any scope — a scope inherits it by asking upward. */
|
|
22
|
+
private fallbackOf;
|
|
23
|
+
private forget;
|
|
24
|
+
private through;
|
|
25
|
+
private remember;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ScopeContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeContainer.d.ts","sourceRoot":"","sources":["../src/ScopeContainer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAQzE,yFAAyF;AACzF,qBAAa,cAAe,YAAW,SAAS;IAgBlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAfpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAErD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IAIvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IAEjD,OAAO,CAAC,QAAQ,CAA0C;IAK1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAErC,YAA6B,MAAM,CAAC,EAAE,cAAc,YAAA,EAEnD;IAED,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAS/E;IAED,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAO7C;IAED,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAgD1B;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzB;IAED,WAAW,IAAI,SAAS,CAKvB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B7B;IAED,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAEpD;IAED,OAAO,CAAC,OAAO;IAIf,uFAAuF;IACvF,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,QAAQ;CAKjB"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { Disposables } from './Disposable.js';
|
|
2
2
|
/** A scope reaches its parent and its children through members only a scope can read. */
|
|
3
|
-
class ScopeContainer {
|
|
3
|
+
export class ScopeContainer {
|
|
4
4
|
parent;
|
|
5
5
|
registry = new Map();
|
|
6
|
-
// In construction order: a thing built later may hold one built earlier, so disposal
|
|
7
|
-
// walks this backwards.
|
|
8
6
|
built = [];
|
|
9
7
|
// Closed by this container, and before `built` — a child may hold what this scope built,
|
|
10
8
|
// never the other way round.
|
|
@@ -141,7 +139,4 @@ class ScopeContainer {
|
|
|
141
139
|
return value;
|
|
142
140
|
}
|
|
143
141
|
}
|
|
144
|
-
export function createContainer() {
|
|
145
|
-
return new ScopeContainer();
|
|
146
|
-
}
|
|
147
142
|
//# sourceMappingURL=ScopeContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeContainer.js","sourceRoot":"","sources":["../src/ScopeContainer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { Container } from './Container.js';
|
|
2
|
+
import type { Constructor } from './registration/Constructor.js';
|
|
3
|
+
export type { Container, Constructor };
|
|
4
|
+
export declare function createContainer(): Container;
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAEvC,wBAAgB,eAAe,IAAI,SAAS,CAE3C"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAMrD,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constructor.d.ts","sourceRoot":"","sources":["../../src/registration/Constructor.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constructor.js","sourceRoot":"","sources":["../../src/registration/Constructor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lifetime.d.ts","sourceRoot":"","sources":["../../src/registration/Lifetime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lifetime.js","sourceRoot":"","sources":["../../src/registration/Lifetime.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Lifetime } from './Lifetime.js';
|
|
2
|
+
export interface RegisterOptions {
|
|
3
|
+
lifetime?: Lifetime;
|
|
4
|
+
/**
|
|
5
|
+
* The TYPE names of the constructor's parameters, resolved in this scope in order —
|
|
6
|
+
* `constructor(private users: UserRepository, private log: Logger)` is
|
|
7
|
+
* `deps: ['UserRepository', 'Logger']`.
|
|
8
|
+
*/
|
|
9
|
+
deps?: string[];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=RegisterOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegisterOptions.d.ts","sourceRoot":"","sources":["../../src/registration/RegisterOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegisterOptions.js","sourceRoot":"","sources":["../../src/registration/RegisterOptions.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,19 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export interface RegisterOptions {
|
|
4
|
-
/**
|
|
5
|
-
* `'singleton'` builds once per scope and the container disposes it; `'transient'`
|
|
6
|
-
* builds per `resolve` and the caller closes it. Absent means `'transient'`.
|
|
7
|
-
*/
|
|
8
|
-
lifetime?: 'singleton' | 'transient';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* The TYPE names of the constructor's parameters, resolved in this scope in order —
|
|
12
|
-
* `constructor(private users: UserRepository, private log: Logger)` is
|
|
13
|
-
* `deps: ['UserRepository', 'Logger']`.
|
|
14
|
-
*/
|
|
15
|
-
deps?: string[];
|
|
16
|
-
}
|
|
1
|
+
import type { Constructor } from './registration/Constructor.js';
|
|
2
|
+
import type { RegisterOptions } from './registration/RegisterOptions.js';
|
|
17
3
|
|
|
18
4
|
/** DI container interface — the only thing application code sees. */
|
|
19
5
|
export interface Container {
|
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
import type { Container
|
|
1
|
+
import type { Container } from './Container.js';
|
|
2
2
|
import { Disposables, type Disposable } from './Disposable.js';
|
|
3
|
+
import type { Constructor } from './registration/Constructor.js';
|
|
4
|
+
import type { Lifetime } from './registration/Lifetime.js';
|
|
5
|
+
import type { RegisterOptions } from './registration/RegisterOptions.js';
|
|
3
6
|
|
|
4
7
|
interface Entry {
|
|
5
8
|
factory: (container: Container) => unknown;
|
|
6
|
-
lifetime:
|
|
9
|
+
lifetime: Lifetime;
|
|
7
10
|
instance?: unknown;
|
|
8
11
|
}
|
|
9
12
|
|
|
10
13
|
/** A scope reaches its parent and its children through members only a scope can read. */
|
|
11
|
-
class ScopeContainer implements Container {
|
|
14
|
+
export class ScopeContainer implements Container {
|
|
12
15
|
private readonly registry = new Map<string, Entry>();
|
|
13
|
-
|
|
14
|
-
// walks this backwards.
|
|
16
|
+
|
|
15
17
|
private readonly built: unknown[] = [];
|
|
18
|
+
|
|
16
19
|
// Closed by this container, and before `built` — a child may hold what this scope built,
|
|
17
20
|
// never the other way round.
|
|
18
21
|
private readonly children: ScopeContainer[] = [];
|
|
22
|
+
|
|
19
23
|
private fallback: ((name: string) => unknown) | undefined;
|
|
24
|
+
|
|
20
25
|
// The names being built right now, shared by the whole tree: a miss here is answered by the
|
|
21
26
|
// parent and the descent continues there, so only one stack can name the path whole —
|
|
22
27
|
// `child.resolve('A')` reaching a parent's `B` that asks for `A` back reports `A → B → A`.
|
|
@@ -28,7 +33,9 @@ class ScopeContainer implements Container {
|
|
|
28
33
|
|
|
29
34
|
register<T>(name: string, ctor: Constructor<T>, options?: RegisterOptions): void {
|
|
30
35
|
const lifetime = options?.lifetime ?? 'transient';
|
|
36
|
+
|
|
31
37
|
const deps = options?.deps ?? [];
|
|
38
|
+
|
|
32
39
|
this.registry.set(name, {
|
|
33
40
|
factory: (c) => new ctor(...deps.map((d) => c.resolve(d))),
|
|
34
41
|
lifetime,
|
|
@@ -165,7 +172,3 @@ class ScopeContainer implements Container {
|
|
|
165
172
|
return value;
|
|
166
173
|
}
|
|
167
174
|
}
|
|
168
|
-
|
|
169
|
-
export function createContainer(): Container {
|
|
170
|
-
return new ScopeContainer();
|
|
171
|
-
}
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { ScopeContainer } from './ScopeContainer.js';
|
|
2
|
+
import type { Container } from './Container.js';
|
|
3
|
+
import type { Constructor } from './registration/Constructor.js';
|
|
2
4
|
|
|
3
|
-
export {
|
|
5
|
+
export type { Container, Constructor };
|
|
6
|
+
|
|
7
|
+
export function createContainer(): Container {
|
|
8
|
+
return new ScopeContainer();
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Constructor<T = unknown> = new (...args: any[]) => T;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Lifetime } from './Lifetime.js';
|
|
2
|
+
|
|
3
|
+
export interface RegisterOptions {
|
|
4
|
+
lifetime?: Lifetime;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The TYPE names of the constructor's parameters, resolved in this scope in order —
|
|
8
|
+
* `constructor(private users: UserRepository, private log: Logger)` is
|
|
9
|
+
* `deps: ['UserRepository', 'Logger']`.
|
|
10
|
+
*/
|
|
11
|
+
deps?: string[];
|
|
12
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/container/Container.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IAErC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,qGAAqG;IACrG,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAEjF,+GAA+G;IAC/G,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAE/C,yEAAyE;IACzE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;IAE5B,kEAAkE;IAClE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B,yEAAyE;IACzE,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAEvD,yEAAyE;IACzE,WAAW,IAAI,SAAS,CAAC;IAEzB,wGAAwG;IACxG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Disposable.d.ts","sourceRoot":"","sources":["../../src/container/Disposable.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,qBAAa,WAAW;IACtB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAM7C;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Disposable.js","sourceRoot":"","sources":["../../src/container/Disposable.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,EAAE,CAAC,KAAc;QACtB,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,OAAQ,KAAoB,CAAC,OAAO,KAAK,UAAU,CACpD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScopeContainer.d.ts","sourceRoot":"","sources":["../../src/container/ScopeContainer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAgC,MAAM,gBAAgB,CAAC;AAwK9E,wBAAgB,eAAe,IAAI,SAAS,CAE3C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScopeContainer.js","sourceRoot":"","sources":["../../src/container/ScopeContainer.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|