Skip to content

Commit 71bfaa0

Browse files
chore(typescript): Upgrade project to typescript 2.0
Closes angular-ui#3007
1 parent a201906 commit 71bfaa0

32 files changed

+97
-6525
lines changed

package.json

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "ui-router",
33
"description": "State-based routing for Javascript",
4-
"version": "1.0.0-beta.2",
4+
"version": "1.0.0-beta.3",
55
"scripts": {
66
"test": "npm run test:integrate",
77
"watch": "node_modules/watch/cli.js 'npm run test' src test",
@@ -61,13 +61,17 @@
6161
"@angular/core": "^2.0.0",
6262
"@angular/platform-browser": "^2.0.0",
6363
"@angular/platform-browser-dynamic": "^2.0.0",
64+
"@types/angular": "^1.5.14",
65+
"@types/angular-animate": "^1.5.5",
66+
"@types/angular-mocks": "^1.5.5",
67+
"@types/jasmine": "^2.2.34",
68+
"@types/jquery": "^1.10.31",
69+
"awesome-typescript-loader": "^2.2.4",
6470
"babel-core": "^5.8.14",
6571
"clone": "^1.0.2",
6672
"conventional-changelog": "^1.1.0",
6773
"conventional-changelog-cli": "^1.1.1",
68-
"es6-module-loader": "^0.17.3",
69-
"es6-promise": "^3.0.2",
70-
"es6-shim": "^0.35.0",
74+
"core-js": "^2.4.1",
7175
"glob": "^7.0.5",
7276
"jasmine-core": "^2.4.1",
7377
"karma": "^1.2.0",
@@ -80,16 +84,14 @@
8084
"lodash": "^4.5.1",
8185
"parallelshell": "^2.0.0",
8286
"phantomjs-polyfill": "0.0.1",
83-
"reflect-metadata": "=0.1.2",
8487
"remap-istanbul": "^0.6.3",
8588
"rxjs": "5.0.0-beta.12",
8689
"shelljs": "^0.7.0",
8790
"systemjs": "^0.18.4",
88-
"ts-loader": "^0.8.1",
8991
"tslint": "=2.5.0",
9092
"typedoc": "^0.4.4",
9193
"typedoc-plugin-external-module-name": "^1.0.2",
92-
"typescript": "~1.8.0",
94+
"typescript": "~2.0.2",
9395
"watch": "^0.18.0",
9496
"webpack": "1.x",
9597
"webpack-dev-server": "1.x",

packages/core/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
22
"compilerOptions": { "rootDir": ".", "outDir": ".." },
3-
"files": [ "core.ts", "../typings/es6-shim/es6-shim.d.ts" ]
3+
"files": [ "core.ts" ],
4+
"types": [ "core-js" ]
45
}

packages/core/webpack.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ module.exports = {
3838

3939
module: {
4040
loaders: [
41-
{ test: /\.ts$/, loader: "ts-loader" }
41+
{ test: /\.ts$/, loader: "awesome-typescript-loader" }
4242
]
4343
},
4444

packages/ng1-bower/tsconfig.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
"compilerOptions": { "rootDir": ".", "outDir": "../commonjs" },
33
"files": [
44
"ng1.ts",
5-
"ng1/legacy/stateEvents.ts",
6-
"../typings/es6-shim/es6-shim.d.ts" ,
7-
"../typings/angularjs/angular.d.ts"
5+
"ng1/legacy/stateEvents.ts"
86
]
97
}

packages/ng1-bower/webpack.config.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ module.exports = {
3131
extensions: ['', '.js', '.ts']
3232
},
3333

