assemblerjs 0.6.0 → 0.7.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/README.md +1 -1
- package/dist/index.d.ts +27 -8
- package/dist/index.js +1 -1
- package/dist/index.mjs +104 -53
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A general purpose and zero-dependency [Dependency Injection](https://en.wikipedia.org/wiki/Dependency_injection) library for node and browser.
|
|
4
4
|
|
|
5
|
-
   
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
package/dist/index.d.ts
CHANGED
|
@@ -103,7 +103,7 @@ declare type ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'un
|
|
|
103
103
|
* @param { AssemblageDefinition } definition Definition of the assemblage that provides injections, etc.
|
|
104
104
|
* @returns { ClassDecorator } The decorated class.
|
|
105
105
|
*/
|
|
106
|
-
export declare const Assemblage: (definition?: AssemblageDefinition) =>
|
|
106
|
+
export declare const Assemblage: <T>(definition?: AssemblageDefinition) => (target: Concrete<T>) => Concrete<T>;
|
|
107
107
|
|
|
108
108
|
declare interface AssemblageDefinition {
|
|
109
109
|
singleton?: false;
|
|
@@ -114,6 +114,8 @@ declare interface AssemblageDefinition {
|
|
|
114
114
|
metadata?: Record<string, any>;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
export declare const AssemblageWrappedDecorator: (fn?: () => void) => <T extends new (...args: any[]) => {}>(Base: T) => Concrete< {}>;
|
|
118
|
+
|
|
117
119
|
/**
|
|
118
120
|
* `assembler.js` dependency injection container and handler.
|
|
119
121
|
*/
|
|
@@ -323,8 +325,23 @@ export declare class Assembler extends EventManager implements AbstractAssembler
|
|
|
323
325
|
*/
|
|
324
326
|
export declare const Context: () => ParameterDecorator;
|
|
325
327
|
|
|
328
|
+
/**
|
|
329
|
+
* Create a custom decorator to wrap `Assemblage`.
|
|
330
|
+
* Note that it must be placed before the `Assemnblage` decorator.
|
|
331
|
+
*
|
|
332
|
+
* @param { function(): void | undefined } fn A function to execute after `super`.
|
|
333
|
+
* Do not use arrow function here if access to `this` is required.
|
|
334
|
+
* @returns A new decorator.
|
|
335
|
+
*/
|
|
336
|
+
export declare const createWrappedDecorator: (fn?: () => void) => () => <T extends new (...args: any[]) => {}>(Base: T) => Concrete< {}>;
|
|
337
|
+
|
|
326
338
|
export declare const decorateAssemblage: <T>(target: Concrete<T>, definition?: AssemblageDefinition) => Concrete<T>;
|
|
327
339
|
|
|
340
|
+
/**
|
|
341
|
+
* Decorator as a wrapper function.
|
|
342
|
+
*/
|
|
343
|
+
export declare const decorateUse: (identifier: string | Symbol, target: any, index: number) => void;
|
|
344
|
+
|
|
328
345
|
/**
|
|
329
346
|
* Injects the assemblage's definition object.
|
|
330
347
|
*/
|
|
@@ -351,13 +368,7 @@ export declare class Assembler extends EventManager implements AbstractAssembler
|
|
|
351
368
|
private cleanChannel;
|
|
352
369
|
}
|
|
353
370
|
|
|
354
|
-
export declare const getDecoratedParametersIndexes: <T>(target: Concrete<T>) =>
|
|
355
|
-
context: number[];
|
|
356
|
-
definition: number[];
|
|
357
|
-
configuration: number[];
|
|
358
|
-
dispose: number[];
|
|
359
|
-
use: number[];
|
|
360
|
-
};
|
|
371
|
+
export declare const getDecoratedParametersIndexes: <T>(target: Concrete<T>) => ParametersDecoratorsIndexes;
|
|
361
372
|
|
|
362
373
|
/**
|
|
363
374
|
* An identifier can be an abstract or a concrete class.
|
|
@@ -442,6 +453,14 @@ export declare class Assembler extends EventManager implements AbstractAssembler
|
|
|
442
453
|
*/
|
|
443
454
|
declare type Listener = (...args: any[]) => void | Promise<void>;
|
|
444
455
|
|
|
456
|
+
declare interface ParametersDecoratorsIndexes {
|
|
457
|
+
Context: number[];
|
|
458
|
+
Definition: number[];
|
|
459
|
+
Configuration: number[];
|
|
460
|
+
Dispose: number[];
|
|
461
|
+
Use: number[];
|
|
462
|
+
}
|
|
463
|
+
|
|
445
464
|
/**
|
|
446
465
|
* Internal `Reflect` parameters decorators' indexes in constructor.
|
|
447
466
|
*/
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e=function(e){return e.IsAssemblage="is_assemblage",e}({}),t=function(e){return e.AssemblageDefinition="assemblage:definition.value",e}({});const n=(...e)=>{},s=(...e)=>t=>{if(e.includes(typeof t))return typeof t},i=e=>!(e=>void 0===e)(e)&&!(e=>null===e)(e),r=e=>e&&"function"==typeof e&&void 0!==e.constructor,o=e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,c=(e,...t)=>{t.map(((e,n)=>{const s=/\S/.test(e);return s&&(t[n]=t[n].trim()),s?-1:n})).filter((e=>e>=0)).every((e=>{t[e]=" ",((e,t,n)=>{const s=e[t];e.splice(t,1),e.splice(n,0,s)})(t,e,t.length-1)})),t=(e=>Array.from(new Set(e)))(t);const n=new RegExp(`[^A-Za-zÀ-ÖØ-öø-ÿ0-9${t.join("")}]`,"gi");return e.replace(n,"")},a=(...e)=>t=>e.reduce(((e,t)=>t(e)),t),h=e=>t=>e.if(t)?e.then(t):e.else?e.else(t):void 0,l=e=>t=>{const s=Array.isArray(e)?e=>parseInt(e):n;for(const[n,i]of Object.entries(e))t(i,s(n))},u=(e,t)=>{const n=new Proxy(e,{get:function(n,s){return s===Symbol.iterator?n[Symbol.iterator].bind(n):((e,t)=>[...Object.getOwnPropertyNames(t.prototype),...Object.getOwnPropertyNames(Object.getPrototypeOf(e)),...Object.getOwnPropertyNames(e)])(e,t).includes(s)?n[s]:n.collection[s]},set:function(e,t,n){return Reflect.set(e,t,n)}});return n},f=(e,t)=>{const n=e;for(const s of((e,t)=>[...Object.getOwnPropertyNames(t.prototype),...Object.getOwnPropertyNames(Object.getPrototypeOf(e)),...Object.getOwnPropertyNames(e)])(e,t))delete n[s]},d=(e,t,n)=>{Reflect.defineMetadata(`__${e}__`,t,n)},p=(e,t)=>Reflect.getOwnMetadata(`__${e}__`,t),g=e=>Reflect.getMetadata("design:paramtypes",e)||[],b=t=>p(e.IsAssemblage,t)||!1,m={singleton:{test:e=>"boolean"==typeof e||void 0===e,throw:()=>{throw new Error("'singleton' property must be of type 'boolean' or 'undefined'.")},transform:e=>void 0===e||!!e},events:{test:e=>void 0===e||Array.isArray(e)&&e.every((e=>"string"==typeof e)),throw:()=>{throw new Error("'events' property must be an array of strings or 'undefined'.")},transform:e=>e},inject:{test:e=>void 0===e||Array.isArray(e)&&e.every((e=>Array.isArray(e)&&e.length>=1&&e.length<=3)),throw:()=>{throw new Error("'inject' property must be an array of tuples of length 1, 2 or 3.")},transform:e=>e},use:{test:e=>void 0===e||Array.isArray(e)&&e.every((e=>Array.isArray(e)&&2==e.length)),throw:()=>{throw new Error("'use' property must be an array of tuples of length 2.")},transform:e=>e},tags:{test:e=>void 0===e||"string"==typeof e||Array.isArray(e)&&e.every((e=>"string"==typeof e)),throw:()=>{throw new Error("'tags' property must be a string or an array of strings.")},transform:e=>"string"==typeof e?[e]:e},metadata:{test:e=>("object"==typeof e||void 0===e)&&!Array.isArray(e),throw:()=>{throw new Error("'metadata' property must be of type 'object' or 'undefined'.")},transform:e=>e}},y=e=>{const t={...e};for(const n in t)if(!Object.keys(m).includes(n))throw new Error(`Property '${n}' is not a valid assemblage definition property.`);for(const n in m){const e=m[n].test,s=m[n].throw,i=m[n].transform;e(t[n])||s(),t[n]=i(t[n])}return t},v=e=>{if(!b(e))throw new Error(`Class '${e.name}' is not an assemblage.`);return p(t.AssemblageDefinition,e)},w=(e,t)=>v(t)[e],x=e=>{const t=()=>r(e[0])&&(e=>"object"==typeof e&&!Array.isArray(e)&&!r(e))(e[1]);return a(h({if:()=>r(e[0])&&r(e[1]),then:()=>({identifier:e[0],concrete:e[1],configuration:{}})}),h({if:()=>t(),then:()=>({identifier:e[0],concrete:e[0],configuration:e[1]}),else:e=>e}))()};let C=Symbol.iterator;class j{dispose(){f(this,j)}add(...e){const t=e=>this.collection[e.channel].push(e.listener),n=h({if:()=>2===e.length,then:()=>({channel:e[0],listener:e[1]}),else:()=>{const t=e[0];return{channel:t[0],listener:t[1]}}}),s=h({if:e=>!i(this.collection[e.channel]),then:e=>{this.collection[e.channel]=[],t(e)},else:e=>{t(e)}});return a(n,s)(),this}remove(e,t){const n=t=>this.collection[e].splice(t,1),s=h({if:()=>this.collection[e]&&0===this.collection[e].length,then:()=>delete this.collection[e]}),r=h({if:()=>i(t),then:()=>n(this.collection[e].indexOf(t)),else:()=>delete this.collection[e]}),o=h({if:e=>this.has(e),then:e=>this.collection[e]});return a(o,r,s)(),this}has(...e){return s("string")(e[0])?Object.keys(this.collection).includes(e[0]):!!s("function")(e[0])&&Object.values(this.collection).flat().includes(e[0])}get(...e){return s("string")(e[0])?this.collection[e[0]]:s("function")(e[0])?Object.values(this.collection).flat().filter((t=>t===e[0])):[]}clear(){const e=(e=>t=>{const n=Array.isArray(e)?e=>parseInt(e):e=>e;for(const s in e)t(n(s))})(this.collection),t=e=>l(this.collection[e])((t=>this.remove(e,t)));return e((e=>t(e))),this}get listeners(){return Object.values(this.collection).flat()}get channels(){return Object.keys(this.collection)}get length(){return Object.values(this.collection).flat().length}[C](){let e=-1;const t=this.collection?Object.keys(this.collection):[];return{next:()=>({value:t[++e],done:!(e in t)})}}constructor(){!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"collection",{});return u(this,j)}}class A{}function I(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class O{dispose(){this.listeners.dispose(),this.channels.clear(),f(this,O)}addChannels(...e){return l(e)((e=>{const t=this.cleanChannel(e);if(this.channels.has(t))throw new Error(`Channel '${t}' already exists.`);this.channels.add(t)})),this}removeChannels(...e){return l(e)((e=>{const t=this.cleanChannel(e);"*"!==t&&this.channels.has(t)&&(this.channels.delete(t),this.listeners.remove(t),this.onceListeners.remove(t))})),this}on(e,t){const n=this.cleanChannel(e);if(!this.channels.has(n))throw new Error(`Channel '${n}' was not registered.`);return this.listeners.add(n,t),this}once(e,t){const n=this.cleanChannel(e);if(!this.channels.has(n))throw new Error(`Channel '${n}' was not registered.`);return this.onceListeners.add(n,t),this}off(e,t){const n=this.cleanChannel(e);return this.listeners.remove(n,t),this}emit(e,...t){const n=this.cleanChannel(e);if(this.channels.has(n)){const e=this.onceListeners.get("*")||[],s=this.listeners.get("*")||[],i=this.onceListeners.get(n)||[],r=this.listeners.get(n)||[],o=l(e),c=l(s),a=l(i),h=l(r);o((e=>{this.run(e,...t),this.onceListeners.remove("*",e)})),c((e=>{this.run(e,...t)})),a((e=>{this.run(e,...t),this.onceListeners.remove(n,e)})),h((e=>{this.run(e,...t)}))}return this}run(e,...t){if(o(e)){return e(...t).then((()=>Promise.resolve()))}e(...t)}cleanChannel(e){return c(e,"*")}constructor(...e){I(this,"listeners",new j),I(this,"onceListeners",new j),I(this,"channels",new Set(["*"])),this.addChannels(...e)}}var E=function(e){return e.UseIdentifier="assemblage:use.param.value",e}({}),P=function(e){return e.Context="assembler:context.param.index",e.Dispose="assembler:dispose.param.index",e.Definition="assemblage:definition.param.index",e.Configuration="assemblage:configuration.param.index",e.Use="assemblage:use.param.index",e}({});const D=e=>()=>(t,n,s)=>{const i=p(e,t)||[];i.push(s),d(e,i,t)},S=D(P.Context),$=D(P.Configuration),R=D(P.Definition),U=D(P.Dispose),_=e=>{const t=(e=>p(P.Context,e)||[])(e),n=(e=>p(P.Definition,e)||[])(e),s=(e=>p(P.Configuration,e)||[])(e),i=(e=>p(P.Dispose,e)||[])(e),r=(e=>p(P.Use,e)||[])(e);return{context:t,definition:n,configuration:s,dispose:i,use:r}};function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class M{static of(e,t,n){return new M(e,t,n)}dispose(){this.singletonInstance&&(((e,t)=>{if(e.concrete.prototype instanceof O){const n=t;for(const t of e.events)n.off(t);n.removeChannels(...e.events),e.privateContext.removeChannels(...e.events)}})(this,this.singletonInstance),L(this.singletonInstance,"onDispose",this.publicContext,this.configuration),f(this.singletonInstance,this.concrete)),f(this,M)}build(){if(this.singletonInstance)return this.singletonInstance;const e=(e=>{const t=[],n=g(e.concrete),s=_(e.concrete);let i=0;for(const r of n)if(s.context.includes(i))t.push(e.publicContext),i++;else if(s.configuration.includes(i))t.push(e.configuration),i++;else if(s.definition.includes(i))t.push(e.definition),i++;else if(s.dispose.includes(i))t.push(e.privateContext.dispose),i++;else if(s.use.includes(i)){const n=p(E.UseIdentifier,e.concrete)[i];t.push(e.privateContext.require(n)),i++}else t.push(e.privateContext.require(r)),i++;return t})(this),t=new this.concrete(...e);return((e,t)=>{if(e.concrete.prototype instanceof O){const n=t,s=n.channels;for(const t of e.events)s.has(t)||n.addChannels(t),e.privateContext.events.has(t)||e.privateContext.addChannels(t);for(const i of e.events)t.on(i,((...t)=>{e.privateContext.emit(i,...t)}))}})(this,t),this.isSingleton?(this.singletonInstance=t,this.privateContext.prepareInitHook(t,this.configuration),this.singletonInstance):(L(t,"onInit",this.publicContext),t)}get dependencies(){return this.dependenciesIds}get definition(){return v(this.concrete)||{}}get isSingleton(){return w("singleton",this.concrete)}get singleton(){return this.singletonInstance}get injections(){return w("inject",this.concrete)||[]}get objects(){return w("use",this.concrete)||[]}get tags(){return w("tags",this.concrete)||[]}get events(){return w("events",this.concrete)||[]}constructor(e,t,n){if(k(this,"privateContext",void 0),k(this,"publicContext",void 0),k(this,"identifier",void 0),k(this,"concrete",void 0),k(this,"configuration",void 0),k(this,"dependenciesIds",void 0),k(this,"singletonInstance",void 0),this.privateContext=t,this.publicContext=n,this.dependenciesIds=[],this.identifier=e.identifier,this.concrete=e.concrete,this.configuration=e.configuration,!b(this.concrete))throw new Error(`Class '${this.concrete.name}' is not an Assemblage.`);const s=l(this.injections),i=l(this.objects);s((e=>this.privateContext.register(e))),i((e=>{"string"==typeof e[0]||"symbol"==typeof e[0]?this.privateContext.use(e[0],e[1]):this.privateContext.register(e,!0)})),this.dependenciesIds=(e=>{const t=[],n=g(e),s=_(e);let i=0;for(const r of n)s.context.includes(i)||s.configuration.includes(i)||s.definition.includes(i)||s.dispose.includes(i)||s.use.includes(i)||t.push(r),i++;return t})(this.concrete),e.instance?this.singletonInstance=e.instance:this.isSingleton}}const L=(e,t,n,s)=>new Promise((i=>{const r=e[t];if(r){if(o(r))return void r.bind(e)(n,s).then((()=>{i()}));i(r.bind(e)(n,s))}}));function q(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class N extends O{static build(e){const n=new N;((e,n,s)=>{const i=v(s);i[e]=n;const r=y(i);d(t.AssemblageDefinition,r,s)})("singleton",!0,e);const s=n.register([e]),i=n.require(s.identifier),r=n.initCache.find((e=>e.instance===i));if(!r)throw new Error("Root instance not found in assemblages cache.");const o=n.initCache.indexOf(r);n.initCache.splice(o,1);for(const t of n.initCache)L(t.instance,"onInit",n.publicContext,t.configuration);return L(i,"onInit",n.publicContext,s.configuration),n.initCache.length=0,i}dispose(){for(const[e,t]of this.injectables)t.dispose();f(this,N)}register(e,t=!1){const n=!0===t?(e=>({identifier:e[0],concrete:e[0],instance:e[1],configuration:{}}))(e):(e=>((e,t)=>(n,...s)=>e[n]?e[n](...s):t?t(n,...s):void 0)({1:()=>(e=>({identifier:e[0],concrete:e[0],configuration:{}}))(e),2:()=>x(e),3:()=>(e=>({identifier:e[0],concrete:e[1],configuration:e[2]}))(e)},(()=>{throw new Error("Injection tuple must be of length 1, 2 or 3.")}))(e.length))(e);if(this.has(n.identifier))throw new Error(`An assemblage is already registered with identifier '${n.identifier.name}'.`);const s=M.of(n,this.privateContext,this.publicContext);return this.injectables.set(s.identifier,s),L(s.concrete,"onRegister",this.publicContext,s.configuration),s}use(e,t){if(this.has(e))throw new Error(`A value is already registered with identifier '${String(e)}'.`);return this.objects.set(e,t),t}prepareInitHook(e,t){return this.initCache.push({instance:e,configuration:t}),this.initCache}has(e){return"string"==typeof e||"symbol"==typeof e?this.objects.has(e):this.injectables.has(e)}require(e){switch(typeof e){case"string":case"symbol":if(!this.objects.has(e))throw new Error(`Injected object with identifier '${String(e)}' has not been registered.`);return this.objects.get(e);default:if(!this.injectables.has(e))throw new Error(`Class with identifier '${e.name}' has not been registered or is a circular dependency.`);return this.injectables.get(e).build()}}concrete(e){const t=this.injectables.get(e);if(t)return t.concrete}tagged(...e){const t=[];for(const n of e)for(const[e,s]of this.injectables)s.tags.includes(n)&&t.push(s.build());return t}get size(){return this.injectables.size}constructor(){super(),q(this,"injectables",new Map),q(this,"objects",new Map),q(this,"initCache",[]),q(this,"privateContext",void 0),q(this,"publicContext",void 0),this.publicContext={has:this.has.bind(this),require:this.require.bind(this),concrete:this.concrete.bind(this),tagged:this.tagged.bind(this),dispose:this.dispose.bind(this),on:this.on.bind(this),once:this.once.bind(this),off:this.off.bind(this),events:this.channels},this.privateContext={...this.publicContext,register:this.register.bind(this),use:this.use.bind(this),prepareInitHook:this.prepareInitHook.bind(this),emit:this.emit.bind(this),addChannels:this.addChannels.bind(this),removeChannels:this.removeChannels.bind(this)}}}exports.AbstractAssemblage=class{static onRegister(e,t){}},exports.AbstractAssembler=class extends A{},exports.AbstractEventManager=A,exports.Assemblage=n=>{const s=y(n||{});return n=>(d(e.IsAssemblage,!0,n),d(t.AssemblageDefinition,s,n),n)},exports.Assembler=N,exports.Await=(e,t=25)=>(n,s,i)=>{const r=i.value;i.value=async function(){return new Promise((n=>{if(this[e])r.apply(this),n();else{const s=setInterval((()=>{this[e]&&(clearInterval(s),r.apply(this),n())}),t)}}))}},exports.Configuration=$,exports.Context=S,exports.Definition=R,exports.Dispose=U,exports.EventManager=O,exports.ReflectParamIndex=P,exports.ReflectParamValue=E,exports.Use=e=>(t,n,s)=>{const i=p(P.Use,t)||[];i.push(s),d(P.Use,i,t);const r=p(E.UseIdentifier,t)||{};r[s]=e,d(E.UseIdentifier,r,t)},exports.decorateAssemblage=(n,s)=>{const i=y(s||{});return d(e.IsAssemblage,!0,n),d(t.AssemblageDefinition,i,n),n},exports.getDecoratedParametersIndexes=_,exports.isAssemblage=b;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="design:paramtypes";var t=function(e){return e.IsAssemblage="is_assemblage",e}({}),n=function(e){return e.AssemblageDefinition="assemblage:definition.value",e}({});const s=(...e)=>{},i=(...e)=>t=>{if(e.includes(typeof t))return typeof t},r=e=>!(e=>void 0===e)(e)&&!(e=>null===e)(e),o=e=>e&&"function"==typeof e&&void 0!==e.constructor,c=e=>"function"==typeof e&&"AsyncFunction"===e.constructor.name,a=(e,...t)=>{t.map(((e,n)=>{const s=/\S/.test(e);return s&&(t[n]=t[n].trim()),s?-1:n})).filter((e=>e>=0)).every((e=>{t[e]=" ",((e,t,n)=>{const s=e[t];e.splice(t,1),e.splice(n,0,s)})(t,e,t.length-1)})),t=(e=>Array.from(new Set(e)))(t);const n=new RegExp(`[^A-Za-zÀ-ÖØ-öø-ÿ0-9${t.join("")}]`,"gi");return e.replace(n,"")},l=(...e)=>t=>e.reduce(((e,t)=>t(e)),t),h=e=>t=>e.if(t)?e.then(t):e.else?e.else(t):void 0,u=e=>t=>{const n=Array.isArray(e)?e=>parseInt(e):s;for(const[s,i]of Object.entries(e))t(i,n(s))},f=(e,t)=>{const n=new Proxy(e,{get:function(n,s){return s===Symbol.iterator?n[Symbol.iterator].bind(n):((e,t)=>[...Object.getOwnPropertyNames(t.prototype),...Object.getOwnPropertyNames(Object.getPrototypeOf(e)),...Object.getOwnPropertyNames(e)])(e,t).includes(s)?n[s]:n.collection[s]},set:function(e,t,n){return Reflect.set(e,t,n)}});return n},d=(e,t)=>{const n=e;for(const s of((e,t)=>[...Object.getOwnPropertyNames(t.prototype),...Object.getOwnPropertyNames(Object.getPrototypeOf(e)),...Object.getOwnPropertyNames(e)])(e,t))delete n[s]},p=(e,t,n)=>{Reflect.defineMetadata(`__${e}__`,t,n)},g=(e,t)=>Reflect.getOwnMetadata(`__${e}__`,t),b=t=>Reflect.getMetadata(e,t)||[],m=e=>g(t.IsAssemblage,e)||!1,y={singleton:{test:e=>"boolean"==typeof e||void 0===e,throw:()=>{throw new Error("'singleton' property must be of type 'boolean' or 'undefined'.")},transform:e=>void 0===e||!!e},events:{test:e=>void 0===e||Array.isArray(e)&&e.every((e=>"string"==typeof e)),throw:()=>{throw new Error("'events' property must be an array of strings or 'undefined'.")},transform:e=>e},inject:{test:e=>void 0===e||Array.isArray(e)&&e.every((e=>Array.isArray(e)&&e.length>=1&&e.length<=3)),throw:()=>{throw new Error("'inject' property must be an array of tuples of length 1, 2 or 3.")},transform:e=>e},use:{test:e=>void 0===e||Array.isArray(e)&&e.every((e=>Array.isArray(e)&&2==e.length)),throw:()=>{throw new Error("'use' property must be an array of tuples of length 2.")},transform:e=>e},tags:{test:e=>void 0===e||"string"==typeof e||Array.isArray(e)&&e.every((e=>"string"==typeof e)),throw:()=>{throw new Error("'tags' property must be a string or an array of strings.")},transform:e=>"string"==typeof e?[e]:e},metadata:{test:e=>("object"==typeof e||void 0===e)&&!Array.isArray(e),throw:()=>{throw new Error("'metadata' property must be of type 'object' or 'undefined'.")},transform:e=>e}},v=e=>{const t={...e};for(const n in t)if(!Object.keys(y).includes(n))throw new Error(`Property '${n}' is not a valid assemblage definition property.`);for(const n in y){const e=y[n].test,s=y[n].throw,i=y[n].transform;e(t[n])||s(),t[n]=i(t[n])}return t},C=e=>{if(!m(e))throw new Error(`Class '${e.name}' is not an assemblage.`);return g(n.AssemblageDefinition,e)},w=(e,t)=>C(t)[e],x=e=>{const t=()=>o(e[0])&&(e=>"object"==typeof e&&!Array.isArray(e)&&!o(e))(e[1]);return l(h({if:()=>o(e[0])&&o(e[1]),then:()=>({identifier:e[0],concrete:e[1],configuration:{}})}),h({if:()=>t(),then:()=>({identifier:e[0],concrete:e[0],configuration:e[1]}),else:e=>e}))()},j=(e,s)=>{const i=v(s||{});return p(t.IsAssemblage,!0,e),p(n.AssemblageDefinition,i,e),e};let A=Symbol.iterator;class I{dispose(){d(this,I)}add(...e){const t=e=>this.collection[e.channel].push(e.listener),n=h({if:()=>2===e.length,then:()=>({channel:e[0],listener:e[1]}),else:()=>{const t=e[0];return{channel:t[0],listener:t[1]}}}),s=h({if:e=>!r(this.collection[e.channel]),then:e=>{this.collection[e.channel]=[],t(e)},else:e=>{t(e)}});return l(n,s)(),this}remove(e,t){const n=t=>this.collection[e].splice(t,1),s=h({if:()=>this.collection[e]&&0===this.collection[e].length,then:()=>delete this.collection[e]}),i=h({if:()=>r(t),then:()=>n(this.collection[e].indexOf(t)),else:()=>delete this.collection[e]}),o=h({if:e=>this.has(e),then:e=>this.collection[e]});return l(o,i,s)(),this}has(...e){return i("string")(e[0])?Object.keys(this.collection).includes(e[0]):!!i("function")(e[0])&&Object.values(this.collection).flat().includes(e[0])}get(...e){return i("string")(e[0])?this.collection[e[0]]:i("function")(e[0])?Object.values(this.collection).flat().filter((t=>t===e[0])):[]}clear(){const e=(e=>t=>{const n=Array.isArray(e)?e=>parseInt(e):e=>e;for(const s in e)t(n(s))})(this.collection),t=e=>u(this.collection[e])((t=>this.remove(e,t)));return e((e=>t(e))),this}get listeners(){return Object.values(this.collection).flat()}get channels(){return Object.keys(this.collection)}get length(){return Object.values(this.collection).flat().length}[A](){let e=-1;const t=this.collection?Object.keys(this.collection):[];return{next:()=>({value:t[++e],done:!(e in t)})}}constructor(){!function(e,t,n){t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"collection",{});return f(this,I)}}class O{}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class P{dispose(){this.listeners.dispose(),this.channels.clear(),d(this,P)}addChannels(...e){return u(e)((e=>{const t=this.cleanChannel(e);if(this.channels.has(t))throw new Error(`Channel '${t}' already exists.`);this.channels.add(t)})),this}removeChannels(...e){return u(e)((e=>{const t=this.cleanChannel(e);"*"!==t&&this.channels.has(t)&&(this.channels.delete(t),this.listeners.remove(t),this.onceListeners.remove(t))})),this}on(e,t){const n=this.cleanChannel(e);if(!this.channels.has(n))throw new Error(`Channel '${n}' was not registered.`);return this.listeners.add(n,t),this}once(e,t){const n=this.cleanChannel(e);if(!this.channels.has(n))throw new Error(`Channel '${n}' was not registered.`);return this.onceListeners.add(n,t),this}off(e,t){const n=this.cleanChannel(e);return this.listeners.remove(n,t),this}emit(e,...t){const n=this.cleanChannel(e);if(this.channels.has(n)){const e=this.onceListeners.get("*")||[],s=this.listeners.get("*")||[],i=this.onceListeners.get(n)||[],r=this.listeners.get(n)||[],o=u(e),c=u(s),a=u(i),l=u(r);o((e=>{this.run(e,...t),this.onceListeners.remove("*",e)})),c((e=>{this.run(e,...t)})),a((e=>{this.run(e,...t),this.onceListeners.remove(n,e)})),l((e=>{this.run(e,...t)}))}return this}run(e,...t){if(c(e)){return e(...t).then((()=>Promise.resolve()))}e(...t)}cleanChannel(e){return a(e,"*")}constructor(...e){D(this,"listeners",new I),D(this,"onceListeners",new I),D(this,"channels",new Set(["*"])),this.addChannels(...e)}}var E=function(e){return e.UseIdentifier="assemblage:use.param.value",e}({}),U=function(e){return e.Context="assembler:context.param.index",e.Dispose="assembler:dispose.param.index",e.Definition="assemblage:definition.param.index",e.Configuration="assemblage:configuration.param.index",e.Use="assemblage:use.param.index",e}({});const S=e=>()=>(t,n,s)=>{const i=g(e,t)||[];i.push(s),p(e,i,t)},$=S(U.Context),R=S(U.Configuration),M=S(U.Definition),_=S(U.Dispose),k=(e,t,n)=>{const s=g(U.Use,t)||[];s.push(n),p(U.Use,s,t);const i=g(E.UseIdentifier,t)||{};i[n]=e,p(E.UseIdentifier,i,t)},L=e=>{const t=(e=>g(U.Context,e)||[])(e),n=(e=>g(U.Definition,e)||[])(e),s=(e=>g(U.Configuration,e)||[])(e),i=(e=>g(U.Dispose,e)||[])(e),r=(e=>g(U.Use,e)||[])(e);return{Context:t,Definition:n,Configuration:s,Dispose:i,Use:r}},q=t=>s=>{const i=class extends s{constructor(...e){super(...e),t&&t.call(this)}},r=Reflect.getOwnMetadata(e,s),o=L(s),c=[];for(let e=0;e<r.length;e++)if(o.Context.includes(e)){const t=g(U.Context,s)||[];t.push(e),p(U.Context,t,i)}else if(o.Definition.includes(e)){const t=g(U.Definition,s)||[];t.push(e),p(U.Definition,t,i)}else if(o.Configuration.includes(e)){const t=g(U.Configuration,s)||[];t.push(e),p(U.Configuration,t,i)}else if(o.Dispose.includes(e)){const t=g(U.Dispose,s)||[];t.push(e),p(U.Dispose,t,i),c.push(r[e])}else if(o.Use.includes(e)){const t=g(E.UseIdentifier,s);k(t[e],i,e)}else;return Object.defineProperty(i,"name",{value:s.name}),j(i,g(n.AssemblageDefinition,s))};function N(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class H{static of(e,t,n){return new H(e,t,n)}dispose(){this.singletonInstance&&(((e,t)=>{if(e.concrete.prototype instanceof P){const n=t;for(const t of e.events)n.off(t);n.removeChannels(...e.events),e.privateContext.removeChannels(...e.events)}})(this,this.singletonInstance),z(this.singletonInstance,"onDispose",this.publicContext,this.configuration),d(this.singletonInstance,this.concrete)),d(this,H)}build(){if(this.singletonInstance)return this.singletonInstance;const e=(e=>{const t=[],n=b(e.concrete),s=L(e.concrete);let i=0;for(const r of n)if(s.Context.includes(i))t.push(e.publicContext),i++;else if(s.Configuration.includes(i))t.push(e.configuration),i++;else if(s.Definition.includes(i))t.push(e.definition),i++;else if(s.Dispose.includes(i))t.push(e.privateContext.dispose),i++;else if(s.Use.includes(i)){const n=g(E.UseIdentifier,e.concrete)[i];t.push(e.privateContext.require(n)),i++}else t.push(e.privateContext.require(r)),i++;return t})(this),t=new this.concrete(...e);return((e,t)=>{if(e.concrete.prototype instanceof P){const n=t,s=n.channels;for(const t of e.events)s.has(t)||n.addChannels(t),e.privateContext.events.has(t)||e.privateContext.addChannels(t);for(const i of e.events)t.on(i,((...t)=>{e.privateContext.emit(i,...t)}))}})(this,t),this.isSingleton?(this.singletonInstance=t,this.privateContext.prepareInitHook(t,this.configuration),this.singletonInstance):(z(t,"onInit",this.publicContext),t)}get dependencies(){return this.dependenciesIds}get definition(){return C(this.concrete)||{}}get isSingleton(){return w("singleton",this.concrete)}get singleton(){return this.singletonInstance}get injections(){return w("inject",this.concrete)||[]}get objects(){return w("use",this.concrete)||[]}get tags(){return w("tags",this.concrete)||[]}get events(){return w("events",this.concrete)||[]}constructor(e,t,n){if(N(this,"privateContext",void 0),N(this,"publicContext",void 0),N(this,"identifier",void 0),N(this,"concrete",void 0),N(this,"configuration",void 0),N(this,"dependenciesIds",void 0),N(this,"singletonInstance",void 0),this.privateContext=t,this.publicContext=n,this.dependenciesIds=[],this.identifier=e.identifier,this.concrete=e.concrete,this.configuration=e.configuration,!m(this.concrete))throw new Error(`Class '${this.concrete.name}' is not an Assemblage.`);const s=u(this.injections),i=u(this.objects);s((e=>this.privateContext.register(e))),i((e=>{"string"==typeof e[0]||"symbol"==typeof e[0]?this.privateContext.use(e[0],e[1]):this.privateContext.register(e,!0)})),this.dependenciesIds=(e=>{const t=[],n=b(e),s=L(e);let i=0;for(const r of n)s.Context.includes(i)||s.Configuration.includes(i)||s.Definition.includes(i)||s.Dispose.includes(i)||s.Use.includes(i)||t.push(r),i++;return t})(this.concrete),e.instance?this.singletonInstance=e.instance:this.isSingleton}}const z=(e,t,n,s)=>new Promise((i=>{const r=e[t];if(r){if(c(r))return void r.bind(e)(n,s).then((()=>{i()}));i(r.bind(e)(n,s))}}));function W(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class F extends P{static build(e){const t=new F;((e,t,s)=>{const i=C(s);i[e]=t;const r=v(i);p(n.AssemblageDefinition,r,s)})("singleton",!0,e);const s=t.register([e]),i=t.require(s.identifier),r=t.initCache.find((e=>e.instance===i));if(!r)throw new Error("Root instance not found in assemblages cache.");const o=t.initCache.indexOf(r);t.initCache.splice(o,1);for(const n of t.initCache)z(n.instance,"onInit",t.publicContext,n.configuration);return z(i,"onInit",t.publicContext,s.configuration),t.initCache.length=0,i}dispose(){for(const[e,t]of this.injectables)t.dispose();d(this,F)}register(e,t=!1){const n=!0===t?(e=>({identifier:e[0],concrete:e[0],instance:e[1],configuration:{}}))(e):(e=>((e,t)=>(n,...s)=>e[n]?e[n](...s):t?t(n,...s):void 0)({1:()=>(e=>({identifier:e[0],concrete:e[0],configuration:{}}))(e),2:()=>x(e),3:()=>(e=>({identifier:e[0],concrete:e[1],configuration:e[2]}))(e)},(()=>{throw new Error("Injection tuple must be of length 1, 2 or 3.")}))(e.length))(e);if(this.has(n.identifier))throw new Error(`An assemblage is already registered with identifier '${n.identifier.name}'.`);const s=H.of(n,this.privateContext,this.publicContext);return this.injectables.set(s.identifier,s),z(s.concrete,"onRegister",this.publicContext,s.configuration),s}use(e,t){if(this.has(e))throw new Error(`A value is already registered with identifier '${String(e)}'.`);return this.objects.set(e,t),t}prepareInitHook(e,t){return this.initCache.push({instance:e,configuration:t}),this.initCache}has(e){return"string"==typeof e||"symbol"==typeof e?this.objects.has(e):this.injectables.has(e)}require(e){switch(typeof e){case"string":case"symbol":if(!this.objects.has(e))throw new Error(`Injected object with identifier '${String(e)}' has not been registered.`);return this.objects.get(e);default:if(!this.injectables.has(e))throw new Error(`Class with identifier '${e.name}' has not been registered or is a circular dependency.`);return this.injectables.get(e).build()}}concrete(e){const t=this.injectables.get(e);if(t)return t.concrete}tagged(...e){const t=[];for(const n of e)for(const[e,s]of this.injectables)s.tags.includes(n)&&t.push(s.build());return t}get size(){return this.injectables.size}constructor(){super(),W(this,"injectables",new Map),W(this,"objects",new Map),W(this,"initCache",[]),W(this,"privateContext",void 0),W(this,"publicContext",void 0),this.publicContext={has:this.has.bind(this),require:this.require.bind(this),concrete:this.concrete.bind(this),tagged:this.tagged.bind(this),dispose:this.dispose.bind(this),on:this.on.bind(this),once:this.once.bind(this),off:this.off.bind(this),events:this.channels},this.privateContext={...this.publicContext,register:this.register.bind(this),use:this.use.bind(this),prepareInitHook:this.prepareInitHook.bind(this),emit:this.emit.bind(this),addChannels:this.addChannels.bind(this),removeChannels:this.removeChannels.bind(this)}}}exports.AbstractAssemblage=class{static onRegister(e,t){}},exports.AbstractAssembler=class extends O{},exports.AbstractEventManager=O,exports.Assemblage=e=>t=>j(t,e),exports.AssemblageWrappedDecorator=q,exports.Assembler=F,exports.Await=(e,t=25)=>(n,s,i)=>{const r=i.value;i.value=async function(){return new Promise((n=>{if(this[e])r.apply(this),n();else{const s=setInterval((()=>{this[e]&&(clearInterval(s),r.apply(this),n())}),t)}}))}},exports.Configuration=R,exports.Context=$,exports.Definition=M,exports.Dispose=_,exports.EventManager=P,exports.ReflectParamIndex=U,exports.ReflectParamValue=E,exports.Use=e=>(t,n,s)=>{k(e,t,s)},exports.createWrappedDecorator=e=>()=>q(e),exports.decorateAssemblage=j,exports.decorateUse=k,exports.getDecoratedParametersIndexes=L,exports.isAssemblage=m;
|
package/dist/index.mjs
CHANGED
|
@@ -257,19 +257,16 @@ const resolveInstanceInjectionTuple = (e)=>{
|
|
|
257
257
|
};
|
|
258
258
|
};
|
|
259
259
|
|
|
260
|
-
const Assemblage = (
|
|
261
|
-
const n = r ? validateDefinition(r) : validateDefinition({});
|
|
260
|
+
const Assemblage = (e)=>{
|
|
262
261
|
return (o)=>{
|
|
263
|
-
|
|
264
|
-
defineCustomMetadata(ReflectValue.AssemblageDefinition, n, o);
|
|
265
|
-
return o;
|
|
262
|
+
return decorateAssemblage(o, e);
|
|
266
263
|
};
|
|
267
264
|
};
|
|
268
|
-
const decorateAssemblage = (
|
|
269
|
-
const
|
|
270
|
-
defineCustomMetadata(ReflectFlags.IsAssemblage, true,
|
|
271
|
-
defineCustomMetadata(ReflectValue.AssemblageDefinition,
|
|
272
|
-
return
|
|
265
|
+
const decorateAssemblage = (s, m)=>{
|
|
266
|
+
const n = m ? validateDefinition(m) : validateDefinition({});
|
|
267
|
+
defineCustomMetadata(ReflectFlags.IsAssemblage, true, s);
|
|
268
|
+
defineCustomMetadata(ReflectValue.AssemblageDefinition, n, s);
|
|
269
|
+
return s;
|
|
273
270
|
};
|
|
274
271
|
|
|
275
272
|
function e$4(e, t, n) {
|
|
@@ -576,16 +573,19 @@ const r$1 = i(ReflectParamIndex.Configuration);
|
|
|
576
573
|
const c$1 = i(ReflectParamIndex.Definition);
|
|
577
574
|
const e$2 = i(ReflectParamIndex.Dispose);
|
|
578
575
|
|
|
579
|
-
const Use = (
|
|
580
|
-
return (
|
|
581
|
-
|
|
582
|
-
c.push(m);
|
|
583
|
-
defineCustomMetadata(ReflectParamIndex.Use, c, r);
|
|
584
|
-
const U = getOwnCustomMetadata(ReflectParamValue.UseIdentifier, r) || {};
|
|
585
|
-
U[m] = n;
|
|
586
|
-
defineCustomMetadata(ReflectParamValue.UseIdentifier, U, r);
|
|
576
|
+
const Use = (e)=>{
|
|
577
|
+
return (o, t, s)=>{
|
|
578
|
+
decorateUse(e, o, s);
|
|
587
579
|
};
|
|
588
580
|
};
|
|
581
|
+
const decorateUse = (r, n, c)=>{
|
|
582
|
+
const U = getOwnCustomMetadata(ReflectParamIndex.Use, n) || [];
|
|
583
|
+
U.push(c);
|
|
584
|
+
defineCustomMetadata(ReflectParamIndex.Use, U, n);
|
|
585
|
+
const i = getOwnCustomMetadata(ReflectParamValue.UseIdentifier, n) || {};
|
|
586
|
+
i[c] = r;
|
|
587
|
+
defineCustomMetadata(ReflectParamValue.UseIdentifier, i, n);
|
|
588
|
+
};
|
|
589
589
|
|
|
590
590
|
const o = (o)=>{
|
|
591
591
|
return getOwnCustomMetadata(ReflectParamIndex.Context, o) || [];
|
|
@@ -609,64 +609,115 @@ const getDecoratedParametersIndexes = (t)=>{
|
|
|
609
609
|
const u = s(t);
|
|
610
610
|
const a = c(t);
|
|
611
611
|
return {
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
612
|
+
Context: n,
|
|
613
|
+
Definition: i,
|
|
614
|
+
Configuration: m,
|
|
615
|
+
Dispose: u,
|
|
616
|
+
Use: a
|
|
617
617
|
};
|
|
618
618
|
};
|
|
619
619
|
|
|
620
|
+
const createWrappedDecorator = (e)=>{
|
|
621
|
+
return ()=>AssemblageWrappedDecorator(e);
|
|
622
|
+
};
|
|
623
|
+
const AssemblageWrappedDecorator = (p)=>(u)=>{
|
|
624
|
+
const f = class extends u {
|
|
625
|
+
constructor(...e){
|
|
626
|
+
super(...e);
|
|
627
|
+
if (p) p.call(this);
|
|
628
|
+
}
|
|
629
|
+
};
|
|
630
|
+
const m = Reflect.getOwnMetadata(ReflectParamTypes, u);
|
|
631
|
+
const l = getDecoratedParametersIndexes(u);
|
|
632
|
+
const d = [];
|
|
633
|
+
for(let t = 0; t < m.length; t++){
|
|
634
|
+
if (l.Context.includes(t)) {
|
|
635
|
+
const n = getOwnCustomMetadata(ReflectParamIndex.Context, u) || [];
|
|
636
|
+
n.push(t);
|
|
637
|
+
defineCustomMetadata(ReflectParamIndex.Context, n, f);
|
|
638
|
+
continue;
|
|
639
|
+
}
|
|
640
|
+
if (l.Definition.includes(t)) {
|
|
641
|
+
const n = getOwnCustomMetadata(ReflectParamIndex.Definition, u) || [];
|
|
642
|
+
n.push(t);
|
|
643
|
+
defineCustomMetadata(ReflectParamIndex.Definition, n, f);
|
|
644
|
+
continue;
|
|
645
|
+
}
|
|
646
|
+
if (l.Configuration.includes(t)) {
|
|
647
|
+
const n = getOwnCustomMetadata(ReflectParamIndex.Configuration, u) || [];
|
|
648
|
+
n.push(t);
|
|
649
|
+
defineCustomMetadata(ReflectParamIndex.Configuration, n, f);
|
|
650
|
+
continue;
|
|
651
|
+
}
|
|
652
|
+
if (l.Dispose.includes(t)) {
|
|
653
|
+
const n = getOwnCustomMetadata(ReflectParamIndex.Dispose, u) || [];
|
|
654
|
+
n.push(t);
|
|
655
|
+
defineCustomMetadata(ReflectParamIndex.Dispose, n, f);
|
|
656
|
+
d.push(m[t]);
|
|
657
|
+
continue;
|
|
658
|
+
}
|
|
659
|
+
if (l.Use.includes(t)) {
|
|
660
|
+
const e = getOwnCustomMetadata(ReflectParamValue.UseIdentifier, u);
|
|
661
|
+
decorateUse(e[t], f, t);
|
|
662
|
+
continue;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
Object.defineProperty(f, 'name', {
|
|
666
|
+
value: u.name
|
|
667
|
+
});
|
|
668
|
+
return decorateAssemblage(f, getOwnCustomMetadata(ReflectValue.AssemblageDefinition, u));
|
|
669
|
+
};
|
|
670
|
+
|
|
620
671
|
const resolveInjectableParameters = (i)=>{
|
|
621
|
-
const
|
|
622
|
-
const
|
|
623
|
-
const
|
|
624
|
-
let
|
|
625
|
-
for (const n of
|
|
626
|
-
if (
|
|
627
|
-
|
|
628
|
-
|
|
672
|
+
const s = [];
|
|
673
|
+
const c = getParamTypes(i.concrete);
|
|
674
|
+
const r = getDecoratedParametersIndexes(i.concrete);
|
|
675
|
+
let u = 0;
|
|
676
|
+
for (const n of c){
|
|
677
|
+
if (r.Context.includes(u)) {
|
|
678
|
+
s.push(i.publicContext);
|
|
679
|
+
u++;
|
|
629
680
|
continue;
|
|
630
681
|
}
|
|
631
|
-
if (
|
|
632
|
-
|
|
633
|
-
|
|
682
|
+
if (r.Configuration.includes(u)) {
|
|
683
|
+
s.push(i.configuration);
|
|
684
|
+
u++;
|
|
634
685
|
continue;
|
|
635
686
|
}
|
|
636
|
-
if (
|
|
637
|
-
|
|
638
|
-
|
|
687
|
+
if (r.Definition.includes(u)) {
|
|
688
|
+
s.push(i.definition);
|
|
689
|
+
u++;
|
|
639
690
|
continue;
|
|
640
691
|
}
|
|
641
|
-
if (
|
|
642
|
-
|
|
643
|
-
|
|
692
|
+
if (r.Dispose.includes(u)) {
|
|
693
|
+
s.push(i.privateContext.dispose);
|
|
694
|
+
u++;
|
|
644
695
|
continue;
|
|
645
696
|
}
|
|
646
|
-
if (
|
|
697
|
+
if (r.Use.includes(u)) {
|
|
647
698
|
const n = getOwnCustomMetadata(ReflectParamValue.UseIdentifier, i.concrete);
|
|
648
|
-
const t = n[
|
|
649
|
-
|
|
650
|
-
|
|
699
|
+
const t = n[u];
|
|
700
|
+
s.push(i.privateContext.require(t));
|
|
701
|
+
u++;
|
|
651
702
|
continue;
|
|
652
703
|
}
|
|
653
|
-
|
|
654
|
-
|
|
704
|
+
s.push(i.privateContext.require(n));
|
|
705
|
+
u++;
|
|
655
706
|
}
|
|
656
|
-
return
|
|
707
|
+
return s;
|
|
657
708
|
};
|
|
658
709
|
const resolveDependencies = (e)=>{
|
|
659
710
|
const o = [];
|
|
660
711
|
const i = getParamTypes(e);
|
|
661
|
-
const
|
|
662
|
-
let
|
|
712
|
+
const s = getDecoratedParametersIndexes(e);
|
|
713
|
+
let c = 0;
|
|
663
714
|
for (const e of i){
|
|
664
|
-
if (
|
|
665
|
-
|
|
715
|
+
if (s.Context.includes(c) || s.Configuration.includes(c) || s.Definition.includes(c) || s.Dispose.includes(c) || s.Use.includes(c)) {
|
|
716
|
+
c++;
|
|
666
717
|
continue;
|
|
667
718
|
}
|
|
668
719
|
o.push(e);
|
|
669
|
-
|
|
720
|
+
c++;
|
|
670
721
|
}
|
|
671
722
|
return o;
|
|
672
723
|
};
|
|
@@ -917,4 +968,4 @@ class Assembler extends EventManager {
|
|
|
917
968
|
class AbstractAssembler extends AbstractEventManager {
|
|
918
969
|
}
|
|
919
970
|
|
|
920
|
-
export { AbstractAssemblage, AbstractAssembler, AbstractEventManager, Assemblage, Assembler, Await, r$1 as Configuration, s$1 as Context, c$1 as Definition, e$2 as Dispose, EventManager, ReflectParamIndex, ReflectParamValue, Use, decorateAssemblage, getDecoratedParametersIndexes, isAssemblage };
|
|
971
|
+
export { AbstractAssemblage, AbstractAssembler, AbstractEventManager, Assemblage, AssemblageWrappedDecorator, Assembler, Await, r$1 as Configuration, s$1 as Context, c$1 as Definition, e$2 as Dispose, EventManager, ReflectParamIndex, ReflectParamValue, Use, createWrappedDecorator, decorateAssemblage, decorateUse, getDecoratedParametersIndexes, isAssemblage };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assemblerjs",
|
|
3
3
|
"description": "A general purpose and zero-dependency Dependency Injection library for node and browser.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.7.0",
|
|
5
5
|
"author": "Benoît LAHOZ <info@benoitlahoz.io>",
|
|
6
6
|
"bugs": "https://github.com/benoitlahoz/assemblerjs/issues",
|
|
7
7
|
"devDependencies": {
|