remult 0.14.2 → 0.14.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/assign.js +1 -5
  2. package/classType.js +1 -2
  3. package/graphql.js +84 -146
  4. package/index.d.ts +13 -0
  5. package/index.js +25 -55
  6. package/inputTypes.js +9 -16
  7. package/package.json +6 -1
  8. package/postgres/index.js +1 -4
  9. package/postgres/postgres-data-provider.js +165 -364
  10. package/postgres/postgresColumnSyntax.js +4 -8
  11. package/remult-express.js +6 -10
  12. package/remult-knex/index.js +300 -720
  13. package/remult-middleware.js +24 -30
  14. package/remult-mongo.js +172 -406
  15. package/server/JsonEntityFileStorage.js +10 -15
  16. package/server/expressBridge.js +383 -569
  17. package/server/index.js +4 -11
  18. package/server/register-actions-on-server.js +12 -38
  19. package/server/register-entities-on-server.js +9 -13
  20. package/src/__EntityValueProvider.js +1 -2
  21. package/src/__RowsOfDataForTesting.js +1 -2
  22. package/src/backend-tests/backend-database-test-setup.backend-spec.js +72 -190
  23. package/src/backend-tests/my-test.backend-spec.js +45 -114
  24. package/src/column-interfaces.js +2 -6
  25. package/src/column.js +71 -113
  26. package/src/context.js +174 -330
  27. package/src/data-api.js +162 -326
  28. package/src/data-interfaces.js +7 -11
  29. package/src/data-providers/array-entity-data-provider.js +171 -286
  30. package/src/data-providers/in-memory-database.js +12 -27
  31. package/src/data-providers/json-data-provider.js +41 -77
  32. package/src/data-providers/rest-data-provider.js +102 -189
  33. package/src/data-providers/sql-database.js +223 -403
  34. package/src/data-providers/web-sql-data-provider.js +78 -139
  35. package/src/entity.js +1 -2
  36. package/src/filter/filter-consumer-bridge-to-sql-request.js +106 -248
  37. package/src/filter/filter-consumer-bridge-to-url-builder.js +1 -2
  38. package/src/filter/filter-interfaces.js +277 -440
  39. package/src/id-entity.js +8 -17
  40. package/src/remult3/RepositoryImplementation.js +1191 -2367
  41. package/src/remult3/index.js +2 -5
  42. package/src/remult3/remult3.js +1 -2
  43. package/src/server-action.js +294 -528
  44. package/src/shared-tests/db-tests-setup.js +49 -153
  45. package/src/shared-tests/db-tests.db-tests.js +660 -1566
  46. package/src/shared-tests/deleteAll.js +3 -20
  47. package/src/shared-tests/entityWithValidations.js +52 -79
  48. package/src/shared-tests/index.js +4 -6
  49. package/src/shared-tests/test-custom-id-column.spec.js +37 -85
  50. package/src/shared-tests/test-special-value.spec.js +64 -104
  51. package/src/shared-tests/test-update-with-null.spec.js +28 -49
  52. package/src/sort.js +38 -95
  53. package/src/sql-command.js +1 -2
  54. package/src/tests/Done.js +7 -13
  55. package/src/tests/TestDataApiResponse.js +15 -22
  56. package/src/tests/c.js +21 -27
  57. package/src/tests/createData.js +20 -48
  58. package/src/tests/d.js +19 -27
  59. package/src/tests/dWithPrefilter.js +31 -44
  60. package/src/tests/entityForCustomFilter.js +42 -66
  61. package/src/tests/entityWithValidationsOnColumn.js +21 -29
  62. package/src/tests/frontend-database-tests-setup.spec.js +35 -98
  63. package/src/tests/h.js +35 -44
  64. package/src/tests/remult-3-entities.js +71 -80
  65. package/src/tests/tasks.js +23 -29
  66. package/src/tests/testHelper.spec.js +170 -322
  67. package/src/tests/testModel/models.js +25 -33
  68. package/src/validators.js +32 -59
  69. package/urlBuilder.js +8 -14
  70. package/valueConverters.js +161 -160
