@tecp/di 1.0.2 → 1.1.1

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.
@@ -0,0 +1,13 @@
1
+ export type Constructor<T = unknown> = new (...args: any[]) => T;
2
+ export type Token<T = unknown> = symbol | Constructor<T>;
3
+ export interface FullProvider<T = unknown> {
4
+ token: Token<T>;
5
+ useClass?: Constructor<T>;
6
+ useValue?: T;
7
+ useFactory?: (...args: unknown[]) => T;
8
+ isSingleton?: boolean;
9
+ }
10
+ export type Provider<T = unknown> = Constructor<T> | FullProvider<T>;
11
+ export declare const isFullProvider: (p: unknown) => p is FullProvider;
12
+ export declare const toFullProvider: <T>(item: Provider<T>) => FullProvider<T>;
13
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjE,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEzD,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAErE,eAAO,MAAM,cAAc,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,YAGN,CAAC;AAE5C,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAG,YAAY,CAAC,CAAC,CACP,CAAC"}
package/dist/common.js ADDED
@@ -0,0 +1,4 @@
1
+ export const isFullProvider = (p) => typeof p === 'object' &&
2
+ p !== null &&
3
+ 'token' in p;
4
+ export const toFullProvider = (item) => isFullProvider(item) ? item : { token: item, useClass: item };
@@ -0,0 +1,11 @@
1
+ import { type FullProvider, type Provider, type Token } from './common';
2
+ export declare class DiContainer {
3
+ private registry;
4
+ private singletons;
5
+ reg<T>(provider: FullProvider<T>): Token<T>;
6
+ regSingleton<T>(item: Provider<T>): Token<T>;
7
+ regTransient<T>(item: Provider<T>): Token<T>;
8
+ get<T>(token: Token<T>): T;
9
+ clear(): void;
10
+ }
11
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,KAAK,EAEX,MAAM,UAAU,CAAC;AAElB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAyD;IACzE,OAAO,CAAC,UAAU,CAA2C;IAE7D,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAK3C,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAIjC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAIjC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IA4B1B,KAAK;CAIN"}
@@ -0,0 +1,46 @@
1
+ import { toFullProvider, } from './common';
2
+ export class DiContainer {
3
+ registry = new Map();
4
+ singletons = new Map();
5
+ reg(provider) {
6
+ this.registry.set(provider.token, provider);
7
+ return provider.token;
8
+ }
9
+ regSingleton(item) {
10
+ return this.reg({ ...toFullProvider(item), isSingleton: true });
11
+ }
12
+ regTransient(item) {
13
+ return this.reg({ ...toFullProvider(item), isSingleton: false });
14
+ }
15
+ get(token) {
16
+ const existing = this.singletons.get(token);
17
+ if (existing) {
18
+ return existing;
19
+ }
20
+ const provider = this.registry.get(token);
21
+ if (!provider) {
22
+ throw new Error(`${String(token)} not registered`);
23
+ }
24
+ let instance;
25
+ if (provider.useValue !== undefined) {
26
+ instance = provider.useValue;
27
+ }
28
+ else if (provider.useClass) {
29
+ instance = new provider.useClass();
30
+ }
31
+ else if (provider.useFactory) {
32
+ instance = provider.useFactory();
33
+ }
34
+ else {
35
+ throw new Error(`Invalid provider for token: ${String(token)}`);
36
+ }
37
+ if (provider.isSingleton) {
38
+ this.singletons.set(token, instance);
39
+ }
40
+ return instance;
41
+ }
42
+ clear() {
43
+ this.registry.clear();
44
+ this.singletons.clear();
45
+ }
46
+ }
package/dist/di.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { Constructor, Provider, Token } from './common';
2
+ export declare const regSingleton: <T>(item: Provider<T>) => Token<T>;
3
+ export declare const regTransient: <T>(item: Provider<T>) => Token<T>;
4
+ export declare const di: <T>(token: Token<T>) => T;
5
+ export declare const singleton: <T extends Constructor>() => (target: T) => T;
6
+ export declare const transient: <T extends Constructor>() => (target: T) => T;
7
+ export declare const clearRegistry: () => void;
8
+ //# sourceMappingURL=di.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di.d.ts","sourceRoot":"","sources":["../src/di.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAC,MAAM,UAAU,CAAC;AAK3D,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,aAA8B,CAAC;AAChF,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,aAA8B,CAAC;AAChF,eAAO,MAAM,EAAE,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,CAAsB,CAAC;AAE/D,eAAO,MAAM,SAAS,GACnB,CAAC,SAAS,WAAW,QACrB,QAAQ,CAAC,KAAG,CAGZ,CAAC;AAEJ,eAAO,MAAM,SAAS,GACnB,CAAC,SAAS,WAAW,QACrB,QAAQ,CAAC,KAAG,CAGZ,CAAC;AAEJ,eAAO,MAAM,aAAa,YAAuB,CAAC"}
package/dist/di.js ADDED
@@ -0,0 +1,14 @@
1
+ import { DiContainer } from './container';
2
+ const DI_CTN = new DiContainer();
3
+ export const regSingleton = (item) => DI_CTN.regSingleton(item);
4
+ export const regTransient = (item) => DI_CTN.regTransient(item);
5
+ export const di = (token) => DI_CTN.get(token);
6
+ export const singleton = () => (target) => {
7
+ regSingleton(target);
8
+ return target;
9
+ };
10
+ export const transient = () => (target) => {
11
+ regTransient(target);
12
+ return target;
13
+ };
14
+ export const clearRegistry = () => DI_CTN.clear();
package/dist/index.d.ts CHANGED
@@ -1,18 +1,2 @@
1
- export type Constructor<T = unknown> = new (...args: any[]) => T;
2
- export type Token<T = unknown> = symbol | Constructor<T>;
3
- export interface FullProvider<T = unknown> {
4
- token: Token<T>;
5
- useClass?: Constructor<T>;
6
- useValue?: T;
7
- useFactory?: (...args: unknown[]) => T;
8
- isSingleton?: boolean;
9
- }
10
- export type Provider<T = unknown> = Constructor<T> | FullProvider<T>;
11
- export declare const toFullProvider: <T>(item: Provider<T>) => FullProvider<T>;
12
- export declare const regSingleton: <T>(item: Provider<T>) => Token<T>;
13
- export declare const regTransient: <T>(item: Provider<T>) => Token<T>;
14
- export declare const di: <T>(token: Token<T>) => T;
15
- export declare const singleton: <T extends Constructor>() => (target: T) => T;
16
- export declare const transient: <T extends Constructor>() => (target: T) => T;
17
- export declare const clearRegistry: () => void;
1
+ export * from './di';
18
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjE,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEzD,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAChB,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAerE,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAG,YAAY,CAAC,CAAC,CACP,CAAC;AAE9D,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,aACM,CAAC;AAExD,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,aACO,CAAC;AAEzD,eAAO,MAAM,EAAE,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,CA0BvC,CAAC;AAEF,eAAO,MAAM,SAAS,GACnB,CAAC,SAAS,WAAW,QACrB,QAAQ,CAAC,KAAG,CAGZ,CAAC;AAEJ,eAAO,MAAM,SAAS,GACnB,CAAC,SAAS,WAAW,QACrB,QAAQ,CAAC,KAAG,CAGZ,CAAC;AAEJ,eAAO,MAAM,aAAa,YAGzB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,51 +1 @@
1
- const REGISTRY = new Map();
2
- const SINGLETONS = new Map();
3
- const isFullProvider = (p) => typeof p === 'object' &&
4
- p !== null &&
5
- 'token' in p;
6
- const regFull = (provider) => {
7
- REGISTRY.set(provider.token, provider);
8
- return provider.token;
9
- };
10
- export const toFullProvider = (item) => isFullProvider(item) ? item : { token: item, useClass: item };
11
- export const regSingleton = (item) => regFull({ ...toFullProvider(item), isSingleton: true });
12
- export const regTransient = (item) => regFull({ ...toFullProvider(item), isSingleton: false });
13
- export const di = (token) => {
14
- const existing = SINGLETONS.get(token);
15
- if (existing) {
16
- return existing;
17
- }
18
- const provider = REGISTRY.get(token);
19
- if (!provider) {
20
- throw new Error(`${String(token)} not registered`);
21
- }
22
- let instance;
23
- if (provider.useValue !== undefined) {
24
- instance = provider.useValue;
25
- }
26
- else if (provider.useClass) {
27
- instance = new provider.useClass();
28
- }
29
- else if (provider.useFactory) {
30
- instance = provider.useFactory();
31
- }
32
- else {
33
- throw new Error(`Invalid provider for token: ${String(token)}`);
34
- }
35
- if (provider.isSingleton) {
36
- SINGLETONS.set(token, instance);
37
- }
38
- return instance;
39
- };
40
- export const singleton = () => (target) => {
41
- regSingleton(target);
42
- return target;
43
- };
44
- export const transient = () => (target) => {
45
- regTransient(target);
46
- return target;
47
- };
48
- export const clearRegistry = () => {
49
- REGISTRY.clear();
50
- SINGLETONS.clear();
51
- };
1
+ export * from './di';
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@tecp/di",
3
- "version": "1.0.2",
3
+ "version": "1.1.1",
4
4
  "description": "",
5
5
  "keywords": [],
6
- "author": "",
6
+ "author": "zhanjh <zhanjh@126.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/tecposter/tecp-di"
10
+ },
7
11
  "license": "ISC",
8
12
  "devEngines": {
9
13
  "packageManager": {
@@ -25,7 +29,12 @@
25
29
  "import": "./dist/index.js",
26
30
  "default": "./dist/index.js"
27
31
  },
28
- "./package.json": "./package.json"
32
+ "./package.json": "./package.json",
33
+ "./container": {
34
+ "types": "./dist/container.d.ts",
35
+ "import": "./dist/container.js",
36
+ "default": "./dist/container.js"
37
+ }
29
38
  },
30
39
  "files": [
31
40
  "dist"