Comparing version 0.0.8 to 1.0.0
@@ -11,7 +11,7 @@ export declare enum MemberType { | ||
memberType: MemberType; | ||
proceed(): any; | ||
proceed(): void; | ||
} | ||
export interface InterceptionInfo { | ||
memberName: string; | ||
interceptors: Array<(invocation: Invocation) => void>; | ||
interceptor: (invocation: Invocation) => void; | ||
} | ||
@@ -21,3 +21,3 @@ export interface MemberProxyStrategyInfo { | ||
memberName: string; | ||
interceptors: Array<(invocation: Invocation) => void>; | ||
interceptor: (invocation: Invocation) => void; | ||
} | ||
@@ -43,2 +43,3 @@ export interface MemberProxyStrategy { | ||
addInterception(interception: (invocation: Invocation) => void): this; | ||
private createProxy(origin, interceptor); | ||
build(): T; | ||
@@ -45,0 +46,0 @@ private getStrategy(memberType); |
@@ -13,22 +13,17 @@ "use strict"; | ||
Interception.prototype.invoke = function (memberType, originMemberInvoker, parameters) { | ||
if (this.info.interceptors.length == 0) { | ||
if (!this.info.interceptor) { | ||
return originMemberInvoker(parameters); | ||
} | ||
else { | ||
var returnValue = void 0; | ||
for (var _i = 0, _a = this.info.interceptors; _i < _a.length; _i++) { | ||
var interceptor = _a[_i]; | ||
var invocation = { | ||
parameters: parameters, | ||
memberType: memberType, | ||
memberName: this.info.memberName, | ||
proceed: function () { | ||
this.returnValue = | ||
originMemberInvoker(parameters); | ||
} | ||
}; | ||
interceptor(invocation); | ||
returnValue = invocation.returnValue; | ||
} | ||
return returnValue; | ||
var invocation = { | ||
parameters: parameters, | ||
memberType: memberType, | ||
memberName: this.info.memberName, | ||
proceed: function () { | ||
this.returnValue = | ||
originMemberInvoker(parameters); | ||
} | ||
}; | ||
this.info.interceptor(invocation); | ||
return invocation.returnValue; | ||
} | ||
@@ -91,11 +86,11 @@ }; | ||
}; | ||
BenaluBuilder.prototype.build = function () { | ||
BenaluBuilder.prototype.createProxy = function (origin, interceptor) { | ||
var proxy = new Object(); | ||
for (var key in this.origin) { | ||
var memberType = typeof this.origin[key]; | ||
for (var key in origin) { | ||
var memberType = typeof origin[key]; | ||
var strategy = this.getStrategy(memberType); | ||
strategy.apply(proxy, { | ||
memberName: key, | ||
origin: this.origin, | ||
interceptors: this.intercepts | ||
origin: origin, | ||
interceptor: interceptor | ||
}); | ||
@@ -105,2 +100,10 @@ } | ||
}; | ||
BenaluBuilder.prototype.build = function () { | ||
var originObject = this.origin; | ||
for (var _i = 0, _a = this.intercepts; _i < _a.length; _i++) { | ||
var interceptor = _a[_i]; | ||
originObject = this.createProxy(originObject, interceptor); | ||
} | ||
return originObject; | ||
}; | ||
BenaluBuilder.prototype.getStrategy = function (memberType) { | ||
@@ -107,0 +110,0 @@ if (memberType == "function") { |
{ | ||
"name": "benalu", | ||
"version": "0.0.8", | ||
"version": "1.0.0", | ||
"description": "A dynamic proxy for javascript", | ||
@@ -8,3 +8,3 @@ "main": "dist/benalu.js", | ||
"scripts": { | ||
"test": "mocha tests/**/*.js" | ||
"test": "gulp" | ||
}, | ||
@@ -21,12 +21,13 @@ "keywords": [ | ||
"devDependencies": { | ||
"@types/chai": "^3.4.34", | ||
"@types/mocha": "^2.2.33", | ||
"chai": "^3.5.0", | ||
"gulp": "^3.9.1", | ||
"gulp-istanbul": "^0.10.3", | ||
"gulp-mocha": "^2.2.0", | ||
"gulp-tslint": "^4.3.3", | ||
"gulp-typescript": "^2.12.1", | ||
"run-sequence": "^1.1.5", | ||
"tslint": "^3.5.0", | ||
"typescript": "^1.8.2" | ||
"gulp-istanbul": "^1.1.1", | ||
"gulp-mocha": "^3.0.1", | ||
"gulp-typescript": "^3.1.3", | ||
"mocha": "^3.2.0", | ||
"run-sequence": "^1.2.2", | ||
"typescript": "^2.0.10" | ||
} | ||
} |
@@ -11,3 +11,2 @@ #Benalu | ||
Benalu also useful for IOC container library that hasn't support for interception | ||
like [Inversify 1.x](http://inversify.io) | ||
@@ -30,2 +29,4 @@ ###Features | ||
```Javascript | ||
var Benalu = require('benalu'); | ||
//declare the class | ||
@@ -74,5 +75,47 @@ function MyObject(){} | ||
###Interception Priority | ||
Interception can be applied more than one in a proxy. The last inserted interceptor | ||
having the most priority. If the last interceptor change the return value of Invocation | ||
then all previous override will be ignored. | ||
###Multiple Interception | ||
Benalu also support multiple interception. | ||
```Javascript | ||
var Benalu = require('benalu'); | ||
function MyObject(){} | ||
MyObject.prototype.getNumber = function(){ | ||
console.log("The real method called"); | ||
return 700; | ||
} | ||
var myObject = new MyObject(); | ||
var proxy = Benalu.fromInstance(myObject) | ||
.addInterception(function(i) { | ||
if(i.methodName == "getNumber"){ | ||
console.log("First interceptor before proceed"); | ||
i.proceed(); | ||
console.log("First interceptor after proceed"); | ||
i.returnValue = 300; | ||
} | ||
}) | ||
.addInterception(function(i) { | ||
if(i.methodName == "getNumber"){ | ||
console.log("Second interceptor before proceed"); | ||
i.proceed(); | ||
console.log("Second interceptor after proceed"); | ||
i.returnValue = i.returnValue + 300; | ||
} | ||
}) | ||
.build(); | ||
var numResult = proxy.getNumber(); | ||
//numResult = 600 | ||
``` | ||
Above code will write log in the console like below: | ||
``` | ||
Second interceptor before proceed | ||
First interceptor before proceed | ||
The real method called | ||
First interceptor after proceed | ||
Second interceptor after proceed | ||
``` |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
10912
166
0
119
10