Skip to content

Commit 74ad062

Browse files
committed
Add typescript support
1 parent 01b3b93 commit 74ad062

10 files changed

Lines changed: 550 additions & 59 deletions

File tree

addon/index.js renamed to addon/index.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
/* global requirejs:false, require:false */
2-
function resolveInitializer(moduleName) {
1+
import Engine from '@ember/engine';
2+
import require from 'require';
3+
4+
function resolveInitializer(moduleName: string) {
35
var module = require(moduleName, null, null, true);
46
if (!module) {
57
throw new Error(moduleName + ' must export an initializer.');
@@ -11,30 +13,33 @@ function resolveInitializer(moduleName) {
1113
return initializer;
1214
}
1315

14-
function registerInitializers(app, moduleNames) {
16+
function registerInitializers(app: typeof Engine, moduleNames: string[]) {
1517
for (var i = 0; i < moduleNames.length; i++) {
1618
app.initializer(resolveInitializer(moduleNames[i]));
1719
}
1820
}
1921

20-
function registerInstanceInitializers(app, moduleNames) {
22+
function registerInstanceInitializers(app: typeof Engine, moduleNames: string[]) {
2123
for (var i = 0; i < moduleNames.length; i++) {
2224
app.instanceInitializer(resolveInitializer(moduleNames[i]));
2325
}
2426
}
2527

26-
function _endsWith(str, suffix) {
28+
function _endsWith(str: string, suffix: string): boolean {
2729
return str.indexOf(suffix, str.length - suffix.length) !== -1;
2830
}
2931

30-
export default function (app, prefix) {
32+
/**
33+
* Configure your application as it boots
34+
*/
35+
export default function loadInitializers(app: typeof Engine, prefix: string): void {
3136
var initializerPrefix = prefix + '/initializers/';
3237
var instanceInitializerPrefix = prefix + '/instance-initializers/';
3338
var initializers = [];
3439
var instanceInitializers = [];
3540
// this is 2 pass because generally the first pass is the problem
3641
// and is reduced, and resolveInitializer has potential to deopt
37-
var moduleNames = Object.keys(requirejs._eak_seen);
42+
var moduleNames = Object.keys(self.requirejs._eak_seen);
3843
for (var i = 0; i < moduleNames.length; i++) {
3944
var moduleName = moduleNames[i];
4045
if (moduleName.lastIndexOf(initializerPrefix, 0) === 0) {

package.json

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,32 @@
3333
"lint:js": "eslint .",
3434
"start": "ember serve",
3535
"test": "ember test",
36-
"test:all": "ember try:each"
36+
"test:all": "ember try:each",
37+
"prepublishOnly": "ember ts:precompile",
38+
"postpublish": "ember ts:clean"
3739
},
3840
"dependencies": {
39-
"ember-cli-babel": "^7.9.0"
41+
"ember-cli-babel": "^7.9.0",
42+
"ember-cli-typescript": "^2.0.0"
4043
},
4144
"devDependencies": {
4245
"@ember/optional-features": "^0.7.0",
46+
"@types/ember": "^3.0.29",
47+
"@types/ember-qunit": "^3.4.6",
48+
"@types/ember-resolver": "^5.0.6",
49+
"@types/ember-test-helpers": "^1.0.5",
50+
"@types/ember-testing-helpers": "^0.0.3",
51+
"@types/ember__engine": "^3.0.4",
52+
"@types/ember__test-helpers": "^0.7.8",
53+
"@types/qunit": "^2.5.4",
54+
"@types/rsvp": "^4.0.2",
4355
"ember-cli": "~3.9.0",
4456
"ember-cli-dependency-checker": "^3.2.0",
4557
"ember-cli-eslint": "^4.2.3",
4658
"ember-cli-htmlbars": "^3.1.0",
4759
"ember-cli-htmlbars-inline-precompile": "^2.0.0",
4860
"ember-cli-inject-live-reload": "^2.0.1",
61+
"ember-cli-typescript-blueprints": "^2.0.0",
4962
"ember-disable-prototype-extensions": "^1.1.3",
5063
"ember-maybe-import-regenerator": "^0.1.6",
5164
"ember-qunit": "^4.5.1",
@@ -56,7 +69,8 @@
5669
"eslint-plugin-ember": "^6.10.0",
5770
"eslint-plugin-node": "^8.0.0",
5871
"lerna-changelog": "^0.8.2",
59-
"loader.js": "^4.7.0"
72+
"loader.js": "^4.7.0",
73+
"typescript": "^3.3.3333"
6074
},
6175
"ember-addon": {
6276
"configPath": "tests/dummy/config"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@ import Resolver from './resolver';
33
import loadInitializers from 'ember-load-initializers';
44
import config from './config/environment';
55

6+
declare global {
7+
interface Window {
8+
fooInitializeWasCalled: any;
9+
barInitializeWasCalled: any;
10+
}
11+
}
12+
613
const App = Application.extend({
714
modulePrefix: config.modulePrefix,
815
podModulePrefix: config.podModulePrefix,
916
Resolver,
1017
destroy() {
1118
this._super(...arguments);
19+
1220
delete self.fooInitializeWasCalled;
1321
delete self.barInitializeWasCalled;
1422
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
export default config;
2+
3+
/**
4+
* Type declarations for
5+
* import config from './config/environment'
6+
*
7+
* For now these need to be managed by the developer
8+
* since different ember addons can materialize new entries.
9+
*/
10+
declare const config: {
11+
environment: any;
12+
modulePrefix: string;
13+
podModulePrefix: string;
14+
locationType: string;
15+
rootURL: string;
16+
};

tsconfig.json

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es2017",
4+
"allowJs": true,
5+
"moduleResolution": "node",
6+
"allowSyntheticDefaultImports": true,
7+
"noImplicitAny": true,
8+
"noImplicitThis": true,
9+
"alwaysStrict": true,
10+
"strictNullChecks": true,
11+
"strictPropertyInitialization": true,
12+
"noFallthroughCasesInSwitch": true,
13+
"noUnusedLocals": true,
14+
"noUnusedParameters": true,
15+
"noImplicitReturns": true,
16+
"noEmitOnError": false,
17+
"noEmit": true,
18+
"inlineSourceMap": true,
19+
"inlineSources": true,
20+
"baseUrl": ".",
21+
"module": "es6",
22+
"paths": {
23+
"dummy/tests/*": [
24+
"tests/*"
25+
],
26+
"dummy/*": [
27+
"tests/dummy/app/*",
28+
"app/*"
29+
],
30+
"ember-load-initializers": [
31+
"addon"
32+
],
33+
"ember-load-initializers/*": [
34+
"addon/*"
35+
],
36+
"ember-load-initializers/test-support": [
37+
"addon-test-support"
38+
],
39+
"ember-load-initializers/test-support/*": [
40+
"addon-test-support/*"
41+
],
42+
"*": [
43+
"types/*"
44+
]
45+
}
46+
},
47+
"include": [
48+
"app/**/*",
49+
"addon/**/*",
50+
"tests/**/*",
51+
"types/**/*",
52+
"test-support/**/*",
53+
"addon-test-support/**/*"
54+
]
55+
}

types/dummy/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

types/loader.js/index.d.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export {}
2+
3+
declare global {
4+
interface Window {
5+
6+
requirejs: {
7+
_eak_seen: {
8+
[s: string]: any
9+
}
10+
}
11+
}
12+
}

types/loader.js/require.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
declare module 'require' {
2+
function require(moduleName: string, ...args: any[]): any;
3+
4+
export default require;
5+
}

0 commit comments

Comments
 (0)