Skip to content
This repository was archived by the owner on May 27, 2021. It is now read-only.

Commit c47ee27

Browse files
authored
Don't include deleted parameter for default value (#130)
* bump version * Only calculate glue when needed * Skip deleted if not set * Attempt to fix lint * update packages * Fix/add tests * Fix hash test * Upgrade eslint * Upgrade most dependencies * Upgrade last dependencies * Downgrade eslint and fix hasOwnProperty * Downgrade eslint and fix hasOwnProperty
1 parent 8e23695 commit c47ee27

File tree

8 files changed

+11398
-10944
lines changed

8 files changed

+11398
-10944
lines changed

package-lock.json

Lines changed: 11321 additions & 10896 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mapcreator/maps4news",
3-
"version": "1.6.34",
3+
"version": "1.6.35",
44
"description": "Maps4News JavaScript Api",
55
"main": "dist/bundle.js",
66
"repository": "[email protected]:MapcreatorIO/api-wrapper.git",
@@ -12,52 +12,51 @@
1212
"manual"
1313
],
1414
"dependencies": {
15-
"@babel/runtime": "^7.2.0",
16-
"axios": "^0.18.0",
17-
"case": "^1.6.1",
18-
"form-data": "^2.3.3",
15+
"@babel/runtime": "^7.10.2",
16+
"axios": "^0.19.2",
17+
"case": "^1.6.3",
18+
"form-data": "^3.0.0",
1919
"json-stable-stringify": "^1.0.1",
20-
"mitt": "^1.1.2"
20+
"mitt": "^1.2.0"
2121
},
2222
"devDependencies": {
23-
"@babel/core": "^7.2.2",
24-
"@babel/plugin-proposal-class-properties": "^7.2.3",
25-
"@babel/plugin-proposal-export-default-from": "^7.2.0",
26-
"@babel/plugin-proposal-export-namespace-from": "^7.2.0",
27-
"@babel/plugin-transform-runtime": "^7.2.0",
28-
"@babel/preset-env": "^7.2.3",
29-
"babel-core": "^7.0.0-bridge.0",
30-
"babel-eslint": "^10.0.1",
31-
"babel-jest": "^23.6.0",
32-
"babel-loader": "^8.0.5",
23+
"@babel/core": "^7.10.2",
24+
"@babel/plugin-proposal-class-properties": "^7.10.1",
25+
"@babel/plugin-proposal-export-default-from": "^7.10.1",
26+
"@babel/plugin-proposal-export-namespace-from": "^7.10.1",
27+
"@babel/plugin-transform-runtime": "^7.10.1",
28+
"@babel/preset-env": "^7.10.2",
29+
"babel-eslint": "^10.1.0",
30+
"babel-jest": "^26.0.1",
31+
"babel-loader": "^8.1.0",
3332
"contributors": "^0.5.1",
34-
"dotenv-webpack": "^1.7.0",
33+
"dotenv-webpack": "^1.8.0",
3534
"esdoc": "^1.1.0",
3635
"esdoc-ecmascript-proposal-plugin": "^1.0.0",
3736
"esdoc-inject-script-plugin": "^1.0.0",
3837
"esdoc-inject-style-plugin": "^1.0.0",
3938
"esdoc-standard-plugin": "^1.0.0",
4039
"eslint": "^5.12.0",
41-
"eslint-plugin-compat": "^2.6.3",
42-
"eslint-plugin-promise": "^4.0.1",
43-
"fs-extra": "^6.0.1",
44-
"jest": "^23.6.0",
45-
"jest-junit": "^5.2.0",
40+
"eslint-plugin-compat": "^3.7.0",
41+
"eslint-plugin-promise": "^4.2.1",
42+
"fs-extra": "^9.0.1",
43+
"jest": "^26.0.1",
44+
"jest-junit": "^10.0.0",
4645
"licensecheck": "^1.3.0",
4746
"moxios": "^0.4.0",
48-
"nyc": "^11.9.0",
47+
"nyc": "^15.1.0",
4948
"tap-nyc": "^1.0.3",
50-
"uglifyjs-webpack-plugin": "^1.3.0",
51-
"webpack": "^4.28.4",
52-
"webpack-cli": "^3.3.10",
53-
"webpack-merge": "^4.2.1",
49+
"uglifyjs-webpack-plugin": "^2.2.0",
50+
"webpack": "^4.43.0",
51+
"webpack-cli": "^3.3.11",
52+
"webpack-merge": "^4.2.2",
5453
"webpack-node-externals": "^1.7.2"
5554
},
5655
"scripts": {
5756
"build": "APP_ENV=production npx webpack",
5857
"watch": "npx webpack --progress --watch",
5958
"docs": "npx esdoc",
60-
"lint": "APP_ENV=production npx eslint --no-color --format checkstyle --output-file build/checkstyle.xml src",
59+
"lint": "npx eslint --no-color --format checkstyle --output-file build/checkstyle.xml src",
6160
"clean": "rm -fr dist docs build || true",
6261
"all": "npm run clean && npm run lint && npm run build && npm run test && npm run docs",
6362
"test": "npx jest",

src/RequestParameters.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,10 +244,10 @@ export default class RequestParameters extends EventEmitter {
244244

245245
/**
246246
* Default deleted items filter state
247-
* @returns {String} - Deleted items filter state
247+
* @returns {String|undefined} - Deleted items filter state
248248
*/
249249
static get deleted () {
250-
return RequestParameters._deleted || DeletedState.NONE;
250+
return RequestParameters._deleted || void 0;
251251
}
252252

253253
/**
@@ -470,6 +470,10 @@ export default class RequestParameters extends EventEmitter {
470470
}
471471

472472
static _validateDeleted (value) {
473+
if (typeof value === 'undefined') {
474+
return value;
475+
}
476+
473477
if (typeof value !== 'string') {
474478
throw new TypeError(`Expected deleted to be of type "string" got "${getTypeName(value)}". See: DeletedState`);
475479
}
@@ -605,6 +609,12 @@ export default class RequestParameters extends EventEmitter {
605609
data[key] = extra[key];
606610
}
607611

612+
for (const key of Object.keys(data)) {
613+
if (typeof data[key] === 'undefined') {
614+
delete data[key];
615+
}
616+
}
617+
608618
return data;
609619
}
610620

src/ResourceLister.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export default class ResourceLister extends EventEmitter {
6262

6363
this._api = api;
6464
this._Resource = Resource;
65-
this._route = route || (new this.Resource(api, {})).baseUrl;
65+
this._route = route || new this.Resource(api, {}).baseUrl;
6666
this._parameters = new RequestParameters(parameters || { perPage: RequestParameters.maxPerPage });
6767
this._key = snakeCase(key);
6868
this._waiting = false;

src/proxy/ResourceProxy.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,19 @@ export default class ResourceProxy extends SimpleResourceProxy {
7272
/**
7373
* Get target resource
7474
* @param {Number|String|Object} [id=] - The resource id to be requested
75-
* @param {String} [deleted=RequestParameters.deleted] - Determines if the resource should be shown if deleted, requires special resource permissions. Possible values: only, none, all
75+
* @param {String} [deleted=null] - Determines if the resource should be shown if deleted, requires special resource permissions. Possible values: only, none, all
7676
* @returns {Promise<ResourceBase>} - Target resource
7777
* @throws {ApiError}
7878
*/
79-
async get (id, deleted = RequestParameters.deleted) {
79+
async get (id, deleted = null) {
8080
const data = { ...this._seedData, ...this._parseSelector(id) };
8181
let url = this.new(data).url;
82-
const glue = url.includes('?') ? '&' : '?';
8382

84-
url += glue + encodeQueryString({ deleted });
83+
if (typeof deleted === 'string') {
84+
const glue = url.includes('?') ? '&' : '?';
85+
86+
url += glue + encodeQueryString({ deleted });
87+
}
8588

8689
const { data: { data: result } } = await this.api.axios.get(url);
8790

src/resources/User.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export default class User extends CrudBase {
7676
* @throws {ApiError}
7777
*/
7878
organisation () {
79-
return (new ResourceProxy(this.api, Organisation)).get(this.organisationId);
79+
return new ResourceProxy(this.api, Organisation).get(this.organisationId);
8080
}
8181

8282
/**
@@ -85,7 +85,7 @@ export default class User extends CrudBase {
8585
* @throws {ApiError}
8686
*/
8787
language () {
88-
return (new ResourceProxy(this.api, Language)).get(this.languageCode);
88+
return new ResourceProxy(this.api, Language).get(this.languageCode);
8989
}
9090

9191
// region Resource listing

src/utils/reflection.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ export function isParentOf (parent, child) {
7676
* @returns {string} - Value type name
7777
*/
7878
export function getTypeName (value) {
79+
if (typeof value === 'undefined') {
80+
return 'undefined';
81+
}
82+
7983
value = typeof value === 'function' ? value : value.constructor;
8084

8185
return value.name;
@@ -86,7 +90,8 @@ export function getTypeName (value) {
8690
* Helper class for mix
8791
* @see {@link mix}
8892
*/
89-
class Empty {}
93+
class Empty {
94+
}
9095

9196
/**
9297
* Copy properties from source to target

tests/unit/RequestParameters.test.js

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,17 @@ test('RequestParameters should be able to reset defaults', () => {
6060
test('RequestParameters can generate cache tokens', () => {
6161
const params = cleanParams.copy();
6262

63-
expect(params.token()).toEqual('65f40b0d'); // Default token
63+
expect(params.token()).toEqual('0c574931'); // Default token
6464

6565
// Page and perPage shouldn't affect the token
6666
params.page = Math.round(Math.random() * 100000);
6767
params.perPage = Math.round(Math.random() * 50);
6868

69-
expect(params.token()).toEqual('65f40b0d');
69+
expect(params.token()).toEqual('0c574931');
7070

7171
params.sort = 'quick,-brown,fox';
7272

73-
expect(params.token()).toEqual('b4b47dc1');
73+
expect(params.token()).toEqual('47115fb4');
7474
});
7575

7676
const validationTests = {
@@ -150,7 +150,19 @@ test('issue #93', () => {
150150
const params = new RequestParameters({sort: '-name'});
151151

152152
expect(params.toObject().sort).toEqual(['-name']);
153-
expect(params.encode()).toEqual('deleted=none&page=1&per_page=12&sort=-name');
153+
expect(params.encode()).toEqual('page=1&per_page=12&sort=-name');
154+
});
155+
156+
test('deleted will be omitted unless defined', () => {
157+
const params = new RequestParameters();
158+
159+
expect(params.toObject().deleted).toBeUndefined();
160+
expect(params.encode()).toEqual('page=1&per_page=12&sort=');
161+
162+
params.deleted = DeletedState.ALL;
163+
164+
expect(params.toObject().deleted).toEqual(DeletedState.ALL);
165+
expect(params.encode()).toEqual('deleted=all&page=1&per_page=12&sort=');
154166
});
155167

156168
test('extra parameters overwrite others', () => {
@@ -178,7 +190,7 @@ test('encoded search keys must be snake_case', () => {
178190
'fooBar,Baz': 'test',
179191
};
180192

181-
expect(params.encode()).toEqual('deleted=none&page=1&per_page=12&search[foo_bar,baz]=test&sort='.replace(',', '%2C'));
193+
expect(params.encode()).toEqual('page=1&per_page=12&search[foo_bar,baz]=test&sort='.replace(',', '%2C'));
182194
});
183195

184196
test('null is properly encoded', () => {
@@ -188,7 +200,7 @@ test('null is properly encoded', () => {
188200
foo: null,
189201
};
190202

191-
expect(params.encode()).toEqual('deleted=none&foo&page=1&per_page=12&sort=');
203+
expect(params.encode()).toEqual('foo&page=1&per_page=12&sort=');
192204
});
193205

194206
test('RequestParameters can have properties applied to it', () => {
@@ -205,9 +217,9 @@ test('RequestParameters can have properties applied to it', () => {
205217
_deleted: 'only',
206218
});
207219

208-
expect(params.deleted).toEqual('none');
220+
expect(params.deleted).toBeUndefined();
209221
expect(params.toParameterObject().pirateFlag).toEqual('cool');
210-
expect(params.foo).toEqual(undefined);
222+
expect(params.foo).toBeUndefined();
211223
});
212224

213225
test('RequestParameters can have properties applied to it from other RequestParameters', () => {
@@ -224,7 +236,7 @@ test('RequestParameters can have properties applied to it from other RequestPara
224236
_deleted: 'only',
225237
}));
226238

227-
expect(params.deleted).toEqual('none');
239+
expect(params.deleted).toBeUndefined();
228240
expect(params.toParameterObject().pirateFlag).toEqual('cool');
229-
expect(params.foo).toEqual(undefined);
241+
expect(params.foo).toBeUndefined();
230242
});

0 commit comments

Comments
 (0)