remult 0.14.6 → 0.14.7

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 (74) hide show
  1. package/assign.js +5 -1
  2. package/classType.js +2 -1
  3. package/graphql.js +146 -84
  4. package/index.js +73 -25
  5. package/inputTypes.js +16 -9
  6. package/package.json +1 -2
  7. package/postgres/index.js +4 -1
  8. package/postgres/postgres-data-provider.d.ts +4 -1
  9. package/postgres/postgres-data-provider.js +364 -165
  10. package/postgres/postgresColumnSyntax.d.ts +1 -1
  11. package/postgres/postgresColumnSyntax.js +8 -4
  12. package/remult-express.js +10 -6
  13. package/remult-knex/index.d.ts +5 -2
  14. package/remult-knex/index.js +720 -300
  15. package/remult-middleware.js +29 -24
  16. package/remult-mongo.js +406 -172
  17. package/server/JsonEntityFileStorage.js +15 -10
  18. package/server/expressBridge.d.ts +4 -2
  19. package/server/expressBridge.js +570 -383
  20. package/server/index.js +11 -4
  21. package/server/register-actions-on-server.js +38 -12
  22. package/server/register-entities-on-server.js +13 -9
  23. package/src/__EntityValueProvider.js +2 -1
  24. package/src/__RowsOfDataForTesting.js +2 -1
  25. package/src/backend-tests/backend-database-test-setup.backend-spec.js +190 -72
  26. package/src/backend-tests/my-test.backend-spec.js +114 -45
  27. package/src/column-interfaces.js +6 -2
  28. package/src/column.js +113 -71
  29. package/src/context.js +330 -174
  30. package/src/data-api.js +326 -162
  31. package/src/data-interfaces.js +11 -7
  32. package/src/data-providers/array-entity-data-provider.js +286 -171
  33. package/src/data-providers/in-memory-database.js +27 -12
  34. package/src/data-providers/json-data-provider.js +77 -41
  35. package/src/data-providers/rest-data-provider.js +189 -102
  36. package/src/data-providers/sql-database.js +403 -223
  37. package/src/data-providers/web-sql-data-provider.js +139 -78
  38. package/src/entity.js +2 -1
  39. package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +1 -1
  40. package/src/filter/filter-consumer-bridge-to-sql-request.js +248 -106
  41. package/src/filter/filter-consumer-bridge-to-url-builder.js +2 -1
  42. package/src/filter/filter-interfaces.js +440 -277
  43. package/src/id-entity.js +17 -8
  44. package/src/remult3/RepositoryImplementation.js +2367 -1191
  45. package/src/remult3/index.js +5 -2
  46. package/src/remult3/remult3.js +2 -1
  47. package/src/server-action.js +528 -294
  48. package/src/shared-tests/db-tests-setup.js +153 -49
  49. package/src/shared-tests/db-tests.db-tests.js +1566 -660
  50. package/src/shared-tests/deleteAll.js +20 -3
  51. package/src/shared-tests/entityWithValidations.js +79 -52
  52. package/src/shared-tests/index.js +6 -4
  53. package/src/shared-tests/test-custom-id-column.spec.js +85 -37
  54. package/src/shared-tests/test-special-value.spec.js +104 -64
  55. package/src/shared-tests/test-update-with-null.spec.js +49 -28
  56. package/src/sort.js +95 -38
  57. package/src/sql-command.js +2 -1
  58. package/src/tests/Done.js +13 -7
  59. package/src/tests/TestDataApiResponse.js +22 -15
  60. package/src/tests/c.js +27 -21
  61. package/src/tests/createData.js +48 -20
  62. package/src/tests/d.js +27 -19
  63. package/src/tests/dWithPrefilter.js +44 -31
  64. package/src/tests/entityForCustomFilter.js +66 -42
  65. package/src/tests/entityWithValidationsOnColumn.js +29 -21
  66. package/src/tests/frontend-database-tests-setup.spec.js +98 -35
  67. package/src/tests/h.js +44 -35
  68. package/src/tests/remult-3-entities.js +80 -71
  69. package/src/tests/tasks.js +29 -23
  70. package/src/tests/testHelper.spec.js +322 -170
  71. package/src/tests/testModel/models.js +33 -25
  72. package/src/validators.js +59 -32
  73. package/urlBuilder.js +14 -8
  74. package/valueConverters.js +160 -161
