ng2-rest 13.2.7 → 13.2.8

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 (131) 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 +159 -159
  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 -1677
  20. package/browser/fesm2020/ng2-rest.mjs +1675 -1675
  21. package/browser/lib/content-type.d.ts +4 -4
  22. package/browser/lib/cookie.d.ts +7 -7
  23. package/browser/lib/helpers.d.ts +10 -10
  24. package/browser/lib/index.d.ts +9 -9
  25. package/browser/lib/mapping.d.ts +12 -12
  26. package/browser/lib/models.d.ts +157 -157
  27. package/browser/lib/other/simple-resource.d.ts +29 -29
  28. package/browser/lib/params.d.ts +23 -23
  29. package/browser/lib/request-cache.d.ts +17 -17
  30. package/browser/lib/resource.service.d.ts +43 -43
  31. package/browser/lib/rest-headers.d.ts +57 -57
  32. package/browser/lib/rest-request.d.ts +21 -21
  33. package/browser/lib/rest.class.d.ts +36 -36
  34. package/browser/ng2-rest.d.ts +4 -4
  35. package/client/README.md +24 -24
  36. package/client/esm2020/lib/content-type.mjs +12 -12
  37. package/client/esm2020/lib/cookie.mjs +28 -28
  38. package/client/esm2020/lib/helpers.mjs +23 -23
  39. package/client/esm2020/lib/index.mjs +12 -12
  40. package/client/esm2020/lib/mapping.mjs +238 -238
  41. package/client/esm2020/lib/models.mjs +159 -159
  42. package/client/esm2020/lib/other/simple-resource.mjs +116 -116
  43. package/client/esm2020/lib/params.mjs +278 -278
  44. package/client/esm2020/lib/request-cache.mjs +100 -100
  45. package/client/esm2020/lib/resource.service.mjs +213 -213
  46. package/client/esm2020/lib/rest-headers.mjs +128 -128
  47. package/client/esm2020/lib/rest-request.mjs +321 -321
  48. package/client/esm2020/lib/rest.class.mjs +115 -115
  49. package/client/esm2020/ng2-rest.mjs +4 -4
  50. package/client/esm2020/public-api.mjs +1 -1
  51. package/client/fesm2015/ng2-rest.mjs +1677 -1677
  52. package/client/fesm2020/ng2-rest.mjs +1675 -1675
  53. package/client/lib/content-type.d.ts +4 -4
  54. package/client/lib/cookie.d.ts +7 -7
  55. package/client/lib/helpers.d.ts +10 -10
  56. package/client/lib/index.d.ts +9 -9
  57. package/client/lib/mapping.d.ts +12 -12
  58. package/client/lib/models.d.ts +157 -157
  59. package/client/lib/other/simple-resource.d.ts +29 -29
  60. package/client/lib/params.d.ts +23 -23
  61. package/client/lib/request-cache.d.ts +17 -17
  62. package/client/lib/resource.service.d.ts +43 -43
  63. package/client/lib/rest-headers.d.ts +57 -57
  64. package/client/lib/rest-request.d.ts +21 -21
  65. package/client/lib/rest.class.d.ts +36 -36
  66. package/client/ng2-rest.d.ts +4 -4
  67. package/client/package.json +28 -28
  68. package/index.d.ts +1 -1
  69. package/index.js.map +1 -1
  70. package/lib/content-type.d.ts +5 -5
  71. package/lib/content-type.js.map +1 -1
  72. package/lib/cookie.d.ts +8 -8
  73. package/lib/cookie.js.map +1 -1
  74. package/lib/helpers.d.ts +11 -11
  75. package/lib/helpers.js.map +1 -1
  76. package/lib/index.d.ts +10 -10
  77. package/lib/index.js.map +1 -1
  78. package/lib/mapping.d.ts +13 -13
  79. package/lib/mapping.js.map +1 -1
  80. package/lib/models.d.ts +158 -158
  81. package/lib/models.js.map +1 -1
  82. package/lib/other/simple-resource.d.ts +30 -30
  83. package/lib/other/simple-resource.js.map +1 -1
  84. package/lib/params.d.ts +24 -24
  85. package/lib/params.js.map +1 -1
  86. package/lib/request-cache.d.ts +18 -18
  87. package/lib/request-cache.js.map +1 -1
  88. package/lib/resource.service.d.ts +44 -44
  89. package/lib/resource.service.js.map +1 -1
  90. package/lib/rest-headers.d.ts +58 -58
  91. package/lib/rest-headers.js.map +1 -1
  92. package/lib/rest-request.d.ts +22 -22
  93. package/lib/rest-request.js.map +1 -1
  94. package/lib/rest.class.d.ts +37 -37
  95. package/lib/rest.class.js.map +1 -1
  96. package/package.json +4 -4
  97. package/package.json_devDependencies.json +217 -217
  98. package/package.json_tnp.json5 +53 -50
  99. package/tmp-environment.json +34 -33
  100. package/websql/README.md +24 -24
  101. package/websql/esm2020/lib/content-type.mjs +12 -12
  102. package/websql/esm2020/lib/cookie.mjs +28 -28
  103. package/websql/esm2020/lib/helpers.mjs +23 -23
  104. package/websql/esm2020/lib/index.mjs +12 -12
  105. package/websql/esm2020/lib/mapping.mjs +238 -238
  106. package/websql/esm2020/lib/models.mjs +159 -159
  107. package/websql/esm2020/lib/other/simple-resource.mjs +116 -116
  108. package/websql/esm2020/lib/params.mjs +278 -278
  109. package/websql/esm2020/lib/request-cache.mjs +100 -100
  110. package/websql/esm2020/lib/resource.service.mjs +213 -213
  111. package/websql/esm2020/lib/rest-headers.mjs +128 -128
  112. package/websql/esm2020/lib/rest-request.mjs +321 -321
  113. package/websql/esm2020/lib/rest.class.mjs +115 -115
  114. package/websql/esm2020/ng2-rest.mjs +4 -4
  115. package/websql/esm2020/public-api.mjs +1 -1
  116. package/websql/fesm2015/ng2-rest.mjs +1677 -1677
  117. package/websql/fesm2020/ng2-rest.mjs +1675 -1675
  118. package/websql/lib/content-type.d.ts +4 -4
  119. package/websql/lib/cookie.d.ts +7 -7
  120. package/websql/lib/helpers.d.ts +10 -10
  121. package/websql/lib/index.d.ts +9 -9
  122. package/websql/lib/mapping.d.ts +12 -12
  123. package/websql/lib/models.d.ts +157 -157
  124. package/websql/lib/other/simple-resource.d.ts +29 -29
  125. package/websql/lib/params.d.ts +23 -23
  126. package/websql/lib/request-cache.d.ts +17 -17
  127. package/websql/lib/resource.service.d.ts +43 -43
  128. package/websql/lib/rest-headers.d.ts +57 -57
  129. package/websql/lib/rest-request.d.ts +21 -21
  130. package/websql/lib/rest.class.d.ts +36 -36
  131. package/websql/ng2-rest.d.ts +4 -4
