diff --git a/types/ember-resolver/ember-resolver-tests.ts b/types/ember-resolver/ember-resolver-tests.ts
index d22a0d31be..6973daeda0 100644
--- a/types/ember-resolver/ember-resolver-tests.ts
+++ b/types/ember-resolver/ember-resolver-tests.ts
@@ -1,5 +1,5 @@
-import Application from '@ember/application';
import EmberResolver from 'ember-resolver';
+import { Ember } from 'ember';
const MyResolver = EmberResolver.extend({
pluralizedTypes: {
@@ -7,6 +7,6 @@ const MyResolver = EmberResolver.extend({
}
});
-const App = Application.extend({
+const App = Ember.Application.extend({
Resolver: MyResolver
});
diff --git a/types/ember-resolver/index.d.ts b/types/ember-resolver/index.d.ts
index 4fe466ae13..f2ede7fe32 100644
--- a/types/ember-resolver/index.d.ts
+++ b/types/ember-resolver/index.d.ts
@@ -5,11 +5,9 @@
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.8
-///
-
-import Resolver from '@ember/application/resolver';
+import Ember from 'ember';
/**
* An Ember `Resolver` implementation used by ember-cli.
*/
-export default class EmberResolver extends Resolver {}
+export default class EmberResolver extends Ember.Resolver {}
diff --git a/types/ember-resolver/v4/ember-resolver-tests.ts b/types/ember-resolver/v4/ember-resolver-tests.ts
index d22a0d31be..db834b1985 100644
--- a/types/ember-resolver/v4/ember-resolver-tests.ts
+++ b/types/ember-resolver/v4/ember-resolver-tests.ts
@@ -1,4 +1,4 @@
-import Application from '@ember/application';
+import Ember from 'ember';
import EmberResolver from 'ember-resolver';
const MyResolver = EmberResolver.extend({
@@ -7,6 +7,6 @@ const MyResolver = EmberResolver.extend({
}
});
-const App = Application.extend({
+const App = Ember.Application.extend({
Resolver: MyResolver
});
diff --git a/types/ember-resolver/v4/index.d.ts b/types/ember-resolver/v4/index.d.ts
index 8047dc1bc2..fd5359cff4 100644
--- a/types/ember-resolver/v4/index.d.ts
+++ b/types/ember-resolver/v4/index.d.ts
@@ -5,11 +5,9 @@
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.4
-///
-
-import Resolver from '@ember/application/resolver';
+import Ember from 'ember';
/**
* An Ember `Resolver` implementation used by ember-cli.
*/
-export default class EmberResolver extends Resolver {}
+export default class EmberResolver extends Ember.Resolver {}
diff --git a/types/ember__application/deprecations.d.ts b/types/ember__application/deprecations.d.ts
new file mode 100644
index 0000000000..608ba5c7f7
--- /dev/null
+++ b/types/ember__application/deprecations.d.ts
@@ -0,0 +1,4 @@
+import Ember from 'ember';
+
+export const deprecate: typeof Ember.deprecate;
+export const deprecateFunc: typeof Ember.deprecateFunc;
diff --git a/types/ember__application/globals-resolver.d.ts b/types/ember__application/globals-resolver.d.ts
new file mode 100644
index 0000000000..e51f4681ed
--- /dev/null
+++ b/types/ember__application/globals-resolver.d.ts
@@ -0,0 +1,3 @@
+import Ember from 'ember';
+
+export default class GlobalsResolver extends Ember.DefaultResolver { }
diff --git a/types/ember__application/index.d.ts b/types/ember__application/index.d.ts
new file mode 100644
index 0000000000..cdef372444
--- /dev/null
+++ b/types/ember__application/index.d.ts
@@ -0,0 +1,13 @@
+// Type definitions for @ember/application 3.0
+// Project: http://emberjs.com/
+// Definitions by: Mike North
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+// TypeScript Version: 2.8
+
+import Ember from 'ember';
+
+export default class Application extends Ember.Application { }
+export const getOwner: typeof Ember.getOwner;
+export const onLoad: typeof Ember.onLoad;
+export const runLoadHooks: typeof Ember.runLoadHooks;
+export const setOwner: typeof Ember.setOwner;
diff --git a/types/ember__application/instance.d.ts b/types/ember__application/instance.d.ts
new file mode 100644
index 0000000000..0d01298d52
--- /dev/null
+++ b/types/ember__application/instance.d.ts
@@ -0,0 +1,3 @@
+import Ember from 'ember';
+
+export default class ApplicationInstance extends Ember.ApplicationInstance { }
diff --git a/types/ember__application/resolver.d.ts b/types/ember__application/resolver.d.ts
new file mode 100644
index 0000000000..a218fcd3e7
--- /dev/null
+++ b/types/ember__application/resolver.d.ts
@@ -0,0 +1,3 @@
+import Ember from 'ember';
+
+export default class Resolver extends Ember.Resolver { }
diff --git a/types/ember__application/test/application-instance.ts b/types/ember__application/test/application-instance.ts
new file mode 100644
index 0000000000..4ee5cb2027
--- /dev/null
+++ b/types/ember__application/test/application-instance.ts
@@ -0,0 +1,29 @@
+import ApplicationInstance from '@ember/application/instance';
+import hbs from 'htmlbars-inline-precompile';
+
+const appInstance = ApplicationInstance.create();
+appInstance.register('some:injection', class Foo {});
+
+appInstance.register('some:injection', class Foo {}, {
+ singleton: true,
+});
+
+appInstance.register('some:injection', class Foo {}, {
+ instantiate: false,
+});
+
+appInstance.register('templates:foo/bar', hbs`Hello World
`);
+
+appInstance.register('some:injection', class Foo {}, {
+ singleton: false,
+ instantiate: true,
+});
+
+appInstance.factoryFor('router:main');
+appInstance.lookup('route:basic');
+
+appInstance.boot();
+
+(async () => {
+ await appInstance.boot();
+})();
diff --git a/types/ember__application/test/application.ts b/types/ember__application/test/application.ts
new file mode 100755
index 0000000000..21d0237b71
--- /dev/null
+++ b/types/ember__application/test/application.ts
@@ -0,0 +1,41 @@
+import Application from "@ember/application";
+import EmberObject from "@ember/object";
+
+const BaseApp = Application.extend({
+ modulePrefix: 'my-app'
+});
+
+BaseApp.initializer({
+ name: 'my-initializer',
+ initialize(app) {
+ app.register('foo:bar', EmberObject.extend({ foo: 'bar' }));
+ }
+});
+
+BaseApp.instanceInitializer({
+ name: 'my-instance-initializer',
+ initialize(app) {
+ app.lookup('foo:bar').get('foo');
+ }
+});
+
+const App1 = BaseApp.create({
+ rootElement: '#app-one',
+ customEvents: {
+ paste: 'paste'
+ }
+});
+
+const App2 = BaseApp.create({
+ rootElement: '#app-two',
+ customEvents: {
+ mouseenter: null,
+ mouseleave: null
+ }
+});
+
+const App3 = BaseApp.create();
+
+const App3Instance1 = App3.buildInstance(); // $ExpectType ApplicationInstance
+
+const App3Instance2 = App3.buildInstance({ foo: 'bar' }); // $ExpectType ApplicationInstance
diff --git a/types/ember__application/test/deprecations.ts b/types/ember__application/test/deprecations.ts
new file mode 100644
index 0000000000..12639ad0b5
--- /dev/null
+++ b/types/ember__application/test/deprecations.ts
@@ -0,0 +1,14 @@
+import { deprecate, deprecateFunc } from '@ember/application/deprecations';
+
+deprecate('this is no longer advised', false, {
+ id: 'no-longer-advised',
+ until: 'v4.0'
+});
+deprecate('this is no longer advised', false);
+
+deprecateFunc('this is no longer advised', () => {});
+deprecateFunc(
+ 'this is no longer advised',
+ { id: 'no-longer-do-this', until: 'v4.0' },
+ () => {}
+);
diff --git a/types/ember__application/test/globals-resolver.ts b/types/ember__application/test/globals-resolver.ts
new file mode 100644
index 0000000000..c0efb5579b
--- /dev/null
+++ b/types/ember__application/test/globals-resolver.ts
@@ -0,0 +1,6 @@
+import GlobalsResolver from "@ember/application/globals-resolver";
+
+const gr = GlobalsResolver.create();
+
+gr.resolve('App.IndexController');
+gr.resolve(); // $ExpectError
diff --git a/types/ember__application/test/resolver.ts b/types/ember__application/test/resolver.ts
new file mode 100644
index 0000000000..20413aa5a4
--- /dev/null
+++ b/types/ember__application/test/resolver.ts
@@ -0,0 +1,3 @@
+import Resolver from "@ember/application/resolver";
+
+const res = Resolver.create();
diff --git a/types/ember__application/tsconfig.json b/types/ember__application/tsconfig.json
new file mode 100644
index 0000000000..833859d183
--- /dev/null
+++ b/types/ember__application/tsconfig.json
@@ -0,0 +1,37 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "target": "es5",
+ "lib": [
+ "es6",
+ "dom"
+ ],
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "strictFunctionTypes": true,
+ "baseUrl": "../",
+ "typeRoots": [
+ "../"
+ ],
+ "paths": {
+ "@ember/application": ["ember__application"],
+ "@ember/application/*": ["ember__application/*"]
+ },
+ "types": [],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "deprecations.d.ts",
+ "globals-resolver.d.ts",
+ "index.d.ts",
+ "instance.d.ts",
+ "resolver.d.ts",
+ "test/application.ts",
+ "test/deprecations.ts",
+ "test/resolver.ts",
+ "test/globals-resolver.ts",
+ "test/application-instance.ts"
+ ]
+}
diff --git a/types/ember__application/tslint.json b/types/ember__application/tslint.json
new file mode 100644
index 0000000000..10d875b8db
--- /dev/null
+++ b/types/ember__application/tslint.json
@@ -0,0 +1,4 @@
+{
+ "extends": "dtslint/dt.json",
+ "rules": {}
+}