Skip to content

Commit c6e98b4

Browse files
authored
Merge pull request #34 from remojansen/master
Libs upgrade and AMD support
2 parents ae1b26d + 5b42480 commit c6e98b4

21 files changed

+113
-66
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ typings
3838
dist
3939
lib
4040
es
41+
amd
4142

4243
type_definitions/inversify/*.js
4344

.vscode/settings.json

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"test/**/*.js": true,
88
"**/es": true,
99
"**/lib": true,
10+
"**/amd": true,
1011
"**/dts": true,
1112
"**/coverage": true,
1213
"**/dist": true,

gulpfile.js

+17-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,22 @@ gulp.task("build-lib", function() {
4646
.js.pipe(gulp.dest("lib/"));
4747
});
4848

49+
var tsAmdProject = tsc.createProject("tsconfig.json", {
50+
module: "amd"
51+
});
52+
53+
gulp.task("build-amd", function() {
54+
return gulp.src([
55+
"src/**/*.ts"
56+
])
57+
.pipe(tsAmdProject())
58+
.on("error", function(err) {
59+
process.exit(1);
60+
})
61+
.js.pipe(gulp.dest("amd/"));
62+
});
63+
64+
4965
var tsEsProject = tsc.createProject("tsconfig.json", {
5066
module: "es2015"
5167
});
@@ -132,7 +148,7 @@ gulp.task("test", function(cb) {
132148

133149
gulp.task("build", function(cb) {
134150
runSequence(
135-
"lint", ["build-src", "build-es", "build-lib", "build-dts"], // tests + build es and lib
151+
"lint", ["build-src", "build-es", "build-lib", "build-amd", "build-dts"], // tests + build es and lib
136152
"build-test",
137153
cb);
138154
});

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "inversify-binding-decorators",
3-
"version": "2.0.0",
3+
"version": "3.0.0-beta.1",
44
"description": "An utility that allows developers to declare InversifyJS bindings using ES2016 decorators",
55
"main": "lib/index.js",
66
"jsnext:main": "es/index.js",
@@ -32,15 +32,15 @@
3232
"gulp": "^3.9.1",
3333
"gulp-istanbul": "^1.0.0",
3434
"gulp-mocha": "^3.0.0",
35-
"gulp-tslint": "^6.1.2",
35+
"gulp-tslint": "^7.0.0",
3636
"gulp-typescript": "^3.0.0",
37-
"inversify": "^3.0.0-beta.1",
37+
"inversify": "^3.0.0-rc.1",
3838
"mocha": "^3.0.0",
3939
"publish-please": "^2.1.4",
4040
"reflect-metadata": "^0.1.3",
4141
"run-sequence": "^1.2.0",
4242
"sinon": "^1.17.4",
43-
"tslint": "^3.12.0",
43+
"tslint": "^4.0.1",
4444
"typescript": "^2.1.1"
4545
}
4646
}

