ng2-rest 13.2.8 → 16.0.10

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 (153) hide show
  1. package/assets/shared/shared_folder_info.txt +1 -1
  2. package/browser/{esm2020 → esm2022}/lib/content-type.mjs +12 -12
  3. package/{client/esm2020 → browser/esm2022}/lib/cookie.mjs +29 -29
  4. package/browser/esm2022/lib/helpers.mjs +25 -0
  5. package/{client/esm2020 → browser/esm2022}/lib/index.mjs +12 -12
  6. package/browser/{esm2020 → esm2022}/lib/mapping.mjs +238 -238
  7. package/{websql/esm2020 → browser/esm2022}/lib/models.mjs +160 -160
  8. package/browser/esm2022/lib/other/simple-resource.mjs +119 -0
  9. package/{client/esm2020 → browser/esm2022}/lib/params.mjs +278 -278
  10. package/browser/esm2022/lib/request-cache.mjs +102 -0
  11. package/browser/esm2022/lib/resource.service.mjs +221 -0
  12. package/browser/esm2022/lib/rest-headers.mjs +129 -0
  13. package/browser/esm2022/lib/rest-request.mjs +323 -0
  14. package/browser/esm2022/lib/rest.class.mjs +120 -0
  15. package/browser/{esm2020 → esm2022}/ng2-rest.mjs +4 -4
  16. package/browser/{esm2020 → esm2022}/public-api.mjs +1 -1
  17. package/browser/{fesm2020 → fesm2022}/ng2-rest.mjs +1675 -1675
  18. package/browser/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
  19. package/browser/{ng2-rest.d.ts → index.d.ts} +4 -4
  20. package/browser/lib/content-type.d.ts +4 -4
  21. package/browser/lib/cookie.d.ts +7 -7
  22. package/browser/lib/helpers.d.ts +10 -10
  23. package/browser/lib/index.d.ts +9 -9
  24. package/browser/lib/mapping.d.ts +12 -12
  25. package/browser/lib/models.d.ts +157 -157
  26. package/browser/lib/other/simple-resource.d.ts +29 -29
  27. package/browser/lib/params.d.ts +23 -23
  28. package/browser/lib/request-cache.d.ts +17 -17
  29. package/browser/lib/resource.service.d.ts +43 -43
  30. package/browser/lib/rest-headers.d.ts +57 -57
  31. package/browser/lib/rest-request.d.ts +21 -21
  32. package/browser/lib/rest.class.d.ts +36 -36
  33. package/browser/package.json +6 -12
  34. package/client/{esm2020 → esm2022}/lib/content-type.mjs +12 -12
  35. package/{browser/esm2020 → client/esm2022}/lib/cookie.mjs +29 -29
  36. package/client/esm2022/lib/helpers.mjs +25 -0
  37. package/{browser/esm2020 → client/esm2022}/lib/index.mjs +12 -12
  38. package/client/{esm2020 → esm2022}/lib/mapping.mjs +238 -238
  39. package/client/esm2022/lib/models.mjs +160 -0
  40. package/client/esm2022/lib/other/simple-resource.mjs +119 -0
  41. package/{browser/esm2020 → client/esm2022}/lib/params.mjs +278 -278
  42. package/client/esm2022/lib/request-cache.mjs +102 -0
  43. package/client/esm2022/lib/resource.service.mjs +221 -0
  44. package/client/esm2022/lib/rest-headers.mjs +129 -0
  45. package/client/esm2022/lib/rest-request.mjs +323 -0
  46. package/client/esm2022/lib/rest.class.mjs +120 -0
  47. package/client/{esm2020 → esm2022}/ng2-rest.mjs +4 -4
  48. package/client/{esm2020 → esm2022}/public-api.mjs +1 -1
  49. package/client/{fesm2020 → fesm2022}/ng2-rest.mjs +1675 -1675
  50. package/client/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
  51. package/client/{ng2-rest.d.ts → index.d.ts} +4 -4
  52. package/client/lib/content-type.d.ts +4 -4
  53. package/client/lib/cookie.d.ts +7 -7
  54. package/client/lib/helpers.d.ts +10 -10
  55. package/client/lib/index.d.ts +9 -9
  56. package/client/lib/mapping.d.ts +12 -12
  57. package/client/lib/models.d.ts +157 -157
  58. package/client/lib/other/simple-resource.d.ts +29 -29
  59. package/client/lib/params.d.ts +23 -23
  60. package/client/lib/request-cache.d.ts +17 -17
  61. package/client/lib/resource.service.d.ts +43 -43
  62. package/client/lib/rest-headers.d.ts +57 -57
  63. package/client/lib/rest-request.d.ts +21 -21
  64. package/client/lib/rest.class.d.ts +36 -36
  65. package/client/package.json +89 -85
  66. package/index.d.ts +1 -1
  67. package/lib/content-type.d.ts +5 -5
  68. package/lib/cookie.d.ts +8 -8
  69. package/lib/helpers.d.ts +11 -11
  70. package/lib/helpers.js +1 -2
  71. package/lib/helpers.js.map +1 -1
  72. package/lib/index.d.ts +10 -10
  73. package/lib/mapping.d.ts +13 -13
  74. package/lib/models.d.ts +158 -158
  75. package/lib/other/simple-resource.d.ts +30 -30
  76. package/lib/other/simple-resource.js +1 -2
  77. package/lib/other/simple-resource.js.map +1 -1
  78. package/lib/params.d.ts +24 -24
  79. package/lib/request-cache.d.ts +18 -18
  80. package/lib/request-cache.js +1 -2
  81. package/lib/request-cache.js.map +1 -1
  82. package/lib/resource.service.d.ts +44 -44
  83. package/lib/resource.service.js +1 -2
  84. package/lib/resource.service.js.map +1 -1
  85. package/lib/rest-headers.d.ts +58 -58
  86. package/lib/rest-request.d.ts +22 -22
  87. package/lib/rest-request.js +1 -2
  88. package/lib/rest-request.js.map +1 -1
  89. package/lib/rest.class.d.ts +37 -37
  90. package/package.json +6 -6
  91. package/package.json_tnp.json5 +1 -1
  92. package/tmp-environment.json +94 -90
  93. package/websql/{esm2020 → esm2022}/lib/content-type.mjs +12 -12
  94. package/websql/{esm2020 → esm2022}/lib/cookie.mjs +29 -29
  95. package/websql/esm2022/lib/helpers.mjs +25 -0
  96. package/websql/{esm2020 → esm2022}/lib/index.mjs +12 -12
  97. package/websql/{esm2020 → esm2022}/lib/mapping.mjs +238 -238
  98. package/websql/esm2022/lib/models.mjs +160 -0
  99. package/websql/esm2022/lib/other/simple-resource.mjs +119 -0
  100. package/websql/{esm2020 → esm2022}/lib/params.mjs +278 -278
  101. package/websql/esm2022/lib/request-cache.mjs +102 -0
  102. package/websql/esm2022/lib/resource.service.mjs +221 -0
  103. package/websql/esm2022/lib/rest-headers.mjs +129 -0
  104. package/websql/esm2022/lib/rest-request.mjs +323 -0
  105. package/websql/esm2022/lib/rest.class.mjs +120 -0
  106. package/websql/{esm2020 → esm2022}/ng2-rest.mjs +4 -4
  107. package/websql/{esm2020 → esm2022}/public-api.mjs +1 -1
  108. package/websql/{fesm2020 → fesm2022}/ng2-rest.mjs +1675 -1675
  109. package/websql/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
  110. package/websql/{ng2-rest.d.ts → index.d.ts} +4 -4
  111. package/websql/lib/content-type.d.ts +4 -4
  112. package/websql/lib/cookie.d.ts +7 -7
  113. package/websql/lib/helpers.d.ts +10 -10
  114. package/websql/lib/index.d.ts +9 -9
  115. package/websql/lib/mapping.d.ts +12 -12
  116. package/websql/lib/models.d.ts +157 -157
  117. package/websql/lib/other/simple-resource.d.ts +29 -29
  118. package/websql/lib/params.d.ts +23 -23
  119. package/websql/lib/request-cache.d.ts +17 -17
  120. package/websql/lib/resource.service.d.ts +43 -43
  121. package/websql/lib/rest-headers.d.ts +57 -57
  122. package/websql/lib/rest-request.d.ts +21 -21
  123. package/websql/lib/rest.class.d.ts +36 -36
  124. package/websql/package.json +6 -12
  125. package/browser/esm2020/lib/helpers.mjs +0 -24
  126. package/browser/esm2020/lib/models.mjs +0 -160
  127. package/browser/esm2020/lib/other/simple-resource.mjs +0 -118
  128. package/browser/esm2020/lib/request-cache.mjs +0 -101
  129. package/browser/esm2020/lib/resource.service.mjs +0 -220
  130. package/browser/esm2020/lib/rest-headers.mjs +0 -129
  131. package/browser/esm2020/lib/rest-request.mjs +0 -322
  132. package/browser/esm2020/lib/rest.class.mjs +0 -120
  133. package/browser/fesm2015/ng2-rest.mjs +0 -1739
  134. package/browser/fesm2015/ng2-rest.mjs.map +0 -1
  135. package/client/esm2020/lib/helpers.mjs +0 -24
  136. package/client/esm2020/lib/models.mjs +0 -160
  137. package/client/esm2020/lib/other/simple-resource.mjs +0 -118
  138. package/client/esm2020/lib/request-cache.mjs +0 -101
  139. package/client/esm2020/lib/resource.service.mjs +0 -220
  140. package/client/esm2020/lib/rest-headers.mjs +0 -129
  141. package/client/esm2020/lib/rest-request.mjs +0 -322
  142. package/client/esm2020/lib/rest.class.mjs +0 -120
  143. package/client/fesm2015/ng2-rest.mjs +0 -1739
  144. package/client/fesm2015/ng2-rest.mjs.map +0 -1
  145. package/websql/esm2020/lib/helpers.mjs +0 -24
  146. package/websql/esm2020/lib/other/simple-resource.mjs +0 -118
  147. package/websql/esm2020/lib/request-cache.mjs +0 -101
  148. package/websql/esm2020/lib/resource.service.mjs +0 -220
  149. package/websql/esm2020/lib/rest-headers.mjs +0 -129
  150. package/websql/esm2020/lib/rest-request.mjs +0 -322
  151. package/websql/esm2020/lib/rest.class.mjs +0 -120
  152. package/websql/fesm2015/ng2-rest.mjs +0 -1739
  153. package/websql/fesm2015/ng2-rest.mjs.map +0 -1