34+
externals: [ 'angular' ],
35+
3436
plugins: [
3537
new webpack.optimize.UglifyJsPlugin({
3638
include: /\.min\.js$/, minimize: true
@@ -40,7 +42,7 @@ module.exports = {
4042

4143
module: {
4244
loaders: [
43-
{ test: /\.ts$/, loader: "ts-loader" }
45+
{ test: /\.ts$/, loader: "awesome-typescript-loader" }
4446
]
4547
},
4648

packages/ng1/tsconfig.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
"compilerOptions": { "rootDir": ".", "outDir": "../commonjs" },
33
"files": [
44
"ng1.ts",
5-
"ng1/legacy/stateEvents.ts",
6-
"../typings/es6-shim/es6-shim.d.ts" ,
7-
"../typings/angularjs/angular.d.ts"
5+
"ng1/legacy/stateEvents.ts"
86
]
97
}

packages/ng1/webpack.config.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ module.exports = {
3131
extensions: ['', '.js', '.ts']
3232
},
3333

34+
externals: [ 'angular' ],
35+
3436
plugins: [
3537
new webpack.optimize.UglifyJsPlugin({
3638
include: /\.min\.js$/, minimize: true
@@ -40,7 +42,7 @@ module.exports = {
4042

4143
module: {
4244
loaders: [
43-
{ test: /\.ts$/, loader: "ts-loader" }
45+
{ test: /\.ts$/, loader: "awesome-typescript-loader" }
4446
]
4547
},
4648

packages/ng2/tsconfig.json

+2-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"declaration": true,
1111
"sourceMap": true
1212
},
13-
"files": [
14-
"ng2.ts", "../typings/es6-shim/es6-shim.d.ts"
15-
]
13+
"files": [ "ng2.ts" ],
14+
"types": [ "core-js" ]
1615
}

packages/ng2/webpack.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ module.exports = {
3838

3939
module: {
4040
loaders: [
41-
{ test: /\.ts$/, loader: "ts-loader" }
41+
{ test: /\.ts$/, loader: "awesome-typescript-loader" }
4242
]
4343
},
4444

scripts/package.js

+23-20
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,21 @@ function prepPackage(pkgName) {
2020
if (!pkgName) usage();
2121

2222
let paths = {};
23+
let files = { bin: {} };
24+
2325
paths.script = __filename;
2426
paths.scriptdir = __dirname;
25-
paths.basedir = path.resolve(paths.scriptdir, '..');
26-
paths.pkgsrc = path.resolve(paths.basedir, 'packages', pkgName);
27-
paths.build = path.resolve(paths.basedir, `build_packages/${pkgName}`);
28-
29-
let files = {};
30-
files.sources = path.resolve(paths.pkgsrc, "sources.json");
31-
files.pkgfile = path.resolve(paths.pkgsrc, "package.json");
32-
files.bowerfile = path.resolve(paths.pkgsrc, "bower.json");
33-
files.tsconfig = path.resolve(paths.pkgsrc, "tsconfig.json");
34-
files.webpack = path.resolve(paths.pkgsrc, "webpack.config.js");
27+
paths.basedir = path.resolve(paths.scriptdir, '..');
28+
paths.pkgsrc = path.resolve(paths.basedir, 'packages', pkgName);
29+
paths.build = path.resolve(paths.basedir, `build_packages/${pkgName}`);
30+
31+
files.sources = path.resolve(paths.pkgsrc, "sources.json");
32+
files.pkgfile = path.resolve(paths.pkgsrc, "package.json");
33+
files.bowerfile = path.resolve(paths.pkgsrc, "bower.json");
34+
files.tsconfig = path.resolve(paths.pkgsrc, "tsconfig.json");
35+
files.webpack = path.resolve(paths.pkgsrc, "webpack.config.js");
36+
files.bin.webpack = path.resolve(paths.basedir, "node_modules/webpack/bin/webpack.js");
37+
files.bin.tsc = path.resolve(paths.basedir, "node_modules/typescript/bin/tsc");
3538

3639
// Check for some paths and files required to build a package
3740
assertDir(paths.pkgsrc);
@@ -107,22 +110,22 @@ function prepPackage(pkgName) {
107110

108111
// Merge the root tsconfig.json with the tsconfig property of package.config.js
109112
// Write the merged tsconfig.json to the copied source files dir
110-
let baseTsConfigJson = require('../tsconfig.json');
111-
delete baseTsConfigJson.files;
112-
let tsconfigJson = _.merge({}, baseTsConfigJson, JSON.parse(fs.readFileSync(files.tsconfig)));
113-
fs.writeFileSync(path.resolve(paths.srcCopy, 'tsconfig.json'), asJson(tsconfigJson));
113+
let tsconfig = Object.assign({}, require('../tsconfig.json'));
114+
let overrides = JSON.parse(fs.readFileSync(files.tsconfig));
115+
['compilerOptions'].forEach(key => {
116+
Object.assign(tsconfig[key], overrides[key]);
117+
delete overrides[key]
118+
});
119+
Object.assign(tsconfig, overrides);
114120

115-
echo('--> Linking node_modules and typings...');
116-
// In case the source needs typings and node_modules to compile, symlink them
117-
ln('-sf', `${paths.basedir}/typings`, `${paths.build}/typings`);
118-
ln('-sf', `${paths.basedir}/node_modules`, `${paths.srcCopy}/node_modules`);
121+
fs.writeFileSync(path.resolve(paths.srcCopy, 'tsconfig.json'), asJson(tsconfig));
119122

120123
echo('--> Building webpack bundles...');
121124
cd(paths.srcCopy);
122-
exec(`node ./node_modules/webpack/bin/webpack.js`);
125+
exec(`node ${files.bin.webpack}`);
123126

124127
echo('--> Building commonjs and typings using tsc...');
125-
exec(`node ./node_modules/typescript/bin/tsc`);
128+
exec(`node ${files.bin.tsc}`);
126129

127130
echo('<-- done!');
128131
}

src/common/common.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ function _copy(src: Obj, dest: Obj) {
517517
}
518518

519519
/** Naive forEach implementation works with Objects or Arrays */
520-
function _forEach(obj: (any[]|any), cb: Function, _this: Obj) {
520+
function _forEach(obj: (any[]|any), cb: (el, idx?) => void, _this: Obj) {
521521
if (isArray(obj)) return obj.forEach(cb, _this);
522522
Object.keys(obj).forEach(key => cb(obj[key], key));
523523
}

src/common/predicates.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/** Predicates @module common_predicates */ /** */
22
import {and, not, pipe, prop} from "./hof";
3+
import {Predicate} from "./common"; // has or is using
34

45
const toStr = Object.prototype.toString;
56
const tis = (t: string) => (x: any) => typeof(x) === t;

src/common/trace.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const viewConfigString = (viewConfig: ViewConfig) =>
5555
`[ViewConfig#${viewConfig.$id} from '${viewConfig.viewDecl.$context.name || '(root)'}' state]: target ui-view: '${viewConfig.viewDecl.$uiViewName}@${viewConfig.viewDecl.$uiViewContextAnchor}'`;
5656

5757
/** @hidden */
58-
function normalizedCat(input: Category): string {
58+
function normalizedCat(input: Category|string): string {
5959
return isNumber(input) ? Category[input] : Category[Category[input]];
6060
}
6161

@@ -255,4 +255,4 @@ export class Trace {
255255
* ```
256256
*/
257257
let trace = new Trace();
258-
export {trace};
258+
export {trace};

src/ng1/directives/stateDirectives.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*
66
* @preferred @module ng1_directives
77
*/ /** for typedoc */
8+
import * as angular from 'angular';
89
import {Obj, extend, forEach, toJson, tail} from "../../common/common";
910
import {isString, isObject} from "../../common/predicates";
1011
import {UIViewData} from "./viewDirective";

src/ng1/directives/viewDirective.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ import {HookRegOptions} from "../../transition/interface";
1616
import {Ng1Controller, Ng1StateDeclaration} from "../interface";
1717
import {getLocals} from "../services";
1818
import {ViewService} from "../../view/view";
19-
import IAnimateService = angular.IAnimateService;
20-
import IInterpolateService = angular.IInterpolateService;
2119
import {$QLike} from "../../common/coreservices";
2220
import {Obj} from "../../common/common";
21+
22+
import * as angular from 'angular';
23+
import IInterpolateService = angular.IInterpolateService;
2324
import IScope = angular.IScope;
2425
import ITranscludeFunction = angular.ITranscludeFunction;
2526
import IAugmentedJQuery = angular.IAugmentedJQuery;
@@ -280,7 +281,7 @@ function $ViewDirective($view: ViewService, $animate: any, $uiViewScroll: any, $
280281
function updateView(config?: Ng1ViewConfig) {
281282
let newScope = scope.$new();
282283
let animEnter = $q.defer(), animLeave = $q.defer();
283-
284+
284285
let $uiViewData: UIViewData = {
285286
$cfg: config,
286287
$uiView: activeUIView,
@@ -303,7 +304,7 @@ function $ViewDirective($view: ViewService, $animate: any, $uiViewScroll: any, $
303304
$uiViewScroll(clone);
304305
}
305306
});
306-
307+
307308
cleanupLastView();
308309
});
309310

@@ -357,9 +358,9 @@ function $ViewDirectiveFill ($compile: ICompileService, $controller: IController
357358
let locals = resolveCtx && getLocals(resolveCtx);
358359

359360
scope[resolveAs] = locals;
360-
361+
361362
if (controller) {
362-
let controllerInstance = $controller(controller, extend({}, locals, { $scope: scope, $element: $element }));
363+
let controllerInstance = <Ng1Controller> $controller(controller, extend({}, locals, { $scope: scope, $element: $element }));
363364
if (controllerAs) {
364365
scope[controllerAs] = controllerInstance;
365366
scope[controllerAs][resolveAs] = locals;

src/ng1/legacy/stateEvents.ts

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {Transition} from "../../transition/transition";
2525
import IAngularEvent = angular.IAngularEvent;
2626
import {TransitionService} from "../../transition/transitionService";
2727
import {UrlRouter} from "../../url/urlRouter";
28+
import * as angular from 'angular';
2829
import IScope = angular.IScope;
2930
import {HookResult} from "../../transition/interface";
3031

src/ng1/services.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ import {UrlMatcherFactory} from "../url/urlMatcherFactory";
2929
import {getStateHookBuilder} from "./statebuilders/onEnterExitRetain";
3030
import {ResolveContext} from "../resolve/resolveContext";
3131

32+
import * as angular from 'angular';
3233
import IInjectorService = angular.auto.IInjectorService;
3334
import IQService = angular.IQService;
3435
import ILocationProvider = angular.ILocationProvider;
3536
import ILocationService = angular.ILocationService;
36-
import IBrowserService = angular.IBrowserService;
3737
import IHttpService = angular.IHttpService;
3838
import ITemplateCacheService = angular.ITemplateCacheService;
3939
import IScope = angular.IScope;
@@ -165,7 +165,7 @@ function $uiRouter($locationProvider: ILocationProvider) {
165165

166166
// Create a new instance of the Router when the $uiRouterProvider is initialized
167167
router = new UIRouter();
168-
168+
169169
// Apply ng1 specific StateBuilder code for `views`, `resolve`, and `onExit/Retain/Enter` properties
170170
router.stateRegistry.decorator("views", ng1ViewsBuilder);
171171
router.stateRegistry.decorator("onExit", getStateHookBuilder("onExit"));
@@ -186,7 +186,7 @@ function $uiRouter($locationProvider: ILocationProvider) {
186186

187187
this.$get = $get;
188188
$get.$inject = ['$location', '$browser', '$sniffer', '$rootScope', '$http', '$templateCache'];
189-
function $get($location: ILocationService, $browser: IBrowserService, $sniffer: any, $rootScope: IScope, $http: IHttpService, $templateCache: ITemplateCacheService) {
189+
function $get($location: ILocationService, $browser: any, $sniffer: any, $rootScope: IScope, $http: IHttpService, $templateCache: ITemplateCacheService) {
190190

191191
// Bind $locationChangeSuccess to the listeners registered in LocationService.onChange
192192
$rootScope.$on("$locationChangeSuccess", evt => urlListeners.forEach(fn => fn(evt)));
@@ -197,14 +197,14 @@ function $uiRouter($locationProvider: ILocationProvider) {
197197
html5Mode = isObject(html5Mode) ? html5Mode.enabled : html5Mode;
198198
return html5Mode && $sniffer.history;
199199
};
200-
200+
201201
services.location.setUrl = (newUrl: string, replace = false) => {
202-
$location.url(newUrl)
202+
$location.url(newUrl);
203203
if (replace) $location.replace();
204204
};
205205

206206
services.template.get = (url: string) =>
207-
$http.get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}).then(prop("data"));
207+
$http.get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}).then(prop("data")) as any;
208208

209209
// Bind these LocationService functions to $location
210210
bindFunctions($location, services.location, $location, ["replace", "url", "path", "search", "hash"]);
@@ -223,7 +223,7 @@ angular.module('ui.router.init', []).provider("$uiRouter", <any> $uiRouter);
223223
runBlock.$inject = ['$injector', '$q'];
224224
function runBlock($injector: IInjectorService, $q: IQService) {
225225
services.$injector = $injector;
226-
services.$q = $q;
226+
services.$q = <any> $q;
227227
}
228228

229229
angular.module('ui.router.init').run(runBlock);
@@ -419,7 +419,7 @@ var $urlMatcherFactory: UrlMatcherFactory;
419419

420420
/**
421421
* An injectable service used to configure the URL.
422-
*
422+
*
423423
* This service is used to set url mapping options, and create [[UrlMatcher]] objects.
424424
*
425425
* This angular service exposes the [[UrlMatcherFactory]] singleton at config-time.

src/ng1/stateFilters.ts

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import {Obj} from "../common/common";
44
import {StateService} from "../state/stateService";
55
import {StateOrName} from "../state/interface";
6+
import * as angular from 'angular';
7+
68
/**
79
* @ngdoc filter
810
* @name ui.router.state.filter:isState

src/ng1/statebuilders/onEnterExitRetain.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
import {State} from "../../state/stateObject";
33
import {TransitionStateHookFn, HookResult} from "../../transition/interface";
44
import {Transition} from "../../transition/transition";
5-
import IInjectorService = angular.auto.IInjectorService;
65
import {services} from "../../common/coreservices";
76
import {getLocals} from "../services";
87
import {ResolveContext} from "../../resolve/resolveContext";
98
import {extend} from "../../common/common";
109
import {BuilderFunction} from "../../state/stateBuilder";
1110

11+
import * as angular from 'angular';
12+
import IInjectorService = angular.auto.IInjectorService;
13+
1214
/**
1315
* This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,
1416
* `onRetain` callback hooks on a [[Ng1StateDeclaration]].

0 commit comments

Comments
 (0)