@@ -1,52 +1,88 @@
1
- import { ArrayEntityDataProvider } from './array-entity-data-provider';
2
- export class JsonDataProvider {
3
- constructor(storage) {
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) {
4
8
  this.storage = storage;
5
9
  }
6
- getEntityDataProvider(entity) {
10
+ JsonDataProvider.prototype.getEntityDataProvider = function (entity) {
7
11
  return new JsonEntityDataProvider(entity, this.storage);
8
- }
9
- async transaction(action) {
10
- await action(this);
11
- }
12
- }
13
- class JsonEntityDataProvider {
14
- constructor(entity, helper) {
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) {
15
30
  this.entity = entity;
16
31
  this.helper = helper;
17
32
  this.p = Promise.resolve();
18
33
  }
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 => {
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) {
36
65
  save();
37
66
  return x;
38
- })));
39
- }
40
- delete(id) {
41
- return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.delete(id).then(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) {
42
72
  save();
43
73
  return x;
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
- }
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
+ }());
@@ -1,56 +1,94 @@
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) {
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) {
6
10
  this.url = url;
7
11
  this.http = http;
8
12
  this.supportsCustomFilter = true;
9
13
  }
10
- getEntityDataProvider(entity) {
14
+ RestDataProvider.prototype.getEntityDataProvider = function (entity) {
11
15
  return new RestEntityDataProvider(this.url + '/' + entity.key, this.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) {
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) {
19
29
  this.url = url;
20
30
  this.http = http;
21
31
  this.entity = entity;
22
32
  }
23
- translateFromJson(row) {
24
- let result = {};
25
- for (const col of this.entity.fields) {
26
- result[col.key] = col.valueConverter.fromJson(row[col.key]);
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
+ }
27
41
  }
28
- return result;
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]);
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; }
34
48
  }
35
49
  return result;
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;
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
+ }
45
59
  }
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;
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; }
66
+ }
67
+ 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;
54
92
  if (options) {
55
93
  if (options.where) {
56
94
  filterObject = options.where.toJson(); // options.where.__applyToConsumer(new FilterConsumnerBridgeToUrlBuilder(url));
@@ -58,18 +96,18 @@ export class RestEntityDataProvider {
58
96
  filterObject = undefined;
59
97
  }
60
98
  if (options.orderBy && options.orderBy.Segments) {
61
- let sort = '';
62
- let order = '';
63
- options.orderBy.Segments.forEach(c => {
64
- if (sort.length > 0) {
65
- sort += ",";
66
- order += ",";
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 += ",";
67
105
  }
68
- sort += c.field.key;
69
- order += c.isDescending ? "desc" : "asc";
106
+ sort_1 += c.field.key;
107
+ order_1 += c.isDescending ? "desc" : "asc";
70
108
  });
71
- url.add('_sort', sort);
72
- url.add('_order', order);
109
+ url.add('_sort', sort_1);
110
+ url.add('_order', order_1);
73
111
  }
74
112
  if (options.limit)
75
113
  url.add('_limit', options.limit);
@@ -78,53 +116,89 @@ export class RestEntityDataProvider {
78
116
  }
79
117
  if (filterObject) {
80
118
  url.add("__action", "get");
81
- return this.http.post(url.url, filterObject).then(x => x.map(y => this.translateFromJson(y)));
119
+ return this.http.post(url.url, filterObject).then(function (x) { return x.map(function (y) { return _this.translateFromJson(y); }); });
82
120
  }
83
121
  else
84
- return this.http.get(url.url).then(x => x.map(y => this.translateFromJson(y)));
122
+ return this.http.get(url.url).then(function (x) { return x.map(function (y) { return _this.translateFromJson(y); }); });
85
123
  ;
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]);
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
+ }
93
136
  }