src/decorator/fluent_provide.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function fluentProvide(container: inversifyInterfaces.Container) {
1111
// function is named for testing
1212
return function _fluentProvide(serviceIdentifier: inversifyInterfaces.ServiceIdentifier<any>) {
1313

14-
let bindingWhenOnSyntax = container.bind<any>(serviceIdentifier).to(null);
14+
let bindingWhenOnSyntax = container.bind<any>(serviceIdentifier).to(<any>null);
1515
let binding = (<any>bindingWhenOnSyntax)._binding;
1616
let provideDoneSyntax = new ProvideDoneSyntax(binding);
1717

src/decorator/provide.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ function provide(container: interfaces.Container) {
55

66
// function is named for testing
77
return function _provide(serviceIdentifier: interfaces.ServiceIdentifier<any>) {
8-
let bindingWhenOnSyntax = container.bind<any>(serviceIdentifier).to(null);
8+
let bindingWhenOnSyntax = container.bind<any>(serviceIdentifier).to(<any>null);
99
return function (target: any) {
1010
decorate(injectable(), target);
1111
let binding: interfaces.Binding<any> = (<any>bindingWhenOnSyntax)._binding;

src/factory/fluent_provide_decorator_factory.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import fluentProvide from "../decorator/fluent_provide";
22
import interfaces from "../interfaces/interfaces";
33
import { interfaces as inversifyInterfaces } from "inversify";
44

5-
function makeFluentProvideDecorator(container: inversifyInterfaces.Container) {
6-
let result: (serviceIdentifier: inversifyInterfaces.ServiceIdentifier<any>) => interfaces.ProvideInWhenOnSyntax<any> = null;
7-
result = fluentProvide(container);
5+
function makeFluentProvideDecorator(
6+
container: inversifyInterfaces.Container
7+
): (serviceIdentifier: inversifyInterfaces.ServiceIdentifier<any>) => interfaces.ProvideInWhenOnSyntax<any> {
8+
let result = fluentProvide(container);
89
return result;
910
}
1011

src/interfaces/interfaces.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@ import { interfaces as inversifyInterfaces } from "inversify";
22

33
namespace interfaces {
44

5-
export interface ProvideInSyntax<T> extends ProvideDoneSyntax<T> {
6-
inSingletonScope(): ProvideWhenOnSyntax<T>;
7-
inTransientScope(): ProvideWhenOnSyntax<T>;
5+
export interface ProvideDoneSyntax {
6+
done(): (target: any) => any;
87
}
98

10-
export interface ProvideDoneSyntax<T> {
11-
done(): (target: any) => any;
9+
export interface ProvideInSyntax<T> extends ProvideDoneSyntax {
10+
inSingletonScope(): ProvideWhenOnSyntax<T>;
11+
inTransientScope(): ProvideWhenOnSyntax<T>;
1212
}
1313

1414
export interface ProvideInWhenOnSyntax<T> extends ProvideInSyntax<T>, ProvideWhenSyntax<T>, ProvideOnSyntax<T> {}
1515

16-
export interface ProvideOnSyntax<T> extends ProvideDoneSyntax<T> {
16+
export interface ProvideOnSyntax<T> extends ProvideDoneSyntax {
1717
onActivation(fn: (context: inversifyInterfaces.Context, injectable: T) => T): ProvideWhenSyntax<T>;
1818
}
1919

20-
export interface ProvideWhenSyntax<T> extends ProvideDoneSyntax<T> {
20+
export interface ProvideWhenSyntax<T> extends ProvideDoneSyntax {
2121
when(constraint: (request: inversifyInterfaces.Request) => boolean): ProvideOnSyntax<T>;
2222
whenTargetNamed(name: string): ProvideOnSyntax<T>;
2323
whenTargetTagged(tag: string, value: any): ProvideOnSyntax<T>;

src/syntax/provide_done_syntax.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import interfaces from "../interfaces/interfaces";
22
import { decorate, injectable } from "inversify";
33
import { interfaces as inversifyInterfaces } from "inversify";
44

5-
class ProvideDoneSyntax<T> implements interfaces.ProvideDoneSyntax<T> {
5+
class ProvideDoneSyntax<T> implements interfaces.ProvideDoneSyntax {
66

77
private _binding: inversifyInterfaces.Binding<T>;
88

src/syntax/provide_in_syntax.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import { interfaces as inversifyInterfaces } from "inversify";
88
class ProvideInSyntax<T> implements interfaces.ProvideInSyntax<T> {
99

1010
private _bindingInSyntax: inversifyInterfaces.BindingInSyntax<T>;
11-
private _provideDoneSyntax: interfaces.ProvideDoneSyntax<T>;
11+
private _provideDoneSyntax: interfaces.ProvideDoneSyntax;
1212

1313
public constructor(
1414
bindingInSyntax: inversifyInterfaces.BindingInSyntax<T>,
15-
provideDoneSyntax: interfaces.ProvideDoneSyntax<T>
15+
provideDoneSyntax: interfaces.ProvideDoneSyntax
1616
) {
1717
this._bindingInSyntax = bindingInSyntax;
1818
this._provideDoneSyntax = provideDoneSyntax;

src/syntax/provide_on_syntax.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import { interfaces as inversifyInterfaces } from "inversify";
55
class ProvideOnSyntax<T> implements interfaces.ProvideOnSyntax<T> {
66

77
private _bindingOnSyntax: inversifyInterfaces.BindingOnSyntax<T>;
8-
private _provideDoneSyntax: interfaces.ProvideDoneSyntax<T>;
8+
private _provideDoneSyntax: interfaces.ProvideDoneSyntax;
99

1010
public constructor(
1111
bindingOnSyntax: inversifyInterfaces.BindingOnSyntax<T>,
12-
provideDoneSyntax: interfaces.ProvideDoneSyntax<T>
12+
provideDoneSyntax: interfaces.ProvideDoneSyntax
1313
) {
1414
this._bindingOnSyntax = bindingOnSyntax;
1515
this._provideDoneSyntax = provideDoneSyntax;

src/syntax/provide_when_syntax.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import { interfaces as inversifyInterfaces } from "inversify";
55
class ProvideWhenSyntax<T> implements interfaces.ProvideWhenSyntax<T> {
66

77
private _bindingWhenSyntax: inversifyInterfaces.BindingWhenSyntax<T>;
8-
private _provideDoneSyntax: interfaces.ProvideDoneSyntax<T>;
8+
private _provideDoneSyntax: interfaces.ProvideDoneSyntax;
99

1010
public constructor(
1111
bindingWhenSyntax: inversifyInterfaces.BindingWhenSyntax<T>,
12-
provideDoneSyntax: interfaces.ProvideDoneSyntax<T>
12+
provideDoneSyntax: interfaces.ProvideDoneSyntax
1313
) {
1414
this._bindingWhenSyntax = bindingWhenSyntax;
1515
this._provideDoneSyntax = provideDoneSyntax;

test/index.test.ts

+58-30
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ describe("inversify-binding-decorators", () => {
1111
let provide = makeProvideDecorator(container);
1212

1313
interface Warrior {
14+
katana: Weapon;
15+
shuriken: ThrowableWeapon;
1416
fight(): string;
1517
sneak(): string;
1618
}
@@ -46,23 +48,27 @@ describe("inversify-binding-decorators", () => {
4648
@provide(TYPE.Warrior)
4749
class Ninja implements Warrior {
4850

49-
private _katana: Weapon;
50-
private _shuriken: ThrowableWeapon;
51+
public katana: Weapon;
52+
public shuriken: ThrowableWeapon;
5153

5254
public constructor(
5355
@inject(TYPE.Weapon) katana: Weapon,
5456
@inject(TYPE.ThrowableWeapon) shuriken: ThrowableWeapon
5557
) {
56-
this._katana = katana;
57-
this._shuriken = shuriken;
58+
this.katana = katana;
59+
this.shuriken = shuriken;
5860
}
5961

60-
public fight() { return this._katana.hit(); };
61-
public sneak() { return this._shuriken.throw(); };
62+
public fight() { return this.katana.hit(); };
63+
public sneak() { return this.shuriken.throw(); };
6264

6365
}
6466

6567
let ninja = container.get<Warrior>(TYPE.Warrior);
68+
69+
expect(ninja instanceof Ninja).eql(true);
70+
expect(ninja.katana instanceof Katana).eql(true);
71+
expect(ninja.shuriken instanceof Shuriken).eql(true);
6672
expect(ninja.fight()).eql("cut!");
6773
expect(ninja.sneak()).eql("hit!");
6874

@@ -90,23 +96,27 @@ describe("inversify-binding-decorators", () => {
9096
@provide(Ninja)
9197
class Ninja {
9298

93-
private _katana: Katana;
94-
private _shuriken: Shuriken;
99+
public katana: Katana;
100+
public shuriken: Shuriken;
95101

96102
public constructor(
97103
katana: Katana,
98104
shuriken: Shuriken
99105
) {
100-
this._katana = katana;
101-
this._shuriken = shuriken;
106+
this.katana = katana;
107+
this.shuriken = shuriken;
102108
}
103109

104-
public fight() { return this._katana.hit(); };
105-
public sneak() { return this._shuriken.throw(); };
110+
public fight() { return this.katana.hit(); };
111+
public sneak() { return this.shuriken.throw(); };
106112

107113
}
108114

109115
let ninja = container.get<Ninja>(Ninja);
116+
117+
expect(ninja instanceof Ninja).eql(true);
118+
expect(ninja.katana instanceof Katana).eql(true);
119+
expect(ninja.shuriken instanceof Shuriken).eql(true);
110120
expect(ninja.fight()).eql("cut!");
111121
expect(ninja.sneak()).eql("hit!");
112122

@@ -118,6 +128,8 @@ describe("inversify-binding-decorators", () => {
118128
let provide = makeProvideDecorator(container);
119129

120130
interface Warrior {
131+
katana: Katana;
132+
shuriken: Shuriken;
121133
fight(): string;
122134
sneak(): string;
123135
}
@@ -153,23 +165,27 @@ describe("inversify-binding-decorators", () => {
153165
@provide(TYPE.Warrior)
154166
class Ninja implements Warrior {
155167

156-
private _katana: Weapon;
157-
private _shuriken: ThrowableWeapon;
168+
public katana: Weapon;
169+
public shuriken: ThrowableWeapon;
158170

159171
public constructor(
160172
@inject(TYPE.Weapon) katana: Weapon,
161173
@inject(TYPE.ThrowableWeapon) shuriken: ThrowableWeapon
162174
) {
163-
this._katana = katana;
164-
this._shuriken = shuriken;
175+
this.katana = katana;
176+
this.shuriken = shuriken;
165177
}
166178

167-
public fight() { return this._katana.hit(); };
168-
public sneak() { return this._shuriken.throw(); };
179+
public fight() { return this.katana.hit(); };
180+
public sneak() { return this.shuriken.throw(); };
169181

170182
}
171183

172184
let ninja = container.get<Warrior>(TYPE.Warrior);
185+
186+
expect(ninja instanceof Ninja).eql(true);
187+
expect(ninja.katana instanceof Katana).eql(true);
188+
expect(ninja.shuriken instanceof Shuriken).eql(true);
173189
expect(ninja.fight()).eql("cut!");
174190
expect(ninja.sneak()).eql("hit!");
175191

@@ -189,6 +205,8 @@ describe("inversify-binding-decorators", () => {
189205
};
190206

191207
interface Warrior {
208+
katana: Weapon;
209+
shuriken: ThrowableWeapon;
192210
fight(): string;
193211
sneak(): string;
194212
}
@@ -232,23 +250,27 @@ describe("inversify-binding-decorators", () => {
232250
@provideTransient(TYPE.Warrior)
233251
class Ninja implements Warrior {
234252

235-
private _katana: Weapon;
236-
private _shuriken: ThrowableWeapon;
253+
public katana: Weapon;
254+
public shuriken: ThrowableWeapon;
237255

238256
public constructor(
239257
@inject(TYPE.Weapon) katana: Weapon,
240258
@inject(TYPE.ThrowableWeapon) shuriken: ThrowableWeapon
241259
) {
242-
this._katana = katana;
243-
this._shuriken = shuriken;
260+
this.katana = katana;
261+
this.shuriken = shuriken;
244262
}
245263

246-
public fight() { return this._katana.hit(); };
247-
public sneak() { return this._shuriken.throw(); };
264+
public fight() { return this.katana.hit(); };
265+
public sneak() { return this.shuriken.throw(); };
248266

249267
}
250268

251269
let ninja = container.get<Warrior>(TYPE.Warrior);
270+
expect(ninja instanceof Ninja).eql(true);
271+
expect(ninja.katana instanceof Katana).eql(true);
272+
expect(ninja.shuriken instanceof Shuriken).eql(true);
273+
252274
expect(ninja.fight().indexOf("cut!")).eql(0);
253275
expect(ninja.sneak().indexOf("hit!")).eql(0);
254276

@@ -268,6 +290,8 @@ describe("inversify-binding-decorators", () => {
268290
};
269291

270292
interface Warrior {
293+
primary: Weapon;
294+
secondary: Weapon;
271295
fight(): string;
272296
sneak(): string;
273297
}
@@ -298,23 +322,27 @@ describe("inversify-binding-decorators", () => {
298322
@provide(TYPE.Warrior).done()
299323
class Ninja implements Warrior {
300324

301-
private _primary: Weapon;
302-
private _secondary: Weapon;
325+
public primary: Weapon;
326+
public secondary: Weapon;
303327

304328
public constructor(
305329
@inject(TYPE.Weapon) @tagged("throwable", false) primary: Weapon,
306330
@inject(TYPE.Weapon) @tagged("throwable", true) secondary: Weapon
307331
) {
308-
this._primary = primary;
309-
this._secondary = secondary;
332+
this.primary = primary;
333+
this.secondary = secondary;
310334
}
311335

312-
public fight() { return this._primary.hit(); };
313-
public sneak() { return this._secondary.hit(); };
336+
public fight() { return this.primary.hit(); };
337+
public sneak() { return this.secondary.hit(); };
314338

315339
}
316340

317341
let ninja = container.get<Warrior>(TYPE.Warrior);
342+
343+
expect(ninja instanceof Ninja).eql(true);
344+
expect(ninja.primary instanceof Katana).eql(true);
345+
expect(ninja.secondary instanceof Shuriken).eql(true);
318346
expect(ninja.fight()).eql("Hit by Katana!");
319347
expect(ninja.sneak()).eql("Hit by Shuriken!");
320348

0 commit comments

Comments
 (0)