@@ -1,160 +1,160 @@
1
- import { Cookie } from './cookie';
2
- import { Mapping } from './mapping';
3
- import { Models as HelpersModels } from 'typescript-class-helpers/browser';
4
- import { JSON10 } from 'json10/browser';
5
- import { RequestCache } from './request-cache';
6
- import { _ } from 'tnp-core/browser';
7
- import { Helpers } from 'tnp-core/browser';
8
- export var Models;
9
- (function (Models) {
10
- Models.MethodConfig = HelpersModels.MethodConfig;
11
- Models.ClassConfig = HelpersModels.ClassConfig;
12
- Models.ParamConfig = HelpersModels.ParamConfig;
13
- ;
14
- ;
15
- [];
16
- class BaseBody {
17
- toJSON(data, isJSONArray = false) {
18
- let r = isJSONArray ? [] : {};
19
- if (typeof data === 'string') {
20
- try {
21
- r = JSON.parse(data);
22
- }
23
- catch (e) { }
24
- }
25
- else if (typeof data === 'object') {
26
- return data;
27
- }
28
- return r;
29
- }
30
- }
31
- Models.BaseBody = BaseBody;
32
- class HttpBody extends BaseBody {
33
- constructor(responseText, isArray = false, entity, circular) {
34
- super();
35
- this.responseText = responseText;
36
- this.isArray = isArray;
37
- this.entity = entity;
38
- this.circular = circular;
39
- }
40
- get blob() {
41
- return this.responseText;
42
- }
43
- get booleanValue() {
44
- if (!Helpers.isBlob(this.responseText)) {
45
- return ['ok', 'true'].includes(this.responseText.trim());
46
- }
47
- }
48
- get rawJson() {
49
- if (!Helpers.isBlob(this.responseText)) {
50
- let res = this.toJSON(this.responseText, this.isArray);
51
- if (this.circular && Array.isArray(this.circular)) {
52
- res = JSON10.parse(JSON.stringify(res), this.circular);
53
- }
54
- return res;
55
- }
56
- }
57
- get json() {
58
- if (!Helpers.isBlob(this.responseText)) {
59
- if (this.entity && typeof this.entity === 'function') {
60
- return this.entity(); // @LAST
61
- }
62
- if (this.entity && typeof this.entity === 'object') {
63
- const json = this.toJSON(this.responseText, this.isArray);
64
- return Mapping.encode(json, this.entity, this.circular);
65
- }
66
- let res = this.toJSON(this.responseText, this.isArray);
67
- if (this.circular && Array.isArray(this.circular)) {
68
- res = JSON10.parse(JSON.stringify(res), this.circular);
69
- }
70
- return res;
71
- }
72
- }
73
- get text() {
74
- if (!Helpers.isBlob(this.responseText)) {
75
- return this.responseText.replace(/^\"/, '').replace(/\"$/, '');
76
- }
77
- }
78
- }
79
- Models.HttpBody = HttpBody;
80
- class ErrorBody extends BaseBody {
81
- constructor(data) {
82
- super();
83
- this.data = data;
84
- }
85
- get json() {
86
- return this.toJSON(this.data);
87
- }
88
- get text() {
89
- return this.data;
90
- }
91
- }
92
- Models.ErrorBody = ErrorBody;
93
- class BaseResponse {
94
- constructor(responseText, headers, statusCode, isArray = false) {
95
- this.responseText = responseText;
96
- this.headers = headers;
97
- this.statusCode = statusCode;
98
- this.isArray = isArray;
99
- }
100
- get cookies() {
101
- return BaseResponse.cookies;
102
- }
103
- }
104
- BaseResponse.cookies = Cookie.Instance;
105
- Models.BaseResponse = BaseResponse;
106
- class HttpResponse extends BaseResponse {
107
- constructor(sourceRequest, responseText, headers, statusCode, entity, circular, jobid, isArray = false) {
108
- super(responseText, headers, statusCode, isArray);
109
- this.sourceRequest = sourceRequest;
110
- this.responseText = responseText;
111
- this.headers = headers;
112
- this.statusCode = statusCode;
113
- this.entity = entity;
114
- this.circular = circular;
115
- this.jobid = jobid;
116
- this.isArray = isArray;
117
- this.init();
118
- }
119
- init() {
120
- if (typeof this.entity === 'string') {
121
- let entityJSON = this.headers.getAll(this.entity);
122
- if (!!entityJSON) {
123
- this.entity = JSON.parse(entityJSON.join());
124
- }
125
- }
126
- if (typeof this.circular === 'string') {
127
- let circuralJSON = this.headers.getAll(this.circular);
128
- if (!!circuralJSON) {
129
- this.circular = JSON.parse(circuralJSON.join());
130
- }
131
- }
132
- this.body = new HttpBody(this.responseText, this.isArray, this.entity, this.circular);
133
- }
134
- get cache() {
135
- if (_.isUndefined(this.rq)) {
136
- this.rq = new RequestCache(this);
137
- }
138
- return new RequestCache(this);
139
- }
140
- }
141
- Models.HttpResponse = HttpResponse;
142
- class HttpResponseError extends BaseResponse {
143
- constructor(message, responseText, headers, statusCode, jobid) {
144
- super(responseText, headers, statusCode);
145
- this.message = message;
146
- this.jobid = jobid;
147
- this.body = new ErrorBody(responseText);
148
- }
149
- }
150
- Models.HttpResponseError = HttpResponseError;
151
- /* */
152
- /* */
153
- /* */
154
- /* */
155
- /* */
156
- /* */
157
- })(Models || (Models = {}));
158
- ;
159
- ({}); // @--end-of-file-for-module=ng2-rest lib/models.ts
1
+ import { Cookie } from './cookie';
2
+ import { Mapping } from './mapping';
3
+ import { Models as HelpersModels } from 'typescript-class-helpers/browser';
4
+ import { JSON10 } from 'json10/browser';
5
+ import { RequestCache } from './request-cache';
6
+ import { _ } from 'tnp-core/browser';
7
+ import { Helpers } from 'tnp-core/browser';
8
+ export var Models;
9
+ (function (Models) {
10
+ Models.MethodConfig = HelpersModels.MethodConfig;
11
+ Models.ClassConfig = HelpersModels.ClassConfig;
12
+ Models.ParamConfig = HelpersModels.ParamConfig;
13
+ ;
14
+ ;
15
+ [];
16
+ class BaseBody {
17
+ toJSON(data, isJSONArray = false) {
18
+ let r = isJSONArray ? [] : {};
19
+ if (typeof data === 'string') {
20
+ try {
21
+ r = JSON.parse(data);
22
+ }
23
+ catch (e) { }
24
+ }
25
+ else if (typeof data === 'object') {
26
+ return data;
27
+ }
28
+ return r;
29
+ }
30
+ }
31
+ Models.BaseBody = BaseBody;
32
+ class HttpBody extends BaseBody {
33
+ constructor(responseText, isArray = false, entity, circular) {
34
+ super();
35
+ this.responseText = responseText;
36
+ this.isArray = isArray;
37
+ this.entity = entity;
38
+ this.circular = circular;
39
+ }
40
+ get blob() {
41
+ return this.responseText;
42
+ }
43
+ get booleanValue() {
44
+ if (!Helpers.isBlob(this.responseText)) {
45
+ return ['ok', 'true'].includes(this.responseText.trim());
46
+ }
47
+ }
48
+ get rawJson() {
49
+ if (!Helpers.isBlob(this.responseText)) {
50
+ let res = this.toJSON(this.responseText, this.isArray);
51
+ if (this.circular && Array.isArray(this.circular)) {
52
+ res = JSON10.parse(JSON.stringify(res), this.circular);
53
+ }
54
+ return res;
55
+ }
56
+ }
57
+ get json() {
58
+ if (!Helpers.isBlob(this.responseText)) {
59
+ if (this.entity && typeof this.entity === 'function') {
60
+ return this.entity(); // @LAST
61
+ }
62
+ if (this.entity && typeof this.entity === 'object') {
63
+ const json = this.toJSON(this.responseText, this.isArray);
64
+ return Mapping.encode(json, this.entity, this.circular);
65
+ }
66
+ let res = this.toJSON(this.responseText, this.isArray);
67
+ if (this.circular && Array.isArray(this.circular)) {
68
+ res = JSON10.parse(JSON.stringify(res), this.circular);
69
+ }
70
+ return res;
71
+ }
72
+ }
73
+ get text() {
74
+ if (!Helpers.isBlob(this.responseText)) {
75
+ return this.responseText.replace(/^\"/, '').replace(/\"$/, '');
76
+ }
77
+ }
78
+ }
79
+ Models.HttpBody = HttpBody;
80
+ class ErrorBody extends BaseBody {
81
+ constructor(data) {
82
+ super();
83
+ this.data = data;
84
+ }
85
+ get json() {
86
+ return this.toJSON(this.data);
87
+ }
88
+ get text() {
89
+ return this.data;
90
+ }
91
+ }
92
+ Models.ErrorBody = ErrorBody;
93
+ class BaseResponse {
94
+ constructor(responseText, headers, statusCode, isArray = false) {
95
+ this.responseText = responseText;
96
+ this.headers = headers;
97
+ this.statusCode = statusCode;
98
+ this.isArray = isArray;
99
+ }
100
+ get cookies() {
101
+ return BaseResponse.cookies;
102
+ }
103
+ }
104
+ BaseResponse.cookies = Cookie.Instance;
105
+ Models.BaseResponse = BaseResponse;
106
+ class HttpResponse extends BaseResponse {
107
+ constructor(sourceRequest, responseText, headers, statusCode, entity, circular, jobid, isArray = false) {
108
+ super(responseText, headers, statusCode, isArray);
109
+ this.sourceRequest = sourceRequest;
110
+ this.responseText = responseText;
111
+ this.headers = headers;
112
+ this.statusCode = statusCode;
113
+ this.entity = entity;
114
+ this.circular = circular;
115
+ this.jobid = jobid;
116
+ this.isArray = isArray;
117
+ this.init();
118
+ }
119
+ init() {
120
+ if (typeof this.entity === 'string') {
121
+ let entityJSON = this.headers.getAll(this.entity);
122
+ if (!!entityJSON) {
123
+ this.entity = JSON.parse(entityJSON.join());
124
+ }
125
+ }
126
+ if (typeof this.circular === 'string') {
127
+ let circuralJSON = this.headers.getAll(this.circular);
128
+ if (!!circuralJSON) {
129
+ this.circular = JSON.parse(circuralJSON.join());
130
+ }
131
+ }
132
+ this.body = new HttpBody(this.responseText, this.isArray, this.entity, this.circular);
133
+ }
134
+ get cache() {
135
+ if (_.isUndefined(this.rq)) {
136
+ this.rq = new RequestCache(this);
137
+ }
138
+ return new RequestCache(this);
139
+ }
140
+ }
141
+ Models.HttpResponse = HttpResponse;
142
+ class HttpResponseError extends BaseResponse {
143
+ constructor(message, responseText, headers, statusCode, jobid) {
144
+ super(responseText, headers, statusCode);
145
+ this.message = message;
146
+ this.jobid = jobid;
147
+ this.body = new ErrorBody(responseText);
148
+ }
149
+ }
150
+ Models.HttpResponseError = HttpResponseError;
151
+ /* */
152
+ /* */
153
+ /* */
154
+ /* */
155
+ /* */
156
+ /* */
157
+ })(Models || (Models = {}));
158
+ ;
159
+ ({}); // @--end-of-file-for-module=ng2-rest lib/models.ts
160
160
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHM0MsTUFBTSxLQUFXLE1BQU0sQ0E2UnRCO0FBN1JELFdBQWlCLE1BQU07SUFLUCxtQkFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDMUMsa0JBQVcsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO0lBQ3hDLGtCQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQTtJQTRFcEQsQ0FBQztJQUtELENBQUM7SUFXRCxFQUFFLENBQUM7SUFFSixNQUFzQixRQUFRO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxHQUFHLEtBQUs7WUFDeEMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDNUIsSUFBSTtvQkFDRixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEI7Z0JBQUMs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QztRQUVELElBQUksS0FBSztZQUNQLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbEM7WUFDRCxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7S0FFRjtJQW5EWSxtQkFBWSxlQW1EeEIsQ0FBQTtJQUVELE1BQWEsaUJBQWtCLFNBQVEsWUFBaUI7UUFLdEQsWUFDUyxPQUFlLEVBQ3RCLFlBQXFCLEVBQ3JCLE9BQXFCLEVBQ3JCLFVBQThCLEVBQ3ZCLEtBQWM7WUFFckIsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFObEMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtZQUlmLFVBQUssR0FBTCxLQUFLLENBQVM7WUFHckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN6QyxDQUFDO0tBQ0Y7SUFmWSx3QkFBaUIsb0JBZTdCLENBQUE7SUFZSCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7QUFFTCxDQUFDLEVBN1JnQixNQUFNLEtBQU4sTUFBTSxRQTZSdEI7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvZywgTGV2ZWwgfSBmcm9tICduZzItbG9nZ2VyL2Jyb3dzZXInO1xuaW1wb3J0IHsgUmVzdEhlYWRlcnMgfSBmcm9tICcuL3Jlc3QtaGVhZGVycyc7XG5pbXBvcnQgeyBSZXN0IH0gZnJvbSAnLi9yZXN0LmNsYXNzJztcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJy4vY29va2llJztcbmltcG9ydCB7IE1hcHBpbmcgfSBmcm9tICcuL21hcHBpbmcnO1xuaW1wb3J0IHsgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IE1vZGVscyBhcyBIZWxwZXJzTW9kZWxzIH0gZnJvbSAndHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL2Jyb3dzZXInXG5pbXBvcnQgeyBKU09OMTAsIENpcmMgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5pbXBvcnQgeyBSZXF1ZXN0Q2FjaGUgfSBmcm9tICcuL3JlcXVlc3QtY2FjaGUnO1xuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgQ29uZmlnTW9kZWxzIH0gZnJvbSAndG5wLWNvbmZpZy9icm93c2VyJztcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcblxuXG5leHBvcnQgbmFtZXNwYWNlIE1vZGVscyB7XG5cbiAgZXhwb3J0IGltcG9ydCBIdHRwTWV0aG9kID0gQ29uZmlnTW9kZWxzLkh0dHBNZXRob2Q7XG4gIGV4cG9ydCBpbXBvcnQgUGFyYW1UeXBlID0gQ29uZmlnTW9kZWxzLlBhcmFtVHlwZTtcblxuICBleHBvcnQgaW1wb3J0IE1ldGhvZENvbmZpZyA9IEhlbHBlcnNNb2RlbHMuTWV0aG9kQ29uZmlnO1xuICBleHBvcnQgaW1wb3J0IENsYXNzQ29uZmlnID0gSGVscGVyc01vZGVscy5DbGFzc0NvbmZpZztcbiAgZXhwb3J0IGltcG9ydCBQYXJhbUNvbmZpZyA9IEhlbHBlcnNNb2RlbHMuUGFyYW1Db25maWdcblxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlUmVzdWx0T3B0aW9ucyB7XG4gICAgcmVzOiBNb2RlbHMuTW9ja1Jlc3BvbnNlO1xuICAgIG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2Q7XG4gICAgam9iaWQ/OiBudW1iZXI7XG4gICAgaXNBcnJheT86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEhhbmRsZVJlc3VsdFNvdXJjZVJlcXVlc3RPcHRpb25zIHtcbiAgICB1cmw6IHN0cmluZyxcbiAgICBtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kLFxuXG4gICAgYm9keTogYW55LFxuICAgIGlzQXJyYXk6IGJvb2xlYW4sXG4gIH1cblxuICBleHBvcnQgdHlwZSBCYWNrZW5kRXJyb3IgPSB7XG4gICAgbXNnPzogc3RyaW5nO1xuICAgIHN0YWNrPzogc3RyaW5nW107XG4gICAgZGF0YTogYW55O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgTWV0YVJlcXVlc3QgPSB7XG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGVuZHBvaW50OiBzdHJpbmc7XG4gICAgZW50aXR5OiBNYXBwaW5nLk1hcHBpbmc7XG4gICAgY2lyY3VsYXI6IENpcmNbXTtcbiAgfVxuICBleHBvcnQgdHlwZSBIdHRwQ29kZSA9IDIwMCB8IDQwMCB8IDQwMSB8IDQwNCB8IDUwMDtcblxuICBleHBvcnQgdHlwZSBQcm9taXNlT2JzZXJ2YWJsZU1peDxUPiA9IFByb21pc2U8VD4gJiB7XG4gICAgY2FjaGU/OiBSZXF1ZXN0Q2FjaGUsXG4gICAgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQsIFIgPSBQcm9taXNlT2JzZXJ2YWJsZU1peDxFPj4gPSAocGFyYW1zPzogVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbikgPT4gUlxuICBleHBvcnQgdHlwZSBNZXRob2RXaXRoQm9keTxFLCBULCBSID0gUHJvbWlzZU9ic2VydmFibGVNaXg8RT4+ID0gKGl0ZW0/OiBULCBwYXJhbXM/OiBVcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKSA9PiBSXG4gIGV4cG9ydCB0eXBlIFJlcGxheURhdGEgPSB7XG4gICAgc3ViamVjdDogU3ViamVjdDxhbnk+LFxuICAgIGRhdGE6IHsgdXJsOiBzdHJpbmcsIGJvZHk6IHN0cmluZywgaGVhZGVyczogUmVzdEhlYWRlcnMsIGlzQXJyYXk6IGJvb2xlYW47IH0sXG4gICAgLyoqXG4gICAgICogam9iaWRcbiAgICAgKi9cbiAgICBpZDogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBSZXFQYXJhbXMgPSB7IHVybDogc3RyaW5nLCBtZXRob2Q6IENvbmZpZ01vZGVscy5IdHRwTWV0aG9kLCBoZWFkZXJzPzogUmVzdEhlYWRlcnMsIGJvZHk/OiBhbnksIGpvYmlkOiBudW1iZXIsIGlzQXJyYXk6IGJvb2xlYW4gfTtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlc291cmNlTW9kZWw8QSwgVEE+IHtcbiAgICBtb2RlbDogKHBhdGhNb2RlbHM/OiBPYmplY3QsIHJlc3BvbnNlT2JqZWN0VHlwZT86IEZ1bmN0aW9uKSA9PiBSZXN0PEEsIFRBPixcbiAgICByZXBsYXk6IChtZXRob2Q6IENvbmZpZ01vZGVscy5IdHRwTWV0aG9kKSA9PiB2b2lkO1xuICAgIGhlYWRlcnM6IFJlc3RIZWFkZXJzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBOZzJSZXN0TWV0aG9kczxFLCBUPiB7XG4gICAgZ2V0OiBNZXRob2RXaXRob3V0Qm9keTxFLCBUPjtcbiAgICBwb3N0OiBNZXRob2RXaXRoQm9keTxFLCBUPjtcbiAgICBwdXQ6IE1ldGhvZFdpdGhCb2R5PEUsIFQ+O1xuICAgIHBhdGNoOiBNZXRob2RXaXRoQm9keTxFLCBUPjtcbiAgICBoZWFkOiBNZXRob2RXaXRob3V0Qm9keTxFLCBUPjtcbiAgICBkZWxldGU6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICAgIGpzb25wOiBNZXRob2RXaXRob3V0Qm9keTxFLCBUPjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIE1vY2tDb250cm9sbGVyID0gKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG1ldGhvZDogQ29uZmlnTW9kZWxzLkh0dHBNZXRob2QsXG4gICAgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgIGJvZHk/OiBhbnlcbiAgKSA9PiBNb2NrUmVzcG9uc2U7XG5cbiAgZXhwb3J0IHR5cGUgTW9ja0h0dHAgPSAoTW9ja1Jlc3BvbnNlIHwgTW9ja0NvbnRyb2xsZXIpO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRm5NZXRob2RzSHR0cDxULCBUQT4gZXh0ZW5kcyBOZzJSZXN0TWV0aG9kczxIdHRwUmVzcG9uc2U8VD4sIFQ+IHtcbiAgICBhcnJheTogTmcyUmVzdE1ldGhvZHM8SHR0cFJlc3BvbnNlPFRBPiwgVEE+O1xuICB9O1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRm5NZXRob2RzSHR0cFdpdGhNb2NrPFQsIFRBPiBleHRlbmRzIE5nMlJlc3RNZXRob2RzPEh0dHBSZXNwb25zZTxUPiwgVD4ge1xuICAgIGFycmF5OiBOZzJSZXN0TWV0aG9kczxIdHRwUmVzcG9uc2U8VEE+LCBUQT47XG4gICAgbW9jayhtb2NrOiBNb2NrSHR0cCwgY29kZTogSHR0cENvZGUpOiBGbk1ldGhvZHNIdHRwPFQsIFRBPjtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGludGVyZmFjZSBOZXN0ZWRQYXJhbXMge1xuICAgIFtwYXJhbXM6IHN0cmluZ106IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXJsUGFyYW1zIHtcbiAgICBbdXJsTW9kZWxOYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVnRXhwIHwgT2JqZWN0O1xuICAgIHJlZ2V4PzogUmVnRXhwO1xuICB9W107XG5cbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VCb2R5IHtcbiAgICBwcm90ZWN0ZWQgdG9KU09OKGRhdGEsIGlzSlNPTkFycmF5ID0gZmFsc2UpIHtcbiAgICAgIGxldCByID0gaXNKU09OQXJyYXkgPyBbXSA6IHt9O1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHIgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7IH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgYXMgYW55O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBIdHRwQm9keTxUPiBleHRlbmRzIEJhc2VCb2R5IHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzcG9uc2VUZXh0OiBzdHJpbmcgfCBCbG9iLCBwcml2YXRlIGlzQXJyYXkgPSBmYWxzZSxcbiAgICAgIHByaXZhdGUgZW50aXR5OiBNYXBwaW5nLk1hcHBpbmcsXG4gICAgICBwcml2YXRlIGNpcmN1bGFyOiBDaXJjW11cbiAgICApIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBibG9iKCk6IEJsb2Ige1xuICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VUZXh0IGFzIEJsb2I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBib29sZWFuVmFsdWUoKSB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNCbG9iKHRoaXMucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICByZXR1cm4gWydvaycsICd0cnVlJ10uaW5jbHVkZXMoKHRoaXMucmVzcG9uc2VUZXh0IGFzIHN0cmluZykudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJhd0pzb24oKTogUGFydGlhbDxUPiB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNCbG9iKHRoaXMucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICBsZXQgcmVzID0gdGhpcy50b0pTT04odGhpcy5yZXNwb25zZVRleHQsIHRoaXMuaXNBcnJheSk7XG4gICAgICAgIGlmICh0aGlzLmNpcmN1bGFyICYmIEFycmF5LmlzQXJyYXkodGhpcy5jaXJjdWxhcikpIHtcbiAgICAgICAgICByZXMgPSBKU09OMTAucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzKSwgdGhpcy5jaXJjdWxhcilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uKCk6IFQge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzQmxvYih0aGlzLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHR5cGVvZiB0aGlzLmVudGl0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0eSgpOyAvLyBATEFTVFxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0eSAmJiB0eXBlb2YgdGhpcy5lbnRpdHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKHRoaXMucmVzcG9uc2VUZXh0LCB0aGlzLmlzQXJyYXkpO1xuICAgICAgICAgIHJldHVybiBNYXBwaW5nLmVuY29kZShqc29uLCB0aGlzLmVudGl0eSwgdGhpcy5jaXJjdWxhcikgYXMgYW55O1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXMgPSB0aGlzLnRvSlNPTih0aGlzLnJlc3BvbnNlVGV4dCwgdGhpcy5pc0FycmF5KTtcbiAgICAgICAgaWYgKHRoaXMuY2lyY3VsYXIgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNpcmN1bGFyKSkge1xuICAgICAgICAgIHJlcyA9IEpTT04xMC5wYXJzZShKU09OLnN0cmluZ2lmeShyZXMpLCB0aGlzLmNpcmN1bGFyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdGV4dCgpIHtcbiAgICAgIGlmICghSGVscGVycy5pc0Jsb2IodGhpcy5yZXNwb25zZVRleHQpKSB7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnJlc3BvbnNlVGV4dCBhcyBzdHJpbmcpLnJlcGxhY2UoL15cXFwiLywgJycpLnJlcGxhY2UoL1xcXCIkLywgJycpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEVycm9yQm9keSBleHRlbmRzIEJhc2VCb2R5IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGEpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBqc29uKCk6IE9iamVjdCB7XG4gICAgICByZXR1cm4gdGhpcy50b0pTT04odGhpcy5kYXRhKTtcbiAgICB9XG4gICAgcHVibGljIGdldCB0ZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH1cbiAgfVxuXG5cbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZXNwb25zZTxUPiB7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBjb29raWVzID0gQ29va2llLkluc3RhbmNlO1xuXG4gICAgcHVibGljIGdldCBjb29raWVzKCkge1xuICAgICAgcmV0dXJuIEJhc2VSZXNwb25zZS5jb29raWVzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyByZXNwb25zZVRleHQ/OiBzdHJpbmcgfCBCbG9iLFxuICAgICAgcHVibGljIHJlYWRvbmx5IGhlYWRlcnM/OiBSZXN0SGVhZGVycyxcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlPzogSHR0cENvZGUgfCBudW1iZXIsXG4gICAgICBwdWJsaWMgaXNBcnJheSA9IGZhbHNlXG4gICAgKSB7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEh0dHBSZXNwb25zZTxUPiBleHRlbmRzIEJhc2VSZXNwb25zZTxUPiB7XG4gICAgcHVibGljIGJvZHk/OiBIdHRwQm9keTxUPjtcblxuXG5cblxuICAgIHJxOiBSZXF1ZXN0Q2FjaGU7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgc291cmNlUmVxdWVzdDogTW9kZWxzLkhhbmRsZVJlc3VsdFNvdXJjZVJlcXVlc3RPcHRpb25zLFxuICAgICAgcHVibGljIHJlc3BvbnNlVGV4dD86IHN0cmluZyB8IEJsb2IsXG4gICAgICBwdWJsaWMgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgICAgcHVibGljIHN0YXR1c0NvZGU/OiBIdHRwQ29kZSB8IG51bWJlcixcbiAgICAgIHB1YmxpYyBlbnRpdHk/OiBNYXBwaW5nLk1hcHBpbmcgfCBGdW5jdGlvbixcbiAgICAgIHB1YmxpYyBjaXJjdWxhcj86IENpcmNbXSxcbiAgICAgIHB1YmxpYyBqb2JpZD86IG51bWJlcixcbiAgICAgIHB1YmxpYyBpc0FycmF5ID0gZmFsc2UsXG4gICAgKSB7XG5cblxuXG4gICAgICBzdXBlcihyZXNwb25zZVRleHQsIGhlYWRlcnMsIHN0YXR1c0NvZGUsIGlzQXJyYXkpO1xuXG4gICAgICB0aGlzLmluaXQoKVxuICAgIH1cblxuICAgIHB1YmxpYyBpbml0KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudGl0eSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICBsZXQgZW50aXR5SlNPTiA9IHRoaXMuaGVhZGVycy5nZXRBbGwodGhpcy5lbnRpdHkpXG4gICAgICAgIGlmICghIWVudGl0eUpTT04pIHtcbiAgICAgICAgICB0aGlzLmVudGl0eSA9IEpTT04ucGFyc2UoZW50aXR5SlNPTi5qb2luKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY2lyY3VsYXIgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgbGV0IGNpcmN1cmFsSlNPTiA9IHRoaXMuaGVhZGVycy5nZXRBbGwodGhpcy5jaXJjdWxhcik7XG4gICAgICAgIGlmICghIWNpcmN1cmFsSlNPTikge1xuICAgICAgICAgIHRoaXMuY2lyY3VsYXIgPSBKU09OLnBhcnNlKGNpcmN1cmFsSlNPTi5qb2luKCkpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keSA9IG5ldyBIdHRwQm9keSh0aGlzLnJlc3BvbnNlVGV4dCwgdGhpcy5pc0FycmF5LCB0aGlzLmVudGl0eSwgdGhpcy5jaXJjdWxhcikgYXMgYW55O1xuICAgIH1cblxuICAgIGdldCBjYWNoZSgpIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMucnEpKSB7XG4gICAgICAgIHRoaXMucnEgPSBuZXcgUmVxdWVzdENhY2hlKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0Q2FjaGUodGhpcyk7XG4gICAgfVxuXG4gIH1cblxuICBleHBvcnQgY2xhc3MgSHR0cFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBCYXNlUmVzcG9uc2U8YW55PiB7XG4gICAgcHJpdmF0ZSBib2R5OiBFcnJvckJvZHk7XG5cblxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgcmVzcG9uc2VUZXh0Pzogc3RyaW5nLFxuICAgICAgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZT86IEh0dHBDb2RlIHwgbnVtYmVyLFxuICAgICAgcHVibGljIGpvYmlkPzogbnVtYmVyLFxuICAgICkge1xuICAgICAgc3VwZXIocmVzcG9uc2VUZXh0LCBoZWFkZXJzLCBzdGF0dXNDb2RlKTtcbiAgICAgIHRoaXMuYm9keSA9IG5ldyBFcnJvckJvZHkocmVzcG9uc2VUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTW9ja1Jlc3BvbnNlIHtcbiAgICBkYXRhPzogYW55O1xuICAgIGNvZGU/OiBIdHRwQ29kZTtcbiAgICBlcnJvcj86IHN0cmluZztcbiAgICBoZWFkZXJzPzogUmVzdEhlYWRlcnM7XG4gICAgam9iaWQ/OiBudW1iZXI7XG4gICAgaXNBcnJheTogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlVHlwZUF4aW9zID0gJ2Jsb2InIHwgJ3RleHQnXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9bmcyLXJlc3QgbGliL21vZGVscy50cyJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL290aGVyL3NpbXBsZS1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQXFCL0M7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLGdCQUFnQjtJQStHcEIsWUFBMkIsUUFBb0IsRUFBVSxVQUFrQjtRQUFoRCxhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQXpHM0U7O1VBRUU7UUFDRixVQUFLLEdBQXlCLENBQUMsVUFBZSxFQUFFLEVBQUU7WUFFaEQsT0FBTztnQkFFTCxHQUFHLEVBQUUsQ0FBQyxVQUFlLEVBQUUsRUFBRTtvQkFDdkIsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBcUIsRUFBRSxFQUFFO3dCQUNqRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs2QkFDdkQsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMseUJBQXlCLENBQUM7NkJBQzdELFVBQVU7NkJBQ1YsU0FBUyxDQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNyQyxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQzFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUE7b0JBQ2pDLENB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QUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDOztBQWJjLDZDQUE4QixHQUFHLEtBQUssQ0FBQztBQXNCdkQsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrRUFBa0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlLnNlcnZpY2UnO1xuXG5cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0UHJvbWlzZXM8QSwgVEEsIFFQIGV4dGVuZHMgTW9kZWxzLlVybFBhcmFtcz4ge1xuICBnZXQ6IChxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8QT4+O1xuICBoZWFkOiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+PjtcbiAgcXVlcnk6IChxdWVyeVBhcmFtcz86IFFQKSA9PiBPYnNlcnZhYmxlPE1vZGVscy5IdHRwUmVzcG9uc2U8VEE+PjtcbiAgcHV0OiAoaXRlbT86IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIHBhdGNoOiAoaXRlbT86IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IE9ic2VydmFibGU8TW9kZWxzLkh0dHBSZXNwb25zZTxBPj47XG4gIHBvc3Q6IChpdGVtPzogQSwgcXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+PjtcbiAgZGVsZXRlOiAocXVlcnlQYXJhbXM/OiBRUCkgPT4gT2JzZXJ2YWJsZTxNb2RlbHMuSHR0cFJlc3BvbnNlPEE+IHwgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2RlbDxBLCBUQSwgUlAgZXh0ZW5kcyBPYmplY3QsIFFQIGV4dGVuZHMgTW9kZWxzLlVybFBhcmFtcz4ge1xuICAocmVzdFBhcmFtcz86IFJQKTogUmVzdFByb21pc2VzPEEsIFRBLCBRUD47XG59XG5cblxuXG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqIEBhYnN0cmFjdFxuICogQGNsYXNzIFNpbXBsZVJlc291cmNlXG4gKiBAZXh0ZW5kcyB7UmVzb3VyY2U8VCwgQSwgVEE+fVxuICogQHRlbXBsYXRlIEUgIEVuZHBvaW50IHR5cGVcbiAqIEB0ZW1wbGF0ZSBBIFNpbmdsZSBtb2RsZSB0eXBlXG4gKiBAdGVtcGxhdGUgVEEgQXJyYXkgTW9kZWwgVHlwZVxuICogQHRlbXBsYXRlIFJQIHJlc3QgdXJsIHBhcmFtZXRlcnMgdHlwZVxuICogQHRlbXBsYXRlIFFQIHF1ZXJ5IHBhcmFtZXRlciB0eXBlXG4gKi9cbmNsYXNzIEV4dGVuZGVkUmVzb3VyY2U8RSwgQSwgVEEsIFJQIGV4dGVuZHMgT2JqZWN0LCBRUCBleHRlbmRzIE1vZGVscy5VcmxQYXJhbXM+ICB7XG4gIHB1YmxpYyBzdGF0aWMgZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcyA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIGhhbmRsZXJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHJlc3Q6IE1vZGVscy5SZXNvdXJjZU1vZGVsPEEsIFRBPjtcblxuICAvKipcbiAgICogR2V0IG1vZGVsIGJ5IHJlc3QgcGFyYW1zXG4gICovXG4gIG1vZGVsOiBNb2RlbDxBLCBUQSwgUlAsIFFQPiA9IChyZXN0UGFyYW1zPzogUlApID0+IHtcblxuICAgIHJldHVybiB7XG5cbiAgICAgIGdldDogKHF1ZXJ5UHJhbXM/OiBRUCkgPT4ge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyOiBPYnNlcnZlcjxBPikgPT4ge1xuICAgICAgICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMucHVzaCh0aGlzLnJlc3QubW9kZWwocmVzdFBhcmFtcylcbiAgICAgICAgICAgIC5nZXQoW3F1ZXJ5UHJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuICAgICAgfSxcblxuICAgICAgcGF0Y2g6IChpdGVtOiBBLCBxdWVyeVBhcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLnB1dChpdGVtLCBbcXVlcnlQYXJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuXG4gICAgICB9LFxuXG4gICAgICBoZWFkOiAocXVlcnlQcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLmhlYWQoW3F1ZXJ5UHJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuICAgICAgfSxcblxuICAgICAgcXVlcnk6IChxdWVyeVByYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8VEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKS5cbiAgICAgICAgICAgIGFycmF5XG4gICAgICAgICAgICAuZ2V0KFtxdWVyeVByYW1zXSwgRXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLm9ic2VydmFibGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGRhdGEgPT4gb2JzZXJ2ZXIubmV4dChkYXRhLmJvZHkuanNvbiksXG4gICAgICAgICAgICAgIGVyciA9PiBvYnNlcnZlci5lcnJvcihlcnIpLFxuICAgICAgICAgICAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG5cblxuICAgICAgcG9zdDogKGl0ZW06IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QT4pID0+IHtcbiAgICAgICAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLnB1c2godGhpcy5yZXN0Lm1vZGVsKHJlc3RQYXJhbXMpXG4gICAgICAgICAgICAucG9zdChpdGVtLCBbcXVlcnlQYXJhbXNdLCBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAub2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZGF0YSA9PiBvYnNlcnZlci5uZXh0KGRhdGEuYm9keS5qc29uKSxcbiAgICAgICAgICAgICAgZXJyID0+IG9ic2VydmVyLmVycm9yKGVyciksXG4gICAgICAgICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpKVxuICAgICAgICB9KVxuXG4gICAgICB9LFxuXG5cbiAgICAgIHB1dDogKGl0ZW06IEEsIHF1ZXJ5UGFyYW1zPzogUVApID0+IHtcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8QT4pID0+IHtcbiAgICAgICAgICBFeHRlbmRlZFJlc291cmNlLmhhbmRsZXJzLnB1c2godGhpcy5yZXN0Lm1vZGVsKHJlc3RQYXJhbXMpXG4gICAgICAgICAgICAucHV0KGl0ZW0sIFtxdWVyeVBhcmFtc10sIEV4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcylcbiAgICAgICAgICAgIC5vYnNlcnZhYmxlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBkYXRhID0+IG9ic2VydmVyLm5leHQoZGF0YS5ib2R5Lmpzb24pLFxuICAgICAgICAgICAgICBlcnIgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyKSxcbiAgICAgICAgICAgICAgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSkpXG4gICAgICAgIH0pXG5cbiAgICAgIH0sXG5cblxuICAgICAgZGVsZXRlOiAocXVlcnlQcmFtcz86IFFQKSA9PiB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEE+KSA9PiB7XG4gICAgICAgICAgRXh0ZW5kZWRSZXNvdXJjZS5oYW5kbGVycy5wdXNoKHRoaXMucmVzdC5tb2RlbChyZXN0UGFyYW1zKVxuICAgICAgICAgICAgLmRlbGV0ZShbcXVlcnlQcmFtc10sIEV4dGVuZGVkUmVzb3VyY2UuZG9Ob3RTZXJpYWxpemVRdWVyeVBhcmFtcylcbiAgICAgICAgICAgIC5vYnNlcnZhYmxlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBkYXRhID0+IG9ic2VydmVyLm5leHQoZGF0YS5ib2R5Lmpzb24pLFxuICAgICAgICAgICAgICBlcnIgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyKSxcbiAgICAgICAgICAgICAgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKSkpXG4gICAgICAgIH0pXG4gICAgICB9XG5cblxuICAgIH1cbiAgfVxuXG5cblxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGVuZHBvaW50OiBFIHwgc3RyaW5nLCBwcml2YXRlIHBhdGhfbW9kZWw6IHN0cmluZykge1xuICAgIHRoaXMucmVzdCA9IDxhbnk+UmVzb3VyY2UuY3JlYXRlPEEsIFRBPig8YW55PmVuZHBvaW50LCBwYXRoX21vZGVsKTtcblxuICB9XG5cbn1cblxuXG5cbi8qKlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBTaW1wbGVSZXNvdXJjZVxuICogQHRlbXBsYXRlIEEgc2luZ2xlIG1vZGVsIHR5cGVcbiAqIEB0ZW1wbGF0ZSBUQSBhcnJheSBtb2RlbCB0eXBlXG4gKiBAdGVtcGxhdGUgUlAgcmVzdCBwYXJhbWV0ZXJzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBRUCBxdWVyeSBwYXJhbWV0ZXJzIHR5cGVcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbXBsZVJlc291cmNlPEEsIFRBPiB7XG4gIG1vZGVsOiBNb2RlbDxBLCBUQSwgT2JqZWN0LCBNb2RlbHMuVXJsUGFyYW1zPjtcblxuXG4gIHByaXZhdGUgc3RhdGljIF9pc1NldFF1ZXJ5UGFyYW1zU2VyaWFsaXphdGlvbiA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIHNldCBkb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XG4gICAgaWYgKCFTaW1wbGVSZXNvdXJjZS5faXNTZXRRdWVyeVBhcmFtc1NlcmlhbGl6YXRpb24pIHtcbiAgICAgIFNpbXBsZVJlc291cmNlLl9pc1NldFF1ZXJ5UGFyYW1zU2VyaWFsaXphdGlvbiA9IHRydWU7XG4gICAgICBFeHRlbmRlZFJlc291cmNlLmRvTm90U2VyaWFsaXplUXVlcnlQYXJhbXMgPSB2YWx1ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlLndhcm4oYFF1ZXJ5IHBhcmFtcyBzZXJpYWxpemF0aW9uIGFscmVhZHkgc2V0IGFzXG4gICAgICAgICR7RXh0ZW5kZWRSZXNvdXJjZS5kb05vdFNlcmlhbGl6ZVF1ZXJ5UGFyYW1zfSxgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgX19kZXN0cm95KCkge1xuICAgIEV4dGVuZGVkUmVzb3VyY2UuaGFuZGxlcnMuZm9yRWFjaChoID0+IGgudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihlbmRwb2ludDogc3RyaW5nLCBtb2RlbDogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3QgPSBuZXcgRXh0ZW5kZWRSZXNvdXJjZTxzdHJpbmcsIEEsIFRBLCBPYmplY3QsIE1vZGVscy5VcmxQYXJhbXM+KGVuZHBvaW50LCBtb2RlbCk7XG4gICAgdGhpcy5tb2RlbCA9IHJlc3QubW9kZWw7XG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9bmcyLXJlc3QgbGliL290aGVyL3NpbXBsZS1yZXNvdXJjZS50cyJdfQ==