94
- return this.http.put(this.url + '/' + encodeURIComponent(id), result).then(y => this.translateFromJson(y));
95
- }
96
- delete(id) {
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; }
143
+ }
144
+ return this.http.put(this.url + '/' + encodeURIComponent(id), result).then(function (y) { return _this.translateFromJson(y); });
145
+ };
146
+ RestEntityDataProvider.prototype.delete = function (id) {
97
147
  return this.http.delete(this.url + '/' + encodeURIComponent(id));
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) {
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) {
105
158
  this.fetch = fetch;
106
159
  }
107
- async get(url) {
108
- return await retry(async () => this.myFetch(url).then(r => {
109
- return r;
110
- }));
111
- }
112
- put(url, data) {
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) {
113
178
  return this.myFetch(url, {
114
179
  method: 'put',
115
180
  body: JSON.stringify(data)
116
181
  });
117
- }
118
- delete(url) {
182
+ };
183
+ RestDataProviderHttpProviderUsingFetch.prototype.delete = function (url) {
119
184
  return this.myFetch(url, { method: 'delete', credentials: 'include' });
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) {
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;
128
202
  if (!init)
129
203
  init = {};
130
204
  if (!init.headers)
@@ -132,23 +206,32 @@ export class RestDataProviderHttpProviderUsingFetch {
132
206
  var h = init.headers;
133
207
  h.append('Content-type', "application/json");
134
208
  init.credentials = 'include';
135
- return (this.fetch || fetch)(url, init).then(response => {
209
+ return (this.fetch || fetch)(url, init).then(function (response) {
136
210
  return onSuccess(response);
137
- }).catch(async (error) => {
138
- let r = await error;
139
- throw r;
140
- });
141
- }
142
- }
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;
143
226
  function onSuccess(response) {
144
227
  if (response.status == 204)
145
228
  return;
146
229
  if (response.status >= 200 && response.status < 300)
147
230
  return response.json();
148
231
  else {
149
- throw response.json().then(x => {
150
- return { ...x, message: x.message || response.statusText, url: response.url, status: response.status };
151
- }).catch(() => {
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 () {
152
235
  throw {
153
236
  message: response.statusText,
154
237
  url: response.url,
@@ -157,10 +240,10 @@ function onSuccess(response) {
157
240
  });
158
241
  }
159
242
  }
160
- export function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
161
- for (const key in filter) {
243
+ function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
244
+ for (var key in filter) {
162
245
  if (Object.prototype.hasOwnProperty.call(filter, key)) {
163
- const element = filter[key];
246
+ var element = filter[key];
164
247
  if (Array.isArray(element)) {
165
248
  if (element.length > 0 && typeof element[0] === 'object')
166
249
  return false;
@@ -169,20 +252,24 @@ export function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
169
252
  }
170
253
  }
171
254
  }
172
- for (const key in filter) {
255
+ var _loop_1 = function (key) {
173
256
  if (Object.prototype.hasOwnProperty.call(filter, key)) {
174
- const element = filter[key];
257
+ var element = filter[key];
175
258
  if (Array.isArray(element)) {
176
259
  if (key.endsWith("_in"))
177
260
  url.add(key, JSON.stringify(element));
178
261
  else
179
- element.forEach(e => url.add(key, e));
262
+ element.forEach(function (e) { return url.add(key, e); });
180
263
  }
181
- else if (key.startsWith(customUrlToken))
264
+ else if (key.startsWith(filter_interfaces_1.customUrlToken))
182
265
  url.add(key, JSON.stringify(element));
183
266
  else
184
267
  url.add(key, element);
185
268
  }
269
+ };
270
+ for (var key in filter) {
271
+ _loop_1(key);
186
272
  }
187
273
  return true;
188
274
  }
275
+ exports.addFilterToUrlAndReturnTrueIfSuccessful = addFilterToUrlAndReturnTrueIfSuccessful;