ng2-rest 13.2.4 → 13.2.6

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 (125) hide show
  1. package/README.md +135 -135
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/browser/README.md +24 -24
  4. package/browser/esm2020/lib/content-type.mjs +12 -12
  5. package/browser/esm2020/lib/cookie.mjs +28 -28
  6. package/browser/esm2020/lib/helpers.mjs +23 -23
  7. package/browser/esm2020/lib/index.mjs +12 -12
  8. package/browser/esm2020/lib/mapping.mjs +238 -238
  9. package/browser/esm2020/lib/models.mjs +160 -165
  10. package/browser/esm2020/lib/other/simple-resource.mjs +116 -116
  11. package/browser/esm2020/lib/params.mjs +278 -278
  12. package/browser/esm2020/lib/request-cache.mjs +100 -100
  13. package/browser/esm2020/lib/resource.service.mjs +213 -213
  14. package/browser/esm2020/lib/rest-headers.mjs +128 -128
  15. package/browser/esm2020/lib/rest-request.mjs +321 -321
  16. package/browser/esm2020/lib/rest.class.mjs +115 -115
  17. package/browser/esm2020/ng2-rest.mjs +4 -4
  18. package/browser/esm2020/public-api.mjs +1 -1
  19. package/browser/fesm2015/ng2-rest.mjs +1677 -1683
  20. package/browser/fesm2015/ng2-rest.mjs.map +1 -1
  21. package/browser/fesm2020/ng2-rest.mjs +1675 -1681
  22. package/browser/fesm2020/ng2-rest.mjs.map +1 -1
  23. package/browser/lib/content-type.d.ts +4 -4
  24. package/browser/lib/cookie.d.ts +7 -7
  25. package/browser/lib/helpers.d.ts +10 -10
  26. package/browser/lib/index.d.ts +9 -9
  27. package/browser/lib/mapping.d.ts +12 -12
  28. package/browser/lib/models.d.ts +157 -157
  29. package/browser/lib/other/simple-resource.d.ts +29 -29
  30. package/browser/lib/params.d.ts +23 -23
  31. package/browser/lib/request-cache.d.ts +17 -17
  32. package/browser/lib/resource.service.d.ts +43 -43
  33. package/browser/lib/rest-headers.d.ts +57 -57
  34. package/browser/lib/rest-request.d.ts +21 -21
  35. package/browser/lib/rest.class.d.ts +36 -36
  36. package/browser/ng2-rest.d.ts +4 -4
  37. package/client/README.md +24 -24
  38. package/client/esm2020/lib/content-type.mjs +12 -12
  39. package/client/esm2020/lib/cookie.mjs +28 -28
  40. package/client/esm2020/lib/helpers.mjs +23 -23
  41. package/client/esm2020/lib/index.mjs +12 -12
  42. package/client/esm2020/lib/mapping.mjs +238 -238
  43. package/client/esm2020/lib/models.mjs +160 -165
  44. package/client/esm2020/lib/other/simple-resource.mjs +116 -116
  45. package/client/esm2020/lib/params.mjs +278 -278
  46. package/client/esm2020/lib/request-cache.mjs +100 -100
  47. package/client/esm2020/lib/resource.service.mjs +213 -213
  48. package/client/esm2020/lib/rest-headers.mjs +128 -128
  49. package/client/esm2020/lib/rest-request.mjs +321 -321
  50. package/client/esm2020/lib/rest.class.mjs +115 -115
  51. package/client/esm2020/ng2-rest.mjs +4 -4
  52. package/client/esm2020/public-api.mjs +1 -1
  53. package/client/fesm2015/ng2-rest.mjs +1677 -1683
  54. package/client/fesm2015/ng2-rest.mjs.map +1 -1
  55. package/client/fesm2020/ng2-rest.mjs +1675 -1681
  56. package/client/fesm2020/ng2-rest.mjs.map +1 -1
  57. package/client/lib/content-type.d.ts +4 -4
  58. package/client/lib/cookie.d.ts +7 -7
  59. package/client/lib/helpers.d.ts +10 -10
  60. package/client/lib/index.d.ts +9 -9
  61. package/client/lib/mapping.d.ts +12 -12
  62. package/client/lib/models.d.ts +157 -157
  63. package/client/lib/other/simple-resource.d.ts +29 -29
  64. package/client/lib/params.d.ts +23 -23
  65. package/client/lib/request-cache.d.ts +17 -17
  66. package/client/lib/resource.service.d.ts +43 -43
  67. package/client/lib/rest-headers.d.ts +57 -57
  68. package/client/lib/rest-request.d.ts +21 -21
  69. package/client/lib/rest.class.d.ts +36 -36
  70. package/client/ng2-rest.d.ts +4 -4
  71. package/client/package.json +44 -44
  72. package/index.d.ts +1 -1
  73. package/lib/content-type.d.ts +5 -5
  74. package/lib/cookie.d.ts +8 -8
  75. package/lib/helpers.d.ts +11 -11
  76. package/lib/index.d.ts +10 -10
  77. package/lib/mapping.d.ts +13 -13
  78. package/lib/models.d.ts +158 -158
  79. package/lib/models.js +5 -12
  80. package/lib/models.js.map +1 -1
  81. package/lib/other/simple-resource.d.ts +30 -30
  82. package/lib/params.d.ts +24 -24
  83. package/lib/request-cache.d.ts +18 -18
  84. package/lib/resource.service.d.ts +44 -44
  85. package/lib/rest-headers.d.ts +58 -58
  86. package/lib/rest-request.d.ts +22 -22
  87. package/lib/rest.class.d.ts +37 -37
  88. package/package.json +5 -238
  89. package/package.json_devDependencies.json +217 -217
  90. package/package.json_tnp.json5 +50 -50
  91. package/tmp-environment.json +48 -48
  92. package/websql/README.md +24 -24
  93. package/websql/esm2020/lib/content-type.mjs +12 -12
  94. package/websql/esm2020/lib/cookie.mjs +28 -28
  95. package/websql/esm2020/lib/helpers.mjs +23 -23
  96. package/websql/esm2020/lib/index.mjs +12 -12
  97. package/websql/esm2020/lib/mapping.mjs +238 -238
  98. package/websql/esm2020/lib/models.mjs +160 -165
  99. package/websql/esm2020/lib/other/simple-resource.mjs +116 -116
  100. package/websql/esm2020/lib/params.mjs +278 -278
  101. package/websql/esm2020/lib/request-cache.mjs +100 -100
  102. package/websql/esm2020/lib/resource.service.mjs +213 -213
  103. package/websql/esm2020/lib/rest-headers.mjs +128 -128
  104. package/websql/esm2020/lib/rest-request.mjs +321 -321
  105. package/websql/esm2020/lib/rest.class.mjs +115 -115
  106. package/websql/esm2020/ng2-rest.mjs +4 -4
  107. package/websql/esm2020/public-api.mjs +1 -1
  108. package/websql/fesm2015/ng2-rest.mjs +1677 -1683
  109. package/websql/fesm2015/ng2-rest.mjs.map +1 -1
  110. package/websql/fesm2020/ng2-rest.mjs +1675 -1681
  111. package/websql/fesm2020/ng2-rest.mjs.map +1 -1
  112. package/websql/lib/content-type.d.ts +4 -4
  113. package/websql/lib/cookie.d.ts +7 -7
  114. package/websql/lib/helpers.d.ts +10 -10
  115. package/websql/lib/index.d.ts +9 -9
  116. package/websql/lib/mapping.d.ts +12 -12
  117. package/websql/lib/models.d.ts +157 -157
  118. package/websql/lib/other/simple-resource.d.ts +29 -29
  119. package/websql/lib/params.d.ts +23 -23
  120. package/websql/lib/request-cache.d.ts +17 -17
  121. package/websql/lib/resource.service.d.ts +43 -43
  122. package/websql/lib/rest-headers.d.ts +57 -57
  123. package/websql/lib/rest-request.d.ts +21 -21
  124. package/websql/lib/rest.class.d.ts +36 -36
  125. package/websql/ng2-rest.d.ts +4 -4