@@ -1,88 +1,52 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JsonDataProvider = void 0;
4
- var tslib_1 = require("tslib");
5
- var array_entity_data_provider_1 = require("./array-entity-data-provider");
6
- var JsonDataProvider = /** @class */ (function () {
7
- function JsonDataProvider(storage) {
1
+ import { ArrayEntityDataProvider } from './array-entity-data-provider';
2
+ export class JsonDataProvider {
3
+ constructor(storage) {
8
4
  this.storage = storage;
9
5
  }
10
- JsonDataProvider.prototype.getEntityDataProvider = function (entity) {
6
+ getEntityDataProvider(entity) {
11
7
  return new JsonEntityDataProvider(entity, this.storage);
12
- };
13
- JsonDataProvider.prototype.transaction = function (action) {
14
- return tslib_1.__awaiter(this, void 0, void 0, function () {
15
- return tslib_1.__generator(this, function (_a) {
16
- switch (_a.label) {
17
- case 0: return [4 /*yield*/, action(this)];
18
- case 1:
19
- _a.sent();
20
- return [2 /*return*/];
21
- }
22
- });
23
- });
24
- };
25
- return JsonDataProvider;
26
- }());
27
- exports.JsonDataProvider = JsonDataProvider;
28
- var JsonEntityDataProvider = /** @class */ (function () {
29
- function JsonEntityDataProvider(entity, helper) {
8
+ }
9
+ async transaction(action) {
10
+ await action(this);
11
+ }
12
+ }
13
+ class JsonEntityDataProvider {
14
+ constructor(entity, helper) {
30
15
  this.entity = entity;
31
16
  this.helper = helper;
32
17
  this.p = Promise.resolve();
33
18
  }
34
- JsonEntityDataProvider.prototype.loadEntityData = function (what) {
35
- return tslib_1.__awaiter(this, void 0, void 0, function () {
36
- var data, dbName, s, dp;
37
- var _this = this;
38
- return tslib_1.__generator(this, function (_a) {
39
- switch (_a.label) {
40
- case 0:
41
- data = [];
42
- return [4 /*yield*/, this.entity.getDbName()];
43
- case 1:
44
- dbName = _a.sent();
45
- s = this.helper.getItem(dbName);
46
- if (s)
47
- data = JSON.parse(s);
48
- dp = new array_entity_data_provider_1.ArrayEntityDataProvider(this.entity, data);
49
- return [2 /*return*/, what(dp, function () { return _this.helper.setItem(dbName, JSON.stringify(data, undefined, 2)); })];
50
- }
51
- });
52
- });
53
- };
54
- JsonEntityDataProvider.prototype.find = function (options) {
55
- var _this = this;
56
- return this.p = this.p.then(function () { return _this.loadEntityData(function (dp, save) { return dp.find(options); }); });
57
- };
58
- JsonEntityDataProvider.prototype.count = function (where) {
59
- var _this = this;
60
- return this.p = this.p.then(function () { return _this.loadEntityData(function (dp, save) { return dp.count(where); }); });
61
- };
62
- JsonEntityDataProvider.prototype.update = function (id, data) {
63
- var _this = this;
64
- return this.p = this.p.then(function () { return _this.loadEntityData(function (dp, save) { return dp.update(id, data).then(function (x) {
19
+ async loadEntityData(what) {
20
+ let data = [];
21
+ let dbName = await this.entity.getDbName();
22
+ let s = this.helper.getItem(dbName);
23
+ if (s)
24
+ data = JSON.parse(s);
25
+ let dp = new ArrayEntityDataProvider(this.entity, data);
26
+ return what(dp, () => this.helper.setItem(dbName, JSON.stringify(data, undefined, 2)));
27
+ }
28
+ find(options) {
29
+ return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.find(options)));
30
+ }
31
+ count(where) {
32
+ return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.count(where)));
33
+ }
34
+ update(id, data) {
35
+ return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.update(id, data).then(x => {
65
36
  save();
66
37
  return x;
67
- }); }); });
68
- };
69
- JsonEntityDataProvider.prototype.delete = function (id) {
70
- var _this = this;
71
- return this.p = this.p.then(function () { return _this.loadEntityData(function (dp, save) { return dp.delete(id).then(function (x) {
38
+ })));
39
+ }
40
+ delete(id) {
41
+ return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.delete(id).then(x => {
72
42
  save();
73
43
  return x;
74
- }); }); });
75
- };
76
- JsonEntityDataProvider.prototype.insert = function (data) {
77
- return tslib_1.__awaiter(this, void 0, void 0, function () {
78
- var _this = this;
79
- return tslib_1.__generator(this, function (_a) {
80
- return [2 /*return*/, this.p = this.p.then(function () { return _this.loadEntityData(function (dp, save) { return dp.insert(data).then(function (x) {
81
- save();
82
- return x;
83
- }); }); })];
84
- });
85
- });
86
- };
87
- return JsonEntityDataProvider;
88
- }());
44
+ })));
45
+ }
46
+ async insert(data) {
47
+ return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.insert(data).then(x => {
48
+ save();
49
+ return x;
50
+ })));
51
+ }
52
+ }
@@ -1,94 +1,56 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addFilterToUrlAndReturnTrueIfSuccessful = exports.RestDataProviderHttpProviderUsingFetch = exports.RestEntityDataProvider = exports.RestDataProvider = void 0;
4
- var tslib_1 = require("tslib");
5
- var urlBuilder_1 = require("../../urlBuilder");
6
- var filter_interfaces_1 = require("../filter/filter-interfaces");
7
- var context_1 = require("../context");
8
- var RestDataProvider = /** @class */ (function () {
9
- function RestDataProvider(url, http) {
1
+ import { UrlBuilder } from '../../urlBuilder';
2
+ import { customUrlToken } from '../filter/filter-interfaces';
3
+ import { retry } from '../context';
4
+ export class RestDataProvider {
5
+ constructor(url, http) {
10
6
  this.url = url;
11
7
  this.http = http;
12
8
  this.supportsCustomFilter = true;
13
9
  }
14
- RestDataProvider.prototype.getEntityDataProvider = function (entity) {
10
+ getEntityDataProvider(entity) {
15
11
  return new RestEntityDataProvider(this.url + '/' + entity.key, this.http, entity);
16
- };
17
- RestDataProvider.prototype.transaction = function (action) {
18
- return tslib_1.__awaiter(this, void 0, void 0, function () {
19
- return tslib_1.__generator(this, function (_a) {
20
- throw new Error("Method not implemented.");
21
- });
22
- });
23
- };
24
- return RestDataProvider;
25
- }());
26
- exports.RestDataProvider = RestDataProvider;
27
- var RestEntityDataProvider = /** @class */ (function () {
28
- function RestEntityDataProvider(url, http, entity) {
12
+ }
13
+ async transaction(action) {
14
+ throw new Error("Method not implemented.");
15
+ }
16
+ }
17
+ export class RestEntityDataProvider {
18
+ constructor(url, http, entity) {
29
19
  this.url = url;
30
20
  this.http = http;
31
21
  this.entity = entity;
32
22
  }
33
- RestEntityDataProvider.prototype.translateFromJson = function (row) {
34
- var e_1, _a;
35
- var result = {};
36
- try {
37
- for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
38
- var col = _c.value;
39
- result[col.key] = col.valueConverter.fromJson(row[col.key]);
40
- }
41
- }
42
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
43
- finally {
44
- try {
45
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
46
- }
47
- finally { if (e_1) throw e_1.error; }
23
+ translateFromJson(row) {
24
+ let result = {};
25
+ for (const col of this.entity.fields) {
26
+ result[col.key] = col.valueConverter.fromJson(row[col.key]);
48
27
  }
49
28
  return result;
50
- };
51
- RestEntityDataProvider.prototype.translateToJson = function (row) {
52
- var e_2, _a;
53
- var result = {};
54
- try {
55
- for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
56
- var col = _c.value;
57
- result[col.key] = col.valueConverter.toJson(row[col.key]);
58
- }
59
- }
60
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
61
- finally {
62
- try {
63
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
64
- }
65
- finally { if (e_2) throw e_2.error; }
29
+ }
30
+ translateToJson(row) {
31
+ let result = {};
32
+ for (const col of this.entity.fields) {
33
+ result[col.key] = col.valueConverter.toJson(row[col.key]);
66
34
  }
67
35
  return result;
68
- };
69
- RestEntityDataProvider.prototype.count = function (where) {
70
- return tslib_1.__awaiter(this, void 0, void 0, function () {
71
- var url, filterObject;
72
- return tslib_1.__generator(this, function (_a) {
73
- url = new urlBuilder_1.UrlBuilder(this.url);
74
- url.add("__action", "count");
75
- if (where) {
76
- filterObject = where.toJson();
77
- if (addFilterToUrlAndReturnTrueIfSuccessful(filterObject, url))
78
- filterObject = undefined;
79
- }
80
- if (filterObject)
81
- return [2 /*return*/, this.http.post(url.url, filterObject).then(function (r) { return +(r.count); })];
82
- else
83
- return [2 /*return*/, this.http.get(url.url).then(function (r) { return +(r.count); })];
84
- return [2 /*return*/];
85
- });
86
- });
87
- };
88
- RestEntityDataProvider.prototype.find = function (options) {
89
- var _this = this;
90
- var url = new urlBuilder_1.UrlBuilder(this.url);
91
- var filterObject;
36
+ }
37
+ async count(where) {
38
+ let url = new UrlBuilder(this.url);
39
+ url.add("__action", "count");
40
+ let filterObject;
41
+ if (where) {
42
+ filterObject = where.toJson();
43
+ if (addFilterToUrlAndReturnTrueIfSuccessful(filterObject, url))
44
+ filterObject = undefined;
45
+ }
46
+ if (filterObject)
47
+ return this.http.post(url.url, filterObject).then(r => +(r.count));
48
+ else
49
+ return this.http.get(url.url).then(r => +(r.count));
50
+ }
51
+ find(options) {
52
+ let url = new UrlBuilder(this.url);
53
+ let filterObject;
92
54
  if (options) {
93
55
  if (options.where) {
94
56
  filterObject = options.where.toJson(); // options.where.__applyToConsumer(new FilterConsumnerBridgeToUrlBuilder(url));
@@ -96,18 +58,18 @@ var RestEntityDataProvider = /** @class */ (function () {
96
58
  filterObject = undefined;
97
59
  }
98
60
  if (options.orderBy && options.orderBy.Segments) {
99
- var sort_1 = '';
100
- var order_1 = '';
101
- options.orderBy.Segments.forEach(function (c) {
102
- if (sort_1.length > 0) {
103
- sort_1 += ",";
104
- order_1 += ",";
61
+ let sort = '';
62
+ let order = '';
63
+ options.orderBy.Segments.forEach(c => {
64
+ if (sort.length > 0) {
65
+ sort += ",";
66
+ order += ",";
105
67
  }
106
- sort_1 += c.field.key;
107
- order_1 += c.isDescending ? "desc" : "asc";
68
+ sort += c.field.key;
69
+ order += c.isDescending ? "desc" : "asc";
108
70
  });
109
- url.add('_sort', sort_1);
110
- url.add('_order', order_1);
71
+ url.add('_sort', sort);
72
+ url.add('_order', order);
111
73
  }
112
74
  if (options.limit)
113
75
  url.add('_limit', options.limit);
@@ -116,89 +78,53 @@ var RestEntityDataProvider = /** @class */ (function () {
116
78
  }
117
79
  if (filterObject) {
118
80
  url.add("__action", "get");
119
- return this.http.post(url.url, filterObject).then(function (x) { return x.map(function (y) { return _this.translateFromJson(y); }); });
81
+ return this.http.post(url.url, filterObject).then(x => x.map(y => this.translateFromJson(y)));
120
82
  }
121
83
  else
122
- return this.http.get(url.url).then(function (x) { return x.map(function (y) { return _this.translateFromJson(y); }); });
84
+ return this.http.get(url.url).then(x => x.map(y => this.translateFromJson(y)));
123
85
  ;
124
- };
125
- RestEntityDataProvider.prototype.update = function (id, data) {
126
- var e_3, _a;
127
- var _this = this;
128
- var result = {};
129
- var keys = Object.keys(data);
130
- try {
131
- for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
132
- var col = _c.value;
133
- if (keys.includes(col.key))
134
- result[col.key] = col.valueConverter.toJson(data[col.key]);
135
- }
136
- }
137
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
138
- finally {
139
- try {
140
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
141
- }
142
- finally { if (e_3) throw e_3.error; }
86
+ }
87
+ update(id, data) {
88
+ let result = {};
89
+ let keys = Object.keys(data);
90
+ for (const col of this.entity.fields) {
91
+ if (keys.includes(col.key))
92
+ result[col.key] = col.valueConverter.toJson(data[col.key]);
143
93
  }
144
- return this.http.put(this.url + '/' + encodeURIComponent(id), result).then(function (y) { return _this.translateFromJson(y); });
145
- };
146
- RestEntityDataProvider.prototype.delete = function (id) {
94
+ return this.http.put(this.url + '/' + encodeURIComponent(id), result).then(y => this.translateFromJson(y));
95
+ }
96
+ delete(id) {
147
97
  return this.http.delete(this.url + '/' + encodeURIComponent(id));
148
- };
149
- RestEntityDataProvider.prototype.insert = function (data) {
150
- var _this = this;
151
- return this.http.post(this.url, this.translateToJson(data)).then(function (y) { return _this.translateFromJson(y); });
152
- };
153
- return RestEntityDataProvider;
154
- }());
155
- exports.RestEntityDataProvider = RestEntityDataProvider;
156
- var RestDataProviderHttpProviderUsingFetch = /** @class */ (function () {
157
- function RestDataProviderHttpProviderUsingFetch(fetch) {
98
+ }
99
+ insert(data) {
100
+ return this.http.post(this.url, this.translateToJson(data)).then(y => this.translateFromJson(y));
101
+ }
102
+ }
103
+ export class RestDataProviderHttpProviderUsingFetch {
104
+ constructor(fetch) {
158
105
  this.fetch = fetch;
159
106
  }
160
- RestDataProviderHttpProviderUsingFetch.prototype.get = function (url) {
161
- return tslib_1.__awaiter(this, void 0, void 0, function () {
162
- var _this = this;
163
- return tslib_1.__generator(this, function (_a) {
164
- switch (_a.label) {
165
- case 0: return [4 /*yield*/, context_1.retry(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
166
- return tslib_1.__generator(this, function (_a) {
167
- return [2 /*return*/, this.myFetch(url).then(function (r) {
168
- return r;
169
- })];
170
- });
171
- }); })];
172
- case 1: return [2 /*return*/, _a.sent()];
173
- }
174
- });
175
- });
176
- };
177
- RestDataProviderHttpProviderUsingFetch.prototype.put = function (url, data) {
107
+ async get(url) {
108
+ return await retry(async () => this.myFetch(url).then(r => {
109
+ return r;
110
+ }));
111
+ }
112
+ put(url, data) {
178
113
  return this.myFetch(url, {
179
114
  method: 'put',
180
115
  body: JSON.stringify(data)
181
116
  });
182
- };
183
- RestDataProviderHttpProviderUsingFetch.prototype.delete = function (url) {
117
+ }
118
+ delete(url) {
184
119
  return this.myFetch(url, { method: 'delete', credentials: 'include' });
185
- };
186
- RestDataProviderHttpProviderUsingFetch.prototype.post = function (url, data) {
187
- return tslib_1.__awaiter(this, void 0, void 0, function () {
188
- var _this = this;
189
- return tslib_1.__generator(this, function (_a) {
190
- switch (_a.label) {
191
- case 0: return [4 /*yield*/, context_1.retry(function () { return _this.myFetch(url, {
192
- method: 'post',
193
- body: JSON.stringify(data)
194
- }); })];
195
- case 1: return [2 /*return*/, _a.sent()];
196
- }
197
- });
198
- });
199
- };
200
- RestDataProviderHttpProviderUsingFetch.prototype.myFetch = function (url, init) {
201
- var _this = this;
120
+ }
121
+ async post(url, data) {
122
+ return await retry(() => this.myFetch(url, {
123
+ method: 'post',
124
+ body: JSON.stringify(data)
125
+ }));
126
+ }
127
+ myFetch(url, init) {
202
128
  if (!init)
203
129
  init = {};
204
130
  if (!init.headers)
@@ -206,32 +132,23 @@ var RestDataProviderHttpProviderUsingFetch = /** @class */ (function () {
206
132
  var h = init.headers;
207
133
  h.append('Content-type', "application/json");
208
134
  init.credentials = 'include';
209
- return (this.fetch || fetch)(url, init).then(function (response) {
135
+ return (this.fetch || fetch)(url, init).then(response => {
210
136
  return onSuccess(response);
211
- }).catch(function (error) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
212
- var r;
213
- return tslib_1.__generator(this, function (_a) {
214
- switch (_a.label) {
215
- case 0: return [4 /*yield*/, error];
216
- case 1:
217
- r = _a.sent();
218
- throw r;
219
- }
220
- });
221
- }); });
222
- };
223
- return RestDataProviderHttpProviderUsingFetch;
224
- }());
225
- exports.RestDataProviderHttpProviderUsingFetch = RestDataProviderHttpProviderUsingFetch;
137
+ }).catch(async (error) => {
138
+ let r = await error;
139
+ throw r;
140
+ });
141
+ }
142
+ }
226
143
  function onSuccess(response) {
227
144
  if (response.status == 204)
228
145
  return;
229
146
  if (response.status >= 200 && response.status < 300)
230
147
  return response.json();
231
148
  else {
232
- throw response.json().then(function (x) {
233
- return tslib_1.__assign(tslib_1.__assign({}, x), { message: x.message || response.statusText, url: response.url, status: response.status });
234
- }).catch(function () {
149
+ throw response.json().then(x => {
150
+ return { ...x, message: x.message || response.statusText, url: response.url, status: response.status };
151
+ }).catch(() => {
235
152
  throw {
236
153
  message: response.statusText,
237
154
  url: response.url,
@@ -240,10 +157,10 @@ function onSuccess(response) {
240
157
  });
241
158
  }
242
159
  }
243
- function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
244
- for (var key in filter) {
160
+ export function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
161
+ for (const key in filter) {
245
162
  if (Object.prototype.hasOwnProperty.call(filter, key)) {
246
- var element = filter[key];
163
+ const element = filter[key];
247
164
  if (Array.isArray(element)) {
248
165
  if (element.length > 0 && typeof element[0] === 'object')
249
166
  return false;
@@ -252,24 +169,20 @@ function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
252
169
  }
253
170
  }
254
171
  }
255
- var _loop_1 = function (key) {
172
+ for (const key in filter) {
256
173
  if (Object.prototype.hasOwnProperty.call(filter, key)) {
257
- var element = filter[key];
174
+ const element = filter[key];
258
175
  if (Array.isArray(element)) {
259
176
  if (key.endsWith("_in"))
260
177
  url.add(key, JSON.stringify(element));
261
178
  else
262
- element.forEach(function (e) { return url.add(key, e); });
179
+ element.forEach(e => url.add(key, e));
263
180
  }
264
- else if (key.startsWith(filter_interfaces_1.customUrlToken))
181
+ else if (key.startsWith(customUrlToken))
265
182
  url.add(key, JSON.stringify(element));
266
183
  else
267
184
  url.add(key, element);
268
185
  }
269
- };
270
- for (var key in filter) {
271
- _loop_1(key);
272
186
  }
273
187
  return true;
274
188
  }
275
- exports.addFilterToUrlAndReturnTrueIfSuccessful = addFilterToUrlAndReturnTrueIfSuccessful;