@@ -1,120 +0,0 @@
1
- import { getRestParams, getParamsUrl } from './params';
2
- import { RestHeaders } from './rest-headers';
3
- import { CONTENT_TYPE } from './content-type';
4
- import { CLASS } from 'typescript-class-helpers/browser';
5
- export class Rest {
6
- constructor(endpoint, request, meta, customContentType) {
7
- this.request = request;
8
- this.meta = meta;
9
- this.customContentType = customContentType;
10
- this._headers = RestHeaders.from(CONTENT_TYPE.APPLICATION_JSON);
11
- this.array = {
12
- get: (params = void 0, doNotSerializeParams) => {
13
- return this.req('get', void 0, params, doNotSerializeParams, true);
14
- },
15
- head: (params = void 0, doNotSerializeParams) => {
16
- return this.req('head', void 0, params, doNotSerializeParams, true);
17
- },
18
- post: (item, params, doNotSerializeParams) => {
19
- return this.req('post', item, params, doNotSerializeParams, true);
20
- },
21
- put: (item, params, doNotSerializeParams) => {
22
- return this.req('put', item, params, doNotSerializeParams, true);
23
- },
24
- patch: (item, params, doNotSerializeParams) => {
25
- return this.req('patch', item, params, doNotSerializeParams, true);
26
- },
27
- delete: (params, doNotSerializeParams) => {
28
- return this.req('delete', void 0, params, doNotSerializeParams, true);
29
- },
30
- jsonp: (params, doNotSerializeParams) => {
31
- return this.req('jsonp', void 0, params, doNotSerializeParams, true);
32
- }
33
- };
34
- this.__meta_endpoint = endpoint;
35
- }
36
- mock(mock) {
37
- if ((typeof mock === 'function') || (typeof mock === 'object')) {
38
- this.mockHttp = mock;
39
- }
40
- else {
41
- throw `[ng2-rest]
42
- .model(...)
43
- .mock( < BAD MOCK DATA > )
44
- ...
45
- `;
46
- }
47
- return this;
48
- }
49
- get endpoint() {
50
- let e = this.__meta_endpoint;
51
- if (this.restQueryParams !== void 0 && this._endpointRest !== void 0
52
- && typeof this._endpointRest === 'string' && this._endpointRest.trim() !== '')
53
- e = this._endpointRest;
54
- return e;
55
- }
56
- set __rest_endpoint(endpoint) {
57
- this._endpointRest = endpoint;
58
- if (endpoint === void 0) {
59
- this.restQueryParams = void 0;
60
- }
61
- else {
62
- this.restQueryParams = getRestParams(endpoint, this.__meta_endpoint);
63
- }
64
- }
65
- creatUrl(params, doNotSerializeParams = false) {
66
- return `${this.endpoint}${getParamsUrl(params, doNotSerializeParams)}`;
67
- }
68
- get headers() {
69
- return this._headers;
70
- }
71
- req(method, requestBody, params, doNotSerializeParams = false, isArray = false) {
72
- const modelUrl = this.creatUrl(params, doNotSerializeParams);
73
- const body = (CLASS.getNameFromObject(requestBody) === 'FormData')
74
- ? requestBody
75
- : (requestBody ? JSON.stringify(requestBody) : void 0);
76
- if (this.customContentType) {
77
- const customHeaderKeys = this.customContentType.keys();
78
- const currentHeaderKeys = this._headers.keys();
79
- currentHeaderKeys
80
- .filter(key => !customHeaderKeys.includes(key))
81
- .forEach(key => {
82
- this.customContentType.set(key, this._headers.get(key));
83
- });
84
- this._headers = this.customContentType;
85
- }
86
- else {
87
- this._headers = RestHeaders.from(CONTENT_TYPE.APPLICATION_JSON);
88
- }
89
- const result = this.request[method.toLowerCase()](modelUrl, body, this.headers, this.meta, isArray, this.mockHttp);
90
- this.mockHttp = void 0;
91
- return result;
92
- }
93
- replay(method) {
94
- this.request.replay(method, this.meta);
95
- }
96
- get(params, doNotSerializeParams = false) {
97
- return this.req('get', void 0, params, doNotSerializeParams);
98
- }
99
- head(params, doNotSerializeParams = false) {
100
- return this.req('head', void 0, params, doNotSerializeParams);
101
- }
102
- post(item, params, doNotSerializeParams = false) {
103
- return this.req('post', item, params, doNotSerializeParams);
104
- }
105
- put(item, params, doNotSerializeParams = false) {
106
- return this.req('put', item, params, doNotSerializeParams);
107
- }
108
- patch(item, params, doNotSerializeParams = false) {
109
- return this.req('patch', item, params, doNotSerializeParams);
110
- }
111
- delete(params, doNotSerializeParams = false) {
112
- return this.req('delete', void 0, params, doNotSerializeParams);
113
- }
114
- jsonp(params, doNotSerializeParams = false) {
115
- return this.req('jsonp', void 0, params, doNotSerializeParams);
116
- }
117
- }
118
- ;
119
- ({}); // @--end-of-file-for-module=ng2-rest lib/rest.class.ts
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9yZXN0LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3pELE1BQU0sT0FBTyxJQUFJO0lBaURmLFlBQ0UsUUFBZ0IsRUFDUixPQUFvQixFQUNwQixJQUF3QixFQUN4QixpQkFBOEI7UUFGOUIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFvQjtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWE7UUFSaEMsYUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFtRW5FLFVBQUssR0FBRztZQUNOLEdBQUcsRUFBRSxDQUFDLFNBQTZCLEtBQUssQ0FBQyxFQUFFLG9CQUE4QixFQUF3RCxFQUFFO2dCQUNqSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQVEsQ0FBQTtZQUMzRSxDQUFDO1lBQ0QsSUFBSSxFQUFFLENBQUMsU0FBNkIsS0FBSyxDQUFDLEVBQUUsb0JBQThCLEVBQXdELEVBQUU7Z0JBQ2xJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBUSxD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QUFFLElBQUksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQTJCLEVBQUUsdUJBQWdDLEtBQUs7UUFDdkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQTJCLEVBQUUsdUJBQWdDLEtBQUs7UUFDdEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNqRSxDQUFDO0NBR0Y7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHVEQUF1RCIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgTG9nLCBMZXZlbCB9IGZyb20gJ25nMi1sb2dnZXIvYnJvd3Nlcic7XG5cblxuaW1wb3J0IHsgTW9kZWxzIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgZ2V0UmVzdFBhcmFtcywgZ2V0UGFyYW1zVXJsIH0gZnJvbSAnLi9wYXJhbXMnO1xuaW1wb3J0IHsgUmVzdFJlcXVlc3QgfSBmcm9tICcuL3Jlc3QtcmVxdWVzdCc7XG5pbXBvcnQgeyBSZXN0SGVhZGVycyB9IGZyb20gJy4vcmVzdC1oZWFkZXJzJztcbmltcG9ydCB7IENPTlRFTlRfVFlQRSB9IGZyb20gJy4vY29udGVudC10eXBlJztcbmltcG9ydCB7IENMQVNTIH0gZnJvbSAndHlwZXNjcmlwdC1jbGFzcy1oZWxwZXJzL2Jyb3dzZXInO1xuXG5cbmV4cG9ydCBjbGFzcyBSZXN0PFQsIFRBID0gVFtdPiBpbXBsZW1lbnRzIE1vZGVscy5Gbk1ldGhvZHNIdHRwV2l0aE1vY2s8VCwgVEE+IHtcblxuICBwcml2YXRlIG1vY2tIdHRwOiBNb2RlbHMuTW9ja0h0dHA7XG4gIG1vY2sobW9jazogTW9kZWxzLk1vY2tIdHRwKTogTW9kZWxzLkZuTWV0aG9kc0h0dHA8VCwgVEE+IHtcbiAgICBpZiAoKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKSB8fCAodHlwZW9mIG1vY2sgPT09ICdvYmplY3QnKSkge1xuICAgICAgdGhpcy5tb2NrSHR0cCA9IG1vY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGBbbmcyLXJlc3RdXG4gICAgICAubW9kZWwoLi4uKVxuICAgICAgLm1vY2soIDwgQkFEIE1PQ0sgREFUQSA+IClcbiAgICAgIC4uLlxuICAgICAgYFxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG5cblxuXG4gIHByaXZhdGUgX19tZXRhX2VuZHBvaW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX2VuZHBvaW50UmVzdDogc3RyaW5nO1xuICBwcml2YXRlIGdldCBlbmRwb2ludCgpIHtcbiAgICBsZXQgZSA9IHRoaXMuX19tZXRhX2VuZHBvaW50O1xuICAgIGlmICh0aGlzLnJlc3RRdWVyeVBhcmFtcyAhPT0gdm9pZCAwICYmIHRoaXMuX2VuZHBvaW50UmVzdCAhPT0gdm9pZCAwXG4gICAgICAmJiB0eXBlb2YgdGhpcy5fZW5kcG9pbnRSZXN0ID09PSAnc3RyaW5nJyAmJiB0aGlzLl9lbmRwb2ludFJlc3QudHJpbSgpICE9PSAnJykgZSA9IHRoaXMuX2VuZHBvaW50UmVzdDtcbiAgICByZXR1cm4gZTtcbiAgfVxuICBwcml2YXRlIHJlc3RRdWVyeVBhcmFtczogT2JqZWN0O1xuICBwdWJsaWMgc2V0IF9fcmVzdF9lbmRwb2ludChlbmRwb2ludCkge1xuICAgIHRoaXMuX2VuZHBvaW50UmVzdCA9IGVuZHBvaW50O1xuICAgIGlmIChlbmRwb2ludCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aGlzLnJlc3RRdWVyeVBhcmFtcyA9IHZvaWQgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN0UXVlcnlQYXJhbXMgPSBnZXRSZXN0UGFyYW1zKGVuZHBvaW50LCB0aGlzLl9fbWV0YV9lbmRwb2ludCk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGNyZWF0VXJsKHBhcmFtczogYW55LCBkb05vdFNlcmlhbGl6ZVBhcmFtczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuZW5kcG9pbnR9JHtnZXRQYXJhbXNVcmwocGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcyl9YDtcbiAgfVxuXG5cblxuXG4gIHByaXZhdGUgX2hlYWRlcnMgPSBSZXN0SGVhZGVycy5mcm9tKENPTlRFTlRfVFlQRS5BUFBMSUNBVElPTl9KU09OKTtcbiAgZ2V0IGhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcnM7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlcXVlc3Q6IFJlc3RSZXF1ZXN0LFxuICAgIHByaXZhdGUgbWV0YTogTW9kZWxzLk1ldGFSZXF1ZXN0LFxuICAgIHByaXZhdGUgY3VzdG9tQ29udGVudFR5cGU6IFJlc3RIZWFkZXJzLFxuICApIHtcbiAgICB0aGlzLl9fbWV0YV9lbmRwb2ludCA9IGVuZHBvaW50O1xuXG4gIH1cblxuXG5cblxuICBwcml2YXRlIHJlcShtZXRob2Q6IE1vZGVscy5IdHRwTWV0aG9kLFxuICAgIHJlcXVlc3RCb2R5OiBULFxuICAgIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSxcbiAgICBkb05vdFNlcmlhbGl6ZVBhcmFtczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGlzQXJyYXk6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcblxuICAgIGNvbnN0IG1vZGVsVXJsID0gdGhpcy5jcmVhdFVybChwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zKTtcbiAgICBjb25zdCBib2R5ID0gKENMQVNTLmdldE5hbWVGcm9tT2JqZWN0KHJlcXVlc3RCb2R5KSA9PT0gJ0Zvcm1EYXRhJylcbiAgICAgID8gcmVxdWVzdEJvZHlcbiAgICAgIDogKHJlcXVlc3RCb2R5ID8gSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpIDogdm9pZCAwKTtcblxuXG4gICAgaWYgKHRoaXMuY3VzdG9tQ29udGVudFR5cGUpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUhlYWRlcktleXMgPSB0aGlzLmN1c3RvbUNvbnRlbnRUeXBlLmtleXMoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRIZWFkZXJLZXlzID0gdGhpcy5faGVhZGVycy5rZXlzKCk7XG4gICAgICBjdXJyZW50SGVhZGVyS2V5c1xuICAgICAgICAuZmlsdGVyKGtleSA9PiAhY3VzdG9tSGVhZGVyS2V5cy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMuY3VzdG9tQ29udGVudFR5cGUuc2V0KGtleSwgdGhpcy5faGVhZGVycy5nZXQoa2V5KSk7XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5faGVhZGVycyA9IHRoaXMuY3VzdG9tQ29udGVudFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hlYWRlcnMgPSBSZXN0SGVhZGVycy5mcm9tKENPTlRFTlRfVFlQRS5BUFBMSUNBVElPTl9KU09OKTtcbiAgICB9XG5cblxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZXF1ZXN0W21ldGhvZC50b0xvd2VyQ2FzZSgpXShcbiAgICAgIG1vZGVsVXJsLFxuICAgICAgYm9keSxcbiAgICAgIHRoaXMuaGVhZGVycyxcbiAgICAgIHRoaXMubWV0YSxcbiAgICAgIGlzQXJyYXksXG4gICAgICB0aGlzLm1vY2tIdHRwXG4gICAgKTtcblxuICAgIHRoaXMubW9ja0h0dHAgPSB2b2lkIDA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cblxuXG5cbiAgcmVwbGF5KG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QpIHtcbiAgICB0aGlzLnJlcXVlc3QucmVwbGF5KG1ldGhvZCwgdGhpcy5tZXRhKTtcbiAgfVxuXG5cbiAgYXJyYXkgPSB7XG4gICAgZ2V0OiAocGFyYW1zOiBNb2RlbHMuVXJsUGFyYW1zW10gPSB2b2lkIDAsIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbik6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVxKCdnZXQnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMsIHRydWUpIGFzIGFueVxuICAgIH0sXG4gICAgaGVhZDogKHBhcmFtczogTW9kZWxzLlVybFBhcmFtc1tdID0gdm9pZCAwLCBkb05vdFNlcmlhbGl6ZVBhcmFtcz86IGJvb2xlYW4pOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUQT4+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcSgnaGVhZCcsIHZvaWQgMCwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcywgdHJ1ZSkgYXMgYW55XG4gICAgfSxcbiAgICBwb3N0OiAoaXRlbTogVEEsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VEE+PiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXEoJ3Bvc3QnLCBpdGVtIGFzIGFueSwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcywgdHJ1ZSkgYXMgYW55O1xuICAgIH0sXG4gICAgcHV0OiAoaXRlbTogVEEsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VEE+PiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXEoJ3B1dCcsIGl0ZW0gYXMgYW55LCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zLCB0cnVlKSBhcyBhbnk7XG4gICAgfSxcbiAgICBwYXRjaDogKGl0ZW06IFRBLCBwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbik6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVxKCdwYXRjaCcsIGl0ZW0gYXMgYW55LCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zLCB0cnVlKSBhcyBhbnk7XG4gICAgfSxcbiAgICBkZWxldGU6IChwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zPzogYm9vbGVhbik6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFRBPj4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVxKCdkZWxldGUnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMsIHRydWUpIGFzIGFueTtcbiAgICB9LFxuICAgIGpzb25wOiAocGFyYW1zPzogTW9kZWxzLlVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtcz86IGJvb2xlYW4pOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUQT4+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlcSgnanNvbnAnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMsIHRydWUpIGFzIGFueTtcbiAgICB9XG4gIH1cblxuICBnZXQocGFyYW1zPzogTW9kZWxzLlVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtczogYm9vbGVhbiA9IGZhbHNlKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXEoJ2dldCcsIHZvaWQgMCwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcykgYXMgYW55O1xuICB9XG5cbiAgaGVhZChwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zOiBib29sZWFuID0gZmFsc2UpOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlcSgnaGVhZCcsIHZvaWQgMCwgcGFyYW1zLCBkb05vdFNlcmlhbGl6ZVBhcmFtcykgYXMgYW55O1xuICB9XG5cbiAgcG9zdChpdGVtOiBULCBwYXJhbXM/OiBNb2RlbHMuVXJsUGFyYW1zW10sIGRvTm90U2VyaWFsaXplUGFyYW1zOiBib29sZWFuID0gZmFsc2UpOiBNb2RlbHMuUHJvbWlzZU9ic2VydmFibGVNaXg8TW9kZWxzLkh0dHBSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlcSgncG9zdCcsIGl0ZW0sIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMpO1xuICB9XG5cbiAgcHV0KGl0ZW06IFQsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxKCdwdXQnLCBpdGVtLCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zKTtcbiAgfVxuXG4gIHBhdGNoKGl0ZW06IFQsIHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxKCdwYXRjaCcsIGl0ZW0sIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMpO1xuICB9XG5cbiAgZGVsZXRlKHBhcmFtcz86IE1vZGVscy5VcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSk6IE1vZGVscy5Qcm9taXNlT2JzZXJ2YWJsZU1peDxNb2RlbHMuSHR0cFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxKCdkZWxldGUnLCB2b2lkIDAsIHBhcmFtcywgZG9Ob3RTZXJpYWxpemVQYXJhbXMpO1xuICB9XG5cbiAganNvbnAocGFyYW1zPzogTW9kZWxzLlVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtczogYm9vbGVhbiA9IGZhbHNlKTogTW9kZWxzLlByb21pc2VPYnNlcnZhYmxlTWl4PE1vZGVscy5IdHRwUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXEoJ2pzb25wJywgdm9pZCAwLCBwYXJhbXMsIGRvTm90U2VyaWFsaXplUGFyYW1zKTtcbiAgfVxuXG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPW5nMi1yZXN0IGxpYi9yZXN0LmNsYXNzLnRzIl19