@hestia-earth/ui-components 0.0.1

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 (207) hide show
  1. package/README.md +24 -0
  2. package/auth/auth.service.d.ts +10 -0
  3. package/auth/public-api.d.ts +1 -0
  4. package/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.d.ts +40 -0
  5. package/bibliographies/bibliographies.module.d.ts +10 -0
  6. package/bibliographies/public-api.d.ts +2 -0
  7. package/bundles/hestia-earth-ui-components.umd.js +7570 -0
  8. package/bundles/hestia-earth-ui-components.umd.js.map +1 -0
  9. package/common/bind-once.directive.d.ts +10 -0
  10. package/common/blank-node-diffs/blank-node-diffs.component.d.ts +18 -0
  11. package/common/blank-node-state/blank-node-state.component.d.ts +36 -0
  12. package/common/blank-node-state-notice/blank-node-state-notice.component.d.ts +9 -0
  13. package/common/blank-node-value-delta/blank-node-value-delta.component.d.ts +13 -0
  14. package/common/click-outside.directive.d.ts +10 -0
  15. package/common/clipboard/clipboard.component.d.ts +16 -0
  16. package/common/common.module.d.ts +37 -0
  17. package/common/common.service.d.ts +11 -0
  18. package/common/default.pipe.d.ts +7 -0
  19. package/common/ellipsis.pipe.d.ts +7 -0
  20. package/common/get.pipe.d.ts +7 -0
  21. package/common/key-to-label.pipe.d.ts +7 -0
  22. package/common/keys.pipe.d.ts +7 -0
  23. package/common/link-key-value/link-key-value.component.d.ts +16 -0
  24. package/common/logs-utils.d.ts +17 -0
  25. package/common/maps-drawing-confirm/maps-drawing-confirm.component.d.ts +28 -0
  26. package/common/maps-utils.d.ts +70 -0
  27. package/common/pluralize.pipe.d.ts +7 -0
  28. package/common/popover/popover.component.d.ts +16 -0
  29. package/common/popover-confirm/popover-confirm.component.d.ts +15 -0
  30. package/common/precision.pipe.d.ts +7 -0
  31. package/common/public-api.d.ts +30 -0
  32. package/common/schema-version-link/schema-version-link.component.d.ts +10 -0
  33. package/common/skeleton-text/skeleton-text.component.d.ts +11 -0
  34. package/common/social-tags/social-tags.component.d.ts +12 -0
  35. package/common/tags-input.directive.d.ts +20 -0
  36. package/common/times.pipe.d.ts +7 -0
  37. package/common/toast/toast.component.d.ts +19 -0
  38. package/common/toast.service.d.ts +16 -0
  39. package/common/unit-converter/unit-converter.component.d.ts +25 -0
  40. package/common/utils.d.ts +88 -0
  41. package/cycles/cycles-activity/cycles-activity.component.d.ts +31 -0
  42. package/cycles/cycles-activity-logs/cycles-activity-logs.component.d.ts +25 -0
  43. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +14 -0
  44. package/cycles/cycles-emissions/cycles-emissions.component.d.ts +40 -0
  45. package/cycles/cycles-emissions-chart/cycles-emissions-chart.component.d.ts +18 -0
  46. package/cycles/cycles-emissions-logs/cycles-emissions-logs.component.d.ts +23 -0
  47. package/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.d.ts +8 -0
  48. package/cycles/cycles-result/cycles-result.component.d.ts +13 -0
  49. package/cycles/cycles-suggest-form/cycles-suggest-form.component.d.ts +24 -0
  50. package/cycles/cycles.model.d.ts +7 -0
  51. package/cycles/cycles.module.d.ts +19 -0
  52. package/cycles/public-api.d.ts +10 -0
  53. package/engine/aggregation-engine.service.d.ts +71 -0
  54. package/engine/engine.service.d.ts +61 -0
  55. package/engine/public-api.d.ts +2 -0
  56. package/esm2015/auth/auth.service.js +19 -0
  57. package/esm2015/auth/public-api.js +2 -0
  58. package/esm2015/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.js +100 -0
  59. package/esm2015/bibliographies/bibliographies.module.js +30 -0
  60. package/esm2015/bibliographies/public-api.js +3 -0
  61. package/esm2015/common/bind-once.directive.js +23 -0
  62. package/esm2015/common/blank-node-diffs/blank-node-diffs.component.js +47 -0
  63. package/esm2015/common/blank-node-state/blank-node-state.component.js +90 -0
  64. package/esm2015/common/blank-node-state-notice/blank-node-state-notice.component.js +27 -0
  65. package/esm2015/common/blank-node-value-delta/blank-node-value-delta.component.js +41 -0
  66. package/esm2015/common/click-outside.directive.js +28 -0
  67. package/esm2015/common/clipboard/clipboard.component.js +69 -0
  68. package/esm2015/common/common.module.js +144 -0
  69. package/esm2015/common/common.service.js +29 -0
  70. package/esm2015/common/default.pipe.js +23 -0
  71. package/esm2015/common/ellipsis.pipe.js +17 -0
  72. package/esm2015/common/get.pipe.js +17 -0
  73. package/esm2015/common/key-to-label.pipe.js +18 -0
  74. package/esm2015/common/keys.pipe.js +20 -0
  75. package/esm2015/common/link-key-value/link-key-value.component.js +55 -0
  76. package/esm2015/common/logs-utils.js +49 -0
  77. package/esm2015/common/maps-drawing-confirm/maps-drawing-confirm.component.js +89 -0
  78. package/esm2015/common/maps-utils.js +101 -0
  79. package/esm2015/common/pluralize.pipe.js +17 -0
  80. package/esm2015/common/popover/popover.component.js +37 -0
  81. package/esm2015/common/popover-confirm/popover-confirm.component.js +38 -0
  82. package/esm2015/common/precision.pipe.js +20 -0
  83. package/esm2015/common/public-api.js +31 -0
  84. package/esm2015/common/schema-version-link/schema-version-link.component.js +39 -0
  85. package/esm2015/common/skeleton-text/skeleton-text.component.js +44 -0
  86. package/esm2015/common/social-tags/social-tags.component.js +37 -0
  87. package/esm2015/common/tags-input.directive.js +74 -0
  88. package/esm2015/common/times.pipe.js +16 -0
  89. package/esm2015/common/toast/toast.component.js +37 -0
  90. package/esm2015/common/toast.service.js +36 -0
  91. package/esm2015/common/unit-converter/unit-converter.component.js +73 -0
  92. package/esm2015/common/utils.js +245 -0
  93. package/esm2015/cycles/cycles-activity/cycles-activity.component.js +92 -0
  94. package/esm2015/cycles/cycles-activity-logs/cycles-activity-logs.component.js +48 -0
  95. package/esm2015/cycles/cycles-completeness/cycles-completeness.component.js +41 -0
  96. package/esm2015/cycles/cycles-emissions/cycles-emissions.component.js +121 -0
  97. package/esm2015/cycles/cycles-emissions-chart/cycles-emissions-chart.component.js +93 -0
  98. package/esm2015/cycles/cycles-emissions-logs/cycles-emissions-logs.component.js +63 -0
  99. package/esm2015/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.js +22 -0
  100. package/esm2015/cycles/cycles-result/cycles-result.component.js +92 -0
  101. package/esm2015/cycles/cycles-suggest-form/cycles-suggest-form.component.js +83 -0
  102. package/esm2015/cycles/cycles.model.js +2 -0
  103. package/esm2015/cycles/cycles.module.js +66 -0
  104. package/esm2015/cycles/public-api.js +11 -0
  105. package/esm2015/engine/aggregation-engine.service.js +126 -0
  106. package/esm2015/engine/engine.service.js +78 -0
  107. package/esm2015/engine/public-api.js +3 -0
  108. package/esm2015/files/files-error.model.js +180 -0
  109. package/esm2015/files/files-form/files-form.component.js +439 -0
  110. package/esm2015/files/files-form.model.js +548 -0
  111. package/esm2015/files/files.module.js +42 -0
  112. package/esm2015/files/public-api.js +3 -0
  113. package/esm2015/fontawesome/fontawesome.module.js +36 -0
  114. package/esm2015/fontawesome/public-api.js +2 -0
  115. package/esm2015/hestia-earth-ui-components.js +5 -0
  116. package/esm2015/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.js +161 -0
  117. package/esm2015/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.js +142 -0
  118. package/esm2015/impact-assessments/impact-assessments-products/impact-assessments-products.component.js +252 -0
  119. package/esm2015/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.js +68 -0
  120. package/esm2015/impact-assessments/impact-assessments.model.js +2 -0
  121. package/esm2015/impact-assessments/impact-assessments.module.js +47 -0
  122. package/esm2015/impact-assessments/public-api.js +7 -0
  123. package/esm2015/mendeley/mendeley.service.js +35 -0
  124. package/esm2015/mendeley/public-api.js +2 -0
  125. package/esm2015/node/node-csv-export-confirm/node-csv-export-confirm.component.js +65 -0
  126. package/esm2015/node/node-csv-select-headers/node-csv-select-headers.component.js +119 -0
  127. package/esm2015/node/node-csv.service.js +24 -0
  128. package/esm2015/node/node-diffs/node-diffs.component.js +67 -0
  129. package/esm2015/node/node-diffs/node-diffs.model.js +6 -0
  130. package/esm2015/node/node-icon/node-icon.component.js +37 -0
  131. package/esm2015/node/node-link/node-link.component.js +33 -0
  132. package/esm2015/node/node-logs-file/node-logs-file.component.js +63 -0
  133. package/esm2015/node/node-logs-models/node-logs-models.component.js +188 -0
  134. package/esm2015/node/node-missing-lookup-factors/node-missing-lookup-factors.component.js +34 -0
  135. package/esm2015/node/node-value-details/node-value-details.component.js +46 -0
  136. package/esm2015/node/node.module.js +67 -0
  137. package/esm2015/node/node.service.js +113 -0
  138. package/esm2015/node/public-api.js +13 -0
  139. package/esm2015/public-api.js +16 -0
  140. package/esm2015/schema/public-api.js +2 -0
  141. package/esm2015/schema/schema.service.js +167 -0
  142. package/esm2015/search/public-api.js +4 -0
  143. package/esm2015/search/search.model.js +204 -0
  144. package/esm2015/search/search.module.js +13 -0
  145. package/esm2015/search/search.service.js +99 -0
  146. package/esm2015/sites/public-api.js +6 -0
  147. package/esm2015/sites/sites-maps/sites-maps.component.js +162 -0
  148. package/esm2015/sites/sites-measurements/sites-measurements.component.js +78 -0
  149. package/esm2015/sites/sites-measurements-logs/sites-measurements-logs.component.js +63 -0
  150. package/esm2015/sites/sites.model.js +10 -0
  151. package/esm2015/sites/sites.module.js +42 -0
  152. package/esm2015/terms/public-api.js +2 -0
  153. package/esm2015/terms/terms.model.js +184 -0
  154. package/esm2015/users/public-api.js +2 -0
  155. package/esm2015/users/users.service.js +17 -0
  156. package/fesm2015/hestia-earth-ui-components.js +5920 -0
  157. package/fesm2015/hestia-earth-ui-components.js.map +1 -0
  158. package/files/files-error.model.d.ts +40 -0
  159. package/files/files-form/files-form.component.d.ts +94 -0
  160. package/files/files-form.model.d.ts +113 -0
  161. package/files/files.module.d.ts +13 -0
  162. package/files/public-api.d.ts +2 -0
  163. package/fontawesome/fontawesome.module.d.ts +10 -0
  164. package/fontawesome/public-api.d.ts +1 -0
  165. package/hestia-earth-ui-components.d.ts +5 -0
  166. package/impact-assessments/impact-assessments-indicator-breakdown-chart/impact-assessments-indicator-breakdown-chart.component.d.ts +28 -0
  167. package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +25 -0
  168. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +77 -0
  169. package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +25 -0
  170. package/impact-assessments/impact-assessments.model.d.ts +6 -0
  171. package/impact-assessments/impact-assessments.module.d.ts +15 -0
  172. package/impact-assessments/public-api.d.ts +6 -0
  173. package/mendeley/mendeley.service.d.ts +25 -0
  174. package/mendeley/public-api.d.ts +1 -0
  175. package/node/node-csv-export-confirm/node-csv-export-confirm.component.d.ts +32 -0
  176. package/node/node-csv-select-headers/node-csv-select-headers.component.d.ts +42 -0
  177. package/node/node-csv.service.d.ts +9 -0
  178. package/node/node-diffs/node-diffs.component.d.ts +23 -0
  179. package/node/node-diffs/node-diffs.model.d.ts +4 -0
  180. package/node/node-icon/node-icon.component.d.ts +8 -0
  181. package/node/node-link/node-link.component.d.ts +11 -0
  182. package/node/node-logs-file/node-logs-file.component.d.ts +31 -0
  183. package/node/node-logs-models/node-logs-models.component.d.ts +72 -0
  184. package/node/node-missing-lookup-factors/node-missing-lookup-factors.component.d.ts +14 -0
  185. package/node/node-value-details/node-value-details.component.d.ts +17 -0
  186. package/node/node.module.d.ts +20 -0
  187. package/node/node.service.d.ts +70 -0
  188. package/node/public-api.d.ts +12 -0
  189. package/package.json +53 -0
  190. package/public-api.d.ts +15 -0
  191. package/schema/public-api.d.ts +1 -0
  192. package/schema/schema.service.d.ts +51 -0
  193. package/search/public-api.d.ts +3 -0
  194. package/search/search.model.d.ts +243 -0
  195. package/search/search.module.d.ts +7 -0
  196. package/search/search.service.d.ts +129 -0
  197. package/sites/public-api.d.ts +5 -0
  198. package/sites/sites-maps/sites-maps.component.d.ts +35 -0
  199. package/sites/sites-measurements/sites-measurements.component.d.ts +31 -0
  200. package/sites/sites-measurements-logs/sites-measurements-logs.component.d.ts +23 -0
  201. package/sites/sites.model.d.ts +10 -0
  202. package/sites/sites.module.d.ts +13 -0
  203. package/styles.scss +197 -0
  204. package/terms/public-api.d.ts +1 -0
  205. package/terms/terms.model.d.ts +21 -0
  206. package/users/public-api.d.ts +1 -0
  207. package/users/users.service.d.ts +7 -0
