@tecp/di 1.0.0 → 1.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.
@@ -0,0 +1,18 @@
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;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/dist/index.js ADDED
@@ -0,0 +1,51 @@
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
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tecp/di",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "",
@@ -34,7 +34,7 @@
34
34
  "types": "./dist/index.d.ts",
35
35
  "module": "./dist/index.js",
36
36
  "scripts": {
37
- "build": "rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.build.json",
37
+ "build": "rm -rf dist tsconfig.build.tsbuildinfo && tsc -p tsconfig.build.json",
38
38
  "test": "node --import tsx --test \"./**/*.test.ts\""
39
39
  }
40
40
  }