diff --git a/.babelrc.karma b/.babelrc.karma
deleted file mode 100644
index 22f9024..0000000
--- a/.babelrc.karma
+++ /dev/null
@@ -1,11 +0,0 @@
- {
- "presets": [ "es2015" ],
- "plugins": [
- ["istanbul", {
- "exclude": [
- "src/specs.js",
- "src/**/*_spec.js"
- ]
- }]
- ]
- }
diff --git a/.gitignore b/.gitignore
index fea770a..d6dd45f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,5 @@
artifacts
build
node_modules
+/typings
npm-debug.log
diff --git a/.travis.yml b/.travis.yml
index 6ad82d0..6895abd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,10 +21,12 @@ before_install:
install:
- npm install gulp --global
+ - npm install typings --global
- npm install codecov --global
before_script:
- npm install
+ - typings install
script:
- gulp lint
diff --git a/karma.conf.js b/karma.conf.js
index 1809269..d27f9fb 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -1,5 +1,6 @@
+const webpack = require('./webpack-test.config');
+
module.exports = function(config) {
- const webpack = require('./webpack-test.config')(config);
config.set({
diff --git a/package.json b/package.json
index 0fde20c..69b64ea 100644
--- a/package.json
+++ b/package.json
@@ -66,6 +66,8 @@
"sass-loader": "^4.0.2",
"sinon": "^1.17.6",
"style-loader": "^0.13.1",
+ "ts-loader": "^0.8.2",
+ "typescript": "^2.0.0",
"url-loader": "^0.5.7",
"webpack": "^1.13.2",
"webpack-combine-loaders": "^2.0.0",
diff --git a/src/app.js b/src/app.js
deleted file mode 100644
index 99e9012..0000000
--- a/src/app.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import './style.scss';
-
-import angular from 'angular';
-import bootstrap from './app/bootstrap';
-
-angular.injector(['ng'])
- .invoke(bootstrap);
diff --git a/src/app.ts b/src/app.ts
new file mode 100644
index 0000000..d50e997
--- /dev/null
+++ b/src/app.ts
@@ -0,0 +1,12 @@
+///
+///
+///
+///
+
+import './style.scss';
+
+import * as angular from 'angular';
+import bootstrap from './app/bootstrap';
+
+angular.injector(['ng'])
+ .invoke(bootstrap);
diff --git a/src/app/about/module.js b/src/app/about/module.ts
similarity index 81%
rename from src/app/about/module.js
rename to src/app/about/module.ts
index d7fd156..08dd4e3 100644
--- a/src/app/about/module.js
+++ b/src/app/about/module.ts
@@ -1,4 +1,4 @@
-import angular from 'angular';
+import * as angular from 'angular';
import states from './states/config';
import uiRouter from 'angular-ui-router';
diff --git a/src/app/about/states/config.js b/src/app/about/states/config.ts
similarity index 100%
rename from src/app/about/states/config.js
rename to src/app/about/states/config.ts
diff --git a/src/app/about/states/main/state.js b/src/app/about/states/main/state.ts
similarity index 50%
rename from src/app/about/states/main/state.js
rename to src/app/about/states/main/state.ts
index 5571b7e..826d7d5 100644
--- a/src/app/about/states/main/state.js
+++ b/src/app/about/states/main/state.ts
@@ -1,8 +1,6 @@
-import template from './template.html';
-
export default {
name: 'about',
- template,
+ template: require('./template.html'),
url: '/about'
};
diff --git a/src/app/about/states/main/state_spec.js b/src/app/about/states/main/state_spec.ts
similarity index 92%
rename from src/app/about/states/main/state_spec.js
rename to src/app/about/states/main/state_spec.ts
index 44abadd..24d9668 100644
--- a/src/app/about/states/main/state_spec.js
+++ b/src/app/about/states/main/state_spec.ts
@@ -1,3 +1,4 @@
+import * as angular from 'angular';
import { expect } from 'chai';
import module from '../../module';
diff --git a/src/app/bootstrap.js b/src/app/bootstrap.ts
similarity index 69%
rename from src/app/bootstrap.js
rename to src/app/bootstrap.ts
index 74840e2..706c0e7 100644
--- a/src/app/bootstrap.js
+++ b/src/app/bootstrap.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
+import * as angular from 'angular';
import module from './module';
-export default function($document) {
+export default function($document: JQuery) {
'ngInject';
angular.element($document).ready(() => {
diff --git a/src/app/bootstrap_spec.js b/src/app/bootstrap_spec.ts
similarity index 72%
rename from src/app/bootstrap_spec.js
rename to src/app/bootstrap_spec.ts
index 720295c..d41f607 100644
--- a/src/app/bootstrap_spec.js
+++ b/src/app/bootstrap_spec.ts
@@ -1,17 +1,17 @@
-import angular from 'angular';
+import * as angular from 'angular';
import bootstrap from './bootstrap';
import { expect } from 'chai';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe('boostrap', () => {
- let sandbox;
+ let sandbox, stub;
beforeEach(() => {
sandbox = sinon.sandbox.create();
// Do not boot the app in the test environment
- sandbox.stub(angular, 'bootstrap');
+ stub = sandbox.stub(angular, 'bootstrap');
});
afterEach(() => {
@@ -25,9 +25,9 @@ describe('boostrap', () => {
$injector.invoke(bootstrap);
angular.element($document).ready(() => {
- expect(angular.bootstrap.called).to.be.true;
+ expect(stub.called).to.be.true;
- const [, modules, options] = angular.bootstrap.lastCall.args;
+ const [, modules, options] = stub.lastCall.args;
expect(modules[0]).to.eq('app');
expect(options).to.have.property('strictDi', true);
diff --git a/src/app/commons/components/config.js b/src/app/commons/components/config.ts
similarity index 100%
rename from src/app/commons/components/config.js
rename to src/app/commons/components/config.ts
diff --git a/src/app/commons/components/footer/component.js b/src/app/commons/components/footer/component.js
deleted file mode 100644
index 70fc48b..0000000
--- a/src/app/commons/components/footer/component.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import template from './template.html';
-
-export default {
- template
-};
diff --git a/src/app/commons/components/footer/component.ts b/src/app/commons/components/footer/component.ts
new file mode 100644
index 0000000..e0cb004
--- /dev/null
+++ b/src/app/commons/components/footer/component.ts
@@ -0,0 +1,3 @@
+export default {
+ template: require('./template.html')
+};
diff --git a/src/app/commons/components/navigation/component.js b/src/app/commons/components/navigation/component.js
deleted file mode 100644
index 70fc48b..0000000
--- a/src/app/commons/components/navigation/component.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import template from './template.html';
-
-export default {
- template
-};
diff --git a/src/app/commons/components/navigation/component.ts b/src/app/commons/components/navigation/component.ts
new file mode 100644
index 0000000..e0cb004
--- /dev/null
+++ b/src/app/commons/components/navigation/component.ts
@@ -0,0 +1,3 @@
+export default {
+ template: require('./template.html')
+};
diff --git a/src/app/commons/module.js b/src/app/commons/module.ts
similarity index 71%
rename from src/app/commons/module.js
rename to src/app/commons/module.ts
index 4b81a1c..99700d7 100644
--- a/src/app/commons/module.js
+++ b/src/app/commons/module.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
+import * as angular from 'angular';
+import * as toastr from 'angular-toastr';
import components from './components/config';
import services from './services/config';
-import toastr from 'angular-toastr';
export default angular.module('app.commons', [
toastr
diff --git a/src/app/commons/services/alert/service.js b/src/app/commons/services/alert/service.ts
similarity index 61%
rename from src/app/commons/services/alert/service.js
rename to src/app/commons/services/alert/service.ts
index 9a46fbd..fe583fc 100644
--- a/src/app/commons/services/alert/service.js
+++ b/src/app/commons/services/alert/service.ts
@@ -1,4 +1,4 @@
-export default function($window) {
+export default function($window: ng.IWindowService) {
'ngInject';
return function(message) {
diff --git a/src/app/commons/services/alert/service_spec.js b/src/app/commons/services/alert/service_spec.ts
similarity index 93%
rename from src/app/commons/services/alert/service_spec.js
rename to src/app/commons/services/alert/service_spec.ts
index 79c4914..5eac449 100644
--- a/src/app/commons/services/alert/service_spec.js
+++ b/src/app/commons/services/alert/service_spec.ts
@@ -1,6 +1,6 @@
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe(`module: ${module}`, () => {
diff --git a/src/app/commons/services/config.js b/src/app/commons/services/config.ts
similarity index 100%
rename from src/app/commons/services/config.js
rename to src/app/commons/services/config.ts
diff --git a/src/app/commons/services/confirm/service.js b/src/app/commons/services/confirm/service.ts
similarity index 62%
rename from src/app/commons/services/confirm/service.js
rename to src/app/commons/services/confirm/service.ts
index d030801..c3ddd8a 100644
--- a/src/app/commons/services/confirm/service.js
+++ b/src/app/commons/services/confirm/service.ts
@@ -1,4 +1,4 @@
-export default function($window) {
+export default function($window: ng.IWindowService) {
'ngInject';
return function(message) {
diff --git a/src/app/commons/services/confirm/service_spec.js b/src/app/commons/services/confirm/service_spec.ts
similarity index 87%
rename from src/app/commons/services/confirm/service_spec.js
rename to src/app/commons/services/confirm/service_spec.ts
index e30443f..27215bd 100644
--- a/src/app/commons/services/confirm/service_spec.js
+++ b/src/app/commons/services/confirm/service_spec.ts
@@ -1,6 +1,7 @@
+import * as angular from 'angular';
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe(`module: ${module}`, () => {
diff --git a/src/app/config.js b/src/app/config.ts
similarity index 85%
rename from src/app/config.js
rename to src/app/config.ts
index b0061a9..82340dc 100644
--- a/src/app/config.js
+++ b/src/app/config.ts
@@ -1,5 +1,3 @@
-import template404 from './404.html';
-
export function router($urlMatcherFactoryProvider, $urlRouterProvider) {
'ngInject';
@@ -12,7 +10,7 @@ export function notFoundState($stateProvider, $urlRouterProvider) {
$stateProvider
.state('404', {
- template: template404
+ template: require('./404.html')
});
$urlRouterProvider.otherwise(($injector) => {
diff --git a/src/app/contacts/components/config.js b/src/app/contacts/components/config.ts
similarity index 100%
rename from src/app/contacts/components/config.js
rename to src/app/contacts/components/config.ts
diff --git a/src/app/contacts/components/contact_form/component.js b/src/app/contacts/components/contact_form/component.ts
similarity index 75%
rename from src/app/contacts/components/contact_form/component.js
rename to src/app/contacts/components/contact_form/component.ts
index fdf4e6a..922bb5a 100644
--- a/src/app/contacts/components/contact_form/component.js
+++ b/src/app/contacts/components/contact_form/component.ts
@@ -1,5 +1,4 @@
import controller from './controller';
-import template from './template.html';
export default {
bindings: {
@@ -7,5 +6,5 @@ export default {
onSubmit: '&'
},
controller: controller,
- template
+ template: require('./template.html')
};
diff --git a/src/app/contacts/components/contact_form/component_spec.js b/src/app/contacts/components/contact_form/component_spec.ts
similarity index 97%
rename from src/app/contacts/components/contact_form/component_spec.js
rename to src/app/contacts/components/contact_form/component_spec.ts
index 5f2caeb..68deb86 100644
--- a/src/app/contacts/components/contact_form/component_spec.js
+++ b/src/app/contacts/components/contact_form/component_spec.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
+import * as angular from 'angular';
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe(`module: ${module}`, () => {
diff --git a/src/app/contacts/components/contact_form/controller.js b/src/app/contacts/components/contact_form/controller.ts
similarity index 75%
rename from src/app/contacts/components/contact_form/controller.js
rename to src/app/contacts/components/contact_form/controller.ts
index 2dcabea..ffc99eb 100644
--- a/src/app/contacts/components/contact_form/controller.js
+++ b/src/app/contacts/components/contact_form/controller.ts
@@ -1,10 +1,15 @@
-import angular from 'angular';
+import * as angular from 'angular';
export default class {
- constructor($q) {
+ contact: any;
+ originalContact: any;
+ onSubmit: Function;
+
+ saving: boolean;
+
+ constructor(private $q) {
'ngInject';
- this.$q = $q;
this.saving = false;
}
diff --git a/src/app/contacts/components/favourite_button/component.js b/src/app/contacts/components/favourite_button/component.ts
similarity index 68%
rename from src/app/contacts/components/favourite_button/component.js
rename to src/app/contacts/components/favourite_button/component.ts
index e9151e8..d7650b7 100644
--- a/src/app/contacts/components/favourite_button/component.js
+++ b/src/app/contacts/components/favourite_button/component.ts
@@ -1,10 +1,9 @@
import controller from './controller';
-import template from './template.html';
export default {
bindings: {
contact: '='
},
controller,
- template
+ template: require('./template.html')
};
diff --git a/src/app/contacts/components/favourite_button/component_spec.js b/src/app/contacts/components/favourite_button/component_spec.ts
similarity index 96%
rename from src/app/contacts/components/favourite_button/component_spec.js
rename to src/app/contacts/components/favourite_button/component_spec.ts
index 3eedaee..a90d3fa 100644
--- a/src/app/contacts/components/favourite_button/component_spec.js
+++ b/src/app/contacts/components/favourite_button/component_spec.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
+import * as angular from 'angular';
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe(`module: ${module}`, () => {
diff --git a/src/app/contacts/components/favourite_button/controller.js b/src/app/contacts/components/favourite_button/controller.ts
similarity index 88%
rename from src/app/contacts/components/favourite_button/controller.js
rename to src/app/contacts/components/favourite_button/controller.ts
index 05b9e5c..fe1680c 100644
--- a/src/app/contacts/components/favourite_button/controller.js
+++ b/src/app/contacts/components/favourite_button/controller.ts
@@ -1,5 +1,8 @@
export default class {
+ contact: any;
+ saving: boolean;
+
$onInit() {
this.saving = false;
}
diff --git a/src/app/contacts/components/favourite_button/controller_spec.js b/src/app/contacts/components/favourite_button/controller_spec.ts
similarity index 95%
rename from src/app/contacts/components/favourite_button/controller_spec.js
rename to src/app/contacts/components/favourite_button/controller_spec.ts
index 971e35d..e4e955a 100644
--- a/src/app/contacts/components/favourite_button/controller_spec.js
+++ b/src/app/contacts/components/favourite_button/controller_spec.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
+import * as angular from 'angular';
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe(`module: ${module}`, () => {
diff --git a/src/app/contacts/module.js b/src/app/contacts/module.ts
similarity index 73%
rename from src/app/contacts/module.js
rename to src/app/contacts/module.ts
index e55a873..d35a7fa 100644
--- a/src/app/contacts/module.js
+++ b/src/app/contacts/module.ts
@@ -1,6 +1,6 @@
-import angular from 'angular';
-import angularMessages from 'angular-messages';
-import angularResource from 'angular-resource';
+import * as angular from 'angular';
+import * as angularMessages from 'angular-messages';
+import * as angularResource from 'angular-resource';
import appCommons from '../commons/module';
import components from './components/config';
import services from './services/config';
diff --git a/src/app/contacts/services/config.js b/src/app/contacts/services/config.ts
similarity index 100%
rename from src/app/contacts/services/config.js
rename to src/app/contacts/services/config.ts
diff --git a/src/app/contacts/services/contact/factory.js b/src/app/contacts/services/contact/factory.ts
similarity index 95%
rename from src/app/contacts/services/contact/factory.js
rename to src/app/contacts/services/contact/factory.ts
index c091e2c..b095d1f 100644
--- a/src/app/contacts/services/contact/factory.js
+++ b/src/app/contacts/services/contact/factory.ts
@@ -1,4 +1,4 @@
-import angular from 'angular';
+import * as angular from 'angular';
import { extend } from '../../../utils';
export default function($resource) {
diff --git a/src/app/contacts/services/contact/factory_spec.js b/src/app/contacts/services/contact/factory_spec.ts
similarity index 100%
rename from src/app/contacts/services/contact/factory_spec.js
rename to src/app/contacts/services/contact/factory_spec.ts
diff --git a/src/app/contacts/states/config.js b/src/app/contacts/states/config.ts
similarity index 100%
rename from src/app/contacts/states/config.js
rename to src/app/contacts/states/config.ts
diff --git a/src/app/contacts/states/edit/controller.js b/src/app/contacts/states/edit/controller.ts
similarity index 79%
rename from src/app/contacts/states/edit/controller.js
rename to src/app/contacts/states/edit/controller.ts
index a00dd51..a1cb590 100644
--- a/src/app/contacts/states/edit/controller.js
+++ b/src/app/contacts/states/edit/controller.ts
@@ -1,10 +1,9 @@
export default class {
- constructor($state, toastr, contact) {
- 'ngInject';
+ contact: any;
- this.$state = $state;
- this.toastr = toastr;
+ constructor(private $state, private toastr, contact) {
+ 'ngInject';
this.contact = contact;
}
diff --git a/src/app/contacts/states/edit/controller_spec.js b/src/app/contacts/states/edit/controller_spec.ts
similarity index 97%
rename from src/app/contacts/states/edit/controller_spec.js
rename to src/app/contacts/states/edit/controller_spec.ts
index 1022e50..9d4bf88 100644
--- a/src/app/contacts/states/edit/controller_spec.js
+++ b/src/app/contacts/states/edit/controller_spec.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
+import * as angular from 'angular';
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
import toastrMockModule from '../../../../specs/toastr_mock_module';
describe(`module: ${module}`, () => {
diff --git a/src/app/contacts/states/edit/state.js b/src/app/contacts/states/edit/state.ts
similarity index 85%
rename from src/app/contacts/states/edit/state.js
rename to src/app/contacts/states/edit/state.ts
index dceb663..e50f1cd 100644
--- a/src/app/contacts/states/edit/state.js
+++ b/src/app/contacts/states/edit/state.ts
@@ -1,5 +1,4 @@
import controller from './controller';
-import template from './template.html';
function contact($stateParams, Contact) {
'ngInject';
@@ -18,6 +17,6 @@ export default {
contact
},
- template,
+ template: require('./template.html'),
url: '/:id/edit'
};
diff --git a/src/app/contacts/states/edit/state_spec.js b/src/app/contacts/states/edit/state_spec.ts
similarity index 100%
rename from src/app/contacts/states/edit/state_spec.js
rename to src/app/contacts/states/edit/state_spec.ts
diff --git a/src/app/contacts/states/list/controller.js b/src/app/contacts/states/list/controller.ts
similarity index 80%
rename from src/app/contacts/states/list/controller.js
rename to src/app/contacts/states/list/controller.ts
index 38bb315..3dd2fdd 100644
--- a/src/app/contacts/states/list/controller.js
+++ b/src/app/contacts/states/list/controller.ts
@@ -1,5 +1,7 @@
export default class {
+ contacts: Array;
+
constructor(contacts) {
'ngInject';
diff --git a/src/app/contacts/states/list/controller_spec.js b/src/app/contacts/states/list/controller_spec.ts
similarity index 94%
rename from src/app/contacts/states/list/controller_spec.js
rename to src/app/contacts/states/list/controller_spec.ts
index c6f887f..5e533fa 100644
--- a/src/app/contacts/states/list/controller_spec.js
+++ b/src/app/contacts/states/list/controller_spec.ts
@@ -23,7 +23,7 @@ describe(`module: ${module}`, () => {
}));
it('has an array of contacts', () => {
- expect(ctrl.contacts).to.be.an.array;
+ expect(ctrl.contacts).to.be.an.instanceOf(Array);
expect(ctrl.contacts).to.have.length(2);
expect(ctrl.contacts[0]).to.have.property('id', 1);
diff --git a/src/app/contacts/states/list/state.js b/src/app/contacts/states/list/state.ts
similarity index 82%
rename from src/app/contacts/states/list/state.js
rename to src/app/contacts/states/list/state.ts
index 21b8805..cefa55c 100644
--- a/src/app/contacts/states/list/state.js
+++ b/src/app/contacts/states/list/state.ts
@@ -1,5 +1,4 @@
import controller from './controller';
-import template from './template.html';
function contacts(Contact) {
'ngInject';
@@ -16,6 +15,6 @@ export default {
contacts
},
- template,
+ template: require('./template.html'),
url: '/'
};
diff --git a/src/app/contacts/states/list/state_spec.js b/src/app/contacts/states/list/state_spec.ts
similarity index 94%
rename from src/app/contacts/states/list/state_spec.js
rename to src/app/contacts/states/list/state_spec.ts
index 1d905b7..90df207 100644
--- a/src/app/contacts/states/list/state_spec.js
+++ b/src/app/contacts/states/list/state_spec.ts
@@ -30,7 +30,7 @@ describe(`module: ${module}`, () => {
]});
$resolve.resolve(state.resolve).then(({ contacts }) => {
- expect(contacts).to.be.an.array;
+ expect(contacts).to.be.an.instanceOf(Array);
expect(contacts).to.have.length(2);
expect(contacts[0]).to.have.property('id', 10);
expect(contacts[1]).to.have.property('id', 11);
diff --git a/src/app/contacts/states/new/controller.js b/src/app/contacts/states/new/controller.ts
similarity index 79%
rename from src/app/contacts/states/new/controller.js
rename to src/app/contacts/states/new/controller.ts
index e8ca13e..a0f9bcb 100644
--- a/src/app/contacts/states/new/controller.js
+++ b/src/app/contacts/states/new/controller.ts
@@ -1,10 +1,9 @@
export default class {
- constructor($state, toastr, contact) {
- 'ngInject';
+ contact: any;
- this.$state = $state;
- this.toastr = toastr;
+ constructor(private $state, private toastr, contact) {
+ 'ngInject';
this.contact = contact;
}
diff --git a/src/app/contacts/states/new/controller_spec.js b/src/app/contacts/states/new/controller_spec.ts
similarity index 97%
rename from src/app/contacts/states/new/controller_spec.js
rename to src/app/contacts/states/new/controller_spec.ts
index 8bf1104..897af20 100644
--- a/src/app/contacts/states/new/controller_spec.js
+++ b/src/app/contacts/states/new/controller_spec.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
+import * as angular from 'angular';
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
import toastrMockModule from '../../../../specs/toastr_mock_module';
describe(`module: ${module}`, () => {
diff --git a/src/app/contacts/states/new/state.js b/src/app/contacts/states/new/state.ts
similarity index 82%
rename from src/app/contacts/states/new/state.js
rename to src/app/contacts/states/new/state.ts
index 7b2239a..8c6ee05 100644
--- a/src/app/contacts/states/new/state.js
+++ b/src/app/contacts/states/new/state.ts
@@ -1,5 +1,4 @@
import controller from './controller';
-import template from './template.html';
function contact(Contact) {
'ngInject';
@@ -16,6 +15,6 @@ export default {
contact
},
- template,
+ template: require('./template.html'),
url: '/new'
};
diff --git a/src/app/contacts/states/new/state_spec.js b/src/app/contacts/states/new/state_spec.ts
similarity index 100%
rename from src/app/contacts/states/new/state_spec.js
rename to src/app/contacts/states/new/state_spec.ts
diff --git a/src/app/contacts/states/show/controller.js b/src/app/contacts/states/show/controller.ts
similarity index 71%
rename from src/app/contacts/states/show/controller.js
rename to src/app/contacts/states/show/controller.ts
index f8372e8..5cdadd3 100644
--- a/src/app/contacts/states/show/controller.js
+++ b/src/app/contacts/states/show/controller.ts
@@ -1,11 +1,9 @@
export default class {
- constructor($state, confirm, toastr, contact) {
- 'ngInject';
+ contact: any;
- this.$state = $state;
- this.confirm = confirm;
- this.toastr = toastr;
+ constructor(private $state, private confirm, private toastr, contact) {
+ 'ngInject';
this.contact = contact;
}
diff --git a/src/app/contacts/states/show/controller_spec.js b/src/app/contacts/states/show/controller_spec.ts
similarity index 98%
rename from src/app/contacts/states/show/controller_spec.js
rename to src/app/contacts/states/show/controller_spec.ts
index 9e27a53..32c9794 100644
--- a/src/app/contacts/states/show/controller_spec.js
+++ b/src/app/contacts/states/show/controller_spec.ts
@@ -1,6 +1,6 @@
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
import toastrMockModule from '../../../../specs/toastr_mock_module';
describe(`module: ${module}`, () => {
diff --git a/src/app/contacts/states/show/state.js b/src/app/contacts/states/show/state.ts
similarity index 85%
rename from src/app/contacts/states/show/state.js
rename to src/app/contacts/states/show/state.ts
index 55b7acd..5ac8b4c 100644
--- a/src/app/contacts/states/show/state.js
+++ b/src/app/contacts/states/show/state.ts
@@ -1,5 +1,4 @@
import controller from './controller';
-import template from './template.html';
function contact($stateParams, Contact) {
'ngInject';
@@ -18,6 +17,6 @@ export default {
contact
},
- template,
+ template: require('./template.html'),
url: '/:id'
};
diff --git a/src/app/contacts/states/show/state_spec.js b/src/app/contacts/states/show/state_spec.ts
similarity index 100%
rename from src/app/contacts/states/show/state_spec.js
rename to src/app/contacts/states/show/state_spec.ts
diff --git a/src/app/home/module.js b/src/app/home/module.ts
similarity index 86%
rename from src/app/home/module.js
rename to src/app/home/module.ts
index dc0acd5..786f7e3 100644
--- a/src/app/home/module.js
+++ b/src/app/home/module.ts
@@ -1,7 +1,7 @@
-import angular from 'angular';
-import commonsModule from '../commons/module';
+import * as angular from 'angular';
import states from './states/config';
import uiRouter from 'angular-ui-router';
+import commonsModule from '../commons/module';
export default angular.module('app.home', [
uiRouter,
diff --git a/src/app/home/states/config.js b/src/app/home/states/config.ts
similarity index 100%
rename from src/app/home/states/config.js
rename to src/app/home/states/config.ts
diff --git a/src/app/home/states/main/controller.js b/src/app/home/states/main/controller.ts
similarity index 72%
rename from src/app/home/states/main/controller.js
rename to src/app/home/states/main/controller.ts
index e6b6227..a027ffc 100644
--- a/src/app/home/states/main/controller.js
+++ b/src/app/home/states/main/controller.ts
@@ -1,9 +1,10 @@
export default class {
- constructor(alert) {
+ message: string;
+
+ constructor(private alert) {
'ngInject';
- this.alert = alert;
this.message = 'Hello World!';
}
diff --git a/src/app/home/states/main/controller_spec.js b/src/app/home/states/main/controller_spec.ts
similarity index 95%
rename from src/app/home/states/main/controller_spec.js
rename to src/app/home/states/main/controller_spec.ts
index 60d1ac7..ce00150 100644
--- a/src/app/home/states/main/controller_spec.js
+++ b/src/app/home/states/main/controller_spec.ts
@@ -1,6 +1,6 @@
import { expect } from 'chai';
import module from '../../module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe(`module: ${module}`, () => {
diff --git a/src/app/home/states/main/state.js b/src/app/home/states/main/state.ts
similarity index 71%
rename from src/app/home/states/main/state.js
rename to src/app/home/states/main/state.ts
index fe65039..246035c 100644
--- a/src/app/home/states/main/state.js
+++ b/src/app/home/states/main/state.ts
@@ -1,5 +1,4 @@
import controller from './controller';
-import template from './template.html';
export default {
name: 'home',
@@ -7,6 +6,6 @@ export default {
controller,
controllerAs: 'ctrl',
- template,
+ template: require('./template.html'),
url: '/'
};
diff --git a/src/app/home/states/main/state_spec.js b/src/app/home/states/main/state_spec.ts
similarity index 100%
rename from src/app/home/states/main/state_spec.js
rename to src/app/home/states/main/state_spec.ts
diff --git a/src/app/module.js b/src/app/module.ts
similarity index 78%
rename from src/app/module.js
rename to src/app/module.ts
index 277e938..0e7f716 100644
--- a/src/app/module.js
+++ b/src/app/module.ts
@@ -1,14 +1,15 @@
import { notFoundState, router } from './config';
-import angular from 'angular';
-import angularAnimate from 'angular-animate';
-import angularLoadingBar from 'angular-loading-bar';
+import * as angular from 'angular';
+import * as angularAnimate from 'angular-animate';
+import * as angularLoadingBar from 'angular-loading-bar';
import appAbout from './about/module';
import appCommons from './commons/module';
import appContacts from './contacts/module';
import appHome from './home/module';
-import buildSignature from '../../build_signature_loader!./build_signature.tpl';
import uiRouter from 'angular-ui-router';
+const buildSignature = require('../../build_signature_loader!./build_signature.tpl')
+
function stateErrorsHandler($log, $rootScope, $state) {
'ngInject';
diff --git a/src/app/module_spec.js b/src/app/module_spec.ts
similarity index 92%
rename from src/app/module_spec.js
rename to src/app/module_spec.ts
index 8e7004a..c23ef8e 100644
--- a/src/app/module_spec.js
+++ b/src/app/module_spec.ts
@@ -1,6 +1,7 @@
+import * as angular from 'angular';
import { expect } from 'chai';
import module from './module';
-import sinon from 'sinon';
+import * as sinon from 'sinon';
describe(`module: ${module}`, () => {
diff --git a/src/app/utils.js b/src/app/utils.ts
similarity index 100%
rename from src/app/utils.js
rename to src/app/utils.ts
diff --git a/src/app/utils_spec.js b/src/app/utils_spec.ts
similarity index 98%
rename from src/app/utils_spec.js
rename to src/app/utils_spec.ts
index db9da3c..03469e1 100644
--- a/src/app/utils_spec.js
+++ b/src/app/utils_spec.ts
@@ -5,6 +5,8 @@ describe('.extend', () => {
class Dolphin {
+ name: string;
+
constructor(name) {
this.name = name;
}
diff --git a/src/specs/toastr_mock_module.js b/src/specs/toastr_mock_module.ts
similarity index 54%
rename from src/specs/toastr_mock_module.js
rename to src/specs/toastr_mock_module.ts
index c1e77b2..1ae6cd8 100644
--- a/src/specs/toastr_mock_module.js
+++ b/src/specs/toastr_mock_module.ts
@@ -1,5 +1,6 @@
-import sinon from 'sinon';
-import toastr from 'angular-toastr';
+import * as angular from 'angular';
+import * as sinon from 'sinon';
+import * as toastr from 'angular-toastr';
export default angular.module('toastr.mock', [toastr]).decorator('toastr', ($delegate) => {
return sinon.stub($delegate);
diff --git a/src/typings/angular-loading-bar.d.ts b/src/typings/angular-loading-bar.d.ts
new file mode 100644
index 0000000..49b4f16
--- /dev/null
+++ b/src/typings/angular-loading-bar.d.ts
@@ -0,0 +1,4 @@
+declare module 'angular-loading-bar' {
+ var _: string;
+ export = _;
+}
diff --git a/src/typings/angular-messages.d.ts b/src/typings/angular-messages.d.ts
new file mode 100644
index 0000000..b576b20
--- /dev/null
+++ b/src/typings/angular-messages.d.ts
@@ -0,0 +1,4 @@
+declare module 'angular-messages' {
+ var _: string;
+ export = _;
+}
diff --git a/src/typings/angular-toastr.d.ts b/src/typings/angular-toastr.d.ts
new file mode 100644
index 0000000..436429f
--- /dev/null
+++ b/src/typings/angular-toastr.d.ts
@@ -0,0 +1,4 @@
+declare module 'angular-toastr' {
+ var _: string;
+ export = _;
+}
diff --git a/src/typings/require.d.ts b/src/typings/require.d.ts
new file mode 100644
index 0000000..0ec43f7
--- /dev/null
+++ b/src/typings/require.d.ts
@@ -0,0 +1,5 @@
+ declare var require: {
+ (path: string): T;
+ (paths: string[], callback: (...modules: any[]) => void): void;
+ ensure: (paths: string[], callback: (require: (path: string) => T) => void) => void;
+};
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..d8c5060
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "module": "commonjs",
+ "noImplicitAny": false
+ },
+ "files": [
+ "typings/index.d.ts",
+ "src/app.ts"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
+}
diff --git a/typings.json b/typings.json
new file mode 100644
index 0000000..16cfea8
--- /dev/null
+++ b/typings.json
@@ -0,0 +1,15 @@
+{
+ "dependencies": {},
+ "globalDependencies": {
+ "angular": "registry:dt/angular#1.5.0+20160909133806",
+ "angular-animate": "registry:dt/angular-animate#1.5.0+20160709061515",
+ "angular-mocks": "registry:dt/angular-mocks#1.5.0+20160608104721",
+ "angular-resource": "registry:dt/angular-resource#1.5.0+20160914132003",
+ "chai": "registry:dt/chai#3.4.0+20160601211834",
+ "core-js": "registry:dt/core-js#0.0.0+20160914114559",
+ "jquery": "registry:dt/jquery#1.10.0+20160908203239",
+ "lodash": "registry:dt/lodash#4.14.0+20160830145422",
+ "mocha": "registry:dt/mocha#2.2.5+20160720003353",
+ "sinon": "registry:dt/sinon#1.16.0+20160517064723"
+ }
+}
diff --git a/webpack-test.config.js b/webpack-test.config.js
index 6a4a8f1..36e7f55 100644
--- a/webpack-test.config.js
+++ b/webpack-test.config.js
@@ -1,60 +1,41 @@
-const combineLoaders = require('webpack-combine-loaders');
-const path = require('path');
const webpack = require('webpack');
-module.exports = function({ singleRun }) {
- const preLoaders = [];
+module.exports = {
+ resolve: {
+ extensions: ['', '.webpack.js', '.web.js', '.ts', '.js'],
+ alias: { sinon: 'sinon/pkg/sinon.js' }
+ },
- // Execute ESLint in tdd mode
- if (!singleRun) {
- preLoaders.push({
- test: /\.js$/,
- loader: 'eslint',
- exclude: /node_modules/
- });
- }
-
- return {
- plugins: [
- new webpack.ProvidePlugin({
- 'window.$': 'jquery',
- 'window.jQuery': 'jquery'
- })
- ],
-
- module: {
- preLoaders,
+ plugins: [
+ new webpack.ProvidePlugin({
+ 'window.$': 'jquery',
+ 'window.jQuery': 'jquery'
+ })
+ ],
- loaders: [{
- test: /\.js$/,
- exclude: /node_modules/,
- loader: combineLoaders([{
- loader: 'ng-annotate'
- }, {
- loader: 'babel',
- query: {
- extends: path.join(__dirname, '.babelrc.karma')
- }
- }])
- }, {
- test: /\.html$/,
- loader: 'html'
- }, {
- test: /sinon\.js$/,
- loader: 'imports?define=>false,require=>false'
- }, {
- test: /\.scss/,
- loader: 'null'
- }, {
- test: /\.jpg$/,
- loader: 'null'
- }]
- },
-
- resolve: {
- alias: { sinon: 'sinon/pkg/sinon.js' }
- },
+ module: {
+ loaders: [{
+ test: /\.js$/,
+ exclude: /node_modules/,
+ loader: 'babel'
+ }, {
+ test: /\.ts$/,
+ exclude: /node_modules/,
+ loader: 'ng-annotate!ts'
+ }, {
+ test: /\.html$/,
+ loader: 'html'
+ }, {
+ test: /sinon\.js$/,
+ loader: 'imports?define=>false,require=>false'
+ }, {
+ test: /\.scss/,
+ loader: 'null'
+ }, {
+ test: /\.jpg$/,
+ loader: 'null'
+ }]
+ },
- devtool: 'inline-source-map'
- };
+ devtool: 'inline-source-map'
};
diff --git a/webpack.config.js b/webpack.config.js
index e7420a7..ad5c4b9 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,7 +1,6 @@
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
-const combineLoaders = require('webpack-combine-loaders');
const path = require('path');
const webpack = require('webpack');
@@ -21,7 +20,7 @@ module.exports = {
'angular-toastr',
'angular-ui-router'
],
- app: ['./src/app.js']
+ app: ['./src/app.ts']
},
output: {
@@ -30,6 +29,10 @@ module.exports = {
chunkFilename: CHUNK_FILENAME
},
+ resolve: {
+ extensions: ['', '.webpack.js', '.web.js', '.ts', '.js']
+ },
+
plugins: [
new CleanWebpackPlugin(BUILD_DIRECTORY, {
verbose: true
@@ -52,16 +55,9 @@ module.exports = {
module: {
loaders: [{
- test: /\.js$/,
+ test: /\.ts$/,
exclude: /node_modules/,
- loader: combineLoaders([{
- loader: 'ng-annotate'
- }, {
- loader: 'babel',
- query: {
- extends: path.join(__dirname, '.babelrc')
- }
- }])
+ loader: 'ng-annotate!ts-loader'
}, {
test: /\.html$/,
loader: 'html'
@@ -107,5 +103,5 @@ module.exports = {
}
},
- devtool: 'eval-source-map '
+ devtool: 'eval-source-map'
};