@oldzy/conduit 1.0.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/LICENSE +21 -0
- package/README.md +22 -0
- package/dist/IRequestHandler-CjLrozYA.d.mts +27 -0
- package/dist/IRequestHandler-CjLrozYA.d.ts +27 -0
- package/dist/Mediator-CF-4m1QF.d.mts +12 -0
- package/dist/Mediator-DkYg4E8y.d.ts +12 -0
- package/dist/ServiceCollection-3wUO7p8g.d.mts +16 -0
- package/dist/ServiceCollection-B8PXr0Uo.d.ts +16 -0
- package/dist/ServiceProvider-BcW9XXlN.d.mts +39 -0
- package/dist/ServiceProvider-BcW9XXlN.d.ts +39 -0
- package/dist/application/index.d.mts +45 -0
- package/dist/application/index.d.ts +45 -0
- package/dist/application/index.js +2 -0
- package/dist/application/index.mjs +2 -0
- package/dist/di/index.d.mts +6 -0
- package/dist/di/index.d.ts +6 -0
- package/dist/di/index.js +2 -0
- package/dist/di/index.mjs +2 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +2 -0
- package/dist/index.mjs +2 -0
- package/dist/mediator/index.d.mts +15 -0
- package/dist/mediator/index.d.ts +15 -0
- package/dist/mediator/index.js +2 -0
- package/dist/mediator/index.mjs +2 -0
- package/dist/pipeline/index.d.mts +17 -0
- package/dist/pipeline/index.d.ts +17 -0
- package/dist/pipeline/index.js +2 -0
- package/dist/pipeline/index.mjs +2 -0
- package/package.json +85 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Conduit
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Conduit
|
|
2
|
+
|
|
3
|
+
Transport-agnostic request/response pipeline framework with mediator pattern, dependency injection, and middleware support.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 🎯 Mediator pattern for clean request/response handling
|
|
8
|
+
- 💉 Built-in dependency injection
|
|
9
|
+
- 🔧 Flexible middleware pipeline
|
|
10
|
+
- 🚀 Transport-agnostic architecture
|
|
11
|
+
- 📦 TypeScript support with full type safety
|
|
12
|
+
- âš¡ Lightweight and performant
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install conduit
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## License
|
|
21
|
+
|
|
22
|
+
MIT
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
declare abstract class BaseCommunicationObject {
|
|
2
|
+
readonly type: string | symbol;
|
|
3
|
+
constructor(type: string | symbol);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
declare abstract class BaseRequest extends BaseCommunicationObject {
|
|
7
|
+
readonly uuid: string;
|
|
8
|
+
readonly timestamp: Date;
|
|
9
|
+
constructor(type: string);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare abstract class BaseResponse extends BaseCommunicationObject {
|
|
13
|
+
success: boolean;
|
|
14
|
+
errors?: string[];
|
|
15
|
+
readonly timestamp: Date;
|
|
16
|
+
readonly requestUuid: string;
|
|
17
|
+
constructor(type: string, requestUuid: string);
|
|
18
|
+
setErrors(errors: string[]): this;
|
|
19
|
+
addError(error: string): this;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type HandlerResult<TResponse> = Promise<AsyncIterable<TResponse> | TResponse>;
|
|
23
|
+
interface IRequestHandler<TRequest extends BaseRequest, TResponse extends BaseResponse> {
|
|
24
|
+
handle(request: TRequest): HandlerResult<TResponse>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { BaseCommunicationObject as B, type HandlerResult as H, type IRequestHandler as I, BaseRequest as a, BaseResponse as b };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
declare abstract class BaseCommunicationObject {
|
|
2
|
+
readonly type: string | symbol;
|
|
3
|
+
constructor(type: string | symbol);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
declare abstract class BaseRequest extends BaseCommunicationObject {
|
|
7
|
+
readonly uuid: string;
|
|
8
|
+
readonly timestamp: Date;
|
|
9
|
+
constructor(type: string);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare abstract class BaseResponse extends BaseCommunicationObject {
|
|
13
|
+
success: boolean;
|
|
14
|
+
errors?: string[];
|
|
15
|
+
readonly timestamp: Date;
|
|
16
|
+
readonly requestUuid: string;
|
|
17
|
+
constructor(type: string, requestUuid: string);
|
|
18
|
+
setErrors(errors: string[]): this;
|
|
19
|
+
addError(error: string): this;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type HandlerResult<TResponse> = Promise<AsyncIterable<TResponse> | TResponse>;
|
|
23
|
+
interface IRequestHandler<TRequest extends BaseRequest, TResponse extends BaseResponse> {
|
|
24
|
+
handle(request: TRequest): HandlerResult<TResponse>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { BaseCommunicationObject as B, type HandlerResult as H, type IRequestHandler as I, BaseRequest as a, BaseResponse as b };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S as ServiceProvider } from './ServiceProvider-BcW9XXlN.mjs';
|
|
2
|
+
import { a as BaseRequest, H as HandlerResult, b as BaseResponse } from './IRequestHandler-CjLrozYA.mjs';
|
|
3
|
+
|
|
4
|
+
declare class Mediator {
|
|
5
|
+
private serviceProvider;
|
|
6
|
+
private behaviors;
|
|
7
|
+
constructor(serviceProvider: ServiceProvider);
|
|
8
|
+
send(request: BaseRequest): HandlerResult<BaseResponse>;
|
|
9
|
+
private executePipeline;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { Mediator as M };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S as ServiceProvider } from './ServiceProvider-BcW9XXlN.js';
|
|
2
|
+
import { a as BaseRequest, H as HandlerResult, b as BaseResponse } from './IRequestHandler-CjLrozYA.js';
|
|
3
|
+
|
|
4
|
+
declare class Mediator {
|
|
5
|
+
private serviceProvider;
|
|
6
|
+
private behaviors;
|
|
7
|
+
constructor(serviceProvider: ServiceProvider);
|
|
8
|
+
send(request: BaseRequest): HandlerResult<BaseResponse>;
|
|
9
|
+
private executePipeline;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { Mediator as M };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { S as ServiceProvider, b as ServiceLifetime, a as ServiceDescriptor } from './ServiceProvider-BcW9XXlN.mjs';
|
|
2
|
+
|
|
3
|
+
declare class ServiceCollection {
|
|
4
|
+
private serviceDescriptors;
|
|
5
|
+
addSingleton<T>(serviceIdentifier: string | symbol, implementation: (new (...args: any[]) => T) | T): this;
|
|
6
|
+
addScoped<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
7
|
+
addTransient<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
8
|
+
addFactory<T>(serviceIdentifier: string | symbol, factory: (provider: ServiceProvider) => T, lifetime?: ServiceLifetime): this;
|
|
9
|
+
addScopedWithDependencies<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T, dependencies: (string | symbol)[]): this;
|
|
10
|
+
buildServiceProvider(): ServiceProvider;
|
|
11
|
+
getDescriptors(): ServiceDescriptor[];
|
|
12
|
+
has(serviceType: string | symbol): boolean;
|
|
13
|
+
get count(): number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { ServiceCollection as S };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { S as ServiceProvider, b as ServiceLifetime, a as ServiceDescriptor } from './ServiceProvider-BcW9XXlN.js';
|
|
2
|
+
|
|
3
|
+
declare class ServiceCollection {
|
|
4
|
+
private serviceDescriptors;
|
|
5
|
+
addSingleton<T>(serviceIdentifier: string | symbol, implementation: (new (...args: any[]) => T) | T): this;
|
|
6
|
+
addScoped<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
7
|
+
addTransient<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
8
|
+
addFactory<T>(serviceIdentifier: string | symbol, factory: (provider: ServiceProvider) => T, lifetime?: ServiceLifetime): this;
|
|
9
|
+
addScopedWithDependencies<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T, dependencies: (string | symbol)[]): this;
|
|
10
|
+
buildServiceProvider(): ServiceProvider;
|
|
11
|
+
getDescriptors(): ServiceDescriptor[];
|
|
12
|
+
has(serviceType: string | symbol): boolean;
|
|
13
|
+
get count(): number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { ServiceCollection as S };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
declare enum ServiceLifetime {
|
|
2
|
+
Singleton = "SINGLETON",
|
|
3
|
+
Scoped = "SCOPED",
|
|
4
|
+
Transient = "TRANSIENT"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
interface ServiceDescriptor {
|
|
8
|
+
serviceIdentifier: string | symbol;
|
|
9
|
+
implementationType?: new (...args: any[]) => any;
|
|
10
|
+
implementationInstance?: any;
|
|
11
|
+
implementationFactory?: (...args: any[]) => any;
|
|
12
|
+
lifetime: ServiceLifetime;
|
|
13
|
+
dependencies?: (string | symbol)[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface IServiceScope {
|
|
17
|
+
serviceProvider: ServiceProvider;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
}
|
|
20
|
+
declare class ServiceProvider {
|
|
21
|
+
private serviceDescriptors;
|
|
22
|
+
private singletons;
|
|
23
|
+
private scopedInstances;
|
|
24
|
+
private parent?;
|
|
25
|
+
private resolutionStack;
|
|
26
|
+
constructor(serviceDescriptors: ServiceDescriptor[], parentProvider?: ServiceProvider);
|
|
27
|
+
getService<T>(serviceIdentifier: string | symbol): T | undefined;
|
|
28
|
+
getRequiredService<T>(serviceIdentifier: string | symbol): T;
|
|
29
|
+
private resolveService;
|
|
30
|
+
private resolveSingleton;
|
|
31
|
+
private resolveScoped;
|
|
32
|
+
private resolveTransient;
|
|
33
|
+
private createInstance;
|
|
34
|
+
private constructInstance;
|
|
35
|
+
createScope(): IServiceScope;
|
|
36
|
+
has(serviceType: string | symbol): boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { type IServiceScope as I, ServiceProvider as S, type ServiceDescriptor as a, ServiceLifetime as b };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
declare enum ServiceLifetime {
|
|
2
|
+
Singleton = "SINGLETON",
|
|
3
|
+
Scoped = "SCOPED",
|
|
4
|
+
Transient = "TRANSIENT"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
interface ServiceDescriptor {
|
|
8
|
+
serviceIdentifier: string | symbol;
|
|
9
|
+
implementationType?: new (...args: any[]) => any;
|
|
10
|
+
implementationInstance?: any;
|
|
11
|
+
implementationFactory?: (...args: any[]) => any;
|
|
12
|
+
lifetime: ServiceLifetime;
|
|
13
|
+
dependencies?: (string | symbol)[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface IServiceScope {
|
|
17
|
+
serviceProvider: ServiceProvider;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
}
|
|
20
|
+
declare class ServiceProvider {
|
|
21
|
+
private serviceDescriptors;
|
|
22
|
+
private singletons;
|
|
23
|
+
private scopedInstances;
|
|
24
|
+
private parent?;
|
|
25
|
+
private resolutionStack;
|
|
26
|
+
constructor(serviceDescriptors: ServiceDescriptor[], parentProvider?: ServiceProvider);
|
|
27
|
+
getService<T>(serviceIdentifier: string | symbol): T | undefined;
|
|
28
|
+
getRequiredService<T>(serviceIdentifier: string | symbol): T;
|
|
29
|
+
private resolveService;
|
|
30
|
+
private resolveSingleton;
|
|
31
|
+
private resolveScoped;
|
|
32
|
+
private resolveTransient;
|
|
33
|
+
private createInstance;
|
|
34
|
+
private constructInstance;
|
|
35
|
+
createScope(): IServiceScope;
|
|
36
|
+
has(serviceType: string | symbol): boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { type IServiceScope as I, ServiceProvider as S, type ServiceDescriptor as a, ServiceLifetime as b };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { S as ServiceCollection } from '../ServiceCollection-3wUO7p8g.mjs';
|
|
2
|
+
import { S as ServiceProvider, b as ServiceLifetime } from '../ServiceProvider-BcW9XXlN.mjs';
|
|
3
|
+
import { b as BaseResponse, a as BaseRequest, H as HandlerResult, I as IRequestHandler } from '../IRequestHandler-CjLrozYA.mjs';
|
|
4
|
+
import { IPipelineBehavior } from '../pipeline/index.mjs';
|
|
5
|
+
import { M as Mediator } from '../Mediator-CF-4m1QF.mjs';
|
|
6
|
+
|
|
7
|
+
interface IApplicationAdapter {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
configure(services: ServiceCollection): void | Promise<void>;
|
|
10
|
+
initialize?(): void | Promise<void>;
|
|
11
|
+
dispose?(): void | Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
declare class Application {
|
|
15
|
+
private readonly serviceProvider;
|
|
16
|
+
private readonly mediator;
|
|
17
|
+
private isRunning;
|
|
18
|
+
private adapters;
|
|
19
|
+
constructor(serviceProvider: ServiceProvider, mediator: Mediator, adapters: IApplicationAdapter[]);
|
|
20
|
+
run(): Promise<void>;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
send<TResponse extends BaseResponse>(request: BaseRequest): HandlerResult<TResponse>;
|
|
23
|
+
getServiceProvider(): ServiceProvider;
|
|
24
|
+
getMediator(): Mediator;
|
|
25
|
+
get running(): boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare class ApplicationBuilder {
|
|
29
|
+
private services;
|
|
30
|
+
private adapters;
|
|
31
|
+
private pipelineBehaviors;
|
|
32
|
+
constructor();
|
|
33
|
+
registerHandler<TRequest extends BaseRequest, TResponse extends BaseResponse>(requestType: string | symbol, handler: (new (...args: any[]) => IRequestHandler<TRequest, TResponse>) | IRequestHandler<TRequest, TResponse>, lifetime?: ServiceLifetime): this;
|
|
34
|
+
registerHandlers(handlers: Map<string | symbol, new (...args: any[]) => IRequestHandler<any, any>>): this;
|
|
35
|
+
registerBehavior<TRequest extends BaseRequest, TResponse extends BaseResponse>(behavior: (new (...args: any[]) => IPipelineBehavior<TRequest, TResponse>) | IPipelineBehavior<TRequest, TResponse>): this;
|
|
36
|
+
registerSingleton<T>(serviceIdentifier: string | symbol, implementation: (new (...args: any[]) => T) | T): this;
|
|
37
|
+
registerScoped<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
38
|
+
registerTransient<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
39
|
+
registerFactory<T>(serviceIdentifier: string | symbol, factory: (provider: ServiceProvider) => T, lifetime?: ServiceLifetime): this;
|
|
40
|
+
use(adapter: IApplicationAdapter): this;
|
|
41
|
+
getServiceCollection(): ServiceCollection;
|
|
42
|
+
build(): Promise<Application>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { Application, ApplicationBuilder, type IApplicationAdapter };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { S as ServiceCollection } from '../ServiceCollection-B8PXr0Uo.js';
|
|
2
|
+
import { S as ServiceProvider, b as ServiceLifetime } from '../ServiceProvider-BcW9XXlN.js';
|
|
3
|
+
import { b as BaseResponse, a as BaseRequest, H as HandlerResult, I as IRequestHandler } from '../IRequestHandler-CjLrozYA.js';
|
|
4
|
+
import { IPipelineBehavior } from '../pipeline/index.js';
|
|
5
|
+
import { M as Mediator } from '../Mediator-DkYg4E8y.js';
|
|
6
|
+
|
|
7
|
+
interface IApplicationAdapter {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
configure(services: ServiceCollection): void | Promise<void>;
|
|
10
|
+
initialize?(): void | Promise<void>;
|
|
11
|
+
dispose?(): void | Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
declare class Application {
|
|
15
|
+
private readonly serviceProvider;
|
|
16
|
+
private readonly mediator;
|
|
17
|
+
private isRunning;
|
|
18
|
+
private adapters;
|
|
19
|
+
constructor(serviceProvider: ServiceProvider, mediator: Mediator, adapters: IApplicationAdapter[]);
|
|
20
|
+
run(): Promise<void>;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
send<TResponse extends BaseResponse>(request: BaseRequest): HandlerResult<TResponse>;
|
|
23
|
+
getServiceProvider(): ServiceProvider;
|
|
24
|
+
getMediator(): Mediator;
|
|
25
|
+
get running(): boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare class ApplicationBuilder {
|
|
29
|
+
private services;
|
|
30
|
+
private adapters;
|
|
31
|
+
private pipelineBehaviors;
|
|
32
|
+
constructor();
|
|
33
|
+
registerHandler<TRequest extends BaseRequest, TResponse extends BaseResponse>(requestType: string | symbol, handler: (new (...args: any[]) => IRequestHandler<TRequest, TResponse>) | IRequestHandler<TRequest, TResponse>, lifetime?: ServiceLifetime): this;
|
|
34
|
+
registerHandlers(handlers: Map<string | symbol, new (...args: any[]) => IRequestHandler<any, any>>): this;
|
|
35
|
+
registerBehavior<TRequest extends BaseRequest, TResponse extends BaseResponse>(behavior: (new (...args: any[]) => IPipelineBehavior<TRequest, TResponse>) | IPipelineBehavior<TRequest, TResponse>): this;
|
|
36
|
+
registerSingleton<T>(serviceIdentifier: string | symbol, implementation: (new (...args: any[]) => T) | T): this;
|
|
37
|
+
registerScoped<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
38
|
+
registerTransient<T>(serviceIdentifier: string | symbol, implementation: new (...args: any[]) => T): this;
|
|
39
|
+
registerFactory<T>(serviceIdentifier: string | symbol, factory: (provider: ServiceProvider) => T, lifetime?: ServiceLifetime): this;
|
|
40
|
+
use(adapter: IApplicationAdapter): this;
|
|
41
|
+
getServiceCollection(): ServiceCollection;
|
|
42
|
+
build(): Promise<Application>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { Application, ApplicationBuilder, type IApplicationAdapter };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';require('reflect-metadata');/* conduit - MIT License */
|
|
2
|
+
var P=Object.defineProperty;var E=(o,e,t)=>e in o?P(o,e,{enumerable:true,configurable:true,writable:true,value:t}):o[e]=t;var n=(o,e)=>P(o,"name",{value:e,configurable:true});var i=(o,e,t)=>E(o,typeof e!="symbol"?e+"":e,t);var s=(function(o){return o.Singleton="SINGLETON",o.Scoped="SCOPED",o.Transient="TRANSIENT",o})({});var l=class l{constructor(e,t){i(this,"serviceDescriptors");i(this,"singletons",new Map);i(this,"scopedInstances",new Map);i(this,"parent");i(this,"resolutionStack",[]);this.serviceDescriptors=e,this.parent=t;}getService(e){try{return this.getRequiredService(e)}catch{return}}getRequiredService(e){let t=this.resolutionStack.length===0;if(this.resolutionStack.includes(e)){let r=[...this.resolutionStack,e].map(a=>String(a)).join(" \u2192 ");throw new Error(`Circular dependency detected: ${r}`)}this.resolutionStack.push(e);try{let r=this.serviceDescriptors.find(a=>a.serviceIdentifier===e);if(!r){if(this.parent)return this.parent.getRequiredService(e);throw new Error(`Service '${String(e)}' not registered`)}return this.resolveService(r)}catch(r){throw this.resolutionStack.pop(),r}finally{this.resolutionStack[this.resolutionStack.length-1]===e&&this.resolutionStack.pop(),t&&(this.resolutionStack=[]);}}resolveService(e){switch(e.lifetime){case s.Singleton:return this.resolveSingleton(e);case s.Scoped:return this.resolveScoped(e);case s.Transient:return this.resolveTransient(e);default:throw new Error(`Unknown lifetime: ${e.lifetime}`)}}resolveSingleton(e){let{serviceIdentifier:t}=e;if(this.singletons.has(t))return this.singletons.get(t);let r=this.createInstance(e);return this.singletons.set(t,r),r}resolveScoped(e){let{serviceIdentifier:t}=e;if(!this.parent)throw new Error(`Cannot resolve scoped service '${String(t)}' from root provider. Use createScope() first.`);if(this.scopedInstances.has(t))return this.scopedInstances.get(t);let r=this.createInstance(e);return this.scopedInstances.set(t,r),r}resolveTransient(e){return this.createInstance(e)}createInstance(e){if(e.implementationInstance!==void 0)return e.implementationInstance;if(e.implementationFactory)return e.implementationFactory(this);if(e.implementationType)return this.constructInstance(e);throw new Error(`Cannot create instance for service '${String(e.serviceIdentifier)}'`)}constructInstance(e){let{implementationType:t,dependencies:r}=e;if(!t)throw new Error("Implementation type is required");if(r&&r.length>0){let c=r.map(d=>this.getRequiredService(d));return new t(...c)}let p=(Reflect.getMetadata("design:paramtypes",t)||[]).map((c,d)=>{let T=Reflect.getMetadata("inject:params",t)?.[d];if(T)return this.getRequiredService(T);let R=c.name||c;return this.getRequiredService(R)});return new t(...p)}createScope(){let e=new l(this.serviceDescriptors,this);return {serviceProvider:e,dispose:n(()=>{e.scopedInstances.clear();},"dispose")}}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)||(this.parent?.has(e)??false)}};n(l,"ServiceProvider");var u=l;var m=class m{constructor(){i(this,"serviceDescriptors",[]);}addSingleton(e,t){return typeof t=="function"?this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Singleton}):this.serviceDescriptors.push({serviceIdentifier:e,implementationInstance:t,lifetime:s.Singleton}),this}addScoped(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped}),this}addTransient(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Transient}),this}addFactory(e,t,r=s.Transient){return this.serviceDescriptors.push({serviceIdentifier:e,implementationFactory:t,lifetime:r}),this}addScopedWithDependencies(e,t,r){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped,dependencies:r}),this}buildServiceProvider(){return new u([...this.serviceDescriptors])}getDescriptors(){return [...this.serviceDescriptors]}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)}get count(){return this.serviceDescriptors.length}};n(m,"ServiceCollection");var v=m;var S=class S{constructor(e){i(this,"request");i(this,"response");i(this,"metadata",new Map);this.request=e;}setMetadata(e,t){this.metadata.set(e,t);}getMetadata(e){return this.metadata.get(e)}};n(S,"PipelineContext");var f=S;var w=class w{constructor(e){i(this,"serviceProvider");i(this,"behaviors",[]);this.serviceProvider=e;let t=this.serviceProvider.getService("PipelineBehaviors");t&&(this.behaviors=t);}async send(e){let t=this.serviceProvider.getService(e.type);if(!t)throw new Error(`No handler registered for request type: ${String(e.type)}`);let r=new f(e);return this.behaviors.length===0?await t.handle(e):await this.executePipeline(r,t,this.behaviors)}async executePipeline(e,t,r){let a=0,p=n(async()=>{if(a<r.length)return await r[a++].handle(e,p);let c=await t.handle(e.request);return e.response=c,c},"next");return await p()}};n(w,"Mediator");var g=w;var y=class y{constructor(e,t,r){i(this,"serviceProvider");i(this,"mediator");i(this,"isRunning",false);i(this,"adapters");this.serviceProvider=e,this.mediator=t,this.adapters=r;}async run(){if(this.isRunning)throw new Error("Application is already running");for(let e of this.adapters)e.initialize&&await e.initialize();this.isRunning=true;}async stop(){if(this.isRunning){for(let e of [...this.adapters].reverse())e.dispose&&await e.dispose();this.isRunning=false;}}async send(e){if(!this.isRunning)throw new Error("Application must be running before sending requests. Call app.run() first.");return this.mediator.send(e)}getServiceProvider(){return this.serviceProvider}getMediator(){return this.mediator}get running(){return this.isRunning}};n(y,"Application");var h=y;var k="PipelineBehaviors",I=class I{constructor(){i(this,"services");i(this,"adapters",[]);i(this,"pipelineBehaviors",[]);this.services=new v;}registerHandler(e,t,r=s.Transient){if(typeof t=="function")switch(r){case s.Singleton:this.services.addSingleton(e,t);break;case s.Scoped:this.services.addScoped(e,t);break;case s.Transient:default:this.services.addTransient(e,t);break}else this.services.addSingleton(e,t);return this}registerHandlers(e){return e.forEach((t,r)=>{this.registerHandler(r,t);}),this}registerBehavior(e){return this.pipelineBehaviors.push(e),this}registerSingleton(e,t){return this.services.addSingleton(e,t),this}registerScoped(e,t){return this.services.addScoped(e,t),this}registerTransient(e,t){return this.services.addTransient(e,t),this}registerFactory(e,t,r=s.Transient){return this.services.addFactory(e,t,r),this}use(e){return this.adapters.push(e),this}getServiceCollection(){return this.services}async build(){for(let r of this.adapters)await r.configure(this.services);this.pipelineBehaviors.length>0&&this.services.addSingleton(k,this.pipelineBehaviors.map(r=>typeof r=="function"?new r:r));let e=this.services.buildServiceProvider(),t=new g(e);return new h(e,t,this.adapters)}};n(I,"ApplicationBuilder");var D=I;exports.Application=h;exports.ApplicationBuilder=D;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'reflect-metadata';/* conduit - MIT License */
|
|
2
|
+
var P=Object.defineProperty;var E=(o,e,t)=>e in o?P(o,e,{enumerable:true,configurable:true,writable:true,value:t}):o[e]=t;var n=(o,e)=>P(o,"name",{value:e,configurable:true});var i=(o,e,t)=>E(o,typeof e!="symbol"?e+"":e,t);var s=(function(o){return o.Singleton="SINGLETON",o.Scoped="SCOPED",o.Transient="TRANSIENT",o})({});var l=class l{constructor(e,t){i(this,"serviceDescriptors");i(this,"singletons",new Map);i(this,"scopedInstances",new Map);i(this,"parent");i(this,"resolutionStack",[]);this.serviceDescriptors=e,this.parent=t;}getService(e){try{return this.getRequiredService(e)}catch{return}}getRequiredService(e){let t=this.resolutionStack.length===0;if(this.resolutionStack.includes(e)){let r=[...this.resolutionStack,e].map(a=>String(a)).join(" \u2192 ");throw new Error(`Circular dependency detected: ${r}`)}this.resolutionStack.push(e);try{let r=this.serviceDescriptors.find(a=>a.serviceIdentifier===e);if(!r){if(this.parent)return this.parent.getRequiredService(e);throw new Error(`Service '${String(e)}' not registered`)}return this.resolveService(r)}catch(r){throw this.resolutionStack.pop(),r}finally{this.resolutionStack[this.resolutionStack.length-1]===e&&this.resolutionStack.pop(),t&&(this.resolutionStack=[]);}}resolveService(e){switch(e.lifetime){case s.Singleton:return this.resolveSingleton(e);case s.Scoped:return this.resolveScoped(e);case s.Transient:return this.resolveTransient(e);default:throw new Error(`Unknown lifetime: ${e.lifetime}`)}}resolveSingleton(e){let{serviceIdentifier:t}=e;if(this.singletons.has(t))return this.singletons.get(t);let r=this.createInstance(e);return this.singletons.set(t,r),r}resolveScoped(e){let{serviceIdentifier:t}=e;if(!this.parent)throw new Error(`Cannot resolve scoped service '${String(t)}' from root provider. Use createScope() first.`);if(this.scopedInstances.has(t))return this.scopedInstances.get(t);let r=this.createInstance(e);return this.scopedInstances.set(t,r),r}resolveTransient(e){return this.createInstance(e)}createInstance(e){if(e.implementationInstance!==void 0)return e.implementationInstance;if(e.implementationFactory)return e.implementationFactory(this);if(e.implementationType)return this.constructInstance(e);throw new Error(`Cannot create instance for service '${String(e.serviceIdentifier)}'`)}constructInstance(e){let{implementationType:t,dependencies:r}=e;if(!t)throw new Error("Implementation type is required");if(r&&r.length>0){let c=r.map(d=>this.getRequiredService(d));return new t(...c)}let p=(Reflect.getMetadata("design:paramtypes",t)||[]).map((c,d)=>{let T=Reflect.getMetadata("inject:params",t)?.[d];if(T)return this.getRequiredService(T);let R=c.name||c;return this.getRequiredService(R)});return new t(...p)}createScope(){let e=new l(this.serviceDescriptors,this);return {serviceProvider:e,dispose:n(()=>{e.scopedInstances.clear();},"dispose")}}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)||(this.parent?.has(e)??false)}};n(l,"ServiceProvider");var u=l;var m=class m{constructor(){i(this,"serviceDescriptors",[]);}addSingleton(e,t){return typeof t=="function"?this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Singleton}):this.serviceDescriptors.push({serviceIdentifier:e,implementationInstance:t,lifetime:s.Singleton}),this}addScoped(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped}),this}addTransient(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Transient}),this}addFactory(e,t,r=s.Transient){return this.serviceDescriptors.push({serviceIdentifier:e,implementationFactory:t,lifetime:r}),this}addScopedWithDependencies(e,t,r){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped,dependencies:r}),this}buildServiceProvider(){return new u([...this.serviceDescriptors])}getDescriptors(){return [...this.serviceDescriptors]}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)}get count(){return this.serviceDescriptors.length}};n(m,"ServiceCollection");var v=m;var S=class S{constructor(e){i(this,"request");i(this,"response");i(this,"metadata",new Map);this.request=e;}setMetadata(e,t){this.metadata.set(e,t);}getMetadata(e){return this.metadata.get(e)}};n(S,"PipelineContext");var f=S;var w=class w{constructor(e){i(this,"serviceProvider");i(this,"behaviors",[]);this.serviceProvider=e;let t=this.serviceProvider.getService("PipelineBehaviors");t&&(this.behaviors=t);}async send(e){let t=this.serviceProvider.getService(e.type);if(!t)throw new Error(`No handler registered for request type: ${String(e.type)}`);let r=new f(e);return this.behaviors.length===0?await t.handle(e):await this.executePipeline(r,t,this.behaviors)}async executePipeline(e,t,r){let a=0,p=n(async()=>{if(a<r.length)return await r[a++].handle(e,p);let c=await t.handle(e.request);return e.response=c,c},"next");return await p()}};n(w,"Mediator");var g=w;var y=class y{constructor(e,t,r){i(this,"serviceProvider");i(this,"mediator");i(this,"isRunning",false);i(this,"adapters");this.serviceProvider=e,this.mediator=t,this.adapters=r;}async run(){if(this.isRunning)throw new Error("Application is already running");for(let e of this.adapters)e.initialize&&await e.initialize();this.isRunning=true;}async stop(){if(this.isRunning){for(let e of [...this.adapters].reverse())e.dispose&&await e.dispose();this.isRunning=false;}}async send(e){if(!this.isRunning)throw new Error("Application must be running before sending requests. Call app.run() first.");return this.mediator.send(e)}getServiceProvider(){return this.serviceProvider}getMediator(){return this.mediator}get running(){return this.isRunning}};n(y,"Application");var h=y;var k="PipelineBehaviors",I=class I{constructor(){i(this,"services");i(this,"adapters",[]);i(this,"pipelineBehaviors",[]);this.services=new v;}registerHandler(e,t,r=s.Transient){if(typeof t=="function")switch(r){case s.Singleton:this.services.addSingleton(e,t);break;case s.Scoped:this.services.addScoped(e,t);break;case s.Transient:default:this.services.addTransient(e,t);break}else this.services.addSingleton(e,t);return this}registerHandlers(e){return e.forEach((t,r)=>{this.registerHandler(r,t);}),this}registerBehavior(e){return this.pipelineBehaviors.push(e),this}registerSingleton(e,t){return this.services.addSingleton(e,t),this}registerScoped(e,t){return this.services.addScoped(e,t),this}registerTransient(e,t){return this.services.addTransient(e,t),this}registerFactory(e,t,r=s.Transient){return this.services.addFactory(e,t,r),this}use(e){return this.adapters.push(e),this}getServiceCollection(){return this.services}async build(){for(let r of this.adapters)await r.configure(this.services);this.pipelineBehaviors.length>0&&this.services.addSingleton(k,this.pipelineBehaviors.map(r=>typeof r=="function"?new r:r));let e=this.services.buildServiceProvider(),t=new g(e);return new h(e,t,this.adapters)}};n(I,"ApplicationBuilder");var D=I;export{h as Application,D as ApplicationBuilder};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { S as ServiceCollection } from '../ServiceCollection-3wUO7p8g.mjs';
|
|
2
|
+
export { I as IServiceScope, a as ServiceDescriptor, b as ServiceLifetime, S as ServiceProvider } from '../ServiceProvider-BcW9XXlN.mjs';
|
|
3
|
+
|
|
4
|
+
declare function Inject(serviceIdentifier: string | symbol): ParameterDecorator;
|
|
5
|
+
|
|
6
|
+
export { Inject };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { S as ServiceCollection } from '../ServiceCollection-B8PXr0Uo.js';
|
|
2
|
+
export { I as IServiceScope, a as ServiceDescriptor, b as ServiceLifetime, S as ServiceProvider } from '../ServiceProvider-BcW9XXlN.js';
|
|
3
|
+
|
|
4
|
+
declare function Inject(serviceIdentifier: string | symbol): ParameterDecorator;
|
|
5
|
+
|
|
6
|
+
export { Inject };
|
package/dist/di/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';require('reflect-metadata');/* conduit - MIT License */
|
|
2
|
+
var S=Object.defineProperty;var g=(i,e,t)=>e in i?S(i,e,{enumerable:true,configurable:true,writable:true,value:t}):i[e]=t;var o=(i,e)=>S(i,"name",{value:e,configurable:true});var n=(i,e,t)=>g(i,typeof e!="symbol"?e+"":e,t);var s=(function(i){return i.Singleton="SINGLETON",i.Scoped="SCOPED",i.Transient="TRANSIENT",i})({});var l=class l{constructor(e,t){n(this,"serviceDescriptors");n(this,"singletons",new Map);n(this,"scopedInstances",new Map);n(this,"parent");n(this,"resolutionStack",[]);this.serviceDescriptors=e,this.parent=t;}getService(e){try{return this.getRequiredService(e)}catch{return}}getRequiredService(e){let t=this.resolutionStack.length===0;if(this.resolutionStack.includes(e)){let r=[...this.resolutionStack,e].map(c=>String(c)).join(" \u2192 ");throw new Error(`Circular dependency detected: ${r}`)}this.resolutionStack.push(e);try{let r=this.serviceDescriptors.find(c=>c.serviceIdentifier===e);if(!r){if(this.parent)return this.parent.getRequiredService(e);throw new Error(`Service '${String(e)}' not registered`)}return this.resolveService(r)}catch(r){throw this.resolutionStack.pop(),r}finally{this.resolutionStack[this.resolutionStack.length-1]===e&&this.resolutionStack.pop(),t&&(this.resolutionStack=[]);}}resolveService(e){switch(e.lifetime){case s.Singleton:return this.resolveSingleton(e);case s.Scoped:return this.resolveScoped(e);case s.Transient:return this.resolveTransient(e);default:throw new Error(`Unknown lifetime: ${e.lifetime}`)}}resolveSingleton(e){let{serviceIdentifier:t}=e;if(this.singletons.has(t))return this.singletons.get(t);let r=this.createInstance(e);return this.singletons.set(t,r),r}resolveScoped(e){let{serviceIdentifier:t}=e;if(!this.parent)throw new Error(`Cannot resolve scoped service '${String(t)}' from root provider. Use createScope() first.`);if(this.scopedInstances.has(t))return this.scopedInstances.get(t);let r=this.createInstance(e);return this.scopedInstances.set(t,r),r}resolveTransient(e){return this.createInstance(e)}createInstance(e){if(e.implementationInstance!==void 0)return e.implementationInstance;if(e.implementationFactory)return e.implementationFactory(this);if(e.implementationType)return this.constructInstance(e);throw new Error(`Cannot create instance for service '${String(e.serviceIdentifier)}'`)}constructInstance(e){let{implementationType:t,dependencies:r}=e;if(!t)throw new Error("Implementation type is required");if(r&&r.length>0){let h=r.map(u=>this.getRequiredService(u));return new t(...h)}let p=(Reflect.getMetadata("design:paramtypes",t)||[]).map((h,u)=>{let f=Reflect.getMetadata("inject:params",t)?.[u];if(f)return this.getRequiredService(f);let v=h.name||h;return this.getRequiredService(v)});return new t(...p)}createScope(){let e=new l(this.serviceDescriptors,this);return {serviceProvider:e,dispose:o(()=>{e.scopedInstances.clear();},"dispose")}}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)||(this.parent?.has(e)??false)}};o(l,"ServiceProvider");var a=l;var d=class d{constructor(){n(this,"serviceDescriptors",[]);}addSingleton(e,t){return typeof t=="function"?this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Singleton}):this.serviceDescriptors.push({serviceIdentifier:e,implementationInstance:t,lifetime:s.Singleton}),this}addScoped(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped}),this}addTransient(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Transient}),this}addFactory(e,t,r=s.Transient){return this.serviceDescriptors.push({serviceIdentifier:e,implementationFactory:t,lifetime:r}),this}addScopedWithDependencies(e,t,r){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped,dependencies:r}),this}buildServiceProvider(){return new a([...this.serviceDescriptors])}getDescriptors(){return [...this.serviceDescriptors]}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)}get count(){return this.serviceDescriptors.length}};o(d,"ServiceCollection");var m=d;function w(i){return (e,t,r)=>{let p={...Reflect.getOwnMetadata("inject:params",e)||{}};p[r]=i,Reflect.defineMetadata("inject:params",p,e);}}o(w,"Inject");exports.Inject=w;exports.ServiceCollection=m;exports.ServiceLifetime=s;exports.ServiceProvider=a;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'reflect-metadata';/* conduit - MIT License */
|
|
2
|
+
var S=Object.defineProperty;var g=(i,e,t)=>e in i?S(i,e,{enumerable:true,configurable:true,writable:true,value:t}):i[e]=t;var o=(i,e)=>S(i,"name",{value:e,configurable:true});var n=(i,e,t)=>g(i,typeof e!="symbol"?e+"":e,t);var s=(function(i){return i.Singleton="SINGLETON",i.Scoped="SCOPED",i.Transient="TRANSIENT",i})({});var l=class l{constructor(e,t){n(this,"serviceDescriptors");n(this,"singletons",new Map);n(this,"scopedInstances",new Map);n(this,"parent");n(this,"resolutionStack",[]);this.serviceDescriptors=e,this.parent=t;}getService(e){try{return this.getRequiredService(e)}catch{return}}getRequiredService(e){let t=this.resolutionStack.length===0;if(this.resolutionStack.includes(e)){let r=[...this.resolutionStack,e].map(c=>String(c)).join(" \u2192 ");throw new Error(`Circular dependency detected: ${r}`)}this.resolutionStack.push(e);try{let r=this.serviceDescriptors.find(c=>c.serviceIdentifier===e);if(!r){if(this.parent)return this.parent.getRequiredService(e);throw new Error(`Service '${String(e)}' not registered`)}return this.resolveService(r)}catch(r){throw this.resolutionStack.pop(),r}finally{this.resolutionStack[this.resolutionStack.length-1]===e&&this.resolutionStack.pop(),t&&(this.resolutionStack=[]);}}resolveService(e){switch(e.lifetime){case s.Singleton:return this.resolveSingleton(e);case s.Scoped:return this.resolveScoped(e);case s.Transient:return this.resolveTransient(e);default:throw new Error(`Unknown lifetime: ${e.lifetime}`)}}resolveSingleton(e){let{serviceIdentifier:t}=e;if(this.singletons.has(t))return this.singletons.get(t);let r=this.createInstance(e);return this.singletons.set(t,r),r}resolveScoped(e){let{serviceIdentifier:t}=e;if(!this.parent)throw new Error(`Cannot resolve scoped service '${String(t)}' from root provider. Use createScope() first.`);if(this.scopedInstances.has(t))return this.scopedInstances.get(t);let r=this.createInstance(e);return this.scopedInstances.set(t,r),r}resolveTransient(e){return this.createInstance(e)}createInstance(e){if(e.implementationInstance!==void 0)return e.implementationInstance;if(e.implementationFactory)return e.implementationFactory(this);if(e.implementationType)return this.constructInstance(e);throw new Error(`Cannot create instance for service '${String(e.serviceIdentifier)}'`)}constructInstance(e){let{implementationType:t,dependencies:r}=e;if(!t)throw new Error("Implementation type is required");if(r&&r.length>0){let h=r.map(u=>this.getRequiredService(u));return new t(...h)}let p=(Reflect.getMetadata("design:paramtypes",t)||[]).map((h,u)=>{let f=Reflect.getMetadata("inject:params",t)?.[u];if(f)return this.getRequiredService(f);let v=h.name||h;return this.getRequiredService(v)});return new t(...p)}createScope(){let e=new l(this.serviceDescriptors,this);return {serviceProvider:e,dispose:o(()=>{e.scopedInstances.clear();},"dispose")}}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)||(this.parent?.has(e)??false)}};o(l,"ServiceProvider");var a=l;var d=class d{constructor(){n(this,"serviceDescriptors",[]);}addSingleton(e,t){return typeof t=="function"?this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Singleton}):this.serviceDescriptors.push({serviceIdentifier:e,implementationInstance:t,lifetime:s.Singleton}),this}addScoped(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped}),this}addTransient(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Transient}),this}addFactory(e,t,r=s.Transient){return this.serviceDescriptors.push({serviceIdentifier:e,implementationFactory:t,lifetime:r}),this}addScopedWithDependencies(e,t,r){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:s.Scoped,dependencies:r}),this}buildServiceProvider(){return new a([...this.serviceDescriptors])}getDescriptors(){return [...this.serviceDescriptors]}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)}get count(){return this.serviceDescriptors.length}};o(d,"ServiceCollection");var m=d;function w(i){return (e,t,r)=>{let p={...Reflect.getOwnMetadata("inject:params",e)||{}};p[r]=i,Reflect.defineMetadata("inject:params",p,e);}}o(w,"Inject");export{w as Inject,m as ServiceCollection,s as ServiceLifetime,a as ServiceProvider};
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { S as ServiceCollection } from './ServiceCollection-3wUO7p8g.mjs';
|
|
2
|
+
export { I as IServiceScope, a as ServiceDescriptor, b as ServiceLifetime, S as ServiceProvider } from './ServiceProvider-BcW9XXlN.mjs';
|
|
3
|
+
export { Inject } from './di/index.mjs';
|
|
4
|
+
export { B as BaseCommunicationObject, a as BaseRequest, b as BaseResponse, H as HandlerResult, I as IRequestHandler } from './IRequestHandler-CjLrozYA.mjs';
|
|
5
|
+
export { M as Mediator } from './Mediator-CF-4m1QF.mjs';
|
|
6
|
+
export { SimpleHandler, StreamingHandler } from './mediator/index.mjs';
|
|
7
|
+
export { IPipelineBehavior, PipelineContext, PipelineDelegate } from './pipeline/index.mjs';
|
|
8
|
+
export { Application, ApplicationBuilder, IApplicationAdapter } from './application/index.mjs';
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { S as ServiceCollection } from './ServiceCollection-B8PXr0Uo.js';
|
|
2
|
+
export { I as IServiceScope, a as ServiceDescriptor, b as ServiceLifetime, S as ServiceProvider } from './ServiceProvider-BcW9XXlN.js';
|
|
3
|
+
export { Inject } from './di/index.js';
|
|
4
|
+
export { B as BaseCommunicationObject, a as BaseRequest, b as BaseResponse, H as HandlerResult, I as IRequestHandler } from './IRequestHandler-CjLrozYA.js';
|
|
5
|
+
export { M as Mediator } from './Mediator-DkYg4E8y.js';
|
|
6
|
+
export { SimpleHandler, StreamingHandler } from './mediator/index.js';
|
|
7
|
+
export { IPipelineBehavior, PipelineContext, PipelineDelegate } from './pipeline/index.js';
|
|
8
|
+
export { Application, ApplicationBuilder, IApplicationAdapter } from './application/index.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';require('reflect-metadata');var uuid=require('uuid');/* conduit - MIT License */
|
|
2
|
+
var F=Object.defineProperty;var $=(o,e,t)=>e in o?F(o,e,{enumerable:true,configurable:true,writable:true,value:t}):o[e]=t;var i=(o,e)=>F(o,"name",{value:e,configurable:true});var s=(o,e,t)=>$(o,typeof e!="symbol"?e+"":e,t);var n=(function(o){return o.Singleton="SINGLETON",o.Scoped="SCOPED",o.Transient="TRANSIENT",o})({});var g=class g{constructor(e,t){s(this,"serviceDescriptors");s(this,"singletons",new Map);s(this,"scopedInstances",new Map);s(this,"parent");s(this,"resolutionStack",[]);this.serviceDescriptors=e,this.parent=t;}getService(e){try{return this.getRequiredService(e)}catch{return}}getRequiredService(e){let t=this.resolutionStack.length===0;if(this.resolutionStack.includes(e)){let r=[...this.resolutionStack,e].map(a=>String(a)).join(" \u2192 ");throw new Error(`Circular dependency detected: ${r}`)}this.resolutionStack.push(e);try{let r=this.serviceDescriptors.find(a=>a.serviceIdentifier===e);if(!r){if(this.parent)return this.parent.getRequiredService(e);throw new Error(`Service '${String(e)}' not registered`)}return this.resolveService(r)}catch(r){throw this.resolutionStack.pop(),r}finally{this.resolutionStack[this.resolutionStack.length-1]===e&&this.resolutionStack.pop(),t&&(this.resolutionStack=[]);}}resolveService(e){switch(e.lifetime){case n.Singleton:return this.resolveSingleton(e);case n.Scoped:return this.resolveScoped(e);case n.Transient:return this.resolveTransient(e);default:throw new Error(`Unknown lifetime: ${e.lifetime}`)}}resolveSingleton(e){let{serviceIdentifier:t}=e;if(this.singletons.has(t))return this.singletons.get(t);let r=this.createInstance(e);return this.singletons.set(t,r),r}resolveScoped(e){let{serviceIdentifier:t}=e;if(!this.parent)throw new Error(`Cannot resolve scoped service '${String(t)}' from root provider. Use createScope() first.`);if(this.scopedInstances.has(t))return this.scopedInstances.get(t);let r=this.createInstance(e);return this.scopedInstances.set(t,r),r}resolveTransient(e){return this.createInstance(e)}createInstance(e){if(e.implementationInstance!==void 0)return e.implementationInstance;if(e.implementationFactory)return e.implementationFactory(this);if(e.implementationType)return this.constructInstance(e);throw new Error(`Cannot create instance for service '${String(e.serviceIdentifier)}'`)}constructInstance(e){let{implementationType:t,dependencies:r}=e;if(!t)throw new Error("Implementation type is required");if(r&&r.length>0){let h=r.map(v=>this.getRequiredService(v));return new t(...h)}let c=(Reflect.getMetadata("design:paramtypes",t)||[]).map((h,v)=>{let q=Reflect.getMetadata("inject:params",t)?.[v];if(q)return this.getRequiredService(q);let N=h.name||h;return this.getRequiredService(N)});return new t(...c)}createScope(){let e=new g(this.serviceDescriptors,this);return {serviceProvider:e,dispose:i(()=>{e.scopedInstances.clear();},"dispose")}}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)||(this.parent?.has(e)??false)}};i(g,"ServiceProvider");var u=g;var S=class S{constructor(){s(this,"serviceDescriptors",[]);}addSingleton(e,t){return typeof t=="function"?this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Singleton}):this.serviceDescriptors.push({serviceIdentifier:e,implementationInstance:t,lifetime:n.Singleton}),this}addScoped(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Scoped}),this}addTransient(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Transient}),this}addFactory(e,t,r=n.Transient){return this.serviceDescriptors.push({serviceIdentifier:e,implementationFactory:t,lifetime:r}),this}addScopedWithDependencies(e,t,r){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Scoped,dependencies:r}),this}buildServiceProvider(){return new u([...this.serviceDescriptors])}getDescriptors(){return [...this.serviceDescriptors]}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)}get count(){return this.serviceDescriptors.length}};i(S,"ServiceCollection");var d=S;function B(o){return (e,t,r)=>{let c={...Reflect.getOwnMetadata("inject:params",e)||{}};c[r]=o,Reflect.defineMetadata("inject:params",c,e);}}i(B,"Inject");var w=class w{constructor(e){s(this,"request");s(this,"response");s(this,"metadata",new Map);this.request=e;}setMetadata(e,t){this.metadata.set(e,t);}getMetadata(e){return this.metadata.get(e)}};i(w,"PipelineContext");var l=w;var x=class x{constructor(e){s(this,"serviceProvider");s(this,"behaviors",[]);this.serviceProvider=e;let t=this.serviceProvider.getService("PipelineBehaviors");t&&(this.behaviors=t);}async send(e){let t=this.serviceProvider.getService(e.type);if(!t)throw new Error(`No handler registered for request type: ${String(e.type)}`);let r=new l(e);return this.behaviors.length===0?await t.handle(e):await this.executePipeline(r,t,this.behaviors)}async executePipeline(e,t,r){let a=0,c=i(async()=>{if(a<r.length)return await r[a++].handle(e,c);let h=await t.handle(e.request);return e.response=h,h},"next");return await c()}};i(x,"Mediator");var m=x;var D=class D{handle(e){return this.handleSimple(e)}};i(D,"SimpleHandler");var y=D,P=class P{handle(e){return this.handleStream(e)}};i(P,"StreamingHandler");var I=P;var E=class E{constructor(e){s(this,"type");this.type=e;}};i(E,"BaseCommunicationObject");var p=E;var R=class R extends p{constructor(t){super(t);s(this,"uuid");s(this,"timestamp");this.uuid=uuid.v4(),this.timestamp=new Date;}};i(R,"BaseRequest");var T=R;var k=class k extends p{constructor(t,r){super(t);s(this,"success");s(this,"errors");s(this,"timestamp");s(this,"requestUuid");this.timestamp=new Date,this.success=true,this.requestUuid=r;}setErrors(t){return this.success=false,this.errors=t,this}addError(t){return this.errors||(this.errors=[]),this.errors.push(t),this.success=false,this}};i(k,"BaseResponse");var b=k;var j=class j{constructor(e,t,r){s(this,"serviceProvider");s(this,"mediator");s(this,"isRunning",false);s(this,"adapters");this.serviceProvider=e,this.mediator=t,this.adapters=r;}async run(){if(this.isRunning)throw new Error("Application is already running");for(let e of this.adapters)e.initialize&&await e.initialize();this.isRunning=true;}async stop(){if(this.isRunning){for(let e of [...this.adapters].reverse())e.dispose&&await e.dispose();this.isRunning=false;}}async send(e){if(!this.isRunning)throw new Error("Application must be running before sending requests. Call app.run() first.");return this.mediator.send(e)}getServiceProvider(){return this.serviceProvider}getMediator(){return this.mediator}get running(){return this.isRunning}};i(j,"Application");var f=j;var L="PipelineBehaviors",C=class C{constructor(){s(this,"services");s(this,"adapters",[]);s(this,"pipelineBehaviors",[]);this.services=new d;}registerHandler(e,t,r=n.Transient){if(typeof t=="function")switch(r){case n.Singleton:this.services.addSingleton(e,t);break;case n.Scoped:this.services.addScoped(e,t);break;case n.Transient:default:this.services.addTransient(e,t);break}else this.services.addSingleton(e,t);return this}registerHandlers(e){return e.forEach((t,r)=>{this.registerHandler(r,t);}),this}registerBehavior(e){return this.pipelineBehaviors.push(e),this}registerSingleton(e,t){return this.services.addSingleton(e,t),this}registerScoped(e,t){return this.services.addScoped(e,t),this}registerTransient(e,t){return this.services.addTransient(e,t),this}registerFactory(e,t,r=n.Transient){return this.services.addFactory(e,t,r),this}use(e){return this.adapters.push(e),this}getServiceCollection(){return this.services}async build(){for(let r of this.adapters)await r.configure(this.services);this.pipelineBehaviors.length>0&&this.services.addSingleton(L,this.pipelineBehaviors.map(r=>typeof r=="function"?new r:r));let e=this.services.buildServiceProvider(),t=new m(e);return new f(e,t,this.adapters)}};i(C,"ApplicationBuilder");var M=C;exports.Application=f;exports.ApplicationBuilder=M;exports.BaseCommunicationObject=p;exports.BaseRequest=T;exports.BaseResponse=b;exports.Inject=B;exports.Mediator=m;exports.PipelineContext=l;exports.ServiceCollection=d;exports.ServiceLifetime=n;exports.ServiceProvider=u;exports.SimpleHandler=y;exports.StreamingHandler=I;
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'reflect-metadata';import {v4}from'uuid';/* conduit - MIT License */
|
|
2
|
+
var F=Object.defineProperty;var $=(o,e,t)=>e in o?F(o,e,{enumerable:true,configurable:true,writable:true,value:t}):o[e]=t;var i=(o,e)=>F(o,"name",{value:e,configurable:true});var s=(o,e,t)=>$(o,typeof e!="symbol"?e+"":e,t);var n=(function(o){return o.Singleton="SINGLETON",o.Scoped="SCOPED",o.Transient="TRANSIENT",o})({});var g=class g{constructor(e,t){s(this,"serviceDescriptors");s(this,"singletons",new Map);s(this,"scopedInstances",new Map);s(this,"parent");s(this,"resolutionStack",[]);this.serviceDescriptors=e,this.parent=t;}getService(e){try{return this.getRequiredService(e)}catch{return}}getRequiredService(e){let t=this.resolutionStack.length===0;if(this.resolutionStack.includes(e)){let r=[...this.resolutionStack,e].map(a=>String(a)).join(" \u2192 ");throw new Error(`Circular dependency detected: ${r}`)}this.resolutionStack.push(e);try{let r=this.serviceDescriptors.find(a=>a.serviceIdentifier===e);if(!r){if(this.parent)return this.parent.getRequiredService(e);throw new Error(`Service '${String(e)}' not registered`)}return this.resolveService(r)}catch(r){throw this.resolutionStack.pop(),r}finally{this.resolutionStack[this.resolutionStack.length-1]===e&&this.resolutionStack.pop(),t&&(this.resolutionStack=[]);}}resolveService(e){switch(e.lifetime){case n.Singleton:return this.resolveSingleton(e);case n.Scoped:return this.resolveScoped(e);case n.Transient:return this.resolveTransient(e);default:throw new Error(`Unknown lifetime: ${e.lifetime}`)}}resolveSingleton(e){let{serviceIdentifier:t}=e;if(this.singletons.has(t))return this.singletons.get(t);let r=this.createInstance(e);return this.singletons.set(t,r),r}resolveScoped(e){let{serviceIdentifier:t}=e;if(!this.parent)throw new Error(`Cannot resolve scoped service '${String(t)}' from root provider. Use createScope() first.`);if(this.scopedInstances.has(t))return this.scopedInstances.get(t);let r=this.createInstance(e);return this.scopedInstances.set(t,r),r}resolveTransient(e){return this.createInstance(e)}createInstance(e){if(e.implementationInstance!==void 0)return e.implementationInstance;if(e.implementationFactory)return e.implementationFactory(this);if(e.implementationType)return this.constructInstance(e);throw new Error(`Cannot create instance for service '${String(e.serviceIdentifier)}'`)}constructInstance(e){let{implementationType:t,dependencies:r}=e;if(!t)throw new Error("Implementation type is required");if(r&&r.length>0){let h=r.map(v=>this.getRequiredService(v));return new t(...h)}let c=(Reflect.getMetadata("design:paramtypes",t)||[]).map((h,v)=>{let q=Reflect.getMetadata("inject:params",t)?.[v];if(q)return this.getRequiredService(q);let N=h.name||h;return this.getRequiredService(N)});return new t(...c)}createScope(){let e=new g(this.serviceDescriptors,this);return {serviceProvider:e,dispose:i(()=>{e.scopedInstances.clear();},"dispose")}}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)||(this.parent?.has(e)??false)}};i(g,"ServiceProvider");var u=g;var S=class S{constructor(){s(this,"serviceDescriptors",[]);}addSingleton(e,t){return typeof t=="function"?this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Singleton}):this.serviceDescriptors.push({serviceIdentifier:e,implementationInstance:t,lifetime:n.Singleton}),this}addScoped(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Scoped}),this}addTransient(e,t){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Transient}),this}addFactory(e,t,r=n.Transient){return this.serviceDescriptors.push({serviceIdentifier:e,implementationFactory:t,lifetime:r}),this}addScopedWithDependencies(e,t,r){return this.serviceDescriptors.push({serviceIdentifier:e,implementationType:t,lifetime:n.Scoped,dependencies:r}),this}buildServiceProvider(){return new u([...this.serviceDescriptors])}getDescriptors(){return [...this.serviceDescriptors]}has(e){return this.serviceDescriptors.some(t=>t.serviceIdentifier===e)}get count(){return this.serviceDescriptors.length}};i(S,"ServiceCollection");var d=S;function B(o){return (e,t,r)=>{let c={...Reflect.getOwnMetadata("inject:params",e)||{}};c[r]=o,Reflect.defineMetadata("inject:params",c,e);}}i(B,"Inject");var w=class w{constructor(e){s(this,"request");s(this,"response");s(this,"metadata",new Map);this.request=e;}setMetadata(e,t){this.metadata.set(e,t);}getMetadata(e){return this.metadata.get(e)}};i(w,"PipelineContext");var l=w;var x=class x{constructor(e){s(this,"serviceProvider");s(this,"behaviors",[]);this.serviceProvider=e;let t=this.serviceProvider.getService("PipelineBehaviors");t&&(this.behaviors=t);}async send(e){let t=this.serviceProvider.getService(e.type);if(!t)throw new Error(`No handler registered for request type: ${String(e.type)}`);let r=new l(e);return this.behaviors.length===0?await t.handle(e):await this.executePipeline(r,t,this.behaviors)}async executePipeline(e,t,r){let a=0,c=i(async()=>{if(a<r.length)return await r[a++].handle(e,c);let h=await t.handle(e.request);return e.response=h,h},"next");return await c()}};i(x,"Mediator");var m=x;var D=class D{handle(e){return this.handleSimple(e)}};i(D,"SimpleHandler");var y=D,P=class P{handle(e){return this.handleStream(e)}};i(P,"StreamingHandler");var I=P;var E=class E{constructor(e){s(this,"type");this.type=e;}};i(E,"BaseCommunicationObject");var p=E;var R=class R extends p{constructor(t){super(t);s(this,"uuid");s(this,"timestamp");this.uuid=v4(),this.timestamp=new Date;}};i(R,"BaseRequest");var T=R;var k=class k extends p{constructor(t,r){super(t);s(this,"success");s(this,"errors");s(this,"timestamp");s(this,"requestUuid");this.timestamp=new Date,this.success=true,this.requestUuid=r;}setErrors(t){return this.success=false,this.errors=t,this}addError(t){return this.errors||(this.errors=[]),this.errors.push(t),this.success=false,this}};i(k,"BaseResponse");var b=k;var j=class j{constructor(e,t,r){s(this,"serviceProvider");s(this,"mediator");s(this,"isRunning",false);s(this,"adapters");this.serviceProvider=e,this.mediator=t,this.adapters=r;}async run(){if(this.isRunning)throw new Error("Application is already running");for(let e of this.adapters)e.initialize&&await e.initialize();this.isRunning=true;}async stop(){if(this.isRunning){for(let e of [...this.adapters].reverse())e.dispose&&await e.dispose();this.isRunning=false;}}async send(e){if(!this.isRunning)throw new Error("Application must be running before sending requests. Call app.run() first.");return this.mediator.send(e)}getServiceProvider(){return this.serviceProvider}getMediator(){return this.mediator}get running(){return this.isRunning}};i(j,"Application");var f=j;var L="PipelineBehaviors",C=class C{constructor(){s(this,"services");s(this,"adapters",[]);s(this,"pipelineBehaviors",[]);this.services=new d;}registerHandler(e,t,r=n.Transient){if(typeof t=="function")switch(r){case n.Singleton:this.services.addSingleton(e,t);break;case n.Scoped:this.services.addScoped(e,t);break;case n.Transient:default:this.services.addTransient(e,t);break}else this.services.addSingleton(e,t);return this}registerHandlers(e){return e.forEach((t,r)=>{this.registerHandler(r,t);}),this}registerBehavior(e){return this.pipelineBehaviors.push(e),this}registerSingleton(e,t){return this.services.addSingleton(e,t),this}registerScoped(e,t){return this.services.addScoped(e,t),this}registerTransient(e,t){return this.services.addTransient(e,t),this}registerFactory(e,t,r=n.Transient){return this.services.addFactory(e,t,r),this}use(e){return this.adapters.push(e),this}getServiceCollection(){return this.services}async build(){for(let r of this.adapters)await r.configure(this.services);this.pipelineBehaviors.length>0&&this.services.addSingleton(L,this.pipelineBehaviors.map(r=>typeof r=="function"?new r:r));let e=this.services.buildServiceProvider(),t=new m(e);return new f(e,t,this.adapters)}};i(C,"ApplicationBuilder");var M=C;export{f as Application,M as ApplicationBuilder,p as BaseCommunicationObject,T as BaseRequest,b as BaseResponse,B as Inject,m as Mediator,l as PipelineContext,d as ServiceCollection,n as ServiceLifetime,u as ServiceProvider,y as SimpleHandler,I as StreamingHandler};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { a as BaseRequest, b as BaseResponse, I as IRequestHandler } from '../IRequestHandler-CjLrozYA.mjs';
|
|
2
|
+
export { H as HandlerResult } from '../IRequestHandler-CjLrozYA.mjs';
|
|
3
|
+
export { M as Mediator } from '../Mediator-CF-4m1QF.mjs';
|
|
4
|
+
import '../ServiceProvider-BcW9XXlN.mjs';
|
|
5
|
+
|
|
6
|
+
declare abstract class SimpleHandler<TRequest extends BaseRequest, TResponse extends BaseResponse> implements IRequestHandler<TRequest, TResponse> {
|
|
7
|
+
protected abstract handleSimple(request: TRequest): Promise<TResponse>;
|
|
8
|
+
handle(request: TRequest): Promise<TResponse>;
|
|
9
|
+
}
|
|
10
|
+
declare abstract class StreamingHandler<TRequest extends BaseRequest, TResponse extends BaseResponse> implements IRequestHandler<TRequest, TResponse> {
|
|
11
|
+
protected abstract handleStream(request: TRequest): Promise<AsyncIterable<TResponse>>;
|
|
12
|
+
handle(request: TRequest): Promise<AsyncIterable<TResponse>>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { IRequestHandler, SimpleHandler, StreamingHandler };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { a as BaseRequest, b as BaseResponse, I as IRequestHandler } from '../IRequestHandler-CjLrozYA.js';
|
|
2
|
+
export { H as HandlerResult } from '../IRequestHandler-CjLrozYA.js';
|
|
3
|
+
export { M as Mediator } from '../Mediator-DkYg4E8y.js';
|
|
4
|
+
import '../ServiceProvider-BcW9XXlN.js';
|
|
5
|
+
|
|
6
|
+
declare abstract class SimpleHandler<TRequest extends BaseRequest, TResponse extends BaseResponse> implements IRequestHandler<TRequest, TResponse> {
|
|
7
|
+
protected abstract handleSimple(request: TRequest): Promise<TResponse>;
|
|
8
|
+
handle(request: TRequest): Promise<TResponse>;
|
|
9
|
+
}
|
|
10
|
+
declare abstract class StreamingHandler<TRequest extends BaseRequest, TResponse extends BaseResponse> implements IRequestHandler<TRequest, TResponse> {
|
|
11
|
+
protected abstract handleStream(request: TRequest): Promise<AsyncIterable<TResponse>>;
|
|
12
|
+
handle(request: TRequest): Promise<AsyncIterable<TResponse>>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { IRequestHandler, SimpleHandler, StreamingHandler };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';/* conduit - MIT License */
|
|
2
|
+
var g=Object.defineProperty;var x=(s,e,t)=>e in s?g(s,e,{enumerable:true,configurable:true,writable:true,value:t}):s[e]=t;var r=(s,e)=>g(s,"name",{value:e,configurable:true});var a=(s,e,t)=>x(s,typeof e!="symbol"?e+"":e,t);var o=class o{constructor(e){a(this,"request");a(this,"response");a(this,"metadata",new Map);this.request=e;}setMetadata(e,t){this.metadata.set(e,t);}getMetadata(e){return this.metadata.get(e)}};r(o,"PipelineContext");var n=o;var c=class c{constructor(e){a(this,"serviceProvider");a(this,"behaviors",[]);this.serviceProvider=e;let t=this.serviceProvider.getService("PipelineBehaviors");t&&(this.behaviors=t);}async send(e){let t=this.serviceProvider.getService(e.type);if(!t)throw new Error(`No handler registered for request type: ${String(e.type)}`);let i=new n(e);return this.behaviors.length===0?await t.handle(e):await this.executePipeline(i,t,this.behaviors)}async executePipeline(e,t,i){let u=0,w=r(async()=>{if(u<i.length)return await i[u++].handle(e,w);let f=await t.handle(e.request);return e.response=f,f},"next");return await w()}};r(c,"Mediator");var h=c;var v=class v{handle(e){return this.handleSimple(e)}};r(v,"SimpleHandler");var d=v,p=class p{handle(e){return this.handleStream(e)}};r(p,"StreamingHandler");var l=p;exports.Mediator=h;exports.SimpleHandler=d;exports.StreamingHandler=l;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* conduit - MIT License */
|
|
2
|
+
var g=Object.defineProperty;var x=(s,e,t)=>e in s?g(s,e,{enumerable:true,configurable:true,writable:true,value:t}):s[e]=t;var r=(s,e)=>g(s,"name",{value:e,configurable:true});var a=(s,e,t)=>x(s,typeof e!="symbol"?e+"":e,t);var o=class o{constructor(e){a(this,"request");a(this,"response");a(this,"metadata",new Map);this.request=e;}setMetadata(e,t){this.metadata.set(e,t);}getMetadata(e){return this.metadata.get(e)}};r(o,"PipelineContext");var n=o;var c=class c{constructor(e){a(this,"serviceProvider");a(this,"behaviors",[]);this.serviceProvider=e;let t=this.serviceProvider.getService("PipelineBehaviors");t&&(this.behaviors=t);}async send(e){let t=this.serviceProvider.getService(e.type);if(!t)throw new Error(`No handler registered for request type: ${String(e.type)}`);let i=new n(e);return this.behaviors.length===0?await t.handle(e):await this.executePipeline(i,t,this.behaviors)}async executePipeline(e,t,i){let u=0,w=r(async()=>{if(u<i.length)return await i[u++].handle(e,w);let f=await t.handle(e.request);return e.response=f,f},"next");return await w()}};r(c,"Mediator");var h=c;var v=class v{handle(e){return this.handleSimple(e)}};r(v,"SimpleHandler");var d=v,p=class p{handle(e){return this.handleStream(e)}};r(p,"StreamingHandler");var l=p;export{h as Mediator,d as SimpleHandler,l as StreamingHandler};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { a as BaseRequest, b as BaseResponse, H as HandlerResult } from '../IRequestHandler-CjLrozYA.mjs';
|
|
2
|
+
|
|
3
|
+
declare class PipelineContext<TRequest extends BaseRequest, TResponse extends BaseResponse> {
|
|
4
|
+
readonly request: TRequest;
|
|
5
|
+
response?: AsyncIterable<TResponse> | TResponse;
|
|
6
|
+
metadata: Map<string, any>;
|
|
7
|
+
constructor(request: TRequest);
|
|
8
|
+
setMetadata(key: string, value: any): void;
|
|
9
|
+
getMetadata<T>(key: string): T | undefined;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type PipelineDelegate<TResponse> = () => HandlerResult<TResponse>;
|
|
13
|
+
interface IPipelineBehavior<TRequest extends BaseRequest, TResponse extends BaseResponse> {
|
|
14
|
+
handle(context: PipelineContext<TRequest, TResponse>, next: PipelineDelegate<TResponse>): HandlerResult<TResponse>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { type IPipelineBehavior, PipelineContext, type PipelineDelegate };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { a as BaseRequest, b as BaseResponse, H as HandlerResult } from '../IRequestHandler-CjLrozYA.js';
|
|
2
|
+
|
|
3
|
+
declare class PipelineContext<TRequest extends BaseRequest, TResponse extends BaseResponse> {
|
|
4
|
+
readonly request: TRequest;
|
|
5
|
+
response?: AsyncIterable<TResponse> | TResponse;
|
|
6
|
+
metadata: Map<string, any>;
|
|
7
|
+
constructor(request: TRequest);
|
|
8
|
+
setMetadata(key: string, value: any): void;
|
|
9
|
+
getMetadata<T>(key: string): T | undefined;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type PipelineDelegate<TResponse> = () => HandlerResult<TResponse>;
|
|
13
|
+
interface IPipelineBehavior<TRequest extends BaseRequest, TResponse extends BaseResponse> {
|
|
14
|
+
handle(context: PipelineContext<TRequest, TResponse>, next: PipelineDelegate<TResponse>): HandlerResult<TResponse>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { type IPipelineBehavior, PipelineContext, type PipelineDelegate };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';/* conduit - MIT License */
|
|
2
|
+
var o=Object.defineProperty;var u=(a,t,e)=>t in a?o(a,t,{enumerable:true,configurable:true,writable:true,value:e}):a[t]=e;var m=(a,t)=>o(a,"name",{value:t,configurable:true});var s=(a,t,e)=>u(a,typeof t!="symbol"?t+"":t,e);var d=class d{constructor(t){s(this,"request");s(this,"response");s(this,"metadata",new Map);this.request=t;}setMetadata(t,e){this.metadata.set(t,e);}getMetadata(t){return this.metadata.get(t)}};m(d,"PipelineContext");var r=d;exports.PipelineContext=r;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* conduit - MIT License */
|
|
2
|
+
var o=Object.defineProperty;var u=(a,t,e)=>t in a?o(a,t,{enumerable:true,configurable:true,writable:true,value:e}):a[t]=e;var m=(a,t)=>o(a,"name",{value:t,configurable:true});var s=(a,t,e)=>u(a,typeof t!="symbol"?t+"":t,e);var d=class d{constructor(t){s(this,"request");s(this,"response");s(this,"metadata",new Map);this.request=t;}setMetadata(t,e){this.metadata.set(t,e);}getMetadata(t){return this.metadata.get(t)}};m(d,"PipelineContext");var r=d;export{r as PipelineContext};
|
package/package.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@oldzy/conduit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Transport-agnostic request/response pipeline framework with mediator pattern, dependency injection, and middleware support",
|
|
5
|
+
"author": "oldzy",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/oldzy/conduit.git"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"require": "./dist/index.js",
|
|
17
|
+
"import": "./dist/index.mjs"
|
|
18
|
+
},
|
|
19
|
+
"./di": {
|
|
20
|
+
"types": "./dist/di/index.d.ts",
|
|
21
|
+
"require": "./dist/di/index.js",
|
|
22
|
+
"import": "./dist/di/index.mjs"
|
|
23
|
+
},
|
|
24
|
+
"./mediator": {
|
|
25
|
+
"types": "./dist/mediator/index.d.ts",
|
|
26
|
+
"require": "./dist/mediator/index.js",
|
|
27
|
+
"import": "./dist/mediator/index.mjs"
|
|
28
|
+
},
|
|
29
|
+
"./pipeline": {
|
|
30
|
+
"types": "./dist/pipeline/index.d.ts",
|
|
31
|
+
"require": "./dist/pipeline/index.js",
|
|
32
|
+
"import": "./dist/pipeline/index.mjs"
|
|
33
|
+
},
|
|
34
|
+
"./application": {
|
|
35
|
+
"types": "./dist/application/index.d.ts",
|
|
36
|
+
"require": "./dist/application/index.js",
|
|
37
|
+
"import": "./dist/application/index.mjs"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"README.md",
|
|
43
|
+
"LICENSE"
|
|
44
|
+
],
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsup",
|
|
47
|
+
"build:prod": "cross-env NODE_ENV=production tsup",
|
|
48
|
+
"dev": "tsup --watch",
|
|
49
|
+
"test": "vitest",
|
|
50
|
+
"test:ui": "vitest --ui",
|
|
51
|
+
"test:coverage": "vitest --coverage",
|
|
52
|
+
"test:watch": "vitest --watch",
|
|
53
|
+
"lint": "eslint src",
|
|
54
|
+
"prepublishOnly": "npm run build:prod && npm test"
|
|
55
|
+
},
|
|
56
|
+
"keywords": [
|
|
57
|
+
"mediator",
|
|
58
|
+
"pipeline",
|
|
59
|
+
"middleware",
|
|
60
|
+
"dependency-injection",
|
|
61
|
+
"request-response",
|
|
62
|
+
"cqrs",
|
|
63
|
+
"handler",
|
|
64
|
+
"transport-agnostic"
|
|
65
|
+
],
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@swc/core": "^1.15.2",
|
|
68
|
+
"@types/node": "^24.10.1",
|
|
69
|
+
"@vitest/coverage-v8": "^4.0.9",
|
|
70
|
+
"@vitest/ui": "^4.0.9",
|
|
71
|
+
"cross-env": "^10.1.0",
|
|
72
|
+
"eslint": "^9.39.1",
|
|
73
|
+
"tsup": "^8.5.1",
|
|
74
|
+
"typescript": "^5.9.3",
|
|
75
|
+
"unplugin-swc": "^1.5.8",
|
|
76
|
+
"vitest": "^4.0.9"
|
|
77
|
+
},
|
|
78
|
+
"dependencies": {
|
|
79
|
+
"reflect-metadata": "^0.2.2",
|
|
80
|
+
"uuid": "^13.0.0"
|
|
81
|
+
},
|
|
82
|
+
"engines": {
|
|
83
|
+
"node": ">=18.0.0"
|
|
84
|
+
}
|
|
85
|
+
}
|