@tsed/di 8.9.5 → 8.10.0-rc.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/lib/browser/chunks/injectable.js +65 -0
- package/lib/browser/chunks/injectable.js.map +1 -0
- package/lib/browser/common/constants/constants.js +9 -0
- package/lib/browser/common/constants/constants.js.map +1 -0
- package/lib/browser/common/decorators/autoInjectable.js +26 -0
- package/lib/browser/common/decorators/autoInjectable.js.map +1 -0
- package/lib/browser/common/decorators/configuration.js +24 -0
- package/lib/browser/common/decorators/configuration.js.map +1 -0
- package/lib/browser/common/decorators/constant.js +27 -0
- package/lib/browser/common/decorators/constant.js.map +1 -0
- package/lib/browser/common/decorators/controller.js +23 -0
- package/lib/browser/common/decorators/controller.js.map +1 -0
- package/lib/browser/common/decorators/inject.js +62 -0
- package/lib/browser/common/decorators/inject.js.map +1 -0
- package/lib/browser/common/decorators/injectable.js +14 -0
- package/lib/browser/common/decorators/injectable.js.map +1 -0
- package/lib/browser/common/decorators/intercept.js +57 -0
- package/lib/browser/common/decorators/intercept.js.map +1 -0
- package/lib/browser/common/decorators/interceptor.js +11 -0
- package/lib/browser/common/decorators/interceptor.js.map +1 -0
- package/lib/browser/common/decorators/lazyInject.js +43 -0
- package/lib/browser/common/decorators/lazyInject.js.map +1 -0
- package/lib/browser/common/decorators/module.js +22 -0
- package/lib/browser/common/decorators/module.js.map +1 -0
- package/lib/browser/common/decorators/opts.js +12 -0
- package/lib/browser/common/decorators/opts.js.map +1 -0
- package/lib/browser/common/decorators/overrideProvider.js +10 -0
- package/lib/browser/common/decorators/overrideProvider.js.map +1 -0
- package/lib/browser/common/decorators/scope.js +9 -0
- package/lib/browser/common/decorators/scope.js.map +1 -0
- package/lib/browser/common/decorators/service.js +8 -0
- package/lib/browser/common/decorators/service.js.map +1 -0
- package/lib/browser/common/decorators/useOpts.js +23 -0
- package/lib/browser/common/decorators/useOpts.js.map +1 -0
- package/lib/browser/common/decorators/value.js +23 -0
- package/lib/browser/common/decorators/value.js.map +1 -0
- package/lib/browser/common/domain/Container.js +64 -0
- package/lib/browser/common/domain/Container.js.map +1 -0
- package/lib/browser/common/domain/ControllerProvider.js +35 -0
- package/lib/browser/common/domain/ControllerProvider.js.map +1 -0
- package/lib/browser/common/domain/InjectablePropertyType.js +5 -0
- package/lib/browser/common/domain/InjectablePropertyType.js.map +1 -0
- package/lib/browser/common/domain/LocalsContainer.js +13 -0
- package/lib/browser/common/domain/LocalsContainer.js.map +1 -0
- package/lib/browser/common/domain/Provider.js +144 -0
- package/lib/browser/common/domain/Provider.js.map +1 -0
- package/lib/browser/common/domain/ProviderScope.js +5 -0
- package/lib/browser/common/domain/ProviderScope.js.map +1 -0
- package/lib/browser/common/domain/ProviderType.js +5 -0
- package/lib/browser/common/domain/ProviderType.js.map +1 -0
- package/lib/browser/common/errors/InjectionError.js +31 -0
- package/lib/browser/common/errors/InjectionError.js.map +1 -0
- package/lib/browser/common/errors/InvalidPropertyTokenError.js +17 -0
- package/lib/browser/common/errors/InvalidPropertyTokenError.js.map +1 -0
- package/lib/browser/common/fn/configuration.js +13 -0
- package/lib/browser/common/fn/configuration.js.map +1 -0
- package/lib/browser/common/fn/constant.js +8 -0
- package/lib/browser/common/fn/constant.js.map +1 -0
- package/lib/browser/common/fn/inject.js +13 -0
- package/lib/browser/common/fn/inject.js.map +1 -0
- package/lib/browser/common/fn/injectMany.js +9 -0
- package/lib/browser/common/fn/injectMany.js.map +1 -0
- package/lib/browser/common/fn/injectable.js +8 -0
- package/lib/browser/common/fn/injectable.js.map +1 -0
- package/lib/browser/common/fn/injector.js +13 -0
- package/lib/browser/common/fn/injector.js.map +1 -0
- package/lib/browser/common/fn/lazyInject.js +23 -0
- package/lib/browser/common/fn/lazyInject.js.map +1 -0
- package/lib/browser/common/fn/localsContainer.js +29 -0
- package/lib/browser/common/fn/localsContainer.js.map +1 -0
- package/lib/browser/common/fn/refValue.js +15 -0
- package/lib/browser/common/fn/refValue.js.map +1 -0
- package/lib/browser/common/index.js +113 -0
- package/lib/browser/common/index.js.map +1 -0
- package/lib/browser/common/registries/GlobalProviders.js +102 -0
- package/lib/browser/common/registries/GlobalProviders.js.map +1 -0
- package/lib/browser/common/registries/ProviderRegistry.js +8 -0
- package/lib/browser/common/registries/ProviderRegistry.js.map +1 -0
- package/lib/browser/common/services/DIConfiguration.js +99 -0
- package/lib/browser/common/services/DIConfiguration.js.map +1 -0
- package/lib/browser/common/services/DILogger.js +8 -0
- package/lib/browser/common/services/DILogger.js.map +1 -0
- package/lib/browser/common/services/InjectorService.js +378 -0
- package/lib/browser/common/services/InjectorService.js.map +1 -0
- package/lib/browser/common/utils/colors.js +5 -0
- package/lib/browser/common/utils/colors.js.map +1 -0
- package/lib/browser/common/utils/createContainer.js +10 -0
- package/lib/browser/common/utils/createContainer.js.map +1 -0
- package/lib/browser/common/utils/discoverHooks.js +17 -0
- package/lib/browser/common/utils/discoverHooks.js.map +1 -0
- package/lib/browser/common/utils/getConfiguration.js +20 -0
- package/lib/browser/common/utils/getConfiguration.js.map +1 -0
- package/lib/browser/common/utils/getConstructorDependencies.js +12 -0
- package/lib/browser/common/utils/getConstructorDependencies.js.map +1 -0
- package/lib/browser/common/utils/providerBuilder.js +8 -0
- package/lib/browser/common/utils/providerBuilder.js.map +1 -0
- package/lib/esm/common/decorators/autoInjectable.js +1 -1
- package/lib/esm/common/decorators/autoInjectable.js.map +1 -1
- package/lib/esm/common/decorators/configuration.js +2 -1
- package/lib/esm/common/decorators/configuration.js.map +1 -1
- package/lib/esm/common/decorators/constant.js +3 -2
- package/lib/esm/common/decorators/constant.js.map +1 -1
- package/lib/esm/common/decorators/controller.js +13 -6
- package/lib/esm/common/decorators/controller.js.map +1 -1
- package/lib/esm/common/decorators/inject.js +6 -1
- package/lib/esm/common/decorators/inject.js.map +1 -1
- package/lib/esm/common/decorators/intercept.js +5 -1
- package/lib/esm/common/decorators/intercept.js.map +1 -1
- package/lib/esm/common/decorators/lazyInject.js +2 -1
- package/lib/esm/common/decorators/lazyInject.js.map +1 -1
- package/lib/esm/common/decorators/module.js +1 -1
- package/lib/esm/common/decorators/module.js.map +1 -1
- package/lib/esm/common/decorators/opts.js +1 -1
- package/lib/esm/common/decorators/opts.js.map +1 -1
- package/lib/esm/common/decorators/scope.js +1 -1
- package/lib/esm/common/decorators/scope.js.map +1 -1
- package/lib/esm/common/decorators/useOpts.js +4 -1
- package/lib/esm/common/decorators/useOpts.js.map +1 -1
- package/lib/esm/common/decorators/value.js +2 -2
- package/lib/esm/common/decorators/value.js.map +1 -1
- package/lib/esm/common/domain/Provider.js +5 -1
- package/lib/esm/common/domain/Provider.js.map +1 -1
- package/lib/esm/common/errors/InjectionError.js +4 -1
- package/lib/esm/common/errors/InjectionError.js.map +1 -1
- package/lib/esm/common/errors/InvalidPropertyTokenError.js +2 -1
- package/lib/esm/common/errors/InvalidPropertyTokenError.js.map +1 -1
- package/lib/esm/common/fn/configuration.js +1 -1
- package/lib/esm/common/fn/configuration.js.map +1 -1
- package/lib/esm/common/fn/lazyInject.js +1 -1
- package/lib/esm/common/fn/lazyInject.js.map +1 -1
- package/lib/esm/common/registries/GlobalProviders.js +1 -1
- package/lib/esm/common/registries/GlobalProviders.js.map +1 -1
- package/lib/esm/common/services/DIConfiguration.js +2 -1
- package/lib/esm/common/services/DIConfiguration.js.map +1 -1
- package/lib/esm/common/services/InjectorService.js +10 -1
- package/lib/esm/common/services/InjectorService.js.map +1 -1
- package/lib/esm/common/utils/discoverHooks.js +1 -1
- package/lib/esm/common/utils/discoverHooks.js.map +1 -1
- package/lib/esm/common/utils/getConfiguration.js +1 -1
- package/lib/esm/common/utils/getConfiguration.js.map +1 -1
- package/lib/esm/common/utils/getConstructorDependencies.js +1 -1
- package/lib/esm/common/utils/getConstructorDependencies.js.map +1 -1
- package/lib/esm/common/utils/providerBuilder.js.map +1 -1
- package/lib/esm/node/decorators/injectContext.js +1 -1
- package/lib/esm/node/decorators/injectContext.js.map +1 -1
- package/lib/esm/node/services/DITest.js +4 -1
- package/lib/esm/node/services/DITest.js.map +1 -1
- package/lib/types/common/decorators/constant.d.ts +1 -1
- package/lib/types/common/decorators/controller.d.ts +1 -1
- package/lib/types/common/decorators/inject.d.ts +1 -1
- package/lib/types/common/decorators/intercept.d.ts +1 -1
- package/lib/types/common/decorators/overrideProvider.d.ts +1 -1
- package/lib/types/common/decorators/value.d.ts +1 -1
- package/lib/types/common/domain/Provider.d.ts +2 -1
- package/lib/types/common/fn/injectable.d.ts +3 -3
- package/lib/types/common/interfaces/RegistrySettings.d.ts +1 -1
- package/lib/types/common/registries/GlobalProviders.d.ts +1 -1
- package/lib/types/common/services/DIConfiguration.d.ts +1 -1
- package/lib/types/common/utils/createContainer.d.ts +1 -1
- package/lib/types/common/utils/discoverHooks.d.ts +1 -1
- package/lib/types/common/utils/getConfiguration.d.ts +1 -1
- package/lib/types/common/utils/providerBuilder.d.ts +2 -1
- package/package.json +17 -19
- package/src/common/decorators/autoInjectable.ts +2 -1
- package/src/common/decorators/configuration.ts +4 -2
- package/src/common/decorators/constant.ts +3 -2
- package/src/common/decorators/controller.ts +18 -10
- package/src/common/decorators/inject.ts +7 -1
- package/src/common/decorators/intercept.ts +8 -1
- package/src/common/decorators/lazyInject.ts +2 -1
- package/src/common/decorators/module.ts +1 -1
- package/src/common/decorators/opts.ts +1 -1
- package/src/common/decorators/overrideProvider.ts +1 -1
- package/src/common/decorators/scope.ts +1 -1
- package/src/common/decorators/useOpts.ts +4 -1
- package/src/common/decorators/value.ts +2 -2
- package/src/common/domain/Provider.ts +6 -1
- package/src/common/errors/InjectionError.ts +4 -1
- package/src/common/errors/InvalidPropertyTokenError.ts +2 -1
- package/src/common/fn/configuration.ts +1 -1
- package/src/common/fn/lazyInject.ts +1 -1
- package/src/common/interfaces/RegistrySettings.ts +1 -1
- package/src/common/registries/GlobalProviders.ts +2 -1
- package/src/common/services/DIConfiguration.ts +3 -1
- package/src/common/services/InjectorService.ts +10 -1
- package/src/common/utils/createContainer.ts +1 -1
- package/src/common/utils/discoverHooks.ts +2 -1
- package/src/common/utils/getConfiguration.ts +2 -1
- package/src/common/utils/getConstructorDependencies.ts +1 -1
- package/src/common/utils/providerBuilder.ts +2 -1
- package/src/node/decorators/injectContext.ts +1 -1
- package/src/node/services/DITest.ts +4 -1
- package/vite.config.mts +45 -0
- package/lib/browser/di.umd.min.js +0 -2
- package/lib/browser/di.umd.min.js.map +0 -1
- package/webpack.config.cjs +0 -8
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ProviderType as i } from "../common/domain/ProviderType.js";
|
|
2
|
+
import { ControllerProvider as m } from "../common/domain/ControllerProvider.js";
|
|
3
|
+
import { GlobalProviders as l } from "../common/registries/GlobalProviders.js";
|
|
4
|
+
import { injector as p } from "../common/fn/injector.js";
|
|
5
|
+
l.createRegistry(i.CONTROLLER, m);
|
|
6
|
+
function R({ token: o, provide: s, ...t }) {
|
|
7
|
+
return f(o || s, {
|
|
8
|
+
...t,
|
|
9
|
+
token: o || s
|
|
10
|
+
}).inspect();
|
|
11
|
+
}
|
|
12
|
+
function n(o, s = {}) {
|
|
13
|
+
return (t, d = {}) => {
|
|
14
|
+
const a = {
|
|
15
|
+
global: !p().isLoaded(),
|
|
16
|
+
...d,
|
|
17
|
+
...s,
|
|
18
|
+
token: t
|
|
19
|
+
}, r = l.merge(t, a);
|
|
20
|
+
return a.global || p().setProvider(t, r), o.reduce(
|
|
21
|
+
(e, u) => ({
|
|
22
|
+
...e,
|
|
23
|
+
[u]: function(y) {
|
|
24
|
+
return r[u] = y, this;
|
|
25
|
+
}
|
|
26
|
+
}),
|
|
27
|
+
{
|
|
28
|
+
factory(e) {
|
|
29
|
+
return r.reset(), r.useFactory = e, this;
|
|
30
|
+
},
|
|
31
|
+
asyncFactory(e) {
|
|
32
|
+
return r.reset(), r.useAsyncFactory = e, this;
|
|
33
|
+
},
|
|
34
|
+
value(e) {
|
|
35
|
+
return r.reset(), r.useValue = e, r.type = i.VALUE, this;
|
|
36
|
+
},
|
|
37
|
+
class(e) {
|
|
38
|
+
return r.reset(), r.useClass = e, this;
|
|
39
|
+
},
|
|
40
|
+
store() {
|
|
41
|
+
return r.store;
|
|
42
|
+
},
|
|
43
|
+
inspect() {
|
|
44
|
+
return r;
|
|
45
|
+
},
|
|
46
|
+
token() {
|
|
47
|
+
return r.token;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const c = ["type", "scope", "path", "alias", "hooks", "deps", "imports", "configuration", "priority"], f = n(c), L = n(c, {
|
|
54
|
+
type: i.INTERCEPTOR
|
|
55
|
+
}), C = n([...c, "middlewares"], {
|
|
56
|
+
type: i.CONTROLLER
|
|
57
|
+
});
|
|
58
|
+
export {
|
|
59
|
+
L as a,
|
|
60
|
+
C as c,
|
|
61
|
+
f as i,
|
|
62
|
+
n as p,
|
|
63
|
+
R as r
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=injectable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.js","sources":["../../../src/common/registries/ProviderRegistry.ts","../../../src/common/utils/providerBuilder.ts","../../../src/common/fn/injectable.ts"],"sourcesContent":["import {ControllerProvider} from \"../domain/ControllerProvider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {injectable} from \"../fn/injectable.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"./GlobalProviders.js\";\n\nGlobalProviders.createRegistry(ProviderType.CONTROLLER, ControllerProvider);\n\ntype Opts<Type = any> = Partial<ProviderOpts<Type>> &\n (\n | {\n token: TokenProvider<Type>;\n }\n | {\n /**\n * @deprecated use token prop instead\n */\n provide: TokenProvider<Type>;\n }\n );\n\n/**\n * Register a provider configuration.\n * @deprecated Since v8. Use injectable() function instead.\n */\nexport function registerProvider<Type = any>({token, provide, ...opts}: Opts<Type>) {\n return injectable(token || provide, {\n ...opts,\n token: token || provide\n } as unknown as Partial<ProviderOpts>).inspect();\n}\n","import \"../registries/ProviderRegistry.js\";\n\nimport {Store} from \"@tsed/core/types/Store.js\";\nimport {type Type} from \"@tsed/core/types/Type.js\";\n\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {injector} from \"../fn/injector.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {FactoryTokenProvider, TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\ntype BaseMethodsProvider<TypeOf, BaseProvider, T extends object> = {\n [K in keyof T as T[K] extends (...args: any[]) => any ? never : K]: (value: T[K]) => ProviderBuilder<TypeOf, BaseProvider, T>;\n};\n\ntype ProviderBuilder<TypeOf, BaseProvider, T extends object> = BaseMethodsProvider<TypeOf, BaseProvider, T> & {\n inspect(): BaseProvider;\n store(): Store;\n token(): TypeOf;\n factory<FactoryReturn>(f: (...args: unknown[]) => FactoryReturn): ProviderBuilder<FactoryTokenProvider<FactoryReturn>, BaseProvider, T>;\n asyncFactory<FactoryReturn>(\n f: (...args: unknown[]) => Promise<FactoryReturn>\n ): ProviderBuilder<FactoryTokenProvider<FactoryReturn>, BaseProvider, T>;\n value<Value>(v: Value): ProviderBuilder<FactoryTokenProvider<Value>, BaseProvider, T>;\n class<TokenKlass>(c: Type<TokenKlass>): ProviderBuilder<TokenKlass, BaseProvider, T>;\n};\n\nexport type ProviderBuilderFn<Provider, Picked extends keyof Provider> = <TypeOf extends TokenProvider>(\n token: TypeOf,\n options?: Partial<ProviderOpts<Type>>\n) => ProviderBuilder<TypeOf, Provider, Pick<Provider, Picked>>;\n\nexport function providerBuilder<Provider, Picked extends keyof Provider>(\n props: string[],\n baseOpts: Partial<ProviderOpts<Provider>> = {}\n): ProviderBuilderFn<Provider, Picked> {\n return <TypeOf extends TokenProvider>(token: TypeOf, options: Partial<ProviderOpts<Type>> = {}) => {\n const merged = {\n global: !injector().isLoaded(),\n ...options,\n ...baseOpts,\n token\n };\n\n const provider = GlobalProviders.merge(token, merged);\n\n if (!merged.global) {\n injector().setProvider(token, provider);\n }\n\n return props.reduce(\n (acc, prop) => {\n return {\n ...acc,\n [prop]: function (value: any) {\n (provider as any)[prop] = value;\n return this;\n }\n };\n },\n {\n factory(factory: Function) {\n provider.reset();\n provider.useFactory = factory;\n return this;\n },\n asyncFactory(asyncFactory: Function) {\n provider.reset();\n provider.useAsyncFactory = asyncFactory;\n return this;\n },\n value(value: any) {\n provider.reset();\n provider.useValue = value;\n provider.type = ProviderType.VALUE;\n return this;\n },\n class(k: any) {\n provider.reset();\n provider.useClass = k;\n return this;\n },\n store() {\n return provider.store;\n },\n inspect() {\n return provider;\n },\n token() {\n return provider.token as TypeOf;\n }\n } as ProviderBuilder<TypeOf, Provider, Pick<Provider, Picked>>\n );\n };\n}\n","import {ControllerProvider} from \"../domain/ControllerProvider.js\";\nimport type {Provider} from \"../domain/Provider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {providerBuilder} from \"../utils/providerBuilder.js\";\n\ntype PickedProps = \"scope\" | \"path\" | \"alias\" | \"hooks\" | \"deps\" | \"imports\" | \"configuration\" | \"priority\";\n\nconst Props = [\"type\", \"scope\", \"path\", \"alias\", \"hooks\", \"deps\", \"imports\", \"configuration\", \"priority\"];\nexport const injectable = providerBuilder<Provider, PickedProps | \"type\">(Props);\nexport const interceptor = providerBuilder<Provider, PickedProps | \"type\">(Props, {\n type: ProviderType.INTERCEPTOR\n});\nexport const controller = providerBuilder<ControllerProvider, PickedProps | \"children\" | \"middlewares\">([...Props, \"middlewares\"], {\n type: ProviderType.CONTROLLER\n});\n"],"names":["GlobalProviders","ProviderType","ControllerProvider","registerProvider","token","provide","opts","injectable","providerBuilder","props","baseOpts","options","merged","injector","provider","acc","prop","value","factory","asyncFactory","k","Props","interceptor","controller"],"mappings":";;;;AAOAA,EAAgB,eAAeC,EAAa,YAAYC,CAAkB;AAmBnE,SAASC,EAA6B,EAAC,OAAAC,GAAO,SAAAC,GAAS,GAAGC,KAAmB;AAC3E,SAAAC,EAAWH,KAASC,GAAS;AAAA,IAClC,GAAGC;AAAA,IACH,OAAOF,KAASC;AAAA,EACmB,CAAA,EAAE,QAAQ;AACjD;ACCO,SAASG,EACdC,GACAC,IAA4C,IACP;AACrC,SAAO,CAA+BN,GAAeO,IAAuC,OAAO;AACjG,UAAMC,IAAS;AAAA,MACb,QAAQ,CAACC,EAAS,EAAE,SAAS;AAAA,MAC7B,GAAGF;AAAA,MACH,GAAGD;AAAA,MACH,OAAAN;AAAA,IACF,GAEMU,IAAWd,EAAgB,MAAMI,GAAOQ,CAAM;AAEhD,WAACA,EAAO,UACDC,IAAE,YAAYT,GAAOU,CAAQ,GAGjCL,EAAM;AAAA,MACX,CAACM,GAAKC,OACG;AAAA,QACL,GAAGD;AAAA,QACH,CAACC,CAAI,GAAG,SAAUC,GAAY;AAC3B,iBAAAH,EAAiBE,CAAI,IAAIC,GACnB;AAAA,QAAA;AAAA,MAEX;AAAA,MAEF;AAAA,QACE,QAAQC,GAAmB;AACzB,iBAAAJ,EAAS,MAAM,GACfA,EAAS,aAAaI,GACf;AAAA,QACT;AAAA,QACA,aAAaC,GAAwB;AACnC,iBAAAL,EAAS,MAAM,GACfA,EAAS,kBAAkBK,GACpB;AAAA,QACT;AAAA,QACA,MAAMF,GAAY;AAChB,iBAAAH,EAAS,MAAM,GACfA,EAAS,WAAWG,GACpBH,EAAS,OAAOb,EAAa,OACtB;AAAA,QACT;AAAA,QACA,MAAMmB,GAAQ;AACZ,iBAAAN,EAAS,MAAM,GACfA,EAAS,WAAWM,GACb;AAAA,QACT;AAAA,QACA,QAAQ;AACN,iBAAON,EAAS;AAAA,QAClB;AAAA,QACA,UAAU;AACD,iBAAAA;AAAA,QACT;AAAA,QACA,QAAQ;AACN,iBAAOA,EAAS;AAAA,QAAA;AAAA,MAClB;AAAA,IAEJ;AAAA,EACF;AACF;ACvFA,MAAMO,IAAQ,CAAC,QAAQ,SAAS,QAAQ,SAAS,SAAS,QAAQ,WAAW,iBAAiB,UAAU,GAC3Fd,IAAaC,EAAgDa,CAAK,GAClEC,IAAcd,EAAgDa,GAAO;AAAA,EAChF,MAAMpB,EAAa;AACrB,CAAC,GACYsB,IAAaf,EAA8E,CAAC,GAAGa,GAAO,aAAa,GAAG;AAAA,EACjI,MAAMpB,EAAa;AACrB,CAAC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const I = Symbol("DI_INVOKE_OPTIONS"), O = Symbol("DI_INJECTABLE_PROPS"), _ = "DI_USE_OPTIONS", P = "DI_USE_PARAM_OPTIONS", S = "DI_INTERCEPTOR_OPTIONS";
|
|
2
|
+
export {
|
|
3
|
+
O as DI_INJECTABLE_PROPS,
|
|
4
|
+
S as DI_INTERCEPTOR_OPTIONS,
|
|
5
|
+
I as DI_INVOKE_OPTIONS,
|
|
6
|
+
_ as DI_USE_OPTIONS,
|
|
7
|
+
P as DI_USE_PARAM_OPTIONS
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../src/common/constants/constants.ts"],"sourcesContent":["export const DI_INVOKE_OPTIONS = Symbol(\"DI_INVOKE_OPTIONS\");\nexport const DI_INJECTABLE_PROPS = Symbol(\"DI_INJECTABLE_PROPS\");\nexport const DI_USE_OPTIONS = \"DI_USE_OPTIONS\";\nexport const DI_USE_PARAM_OPTIONS = \"DI_USE_PARAM_OPTIONS\";\nexport const DI_INTERCEPTOR_OPTIONS = \"DI_INTERCEPTOR_OPTIONS\";\n"],"names":["DI_INVOKE_OPTIONS","DI_INJECTABLE_PROPS","DI_USE_OPTIONS","DI_USE_PARAM_OPTIONS","DI_INTERCEPTOR_OPTIONS"],"mappings":"AAAa,MAAAA,IAAoB,OAAO,mBAAmB,GAC9CC,IAAsB,OAAO,qBAAqB,GAClDC,IAAiB,kBACjBC,IAAuB,wBACvBC,IAAyB;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { isArray as a } from "@tsed/core/utils/isArray.js";
|
|
2
|
+
import { LocalsContainer as p } from "../domain/LocalsContainer.js";
|
|
3
|
+
import { injector as m } from "../fn/injector.js";
|
|
4
|
+
import { getConstructorDependencies as f } from "../utils/getConstructorDependencies.js";
|
|
5
|
+
function h(t, n) {
|
|
6
|
+
const o = m(), c = new p(), i = f(t), r = [], l = Math.max(i.length, n.length);
|
|
7
|
+
for (let e = 0; e < l; e++)
|
|
8
|
+
if (n[e] !== void 0)
|
|
9
|
+
r.push(n[e]);
|
|
10
|
+
else {
|
|
11
|
+
const s = i[e], u = a(s) ? o.getMany(s[0], { locals: c, parent: t }) : o.invoke(s, { locals: c, parent: t });
|
|
12
|
+
r.push(u);
|
|
13
|
+
}
|
|
14
|
+
return r;
|
|
15
|
+
}
|
|
16
|
+
function b() {
|
|
17
|
+
return (t) => class extends t {
|
|
18
|
+
constructor(...o) {
|
|
19
|
+
super(...h(t, o));
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
b as AutoInjectable
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=autoInjectable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoInjectable.js","sources":["../../../../src/common/decorators/autoInjectable.ts"],"sourcesContent":["import {type Type} from \"@tsed/core/types/Type.js\";\nimport {isArray} from \"@tsed/core/utils/isArray.js\";\n\nimport {LocalsContainer} from \"../domain/LocalsContainer.js\";\nimport {injector} from \"../fn/injector.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {getConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\n\nfunction resolveAutoInjectableArgs(token: Type, args: unknown[]) {\n const inj = injector();\n const locals = new LocalsContainer();\n const deps: TokenProvider[] = getConstructorDependencies(token);\n const list: any[] = [];\n const length = Math.max(deps.length, args.length);\n\n for (let i = 0; i < length; i++) {\n if (args[i] !== undefined) {\n list.push(args[i]);\n } else {\n const value = deps[i];\n const instance = isArray(value) ? inj.getMany(value[0], {locals, parent: token}) : inj.invoke(value, {locals, parent: token});\n\n list.push(instance);\n }\n }\n\n return list;\n}\n\n/**\n * AutoInjectable decorator is used to automatically inject dependencies in the constructor.\n *\n * @example\n * ```typescript\n * @AutoInjectable()\n * class UserService {\n * constructor(\n * private database: Database, // automatically injected\n * customConfig?: Config // can be passed manually\n * ) {}\n * }\n * ```\n *\n * @description\n * When applied to a class, this decorator:\n * - Automatically resolves and injects dependencies based on constructor parameter types\n * - Preserves the ability to manually pass arguments which override automatic injection\n *\n * @decorator\n * @returns {ClassDecorator} A class decorator that enables automatic dependency injection\n */\nexport function AutoInjectable() {\n return <T extends {new (...args: any[]): NonNullable<unknown>}>(constr: T): T => {\n return class AutoInjectable extends constr {\n constructor(...args: any[]) {\n super(...resolveAutoInjectableArgs(constr, args));\n }\n } as unknown as T;\n };\n}\n"],"names":["resolveAutoInjectableArgs","token","args","inj","injector","locals","LocalsContainer","deps","getConstructorDependencies","list","length","i","value","instance","isArray","AutoInjectable","constr"],"mappings":";;;;AAQA,SAASA,EAA0BC,GAAaC,GAAiB;AAC/D,QAAMC,IAAMC,EAAS,GACfC,IAAS,IAAIC,EAAgB,GAC7BC,IAAwBC,EAA2BP,CAAK,GACxDQ,IAAc,CAAC,GACfC,IAAS,KAAK,IAAIH,EAAK,QAAQL,EAAK,MAAM;AAEhD,WAASS,IAAI,GAAGA,IAAID,GAAQC;AACtB,QAAAT,EAAKS,CAAC,MAAM;AACT,MAAAF,EAAA,KAAKP,EAAKS,CAAC,CAAC;AAAA,SACZ;AACC,YAAAC,IAAQL,EAAKI,CAAC,GACdE,IAAWC,EAAQF,CAAK,IAAIT,EAAI,QAAQS,EAAM,CAAC,GAAG,EAAC,QAAAP,GAAQ,QAAQJ,EAAK,CAAC,IAAIE,EAAI,OAAOS,GAAO,EAAC,QAAAP,GAAQ,QAAQJ,GAAM;AAE5H,MAAAQ,EAAK,KAAKI,CAAQ;AAAA,IAAA;AAIf,SAAAJ;AACT;AAwBO,SAASM,IAAiB;AAC/B,SAAO,CAAyDC,MACvD,cAA6BA,EAAO;AAAA,IACzC,eAAed,GAAa;AAC1B,YAAM,GAAGF,EAA0BgB,GAAQd,CAAI,CAAC;AAAA,IAAA;AAAA,EAEpD;AAEJ;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DecoratorTypes as r } from "@tsed/core/types/DecoratorTypes.js";
|
|
2
|
+
import { decoratorTypeOf as i } from "@tsed/core/utils/decoratorTypeOf.js";
|
|
3
|
+
import { configuration as e } from "../fn/configuration.js";
|
|
4
|
+
import { i as f } from "../../chunks/injectable.js";
|
|
5
|
+
import { injector as m } from "../fn/injector.js";
|
|
6
|
+
import { DIConfiguration as n } from "../services/DIConfiguration.js";
|
|
7
|
+
import { Inject as c } from "./inject.js";
|
|
8
|
+
function p(t = {}) {
|
|
9
|
+
return (...o) => {
|
|
10
|
+
switch (i(o)) {
|
|
11
|
+
case r.CLASS:
|
|
12
|
+
e(o[0], t);
|
|
13
|
+
break;
|
|
14
|
+
default:
|
|
15
|
+
case r.PARAM_CTOR:
|
|
16
|
+
return c(n)(o[0], o[1], o[2]);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
f(p).factory(() => m().settings);
|
|
21
|
+
export {
|
|
22
|
+
p as Configuration
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=configuration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.js","sources":["../../../../src/common/decorators/configuration.ts"],"sourcesContent":["import {DecoratorParameters} from \"@tsed/core/types/DecoratorParameters.js\";\nimport {DecoratorTypes} from \"@tsed/core/types/DecoratorTypes.js\";\nimport {decoratorTypeOf} from \"@tsed/core/utils/decoratorTypeOf.js\";\n\nimport {configuration} from \"../fn/configuration.js\";\nimport {injectable} from \"../fn/injectable.js\";\nimport {injector} from \"../fn/injector.js\";\nimport {DIConfiguration} from \"../services/DIConfiguration.js\";\nimport {Inject} from \"./inject.js\";\n\n/**\n * Get or set Configuration on a class.\n *\n * @decorator\n */\nexport function Configuration(): any;\nexport function Configuration(settings: Partial<TsED.Configuration>): ClassDecorator;\nexport function Configuration(settings: Partial<TsED.Configuration> = {}): Function {\n return (...args: DecoratorParameters) => {\n switch (decoratorTypeOf(args)) {\n case DecoratorTypes.CLASS:\n configuration(args[0], settings);\n\n break;\n default:\n case DecoratorTypes.PARAM_CTOR:\n return Inject(DIConfiguration)(args[0], args[1], args[2] as number);\n }\n };\n}\n\nexport type Configuration = TsED.DIConfiguration & DIConfiguration;\n\n// To maintain compatibility with the previous implementation, we need to declare Configuration as\n// injectable token.\ninjectable(Configuration).factory(() => injector().settings);\n"],"names":["Configuration","settings","args","decoratorTypeOf","DecoratorTypes","configuration","Inject","DIConfiguration","injectable","injector"],"mappings":";;;;;;;AAiBgB,SAAAA,EAAcC,IAAwC,IAAc;AAClF,SAAO,IAAIC,MAA8B;AAC/B,YAAAC,EAAgBD,CAAI,GAAG;AAAA,MAC7B,KAAKE,EAAe;AACJ,QAAAC,EAAAH,EAAK,CAAC,GAAGD,CAAQ;AAE/B;AAAA,MACF;AAAA,MACA,KAAKG,EAAe;AACX,eAAAE,EAAOC,CAAe,EAAEL,EAAK,CAAC,GAAGA,EAAK,CAAC,GAAGA,EAAK,CAAC,CAAW;AAAA,IAAA;AAAA,EAExE;AACF;AAMAM,EAAWR,CAAa,EAAE,QAAQ,MAAMS,EAAA,EAAW,QAAQ;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { catchError as s } from "@tsed/core/utils/catchError.js";
|
|
2
|
+
import { deepClone as f } from "@tsed/core/utils/deepClone.js";
|
|
3
|
+
import { constant as c } from "../fn/constant.js";
|
|
4
|
+
function m(e, n, o, r) {
|
|
5
|
+
const t = Symbol();
|
|
6
|
+
s(() => Reflect.deleteProperty(e, n)), Reflect.defineProperty(e, n, {
|
|
7
|
+
get() {
|
|
8
|
+
if (this[t] !== void 0)
|
|
9
|
+
return this[t];
|
|
10
|
+
const i = c(o, r);
|
|
11
|
+
return this[t] = Object.freeze(f(i)), this[t];
|
|
12
|
+
},
|
|
13
|
+
set(i) {
|
|
14
|
+
(c(o, r) || this[t]) === void 0 && i !== void 0 && (this[t] = i);
|
|
15
|
+
},
|
|
16
|
+
enumerable: !0,
|
|
17
|
+
configurable: !0
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function l(e, n) {
|
|
21
|
+
return (o, r) => m(o, r, e, n);
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
l as Constant,
|
|
25
|
+
m as bindConstant
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constant.js","sources":["../../../../src/common/decorators/constant.ts"],"sourcesContent":["import {catchError} from \"@tsed/core/utils/catchError.js\";\nimport {deepClone} from \"@tsed/core/utils/deepClone.js\";\n\nimport {constant} from \"../fn/constant.js\";\n\nexport function bindConstant(target: any, propertyKey: string | symbol, expression: string, defaultValue?: any) {\n const symbol = Symbol();\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n get() {\n if (this[symbol] !== undefined) {\n return this[symbol];\n }\n\n const value = constant(expression, defaultValue);\n\n this[symbol] = Object.freeze(deepClone(value));\n\n return this[symbol];\n },\n set(value: unknown) {\n const bean = constant(expression, defaultValue) || this[symbol];\n\n if (bean === undefined && value !== undefined) {\n this[symbol] = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\n/**\n * Return value from Configuration.\n *\n * ## Example\n *\n * ```typescript\n * import {Env} from \"@tsed/core/domain/Env.js\";\n * import {Constant, Value} from \"@tsed/di\";\n *\n * export class MyClass {\n *\n * @Constant(\"env\")\n * env: Env;\n *\n * @Value(\"swagger.path\")\n * swaggerPath: string;\n *\n * @Value(\"swagger.path\", \"defaultValue\")\n * swaggerPath: string;\n *\n * constructor() {\n * console.log(this.swaggerPath) // undefined. Not available on constructor\n * }\n *\n * $onInit() {\n * console.log(this.swaggerPath) // something\n * }\n * }\n * ```\n *\n * @param {string} expression\n * @param defaultValue\n * @returns {(targetClass: any, attributeName: string) => any}\n * @decorator\n */\nexport function Constant<Type = unknown>(expression: string, defaultValue?: Type): PropertyDecorator {\n return (target, propertyKey) => {\n return bindConstant(target, propertyKey, expression, defaultValue);\n };\n}\n"],"names":["bindConstant","target","propertyKey","expression","defaultValue","symbol","catchError","value","constant","deepClone","Constant"],"mappings":";;;AAKO,SAASA,EAAaC,GAAaC,GAA8BC,GAAoBC,GAAoB;AAC9G,QAAMC,IAAS,OAAO;AAEtB,EAAAC,EAAW,MAAM,QAAQ,eAAeL,GAAQC,CAAW,CAAC,GACpD,QAAA,eAAeD,GAAQC,GAAa;AAAA,IAC1C,MAAM;AACA,UAAA,KAAKG,CAAM,MAAM;AACnB,eAAO,KAAKA,CAAM;AAGd,YAAAE,IAAQC,EAASL,GAAYC,CAAY;AAE/C,kBAAKC,CAAM,IAAI,OAAO,OAAOI,EAAUF,CAAK,CAAC,GAEtC,KAAKF,CAAM;AAAA,IACpB;AAAA,IACA,IAAIE,GAAgB;AAGd,OAFSC,EAASL,GAAYC,CAAY,KAAK,KAAKC,CAAM,OAEjD,UAAaE,MAAU,WAClC,KAAKF,CAAM,IAAIE;AAAA,IAEnB;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,EAAA,CACf;AACH;AAqCgB,SAAAG,EAAyBP,GAAoBC,GAAwC;AAC5F,SAAA,CAACH,GAAQC,MACPF,EAAaC,GAAQC,GAAaC,GAAYC,CAAY;AAErE;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Store as a } from "@tsed/core/types/Store.js";
|
|
2
|
+
import { classOf as c } from "@tsed/core/utils/classOf.js";
|
|
3
|
+
import { isArrayOrArrayClass as l } from "@tsed/core/utils/isArray.js";
|
|
4
|
+
import { useDecorators as m } from "@tsed/core/utils/useDecorators.js";
|
|
5
|
+
import { c as i } from "../../chunks/injectable.js";
|
|
6
|
+
function p(r) {
|
|
7
|
+
return typeof r == "string" || r instanceof RegExp || l(r) ? {
|
|
8
|
+
path: r
|
|
9
|
+
} : r;
|
|
10
|
+
}
|
|
11
|
+
function d(r) {
|
|
12
|
+
const { children: t = [], path: o, ...s } = p(r);
|
|
13
|
+
return m((e) => {
|
|
14
|
+
const n = i(e, s);
|
|
15
|
+
o && n.store().set("path", o), n.store().set("childrenControllers", t), t.forEach((f) => {
|
|
16
|
+
a.from(f).set("parentController", c(e));
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
d as Controller
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sources":["../../../../src/common/decorators/controller.ts"],"sourcesContent":["import {Store} from \"@tsed/core/types/Store.js\";\nimport {Type} from \"@tsed/core/types/Type.js\";\nimport {classOf} from \"@tsed/core/utils/classOf.js\";\nimport {isArrayOrArrayClass} from \"@tsed/core/utils/isArray.js\";\nimport {useDecorators} from \"@tsed/core/utils/useDecorators.js\";\n\nimport type {ControllerMiddlewares} from \"../domain/ControllerProvider.js\";\nimport {controller} from \"../fn/injectable.js\";\nimport {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\n\nexport type PathType = string | RegExp | (string | RegExp)[];\n\nexport interface ControllerOptions extends Partial<ProviderOpts<any>> {\n path?: PathType;\n children?: Type<any>[];\n middlewares?: Partial<ControllerMiddlewares>;\n}\n\nfunction mapOptions(options: any): ControllerOptions {\n if (typeof options === \"string\" || options instanceof RegExp || isArrayOrArrayClass(options)) {\n return {\n path: options\n };\n }\n\n return options;\n}\n\n/**\n * Declare a new controller with his Rest path. His methods annotated will be collected to build the routing list.\n * This routing listing will be built with the `express.Router` object.\n *\n * ::: tip\n * See [Controllers](/docs/controllers.md) section for more details\n * :::\n *\n * ```typescript\n * @Controller(\"/calendars\")\n * export class CalendarCtrl {\n *\n * @Get(\"/:id\")\n * public get(\n * @Req() request: Req,\n * @Res() response: Res,\n * @Next() next: Next\n * ): void {\n *\n * }\n * }\n * ```\n *\n * @param options\n * @controller\n * @decorator\n * @classDecorator\n */\nexport function Controller(options: PathType | ControllerOptions): ClassDecorator {\n const {children = [], path, ...opts} = mapOptions(options);\n\n return useDecorators((target: Type) => {\n const factory = controller(target, opts);\n\n if (path) {\n factory.store().set(\"path\", path);\n }\n\n factory.store().set(\"childrenControllers\", children);\n\n children.forEach((childToken) => {\n Store.from(childToken).set(\"parentController\", classOf(target));\n });\n });\n}\n"],"names":["mapOptions","options","isArrayOrArrayClass","Controller","children","path","opts","useDecorators","target","factory","controller","childToken","Store","classOf"],"mappings":";;;;;AAkBA,SAASA,EAAWC,GAAiC;AACnD,SAAI,OAAOA,KAAY,YAAYA,aAAmB,UAAUC,EAAoBD,CAAO,IAClF;AAAA,IACL,MAAMA;AAAA,EACR,IAGKA;AACT;AA8BO,SAASE,EAAWF,GAAuD;AAC1E,QAAA,EAAC,UAAAG,IAAW,IAAI,MAAAC,GAAM,GAAGC,EAAQ,IAAAN,EAAWC,CAAO;AAElD,SAAAM,EAAc,CAACC,MAAiB;AAC/B,UAAAC,IAAUC,EAAWF,GAAQF,CAAI;AAEvC,IAAID,KACFI,EAAQ,MAAM,EAAE,IAAI,QAAQJ,CAAI,GAGlCI,EAAQ,MAAM,EAAE,IAAI,uBAAuBL,CAAQ,GAE1CA,EAAA,QAAQ,CAACO,MAAe;AAC/B,MAAAC,EAAM,KAAKD,CAAU,EAAE,IAAI,oBAAoBE,EAAQL,CAAM,CAAC;AAAA,IAAA,CAC/D;AAAA,EAAA,CACF;AACH;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { DecoratorTypes as u } from "@tsed/core/types/DecoratorTypes.js";
|
|
2
|
+
import { Metadata as t } from "@tsed/core/types/Metadata.js";
|
|
3
|
+
import { Store as p } from "@tsed/core/types/Store.js";
|
|
4
|
+
import { catchError as O } from "@tsed/core/utils/catchError.js";
|
|
5
|
+
import { decoratorTypeOf as I } from "@tsed/core/utils/decoratorTypeOf.js";
|
|
6
|
+
import { isPromise as S } from "@tsed/core/utils/isPromise.js";
|
|
7
|
+
import { DI_INJECTABLE_PROPS as c, DI_USE_OPTIONS as E, DI_INVOKE_OPTIONS as d } from "../constants/constants.js";
|
|
8
|
+
import { InvalidPropertyTokenError as R } from "../errors/InvalidPropertyTokenError.js";
|
|
9
|
+
import { inject as _ } from "../fn/inject.js";
|
|
10
|
+
import { injectMany as A } from "../fn/injectMany.js";
|
|
11
|
+
import { getConstructorDependencies as D, setConstructorDependencies as j } from "../utils/getConstructorDependencies.js";
|
|
12
|
+
function y(o, {
|
|
13
|
+
target: i,
|
|
14
|
+
propertyKey: e,
|
|
15
|
+
parameterIndex: r
|
|
16
|
+
}) {
|
|
17
|
+
const s = D(i, e), n = s[r];
|
|
18
|
+
s[r] = n === Array ? [o] : o, t.setParamTypes(i, e, s), j(i, s);
|
|
19
|
+
}
|
|
20
|
+
function v(o, i, e) {
|
|
21
|
+
const r = o || t.getType(i, e);
|
|
22
|
+
if (r === Object)
|
|
23
|
+
throw new R(i, String(e));
|
|
24
|
+
return r;
|
|
25
|
+
}
|
|
26
|
+
function w(o, i, { token: e, transform: r = (n) => n, useOpts: s }) {
|
|
27
|
+
const n = Symbol();
|
|
28
|
+
o[c] || Reflect.defineProperty(o, c, {
|
|
29
|
+
value: /* @__PURE__ */ new Set(),
|
|
30
|
+
enumerable: !1,
|
|
31
|
+
configurable: !1
|
|
32
|
+
}), o[c].add(i), O(() => Reflect.deleteProperty(o, i)), Reflect.defineProperty(o, i, {
|
|
33
|
+
get() {
|
|
34
|
+
var l, T;
|
|
35
|
+
const h = v(e, o, i), f = t.getType(o, i), m = {
|
|
36
|
+
rebuild: !!((l = this[d]) != null && l.rebuild),
|
|
37
|
+
locals: (T = this[d]) == null ? void 0 : T.locals,
|
|
38
|
+
useOpts: s || p.from(o, i).get(E)
|
|
39
|
+
};
|
|
40
|
+
return this[n] === void 0 && (this[n] = f === Array ? A(e, m) : _(h, m)), [].concat(this[n]).forEach((P, b) => {
|
|
41
|
+
S(this[n]) && P.then((a) => {
|
|
42
|
+
this[n][b] = a, f !== Array && (this[n] = a);
|
|
43
|
+
});
|
|
44
|
+
}), r(this[n], { self: this, target: o, propertyKey: i });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function z(o, i = {}) {
|
|
49
|
+
return i = typeof i == "function" ? { transform: i } : i, (e, r, s) => {
|
|
50
|
+
switch (I([e, r, s])) {
|
|
51
|
+
case u.PARAM_CTOR:
|
|
52
|
+
o && y(o, { target: e, propertyKey: r, parameterIndex: s });
|
|
53
|
+
break;
|
|
54
|
+
case u.PROP:
|
|
55
|
+
w(e, r, { ...i, token: o });
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
z as Inject
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sources":["../../../../src/common/decorators/inject.ts"],"sourcesContent":["import {DecoratorTypes} from \"@tsed/core/types/DecoratorTypes.js\";\nimport {Metadata} from \"@tsed/core/types/Metadata.js\";\nimport {Store} from \"@tsed/core/types/Store.js\";\nimport {type Type} from \"@tsed/core/types/Type.js\";\nimport {catchError} from \"@tsed/core/utils/catchError.js\";\nimport {decoratorTypeOf} from \"@tsed/core/utils/decoratorTypeOf.js\";\nimport {isPromise} from \"@tsed/core/utils/isPromise.js\";\n\nimport {DI_INJECTABLE_PROPS, DI_INVOKE_OPTIONS, DI_USE_OPTIONS} from \"../constants/constants.js\";\nimport {InvalidPropertyTokenError} from \"../errors/InvalidPropertyTokenError.js\";\nimport {inject} from \"../fn/inject.js\";\nimport {injectMany} from \"../fn/injectMany.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {getConstructorDependencies, setConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\n\nfunction setToken(\n token: TokenProvider,\n {\n target,\n propertyKey,\n parameterIndex\n }: {\n target: any;\n propertyKey: string | symbol | undefined;\n parameterIndex: number;\n }\n) {\n const paramTypes = getConstructorDependencies(target, propertyKey);\n const type = paramTypes[parameterIndex];\n\n paramTypes[parameterIndex] = type === Array ? [token] : token;\n\n Metadata.setParamTypes(target, propertyKey!, paramTypes);\n setConstructorDependencies(target, paramTypes);\n}\n\nfunction getTokenType(token: TokenProvider | (() => TokenProvider) | undefined, target: any, propertyKey: string | symbol) {\n const useType = token || Metadata.getType(target, propertyKey);\n\n if (useType === Object) {\n throw new InvalidPropertyTokenError(target, String(propertyKey));\n }\n\n return useType;\n}\n\nexport type TransformInjectedProviderCB<T, Klass = any> = (\n instance: T,\n {target, propertyKey}: {self: Klass; target: Type<Klass>; propertyKey: symbol | string}\n) => unknown;\n\nexport interface BindInjectablePropertyOpts<T = any> {\n token?: TokenProvider;\n useOpts?: Record<string, unknown>;\n transform?: TransformInjectedProviderCB<T>;\n}\n\nfunction bindInjectableProperty<T = any>(\n target: any,\n propertyKey: string | symbol,\n {token, transform = (o) => o, useOpts}: BindInjectablePropertyOpts<T>\n) {\n const symbol = Symbol();\n\n if (!target[DI_INJECTABLE_PROPS]) {\n Reflect.defineProperty(target, DI_INJECTABLE_PROPS, {\n value: new Set(),\n enumerable: false,\n configurable: false\n });\n }\n\n target[DI_INJECTABLE_PROPS].add(propertyKey);\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n get() {\n const useType = getTokenType(token, target, propertyKey!);\n const originalType = Metadata.getType(target, propertyKey);\n\n const invokeOpts: Partial<InvokeOptions> = {\n rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,\n locals: this[DI_INVOKE_OPTIONS]?.locals,\n useOpts: useOpts || Store.from(target, propertyKey).get(DI_USE_OPTIONS)\n };\n\n if (this[symbol] === undefined) {\n this[symbol] = originalType === Array ? injectMany(token as string, invokeOpts) : inject(useType, invokeOpts);\n }\n\n [].concat(this[symbol]).forEach((instance: any, index) => {\n if (isPromise(this[symbol])) {\n instance.then((result: any) => {\n this[symbol]![index] = result;\n if (originalType !== Array) {\n this[symbol] = result;\n }\n });\n }\n });\n\n return transform(this[symbol], {self: this, target, propertyKey});\n }\n });\n}\n\n/**\n * Inject a provider to another provider.\n *\n * Use this decorator to inject a custom provider on constructor parameter or property.\n *\n * ```typescript\n * @Injectable()\n * export class MyService {\n * @Inject(CONNECTION)\n * connection: CONNECTION;\n * }\n * ```\n *\n * @param token A token provider or token provider group\n * @param transform\n * @returns {Function}\n * @decorator\n */\nexport function Inject<T = any>(token?: TokenProvider<T> | (() => TokenProvider<T>), transform?: TransformInjectedProviderCB<T>): any;\nexport function Inject<T = any>(\n token?: TokenProvider<T> | (() => TokenProvider<T>),\n opts?: Partial<Omit<BindInjectablePropertyOpts<T>, \"token\">>\n): any;\nexport function Inject<T = any>(\n token?: TokenProvider<T> | (() => TokenProvider<T>),\n opts: TransformInjectedProviderCB<T> | Partial<Omit<BindInjectablePropertyOpts<T>, \"token\">> = {}\n) {\n opts = typeof opts === \"function\" ? {transform: opts} : opts;\n\n return (target: any, propertyKey: string | symbol | undefined, index?: number) => {\n const bindingType = decoratorTypeOf([target, propertyKey, index]);\n\n switch (bindingType) {\n case DecoratorTypes.PARAM_CTOR:\n if (token) {\n setToken(token, {target, propertyKey, parameterIndex: index!});\n }\n break;\n case DecoratorTypes.PROP:\n bindInjectableProperty(target, propertyKey!, {...opts, token});\n }\n };\n}\n"],"names":["setToken","token","target","propertyKey","parameterIndex","paramTypes","getConstructorDependencies","type","Metadata","setConstructorDependencies","getTokenType","useType","InvalidPropertyTokenError","bindInjectableProperty","transform","o","useOpts","symbol","DI_INJECTABLE_PROPS","catchError","originalType","invokeOpts","_a","DI_INVOKE_OPTIONS","_b","Store","DI_USE_OPTIONS","injectMany","inject","instance","index","isPromise","result","Inject","opts","decoratorTypeOf","DecoratorTypes"],"mappings":";;;;;;;;;;;AAgBA,SAASA,EACPC,GACA;AAAA,EACE,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AACF,GAKA;AACM,QAAAC,IAAaC,EAA2BJ,GAAQC,CAAW,GAC3DI,IAAOF,EAAWD,CAAc;AAEtC,EAAAC,EAAWD,CAAc,IAAIG,MAAS,QAAQ,CAACN,CAAK,IAAIA,GAE/CO,EAAA,cAAcN,GAAQC,GAAcE,CAAU,GACvDI,EAA2BP,GAAQG,CAAU;AAC/C;AAEA,SAASK,EAAaT,GAA0DC,GAAaC,GAA8B;AACzH,QAAMQ,IAAUV,KAASO,EAAS,QAAQN,GAAQC,CAAW;AAE7D,MAAIQ,MAAY;AACd,UAAM,IAAIC,EAA0BV,GAAQ,OAAOC,CAAW,CAAC;AAG1D,SAAAQ;AACT;AAaA,SAASE,EACPX,GACAC,GACA,EAAC,OAAAF,GAAO,WAAAa,IAAY,CAACC,MAAMA,GAAG,SAAAC,KAC9B;AACA,QAAMC,IAAS,OAAO;AAElB,EAACf,EAAOgB,CAAmB,KACrB,QAAA,eAAehB,GAAQgB,GAAqB;AAAA,IAClD,2BAAW,IAAI;AAAA,IACf,YAAY;AAAA,IACZ,cAAc;AAAA,EAAA,CACf,GAGIhB,EAAAgB,CAAmB,EAAE,IAAIf,CAAW,GAE3CgB,EAAW,MAAM,QAAQ,eAAejB,GAAQC,CAAW,CAAC,GACpD,QAAA,eAAeD,GAAQC,GAAa;AAAA,IAC1C,MAAM;;AACJ,YAAMQ,IAAUD,EAAaT,GAAOC,GAAQC,CAAY,GAClDiB,IAAeZ,EAAS,QAAQN,GAAQC,CAAW,GAEnDkB,IAAqC;AAAA,QACzC,SAAS,CAAC,GAACC,IAAA,KAAKC,CAAiB,MAAtB,QAAAD,EAAyB;AAAA,QACpC,SAAQE,IAAA,KAAKD,CAAiB,MAAtB,gBAAAC,EAAyB;AAAA,QACjC,SAASR,KAAWS,EAAM,KAAKvB,GAAQC,CAAW,EAAE,IAAIuB,CAAc;AAAA,MACxE;AAEI,aAAA,KAAKT,CAAM,MAAM,WACd,KAAAA,CAAM,IAAIG,MAAiB,QAAQO,EAAW1B,GAAiBoB,CAAU,IAAIO,EAAOjB,GAASU,CAAU,IAG7G,GAAE,OAAO,KAAKJ,CAAM,CAAC,EAAE,QAAQ,CAACY,GAAeC,MAAU;AACxD,QAAIC,EAAU,KAAKd,CAAM,CAAC,KACfY,EAAA,KAAK,CAACG,MAAgB;AACxB,eAAAf,CAAM,EAAGa,CAAK,IAAIE,GACnBZ,MAAiB,UACnB,KAAKH,CAAM,IAAIe;AAAA,QACjB,CACD;AAAA,MACH,CACD,GAEMlB,EAAU,KAAKG,CAAM,GAAG,EAAC,MAAM,MAAM,QAAAf,GAAQ,aAAAC,GAAY;AAAA,IAAA;AAAA,EAClE,CACD;AACH;AAyBO,SAAS8B,EACdhC,GACAiC,IAA+F,IAC/F;AACA,SAAAA,IAAO,OAAOA,KAAS,aAAa,EAAC,WAAWA,MAAQA,GAEjD,CAAChC,GAAaC,GAA0C2B,MAAmB;AAGhF,YAFoBK,EAAgB,CAACjC,GAAQC,GAAa2B,CAAK,CAAC,GAE3C;AAAA,MACnB,KAAKM,EAAe;AAClB,QAAInC,KACFD,EAASC,GAAO,EAAC,QAAAC,GAAQ,aAAAC,GAAa,gBAAgB2B,GAAO;AAE/D;AAAA,MACF,KAAKM,EAAe;AAClB,QAAAvB,EAAuBX,GAAQC,GAAc,EAAC,GAAG+B,GAAM,OAAAjC,GAAM;AAAA,IAAA;AAAA,EAEnE;AACF;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { i as o } from "../../chunks/injectable.js";
|
|
2
|
+
function c(e = {}) {
|
|
3
|
+
return (n) => {
|
|
4
|
+
const t = {
|
|
5
|
+
...e,
|
|
6
|
+
...e.token ? { useClass: n } : { token: n }
|
|
7
|
+
};
|
|
8
|
+
o(t.token, t);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
c as Injectable
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=injectable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.js","sources":["../../../../src/common/decorators/injectable.ts"],"sourcesContent":["import {injectable} from \"../fn/injectable.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\n\n/**\n * The decorators `@Injectable()` declare a new service can be injected in other service, controller, interceptor, etc.. on there `constructor`.\n * All classes annotated with `@Injectable()` are built one time, excepted if you change the default provider configuration.\n *\n * ::: tip\n * `@Injectable()` use the `reflect-metadata` to collect and inject the built provided to other services.\n * :::\n *\n * ### Options\n *\n * - type (@@ProviderType@@ or `string`): Kind of provider. (Default: `ProviderType.PROVIDER`)\n * - scope (@@ProviderScope@@): Kind of provider. (Default: `ProviderScope.SINGLETON`)\n * - token (@@TokenProvider@@): An injection token (Note: This option override default metadata generated by Typescript).\n * - deps (`Type<any>`): List of class or provider which will be injected to the constructor (Note: This options override default metadata generated by Typescript).\n *\n * @returns {Function}\n * @decorator\n */\nexport function Injectable(options: Partial<ProviderOpts> = {}): ClassDecorator {\n return (target: any) => {\n const opts = {\n ...options,\n ...(options.token ? {useClass: target} : {token: target})\n };\n injectable(opts.token, opts);\n };\n}\n"],"names":["Injectable","options","target","opts","injectable"],"mappings":";AAqBgB,SAAAA,EAAWC,IAAiC,IAAoB;AAC9E,SAAO,CAACC,MAAgB;AACtB,UAAMC,IAAO;AAAA,MACX,GAAGF;AAAA,MACH,GAAIA,EAAQ,QAAQ,EAAC,UAAUC,EAAM,IAAI,EAAC,OAAOA,EAAM;AAAA,IACzD;AACW,IAAAE,EAAAD,EAAK,OAAOA,CAAI;AAAA,EAC7B;AACF;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { DecoratorTypes as a } from "@tsed/core/types/DecoratorTypes.js";
|
|
2
|
+
import { Store as d } from "@tsed/core/types/Store.js";
|
|
3
|
+
import { classOf as b } from "@tsed/core/utils/classOf.js";
|
|
4
|
+
import { decorateMethodsOf as M } from "@tsed/core/utils/decorateMethodsOf.js";
|
|
5
|
+
import { decoratorTypeOf as P } from "@tsed/core/utils/decoratorTypeOf.js";
|
|
6
|
+
import { DI_INTERCEPTOR_OPTIONS as h, DI_INVOKE_OPTIONS as u } from "../constants/constants.js";
|
|
7
|
+
import { inject as S } from "../fn/inject.js";
|
|
8
|
+
function x(o, t) {
|
|
9
|
+
return d.fromMethod(o, t).get(h);
|
|
10
|
+
}
|
|
11
|
+
function D(o, t, c, r) {
|
|
12
|
+
const e = b(o), n = Reflect.getOwnPropertyDescriptor(e.prototype, t), O = n.value, i = Symbol();
|
|
13
|
+
d.fromMethod(e, t).set(h, r);
|
|
14
|
+
function I(...s) {
|
|
15
|
+
var p, l;
|
|
16
|
+
const f = (m) => {
|
|
17
|
+
if (!m)
|
|
18
|
+
return O.apply(this, s);
|
|
19
|
+
throw m;
|
|
20
|
+
}, y = {
|
|
21
|
+
target: e,
|
|
22
|
+
propertyKey: t,
|
|
23
|
+
args: s,
|
|
24
|
+
options: r,
|
|
25
|
+
next: f
|
|
26
|
+
}, T = {
|
|
27
|
+
rebuild: !!((p = this[u]) != null && p.rebuild),
|
|
28
|
+
locals: (l = this[u]) == null ? void 0 : l.locals
|
|
29
|
+
};
|
|
30
|
+
return this[i] = this[i] || S(c, T), this[i].intercept(
|
|
31
|
+
{
|
|
32
|
+
...y,
|
|
33
|
+
options: r
|
|
34
|
+
},
|
|
35
|
+
f
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
return n.value = I, Reflect.deleteProperty(e.prototype, t), Reflect.defineProperty(e.prototype, t, n), n;
|
|
39
|
+
}
|
|
40
|
+
function R(o, t) {
|
|
41
|
+
return (...c) => {
|
|
42
|
+
const [r, e] = c;
|
|
43
|
+
switch (P(c)) {
|
|
44
|
+
case a.CLASS:
|
|
45
|
+
M(r, R(o, t));
|
|
46
|
+
break;
|
|
47
|
+
case a.METHOD:
|
|
48
|
+
return D(r, e, o, t);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export {
|
|
53
|
+
R as Intercept,
|
|
54
|
+
D as bindIntercept,
|
|
55
|
+
x as getInterceptorOptions
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=intercept.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intercept.js","sources":["../../../../src/common/decorators/intercept.ts"],"sourcesContent":["import {DecoratorParameters} from \"@tsed/core/types/DecoratorParameters.js\";\nimport {DecoratorTypes} from \"@tsed/core/types/DecoratorTypes.js\";\nimport {Store} from \"@tsed/core/types/Store.js\";\nimport {Type} from \"@tsed/core/types/Type.js\";\nimport {classOf} from \"@tsed/core/utils/classOf.js\";\nimport {decorateMethodsOf} from \"@tsed/core/utils/decorateMethodsOf.js\";\nimport {decoratorTypeOf} from \"@tsed/core/utils/decoratorTypeOf.js\";\nimport {nameOf} from \"@tsed/core/utils/nameOf.js\";\n\nimport {DI_INTERCEPTOR_OPTIONS, DI_INVOKE_OPTIONS} from \"../constants/constants.js\";\nimport {inject} from \"../fn/inject.js\";\nimport type {InterceptorContext} from \"../interfaces/InterceptorContext.js\";\nimport type {InterceptorMethods} from \"../interfaces/InterceptorMethods.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\n\nexport function getInterceptorOptions<T>(target: Type<any>, propertyKey: string | symbol) {\n return Store.fromMethod(target, propertyKey).get(DI_INTERCEPTOR_OPTIONS) as T;\n}\n\nexport function bindIntercept(target: any, propertyKey: string | symbol, token: TokenProvider, options: Record<string, unknown>) {\n const klass = classOf(target);\n const descriptor = Reflect.getOwnPropertyDescriptor(klass.prototype, propertyKey);\n const originalMethod = descriptor!.value;\n const symbol = Symbol();\n\n Store.fromMethod(klass, propertyKey).set(DI_INTERCEPTOR_OPTIONS, options);\n\n function newMethod(...args: any[]) {\n const next = (err?: Error) => {\n if (!err) {\n return originalMethod.apply(this, args);\n }\n\n throw err;\n };\n\n const context: InterceptorContext<any> = {\n target: klass,\n propertyKey,\n args,\n options,\n next\n };\n\n const invokeOpts: Partial<InvokeOptions> = {\n rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,\n locals: this[DI_INVOKE_OPTIONS]?.locals\n };\n\n this[symbol] = this[symbol] || inject(token, invokeOpts)!;\n\n return this[symbol].intercept!(\n {\n ...context,\n options\n },\n next\n );\n }\n\n descriptor!.value = newMethod;\n\n Reflect.deleteProperty(klass.prototype, propertyKey);\n Reflect.defineProperty(klass.prototype, propertyKey, descriptor!);\n\n return descriptor;\n}\n\n/**\n * Attaches interceptor to method call and executes the before and after methods\n *\n * @param interceptor\n * @param options\n * @decorator\n */\nexport function Intercept<T extends InterceptorMethods>(interceptor: Type<T>, options?: any): any {\n return (...args: DecoratorParameters) => {\n const [target, propertyKey] = args;\n const type = decoratorTypeOf(args);\n switch (type) {\n case DecoratorTypes.CLASS:\n decorateMethodsOf(target, Intercept(interceptor, options));\n break;\n case DecoratorTypes.METHOD:\n return bindIntercept(target, propertyKey, interceptor, options);\n }\n };\n}\n"],"names":["getInterceptorOptions","target","propertyKey","Store","DI_INTERCEPTOR_OPTIONS","bindIntercept","token","options","klass","classOf","descriptor","originalMethod","symbol","newMethod","args","next","err","context","invokeOpts","_a","DI_INVOKE_OPTIONS","_b","inject","Intercept","interceptor","decoratorTypeOf","DecoratorTypes","decorateMethodsOf"],"mappings":";;;;;;;AAgBgB,SAAAA,EAAyBC,GAAmBC,GAA8B;AACxF,SAAOC,EAAM,WAAWF,GAAQC,CAAW,EAAE,IAAIE,CAAsB;AACzE;AAEO,SAASC,EAAcJ,GAAaC,GAA8BI,GAAsBC,GAAkC;AACzH,QAAAC,IAAQC,EAAQR,CAAM,GACtBS,IAAa,QAAQ,yBAAyBF,EAAM,WAAWN,CAAW,GAC1ES,IAAiBD,EAAY,OAC7BE,IAAS,OAAO;AAEtB,EAAAT,EAAM,WAAWK,GAAON,CAAW,EAAE,IAAIE,GAAwBG,CAAO;AAExE,WAASM,KAAaC,GAAa;;AAC3B,UAAAC,IAAO,CAACC,MAAgB;AAC5B,UAAI,CAACA;AACI,eAAAL,EAAe,MAAM,MAAMG,CAAI;AAGlC,YAAAE;AAAA,IACR,GAEMC,IAAmC;AAAA,MACvC,QAAQT;AAAA,MACR,aAAAN;AAAA,MACA,MAAAY;AAAA,MACA,SAAAP;AAAA,MACA,MAAAQ;AAAA,IACF,GAEMG,IAAqC;AAAA,MACzC,SAAS,CAAC,GAACC,IAAA,KAAKC,CAAiB,MAAtB,QAAAD,EAAyB;AAAA,MACpC,SAAQE,IAAA,KAAKD,CAAiB,MAAtB,gBAAAC,EAAyB;AAAA,IACnC;AAEA,gBAAKT,CAAM,IAAI,KAAKA,CAAM,KAAKU,EAAOhB,GAAOY,CAAU,GAEhD,KAAKN,CAAM,EAAE;AAAA,MAClB;AAAA,QACE,GAAGK;AAAA,QACH,SAAAV;AAAA,MACF;AAAA,MACAQ;AAAA,IACF;AAAA,EAAA;AAGF,SAAAL,EAAY,QAAQG,GAEZ,QAAA,eAAeL,EAAM,WAAWN,CAAW,GACnD,QAAQ,eAAeM,EAAM,WAAWN,GAAaQ,CAAW,GAEzDA;AACT;AASgB,SAAAa,EAAwCC,GAAsBjB,GAAoB;AAChG,SAAO,IAAIO,MAA8B;AACjC,UAAA,CAACb,GAAQC,CAAW,IAAIY;AAE9B,YADaW,EAAgBX,CAAI,GACnB;AAAA,MACZ,KAAKY,EAAe;AAClB,QAAAC,EAAkB1B,GAAQsB,EAAUC,GAAajB,CAAO,CAAC;AACzD;AAAA,MACF,KAAKmB,EAAe;AAClB,eAAOrB,EAAcJ,GAAQC,GAAasB,GAAajB,CAAO;AAAA,IAAA;AAAA,EAEpE;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.js","sources":["../../../../src/common/decorators/interceptor.ts"],"sourcesContent":["import {ProviderType} from \"../domain/ProviderType.js\";\nimport {Injectable} from \"./injectable.js\";\n\n/**\n * The decorators `@Interceptor()` declare a new service can be injected in other service or controller on there `constructor`.\n * All services annotated with `@Interceptor()` are constructed one time.\n *\n * > `@Service()` use the `reflect-metadata` to collect and inject service on controllers or other services.\n *\n * @returns {Function}\n * @decorator\n */\nexport function Interceptor(): Function {\n return Injectable({\n type: ProviderType.INTERCEPTOR\n });\n}\n"],"names":["Interceptor","Injectable","ProviderType"],"mappings":";;AAYO,SAASA,IAAwB;AACtC,SAAOC,EAAW;AAAA,IAChB,MAAMC,EAAa;AAAA,EAAA,CACpB;AACH;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { catchError as c } from "@tsed/core/utils/catchError.js";
|
|
2
|
+
import { isFunction as u } from "@tsed/core/utils/isFunction.js";
|
|
3
|
+
import { lazyInject as l, optionalLazyInject as a } from "../fn/lazyInject.js";
|
|
4
|
+
function f(e, n = !1) {
|
|
5
|
+
function t(r, i) {
|
|
6
|
+
return async () => {
|
|
7
|
+
try {
|
|
8
|
+
const { [r]: o } = await i();
|
|
9
|
+
return { default: o };
|
|
10
|
+
} catch (o) {
|
|
11
|
+
if (!n)
|
|
12
|
+
throw o;
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return u(e[0]) ? t("default", e[0]) : t(e[0], e[1]);
|
|
18
|
+
}
|
|
19
|
+
function s(...e) {
|
|
20
|
+
let n = f(e);
|
|
21
|
+
return (t, r) => {
|
|
22
|
+
c(() => Reflect.deleteProperty(t, r)), Reflect.defineProperty(t, r, {
|
|
23
|
+
async get() {
|
|
24
|
+
return l(n);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function d(...e) {
|
|
30
|
+
const n = f(e, !0);
|
|
31
|
+
return (t, r) => {
|
|
32
|
+
c(() => Reflect.deleteProperty(t, r)), Reflect.defineProperty(t, r, {
|
|
33
|
+
async get() {
|
|
34
|
+
return a(n);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
s as LazyInject,
|
|
41
|
+
d as OptionalLazyInject
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=lazyInject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazyInject.js","sources":["../../../../src/common/decorators/lazyInject.ts"],"sourcesContent":["import {catchError} from \"@tsed/core/utils/catchError.js\";\nimport {isFunction} from \"@tsed/core/utils/isFunction.js\";\n\nimport {lazyInject, optionalLazyInject} from \"../fn/lazyInject.js\";\n\nfunction mapOptions(args: any[], optional = false) {\n function wrap(key: string, resolver: any) {\n return async () => {\n try {\n const {[key]: token} = await resolver();\n\n return {default: token};\n } catch (er) {\n if (!optional) {\n throw er;\n }\n\n return;\n }\n };\n }\n\n if (isFunction(args[0])) {\n return wrap(\"default\", args[0]);\n }\n\n return wrap(args[0], args[1]);\n}\n\n/**\n * Lazy load a provider from his package and invoke only when the provider is used\n *\n * ```typescript\n * import type {PlatformException} from \"@tsed/platform-exceptions\";\n *\n * @Injectable()\n * export class MyService {\n * @LazyInject(() => import(\"@tsed/platform-exceptions\"))\n * exceptions: Promise<PlatformException>;\n * }\n * ```\n *\n * @param key - The named export to import from the module.\n * @param resolver - A function that returns a promise resolving to the module.\n * @returns {Function}\n * @decorator\n */\nexport function LazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function LazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function LazyInject(...args: any[]): PropertyDecorator {\n let resolver = mapOptions(args);\n\n return (target: any, propertyKey: string | symbol): any | void => {\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n async get() {\n return lazyInject<any>(resolver as any);\n }\n });\n };\n}\n\n/**\n * Optionally Lazy load a provider from his package and invoke only when the provider is used\n *\n * ```typescript\n * import type {PlatformException} from \"@tsed/platform-exceptions\";\n *\n * @Injectable()\n * export class MyService {\n * @OptionalLazyInject(() => import(\"@tsed/platform-exceptions\"))\n * exceptions: Promise<PlatformException>;\n * }\n * ```\n * @param key - The named export to import from the module.\n * @param resolver - A function that returns a promise resolving to the module.\n * @decorator\n */\nexport function OptionalLazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function OptionalLazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function OptionalLazyInject(...args: any[]): PropertyDecorator {\n const resolver = mapOptions(args, true);\n\n return (target: any, propertyKey: string | symbol): any | void => {\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n async get() {\n return optionalLazyInject(resolver as any);\n }\n });\n };\n}\n"],"names":["mapOptions","args","optional","wrap","key","resolver","token","er","isFunction","LazyInject","target","propertyKey","catchError","lazyInject","OptionalLazyInject","optionalLazyInject"],"mappings":";;;AAKA,SAASA,EAAWC,GAAaC,IAAW,IAAO;AACxC,WAAAC,EAAKC,GAAaC,GAAe;AACxC,WAAO,YAAY;AACb,UAAA;AACF,cAAM,EAAC,CAACD,CAAG,GAAGE,EAAK,IAAI,MAAMD,EAAS;AAE/B,eAAA,EAAC,SAASC,EAAK;AAAA,eACfC,GAAI;AACX,YAAI,CAACL;AACG,gBAAAK;AAGR;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAGF,SAAIC,EAAWP,EAAK,CAAC,CAAC,IACbE,EAAK,WAAWF,EAAK,CAAC,CAAC,IAGzBE,EAAKF,EAAK,CAAC,GAAGA,EAAK,CAAC,CAAC;AAC9B;AAsBO,SAASQ,KAAcR,GAAgC;AACxD,MAAAI,IAAWL,EAAWC,CAAI;AAEvB,SAAA,CAACS,GAAaC,MAA6C;AAChE,IAAAC,EAAW,MAAM,QAAQ,eAAeF,GAAQC,CAAW,CAAC,GACpD,QAAA,eAAeD,GAAQC,GAAa;AAAA,MAC1C,MAAM,MAAM;AACV,eAAOE,EAAgBR,CAAe;AAAA,MAAA;AAAA,IACxC,CACD;AAAA,EACH;AACF;AAoBO,SAASS,KAAsBb,GAAgC;AAC9D,QAAAI,IAAWL,EAAWC,GAAM,EAAI;AAE/B,SAAA,CAACS,GAAaC,MAA6C;AAChE,IAAAC,EAAW,MAAM,QAAQ,eAAeF,GAAQC,CAAW,CAAC,GACpD,QAAA,eAAeD,GAAQC,GAAa;AAAA,MAC1C,MAAM,MAAM;AACV,eAAOI,EAAmBV,CAAe;AAAA,MAAA;AAAA,IAC3C,CACD;AAAA,EACH;AACF;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useDecorators as i } from "@tsed/core/utils/useDecorators.js";
|
|
2
|
+
import { ProviderScope as p } from "../domain/ProviderScope.js";
|
|
3
|
+
import { ProviderType as m } from "../domain/ProviderType.js";
|
|
4
|
+
import { Configuration as c } from "./configuration.js";
|
|
5
|
+
import { Injectable as n } from "./injectable.js";
|
|
6
|
+
function g(o = {}) {
|
|
7
|
+
const { scopes: s, imports: r, deps: e, scope: f, ...t } = o;
|
|
8
|
+
return i(
|
|
9
|
+
c(t),
|
|
10
|
+
n({
|
|
11
|
+
type: m.MODULE,
|
|
12
|
+
scope: p.SINGLETON,
|
|
13
|
+
imports: r,
|
|
14
|
+
deps: e,
|
|
15
|
+
injectable: !1
|
|
16
|
+
})
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
g as Module
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sources":["../../../../src/common/decorators/module.ts"],"sourcesContent":["import {useDecorators} from \"@tsed/core/utils/useDecorators.js\";\n\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {Configuration} from \"./configuration.js\";\nimport {Injectable} from \"./injectable.js\";\n\nexport interface ModuleOptions extends Omit<TsED.Configuration, \"scopes\"> {\n /**\n * Provider scope\n */\n scope?: ProviderScope;\n /**\n * Providers must be initialized before building this module\n */\n imports?: TokenProvider[];\n /**\n * Explicit token must be injected in the constructor\n */\n deps?: TokenProvider[];\n\n /**\n * Additional properties are stored as provider configuration.\n */\n [key: string]: any;\n}\n\n/**\n * Declare a new Ts.ED module\n *\n * ## Options\n * - imports: List of Provider which must be built by injector before invoking the module\n * - deps: List of provider must be injected to the module constructor (explicit declaration)\n *\n * @param options\n * @decorator\n */\nexport function Module(options: Partial<ModuleOptions> = {}) {\n const {scopes, imports, deps, scope, ...configuration} = options;\n\n return useDecorators(\n Configuration(configuration),\n Injectable({\n type: ProviderType.MODULE,\n scope: ProviderScope.SINGLETON,\n imports,\n deps,\n injectable: false\n })\n );\n}\n"],"names":["Module","options","scopes","imports","deps","scope","configuration","useDecorators","Configuration","Injectable","ProviderType","ProviderScope"],"mappings":";;;;;AAsCgB,SAAAA,EAAOC,IAAkC,IAAI;AAC3D,QAAM,EAAC,QAAAC,GAAQ,SAAAC,GAAS,MAAAC,GAAM,OAAAC,GAAO,GAAGC,MAAiBL;AAElD,SAAAM;AAAA,IACLC,EAAcF,CAAa;AAAA,IAC3BG,EAAW;AAAA,MACT,MAAMC,EAAa;AAAA,MACnB,OAAOC,EAAc;AAAA,MACrB,SAAAR;AAAA,MACA,MAAAC;AAAA,MACA,YAAY;AAAA,IACb,CAAA;AAAA,EACH;AACF;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { classOf as p } from "@tsed/core/utils/classOf.js";
|
|
2
|
+
import { DI_USE_PARAM_OPTIONS as f } from "../constants/constants.js";
|
|
3
|
+
import { ProviderScope as i } from "../domain/ProviderScope.js";
|
|
4
|
+
import { Inject as t } from "./inject.js";
|
|
5
|
+
import { Scope as c } from "./scope.js";
|
|
6
|
+
function s(o, r, m) {
|
|
7
|
+
c(i.INSTANCE)(p(o)), t(f)(o, r, m);
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
s as Opts
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=opts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opts.js","sources":["../../../../src/common/decorators/opts.ts"],"sourcesContent":["import {classOf} from \"@tsed/core/utils/classOf.js\";\n\nimport {DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {Inject} from \"./inject.js\";\nimport {Scope} from \"./scope.js\";\n\n/**\n * Get instance options. This options depending on his invocation context.\n *\n * ```typescript\n * import {Injectable, Opts, UseOpts} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyConfigurableService {\n * source: string;\n * constructor(@Opts options: any = {}) {\n * console.log(\"Hello \", options.source); // log: Hello Service1 then Hello Service2\n *\n * this.source = options.source;\n * }\n * }\n *\n * @Injectable()\n * class MyService1 {\n * constructor(@UseOpts({source: 'Service1'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service1\n * }\n * }\n *\n * @Injectable()\n * class MyService2 {\n * constructor(@UseOpts({source: 'Service2'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service2\n * }\n * }\n * ```\n *\n * ::: warning\n * Using @@Opts@@ decorator on a constructor parameter change the Scope of the provider to `ProviderScope.INSTANCE`.\n * :::\n *\n * @param target\n * @param propertyKey\n * @param index\n * @decorator\n */\nexport function Opts(target: any, propertyKey: string | symbol | undefined, index: number) {\n Scope(ProviderScope.INSTANCE)(classOf(target));\n Inject(DI_USE_PARAM_OPTIONS)(target, propertyKey, index);\n}\n"],"names":["Opts","target","propertyKey","index","Scope","ProviderScope","classOf","Inject","DI_USE_PARAM_OPTIONS"],"mappings":";;;;;AA+CgB,SAAAA,EAAKC,GAAaC,GAA0CC,GAAe;AACzF,EAAAC,EAAMC,EAAc,QAAQ,EAAEC,EAAQL,CAAM,CAAC,GAC7CM,EAAOC,CAAoB,EAAEP,GAAQC,GAAaC,CAAK;AACzD;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrideProvider.js","sources":["../../../../src/common/decorators/overrideProvider.ts"],"sourcesContent":["import {Type} from \"@tsed/core/types/Type.js\";\n\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\n/**\n * Override a provider which is already registered in ProviderRegistry.\n * @returns {Function}\n * @decorators\n * @param originalProvider\n */\nexport function OverrideProvider(originalProvider: Type<any>): Function {\n return (target: Type<any>): void => {\n GlobalProviders.get(originalProvider)!.useClass = target;\n };\n}\n"],"names":["OverrideProvider","originalProvider","target","GlobalProviders"],"mappings":";AAUO,SAASA,EAAiBC,GAAuC;AACtE,SAAO,CAACC,MAA4B;AAClB,IAAAC,EAAA,IAAIF,CAAgB,EAAG,WAAWC;AAAA,EACpD;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sources":["../../../../src/common/decorators/scope.ts"],"sourcesContent":["import {StoreSet} from \"@tsed/core/decorators/storeSet.js\";\n\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\n\n/**\n *\n * @param {\"request\" | \"singleton\" | ProviderScope} scope\n * @returns {Function}\n * @constructor\n */\nexport function Scope(scope: \"request\" | \"singleton\" | ProviderScope = ProviderScope.REQUEST) {\n return StoreSet(\"scope\", scope);\n}\n"],"names":["Scope","scope","ProviderScope","StoreSet"],"mappings":";;AAUgB,SAAAA,EAAMC,IAAiDC,EAAc,SAAS;AACrF,SAAAC,EAAS,SAASF,CAAK;AAChC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sources":["../../../../src/common/decorators/service.ts"],"sourcesContent":["import {Injectable} from \"./injectable.js\";\n\n/**\n * The decorators `@Service()` declare a new service can be injected in other service or controller on there `constructor`.\n * All services annotated with `@Service()` are constructed one time.\n *\n * > `@Service()` use the `reflect-metadata` to collect and inject service on controllers or other services.\n *\n * @returns {Function}\n * @decorator\n */\nexport function Service(): Function {\n return Injectable();\n}\n"],"names":["Service","Injectable"],"mappings":";AAWO,SAASA,IAAoB;AAClC,SAAOC,EAAW;AACpB;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { UnsupportedDecoratorType as p } from "@tsed/core/errors/UnsupportedDecoratorType.js";
|
|
2
|
+
import { DecoratorTypes as f } from "@tsed/core/types/DecoratorTypes.js";
|
|
3
|
+
import { Store as t } from "@tsed/core/types/Store.js";
|
|
4
|
+
import { decoratorTypeOf as c } from "@tsed/core/utils/decoratorTypeOf.js";
|
|
5
|
+
import { DI_USE_OPTIONS as i, DI_USE_PARAM_OPTIONS as s } from "../constants/constants.js";
|
|
6
|
+
function O(m) {
|
|
7
|
+
return (o, r, e) => {
|
|
8
|
+
switch (c([o, r, e])) {
|
|
9
|
+
case f.PARAM_CTOR:
|
|
10
|
+
t.from(o).merge(`${s}:${e}`, m);
|
|
11
|
+
break;
|
|
12
|
+
case f.PROP:
|
|
13
|
+
t.from(o, r).set(i, m);
|
|
14
|
+
break;
|
|
15
|
+
default:
|
|
16
|
+
throw new p(O, [o, r, e]);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
O as UseOpts
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=useOpts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOpts.js","sources":["../../../../src/common/decorators/useOpts.ts"],"sourcesContent":["import {UnsupportedDecoratorType} from \"@tsed/core/errors/UnsupportedDecoratorType.js\";\nimport {DecoratorTypes} from \"@tsed/core/types/DecoratorTypes.js\";\nimport {Store} from \"@tsed/core/types/Store.js\";\nimport {decoratorTypeOf} from \"@tsed/core/utils/decoratorTypeOf.js\";\n\nimport {DI_USE_OPTIONS, DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\n\n/**\n * Add options to invoke the Service.\n *\n * ```typescript\n * import {Injectable, Opts, UseOpts} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyConfigurableService {\n * source: string;\n * constructor(@Opts options: any = {}) {\n * console.log(\"Hello \", options.source); // log: Hello Service1 then Hello Service2\n *\n * this.source = options.source;\n * }\n * }\n *\n * @Injectable()\n * class MyService1 {\n * constructor(@UseOpts({source: 'Service1'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service1\n * }\n * }\n *\n * @Injectable()\n * class MyService2 {\n * constructor(@UseOpts({source: 'Service2'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service2\n * }\n * }\n * ```\n *\n * ::: warning\n * Using @@Opts@@ decorator on a constructor parameter change the Scope of the provider to `ProviderScope.INSTANCE`.\n * :::\n *\n * @returns {Function}\n * @decorator\n * @param options\n */\nexport function UseOpts(options: {[key: string]: any}): Function {\n return (target: Object, propertyKey: string | symbol, index?: number): any => {\n const bindingType = decoratorTypeOf([target, propertyKey, index]);\n\n switch (bindingType) {\n case DecoratorTypes.PARAM_CTOR:\n Store.from(target).merge(`${DI_USE_PARAM_OPTIONS}:${index}`, options);\n break;\n\n case DecoratorTypes.PROP:\n Store.from(target, propertyKey).set(DI_USE_OPTIONS, options);\n break;\n\n default:\n throw new UnsupportedDecoratorType(UseOpts, [target, propertyKey, index]);\n }\n };\n}\n"],"names":["UseOpts","options","target","propertyKey","index","decoratorTypeOf","DecoratorTypes","Store","DI_USE_PARAM_OPTIONS","DI_USE_OPTIONS","UnsupportedDecoratorType"],"mappings":";;;;;AA8CO,SAASA,EAAQC,GAAyC;AACxD,SAAA,CAACC,GAAgBC,GAA8BC,MAAwB;AAG5E,YAFoBC,EAAgB,CAACH,GAAQC,GAAaC,CAAK,CAAC,GAE3C;AAAA,MACnB,KAAKE,EAAe;AACZ,QAAAC,EAAA,KAAKL,CAAM,EAAE,MAAM,GAAGM,CAAoB,IAAIJ,CAAK,IAAIH,CAAO;AACpE;AAAA,MAEF,KAAKK,EAAe;AAClB,QAAAC,EAAM,KAAKL,GAAQC,CAAW,EAAE,IAAIM,GAAgBR,CAAO;AAC3D;AAAA,MAEF;AACE,cAAM,IAAIS,EAAyBV,GAAS,CAACE,GAAQC,GAAaC,CAAK,CAAC;AAAA,IAAA;AAAA,EAE9E;AACF;"}
|