@@ -1,118 +1,118 @@
1
- import { Observable } from 'rxjs';
2
- import { Resource } from '../resource.service';
3
- /**
4
- *
5
- * @export
6
- * @abstract
7
- * @class SimpleResource
8
- * @extends {Resource<T, A, TA>}
9
- * @template E Endpoint type
10
- * @template A Single modle type
11
- * @template TA Array Model Type
12
- * @template RP rest url parameters type
13
- * @template QP query parameter type
14
- */
15
- class ExtendedResource {
16
- constructor(endpoint, path_model) {
17
- this.endpoint = endpoint;
18
- this.path_model = path_model;
19
- /**
20
- * Get model by rest params
21
- */
22
- this.model = (restParams) => {
23
- return {
24
- get: (queryPrams) => {
25
- return Observable.create((observer) => {
26
- ExtendedResource.handlers.push(this.rest.model(restParams)
27
- .get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
28
- .observable
29
- .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
30
- });
31
- },
32
- patch: (item, queryParams) => {
33
- return Observable.create((observer) => {
34
- ExtendedResource.handlers.push(this.rest.model(restParams)
35
- .put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
36
- .observable
37
- .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
38
- });
39
- },
40
- head: (queryPrams) => {
41
- return Observable.create((observer) => {
42
- ExtendedResource.handlers.push(this.rest.model(restParams)
43
- .head([queryPrams], ExtendedResource.doNotSerializeQueryParams)
44
- .observable
45
- .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
46
- });
47
- },
48
- query: (queryPrams) => {
49
- return Observable.create((observer) => {
50
- ExtendedResource.handlers.push(this.rest.model(restParams).
51
- array
52
- .get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
53
- .observable
54
- .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
55
- });
56
- },
57
- post: (item, queryParams) => {
58
- return Observable.create((observer) => {
59
- ExtendedResource.handlers.push(this.rest.model(restParams)
60
- .post(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
61
- .observable
62
- .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
63
- });
64
- },
65
- put: (item, queryParams) => {
66
- return Observable.create((observer) => {
67
- ExtendedResource.handlers.push(this.rest.model(restParams)
68
- .put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
69
- .observable
70
- .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
71
- });
72
- },
73
- delete: (queryPrams) => {
74
- return Observable.create((observer) => {
75
- ExtendedResource.handlers.push(this.rest.model(restParams)
76
- .delete([queryPrams], ExtendedResource.doNotSerializeQueryParams)
77
- .observable
78
- .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
79
- });
80
- }
81
- };
82
- };
83
- this.rest = Resource.create(endpoint, path_model);
84
- }
85
- }
86
- ExtendedResource.doNotSerializeQueryParams = false;
87
- ExtendedResource.handlers = [];
88
- /**
89
- *
90
- * @export
91
- * @class SimpleResource
92
- * @template A single model type
93
- * @template TA array model type
94
- * @template RP rest parameters type
95
- * @template QP query parameters type
96
- */
97
- export class SimpleResource {
98
- constructor(endpoint, model) {
99
- let rest = new ExtendedResource(endpoint, model);
100
- this.model = rest.model;
101
- }
102
- static set doNotSerializeQueryParams(value) {
103
- if (!SimpleResource._isSetQueryParamsSerialization) {
104
- SimpleResource._isSetQueryParamsSerialization = true;
105
- ExtendedResource.doNotSerializeQueryParams = value;
106
- return;
107
- }
1
+ import { Observable } from 'rxjs';
2
+ import { Resource } from '../resource.service';
3
+ /**
4
+ *
5
+ * @export
6
+ * @abstract
7
+ * @class SimpleResource
8
+ * @extends {Resource<T, A, TA>}
9
+ * @template E Endpoint type
10
+ * @template A Single modle type
11
+ * @template TA Array Model Type
12
+ * @template RP rest url parameters type
13
+ * @template QP query parameter type
14
+ */
15
+ class ExtendedResource {
16
+ constructor(endpoint, path_model) {
17
+ this.endpoint = endpoint;
18
+ this.path_model = path_model;
19
+ /**
20
+ * Get model by rest params
21
+ */
22
+ this.model = (restParams) => {
23
+ return {
24
+ get: (queryPrams) => {
25
+ return Observable.create((observer) => {
26
+ ExtendedResource.handlers.push(this.rest.model(restParams)
27
+ .get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
28
+ .observable
29
+ .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
30
+ });
31
+ },
32
+ patch: (item, queryParams) => {
33
+ return Observable.create((observer) => {
34
+ ExtendedResource.handlers.push(this.rest.model(restParams)
35
+ .put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
36
+ .observable
37
+ .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
38
+ });
39
+ },
40
+ head: (queryPrams) => {
41
+ return Observable.create((observer) => {
42
+ ExtendedResource.handlers.push(this.rest.model(restParams)
43
+ .head([queryPrams], ExtendedResource.doNotSerializeQueryParams)
44
+ .observable
45
+ .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
46
+ });
47
+ },
48
+ query: (queryPrams) => {
49
+ return Observable.create((observer) => {
50
+ ExtendedResource.handlers.push(this.rest.model(restParams).
51
+ array
52
+ .get([queryPrams], ExtendedResource.doNotSerializeQueryParams)
53
+ .observable
54
+ .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
55
+ });
56
+ },
57
+ post: (item, queryParams) => {
58
+ return Observable.create((observer) => {
59
+ ExtendedResource.handlers.push(this.rest.model(restParams)
60
+ .post(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
61
+ .observable
62
+ .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
63
+ });
64
+ },
65
+ put: (item, queryParams) => {
66
+ return Observable.create((observer) => {
67
+ ExtendedResource.handlers.push(this.rest.model(restParams)
68
+ .put(item, [queryParams], ExtendedResource.doNotSerializeQueryParams)
69
+ .observable
70
+ .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
71
+ });
72
+ },
73
+ delete: (queryPrams) => {
74
+ return Observable.create((observer) => {
75
+ ExtendedResource.handlers.push(this.rest.model(restParams)
76
+ .delete([queryPrams], ExtendedResource.doNotSerializeQueryParams)
77
+ .observable
78
+ .subscribe(data => observer.next(data.body.json), err => observer.error(err), () => observer.complete()));
79
+ });
80
+ }
81
+ };
82
+ };
83
+ this.rest = Resource.create(endpoint, path_model);
84
+ }
85
+ }
86
+ ExtendedResource.doNotSerializeQueryParams = false;
87
+ ExtendedResource.handlers = [];
88
+ /**
89
+ *
90
+ * @export
91
+ * @class SimpleResource
92
+ * @template A single model type
93
+ * @template TA array model type
94
+ * @template RP rest parameters type
95
+ * @template QP query parameters type
96
+ */
97
+ export class SimpleResource {
98
+ constructor(endpoint, model) {
99
+ let rest = new ExtendedResource(endpoint, model);
100
+ this.model = rest.model;
101
+ }
102
+ static set doNotSerializeQueryParams(value) {
103
+ if (!SimpleResource._isSetQueryParamsSerialization) {
104
+ SimpleResource._isSetQueryParamsSerialization = true;
105
+ ExtendedResource.doNotSerializeQueryParams = value;
106
+ return;
107
+ }
108
108
  console.warn(`Query params serialization already set as
109
- ${ExtendedResource.doNotSerializeQueryParams},`);
110
- }
111
- static __destroy() {
112
- ExtendedResource.handlers.forEach(h => h.unsubscribe());
113
- }
114
- }
115
- SimpleResource._isSetQueryParamsSerialization = false;
116
- ;
117
- ({}); // @--end-of-file-for-module=ng2-rest lib/other/simple-resource.ts
109
+ ${ExtendedResource.doNotSerializeQueryParams},`);
110
+ }
111
+ static __destroy() {
112
+ ExtendedResource.handlers.forEach(h => h.unsubscribe());
113
+ }
114
+ }
115
+ SimpleResource._isSetQueryParamsSerialization = false;
116
+ ;
117
+ ({}); // @--end-of-file-for-module=ng2-rest lib/other/simple-resource.ts
118
118
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS13ZWJzcWwvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9vdGhlci9zaW1wbGUtcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFxQi9DOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxnQkFBZ0I7SUErR3BCLFlBQTJCLFFBQW9CLEVBQVUsVUFBa0I7UUFBaEQsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVE7UUF6RzNFOztVQUVFO1FBQ0YsVUFBSyxHQUF5QixDQUFDLFVBQWUsRUFBRSxFQUFFO1lBRWhELE9BQU87Z0JBRUwsR0FBRyxFQUFFLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ3ZCLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQXFCLEVBQUUsRUFBRTt3QkFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7NkJBQ3ZELEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDOzZCQUM3RCxVQUFVOzZCQUNWLFNBQVMsQ0FDUixJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDckMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUMxQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFBO29C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LENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQzs7QUFiYyw2Q0FBOEIsR0FBRyxLQUFLLENBQUM7QUFzQnZELENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0VBQWtFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZS5zZXJ2aWNlJztcblxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFByb21pc2VzPEEsIFRBLCBRUCBleHRlbmRzIE1vZGVscy5VcmxQYXJhbXM+IHtcbiAgZ2V0OiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+PjtcbiAgaGVhZDogKHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIHF1ZXJ5OiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj47XG4gIHB1dDogKGl0ZW0/OiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8QT4+O1xuICBwYXRjaDogKGl0ZW0/OiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8QT4+O1xuICBwb3N0OiAoaXRlbT86IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIGRlbGV0ZTogKHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPiB8IGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWw8QSwgVEEsIFJQIGV4dGVuZHMgT2JqZWN0LCBRUCBleHRlbmRzIE1vZGVscy5VcmxQYXJhbXM+IHtcbiAgKHJlc3RQYXJhbXM/OiBSUCk6IFJlc3RQcm9taXNlczxBLCBUQSwgUVA+O1xufVxuXG5cblxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKiBAYWJzdHJhY3RcbiAqIEBjbGFzcyBTaW1wbGVSZXNvdXJjZVxuICogQGV4dGVuZHMge1Jlc291cmNlPFQsIEEsIFRBPn1cbiAqIEB0ZW1wbGF0ZSBFICBFbmRwb2ludCB0eXBlXG4gKiBAdGVtcGxhdGUgQSBTaW5nbGUgbW9kbGUgdHlwZVxuICogQHRlbXBsYXRlIFRBIEFycmF5IE1vZGVsIFR5cGVcbiAqIEB0ZW1wbGF0ZSBSUCByZXN0IHVybCBwYXJhbWV0ZXJzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBRUCBxdWVyeSBwYXJhbWV0ZXIgdHlwZVxuICovXG5jbGFzcyBFeHRlbmRlZFJlc291cmNlPEUsIEEsIFRBLCBSUCBleHRlbmRzIE9iamVjdCwgUVAgZXh0ZW5kcyBNb2RlbHMuVXJsUGFyYW1zPiAge1xuICBwdWJsaWMgc3RhdGljIGRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMgPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBoYW5kbGVyczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICByZXN0OiBNb2RlbHMuUmVzb3VyY2VNb2RlbDxBLCBUQT47XG5cbiAgLyoqXG4gICAqIEdldCBtb2RlbCBieSByZXN0IHBhcmFtc1xuICAqL1xuICBtb2RlbDogTW9kZWw8QSwgVEEsIFJQLCBRUD4gPSAocmVzdFBhcmFtcz86IFJQKSA9PiB7XG5cbiAgICByZXR1cm4ge1xuXG4gICAgICBnZXQ6IChxdWVyeVByYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QT4pID0+IHtcbiAgICAgICAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLnB1c2godGhpcy5yZXN0Lm1vZGVsKHJlc3RQYXJhbXMpXG4gICAgICAgICAgICAuZ2V0KFtxdWVyeVByYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG5cbiAgICAgIHBhdGNoOiAoaXRlbTogQSwgcXVlcnlQYXJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5wdXQoaXRlbSwgW3F1ZXJ5UGFyYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcblxuICAgICAgfSxcblxuICAgICAgaGVhZDogKHF1ZXJ5UHJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5oZWFkKFtxdWVyeVByYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG5cbiAgICAgIHF1ZXJ5OiAocXVlcnlQcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPFRBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcykuXG4gICAgICAgICAgICBhcnJheVxuICAgICAgICAgICAgLmdldChbcXVlcnlQcmFtc10sIEV4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcylcbiAgICAgICAgICAgIC5vYnNlcnZhYmxlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBkYXRhID0+IG9ic2VydmVyLm5leHQoZGF0YS5ib2R5Lmpzb24pLFxuICAgICAgICAgICAgICBlcnIgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyKSxcbiAgICAgICAgICAgICAgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSkpXG4gICAgICAgIH0pXG4gICAgICB9LFxuXG5cbiAgICAgIHBvc3Q6IChpdGVtOiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLnBvc3QoaXRlbSwgW3F1ZXJ5UGFyYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcblxuICAgICAgfSxcblxuXG4gICAgICBwdXQ6IChpdGVtOiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLnB1dChpdGVtLCBbcXVlcnlQYXJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuXG4gICAgICB9LFxuXG5cbiAgICAgIGRlbGV0ZTogKHF1ZXJ5UHJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5kZWxldGUoW3F1ZXJ5UHJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuICAgICAgfVxuXG5cbiAgICB9XG4gIH1cblxuXG5cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBlbmRwb2ludDogRSB8IHN0cmluZywgcHJpdmF0ZSBwYXRoX21vZGVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc3QgPSA8YW55PlJlc291cmNlLmNyZWF0ZTxBLCBUQT4oPGFueT5lbmRwb2ludCwgcGF0aF9tb2RlbCk7XG5cbiAgfVxuXG59XG5cblxuXG4vKipcbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgU2ltcGxlUmVzb3VyY2VcbiAqIEB0ZW1wbGF0ZSBBIHNpbmdsZSBtb2RlbCB0eXBlXG4gKiBAdGVtcGxhdGUgVEEgYXJyYXkgbW9kZWwgdHlwZVxuICogQHRlbXBsYXRlIFJQIHJlc3QgcGFyYW1ldGVycyB0eXBlXG4gKiBAdGVtcGxhdGUgUVAgcXVlcnkgcGFyYW1ldGVycyB0eXBlXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW1wbGVSZXNvdXJjZTxBLCBUQT4ge1xuICBtb2RlbDogTW9kZWw8QSwgVEEsIE9iamVjdCwgTW9kZWxzLlVybFBhcmFtcz47XG5cblxuICBwcml2YXRlIHN0YXRpYyBfaXNTZXRRdWVyeVBhcmFtc1NlcmlhbGl6YXRpb24gPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBzZXQgZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcyh2YWx1ZSkge1xuICAgIGlmICghU2ltcGxlUmVzb3VyY2UuX2lzU2V0UXVlcnlQYXJhbXNTZXJpYWxpemF0aW9uKSB7XG4gICAgICBTaW1wbGVSZXNvdXJjZS5faXNTZXRRdWVyeVBhcmFtc1NlcmlhbGl6YXRpb24gPSB0cnVlO1xuICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zID0gdmFsdWVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKGBRdWVyeSBwYXJhbXMgc2VyaWFsaXphdGlvbiBhbHJlYWR5IHNldCBhc1xuICAgICAgICAke0V4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtc30sYCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIF9fZGVzdHJveSgpIHtcbiAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLmZvckVhY2goaCA9PiBoLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZW5kcG9pbnQ6IHN0cmluZywgbW9kZWw6IHN0cmluZykge1xuICAgIGxldCByZXN0ID0gbmV3IEV4dGVuZGVkUmVzb3VyY2U8c3RyaW5nLCBBLCBUQSwgT2JqZWN0LCBNb2RlbHMuVXJsUGFyYW1zPihlbmRwb2ludCwgbW9kZWwpO1xuICAgIHRoaXMubW9kZWwgPSByZXN0Lm1vZGVsO1xuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9vdGhlci9zaW1wbGUtcmVzb3VyY2UudHMiXX0=