@@ -0,0 +1,13 @@
1
+ export * from './node-csv.service';
2
+ export * from './node.module';
3
+ export * from './node.service';
4
+ export { NodeCsvExportConfirmComponent } from './node-csv-export-confirm/node-csv-export-confirm.component';
5
+ export { NodeCsvSelectHeadersComponent } from './node-csv-select-headers/node-csv-select-headers.component';
6
+ export { NodeDiffsComponent } from './node-diffs/node-diffs.component';
7
+ export { NodeIconComponent } from './node-icon/node-icon.component';
8
+ export { NodeLinkComponent } from './node-link/node-link.component';
9
+ export { NodeLogsFileComponent } from './node-logs-file/node-logs-file.component';
10
+ export { NodeLogsModelsComponent } from './node-logs-models/node-logs-models.component';
11
+ export { NodeMissingLookupFactorsComponent } from './node-missing-lookup-factors/node-missing-lookup-factors.component';
12
+ export { NodeValueDetailsComponent } from './node-value-details/node-value-details.component';
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBRS9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzVHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ub2RlLWNzdi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbm9kZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9ub2RlLnNlcnZpY2UnO1xuXG5leHBvcnQgeyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50JztcbmV4cG9ydCB7IE5vZGVDc3ZTZWxlY3RIZWFkZXJzQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy9ub2RlLWNzdi1zZWxlY3QtaGVhZGVycy5jb21wb25lbnQnO1xuZXhwb3J0IHsgTm9kZURpZmZzQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLWRpZmZzL25vZGUtZGlmZnMuY29tcG9uZW50JztcbmV4cG9ydCB7IE5vZGVJY29uQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLWljb24vbm9kZS1pY29uLmNvbXBvbmVudCc7XG5leHBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4vbm9kZS1saW5rL25vZGUtbGluay5jb21wb25lbnQnO1xuZXhwb3J0IHsgTm9kZUxvZ3NGaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLWxvZ3MtZmlsZS9ub2RlLWxvZ3MtZmlsZS5jb21wb25lbnQnO1xuZXhwb3J0IHsgTm9kZUxvZ3NNb2RlbHNDb21wb25lbnQgfSBmcm9tICcuL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQnO1xuZXhwb3J0IHsgTm9kZU1pc3NpbmdMb29rdXBGYWN0b3JzQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLW1pc3NpbmctbG9va3VwLWZhY3RvcnMvbm9kZS1taXNzaW5nLWxvb2t1cC1mYWN0b3JzLmNvbXBvbmVudCc7XG5leHBvcnQgeyBOb2RlVmFsdWVEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLXZhbHVlLWRldGFpbHMvbm9kZS12YWx1ZS1kZXRhaWxzLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,16 @@
1
+ export * from './auth/public-api';
2
+ export * from './bibliographies/public-api';
3
+ export * from './common/public-api';
4
+ export * from './cycles/public-api';
5
+ export * from './engine/public-api';
6
+ export * from './files/public-api';
7
+ export * from './fontawesome/public-api';
8
+ export * from './impact-assessments/public-api';
9
+ export * from './mendeley/public-api';
10
+ export * from './node/public-api';
11
+ export * from './schema/public-api';
12
+ export * from './search/public-api';
13
+ export * from './sites/public-api';
14
+ export * from './terms/public-api';
15
+ export * from './users/public-api';
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hdXRoL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9iaWJsaW9ncmFwaGllcy9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9jeWNsZXMvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2VuZ2luZS9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2ZvbnRhd2Vzb21lL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9pbXBhY3QtYXNzZXNzbWVudHMvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL21lbmRlbGV5L3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9ub2RlL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vc2l0ZXMvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlcm1zL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi91c2Vycy9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './schema.service';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zY2hlbWEvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEuc2VydmljZSc7XG4iXX0=
@@ -0,0 +1,167 @@
1
+ import { __awaiter } from "tslib";
2
+ /* eslint-disable complexity */
3
+ import { Injectable } from '@angular/core';
4
+ import { from, of, ReplaySubject } from 'rxjs';
5
+ import { catchError, map, mergeMap, reduce, take } from 'rxjs/operators';
6
+ import { isEmpty, isUndefined, isEqual } from '@hestia-earth/utils';
7
+ import { SchemaType, NodeType, SCHEMA_VERSION, sortKeysByType } from '@hestia-earth/schema';
8
+ import { headersFromCsv } from '@hestia-earth/schema-convert';
9
+ import { baseUrl } from '../common/utils';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common/http";
12
+ export const linkTypeEnabled = (type) => [
13
+ NodeType.Cycle,
14
+ NodeType.ImpactAssessment,
15
+ NodeType.Site,
16
+ NodeType.Source,
17
+ NodeType.Term
18
+ ].includes(type);
19
+ export const refToSchemaType = (ref = '') => ref.startsWith('http') ? ref : ref.substring(2).replace('-deep', '').replace('.json#', '');
20
+ export const definitionToSchemaType = ({ title, $ref }) => (title || refToSchemaType($ref));
21
+ const schemaTypeProperties = (properties, schemaType) => schemaType ? [
22
+ 'type',
23
+ ...('id' in properties && schemaType !== SchemaType.Term ? ['id'] : [])
24
+ ] : [];
25
+ const definitionToSchema = ({ required, properties }) => ({
26
+ required: required || [],
27
+ properties: properties || {}
28
+ });
29
+ export const schemaRequiredProperties = (schemas, def) => {
30
+ const schemaType = definitionToSchemaType(def);
31
+ const { required, properties } = schemaType in schemas ?
32
+ schemas[schemaType] :
33
+ definitionToSchema(def);
34
+ // remove internal properties
35
+ const props = (required || []).filter(key => !properties[key].internal);
36
+ return {
37
+ schemaType,
38
+ properties: [
39
+ ...props,
40
+ ...schemaTypeProperties(properties, schemaType)
41
+ ].map(key => ({ key, value: properties[key] }))
42
+ };
43
+ };
44
+ export const valueTypeToDefault = {
45
+ number: '',
46
+ integer: '',
47
+ boolean: false,
48
+ string: ''
49
+ };
50
+ export const nestingTypeEnabled = (schemaType) => ![
51
+ SchemaType.Cycle,
52
+ SchemaType.ImpactAssessment,
53
+ SchemaType.Organisation,
54
+ SchemaType.Site,
55
+ SchemaType.Source
56
+ ].includes(schemaType);
57
+ export const nestingEnabled = (schemaType, key) => nestingTypeEnabled(schemaType) || ['type', 'id'].includes(key);
58
+ export const schemaTypeToDefaultValue = (schemas, prop, nested = false) => {
59
+ const mappings = {
60
+ object: () => {
61
+ const { schemaType, properties } = schemaRequiredProperties(schemas, prop);
62
+ return properties
63
+ .filter(({ key }) => !nested || nestingEnabled(schemaType, key))
64
+ .map(({ key, value }) => ({ key, value: schemaTypeToDefaultValue(schemas, value, true) }))
65
+ .reduce((prev, curr) => (Object.assign(Object.assign({}, prev), { [curr.key]: curr.value })), {});
66
+ },
67
+ array: () => {
68
+ const { items } = prop;
69
+ return [schemaTypeToDefaultValue(schemas, items, true)];
70
+ },
71
+ default: () => prop.default || valueTypeToDefault[prop.type]
72
+ };
73
+ const mapped = !prop.type ? mappings.object : (prop.type in mappings ? mappings[prop.type] : mappings.default);
74
+ return mapped();
75
+ };
76
+ const typePropertiesKeys = {
77
+ [SchemaType.Term]: ['type', 'id', '@id', 'name']
78
+ };
79
+ export const availableProperties = (schema, schemaType, value, isTopLevel = true, skipExistingNode = true) => {
80
+ const { properties } = 'properties' in schema ? schema : { properties: {} };
81
+ const keys = schemaType in typePropertiesKeys ? typePropertiesKeys[schemaType] : Object.keys(properties || {});
82
+ const internalProps = keys === null || keys === void 0 ? void 0 : keys.filter(prop => properties[prop].internal);
83
+ const existing = [
84
+ ...(isEmpty(value) ? [] : Object.keys(value).filter(v => !isEmpty(value[v]) || value[v] === '')),
85
+ ...internalProps,
86
+ ...(isTopLevel ? [] : ['@id']),
87
+ '@type'
88
+ ];
89
+ const available = keys === null || keys === void 0 ? void 0 : keys.filter(prop => !existing.includes(prop)).reduce((prev, prop) => {
90
+ prev[prop] = properties[prop];
91
+ return prev;
92
+ }, {});
93
+ // avoid editing an existing node
94
+ const isExistingNode = !isUndefined(value) && !isUndefined(value['@type'] || value.type) && !isUndefined(value['@id']);
95
+ return isExistingNode && skipExistingNode ? {} : available;
96
+ };
97
+ export const isSchemaIri = (schema) => isEqual(Object.keys((schema === null || schema === void 0 ? void 0 : schema.properties) || {}), ['@id']) && isEqual(((schema === null || schema === void 0 ? void 0 : schema.required) || []), ['@id']);
98
+ export class HeSchemaService {
99
+ constructor(http) {
100
+ this.http = http;
101
+ this.schemasLoading = false;
102
+ this.schemasLoaded = false;
103
+ this._schemas = new ReplaySubject(1);
104
+ this.sortConfigLoading = false;
105
+ this.sortConfigLoaded = false;
106
+ this._sortConfig = new ReplaySubject(1);
107
+ }
108
+ loadSchemas() {
109
+ this.schemasLoading = true;
110
+ return from(Object.values(SchemaType)).pipe(mergeMap(type => this.http.get(`${baseUrl()}/schema/${SCHEMA_VERSION}/json-schema/${type}.json`).pipe(map(schema => ({ type, schema })), catchError(() => of({ type, schema: { properties: [] } })))), reduce((prev, { type, schema }) => (Object.assign(Object.assign({}, prev), { [type]: schema })), {}), map(data => {
111
+ this._schemas.next(data);
112
+ this.schemasLoading = false;
113
+ this.schemasLoaded = true;
114
+ return data;
115
+ }));
116
+ }
117
+ get schemas$() {
118
+ return this.schemasLoading || this.schemasLoaded ? this._schemas.asObservable() : this.loadSchemas();
119
+ }
120
+ schemas() {
121
+ return this.schemas$.pipe(take(1)).toPromise();
122
+ }
123
+ loadSortConfig() {
124
+ this.sortConfigLoading = true;
125
+ return this.http.get(`${baseUrl()}/schema/${SCHEMA_VERSION}/sort-config/config.json`).pipe(catchError(() => of(undefined)), map(data => {
126
+ this._sortConfig.next(data);
127
+ this.sortConfigLoading = false;
128
+ this.sortConfigLoaded = true;
129
+ return data;
130
+ }));
131
+ }
132
+ get sortConfig$() {
133
+ return this.sortConfigLoading || this.sortConfigLoaded ? this._sortConfig.asObservable() : this.loadSortConfig();
134
+ }
135
+ sortConfig() {
136
+ return this.sortConfig$.pipe(take(1)).toPromise();
137
+ }
138
+ /**
139
+ * Parse and sort (if possible) headers from CSV content according to the schema order.
140
+ * This will load the sort configuration according to the current schema version.
141
+ *
142
+ * @param csvContent The content as a string
143
+ * @returns List of strings as Observable when parsing / sorting is done.
144
+ */
145
+ parseHeaders(csvContent) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ const headers = headersFromCsv(csvContent);
148
+ try {
149
+ const config = yield this.sortConfig();
150
+ return sortKeysByType(headers, 'asc', config);
151
+ }
152
+ catch (err) {
153
+ return headers;
154
+ }
155
+ });
156
+ }
157
+ ;
158
+ }
159
+ HeSchemaService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSchemaService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
160
+ HeSchemaService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSchemaService, providedIn: 'root' });
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSchemaService, decorators: [{
162
+ type: Injectable,
163
+ args: [{
164
+ providedIn: 'root'
165
+ }]
166
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2NoZW1hL3NjaGVtYS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQWMsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTFDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQTJCLEVBQUUsRUFBRSxDQUFDO0lBQzlELFFBQVEsQ0FBQyxLQUFLO0lBQ2QsUUFBUSxDQUFDLGdCQUFnQjtJQUN6QixRQUFRLENBQUMsSUFBSTtJQUNiLFFBQVEsQ0FBQyxNQUFNO0lBQ2YsUUFBUSxDQUFDLElBQUk7Q0FDZCxDQUFDLFFBQVEsQ0FBQyxJQUFnQixDQUFDLENBQUM7QUFFN0IsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQzFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FB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Q0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNuSCxDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNVLFlBQVksQ0FBQyxVQUFrQjs7WUFDMUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLElBQUk7Z0JBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLEdBQUcsRUFBRTtnQkFDVixPQUFPLE9BQU8sQ0FBQzthQUNoQjtRQUNILENBQUM7S0FBQTtJQUFBLENBQUM7OzZHQTdFUyxlQUFlO2lIQUFmLGVBQWUsY0FGZCxNQUFNOzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGZyb20sIG9mLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIG1lcmdlTWFwLCByZWR1Y2UsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc1VuZGVmaW5lZCwgaXNFcXVhbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgU2NoZW1hVHlwZSwgTm9kZVR5cGUsIFNDSEVNQV9WRVJTSU9OLCBzb3J0Q29uZmlnLCBzb3J0S2V5c0J5VHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7XG4gIGRlZmluaXRpb25zLCBkZWZpbml0aW9uLCBJRGVmaW5pdGlvbiwgSURlZmluaXRpb25PYmplY3QsIElEZWZpbml0aW9uQXJyYXksIElEZWZpbml0aW9uUHJvcGVydGllc1xufSBmcm9tICdAaGVzdGlhLWVhcnRoL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGhlYWRlcnNGcm9tQ3N2IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEtY29udmVydCc7XG5cbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi9jb21tb24vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgbGlua1R5cGVFbmFibGVkID0gKHR5cGU6IFNjaGVtYVR5cGUgfCBOb2RlVHlwZSkgPT4gW1xuICBOb2RlVHlwZS5DeWNsZSxcbiAgTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudCxcbiAgTm9kZVR5cGUuU2l0ZSxcbiAgTm9kZVR5cGUuU291cmNlLFxuICBOb2RlVHlwZS5UZXJtXG5dLmluY2x1ZGVzKHR5cGUgYXMgTm9kZVR5cGUpO1xuXG5leHBvcnQgY29uc3QgcmVmVG9TY2hlbWFUeXBlID0gKHJlZiA9ICcnKSA9PlxuICByZWYuc3RhcnRzV2l0aCgnaHR0cCcpID8gcmVmIDogcmVmLnN1YnN0cmluZygyKS5yZXBsYWNlKCctZGVlcCcsICcnKS5yZXBsYWNlKCcuanNvbiMnLCAnJykgYXMgU2NoZW1hVHlwZTtcblxuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25Ub1NjaGVtYVR5cGUgPSAoeyB0aXRsZSwgJHJlZiB9OiBJRGVmaW5pdGlvbk9iamVjdCkgPT5cbiAgKHRpdGxlIHx8IHJlZlRvU2NoZW1hVHlwZSgkcmVmKSkgYXMgU2NoZW1hVHlwZTtcblxuY29uc3Qgc2NoZW1hVHlwZVByb3BlcnRpZXMgPSAocHJvcGVydGllczogSURlZmluaXRpb25Qcm9wZXJ0aWVzLCBzY2hlbWFUeXBlPzogU2NoZW1hVHlwZSkgPT4gc2NoZW1hVHlwZSA/IFtcbiAgJ3R5cGUnLFxuICAuLi4oJ2lkJyBpbiBwcm9wZXJ0aWVzICYmIHNjaGVtYVR5cGUgIT09IFNjaGVtYVR5cGUuVGVybSA/IFsnaWQnXSA6IFtdKVxuXSA6IFtdO1xuXG5jb25zdCBkZWZpbml0aW9uVG9TY2hlbWEgPSAoeyByZXF1aXJlZCwgcHJvcGVydGllcyB9OiBJRGVmaW5pdGlvbk9iamVjdCkgPT4gKHtcbiAgcmVxdWlyZWQ6IHJlcXVpcmVkIHx8IFtdLFxuICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9XG59KTtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYVJlcXVpcmVkUHJvcGVydGllcyA9IChzY2hlbWFzOiBkZWZpbml0aW9ucywgZGVmOiBJRGVmaW5pdGlvbk9iamVjdCkgPT4ge1xuICBjb25zdCBzY2hlbWFUeXBlID0gZGVmaW5pdGlvblRvU2NoZW1hVHlwZShkZWYpO1xuICBjb25zdCB7IHJlcXVpcmVkLCBwcm9wZXJ0aWVzIH0gPSBzY2hlbWFUeXBlIGluIHNjaGVtYXMgP1xuICAgIChzY2hlbWFzW3NjaGVtYVR5cGVdIGFzIElEZWZpbml0aW9uT2JqZWN0KSA6XG4gICAgZGVmaW5pdGlvblRvU2NoZW1hKGRlZik7XG4gIC8vIHJlbW92ZSBpbnRlcm5hbCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHByb3BzID0gKHJlcXVpcmVkIHx8IFtdKS5maWx0ZXIoa2V5ID0+ICFwcm9wZXJ0aWVzW2tleV0uaW50ZXJuYWwpO1xuICByZXR1cm4ge1xuICAgIHNjaGVtYVR5cGUsXG4gICAgcHJvcGVydGllczogW1xuICAgICAgLi4ucHJvcHMsXG4gICAgICAuLi5zY2hlbWFUeXBlUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBzY2hlbWFUeXBlKVxuICAgIF0ubWFwKGtleSA9PiAoeyBrZXksIHZhbHVlOiBwcm9wZXJ0aWVzW2tleV0gfSkpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgdmFsdWVUeXBlVG9EZWZhdWx0ID0ge1xuICBudW1iZXI6ICcnLFxuICBpbnRlZ2VyOiAnJyxcbiAgYm9vbGVhbjogZmFsc2UsXG4gIHN0cmluZzogJydcbn07XG5cbmV4cG9ydCBjb25zdCBuZXN0aW5nVHlwZUVuYWJsZWQgPSAoc2NoZW1hVHlwZTogU2NoZW1hVHlwZSkgPT4gIVtcbiAgU2NoZW1hVHlwZS5DeWNsZSxcbiAgU2NoZW1hVHlwZS5JbXBhY3RBc3Nlc3NtZW50LFxuICBTY2hlbWFUeXBlLk9yZ2FuaXNhdGlvbixcbiAgU2NoZW1hVHlwZS5TaXRlLFxuICBTY2hlbWFUeXBlLlNvdXJjZVxuXS5pbmNsdWRlcyhzY2hlbWFUeXBlKTtcblxuZXhwb3J0IGNvbnN0IG5lc3RpbmdFbmFibGVkID0gKHNjaGVtYVR5cGU6IFNjaGVtYVR5cGUsIGtleTogc3RyaW5nKSA9PlxuICBuZXN0aW5nVHlwZUVuYWJsZWQoc2NoZW1hVHlwZSkgfHwgWyd0eXBlJywgJ2lkJ10uaW5jbHVkZXMoa2V5KTtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYVR5cGVUb0RlZmF1bHRWYWx1ZSA9IChzY2hlbWFzOiBkZWZpbml0aW9ucywgcHJvcDogZGVmaW5pdGlvbiwgbmVzdGVkID0gZmFsc2UpOiBhbnkgPT4ge1xuICBjb25zdCBtYXBwaW5nczoge1xuICAgIFtrZXk6IHN0cmluZ106ICgpID0+IGFueTtcbiAgfSA9IHtcbiAgICBvYmplY3Q6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hVHlwZSwgcHJvcGVydGllcyB9ID0gc2NoZW1hUmVxdWlyZWRQcm9wZXJ0aWVzKHNjaGVtYXMsIHByb3AgYXMgSURlZmluaXRpb25PYmplY3QpO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXNcbiAgICAgICAgLmZpbHRlcigoeyBrZXkgfSkgPT4gIW5lc3RlZCB8fCBuZXN0aW5nRW5hYmxlZChzY2hlbWFUeXBlLCBrZXkpKVxuICAgICAgICAubWFwKCh7IGtleSwgdmFsdWUgfSkgPT4gKHsga2V5LCB2YWx1ZTogc2NoZW1hVHlwZVRvRGVmYXVsdFZhbHVlKHNjaGVtYXMsIHZhbHVlLCB0cnVlKSB9KSlcbiAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHsgLi4ucHJldiwgW2N1cnIua2V5XTogY3Vyci52YWx1ZSB9KSwge30pO1xuICAgIH0sXG4gICAgYXJyYXk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHByb3AgYXMgSURlZmluaXRpb25BcnJheTtcbiAgICAgIHJldHVybiBbc2NoZW1hVHlwZVRvRGVmYXVsdFZhbHVlKHNjaGVtYXMsIGl0ZW1zLCB0cnVlKV07XG4gICAgfSxcbiAgICBkZWZhdWx0OiAoKSA9PiBwcm9wLmRlZmF1bHQgfHwgKHZhbHVlVHlwZVRvRGVmYXVsdCBhcyBhbnkpW3Byb3AudHlwZSBhcyBzdHJpbmddXG4gIH07XG4gIGNvbnN0IG1hcHBlZCA9ICFwcm9wLnR5cGUgPyBtYXBwaW5ncy5vYmplY3QgOiAoXG4gICAgcHJvcC50eXBlIGFzIHN0cmluZyBpbiBtYXBwaW5ncyA/IG1hcHBpbmdzW3Byb3AudHlwZSBhcyBzdHJpbmddIDogbWFwcGluZ3MuZGVmYXVsdFxuICApO1xuICByZXR1cm4gbWFwcGVkKCk7XG59O1xuXG5jb25zdCB0eXBlUHJvcGVydGllc0tleXM6IHtcbiAgW3R5cGUgaW4gU2NoZW1hVHlwZV0/OiBzdHJpbmdbXTtcbn0gPSB7XG4gIFtTY2hlbWFUeXBlLlRlcm1dOiBbJ3R5cGUnLCAnaWQnLCAnQGlkJywgJ25hbWUnXVxufTtcblxuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZVByb3BlcnRpZXMgPSAoXG4gIHNjaGVtYTogZGVmaW5pdGlvbiwgc2NoZW1hVHlwZTogU2NoZW1hVHlwZSwgdmFsdWU6IGFueSwgaXNUb3BMZXZlbCA9IHRydWUsIHNraXBFeGlzdGluZ05vZGUgPSB0cnVlXG4pID0+IHtcbiAgY29uc3QgeyBwcm9wZXJ0aWVzIH0gPSAncHJvcGVydGllcycgaW4gc2NoZW1hID8gc2NoZW1hIDogeyBwcm9wZXJ0aWVzOiB7fSB9O1xuICBjb25zdCBrZXlzID0gc2NoZW1hVHlwZSBpbiB0eXBlUHJvcGVydGllc0tleXMgPyB0eXBlUHJvcGVydGllc0tleXNbc2NoZW1hVHlwZV0gOiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzIHx8IHt9KTtcbiAgY29uc3QgaW50ZXJuYWxQcm9wcyA9IGtleXM/LmZpbHRlcihwcm9wID0+IHByb3BlcnRpZXNbcHJvcF0uaW50ZXJuYWwpO1xuICBjb25zdCBleGlzdGluZyA9IFtcbiAgICAuLi4oaXNFbXB0eSh2YWx1ZSkgPyBbXSA6IE9iamVjdC5rZXlzKHZhbHVlKS5maWx0ZXIodiA9PiAhaXNFbXB0eSh2YWx1ZVt2XSkgfHwgdmFsdWVbdl0gPT09ICcnKSksXG4gICAgLi4uaW50ZXJuYWxQcm9wcyEsXG4gICAgLi4uKGlzVG9wTGV2ZWwgPyBbXSA6IFsnQGlkJ10pLFxuICAgICdAdHlwZSdcbiAgXTtcbiAgY29uc3QgYXZhaWxhYmxlID0ga2V5cz8uZmlsdGVyKHByb3AgPT4gIWV4aXN0aW5nLmluY2x1ZGVzKHByb3ApKS5yZWR1Y2UoKHByZXY6IGFueSwgcHJvcCkgPT4ge1xuICAgIHByZXZbcHJvcF0gPSBwcm9wZXJ0aWVzW3Byb3BdO1xuICAgIHJldHVybiBwcmV2O1xuICB9LCB7fSk7XG4gIC8vIGF2b2lkIGVkaXRpbmcgYW4gZXhpc3Rpbmcgbm9kZVxuICBjb25zdCBpc0V4aXN0aW5nTm9kZSA9ICFpc1VuZGVmaW5lZCh2YWx1ZSkgJiYgIWlzVW5kZWZpbmVkKHZhbHVlWydAdHlwZSddIHx8IHZhbHVlLnR5cGUpICYmICFpc1VuZGVmaW5lZCh2YWx1ZVsnQGlkJ10pO1xuICByZXR1cm4gaXNFeGlzdGluZ05vZGUgJiYgc2tpcEV4aXN0aW5nTm9kZSA/IHt9IDogYXZhaWxhYmxlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2NoZW1hSXJpID0gKHNjaGVtYT86IElEZWZpbml0aW9uT2JqZWN0KSA9PlxuICBpc0VxdWFsKE9iamVjdC5rZXlzKHNjaGVtYT8ucHJvcGVydGllcyB8fCB7fSksIFsnQGlkJ10pICYmIGlzRXF1YWwoKHNjaGVtYT8ucmVxdWlyZWQgfHwgW10pLCBbJ0BpZCddKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSGVTY2hlbWFTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzY2hlbWFzTG9hZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHNjaGVtYXNMb2FkZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2NoZW1hcyA9IG5ldyBSZXBsYXlTdWJqZWN0PGRlZmluaXRpb25zPigxKTtcblxuICBwcml2YXRlIHNvcnRDb25maWdMb2FkaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc29ydENvbmZpZ0xvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9zb3J0Q29uZmlnID0gbmV3IFJlcGxheVN1YmplY3Q8c29ydENvbmZpZz4oMSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkgeyB9XG5cbiAgcHJpdmF0ZSBsb2FkU2NoZW1hcygpIHtcbiAgICB0aGlzLnNjaGVtYXNMb2FkaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZnJvbShPYmplY3QudmFsdWVzKFNjaGVtYVR5cGUpKS5waXBlKFxuICAgICAgbWVyZ2VNYXAodHlwZSA9PiB0aGlzLmh0dHAuZ2V0PElEZWZpbml0aW9uPihcbiAgICAgICAgYCR7YmFzZVVybCgpfS9zY2hlbWEvJHtTQ0hFTUFfVkVSU0lPTn0vanNvbi1zY2hlbWEvJHt0eXBlfS5qc29uYFxuICAgICAgKS5waXBlKFxuICAgICAgICBtYXAoc2NoZW1hID0+ICh7IHR5cGUsIHNjaGVtYSB9KSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoeyB0eXBlLCBzY2hlbWE6IHsgcHJvcGVydGllczogW10gfSB9KSlcbiAgICAgICkpLFxuICAgICAgcmVkdWNlKChwcmV2LCB7IHR5cGUsIHNjaGVtYSB9KSA9PiAoeyAuLi5wcmV2LCBbdHlwZV06IHNjaGVtYSB9KSwge30gYXMgZGVmaW5pdGlvbnMpLFxuICAgICAgbWFwKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLl9zY2hlbWFzLm5leHQoZGF0YSk7XG4gICAgICAgIHRoaXMuc2NoZW1hc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY2hlbWFzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNjaGVtYXMkKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYXNMb2FkaW5nIHx8IHRoaXMuc2NoZW1hc0xvYWRlZCA/IHRoaXMuX3NjaGVtYXMuYXNPYnNlcnZhYmxlKCkgOiB0aGlzLmxvYWRTY2hlbWFzKCk7XG4gIH1cblxuICBwdWJsaWMgc2NoZW1hcygpIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWFzJC5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU29ydENvbmZpZygpIHtcbiAgICB0aGlzLnNvcnRDb25maWdMb2FkaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxzb3J0Q29uZmlnPihgJHtiYXNlVXJsKCl9L3NjaGVtYS8ke1NDSEVNQV9WRVJTSU9OfS9zb3J0LWNvbmZpZy9jb25maWcuanNvbmApLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKCh1bmRlZmluZWQgYXMgYW55KSBhcyBzb3J0Q29uZmlnKSksXG4gICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuX3NvcnRDb25maWcubmV4dChkYXRhKTtcbiAgICAgICAgdGhpcy5zb3J0Q29uZmlnTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvcnRDb25maWdMb2FkZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc29ydENvbmZpZyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydENvbmZpZ0xvYWRpbmcgfHwgdGhpcy5zb3J0Q29uZmlnTG9hZGVkID8gdGhpcy5fc29ydENvbmZpZy5hc09ic2VydmFibGUoKSA6IHRoaXMubG9hZFNvcnRDb25maWcoKTtcbiAgfVxuXG4gIHB1YmxpYyBzb3J0Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLnNvcnRDb25maWckLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYW5kIHNvcnQgKGlmIHBvc3NpYmxlKSBoZWFkZXJzIGZyb20gQ1NWIGNvbnRlbnQgYWNjb3JkaW5nIHRvIHRoZSBzY2hlbWEgb3JkZXIuXG4gICAqIFRoaXMgd2lsbCBsb2FkIHRoZSBzb3J0IGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHNjaGVtYSB2ZXJzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY3N2Q29udGVudCBUaGUgY29udGVudCBhcyBhIHN0cmluZ1xuICAgKiBAcmV0dXJucyBMaXN0IG9mIHN0cmluZ3MgYXMgT2JzZXJ2YWJsZSB3aGVuIHBhcnNpbmcgLyBzb3J0aW5nIGlzIGRvbmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcGFyc2VIZWFkZXJzKGNzdkNvbnRlbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBoZWFkZXJzRnJvbUNzdihjc3ZDb250ZW50KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5zb3J0Q29uZmlnKCk7XG4gICAgICByZXR1cm4gc29ydEtleXNCeVR5cGUoaGVhZGVycywgJ2FzYycsIGNvbmZpZyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './search.model';
2
+ export * from './search.module';
3
+ export * from './search.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZWFyY2gvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC5zZXJ2aWNlJztcbiJdfQ==
@@ -0,0 +1,204 @@
1
+ import { NodeType, TermTermType, nestedSearchableKeys } from '@hestia-earth/schema';
2
+ export const searchableTypes = [
3
+ NodeType.Cycle,
4
+ NodeType.Source
5
+ ];
6
+ export const serializeSearchFilters = (filters) => Object.keys(filters || {})
7
+ .filter(key => filters[key].length)
8
+ .map(key => `${key}=${filters[key].filter(Boolean).join('|')}`)
9
+ .join(';');
10
+ export const deserializeSearchFilters = (filters) => (filters || '').split(';').reduce((prev, curr) => {
11
+ const [key, values] = curr.split('=');
12
+ prev[key] = (values || '').split('|').filter(Boolean);
13
+ return prev;
14
+ }, {});
15
+ export const matchType = (type) => Object.freeze({
16
+ match: { '@type': type }
17
+ });
18
+ export const matchTermType = (termType) => Object.freeze({
19
+ match: { termType }
20
+ });
21
+ export const matchRegex = (key, value) => Object.freeze({
22
+ regexp: { [key]: { value: value.toString() } }
23
+ });
24
+ export const matchQuery = (key, value, boost) => Object.freeze({
25
+ match: {
26
+ [key]: Object.assign({ query: value }, (boost ? { boost } : {}))
27
+ }
28
+ });
29
+ export const matchExactQuery = (key, value, boost) => matchQuery(`${key}.keyword`, value, boost);
30
+ export const matchNameNormalized = (query, boost = 20) => Object.freeze({
31
+ match: { nameNormalized: { query, boost } }
32
+ });
33
+ export const numberGte = (key, value) => Object.freeze({
34
+ range: { [key]: { gte: value } }
35
+ });
36
+ export const multiMatchQuery = (query, fields, type = 'best_fields', boost, analyzer) => Object.freeze({
37
+ multi_match: Object.assign(Object.assign({ query,
38
+ fields,
39
+ type }, (boost ? { boost } : {})), (analyzer ? { analyzer } : {}))
40
+ });
41
+ export const matchPhraseQuery = (query, boost, ...fields) => fields.length ? multiMatchQuery(query, fields, 'phrase', boost) : matchExactQuery('name', query, boost);
42
+ export const matchPhrasePrefixQuery = (query, boost = 2, ...fields) => fields.length ?
43
+ multiMatchQuery(query, fields, 'phrase_prefix', boost) :
44
+ Object.freeze({
45
+ match_phrase_prefix: {
46
+ nameSearchAsYouType: {
47
+ query,
48
+ boost
49
+ }
50
+ }
51
+ });
52
+ export const matchBoolPrefixQuery = (query, boost = 1, ...fields) => fields.length ?
53
+ multiMatchQuery(query, fields, 'bool_prefix', boost) :
54
+ Object.freeze({
55
+ match_bool_prefix: {
56
+ name: {
57
+ query,
58
+ boost
59
+ }
60
+ }
61
+ });
62
+ export const wildcardQuery = (query, boost = 3, ...fields) => Object.freeze({
63
+ simple_query_string: {
64
+ query: `*${query}*`,
65
+ fields,
66
+ analyze_wildcard: true,
67
+ boost
68
+ }
69
+ });
70
+ const matchCountryLevel = { match: { gadmLevel: 0 } };
71
+ export const matchGlobalRegion = { regexp: { '@id': 'region-*' } };
72
+ export const matchCountry = Object.freeze({
73
+ bool: {
74
+ should: [
75
+ matchCountryLevel,
76
+ matchGlobalRegion
77
+ ],
78
+ minimum_should_match: 1
79
+ }
80
+ });
81
+ export const countriesQuery = Object.freeze({
82
+ bool: {
83
+ must: [
84
+ matchType(NodeType.Term),
85
+ matchTermType(TermTermType.region),
86
+ matchCountryLevel
87
+ ]
88
+ }
89
+ });
90
+ export const allCountriesQuery = Object.freeze({
91
+ bool: Object.assign({ must: [
92
+ matchType(NodeType.Term),
93
+ matchTermType(TermTermType.region)
94
+ ] }, matchCountry.bool)
95
+ });
96
+ export const matchRegion = numberGte('gadmLevel', 1);
97
+ export const regionsQuery = Object.freeze({
98
+ bool: {
99
+ must: [
100
+ matchType(NodeType.Term),
101
+ matchTermType(TermTermType.region),
102
+ matchRegion
103
+ ]
104
+ }
105
+ });
106
+ export const worldRegion = Object.freeze({
107
+ '@id': 'region-world',
108
+ name: 'World'
109
+ });
110
+ export const cropsQuery = Object.freeze({
111
+ bool: {
112
+ must: [
113
+ matchType(NodeType.Term),
114
+ matchTermType(TermTermType.crop)
115
+ ]
116
+ }
117
+ });
118
+ export const matchAggregatedQuery = matchQuery('aggregated', true);
119
+ const isNestedKey = (key) => nestedSearchableKeys.includes(key.split('.')[0]);
120
+ export const matchNestedKey = (key, query) => isNestedKey(key) ? {
121
+ nested: { path: key.split('.')[0], query }
122
+ } : query;
123
+ /**
124
+ * List of fields to return in the search results.
125
+ */
126
+ export const searchResultsFields = Object.freeze({
127
+ [NodeType.Cycle]: [
128
+ 'description', 'dataDescription', 'endDate',
129
+ 'emissionsCount', 'inputsCount', 'productsCount',
130
+ 'site.location', 'site.country.name', 'site.region.name'
131
+ ],
132
+ [NodeType.Source]: ['bibliography.title', 'bibliography.documentDOI'],
133
+ [NodeType.ImpactAssessment]: ['emissionsResourceUseCount', 'impactsCount', 'country.name']
134
+ });
135
+ /**
136
+ * List of fields to search in.
137
+ */
138
+ const searchFields = Object.freeze({
139
+ [NodeType.Cycle]: ['name', 'description', 'dataDescription'],
140
+ [NodeType.Source]: ['name', 'bibliography.title'],
141
+ [NodeType.ImpactAssessment]: ['name', 'product.name', 'country.name']
142
+ });
143
+ const searchFieldsNested = Object.freeze({
144
+ [NodeType.Cycle]: [
145
+ 'inputs.term.name',
146
+ 'emissions.term.name',
147
+ 'practices.term.name'
148
+ ],
149
+ [NodeType.Source]: [],
150
+ [NodeType.ImpactAssessment]: [
151
+ 'emissionsResourceUse.term.name',
152
+ 'impacts.term.name'
153
+ ]
154
+ });
155
+ /**
156
+ * Specific strict queries per type.
157
+ */
158
+ const searchQueries = {
159
+ [NodeType.Cycle]: { must: [], must_not: [matchAggregatedQuery] },
160
+ [NodeType.Source]: { must: [], must_not: [matchAggregatedQuery] }
161
+ };
162
+ const searchFiltersKeys = {
163
+ [NodeType.Cycle]: key => key,
164
+ [NodeType.Source]: key => key
165
+ };
166
+ /* eslint-disable complexity */
167
+ export const searchQuery = (type, query, filters, aggregated) => {
168
+ const boolQuery = (Object.assign(Object.assign({ must: [
169
+ matchType(type),
170
+ aggregated ? matchAggregatedQuery : null
171
+ ].filter(Boolean) }, (query ? {
172
+ should: [
173
+ matchPhraseQuery(query, 100, ...searchFields[type]),
174
+ matchPhrasePrefixQuery(query, 20, ...searchFields[type]),
175
+ matchBoolPrefixQuery(query, 10, ...searchFields[type]),
176
+ ...searchFieldsNested[type].map(field => matchNestedKey(field, matchBoolPrefixQuery(query, 1, field)))
177
+ ],
178
+ minimum_should_match: 1
179
+ } : {})), { must_not: [
180
+ aggregated ? null : matchAggregatedQuery
181
+ ].filter(Boolean) }));
182
+ const keys = Object.keys(filters || {}).filter(key => filters[key].length);
183
+ return {
184
+ bool: keys.length ? {
185
+ must: keys.map(key => {
186
+ const filterKey = searchFiltersKeys[type](key);
187
+ return {
188
+ bool: {
189
+ should: filters[key]
190
+ .map(value => matchNestedKey(filterKey, matchExactQuery(filterKey, value)))
191
+ .map(must => {
192
+ const localQuery = JSON.parse(JSON.stringify(boolQuery));
193
+ localQuery.must.push(must);
194
+ return { bool: localQuery };
195
+ }),
196
+ minimum_should_match: 1
197
+ }
198
+ };
199
+ })
200
+ } : boolQuery
201
+ };
202
+ };
203
+ /* eslint-enable complexity */
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlYXJjaC9zZWFyY2gubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUlwRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQXFCO0lBQy9DLFFBQVEsQ0FBQyxLQUFLO0lBQ2QsUUFBUSxDQUFDLE1BQU07Q0FDaEIsQ0FBQztBQVNGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsT0FBdUIsRUFBRSxFQUFFLENBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztLQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ2xDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7S0FDOUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxPQUFlLEVBQWtCLEVBQUUsQ0FDMUUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNwRCxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtB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VGVybVR5cGUsIG5lc3RlZFNlYXJjaGFibGVLZXlzIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5leHBvcnQgdHlwZSBzZWFyY2hhYmxlVHlwZSA9IE5vZGVUeXBlLkN5Y2xlIHwgTm9kZVR5cGUuU291cmNlO1xuXG5leHBvcnQgY29uc3Qgc2VhcmNoYWJsZVR5cGVzOiBzZWFyY2hhYmxlVHlwZVtdID0gW1xuICBOb2RlVHlwZS5DeWNsZSxcbiAgTm9kZVR5cGUuU291cmNlXG5dO1xuXG50eXBlIG11bHRpTWF0Y2hUeXBlID0gJ2Jlc3RfZmllbGRzJyB8ICdtb3N0X2ZpZWxkcycgfCAnY3Jvc3NfZmllbGRzJyB8ICdwaHJhc2UnIHwgJ3BocmFzZV9wcmVmaXgnIHwgJ2Jvb2xfcHJlZml4JztcbnR5cGUgbXVsdGlNYXRjaEFuYWx5emVyID0gJ3N0YW5kYXJkJztcblxuZXhwb3J0IGludGVyZmFjZSBJU2VhcmNoRmlsdGVycyB7XG4gIFtrZXk6IHN0cmluZ106IChzdHJpbmcgfCBudW1iZXIpW107XG59XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVTZWFyY2hGaWx0ZXJzID0gKGZpbHRlcnM6IElTZWFyY2hGaWx0ZXJzKSA9PlxuICBPYmplY3Qua2V5cyhmaWx0ZXJzIHx8IHt9KVxuICAgIC5maWx0ZXIoa2V5ID0+IGZpbHRlcnNba2V5XS5sZW5ndGgpXG4gICAgLm1hcChrZXkgPT4gYCR7a2V5fT0ke2ZpbHRlcnNba2V5XS5maWx0ZXIoQm9vbGVhbikuam9pbignfCcpfWApXG4gICAgLmpvaW4oJzsnKTtcblxuZXhwb3J0IGNvbnN0IGRlc2VyaWFsaXplU2VhcmNoRmlsdGVycyA9IChmaWx0ZXJzOiBzdHJpbmcpOiBJU2VhcmNoRmlsdGVycyA9PlxuICAoZmlsdGVycyB8fCAnJykuc3BsaXQoJzsnKS5yZWR1Y2UoKHByZXY6IGFueSwgY3VycikgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlc10gPSBjdXJyLnNwbGl0KCc9Jyk7XG4gICAgcHJldltrZXldID0gKHZhbHVlcyB8fCAnJykuc3BsaXQoJ3wnKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIHByZXY7XG4gIH0sIHt9KTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoVHlwZSA9ICh0eXBlOiBOb2RlVHlwZSB8IHN0cmluZykgPT4gT2JqZWN0LmZyZWV6ZSh7XG4gIG1hdGNoOiB7ICdAdHlwZSc6IHR5cGUgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBtYXRjaFRlcm1UeXBlID0gKHRlcm1UeXBlOiBUZXJtVGVybVR5cGUgfCBzdHJpbmcpID0+IE9iamVjdC5mcmVlemUoe1xuICBtYXRjaDogeyB0ZXJtVHlwZSB9XG59KTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoUmVnZXggPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBSZWdFeHApID0+IE9iamVjdC5mcmVlemUoe1xuICByZWdleHA6IHsgW2tleV06IHsgdmFsdWU6IHZhbHVlLnRvU3RyaW5nKCkgfSB9XG59KTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoUXVlcnkgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGJvb3N0PzogbnVtYmVyKSA9PiBPYmplY3QuZnJlZXplKHtcbiAgbWF0Y2g6IHtcbiAgICBba2V5XToge1xuICAgICAgcXVlcnk6IHZhbHVlLFxuICAgICAgLi4uKGJvb3N0ID8geyBib29zdCB9IDoge30pXG4gICAgfVxuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoRXhhY3RRdWVyeSA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgYm9vc3Q/OiBudW1iZXIpID0+IG1hdGNoUXVlcnkoYCR7a2V5fS5rZXl3b3JkYCwgdmFsdWUsIGJvb3N0KTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoTmFtZU5vcm1hbGl6ZWQgPSAocXVlcnk6IHN0cmluZywgYm9vc3QgPSAyMCkgPT4gT2JqZWN0LmZyZWV6ZSh7XG4gIG1hdGNoOiB7IG5hbWVOb3JtYWxpemVkOiB7IHF1ZXJ5LCBib29zdCB9IH1cbn0pO1xuXG5leHBvcnQgY29uc3QgbnVtYmVyR3RlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKSA9PiBPYmplY3QuZnJlZXplKHtcbiAgcmFuZ2U6IHsgW2tleV06IHsgZ3RlOiB2YWx1ZSB9IH1cbn0pO1xuXG5leHBvcnQgY29uc3QgbXVsdGlNYXRjaFF1ZXJ5ID0gKFxuICBxdWVyeTogc3RyaW5nLCBmaWVsZHM6IHN0cmluZ1tdLCB0eXBlOiBtdWx0aU1hdGNoVHlwZSA9ICdiZXN0X2ZpZWxkcycsIGJvb3N0PzogbnVtYmVyLCBhbmFseXplcj86IG11bHRpTWF0Y2hBbmFseXplclxuKSA9PiBPYmplY3QuZnJlZXplKHtcbiAgbXVsdGlfbWF0Y2g6IHtcbiAgICBxdWVyeSxcbiAgICBmaWVsZHMsXG4gICAgdHlwZSxcbiAgICAuLi4oYm9vc3QgPyB7IGJvb3N0IH0gOiB7fSksXG4gICAgLi4uKGFuYWx5emVyID8geyBhbmFseXplciB9IDoge30pXG4gIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hQaHJhc2VRdWVyeSA9IChxdWVyeTogc3RyaW5nLCBib29zdD86IG51bWJlciwgLi4uZmllbGRzOiBzdHJpbmdbXSkgPT5cbiAgZmllbGRzLmxlbmd0aCA/IG11bHRpTWF0Y2hRdWVyeShxdWVyeSwgZmllbGRzLCAncGhyYXNlJywgYm9vc3QpIDogbWF0Y2hFeGFjdFF1ZXJ5KCduYW1lJywgcXVlcnksIGJvb3N0KTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoUGhyYXNlUHJlZml4UXVlcnkgPSAocXVlcnk6IHN0cmluZywgYm9vc3QgPSAyLCAuLi5maWVsZHM6IHN0cmluZ1tdKSA9PlxuICBmaWVsZHMubGVuZ3RoID9cbiAgICBtdWx0aU1hdGNoUXVlcnkocXVlcnksIGZpZWxkcywgJ3BocmFzZV9wcmVmaXgnLCBib29zdCkgOlxuICAgIE9iamVjdC5mcmVlemUoe1xuICAgICAgbWF0Y2hfcGhyYXNlX3ByZWZpeDoge1xuICAgICAgICBuYW1lU2VhcmNoQXNZb3VUeXBlOiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgYm9vc3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hCb29sUHJlZml4UXVlcnkgPSAocXVlcnk6IHN0cmluZywgYm9vc3QgPSAxLCAuLi5maWVsZHM6IHN0cmluZ1tdKSA9PlxuICBmaWVsZHMubGVuZ3RoID9cbiAgICBtdWx0aU1hdGNoUXVlcnkocXVlcnksIGZpZWxkcywgJ2Jvb2xfcHJlZml4JywgYm9vc3QpIDpcbiAgICBPYmplY3QuZnJlZXplKHtcbiAgICAgIG1hdGNoX2Jvb2xfcHJlZml4OiB7XG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICBib29zdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbmV4cG9ydCBjb25zdCB3aWxkY2FyZFF1ZXJ5ID0gKHF1ZXJ5OiBzdHJpbmcsIGJvb3N0ID0gMywgLi4uZmllbGRzOiBzdHJpbmdbXSkgPT4gT2JqZWN0LmZyZWV6ZSh7XG4gIHNpbXBsZV9xdWVyeV9zdHJpbmc6IHtcbiAgICBxdWVyeTogYCoke3F1ZXJ5fSpgLFxuICAgIGZpZWxkcyxcbiAgICBhbmFseXplX3dpbGRjYXJkOiB0cnVlLFxuICAgIGJvb3N0XG4gIH1cbn0pO1xuXG5jb25zdCBtYXRjaENvdW50cnlMZXZlbCA9IHsgbWF0Y2g6IHsgZ2FkbUxldmVsOiAwIH0gfTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoR2xvYmFsUmVnaW9uID0geyByZWdleHA6IHsgJ0BpZCc6ICdyZWdpb24tKicgfSB9O1xuXG5leHBvcnQgY29uc3QgbWF0Y2hDb3VudHJ5ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGJvb2w6IHtcbiAgICBzaG91bGQ6IFtcbiAgICAgIG1hdGNoQ291bnRyeUxldmVsLFxuICAgICAgbWF0Y2hHbG9iYWxSZWdpb25cbiAgICBdLFxuICAgIG1pbmltdW1fc2hvdWxkX21hdGNoOiAxXG4gIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgY291bnRyaWVzUXVlcnkgPSBPYmplY3QuZnJlZXplKHtcbiAgYm9vbDoge1xuICAgIG11c3Q6IFtcbiAgICAgIG1hdGNoVHlwZShOb2RlVHlwZS5UZXJtKSxcbiAgICAgIG1hdGNoVGVybVR5cGUoVGVybVRlcm1UeXBlLnJlZ2lvbiksXG4gICAgICBtYXRjaENvdW50cnlMZXZlbFxuICAgIF1cbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBhbGxDb3VudHJpZXNRdWVyeSA9IE9iamVjdC5mcmVlemUoe1xuICBib29sOiB7XG4gICAgbXVzdDogW1xuICAgICAgbWF0Y2hUeXBlKE5vZGVUeXBlLlRlcm0pLFxuICAgICAgbWF0Y2hUZXJtVHlwZShUZXJtVGVybVR5cGUucmVnaW9uKVxuICAgIF0sXG4gICAgLi4ubWF0Y2hDb3VudHJ5LmJvb2xcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBtYXRjaFJlZ2lvbiA9IG51bWJlckd0ZSgnZ2FkbUxldmVsJywgMSk7XG5cbmV4cG9ydCBjb25zdCByZWdpb25zUXVlcnkgPSBPYmplY3QuZnJlZXplKHtcbiAgYm9vbDoge1xuICAgIG11c3Q6IFtcbiAgICAgIG1hdGNoVHlwZShOb2RlVHlwZS5UZXJtKSxcbiAgICAgIG1hdGNoVGVybVR5cGUoVGVybVRlcm1UeXBlLnJlZ2lvbiksXG4gICAgICBtYXRjaFJlZ2lvblxuICAgIF1cbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCB3b3JsZFJlZ2lvbiA9IE9iamVjdC5mcmVlemUoe1xuICAnQGlkJzogJ3JlZ2lvbi13b3JsZCcsXG4gIG5hbWU6ICdXb3JsZCdcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JvcHNRdWVyeSA9IE9iamVjdC5mcmVlemUoe1xuICBib29sOiB7XG4gICAgbXVzdDogW1xuICAgICAgbWF0Y2hUeXBlKE5vZGVUeXBlLlRlcm0pLFxuICAgICAgbWF0Y2hUZXJtVHlwZShUZXJtVGVybVR5cGUuY3JvcClcbiAgICBdXG4gIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hBZ2dyZWdhdGVkUXVlcnkgPSBtYXRjaFF1ZXJ5KCdhZ2dyZWdhdGVkJywgdHJ1ZSk7XG5cbmNvbnN0IGlzTmVzdGVkS2V5ID0gKGtleTogc3RyaW5nKSA9PiBuZXN0ZWRTZWFyY2hhYmxlS2V5cy5pbmNsdWRlcyhrZXkuc3BsaXQoJy4nKVswXSk7XG5cbmV4cG9ydCBjb25zdCBtYXRjaE5lc3RlZEtleSA9IChrZXk6IHN0cmluZywgcXVlcnk6IGFueSkgPT5cbiAgaXNOZXN0ZWRLZXkoa2V5KSA/IHtcbiAgICBuZXN0ZWQ6IHsgcGF0aDoga2V5LnNwbGl0KCcuJylbMF0sIHF1ZXJ5IH1cbiAgfSA6IHF1ZXJ5O1xuXG4vKipcbiAqIExpc3Qgb2YgZmllbGRzIHRvIHJldHVybiBpbiB0aGUgc2VhcmNoIHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWFyY2hSZXN1bHRzRmllbGRzOiB7XG4gIFt0eXBlIGluIHNlYXJjaGFibGVUeXBlXTogc3RyaW5nW107XG59ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFtOb2RlVHlwZS5DeWNsZV06IFtcbiAgICAnZGVzY3JpcHRpb24nLCAnZGF0YURlc2NyaXB0aW9uJywgJ2VuZERhdGUnLFxuICAgICdlbWlzc2lvbnNDb3VudCcsICdpbnB1dHNDb3VudCcsICdwcm9kdWN0c0NvdW50JyxcbiAgICAnc2l0ZS5sb2NhdGlvbicsICdzaXRlLmNvdW50cnkubmFtZScsICdzaXRlLnJlZ2lvbi5uYW1lJ1xuICBdLFxuICBbTm9kZVR5cGUuU291cmNlXTogWydiaWJsaW9ncmFwaHkudGl0bGUnLCAnYmlibGlvZ3JhcGh5LmRvY3VtZW50RE9JJ10sXG4gIFtOb2RlVHlwZS5JbXBhY3RBc3Nlc3NtZW50XTogWydlbWlzc2lvbnNSZXNvdXJjZVVzZUNvdW50JywgJ2ltcGFjdHNDb3VudCcsICdjb3VudHJ5Lm5hbWUnXVxufSk7XG5cbi8qKlxuICogTGlzdCBvZiBmaWVsZHMgdG8gc2VhcmNoIGluLlxuICovXG5jb25zdCBzZWFyY2hGaWVsZHM6IHtcbiAgW3R5cGUgaW4gc2VhcmNoYWJsZVR5cGVdOiBzdHJpbmdbXTtcbn0gPSBPYmplY3QuZnJlZXplKHtcbiAgW05vZGVUeXBlLkN5Y2xlXTogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2RhdGFEZXNjcmlwdGlvbiddLFxuICBbTm9kZVR5cGUuU291cmNlXTogWyduYW1lJywgJ2JpYmxpb2dyYXBoeS50aXRsZSddLFxuICBbTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudF06IFsnbmFtZScsICdwcm9kdWN0Lm5hbWUnLCAnY291bnRyeS5uYW1lJ11cbn0pO1xuXG5jb25zdCBzZWFyY2hGaWVsZHNOZXN0ZWQ6IHtcbiAgW3R5cGUgaW4gc2VhcmNoYWJsZVR5cGVdOiBzdHJpbmdbXTtcbn0gPSBPYmplY3QuZnJlZXplKHtcbiAgW05vZGVUeXBlLkN5Y2xlXTogW1xuICAgICdpbnB1dHMudGVybS5uYW1lJyxcbiAgICAnZW1pc3Npb25zLnRlcm0ubmFtZScsXG4gICAgJ3ByYWN0aWNlcy50ZXJtLm5hbWUnXG4gIF0sXG4gIFtOb2RlVHlwZS5Tb3VyY2VdOiBbXSxcbiAgW05vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnRdOiBbXG4gICAgJ2VtaXNzaW9uc1Jlc291cmNlVXNlLnRlcm0ubmFtZScsXG4gICAgJ2ltcGFjdHMudGVybS5uYW1lJ1xuICBdXG59KTtcblxuLyoqXG4gKiBTcGVjaWZpYyBzdHJpY3QgcXVlcmllcyBwZXIgdHlwZS5cbiAqL1xuY29uc3Qgc2VhcmNoUXVlcmllczoge1xuICBbdHlwZSBpbiBzZWFyY2hhYmxlVHlwZV06IHsgbXVzdDogYW55W107IG11c3Rfbm90OiBhbnlbXSB9O1xufSA9IHtcbiAgW05vZGVUeXBlLkN5Y2xlXTogeyBtdXN0OiBbXSwgbXVzdF9ub3Q6IFttYXRjaEFnZ3JlZ2F0ZWRRdWVyeV0gfSxcbiAgW05vZGVUeXBlLlNvdXJjZV06IHsgbXVzdDogW10sIG11c3Rfbm90OiBbbWF0Y2hBZ2dyZWdhdGVkUXVlcnldIH1cbn07XG5cbmNvbnN0IHNlYXJjaEZpbHRlcnNLZXlzOiB7XG4gIFt0eXBlIGluIHNlYXJjaGFibGVUeXBlXTogKGtleTogc3RyaW5nKSA9PiBzdHJpbmc7XG59ID0ge1xuICBbTm9kZVR5cGUuQ3ljbGVdOiBrZXkgPT4ga2V5LFxuICBbTm9kZVR5cGUuU291cmNlXToga2V5ID0+IGtleVxufTtcblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaFF1ZXJ5ID0gKHR5cGU6IHNlYXJjaGFibGVUeXBlLCBxdWVyeT86IHN0cmluZywgZmlsdGVycz86IElTZWFyY2hGaWx0ZXJzLCBhZ2dyZWdhdGVkPzogYm9vbGVhbikgPT4ge1xuICBjb25zdCBib29sUXVlcnk6IGFueSA9ICh7XG4gICAgbXVzdDogW1xuICAgICAgbWF0Y2hUeXBlKHR5cGUpLFxuICAgICAgYWdncmVnYXRlZCA/IG1hdGNoQWdncmVnYXRlZFF1ZXJ5IDogbnVsbFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pLFxuICAgIC4uLihxdWVyeSA/IHtcbiAgICAgIHNob3VsZDogW1xuICAgICAgICBtYXRjaFBocmFzZVF1ZXJ5KHF1ZXJ5LCAxMDAsIC4uLnNlYXJjaEZpZWxkc1t0eXBlXSksIC8vIG1ha2Ugc3VyZSBleGFjdCBtYXRjaGVzIGNvbWUgZmlyc3RcbiAgICAgICAgbWF0Y2hQaHJhc2VQcmVmaXhRdWVyeShxdWVyeSwgMjAsIC4uLnNlYXJjaEZpZWxkc1t0eXBlXSksXG4gICAgICAgIG1hdGNoQm9vbFByZWZpeFF1ZXJ5KHF1ZXJ5LCAxMCwgLi4uc2VhcmNoRmllbGRzW3R5cGVdKSxcbiAgICAgICAgLi4uc2VhcmNoRmllbGRzTmVzdGVkW3R5cGVdLm1hcChmaWVsZCA9PiBtYXRjaE5lc3RlZEtleShmaWVsZCwgbWF0Y2hCb29sUHJlZml4UXVlcnkocXVlcnksIDEsIGZpZWxkKSkpXG4gICAgICBdLFxuICAgICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgICB9IDoge30pLFxuICAgIG11c3Rfbm90OiBbXG4gICAgICBhZ2dyZWdhdGVkID8gbnVsbCA6IG1hdGNoQWdncmVnYXRlZFF1ZXJ5XG4gICAgXS5maWx0ZXIoQm9vbGVhbilcbiAgfSk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaWx0ZXJzIHx8IHt9KS5maWx0ZXIoa2V5ID0+IGZpbHRlcnMhW2tleV0ubGVuZ3RoKTtcbiAgcmV0dXJuIHtcbiAgICBib29sOiBrZXlzLmxlbmd0aCA/IHtcbiAgICAgIG11c3Q6IGtleXMubWFwKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcktleSA9IHNlYXJjaEZpbHRlcnNLZXlzW3R5cGVdKGtleSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYm9vbDoge1xuICAgICAgICAgICAgc2hvdWxkOiBmaWx0ZXJzIVtrZXldXG4gICAgICAgICAgICAgIC5tYXAodmFsdWUgPT4gbWF0Y2hOZXN0ZWRLZXkoZmlsdGVyS2V5LCBtYXRjaEV4YWN0UXVlcnkoZmlsdGVyS2V5LCB2YWx1ZSkpKVxuICAgICAgICAgICAgICAubWFwKG11c3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsUXVlcnkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJvb2xRdWVyeSkpO1xuICAgICAgICAgICAgICAgIGxvY2FsUXVlcnkubXVzdC5wdXNoKG11c3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGJvb2w6IGxvY2FsUXVlcnkgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtaW5pbXVtX3Nob3VsZF9tYXRjaDogMVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgfSA6IGJvb2xRdWVyeVxuICB9O1xufTtcbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuIl19
@@ -0,0 +1,13 @@
1
+ import { NgModule } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export { HeSearchService } from './search.service';
4
+ export class HeSearchModule {
5
+ }
6
+ HeSearchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ HeSearchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSearchModule });
8
+ HeSearchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSearchModule });
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSearchModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{}]
12
+ }] });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZWFyY2gvc2VhcmNoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUV6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbkQsTUFBTSxPQUFPLGNBQWM7OzRHQUFkLGNBQWM7NkdBQWQsY0FBYzs2R0FBZCxjQUFjOzRGQUFkLGNBQWM7a0JBRDFCLFFBQVE7bUJBQUMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4vc2VhcmNoLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgSGVTZWFyY2hNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,99 @@
1
+ import { __rest } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { of } from 'rxjs';
4
+ import { catchError, map } from 'rxjs/operators';
5
+ import { NodeType, SchemaType } from '@hestia-earth/schema';
6
+ import { matchType, matchPhraseQuery, matchPhrasePrefixQuery, matchQuery, searchableTypes, matchBoolPrefixQuery } from './search.model';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "../common/common.service";
10
+ const emptySearchResult = () => ({
11
+ time: 0,
12
+ count: 0,
13
+ results: []
14
+ });
15
+ export const MAX_RESULTS = 10000;
16
+ export const suggestMatchQuery = (query) => [
17
+ matchPhraseQuery(query, 10),
18
+ matchQuery('nameNormalized', query, 8),
19
+ matchPhrasePrefixQuery(query, 2)
20
+ ];
21
+ export const suggestQuery = (query, type, extraQueries = []) => ({
22
+ bool: {
23
+ must: extraQueries,
24
+ should: (type ? [type] : searchableTypes).map(v => ({
25
+ bool: {
26
+ must: [matchType(v)],
27
+ should: suggestMatchQuery(query),
28
+ minimum_should_match: 1
29
+ }
30
+ })),
31
+ minimum_should_match: 1
32
+ }
33
+ });
34
+ const suggestSourceQuery = (query, fields) => ({
35
+ bool: {
36
+ must: [matchType(NodeType.Source)],
37
+ should: [
38
+ matchPhraseQuery(query, 100, ...fields),
39
+ matchPhrasePrefixQuery(query, 20, ...fields),
40
+ matchBoolPrefixQuery(query, 10, ...fields)
41
+ ],
42
+ minimum_should_match: 1
43
+ }
44
+ });
45
+ export class HeSearchService {
46
+ constructor(http, commonService) {
47
+ this.http = http;
48
+ this.commonService = commonService;
49
+ }
50
+ search(params) {
51
+ return this.http.post(`${this.commonService.apiBaseUrl}/search`, params)
52
+ .pipe(catchError(() => of(emptySearchResult())))
53
+ .toPromise();
54
+ }
55
+ count(params = {}) {
56
+ return this.http.post(`${this.commonService.apiBaseUrl}/count`, params).toPromise().catch(() => 0);
57
+ }
58
+ get$(type, id) {
59
+ return this.http.post(`${this.commonService.apiBaseUrl}/search`, {
60
+ limit: 1,
61
+ query: {
62
+ bool: {
63
+ must: [{ match: { '@type': type } }, { match: { '@id': id } }]
64
+ }
65
+ }
66
+ })
67
+ .pipe(catchError(() => of(emptySearchResult())), map(({ results }) => results[0] || null));
68
+ }
69
+ get(type, id) {
70
+ return this.get$(type, id).toPromise();
71
+ }
72
+ suggest(term, type, extraQueries = [], fullQuery, limit = 10, includes = []) {
73
+ const query = fullQuery || suggestQuery(term, type, extraQueries);
74
+ return this.http.post(`${this.commonService.apiBaseUrl}/search`, {
75
+ limit,
76
+ fields: ['name', '@id', type ? '' : '@type', 'termType', 'aggregated', ...includes].filter(val => !!val),
77
+ query
78
+ })
79
+ .pipe(catchError(() => of(emptySearchResult())), map(({ results }) => results.map((_a) => {
80
+ var { _score } = _a, res = __rest(_a, ["_score"]);
81
+ return res;
82
+ })));
83
+ }
84
+ suggestSource(term, limit = 5, fields = ['bibliography.title'], includes = ['bibliography.title']) {
85
+ return this.suggest(term, NodeType.Source, [], suggestSourceQuery(term, fields), limit, includes)
86
+ .pipe(map((sources) => sources.map(source => (Object.assign(Object.assign({}, source), { bibliography: Object.assign({
87
+ // needed to create a nested property
88
+ type: SchemaType.Bibliography }, source.bibliography) })))));
89
+ }
90
+ }
91
+ HeSearchService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSearchService, deps: [{ token: i1.HttpClient }, { token: i2.HeCommonService }], target: i0.ɵɵFactoryTarget.Injectable });
92
+ HeSearchService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSearchService, providedIn: 'root' });
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeSearchService, decorators: [{
94
+ type: Injectable,
95
+ args: [{
96
+ providedIn: 'root'
97
+ }]
98
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.HeCommonService }]; } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VhcmNoL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQ0csUUFBUSxFQUFvRCxVQUFVLEVBQy9FLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUNMLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQWtCLGVBQWUsRUFBRSxvQkFBb0IsRUFDdkgsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQTJEeEIsTUFBTSxpQkFBaUIsR0FBRyxHQUE0QyxFQUFFLENBQUMsQ0FBQztJQUN4RSxJQUFJLEVBQUUsQ0FBQztJQUNQLEtBQUssRUFBRSxDQUFDO0lBQ1IsT0FBTyxFQUFFLEVBQUU7Q0FDYSxDQUFBLENBQUM7QUFFM0IsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUM7SUFDbEQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUMzQixVQUFVLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0QyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQ2pDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FDMUIsS0FBYSxFQUFFLElBQVEsRUFBRSxlQUFzQixFQUFFLEVBQ2pELEVBQUUsQ0FBQyxDQUFDO0lBQ0osSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLFlB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LEVBQUUsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUM7YUFDOUYsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE9BQTBCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGdDQUN0RCxNQUFNLEtBQ1QsWUFBWTtnQkFDVixxQ0FBcUM7Z0JBQ3JDLElBQUksRUFBRSxVQUFVLENBQUMsWUFBWSxJQUMxQixNQUFNLENBQUMsWUFBWSxJQUVMLENBQUEsQ0FBQyxDQUFDLENBQ3hCLENBQUM7SUFDTixDQUFDOzs2R0FoRVUsZUFBZTtpSEFBZixlQUFlLGNBRmQsTUFBTTs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgSlNPTkxELCBOb2RlVHlwZSwgSUN5Y2xlSlNPTkxELCBJU291cmNlSlNPTkxELCBJVGVybUpTT05MRCwgU291cmNlLCBTY2hlbWFUeXBlLCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRFxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5cbmltcG9ydCB7IEhlQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBtYXRjaFR5cGUsIG1hdGNoUGhyYXNlUXVlcnksIG1hdGNoUGhyYXNlUHJlZml4UXVlcnksIG1hdGNoUXVlcnksIHNlYXJjaGFibGVUeXBlLCBzZWFyY2hhYmxlVHlwZXMsIG1hdGNoQm9vbFByZWZpeFF1ZXJ5XG59IGZyb20gJy4vc2VhcmNoLm1vZGVsJztcblxuZXhwb3J0IHR5cGUgc2VhcmNoUmVzdWx0ID0gSUN5Y2xlSlNPTkxEIHwgSVNvdXJjZUpTT05MRCB8IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEIHwgSVRlcm1KU09OTEQ7XG5cbmV4cG9ydCB0eXBlIHNvcnRPcmRlcnMgPSAnYXNjJyB8ICdkZXNjJztcblxuaW50ZXJmYWNlIElTZWFyY2hQYXJhbVNvcnQge1xuICBba2V5OiBzdHJpbmddOiBzb3J0T3JkZXJzO1xufVxuXG5pbnRlcmZhY2UgSVNlYXJjaFNjcmlwdCB7XG4gIF9zY3JpcHQ6IHtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIG9yZGVyPzogc29ydE9yZGVycztcbiAgICBzY3JpcHQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VhcmNoUGFyYW1zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIG9mZnNldD86IG51bWJlcjtcbiAgZmllbGRzPzogc3RyaW5nW107XG4gIHNvcnQ/OiBJU2VhcmNoUGFyYW1Tb3J0W10gfCBJU2VhcmNoU2NyaXB0O1xuICBxdWVyeT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VhcmNoUmVzdWx0RXh0ZW5kZWQge1xuICBfc2NvcmU6IG51bWJlcjtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8vIGdlb3NwYWNpYWwgc2VhcmNoXG4gIGxvY2F0aW9uPzoge1xuICAgIGxhdDogbnVtYmVyO1xuICAgIGxvbjogbnVtYmVyO1xuICB9O1xuICAvLyB1c2VkIGluIHNlYXJjaFxuICBwcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgZXh0ZW5kZWQ/OiBib29sZWFuO1xuICBwaW5uZWQ/OiBib29sZWFuO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAvLyBjb3VudCBmb3IgbGlzdHNcbiAgaW5wdXRzQ291bnQ/OiBudW1iZXI7XG4gIGVtaXNzaW9uc0NvdW50PzogbnVtYmVyO1xuICBwcm9kdWN0c0NvdW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWFyY2hSZXN1bHRzPEMgZXh0ZW5kcyBKU09OTEQ8VD4sIFQgZXh0ZW5kcyBOb2RlVHlwZSA9IHNlYXJjaGFibGVUeXBlPiB7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSB0aGUgcXVlcnkgdG9va1xuICAgKi9cbiAgdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogTnVtbmJlciBvZiByZXN1bHRzXG4gICAqL1xuICBjb3VudDogbnVtYmVyO1xuICByZXN1bHRzOiAoQyAmIElTZWFyY2hSZXN1bHRFeHRlbmRlZClbXTtcbn1cblxuY29uc3QgZW1wdHlTZWFyY2hSZXN1bHQgPSA8QyBleHRlbmRzIEpTT05MRDxUPiwgVCBleHRlbmRzIE5vZGVUeXBlPigpID0+ICh7XG4gIHRpbWU6IDAsXG4gIGNvdW50OiAwLFxuICByZXN1bHRzOiBbXVxufSBhcyBJU2VhcmNoUmVzdWx0czxDLCBUPik7XG5cbmV4cG9ydCBjb25zdCBNQVhfUkVTVUxUUyA9IDEwMDAwO1xuXG5leHBvcnQgY29uc3Qgc3VnZ2VzdE1hdGNoUXVlcnkgPSAocXVlcnk6IHN0cmluZykgPT4gW1xuICBtYXRjaFBocmFzZVF1ZXJ5KHF1ZXJ5LCAxMCksXG4gIG1hdGNoUXVlcnkoJ25hbWVOb3JtYWxpemVkJywgcXVlcnksIDgpLFxuICBtYXRjaFBocmFzZVByZWZpeFF1ZXJ5KHF1ZXJ5LCAyKVxuXTtcblxuZXhwb3J0IGNvbnN0IHN1Z2dlc3RRdWVyeSA9IDxUIGV4dGVuZHMgTm9kZVR5cGUgPSBzZWFyY2hhYmxlVHlwZT4oXG4gIHF1ZXJ5OiBzdHJpbmcsIHR5cGU/OiBULCBleHRyYVF1ZXJpZXM6IGFueVtdID0gW11cbikgPT4gKHtcbiAgYm9vbDoge1xuICAgIG11c3Q6IGV4dHJhUXVlcmllcyxcbiAgICBzaG91bGQ6ICh0eXBlID8gW3R5cGVdIDogc2VhcmNoYWJsZVR5cGVzKS5tYXAodiA9PiAoe1xuICAgICAgYm9vbDoge1xuICAgICAgICBtdXN0OiBbbWF0Y2hUeXBlKHYpXSxcbiAgICAgICAgc2hvdWxkOiBzdWdnZXN0TWF0Y2hRdWVyeShxdWVyeSksXG4gICAgICAgIG1pbmltdW1fc2hvdWxkX21hdGNoOiAxXG4gICAgICB9XG4gICAgfSkpLFxuICAgIG1pbmltdW1fc2hvdWxkX21hdGNoOiAxXG4gIH1cbn0pO1xuXG5jb25zdCBzdWdnZXN0U291cmNlUXVlcnkgPSAocXVlcnk6IHN0cmluZywgZmllbGRzOiBzdHJpbmdbXSkgPT4gKHtcbiAgYm9vbDoge1xuICAgIG11c3Q6IFttYXRjaFR5cGUoTm9kZVR5cGUuU291cmNlKV0sXG4gICAgc2hvdWxkOiBbXG4gICAgICBtYXRjaFBocmFzZVF1ZXJ5KHF1ZXJ5LCAxMDAsIC4uLmZpZWxkcyksXG4gICAgICBtYXRjaFBocmFzZVByZWZpeFF1ZXJ5KHF1ZXJ5LCAyMCwgLi4uZmllbGRzKSxcbiAgICAgIG1hdGNoQm9vbFByZWZpeFF1ZXJ5KHF1ZXJ5LCAxMCwgLi4uZmllbGRzKVxuICAgIF0sXG4gICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgfVxufSk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEhlU2VhcmNoU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IEhlQ29tbW9uU2VydmljZVxuICApIHsgfVxuXG4gIHB1YmxpYyBzZWFyY2g8QyBleHRlbmRzIEpTT05MRDxUPiwgVCBleHRlbmRzIE5vZGVUeXBlID0gc2VhcmNoYWJsZVR5cGU+KHBhcmFtczogSVNlYXJjaFBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxJU2VhcmNoUmVzdWx0czxDLCBUPj4oYCR7dGhpcy5jb21tb25TZXJ2aWNlLmFwaUJhc2VVcmx9L3NlYXJjaGAsIHBhcmFtcylcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGVtcHR5U2VhcmNoUmVzdWx0PEMsIFQ+KCkpKVxuICAgICAgKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHVibGljIGNvdW50KHBhcmFtcyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PG51bWJlcj4oYCR7dGhpcy5jb21tb25TZXJ2aWNlLmFwaUJhc2VVcmx9L2NvdW50YCwgcGFyYW1zKS50b1Byb21pc2UoKS5jYXRjaCgoKSA9PiAwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQkPEMgZXh0ZW5kcyBKU09OTEQ8VD4sIFQgZXh0ZW5kcyBOb2RlVHlwZT4odHlwZTogVCwgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxJU2VhcmNoUmVzdWx0czxDLCBUPj4oYCR7dGhpcy5jb21tb25TZXJ2aWNlLmFwaUJhc2VVcmx9L3NlYXJjaGAsIHtcbiAgICAgIGxpbWl0OiAxLFxuICAgICAgcXVlcnk6IHtcbiAgICAgICAgYm9vbDoge1xuICAgICAgICAgIG11c3Q6IFt7IG1hdGNoOiB7ICdAdHlwZSc6IHR5cGUgfSB9LCB7IG1hdGNoOiB7ICdAaWQnOiBpZCB9IH1dXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoZW1wdHlTZWFyY2hSZXN1bHQ8QywgVD4oKSkpLFxuICAgICAgICBtYXAoKHsgcmVzdWx0cyB9KSA9PiByZXN1bHRzWzBdIHx8IG51bGwpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldDxDIGV4dGVuZHMgSlNPTkxEPFQ+LCBUIGV4dGVuZHMgTm9kZVR5cGU+KHR5cGU6IFQsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQkPEMsIFQ+KHR5cGUsIGlkKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWdnZXN0PEMgZXh0ZW5kcyBKU09OTEQ8VD4sIFQgZXh0ZW5kcyBOb2RlVHlwZSA9IHNlYXJjaGFibGVUeXBlPihcbiAgICB0ZXJtOiBzdHJpbmcsIHR5cGU/OiBULCBleHRyYVF1ZXJpZXM6IGFueVtdID0gW10sIGZ1bGxRdWVyeT86IGFueSwgbGltaXQgPSAxMCwgaW5jbHVkZXM6IHN0cmluZ1tdID0gW11cbiAgKSB7XG4gICAgY29uc3QgcXVlcnkgPSBmdWxsUXVlcnkgfHwgc3VnZ2VzdFF1ZXJ5KHRlcm0sIHR5cGUsIGV4dHJhUXVlcmllcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElTZWFyY2hSZXN1bHRzPEMsIFQ+PihgJHt0aGlzLmNvbW1vblNlcnZpY2UuYXBpQmFzZVVybH0vc2VhcmNoYCwge1xuICAgICAgbGltaXQsXG4gICAgICBmaWVsZHM6IFsnbmFtZScsICdAaWQnLCB0eXBlID8gJycgOiAnQHR5cGUnLCAndGVybVR5cGUnLCAnYWdncmVnYXRlZCcsIC4uLmluY2x1ZGVzXS5maWx0ZXIodmFsID0+ICEhdmFsKSxcbiAgICAgIHF1ZXJ5XG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGVtcHR5U2VhcmNoUmVzdWx0PEMsIFQ+KCkpKSxcbiAgICAgICAgbWFwKCh7IHJlc3VsdHMgfSkgPT4gcmVzdWx0cy5tYXAoKHsgX3Njb3JlLCAuLi5yZXMgfSkgPT4gcmVzKSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3VnZ2VzdFNvdXJjZSh0ZXJtOiBzdHJpbmcsIGxpbWl0ID0gNSwgZmllbGRzID0gWydiaWJsaW9ncmFwaHkudGl0bGUnXSwgaW5jbHVkZXMgPSBbJ2JpYmxpb2dyYXBoeS50aXRsZSddKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdCh0ZXJtLCBOb2RlVHlwZS5Tb3VyY2UsIFtdLCBzdWdnZXN0U291cmNlUXVlcnkodGVybSwgZmllbGRzKSwgbGltaXQsIGluY2x1ZGVzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoc291cmNlczogUGFydGlhbDxTb3VyY2U+W10pID0+IHNvdXJjZXMubWFwKHNvdXJjZSA9PiAoe1xuICAgICAgICAgIC4uLnNvdXJjZSxcbiAgICAgICAgICBiaWJsaW9ncmFwaHk6IHtcbiAgICAgICAgICAgIC8vIG5lZWRlZCB0byBjcmVhdGUgYSBuZXN0ZWQgcHJvcGVydHlcbiAgICAgICAgICAgIHR5cGU6IFNjaGVtYVR5cGUuQmlibGlvZ3JhcGh5LFxuICAgICAgICAgICAgLi4uc291cmNlLmJpYmxpb2dyYXBoeVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBQYXJ0aWFsPFNvdXJjZT4pKSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==