Skip to content

Commit aac49e8

Browse files
committed
Typescript
1 parent bdf83a8 commit aac49e8

File tree

13 files changed

+1224
-52
lines changed

13 files changed

+1224
-52
lines changed

CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
6.1.0 / 2018-11-02
32
==================
43

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ Available imports:
3535
import fetch, { Headers, Request, Response, AbortController } from 'fetch';
3636
```
3737

38+
### Use with TypeScript
39+
To use `ember-fetch` with TypeScript or enable editor's type support, add `"fetch": "ember-cli/ember-fetch"` to your app's `devDependencies`.
40+
3841
### Use with Ember Data
3942
To have Ember Data utilize `fetch` instead of jQuery.ajax to make calls to your backend, extend your project's `application` adapter with the `adapter-fetch` mixin.
4043

@@ -65,7 +68,7 @@ export default {
6568
}
6669
```
6770

68-
For addon authors, if the addon supports Fastboot mode, `ember-fetch` should also be listed as a [peer dependency](https://docs.npmjs.com/files/package.json#peerdependencies).
71+
For addon authors, if the addon supports Fastboot mode, `ember-fetch` should also be listed as a [peer dependency](https://docs.npmjs.com/files/package.json#peerdependencies).
6972
This is because Fastboot only invokes top-level addon's `updateFastBootManifest` ([detail](https://github.com/ember-fastboot/ember-cli-fastboot/issues/597)), thus `ember-fetch` has to be a top-level addon installed by the host app.
7073

7174
### Allow native fetch

addon/ajax.js

Lines changed: 0 additions & 11 deletions
This file was deleted.

addon/ajax.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import fetch from 'fetch';
2+
3+
export default function ajax(
4+
input: RequestInfo,
5+
init?: RequestInit
6+
): Promise<Response> {
7+
return fetch(input, init).then(response => {
8+
if (response.ok) {
9+
return response.json();
10+
}
11+
12+
throw response;
13+
});
14+
}

addon/mixins/adapter-fetch.js renamed to addon/mixins/adapter-fetch.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Mixin from '@ember/object/mixin';
2-
import { assign } from '@ember/polyfills'
2+
import { assign } from '@ember/polyfills';
33
import RSVP from 'rsvp';
44
import fetch from 'fetch';
55
import mungOptionsForFetch from '../utils/mung-options-for-fetch';
@@ -14,22 +14,22 @@ export function headersToObject(headers) {
1414
let headersObject = {};
1515

1616
if (headers) {
17-
headers.forEach((value, key) => headersObject[key] = value);
17+
headers.forEach((value, key) => (headersObject[key] = value));
1818
}
1919

2020
return headersObject;
2121
}
2222

2323
export default Mixin.create({
24-
/**
25-
* @param {String} url
26-
* @param {String} type
27-
* @param {Object} _options
28-
* @returns {Object}
29-
* @override
30-
*/
24+
/**
25+
* @param {String} url
26+
* @param {String} type
27+
* @param {Object} _options
28+
* @returns {Object}
29+
* @override
30+
*/
3131

32-
ajaxOptions(url, type, options = {}) {
32+
ajaxOptions(url, type, options: any = {}) {
3333
options.url = url;
3434
options.type = type;
3535

@@ -50,7 +50,7 @@ export default Mixin.create({
5050
ajax(url, type, options) {
5151
const requestData = {
5252
url,
53-
method: type,
53+
method: type
5454
};
5555

5656
const hash = this.ajaxOptions(url, type, options);
@@ -59,7 +59,7 @@ export default Mixin.create({
5959
.catch((error, response, requestData) => {
6060
throw this.ajaxError(this, response, null, requestData, error);
6161
})
62-
.then((response) => {
62+
.then(response => {
6363
return RSVP.hash({
6464
response,
6565
payload: determineBodyPromise(response, requestData)
@@ -115,7 +115,6 @@ export default Mixin.create({
115115
}
116116
},
117117

118-
119118
/**
120119
* Allows for the error to be selected from either the
121120
* response object, or the response data.
@@ -138,7 +137,10 @@ export default Mixin.create({
138137
if (error) {
139138
return error;
140139
} else {
141-
const parsedResponse = adapter.parseFetchResponseForError(response, payload);
140+
const parsedResponse = adapter.parseFetchResponseForError(
141+
response,
142+
payload
143+
);
142144
return adapter.handleResponse(
143145
response.status,
144146
headersToObject(response.headers),

addon/utils/serialize-query-params.js renamed to addon/utils/serialize-query-params.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ export function serializeQueryParams(queryParamsObject) {
1818
if (RBRACKET.test(prefix)) {
1919
add(s, prefix, obj[i]);
2020
} else {
21-
buildParams(prefix + '[' + (typeof obj[i] === 'object' ? i : '') + ']', obj[i]);
21+
buildParams(
22+
prefix + '[' + (typeof obj[i] === 'object' ? i : '') + ']',
23+
obj[i]
24+
);
2225
}
2326
}
2427
} else if (obj && String(obj) === '[object Object]') {
@@ -40,7 +43,9 @@ export function serializeQueryParams(queryParamsObject) {
4043
return s;
4144
}
4245

43-
return buildParams('', queryParamsObject).join('&').replace(/%20/g, '+');
46+
return buildParams('', queryParamsObject)
47+
.join('&')
48+
.replace(/%20/g, '+');
4449
}
4550

4651
/**

index.d.ts

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,29 @@
1-
// Type definitions for Ember Fetch
1+
// Type definitions for ember-fetch
22
// Project: https://github.com/ember-cli/ember-fetch
3-
// Definitions by: Toran Billups <https://github.com/toranb>
4-
// TypeScript Version: 2.3
3+
// Definitions by: Toran Billups <https://github.com/toranb>, Thomas Wang<https://github.com/xg-wang>
4+
/// <reference lib="es2015" />
5+
/// <reference lib="dom" />
56

6-
declare module 'fetch' {
7-
import RSVP from 'rsvp';
8-
export default function fetch(input: RequestInfo, init?: RequestInit): RSVP.Promise<Response>;
9-
}
7+
import RSVP from 'rsvp';
8+
export default function fetch(
9+
input: RequestInfo,
10+
init?: RequestInit
11+
): RSVP.Promise<Response>;
12+
export const Headers: {
13+
prototype: Headers;
14+
new (init?: HeadersInit): Headers;
15+
};
16+
export const Request: {
17+
prototype: Request;
18+
new (input: RequestInfo, init?: RequestInit): Request;
19+
};
20+
export const Response: {
21+
prototype: Response;
22+
new (body?: BodyInit | null, init?: ResponseInit): Response;
23+
error(): Response;
24+
redirect(url: string, status?: number): Response;
25+
};
26+
export const AbortController: {
27+
prototype: AbortController;
28+
new (): AbortController;
29+
};

package.json

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
"lint:js": "eslint ./*.js addon addon-test-support app config lib server test-support tests",
1818
"start": "ember server",
1919
"test": "npm run test:node && ember try:each",
20-
"test:node": "mocha"
20+
"test:node": "mocha",
21+
"prepublishOnly": "ember ts:precompile",
22+
"postpublish": "ember ts:clean"
2123
},
2224
"dependencies": {
2325
"abortcontroller-polyfill": "^1.1.9",
@@ -28,12 +30,21 @@
2830
"broccoli-rollup": "^2.1.1",
2931
"broccoli-stew": "^2.0.0",
3032
"broccoli-templater": "^2.0.1",
31-
"ember-cli-babel": "^6.8.2",
33+
"ember-cli-babel": "^7.1.3",
34+
"ember-cli-typescript": "2.0.0-beta.2",
3235
"node-fetch": "^2.0.0-alpha.9",
3336
"rollup-plugin-babel": "^3.0.7",
3437
"whatwg-fetch": "^3.0.0"
3538
},
3639
"devDependencies": {
40+
"@types/ember": "^3.0.25",
41+
"@types/ember-data": "^3.1.3",
42+
"@types/ember-qunit": "^3.4.3",
43+
"@types/ember-test-helpers": "^1.0.4",
44+
"@types/ember-testing-helpers": "^0.0.3",
45+
"@types/ember__test-helpers": "^0.7.6",
46+
"@types/qunit": "^2.5.3",
47+
"@types/rsvp": "^4.0.2",
3748
"broccoli-asset-rev": "^2.4.5",
3849
"broccoli-test-helper": "^1.2.0",
3950
"chai": "^4.1.2",
@@ -45,6 +56,7 @@
4556
"ember-cli-pretender": "^3.0.0",
4657
"ember-cli-qunit": "^4.3.2",
4758
"ember-cli-release": "^0.2.9",
59+
"ember-cli-typescript-blueprints": "^2.0.0-beta.1",
4860
"ember-cli-uglify": "^2.0.0",
4961
"ember-data": "^2.16.0",
5062
"ember-disable-prototype-extensions": "^1.1.2",
@@ -57,7 +69,8 @@
5769
"eslint-plugin-ember": "^5.0.0",
5870
"eslint-plugin-node": "^5.2.1",
5971
"loader.js": "^4.2.3",
60-
"mocha": "^5.2.0"
72+
"mocha": "^5.2.0",
73+
"typescript": "^3.1.6"
6174
},
6275
"engines": {
6376
"node": "6.* || 8.* || >= 10"
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: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es2017",
4+
"allowJs": true,
5+
"moduleResolution": "node",
6+
"allowSyntheticDefaultImports": true,
7+
"noEmitOnError": false,
8+
"noEmit": true,
9+
"inlineSourceMap": true,
10+
"inlineSources": true,
11+
"baseUrl": ".",
12+
"module": "es6",
13+
"paths": {
14+
"dummy/tests/*": ["tests/*"],
15+
"dummy/*": ["tests/dummy/app/*", "app/*"],
16+
"fetch": ["index.d.ts"],
17+
"ember-fetch": ["addon"],
18+
"ember-fetch/*": ["addon/*"],
19+
"ember-fetch/test-support": ["addon-test-support"],
20+
"ember-fetch/test-support/*": ["addon-test-support/*"],
21+
"*": ["types/*"]
22+
}
23+
},
24+
"include": [
25+
"app/**/*",
26+
"addon/**/*",
27+
"tests/**/*",
28+
"types/**/*",
29+
"test-support/**/*",
30+
"addon-test-support/**/*"
31+
]
32+
}

0 commit comments

Comments
 (0)