@osimatic/helpers-js 1.0.106 → 1.0.107

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.
package/CHANGELOG CHANGED
@@ -56,4 +56,7 @@ var intlTelInputUtilsPath = 'xxx'; -> TelephoneNumber.setIntlTelInputUtilsPath('
56
56
  1.0.99
57
57
  JwtSession.isSimulationConnexion() -> JwtSession.simulateLogin() (fonctionnement différent)
58
58
  JwtSession.cancelSimulationConnexion() -> JwtSession.cancelSimulatedLogin() (fonctionnement différent)
59
- HTTPRequest -> HTTPClient
59
+ HTTPRequest -> HTTPClient
60
+
61
+ 1.0.106
62
+ UrlAndQueryString.getPath() -> UrlAndQueryString.getHostAndPath()
package/data_table.js CHANGED
@@ -204,7 +204,7 @@ class DataTable {
204
204
  queryString = queryString.includes('?') ? queryString.substring(1) : queryString;
205
205
  //console.log('new queryString', queryString);
206
206
 
207
- let newUrl = UrlAndQueryString.getPath(url) + '?' + queryString;
207
+ let newUrl = UrlAndQueryString.getHostAndPath(url) + '?' + queryString;
208
208
  window.history.pushState("", "", newUrl);
209
209
  }
210
210
 
package/network.js CHANGED
@@ -1,131 +1,442 @@
1
- /** @deprecated */
2
- class HTTPRequest {
3
- static init() {
4
- require('whatwg-fetch'); //fetch polyfill loaded in window.fetch
1
+ class Cookie {
2
+ static set(cname, cvalue, exdays) {
3
+ var d = new Date();
4
+ d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
5
+ var expires = "expires=" + d.toUTCString();
6
+ document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
5
7
  }
6
8
 
7
- static setRefreshTokenUrl(url) {
8
- this.refreshTokenUrl = url;
9
+ static get(cname) {
10
+ var name = cname + "=";
11
+ var decodedCookie = decodeURIComponent(document.cookie);
12
+ var ca = decodedCookie.split(';');
13
+ for (var i = 0; i < ca.length; i++) {
14
+ var c = ca[i];
15
+ while (c.charAt(0) == ' ') {
16
+ c = c.substring(1);
17
+ }
18
+ if (c.indexOf(name) === 0) {
19
+ return c.substring(name.length, c.length);
20
+ }
21
+ }
22
+ return null;
9
23
  }
10
24
 
11
- static setRefreshTokenCallback(callback) {
12
- this.refreshTokenCallback = callback;
25
+ static erase(name) {
26
+ Cookie.set(name, "", -1);
13
27
  }
28
+ }
14
29
 
15
- static getHeaders(asObject) {
16
- if (typeof this.headers == 'undefined') {
17
- this.headers = {};
18
- }
30
+ class UrlAndQueryString {
31
+ static displayUrl(url, withLink) {
32
+ return '<a href="'+url+'">'+UrlAndQueryString.getHost(url, false)+'</a>';
33
+ }
19
34
 
20
- if (typeof asObject != 'undefined' && asObject) {
21
- return this.headers;
35
+ static getHost(url, withProtocol) {
36
+ withProtocol = typeof withProtocol == 'undefined' ? true : withProtocol;
37
+ if (typeof url == 'undefined') {
38
+ return withProtocol ? window.location.origin : window.location.host;
22
39
  }
40
+ url = new URL(url);
41
+ return (withProtocol?url.protocol+'//':'') + url.host;
42
+ }
23
43
 
24
- let httpHeaders = new Headers();
25
- Object.entries(this.headers).forEach(([key, value]) => {
26
- httpHeaders.append(key, value);
27
- });
28
-
29
- return httpHeaders;
44
+ static getPath(url) {
45
+ if (typeof url == 'undefined') {
46
+ return window.location.pathname;
47
+ }
48
+ url = new URL(url);
49
+ return url.pathname;
30
50
  }
31
51
 
32
- static getHeader(key) {
33
- if (typeof this.headers == 'undefined') {
34
- this.headers = {};
52
+ static getQueryString(url) {
53
+ if (typeof url == 'undefined') {
54
+ return window.location.search;
35
55
  }
56
+ url = new URL(url);
57
+ return url.search;
58
+ }
36
59
 
37
- return this.headers[key];
60
+ static getHostAndPath(url, withProtocol) {
61
+ return UrlAndQueryString.getHost(url, withProtocol) + UrlAndQueryString.getPath(url);
62
+
63
+ //let strpos = url.indexOf('?');
64
+ //if (strpos === -1) {
65
+ // return url;
66
+ //}
67
+ //return url.substr(0, strpos);
38
68
  }
39
69
 
40
- static setHeader(key, value) {
41
- if (typeof this.headers == 'undefined') {
42
- this.headers = {};
43
- }
44
-
45
- this.headers[key] = value;
70
+ static getParam(key, url) {
71
+ let searchParams = new URLSearchParams(UrlAndQueryString.getQueryString(url));
72
+ return searchParams.get(key);
46
73
  }
47
74
 
48
- static setAuthorizationHeader(accessToken) {
49
- if (typeof this.headers == 'undefined') {
50
- this.headers = {};
51
- }
75
+ static setParam(queryString, name, value) {
76
+ // cette solution ne fonctionne pas avec les tableau
77
+ //let params = new URLSearchParams(queryString);
78
+ //params.set(name, value);
79
+ //return params.toString();
52
80
 
53
- this.headers['Authorization'] = 'Bearer ' + accessToken;
81
+ let params = UrlAndQueryString.parseQuery(queryString);
82
+ //console.log(params);
83
+ params[name] = value;
84
+ return decodeURI($.param(params));
85
+ }
86
+ static setParamOfUrl(name, value, url) {
87
+ let queryString = UrlAndQueryString.setParam(UrlAndQueryString.getQueryString(url), name, value);
88
+ return UrlAndQueryString.getHostAndPath(url) + '?' + queryString;
54
89
  }
55
90
 
56
- static convertObjectToFormData(obj) {
57
- // 30/05/2022 : ancienne version, qui ne fonctionne pas avec des tableaux
58
- // let formData = new FormData();
59
- // Object.entries(data).forEach(([key, value]) => formData.append(key, value));
60
- // return formData;
91
+ static deleteParam(queryString, name) {
92
+ let params = new URLSearchParams(queryString);
93
+ params.delete(name);
94
+ return decodeURI(params.toString());
61
95
 
62
- var formData = new FormData();
96
+ //let params = UrlAndQueryString.parseQuery(queryString);
97
+ //params[name] = null;
98
+ //return $.param(params);
99
+ }
100
+ static deleteParamOfUrl(name, url) {
101
+ let queryString = UrlAndQueryString.deleteParam(UrlAndQueryString.getQueryString(url), name);
102
+ return UrlAndQueryString.getHostAndPath(url) + '?' + queryString;
103
+ }
104
+ static deleteParamsOfUrl(names, url) {
105
+ let queryString = UrlAndQueryString.getQueryString(url);
106
+ names.forEach((name => queryString = UrlAndQueryString.deleteParam(queryString, name)));
107
+ return UrlAndQueryString.getHostAndPath(url) + '?' + queryString;
108
+ }
63
109
 
64
- function appendFormData(data, root) {
65
- //console.log('appendFormData', data, root);
66
- root = root || '';
67
- if (data instanceof File) {
68
- formData.append(root, data);
110
+ static parseQuery(queryString) {
111
+ var params = {};
112
+
113
+ function buildParamFromString(param) {
114
+ var p = decodeURIComponent(param);
115
+ var strpos = p.indexOf('=');
116
+ // Si on trouve pas de signe =, on met la valeur ''
117
+ if (strpos === -1) {
118
+ params[p] = '';
119
+ //params.length++;
120
+ return true;
69
121
  }
70
- else if (Array.isArray(data)) {
71
- for (var i = 0; i < data.length; i++) {
72
- appendFormData(data[i], root + '[' + i + ']');
122
+ var name = p.substr(0, strpos);
123
+ var value = p.substr(strpos + 1, p.length);
124
+ var openBracket = name.indexOf('[');
125
+ var closeBracket = name.indexOf(']');
126
+ // On traite les paramètre qui ne sont pas sous forme de tableau
127
+ if (openBracket === -1 || closeBracket === -1) {
128
+ if (!(openBracket === -1 && closeBracket === -1)) {
129
+ name = name.replace(new RegExp('[\\[\\]]'), '_');
73
130
  }
131
+ params[name] = value;
132
+ return true;
74
133
  }
75
- else if (typeof data === 'object' && data) {
76
- for (var key in data) {
77
- if (data.hasOwnProperty(key)) {
78
- if (root === '') {
79
- appendFormData(data[key], key);
80
- } else {
81
- appendFormData(data[key], root + '.' + key);
82
- }
134
+ var matches = name.match(new RegExp('\\[.*?\\]', 'g'));
135
+ name = name.substr(0, openBracket);
136
+ p = 'params';
137
+ var key = name;
138
+ for (let i in matches) {
139
+ if (typeof (matches[i]) == 'function') {
140
+ continue;
141
+ }
142
+
143
+ p += '[\'' + key + '\']';
144
+ if (eval(p) == undefined || typeof (eval(p)) != 'object') {
145
+ eval(p + '= new Array();');
146
+ }
147
+ key = matches[i].substr(1, matches[i].length - 2);
148
+ // si la clé est null on met la longueur du tableau
149
+ if (key == '') {
150
+ key = eval(p).length;
151
+ }
152
+
153
+ /*
154
+ p += '[\''+key+'\']';
155
+ if(eval(p) == undefined || typeof(eval(p)) != 'object') {
156
+ eval(p +'= new Array();');
157
+ }
158
+ if (typeof(matches[i]) != 'function') {
159
+ key = matches[i].substr(1,matches[i].length-2);
160
+ // si la clé est null on met la longueur du tableau
161
+ if (key == '') {
162
+ key = eval(p).length;
83
163
  }
84
164
  }
85
- }
86
- else {
87
- if (data !== null && typeof data !== 'undefined') {
88
- formData.append(root, data);
165
+ else {
166
+ key = eval(p).length;
89
167
  }
168
+ */
90
169
  }
170
+ p += '[\'' + key + '\']';
171
+ eval(p + '= \'' + value + '\';');
91
172
  }
92
173
 
93
- appendFormData(obj);
94
-
95
- return formData;
96
- }
97
-
98
- static formatQueryString(data) {
99
- if (data == null) {
100
- return '';
174
+ var str = queryString;
175
+ if (str.includes('?')) {
176
+ str = str.substring(1);
101
177
  }
102
- if (typeof data == 'object') {
103
- data = UrlAndQueryString.buildQuery(data);
178
+ if (str === '') {
179
+ return {};
104
180
  }
105
- if (data !== '' && data.substring(0, 1) !== '&') {
106
- data = '&' + data;
181
+ str = str.replace(new RegExp('&'), '&');
182
+ //params.length = 0;
183
+ str = str.split('&');
184
+ //var p = '';
185
+ //var startPos = -1;
186
+ //var endPos = -1;
187
+ //var arrayName = '';
188
+ //var arrayKey = '';
189
+ for (let i = 0; i < str.length; i++) {
190
+ buildParamFromString(str[i]);
107
191
  }
108
- return data;
192
+ // return JSON.parse(JSON.stringify(this.params));
193
+ return params;
109
194
  }
110
195
 
111
- static formatFormData(data) {
112
- if (!(data instanceof FormData)) {
113
- return HTTPRequest.convertObjectToFormData(data);
196
+ static buildQuery(object) {
197
+ var params = [];
198
+
199
+ function buildStringFromParam(object, prefix) {
200
+ var p = '';
201
+ var value = '';
202
+ if (prefix !== undefined) {
203
+ p = prefix;
204
+ }
205
+ if (typeof (object) == 'object') {
206
+ for (var name in object) {
207
+ value = object[name];
208
+ // 06/06/2022 : ajout de ce if pour éviter bug sur fonction HTTPRequest.formatQueryString
209
+ if (typeof (value) == 'undefined') {
210
+ continue;
211
+ }
212
+ // 14/01/2020 : les tableaux avec param[0], param[1] en query string fonctionne pas, il faut mettre param[]=x&param[]=y
213
+ //name = p == '' ? name : '['+name+']';
214
+ name = p == '' ? name : '[]';
215
+ if (typeof (value) == 'object') {
216
+ buildStringFromParam(value, p + name);
217
+ }
218
+ // 06/06/2022 : ajout null !== value pour éviter bug sur fonction HTTPRequest.formatQueryString
219
+ else if (null !== value && typeof (value) != 'function' && name != '') {
220
+ // 27/01/2020 : correction bug boolean affiché en string true/false
221
+ if (typeof (value) == 'boolean') {
222
+ value = (value ? 1 : 0);
223
+ }
224
+ params[params.length] = p + name + '=' + value;
225
+ }
226
+ }
227
+ }
114
228
  }
115
- return data;
116
- }
117
229
 
118
- static logRequestFailure(response, json) {
119
- console.error('Request failure. Status: '+response.statusText+' ; HTTP Code : '+response.status, json);
230
+ buildStringFromParam(object);
231
+ return params.join('&');
120
232
  }
121
233
 
122
- static logJqueryRequestFailure(jqxhr, status, errorThrown) {
123
- console.error('Request failure. Status: '+status+' ; HTTP Code: '+jqxhr.status+(null!=errorThrown && ''!==errorThrown ? ' ; Error message: '+errorThrown : ''), jqxhr.responseJSON);
124
- }
125
234
 
126
- static isExpiredToken(response, json) {
127
- if (response.status !== 401) {
128
- return false;
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+ // deprecated
253
+
254
+ /** @deprecated **/
255
+ static parseQueryString(string) {
256
+ if (string === "" || string == null) return {};
257
+ if (string.charAt(0) === "?") string = string.slice(1);
258
+ var entries = string.split("&"), counters = {}, data0 = {};
259
+ for (var i = 0; i < entries.length; i++) {
260
+ var entry = entries[i].split("=");
261
+ var key5 = decodeURIComponent(entry[0]);
262
+ var value2 = entry.length === 2 ? decodeURIComponent(entry[1]) : "";
263
+ if (value2 === "true") value2 = true;
264
+ else if (value2 === "false") value2 = false;
265
+ var levels = key5.split(/\]\[?|\[/);
266
+ var cursor = data0;
267
+ if (key5.indexOf("[") > -1) levels.pop();
268
+ for (var j0 = 0; j0 < levels.length; j0++) {
269
+ var level = levels[j0], nextLevel = levels[j0 + 1];
270
+ var isNumber = nextLevel == "" || !isNaN(parseInt(nextLevel, 10));
271
+ if (level === "") {
272
+ var key5 = levels.slice(0, j0).join();
273
+ if (counters[key5] == null) {
274
+ counters[key5] = Array.isArray(cursor) ? cursor.length : 0;
275
+ }
276
+ level = counters[key5]++;
277
+ }
278
+ // Disallow direct prototype pollution
279
+ else if (level === "__proto__") break;
280
+ if (j0 === levels.length - 1) cursor[level] = value2;
281
+ else {
282
+ // Read own properties exclusively to disallow indirect
283
+ // prototype pollution
284
+ var desc = Object.getOwnPropertyDescriptor(cursor, level);
285
+ if (desc != null) desc = desc.value;
286
+ if (desc == null) cursor[level] = desc = isNumber ? [] : {};
287
+ cursor = desc;
288
+ }
289
+ }
290
+ }
291
+ return data0;
292
+ }
293
+
294
+ /** @deprecated **/
295
+ static getQuery(url) {
296
+ var str = url;
297
+ var strpos = str.indexOf('?');
298
+ // Si on ne trouve pas de queryString on retourne une chaine vide
299
+ if (strpos === -1) {
300
+ return '';
301
+ }
302
+ str = str.substr(strpos + 1, str.length);
303
+ // Maintenant on verifie si on a une anchor ou pas (#) et si c'est le cas on arrete la querystring avant
304
+ strpos = str.indexOf('#');
305
+ if (strpos === -1) {
306
+ return str;
307
+ }
308
+ return str.substr(0, strpos);
309
+ }
310
+
311
+ }
312
+ /** @deprecated */
313
+ class HTTPRequest {
314
+ static init() {
315
+ require('whatwg-fetch'); //fetch polyfill loaded in window.fetch
316
+ }
317
+
318
+ static setRefreshTokenUrl(url) {
319
+ this.refreshTokenUrl = url;
320
+ }
321
+
322
+ static setRefreshTokenCallback(callback) {
323
+ this.refreshTokenCallback = callback;
324
+ }
325
+
326
+ static getHeaders(asObject) {
327
+ if (typeof this.headers == 'undefined') {
328
+ this.headers = {};
329
+ }
330
+
331
+ if (typeof asObject != 'undefined' && asObject) {
332
+ return this.headers;
333
+ }
334
+
335
+ let httpHeaders = new Headers();
336
+ Object.entries(this.headers).forEach(([key, value]) => {
337
+ httpHeaders.append(key, value);
338
+ });
339
+
340
+ return httpHeaders;
341
+ }
342
+
343
+ static getHeader(key) {
344
+ if (typeof this.headers == 'undefined') {
345
+ this.headers = {};
346
+ }
347
+
348
+ return this.headers[key];
349
+ }
350
+
351
+ static setHeader(key, value) {
352
+ if (typeof this.headers == 'undefined') {
353
+ this.headers = {};
354
+ }
355
+
356
+ this.headers[key] = value;
357
+ }
358
+
359
+ static setAuthorizationHeader(accessToken) {
360
+ if (typeof this.headers == 'undefined') {
361
+ this.headers = {};
362
+ }
363
+
364
+ this.headers['Authorization'] = 'Bearer ' + accessToken;
365
+ }
366
+
367
+ static convertObjectToFormData(obj) {
368
+ // 30/05/2022 : ancienne version, qui ne fonctionne pas avec des tableaux
369
+ // let formData = new FormData();
370
+ // Object.entries(data).forEach(([key, value]) => formData.append(key, value));
371
+ // return formData;
372
+
373
+ var formData = new FormData();
374
+
375
+ function appendFormData(data, root) {
376
+ //console.log('appendFormData', data, root);
377
+ root = root || '';
378
+ if (data instanceof File) {
379
+ formData.append(root, data);
380
+ }
381
+ else if (Array.isArray(data)) {
382
+ for (var i = 0; i < data.length; i++) {
383
+ appendFormData(data[i], root + '[' + i + ']');
384
+ }
385
+ }
386
+ else if (typeof data === 'object' && data) {
387
+ for (var key in data) {
388
+ if (data.hasOwnProperty(key)) {
389
+ if (root === '') {
390
+ appendFormData(data[key], key);
391
+ } else {
392
+ appendFormData(data[key], root + '.' + key);
393
+ }
394
+ }
395
+ }
396
+ }
397
+ else {
398
+ if (data !== null && typeof data !== 'undefined') {
399
+ formData.append(root, data);
400
+ }
401
+ }
402
+ }
403
+
404
+ appendFormData(obj);
405
+
406
+ return formData;
407
+ }
408
+
409
+ static formatQueryString(data) {
410
+ if (data == null) {
411
+ return '';
412
+ }
413
+ if (typeof data == 'object') {
414
+ data = UrlAndQueryString.buildQuery(data);
415
+ }
416
+ if (data !== '' && data.substring(0, 1) !== '&') {
417
+ data = '&' + data;
418
+ }
419
+ return data;
420
+ }
421
+
422
+ static formatFormData(data) {
423
+ if (!(data instanceof FormData)) {
424
+ return HTTPRequest.convertObjectToFormData(data);
425
+ }
426
+ return data;
427
+ }
428
+
429
+ static logRequestFailure(response, json) {
430
+ console.error('Request failure. Status: '+response.statusText+' ; HTTP Code : '+response.status, json);
431
+ }
432
+
433
+ static logJqueryRequestFailure(jqxhr, status, errorThrown) {
434
+ console.error('Request failure. Status: '+status+' ; HTTP Code: '+jqxhr.status+(null!=errorThrown && ''!==errorThrown ? ' ; Error message: '+errorThrown : ''), jqxhr.responseJSON);
435
+ }
436
+
437
+ static isExpiredToken(response, json) {
438
+ if (response.status !== 401) {
439
+ return false;
129
440
  }
130
441
 
131
442
  return (
@@ -400,7 +711,7 @@ class HTTPRequest {
400
711
  HTTPRequest.setAuthorizationHeader(JwtSession.getToken());
401
712
 
402
713
  onCompleteCallback();
403
- },
714
+ },
404
715
  () => {
405
716
  JwtSession.logout();
406
717
  errorCallback();
@@ -451,297 +762,4 @@ class HTTPRequest {
451
762
  }
452
763
  }
453
764
 
454
- class Cookie {
455
- static set(cname, cvalue, exdays) {
456
- var d = new Date();
457
- d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
458
- var expires = "expires=" + d.toUTCString();
459
- document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
460
- }
461
-
462
- static get(cname) {
463
- var name = cname + "=";
464
- var decodedCookie = decodeURIComponent(document.cookie);
465
- var ca = decodedCookie.split(';');
466
- for (var i = 0; i < ca.length; i++) {
467
- var c = ca[i];
468
- while (c.charAt(0) == ' ') {
469
- c = c.substring(1);
470
- }
471
- if (c.indexOf(name) === 0) {
472
- return c.substring(name.length, c.length);
473
- }
474
- }
475
- return null;
476
- }
477
-
478
- static erase(name) {
479
- Cookie.set(name, "", -1);
480
- }
481
- }
482
-
483
- class UrlAndQueryString {
484
- static getPath(url) {
485
- if (typeof url == 'undefined') {
486
- return window.location.origin + window.location.pathname;
487
- }
488
- let strpos = url.indexOf('?');
489
- // Si on ne trouve pas de queryString on retourne une chaine vide
490
- if (strpos === -1) {
491
- return url;
492
- }
493
- return url.substr(0, strpos);
494
- }
495
-
496
- static getQueryString(url) {
497
- if (typeof url == 'undefined') {
498
- return window.location.search;
499
- }
500
- let urlObj = new URL(url);
501
- return urlObj.search;
502
- }
503
-
504
- static getParam(key, url) {
505
- var searchParams = new URLSearchParams(UrlAndQueryString.getQueryString(url));
506
- return searchParams.get(key);
507
- }
508
-
509
- static setParam(queryString, name, value) {
510
- // cette solution ne fonctionne pas avec les tableau
511
- //let params = new URLSearchParams(queryString);
512
- //params.set(name, value);
513
- //return params.toString();
514
-
515
- let params = UrlAndQueryString.parseQuery(queryString);
516
- //console.log(params);
517
- params[name] = value;
518
- return decodeURI($.param(params));
519
- }
520
- static setParamOfUrl(name, value, url) {
521
- let queryString = UrlAndQueryString.setParam(UrlAndQueryString.getQueryString(url), name, value);
522
- return UrlAndQueryString.getPath(url) + '?' + queryString;
523
- }
524
-
525
- static deleteParam(queryString, name) {
526
- let params = new URLSearchParams(queryString);
527
- params.delete(name);
528
- return decodeURI(params.toString());
529
-
530
- //let params = UrlAndQueryString.parseQuery(queryString);
531
- //params[name] = null;
532
- //return $.param(params);
533
- }
534
- static deleteParamOfUrl(name, url) {
535
- let queryString = UrlAndQueryString.deleteParam(UrlAndQueryString.getQueryString(url), name);
536
- return UrlAndQueryString.getPath(url) + '?' + queryString;
537
- }
538
- static deleteParamsOfUrl(names, url) {
539
- let queryString = UrlAndQueryString.getQueryString(url);
540
- names.forEach((name => queryString = UrlAndQueryString.deleteParam(queryString, name)));
541
- return UrlAndQueryString.getPath(url) + '?' + queryString;
542
- }
543
-
544
- static parseQuery(queryString) {
545
- var params = {};
546
-
547
- function buildParamFromString(param) {
548
- var p = decodeURIComponent(param);
549
- var strpos = p.indexOf('=');
550
- // Si on trouve pas de signe =, on met la valeur ''
551
- if (strpos === -1) {
552
- params[p] = '';
553
- //params.length++;
554
- return true;
555
- }
556
- var name = p.substr(0, strpos);
557
- var value = p.substr(strpos + 1, p.length);
558
- var openBracket = name.indexOf('[');
559
- var closeBracket = name.indexOf(']');
560
- // On traite les paramètre qui ne sont pas sous forme de tableau
561
- if (openBracket === -1 || closeBracket === -1) {
562
- if (!(openBracket === -1 && closeBracket === -1)) {
563
- name = name.replace(new RegExp('[\\[\\]]'), '_');
564
- }
565
- params[name] = value;
566
- return true;
567
- }
568
- var matches = name.match(new RegExp('\\[.*?\\]', 'g'));
569
- name = name.substr(0, openBracket);
570
- p = 'params';
571
- var key = name;
572
- for (let i in matches) {
573
- if (typeof (matches[i]) == 'function') {
574
- continue;
575
- }
576
-
577
- p += '[\'' + key + '\']';
578
- if (eval(p) == undefined || typeof (eval(p)) != 'object') {
579
- eval(p + '= new Array();');
580
- }
581
- key = matches[i].substr(1, matches[i].length - 2);
582
- // si la clé est null on met la longueur du tableau
583
- if (key == '') {
584
- key = eval(p).length;
585
- }
586
-
587
- /*
588
- p += '[\''+key+'\']';
589
- if(eval(p) == undefined || typeof(eval(p)) != 'object') {
590
- eval(p +'= new Array();');
591
- }
592
- if (typeof(matches[i]) != 'function') {
593
- key = matches[i].substr(1,matches[i].length-2);
594
- // si la clé est null on met la longueur du tableau
595
- if (key == '') {
596
- key = eval(p).length;
597
- }
598
- }
599
- else {
600
- key = eval(p).length;
601
- }
602
- */
603
- }
604
- p += '[\'' + key + '\']';
605
- eval(p + '= \'' + value + '\';');
606
- }
607
-
608
- var str = queryString;
609
- if (str.includes('?')) {
610
- str = str.substring(1);
611
- }
612
- if (str === '') {
613
- return {};
614
- }
615
- str = str.replace(new RegExp('&'), '&');
616
- //params.length = 0;
617
- str = str.split('&');
618
- //var p = '';
619
- //var startPos = -1;
620
- //var endPos = -1;
621
- //var arrayName = '';
622
- //var arrayKey = '';
623
- for (let i = 0; i < str.length; i++) {
624
- buildParamFromString(str[i]);
625
- }
626
- // return JSON.parse(JSON.stringify(this.params));
627
- return params;
628
- }
629
-
630
- static buildQuery(object) {
631
- var params = [];
632
-
633
- function buildStringFromParam(object, prefix) {
634
- var p = '';
635
- var value = '';
636
- if (prefix !== undefined) {
637
- p = prefix;
638
- }
639
- if (typeof (object) == 'object') {
640
- for (var name in object) {
641
- value = object[name];
642
- // 06/06/2022 : ajout de ce if pour éviter bug sur fonction HTTPRequest.formatQueryString
643
- if (typeof (value) == 'undefined') {
644
- continue;
645
- }
646
- // 14/01/2020 : les tableaux avec param[0], param[1] en query string fonctionne pas, il faut mettre param[]=x&param[]=y
647
- //name = p == '' ? name : '['+name+']';
648
- name = p == '' ? name : '[]';
649
- if (typeof (value) == 'object') {
650
- buildStringFromParam(value, p + name);
651
- }
652
- // 06/06/2022 : ajout null !== value pour éviter bug sur fonction HTTPRequest.formatQueryString
653
- else if (null !== value && typeof (value) != 'function' && name != '') {
654
- // 27/01/2020 : correction bug boolean affiché en string true/false
655
- if (typeof (value) == 'boolean') {
656
- value = (value ? 1 : 0);
657
- }
658
- params[params.length] = p + name + '=' + value;
659
- }
660
- }
661
- }
662
- }
663
-
664
- buildStringFromParam(object);
665
- return params.join('&');
666
- }
667
-
668
-
669
-
670
-
671
-
672
-
673
-
674
-
675
-
676
-
677
-
678
-
679
-
680
-
681
-
682
-
683
-
684
-
685
-
686
- // deprecated
687
-
688
- /** @deprecated **/
689
- static parseQueryString(string) {
690
- if (string === "" || string == null) return {};
691
- if (string.charAt(0) === "?") string = string.slice(1);
692
- var entries = string.split("&"), counters = {}, data0 = {};
693
- for (var i = 0; i < entries.length; i++) {
694
- var entry = entries[i].split("=");
695
- var key5 = decodeURIComponent(entry[0]);
696
- var value2 = entry.length === 2 ? decodeURIComponent(entry[1]) : "";
697
- if (value2 === "true") value2 = true;
698
- else if (value2 === "false") value2 = false;
699
- var levels = key5.split(/\]\[?|\[/);
700
- var cursor = data0;
701
- if (key5.indexOf("[") > -1) levels.pop();
702
- for (var j0 = 0; j0 < levels.length; j0++) {
703
- var level = levels[j0], nextLevel = levels[j0 + 1];
704
- var isNumber = nextLevel == "" || !isNaN(parseInt(nextLevel, 10));
705
- if (level === "") {
706
- var key5 = levels.slice(0, j0).join();
707
- if (counters[key5] == null) {
708
- counters[key5] = Array.isArray(cursor) ? cursor.length : 0;
709
- }
710
- level = counters[key5]++;
711
- }
712
- // Disallow direct prototype pollution
713
- else if (level === "__proto__") break;
714
- if (j0 === levels.length - 1) cursor[level] = value2;
715
- else {
716
- // Read own properties exclusively to disallow indirect
717
- // prototype pollution
718
- var desc = Object.getOwnPropertyDescriptor(cursor, level);
719
- if (desc != null) desc = desc.value;
720
- if (desc == null) cursor[level] = desc = isNumber ? [] : {};
721
- cursor = desc;
722
- }
723
- }
724
- }
725
- return data0;
726
- }
727
-
728
- /** @deprecated **/
729
- static getQuery(url) {
730
- var str = url;
731
- var strpos = str.indexOf('?');
732
- // Si on ne trouve pas de queryString on retourne une chaine vide
733
- if (strpos === -1) {
734
- return '';
735
- }
736
- str = str.substr(strpos + 1, str.length);
737
- // Maintenant on verifie si on a une anchor ou pas (#) et si c'est le cas on arrete la querystring avant
738
- strpos = str.indexOf('#');
739
- if (strpos === -1) {
740
- return str;
741
- }
742
- return str.substr(0, strpos);
743
- }
744
-
745
- }
746
-
747
765
  module.exports = { HTTPRequest, Cookie, UrlAndQueryString };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osimatic/helpers-js",
3
- "version": "1.0.106",
3
+ "version": "1.0.107",
4
4
  "main": "main.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"