@bravobit/bb-foundation 0.22.2 → 0.23.0

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 (218) hide show
  1. package/controls/lib/checkbox/checkbox-group/checkbox-group.component.d.ts +3 -2
  2. package/controls/lib/checkbox/checkbox.module.d.ts +2 -1
  3. package/controls/lib/form-control/form-control/form-control.component.d.ts +5 -5
  4. package/controls/lib/form-control/form-control.module.d.ts +2 -1
  5. package/dialog/lib/dialog-confirm/dialog-confirm.component.d.ts +4 -2
  6. package/dialog/lib/dialog.interfaces.d.ts +7 -0
  7. package/dialog/lib/dialog.service.d.ts +5 -9
  8. package/elements/lib/date-picker/date-picker.component.d.ts +4 -2
  9. package/elements/lib/elements.module.d.ts +25 -28
  10. package/elements/lib/pipes/relative-time.pipe.d.ts +5 -5
  11. package/elements/public_api.d.ts +0 -4
  12. package/esm2020/auth/lib/auth.interceptor.mjs +3 -3
  13. package/esm2020/auth/lib/auth.module.mjs +4 -4
  14. package/esm2020/auth/lib/auth.service.mjs +3 -3
  15. package/esm2020/auth/lib/directives/authenticated.directive.mjs +3 -3
  16. package/esm2020/auth/lib/directives/permission.directive.mjs +3 -3
  17. package/esm2020/auth/lib/guards/anonymous.guard.mjs +3 -3
  18. package/esm2020/auth/lib/guards/authenticated.guard.mjs +3 -3
  19. package/esm2020/auth/lib/guards/permission.guard.mjs +3 -3
  20. package/esm2020/auth/lib/permissions/permissions.service.mjs +3 -3
  21. package/esm2020/collections/lib/collections.module.mjs +4 -4
  22. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +3 -3
  23. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +5 -5
  24. package/esm2020/collections/lib/components/collections.directive.mjs +12 -12
  25. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +3 -3
  26. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +7 -6
  27. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +7 -6
  28. package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +3 -3
  29. package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +3 -3
  30. package/esm2020/controls/lib/control-error/control-error.module.mjs +4 -4
  31. package/esm2020/controls/lib/controls.module.mjs +4 -4
  32. package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +6 -5
  33. package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +3 -3
  34. package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +3 -3
  35. package/esm2020/controls/lib/form-control/form-control.module.mjs +8 -7
  36. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +3 -3
  37. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +3 -3
  38. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +3 -3
  39. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +3 -3
  40. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +3 -3
  41. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +3 -3
  42. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +3 -3
  43. package/esm2020/dashboard/lib/dashboard.module.mjs +4 -4
  44. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
  45. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +15 -12
  46. package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +5 -5
  47. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +3 -3
  48. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +3 -3
  49. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +3 -3
  50. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +3 -3
  51. package/esm2020/dialog/lib/dialog.insertion.mjs +3 -3
  52. package/esm2020/dialog/lib/dialog.interfaces.mjs +1 -1
  53. package/esm2020/dialog/lib/dialog.module.mjs +4 -4
  54. package/esm2020/dialog/lib/dialog.service.mjs +15 -27
  55. package/esm2020/elements/lib/avatar/avatar.component.mjs +7 -7
  56. package/esm2020/elements/lib/button/button.component.mjs +6 -6
  57. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +3 -3
  58. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +20 -15
  59. package/esm2020/elements/lib/directives/addon.directive.mjs +6 -6
  60. package/esm2020/elements/lib/directives/form-submit.directive.mjs +3 -3
  61. package/esm2020/elements/lib/directives/form-submitter.directive.mjs +3 -3
  62. package/esm2020/elements/lib/directives/input.directive.mjs +6 -6
  63. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +6 -6
  64. package/esm2020/elements/lib/elements.module.mjs +21 -25
  65. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +4 -4
  66. package/esm2020/elements/lib/form-control/form-control.component.mjs +4 -4
  67. package/esm2020/elements/lib/form-error/form-error.component.mjs +3 -3
  68. package/esm2020/elements/lib/form-group/form-group.component.mjs +3 -3
  69. package/esm2020/elements/lib/icon/icon.component.mjs +3 -3
  70. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +3 -3
  71. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +3 -3
  72. package/esm2020/elements/lib/pipes/file-size.pipe.mjs +3 -3
  73. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +15 -13
  74. package/esm2020/elements/lib/spinner/spinner.component.mjs +3 -3
  75. package/esm2020/elements/lib/tag/tag.component.mjs +3 -3
  76. package/esm2020/elements/public_api.mjs +1 -5
  77. package/esm2020/http/lib/classes/http.config.mjs +2 -3
  78. package/esm2020/http/lib/http.module.mjs +4 -4
  79. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +6 -6
  80. package/esm2020/http/lib/interceptors/error.interceptor.mjs +3 -3
  81. package/esm2020/lib/core/services/clipboard.service.mjs +3 -3
  82. package/esm2020/lib/core/services/exif.service.mjs +3 -3
  83. package/esm2020/lib/core/services/file-loader.service.mjs +3 -3
  84. package/esm2020/lib/core/services/image-converter.service.mjs +3 -3
  85. package/esm2020/lib/core/services/languages.service.mjs +3 -3
  86. package/esm2020/lib/core/services/network.service.mjs +3 -3
  87. package/esm2020/lib/core/services/patch.service.mjs +3 -3
  88. package/esm2020/localize/lib/dictionary/dictionary.class.mjs +92 -0
  89. package/esm2020/localize/lib/dictionary/dictionary.context.mjs +26 -0
  90. package/esm2020/localize/lib/dictionary/dictionary.data.mjs +6 -0
  91. package/esm2020/localize/lib/functions/lowercase.function.mjs +2 -2
  92. package/esm2020/localize/lib/functions/uppercase.function.mjs +2 -2
  93. package/esm2020/localize/lib/handlers/missing.handler.mjs +2 -2
  94. package/esm2020/localize/lib/interfaces/config.interfaces.mjs +1 -1
  95. package/esm2020/localize/lib/interfaces/options.interfaces.mjs +1 -1
  96. package/esm2020/localize/lib/interfaces/transforms.interfaces.mjs +3 -0
  97. package/esm2020/localize/lib/localize.module.mjs +19 -13
  98. package/esm2020/localize/lib/localize.pipe.mjs +7 -8
  99. package/esm2020/localize/lib/localize.service.mjs +86 -130
  100. package/esm2020/localize/lib/transforms/abstract.transform.mjs +30 -0
  101. package/esm2020/localize/lib/transforms/interpolate.transform.mjs +54 -0
  102. package/esm2020/localize/lib/transforms/reference.transform.mjs +25 -0
  103. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +6 -6
  104. package/esm2020/localize/lib/views/localize-template.directive.mjs +3 -3
  105. package/esm2020/localize/public_api.mjs +8 -2
  106. package/esm2020/masking/lib/directives/currency-mask.directive.mjs +3 -3
  107. package/esm2020/masking/lib/directives/date-mask.directive.mjs +3 -3
  108. package/esm2020/masking/lib/directives/input-mask.directive.mjs +3 -3
  109. package/esm2020/masking/lib/masking.module.mjs +4 -4
  110. package/esm2020/masking/lib/masking.service.mjs +3 -3
  111. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +3 -3
  112. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +3 -3
  113. package/esm2020/notifications/lib/notifications.module.mjs +4 -4
  114. package/esm2020/notifications/lib/notifications.service.mjs +22 -26
  115. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +3 -3
  116. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +3 -3
  117. package/esm2020/recaptcha/lib/recaptcha.module.mjs +4 -4
  118. package/esm2020/storage/lib/storage.service.mjs +7 -7
  119. package/esm2020/table/lib/components/table/table.component.mjs +9 -9
  120. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +3 -3
  121. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +3 -3
  122. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +3 -3
  123. package/esm2020/table/lib/table.module.mjs +4 -4
  124. package/esm2020/theming/lib/theming.directive.mjs +3 -3
  125. package/esm2020/theming/lib/theming.module.mjs +4 -4
  126. package/esm2020/utils/bravobit-bb-foundation-utils.mjs +5 -0
  127. package/esm2020/utils/lib/directives/autosize.directive.mjs +72 -0
  128. package/esm2020/utils/lib/directives/focus-trap.directive.mjs +77 -0
  129. package/esm2020/utils/lib/directives/focus.directive.mjs +37 -0
  130. package/esm2020/utils/lib/directives/template.directive.mjs +28 -0
  131. package/esm2020/utils/lib/utils.module.mjs +35 -0
  132. package/esm2020/utils/public_api.mjs +6 -0
  133. package/fesm2015/bravobit-bb-foundation-auth.mjs +28 -28
  134. package/fesm2015/bravobit-bb-foundation-collections.mjs +23 -23
  135. package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -1
  136. package/fesm2015/bravobit-bb-foundation-controls.mjs +47 -45
  137. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -1
  138. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +25 -25
  139. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  140. package/fesm2015/bravobit-bb-foundation-dialog.mjs +54 -81
  141. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -1
  142. package/fesm2015/bravobit-bb-foundation-elements.mjs +126 -324
  143. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
  144. package/fesm2015/bravobit-bb-foundation-http.mjs +14 -14
  145. package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -1
  146. package/fesm2015/bravobit-bb-foundation-localize.mjs +360 -215
  147. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -1
  148. package/fesm2015/bravobit-bb-foundation-masking.mjs +16 -16
  149. package/fesm2015/bravobit-bb-foundation-notifications.mjs +31 -52
  150. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -1
  151. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +10 -10
  152. package/fesm2015/bravobit-bb-foundation-storage.mjs +6 -6
  153. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -1
  154. package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
  155. package/fesm2015/bravobit-bb-foundation-theming.mjs +7 -7
  156. package/fesm2015/bravobit-bb-foundation-utils.mjs +246 -0
  157. package/fesm2015/bravobit-bb-foundation-utils.mjs.map +1 -0
  158. package/fesm2015/bravobit-bb-foundation.mjs +21 -21
  159. package/fesm2020/bravobit-bb-foundation-auth.mjs +28 -28
  160. package/fesm2020/bravobit-bb-foundation-collections.mjs +23 -23
  161. package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -1
  162. package/fesm2020/bravobit-bb-foundation-controls.mjs +47 -45
  163. package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -1
  164. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +25 -25
  165. package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  166. package/fesm2020/bravobit-bb-foundation-dialog.mjs +53 -79
  167. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -1
  168. package/fesm2020/bravobit-bb-foundation-elements.mjs +124 -322
  169. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
  170. package/fesm2020/bravobit-bb-foundation-http.mjs +14 -14
  171. package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -1
  172. package/fesm2020/bravobit-bb-foundation-localize.mjs +342 -208
  173. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -1
  174. package/fesm2020/bravobit-bb-foundation-masking.mjs +16 -16
  175. package/fesm2020/bravobit-bb-foundation-notifications.mjs +31 -52
  176. package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -1
  177. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +10 -10
  178. package/fesm2020/bravobit-bb-foundation-storage.mjs +6 -6
  179. package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -1
  180. package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
  181. package/fesm2020/bravobit-bb-foundation-theming.mjs +7 -7
  182. package/fesm2020/bravobit-bb-foundation-utils.mjs +244 -0
  183. package/fesm2020/bravobit-bb-foundation-utils.mjs.map +1 -0
  184. package/fesm2020/bravobit-bb-foundation.mjs +21 -21
  185. package/localize/lib/dictionary/dictionary.class.d.ts +28 -0
  186. package/localize/lib/dictionary/dictionary.context.d.ts +7 -0
  187. package/localize/lib/dictionary/dictionary.data.d.ts +7 -0
  188. package/localize/lib/interfaces/config.interfaces.d.ts +4 -6
  189. package/localize/lib/interfaces/options.interfaces.d.ts +1 -0
  190. package/localize/lib/interfaces/transforms.interfaces.d.ts +3 -0
  191. package/localize/lib/localize.module.d.ts +4 -4
  192. package/localize/lib/localize.pipe.d.ts +1 -1
  193. package/localize/lib/localize.service.d.ts +25 -21
  194. package/localize/lib/transforms/abstract.transform.d.ts +13 -0
  195. package/localize/lib/transforms/interpolate.transform.d.ts +14 -0
  196. package/localize/lib/transforms/reference.transform.d.ts +10 -0
  197. package/localize/public_api.d.ts +7 -1
  198. package/notifications/lib/notifications.service.d.ts +6 -7
  199. package/package.json +12 -4
  200. package/utils/index.d.ts +5 -0
  201. package/{elements → utils}/lib/directives/autosize.directive.d.ts +0 -0
  202. package/{elements → utils}/lib/directives/focus-trap.directive.d.ts +0 -0
  203. package/{elements → utils}/lib/directives/focus.directive.d.ts +0 -0
  204. package/{elements → utils}/lib/directives/template.directive.d.ts +1 -0
  205. package/utils/lib/utils.module.d.ts +10 -0
  206. package/utils/public_api.d.ts +5 -0
  207. package/dialog/lib/dialog.injector.d.ts +0 -8
  208. package/esm2020/dialog/lib/dialog.injector.mjs +0 -18
  209. package/esm2020/elements/lib/directives/autosize.directive.mjs +0 -72
  210. package/esm2020/elements/lib/directives/focus-trap.directive.mjs +0 -77
  211. package/esm2020/elements/lib/directives/focus.directive.mjs +0 -37
  212. package/esm2020/elements/lib/directives/template.directive.mjs +0 -28
  213. package/esm2020/localize/lib/localize.dictionary.mjs +0 -26
  214. package/esm2020/localize/lib/views/localize-template-or-string.directive.mjs +0 -28
  215. package/esm2020/notifications/lib/notifications.injector.mjs +0 -18
  216. package/localize/lib/localize.dictionary.d.ts +0 -7
  217. package/localize/lib/views/localize-template-or-string.directive.d.ts +0 -10
  218. package/notifications/lib/notifications.injector.d.ts +0 -8
@@ -6,8 +6,7 @@ export class BbLocalize {
6
6
  this._localize = _localize;
7
7
  }
8
8
  transform(tokenOrParams, args) {
9
- // Validate that the localize service
10
- // exists in the pipe.
9
+ // Validate that the localize service exists in the pipe.
11
10
  if (!this._localize) {
12
11
  return tokenOrParams;
13
12
  }
@@ -19,7 +18,7 @@ export class BbLocalize {
19
18
  }
20
19
  combineParamsWithOptions(tokenOrParams, args) {
21
20
  // Gather the extras.
22
- const extras = args || {};
21
+ const extras = args ?? {};
23
22
  // Loop through all the keys to find the set options.
24
23
  const options = Object.keys(extras).reduce((previous, current) => {
25
24
  if (typeof extras[current] === 'undefined') {
@@ -30,15 +29,15 @@ export class BbLocalize {
30
29
  }, {});
31
30
  // Convert the string token to a params object.
32
31
  const params = typeof tokenOrParams === 'string'
33
- ? { token: tokenOrParams, optional: false, data: {} }
32
+ ? { token: tokenOrParams, optional: false, data: {}, dictionary: null }
34
33
  : tokenOrParams;
35
34
  // Return the combined params and options.
36
35
  return { ...params, ...options };
37
36
  }
38
37
  }
39
- BbLocalize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbLocalize, deps: [{ token: i1.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
40
- BbLocalize.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.1.1", ngImport: i0, type: BbLocalize, name: "bbLocalize" });
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbLocalize, decorators: [{
38
+ BbLocalize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbLocalize, deps: [{ token: i1.Localize, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
39
+ BbLocalize.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: BbLocalize, name: "bbLocalize" });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: BbLocalize, decorators: [{
42
41
  type: Pipe,
43
42
  args: [{
44
43
  name: 'bbLocalize'
@@ -46,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
46
45
  }], ctorParameters: function () { return [{ type: i1.Localize, decorators: [{
47
46
  type: Optional
48
47
  }] }]; } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7O0FBTTVELE1BQU0sT0FBTyxVQUFVO0lBRW5CLFlBQWdDLFNBQW1CO1FBQW5CLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDbkQsQ0FBQztJQUVELFNBQVMsQ0FBQyxhQUFzQyxFQUFFLElBQXNCO1FBQ3BFLHFDQUFxQztRQUNyQyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsT0FBTyxhQUFhLENBQUM7U0FDeEI7UUFFRCxzQ0FBc0M7UUFDdEMsK0JBQStCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbEUsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLHdCQUF3QixDQUFDLGFBQXNDLEVBQUUsSUFBc0I7UUFDM0YscUJBQXFCO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFMUIscURBQXFEO1FBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzdELElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO2dCQUN4QyxPQUFPLFFBQVEsQ0FBQzthQUNuQjtZQUVELFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsK0NBQStDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFDNUMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUM7WUFDbkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUVwQiwwQ0FBMEM7UUFDMUMsT0FBTyxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFDLENBQUM7SUFDbkMsQ0FBQzs7dUdBekNRLFVBQVU7cUdBQVYsVUFBVTsyRkFBVixVQUFVO2tCQUh0QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxZQUFZO2lCQUNyQjs7MEJBR2dCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2FsaXplT3B0aW9ucywgTG9jYWxpemVQYXJhbXN9IGZyb20gJy4vaW50ZXJmYWNlcy9vcHRpb25zLmludGVyZmFjZXMnO1xuaW1wb3J0IHtPcHRpb25hbCwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvY2FsaXplfSBmcm9tICcuL2xvY2FsaXplLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2JiTG9jYWxpemUnXG59KVxuZXhwb3J0IGNsYXNzIEJiTG9jYWxpemUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgX2xvY2FsaXplOiBMb2NhbGl6ZSkge1xuICAgIH1cblxuICAgIHRyYW5zZm9ybSh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcywgYXJncz86IExvY2FsaXplT3B0aW9ucykge1xuICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBsb2NhbGl6ZSBzZXJ2aWNlXG4gICAgICAgIC8vIGV4aXN0cyBpbiB0aGUgcGlwZS5cbiAgICAgICAgaWYgKCF0aGlzLl9sb2NhbGl6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuT3JQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21iaW5lIHRoZSBwYXJhbXMgd2l0aCB0aGUgb3B0aW9uc1xuICAgICAgICAvLyB0byBmb3JtIHRoZSBsb2NhbGl6ZSBwYXJhbXMuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29tYmluZVBhcmFtc1dpdGhPcHRpb25zKHRva2VuT3JQYXJhbXMsIGFyZ3MpO1xuXG4gICAgICAgIC8vIFRyeSB0byBsb2NhbGl6ZSB0aGUgdmFsdWUuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6ZS50cmFuc2xhdGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbWJpbmVQYXJhbXNXaXRoT3B0aW9ucyh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcywgYXJncz86IExvY2FsaXplT3B0aW9ucykge1xuICAgICAgICAvLyBHYXRoZXIgdGhlIGV4dHJhcy5cbiAgICAgICAgY29uc3QgZXh0cmFzID0gYXJncyB8fCB7fTtcblxuICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBrZXlzIHRvIGZpbmQgdGhlIHNldCBvcHRpb25zLlxuICAgICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmtleXMoZXh0cmFzKS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhc1tjdXJyZW50XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXZpb3VzW2N1cnJlbnRdID0gZXh0cmFzW2N1cnJlbnRdO1xuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIHRva2VuIHRvIGEgcGFyYW1zIG9iamVjdC5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gdHlwZW9mIHRva2VuT3JQYXJhbXMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHt0b2tlbjogdG9rZW5PclBhcmFtcywgb3B0aW9uYWw6IGZhbHNlLCBkYXRhOiB7fX1cbiAgICAgICAgICAgIDogdG9rZW5PclBhcmFtcztcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGNvbWJpbmVkIHBhcmFtcyBhbmQgb3B0aW9ucy5cbiAgICAgICAgcmV0dXJuIHsuLi5wYXJhbXMsIC4uLm9wdGlvbnN9O1xuICAgIH1cblxufVxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7O0FBTTVELE1BQU0sT0FBTyxVQUFVO0lBRW5CLFlBQWdDLFNBQW1CO1FBQW5CLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDbkQsQ0FBQztJQUVELFNBQVMsQ0FBQyxhQUFzQyxFQUFFLElBQXNCO1FBQ3BFLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixPQUFPLGFBQWEsQ0FBQztTQUN4QjtRQUVELHNDQUFzQztRQUN0QywrQkFBK0I7UUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVsRSw2QkFBNkI7UUFDN0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sd0JBQXdCLENBQUMsYUFBc0MsRUFBRSxJQUFzQjtRQUMzRixxQkFBcUI7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUUxQixxREFBcUQ7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxXQUFXLEVBQUU7Z0JBQ3hDLE9BQU8sUUFBUSxDQUFDO2FBQ25CO1lBRUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCwrQ0FBK0M7UUFDL0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxhQUFhLEtBQUssUUFBUTtZQUM1QyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDO1lBQ3JFLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFFcEIsMENBQTBDO1FBQzFDLE9BQU8sRUFBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFDO0lBQ25DLENBQUM7O3VHQXhDUSxVQUFVO3FHQUFWLFVBQVU7MkZBQVYsVUFBVTtrQkFIdEIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsWUFBWTtpQkFDckI7OzBCQUdnQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhbGl6ZU9wdGlvbnMsIExvY2FsaXplUGFyYW1zfSBmcm9tICcuL2ludGVyZmFjZXMvb3B0aW9ucy5pbnRlcmZhY2VzJztcbmltcG9ydCB7T3B0aW9uYWwsIFBpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2NhbGl6ZX0gZnJvbSAnLi9sb2NhbGl6ZS5zZXJ2aWNlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdiYkxvY2FsaXplJ1xufSlcbmV4cG9ydCBjbGFzcyBCYkxvY2FsaXplIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIF9sb2NhbGl6ZTogTG9jYWxpemUpIHtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm0odG9rZW5PclBhcmFtczogc3RyaW5nIHwgTG9jYWxpemVQYXJhbXMsIGFyZ3M/OiBMb2NhbGl6ZU9wdGlvbnMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgbG9jYWxpemUgc2VydmljZSBleGlzdHMgaW4gdGhlIHBpcGUuXG4gICAgICAgIGlmICghdGhpcy5fbG9jYWxpemUpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbk9yUGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tYmluZSB0aGUgcGFyYW1zIHdpdGggdGhlIG9wdGlvbnNcbiAgICAgICAgLy8gdG8gZm9ybSB0aGUgbG9jYWxpemUgcGFyYW1zLlxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmNvbWJpbmVQYXJhbXNXaXRoT3B0aW9ucyh0b2tlbk9yUGFyYW1zLCBhcmdzKTtcblxuICAgICAgICAvLyBUcnkgdG8gbG9jYWxpemUgdGhlIHZhbHVlLlxuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemUudHJhbnNsYXRlKHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21iaW5lUGFyYW1zV2l0aE9wdGlvbnModG9rZW5PclBhcmFtczogc3RyaW5nIHwgTG9jYWxpemVQYXJhbXMsIGFyZ3M/OiBMb2NhbGl6ZU9wdGlvbnMpIHtcbiAgICAgICAgLy8gR2F0aGVyIHRoZSBleHRyYXMuXG4gICAgICAgIGNvbnN0IGV4dHJhcyA9IGFyZ3MgPz8ge307XG5cbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUga2V5cyB0byBmaW5kIHRoZSBzZXQgb3B0aW9ucy5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5rZXlzKGV4dHJhcykucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYXNbY3VycmVudF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmV2aW91c1tjdXJyZW50XSA9IGV4dHJhc1tjdXJyZW50XTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyB0b2tlbiB0byBhIHBhcmFtcyBvYmplY3QuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHR5cGVvZiB0b2tlbk9yUGFyYW1zID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB7dG9rZW46IHRva2VuT3JQYXJhbXMsIG9wdGlvbmFsOiBmYWxzZSwgZGF0YToge30sIGRpY3Rpb25hcnk6IG51bGx9XG4gICAgICAgICAgICA6IHRva2VuT3JQYXJhbXM7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBjb21iaW5lZCBwYXJhbXMgYW5kIG9wdGlvbnMuXG4gICAgICAgIHJldHVybiB7Li4ucGFyYW1zLCAuLi5vcHRpb25zfTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -1,169 +1,111 @@
1
- import { LOCALIZE_FUNCTION } from './interfaces/functions.interfaces';
1
+ import { LOCALIZE_TRANSFORM } from './interfaces/transforms.interfaces';
2
+ import { LocalizeDictionary } from './dictionary/dictionary.class';
2
3
  import { Inject, Injectable, Optional } from '@angular/core';
4
+ import { WINDOW } from '@bravobit/bb-foundation';
3
5
  import { DOCUMENT } from '@angular/common';
4
6
  import * as i0 from "@angular/core";
5
7
  import * as i1 from "@bravobit/bb-foundation/storage";
6
8
  import * as i2 from "@bravobit/bb-foundation";
7
- import * as i3 from "./interfaces/config.interfaces";
8
- import * as i4 from "./handlers/missing.handler";
9
+ import * as i3 from "./handlers/missing.handler";
10
+ import * as i4 from "./interfaces/config.interfaces";
9
11
  export class Localize {
10
- constructor(_storage, _languages, _config, _missingHandler, _document, _functions) {
12
+ constructor(_storage, _languages, _missingHandler, _config, _window, _document, _transforms) {
11
13
  this._storage = _storage;
12
14
  this._languages = _languages;
13
- this._config = _config;
14
15
  this._missingHandler = _missingHandler;
16
+ this._config = _config;
17
+ this._window = _window;
15
18
  this._document = _document;
16
- this._functions = _functions;
17
- this._storageToken = 'bb-language-dictionary-id';
18
- // Current language dictionary.
19
- this._currentLanguage = null;
20
- this._currentDictionary = null;
19
+ this._transforms = _transforms;
20
+ // Readonly data.
21
+ this._storageToken = this._config?.storageToken ?? 'bb-language-dictionary-id';
22
+ this._availableLanguages = this?._config?.languages ?? [];
23
+ this._bestMatchingLanguage = this.retrieveBestMatchingLanguage();
24
+ this._loadedDictionaries = new Map();
25
+ // Current dictionary.
26
+ this._current = null;
21
27
  this.convertToParams = (tokenOrParams) => {
22
28
  if (typeof tokenOrParams !== 'string') {
23
29
  // Destruct the params from the object.
24
- const { token, optional, data } = tokenOrParams;
30
+ const { token, optional, dictionary, data } = tokenOrParams;
25
31
  // Make sure all parameters are valid
26
32
  // by type safe adding them.
27
- return { token: token, optional: optional ?? false, data: data ?? {} };
33
+ return { token: token, optional: optional ?? false, dictionary: dictionary ?? null, data: data ?? {} };
28
34
  }
29
35
  // If the parameter is a string fill in the blanks.
30
- return { token: tokenOrParams, optional: false, data: {} };
36
+ return { token: tokenOrParams, optional: false, dictionary: null, data: {} };
31
37
  };
32
- this.getMatches = (value, substitutions) => {
33
- // Get the matching substitutions.
34
- const { start, end } = substitutions;
35
- // Compose a regex that will find the matches.
36
- const regex = new RegExp(`${start}([^${end}]+)${end}`, 'g');
37
- // Execute the regex to find matches.
38
- let match = regex.exec(value);
39
- const matches = [];
40
- while (match !== null) {
41
- matches.push({ match: match[0], token: match[1] });
42
- match = regex.exec(value);
43
- }
44
- // Return the processed value.
45
- return matches.filter(item => !!item);
46
- };
47
- // Check if at least one language was passed in the config.
48
- this._availableLanguages = this._config.languages;
49
- if (this._availableLanguages.length < 1) {
50
- throw new Error('Localize: one or more languages should be supplied.');
51
- }
52
- // Gather all the localize functions.
53
- this._functionMiddleware = this._functions.reduce((previous, current) => {
54
- previous[current.keyword()] = current;
55
- return previous;
56
- }, {});
57
- // Save the best matching current dictionary.
58
- this._bestMatchingLanguage = this.retrieveBestMatchingLanguage();
59
38
  this.renderDocumentLanguage();
60
39
  }
61
40
  get languages() {
62
41
  return this._availableLanguages ?? [];
63
42
  }
64
43
  get current() {
65
- return this._currentLanguage;
66
- }
67
- async set(language, cache = true) {
68
- // Await the language data and set the current
69
- // dictionary to the loaded data.
70
- this._currentLanguage = language ?? this._availableLanguages?.[0];
71
- if (this._currentLanguage) {
72
- this._currentDictionary = await this._currentLanguage.data();
44
+ return this._current;
45
+ }
46
+ async load(id) {
47
+ if (id === null || id === undefined) {
48
+ throw new Error(`Cannot load language with id: "${id}".`);
49
+ }
50
+ if (this._loadedDictionaries.has(id)) {
51
+ return this._loadedDictionaries.get(id);
52
+ }
53
+ const language = this.languages?.find(language => language?.id === id);
54
+ if (!language || !language?.data) {
55
+ console?.warn?.(`No language was found with id: "${id}"; Defaulting to first available language.`);
56
+ const languageId = this.languages?.[0]?.id ?? null;
57
+ return this.load(languageId);
73
58
  }
74
- // Save the selected language in the storage.
59
+ const dictionaryDataValues = await language?.data?.();
60
+ const dictionary = this.createDictionary(dictionaryDataValues, language);
61
+ this._loadedDictionaries.set(id, dictionary);
62
+ return dictionary;
63
+ }
64
+ async switch(id, options) {
65
+ this._current = await this.load(id);
66
+ const cache = options?.cache ?? true;
75
67
  if (cache) {
76
- this._storage.cookie.set(this._storageToken, this._currentLanguage?.id, {});
68
+ this._storage.cookie.set(this._storageToken, this._current?.id, {});
69
+ }
70
+ const reload = options?.reload ?? false;
71
+ if (reload) {
72
+ this._window?.location?.reload?.();
77
73
  }
74
+ return this._current;
75
+ }
76
+ select(id) {
77
+ if (!this._loadedDictionaries.has(id)) {
78
+ throw new Error(`Dictionary with id: "${id}" not loaded; Load dictionary first before using .select(:id).`);
79
+ }
80
+ return this._loadedDictionaries.get(id);
78
81
  }
79
82
  initialize() {
80
- return async () => this.set(this._bestMatchingLanguage, false);
83
+ return async () => this.switch(this._bestMatchingLanguage?.id, { reload: false, cache: false });
81
84
  }
82
85
  clear() {
83
86
  this._storage.cookie.remove(this._storageToken);
84
87
  }
88
+ transform(value, data = {}) {
89
+ return (this._transforms ?? []).reduce((previous, current) => {
90
+ return current.execute(previous, data, this);
91
+ }, value);
92
+ }
85
93
  translate(tokenOrParams) {
86
94
  // 1. Convert to the params.
87
95
  const params = this.convertToParams(tokenOrParams);
88
96
  // 2. Try to find the translation in the dictionary.
89
- const searchResult = this._currentDictionary.get(params?.token);
97
+ const dictionary = this.getDictionary(params?.dictionary);
98
+ const searchResult = !!dictionary ? dictionary.get(params?.token) : null;
90
99
  // 3. Verify the translation was found.
91
100
  if (!searchResult) {
92
101
  return this._missingHandler.handle(params);
93
102
  }
94
- // 4. Find references in the translation that need to be translated as well.
95
- const processResult = this.findReferencesInTranslation(searchResult);
96
- // 5. Parse the interpolation data.
97
- return this.parseInterpolationData(processResult, params?.data);
98
- }
99
- parseInterpolationData(value, data) {
100
- // Get the interpolation substitutions.
101
- const substitutions = this.getSubstitutions('interpolation', ['{{', '}}']);
102
- // Get all matches in the value.
103
- const matches = this.getMatches(value, substitutions);
104
- // Replace all matches with the parsed value.
105
- return matches.reduce((previous, current) => {
106
- // Try to parse the token.
107
- const interpolatedToken = this.interpolateFunctionData(current?.token, data);
108
- // Replace the match with the parsed token.
109
- return previous.replace(current?.match, interpolatedToken);
110
- }, `${value}`);
111
- }
112
- interpolateFunctionData(value, interpolationData) {
113
- // Get the token and the methods by splitting
114
- // on the pipe symbol.
115
- const [token, ...methods] = value.split('|').map(item => item.trim());
116
- // Get the value for the token from
117
- // the interpolation data.
118
- const interpolationValue = interpolationData?.[token] ?? token;
119
- // Loop through all the middleware methods and try to
120
- // conform the string to the given parameters.
121
- return methods.reduce((string, middlewareName) => {
122
- // Try to retrieve the middleware from the collection.
123
- const middleware = this._functionMiddleware[middlewareName];
124
- // If the middleware is missing return an error
125
- // so that the user knows it was not found.
126
- if (!middleware) {
127
- return string;
128
- }
129
- // Execute the middleware function with the string.
130
- return middleware.transform(string, this.current?.locale);
131
- }, `${interpolationValue}`);
132
- }
133
- findReferencesInTranslation(value) {
134
- // Get the reference substitutions.
135
- const substitutions = this.getSubstitutions('references', ['#(', ')']);
136
- // Get all matches in the value.
137
- const matches = this.getMatches(value, substitutions);
138
- // Replace all matches with the translated value.
139
- return matches.reduce((previous, current) => {
140
- // Try to translate the token.
141
- const translatedToken = this.translate(current?.token);
142
- // Replace the match with the translated token.
143
- return previous.replace(current?.match, translatedToken);
144
- }, value);
145
- }
146
- getSubstitutions(type, defaultValue) {
147
- // Get the substitutions.
148
- const substitutions = this._config?.substitutions?.[type] ?? null;
149
- const value = (!substitutions || substitutions.length !== 2)
150
- ? defaultValue
151
- : substitutions;
152
- // Escape both substitutions so that they
153
- // can be used.
154
- const escape = /[.*+?^${}()|[\]\\]/g;
155
- const start = value[0].replace(escape, '\\$&');
156
- const end = value[1].replace(escape, '\\$&');
157
- // Return the substitutions.
158
- return { start, end };
103
+ return this.transform(searchResult, params?.data);
159
104
  }
160
105
  retrieveBestMatchingLanguage() {
161
- // Get the language based on storage.
162
- const storageLanguage = this.getLanguageFromStorage();
163
- // Get the language based on the supported languages of the browser.
164
- const browserLanguage = this.getBestBrowserMatchLanguage();
165
- // Return the best matching language.
166
- return storageLanguage ?? browserLanguage ?? this._availableLanguages?.[0];
106
+ return this.getLanguageFromStorage()
107
+ ?? this.getBestBrowserMatchLanguage()
108
+ ?? this._availableLanguages?.[0];
167
109
  }
168
110
  getLanguageFromStorage() {
169
111
  // Get id from the storage.
@@ -179,6 +121,15 @@ export class Localize {
179
121
  return this._availableLanguages.find(item => item?.supported?.includes(languageCode));
180
122
  }).filter(item => !!item).find((_, index) => index === 0);
181
123
  }
124
+ createDictionary(data, language) {
125
+ return new LocalizeDictionary(language?.id, language?.locale, language?.supported, data?.data, this);
126
+ }
127
+ getDictionary(id) {
128
+ if (id === null || id === undefined) {
129
+ return this._current;
130
+ }
131
+ return this.select(id);
132
+ }
182
133
  renderDocumentLanguage() {
183
134
  const element = this._document?.documentElement;
184
135
  if (!element) {
@@ -187,13 +138,18 @@ export class Localize {
187
138
  element.lang = this._bestMatchingLanguage?.supported?.[0] ?? this._bestMatchingLanguage?.locale;
188
139
  }
189
140
  }
190
- Localize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: Localize, deps: [{ token: i1.Storage }, { token: i2.Languages }, { token: i3.LocalizeConfig, optional: true }, { token: i4.LocalizeMissingHandler }, { token: DOCUMENT, optional: true }, { token: LOCALIZE_FUNCTION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
191
- Localize.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: Localize });
192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: Localize, decorators: [{
141
+ Localize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Localize, deps: [{ token: i1.Storage }, { token: i2.Languages }, { token: i3.LocalizeMissingHandler }, { token: i4.LocalizeConfig, optional: true }, { token: WINDOW, optional: true }, { token: DOCUMENT, optional: true }, { token: LOCALIZE_TRANSFORM, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
142
+ Localize.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Localize });
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: Localize, decorators: [{
193
144
  type: Injectable
194
- }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.Languages }, { type: i3.LocalizeConfig, decorators: [{
145
+ }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.Languages }, { type: i3.LocalizeMissingHandler }, { type: i4.LocalizeConfig, decorators: [{
195
146
  type: Optional
196
- }] }, { type: i4.LocalizeMissingHandler }, { type: Document, decorators: [{
147
+ }] }, { type: Window, decorators: [{
148
+ type: Optional
149
+ }, {
150
+ type: Inject,
151
+ args: [WINDOW]
152
+ }] }, { type: Document, decorators: [{
197
153
  type: Optional
198
154
  }, {
199
155
  type: Inject,
@@ -202,6 +158,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
202
158
  type: Optional
203
159
  }, {
204
160
  type: Inject,
205
- args: [LOCALIZE_FUNCTION]
161
+ args: [LOCALIZE_TRANSFORM]
206
162
  }] }]; } });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBd0MsTUFBTSxtQ0FBbUMsQ0FBQztBQUkzRyxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJM0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFHekMsTUFBTSxPQUFPLFFBQVE7SUFhakIsWUFBb0IsUUFBaUIsRUFDakIsVUFBcUIsRUFDVCxPQUF1QixFQUNuQyxlQUF1QyxFQUNULFNBQW9CLEVBQ1gsVUFBK0I7UUFMdEUsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ1QsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDbkMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ1QsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNYLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBWHpFLGtCQUFhLEdBQVcsMkJBQTJCLENBQUM7UUFFckUsK0JBQStCO1FBQ3ZCLHFCQUFnQixHQUFrQyxJQUFJLENBQUM7UUFDdkQsdUJBQWtCLEdBQThCLElBQUksQ0FBQztRQXFMckQsb0JBQWUsR0FBRyxDQUFDLGFBQXNDLEVBQUUsRUFBRTtZQUNqRSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtnQkFDbkMsdUNBQXVDO2dCQUN2QyxNQUFNLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsR0FBRyxhQUFhLENBQUM7Z0JBRTlDLHFDQUFxQztnQkFDckMsNEJBQTRCO2dCQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVB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SSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBZ0JPLHNCQUFzQjtRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTztTQUNWO1FBRUQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUNwRyxDQUFDOztxR0FyTlEsUUFBUSxzSkFpQmUsUUFBUSw2QkFDUixpQkFBaUI7eUdBbEJ4QyxRQUFROzJGQUFSLFFBQVE7a0JBRHBCLFVBQVU7OzBCQWdCTSxRQUFRO21FQUV5QyxRQUFROzBCQUF6RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUMzQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TE9DQUxJWkVfRlVOQ1RJT04sIExvY2FsaXplRnVuY3Rpb24sIExvY2FsaXplRnVuY3Rpb25NYXB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplQ29uZmlnLCBMb2NhbGl6ZUNvbmZpZ0xhbmd1YWdlfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZXMnO1xuaW1wb3J0IHtMb2NhbGl6ZU9wdGlvbnNEYXRhLCBMb2NhbGl6ZVBhcmFtc30gZnJvbSAnLi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplTWlzc2luZ0hhbmRsZXJ9IGZyb20gJy4vaGFuZGxlcnMvbWlzc2luZy5oYW5kbGVyJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvY2FsaXplRGljdGlvbmFyeX0gZnJvbSAnLi9sb2NhbGl6ZS5kaWN0aW9uYXJ5JztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vc3RvcmFnZSc7XG5pbXBvcnQge0xhbmd1YWdlc30gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24nO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsaXplIHtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMb2NhbGl6ZUNvbmZpZ0xhbmd1YWdlW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYmVzdE1hdGNoaW5nTGFuZ3VhZ2U6IExvY2FsaXplQ29uZmlnTGFuZ3VhZ2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mdW5jdGlvbk1pZGRsZXdhcmU6IExvY2FsaXplRnVuY3Rpb25NYXA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZVRva2VuOiBzdHJpbmcgPSAnYmItbGFuZ3VhZ2UtZGljdGlvbmFyeS1pZCc7XG5cbiAgICAvLyBDdXJyZW50IGxhbmd1YWdlIGRpY3Rpb25hcnkuXG4gICAgcHJpdmF0ZSBfY3VycmVudExhbmd1YWdlOiBMb2NhbGl6ZUNvbmZpZ0xhbmd1YWdlIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfY3VycmVudERpY3Rpb25hcnk6IExvY2FsaXplRGljdGlvbmFyeSB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9sYW5ndWFnZXM6IExhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb25maWc6IExvY2FsaXplQ29uZmlnLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX21pc3NpbmdIYW5kbGVyOiBMb2NhbGl6ZU1pc3NpbmdIYW5kbGVyLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50PzogRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChMT0NBTElaRV9GVU5DVElPTikgcHJpdmF0ZSBfZnVuY3Rpb25zPzogTG9jYWxpemVGdW5jdGlvbltdKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGF0IGxlYXN0IG9uZSBsYW5ndWFnZSB3YXMgcGFzc2VkIGluIHRoZSBjb25maWcuXG4gICAgICAgIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcyA9IHRoaXMuX2NvbmZpZy5sYW5ndWFnZXM7XG4gICAgICAgIGlmICh0aGlzLl9hdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGl6ZTogb25lIG9yIG1vcmUgbGFuZ3VhZ2VzIHNob3VsZCBiZSBzdXBwbGllZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdhdGhlciBhbGwgdGhlIGxvY2FsaXplIGZ1bmN0aW9ucy5cbiAgICAgICAgdGhpcy5fZnVuY3Rpb25NaWRkbGV3YXJlID0gdGhpcy5fZnVuY3Rpb25zLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIHByZXZpb3VzW2N1cnJlbnQua2V5d29yZCgpXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICAvLyBTYXZlIHRoZSBiZXN0IG1hdGNoaW5nIGN1cnJlbnQgZGljdGlvbmFyeS5cbiAgICAgICAgdGhpcy5fYmVzdE1hdGNoaW5nTGFuZ3VhZ2UgPSB0aGlzLnJldHJpZXZlQmVzdE1hdGNoaW5nTGFuZ3VhZ2UoKTtcblxuICAgICAgICB0aGlzLnJlbmRlckRvY3VtZW50TGFuZ3VhZ2UoKTtcbiAgICB9XG5cbiAgICBnZXQgbGFuZ3VhZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXZhaWxhYmxlTGFuZ3VhZ2VzID8/IFtdO1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudExhbmd1YWdlO1xuICAgIH1cblxuICAgIGFzeW5jIHNldChsYW5ndWFnZTogTG9jYWxpemVDb25maWdMYW5ndWFnZSwgY2FjaGU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIC8vIEF3YWl0IHRoZSBsYW5ndWFnZSBkYXRhIGFuZCBzZXQgdGhlIGN1cnJlbnRcbiAgICAgICAgLy8gZGljdGlvbmFyeSB0byB0aGUgbG9hZGVkIGRhdGEuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRMYW5ndWFnZSA9IGxhbmd1YWdlID8/IHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcz8uWzBdO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudExhbmd1YWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50RGljdGlvbmFyeSA9IGF3YWl0IHRoaXMuX2N1cnJlbnRMYW5ndWFnZS5kYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3RlZCBsYW5ndWFnZSBpbiB0aGUgc3RvcmFnZS5cbiAgICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLmNvb2tpZS5zZXQ8c3RyaW5nPih0aGlzLl9zdG9yYWdlVG9rZW4sIHRoaXMuX2N1cnJlbnRMYW5ndWFnZT8uaWQsIHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB0aGlzLnNldCh0aGlzLl9iZXN0TWF0Y2hpbmdMYW5ndWFnZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLl9zdG9yYWdlLmNvb2tpZS5yZW1vdmUodGhpcy5fc3RvcmFnZVRva2VuKTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGUodG9rZW5PclBhcmFtczogc3RyaW5nIHwgTG9jYWxpemVQYXJhbXMpIHtcbiAgICAgICAgLy8gMS4gQ29udmVydCB0byB0aGUgcGFyYW1zLlxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmNvbnZlcnRUb1BhcmFtcyh0b2tlbk9yUGFyYW1zKTtcblxuICAgICAgICAvLyAyLiBUcnkgdG8gZmluZCB0aGUgdHJhbnNsYXRpb24gaW4gdGhlIGRpY3Rpb25hcnkuXG4gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IHRoaXMuX2N1cnJlbnREaWN0aW9uYXJ5LmdldChwYXJhbXM/LnRva2VuKTtcblxuICAgICAgICAvLyAzLiBWZXJpZnkgdGhlIHRyYW5zbGF0aW9uIHdhcyBmb3VuZC5cbiAgICAgICAgaWYgKCFzZWFyY2hSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taXNzaW5nSGFuZGxlci5oYW5kbGUocGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuIEZpbmQgcmVmZXJlbmNlcyBpbiB0aGUgdHJhbnNsYXRpb24gdGhhdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQgYXMgd2VsbC5cbiAgICAgICAgY29uc3QgcHJvY2Vzc1Jlc3VsdCA9IHRoaXMuZmluZFJlZmVyZW5jZXNJblRyYW5zbGF0aW9uKHNlYXJjaFJlc3VsdCk7XG5cbiAgICAgICAgLy8gNS4gUGFyc2UgdGhlIGludGVycG9sYXRpb24gZGF0YS5cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VJbnRlcnBvbGF0aW9uRGF0YShwcm9jZXNzUmVzdWx0LCBwYXJhbXM/LmRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VJbnRlcnBvbGF0aW9uRGF0YSh2YWx1ZTogc3RyaW5nLCBkYXRhOiBMb2NhbGl6ZU9wdGlvbnNEYXRhKSB7XG4gICAgICAgIC8vIEdldCB0aGUgaW50ZXJwb2xhdGlvbiBzdWJzdGl0dXRpb25zLlxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCdpbnRlcnBvbGF0aW9uJywgWyd7eycsICd9fSddKTtcblxuICAgICAgICAvLyBHZXQgYWxsIG1hdGNoZXMgaW4gdGhlIHZhbHVlLlxuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5nZXRNYXRjaGVzKHZhbHVlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAvLyBSZXBsYWNlIGFsbCBtYXRjaGVzIHdpdGggdGhlIHBhcnNlZCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIG1hdGNoZXMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSB0b2tlbi5cbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRlZFRva2VuID0gdGhpcy5pbnRlcnBvbGF0ZUZ1bmN0aW9uRGF0YShjdXJyZW50Py50b2tlbiwgZGF0YSk7XG5cbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG1hdGNoIHdpdGggdGhlIHBhcnNlZCB0b2tlbi5cbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cy5yZXBsYWNlKGN1cnJlbnQ/Lm1hdGNoLCBpbnRlcnBvbGF0ZWRUb2tlbik7XG4gICAgICAgIH0sIGAke3ZhbHVlfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW50ZXJwb2xhdGVGdW5jdGlvbkRhdGEodmFsdWU6IHN0cmluZywgaW50ZXJwb2xhdGlvbkRhdGE6IExvY2FsaXplT3B0aW9uc0RhdGEpIHtcbiAgICAgICAgLy8gR2V0IHRoZSB0b2tlbiBhbmQgdGhlIG1ldGhvZHMgYnkgc3BsaXR0aW5nXG4gICAgICAgIC8vIG9uIHRoZSBwaXBlIHN5bWJvbC5cbiAgICAgICAgY29uc3QgW3Rva2VuLCAuLi5tZXRob2RzXSA9IHZhbHVlLnNwbGl0KCd8JykubWFwKGl0ZW0gPT4gaXRlbS50cmltKCkpO1xuXG4gICAgICAgIC8vIEdldCB0aGUgdmFsdWUgZm9yIHRoZSB0b2tlbiBmcm9tXG4gICAgICAgIC8vIHRoZSBpbnRlcnBvbGF0aW9uIGRhdGEuXG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb25WYWx1ZSA9IGludGVycG9sYXRpb25EYXRhPy5bdG9rZW5dID8/IHRva2VuO1xuXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIG1pZGRsZXdhcmUgbWV0aG9kcyBhbmQgdHJ5IHRvXG4gICAgICAgIC8vIGNvbmZvcm0gdGhlIHN0cmluZyB0byB0aGUgZ2l2ZW4gcGFyYW1ldGVycy5cbiAgICAgICAgcmV0dXJuIG1ldGhvZHMucmVkdWNlKChzdHJpbmcsIG1pZGRsZXdhcmVOYW1lKSA9PiB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gcmV0cmlldmUgdGhlIG1pZGRsZXdhcmUgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IG1pZGRsZXdhcmUgPSB0aGlzLl9mdW5jdGlvbk1pZGRsZXdhcmVbbWlkZGxld2FyZU5hbWVdO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbWlkZGxld2FyZSBpcyBtaXNzaW5nIHJldHVybiBhbiBlcnJvclxuICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgdXNlciBrbm93cyBpdCB3YXMgbm90IGZvdW5kLlxuICAgICAgICAgICAgaWYgKCFtaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgbWlkZGxld2FyZSBmdW5jdGlvbiB3aXRoIHRoZSBzdHJpbmcuXG4gICAgICAgICAgICByZXR1cm4gbWlkZGxld2FyZS50cmFuc2Zvcm0oc3RyaW5nLCB0aGlzLmN1cnJlbnQ/LmxvY2FsZSk7XG4gICAgICAgIH0sIGAke2ludGVycG9sYXRpb25WYWx1ZX1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRSZWZlcmVuY2VzSW5UcmFuc2xhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIEdldCB0aGUgcmVmZXJlbmNlIHN1YnN0aXR1dGlvbnMuXG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoJ3JlZmVyZW5jZXMnLCBbJyMoJywgJyknXSk7XG5cbiAgICAgICAgLy8gR2V0IGFsbCBtYXRjaGVzIGluIHRoZSB2YWx1ZS5cbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuZ2V0TWF0Y2hlcyh2YWx1ZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBhbGwgbWF0Y2hlcyB3aXRoIHRoZSB0cmFuc2xhdGVkIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2hlcy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gdHJhbnNsYXRlIHRoZSB0b2tlbi5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRUb2tlbiA9IHRoaXMudHJhbnNsYXRlKGN1cnJlbnQ/LnRva2VuKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgbWF0Y2ggd2l0aCB0aGUgdHJhbnNsYXRlZCB0b2tlbi5cbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cy5yZXBsYWNlKGN1cnJlbnQ/Lm1hdGNoLCB0cmFuc2xhdGVkVG9rZW4pO1xuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzdGl0dXRpb25zKHR5cGU6ICdyZWZlcmVuY2VzJyB8ICdpbnRlcnBvbGF0aW9uJywgZGVmYXVsdFZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICAvLyBHZXQgdGhlIHN1YnN0aXR1dGlvbnMuXG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLl9jb25maWc/LnN1YnN0aXR1dGlvbnM/Llt0eXBlXSA/PyBudWxsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9ICghc3Vic3RpdHV0aW9ucyB8fCBzdWJzdGl0dXRpb25zLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICA6IHN1YnN0aXR1dGlvbnM7XG5cbiAgICAgICAgLy8gRXNjYXBlIGJvdGggc3Vic3RpdHV0aW9ucyBzbyB0aGF0IHRoZXlcbiAgICAgICAgLy8gY2FuIGJlIHVzZWQuXG4gICAgICAgIGNvbnN0IGVzY2FwZSA9IC9bLiorP14ke30oKXxbXFxdXFxcXF0vZztcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB2YWx1ZVswXS5yZXBsYWNlKGVzY2FwZSwgJ1xcXFwkJicpO1xuICAgICAgICBjb25zdCBlbmQgPSB2YWx1ZVsxXS5yZXBsYWNlKGVzY2FwZSwgJ1xcXFwkJicpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgc3Vic3RpdHV0aW9ucy5cbiAgICAgICAgcmV0dXJuIHtzdGFydCwgZW5kfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJldHJpZXZlQmVzdE1hdGNoaW5nTGFuZ3VhZ2UoKSB7XG4gICAgICAgIC8vIEdldCB0aGUgbGFuZ3VhZ2UgYmFzZWQgb24gc3RvcmFnZS5cbiAgICAgICAgY29uc3Qgc3RvcmFnZUxhbmd1YWdlID0gdGhpcy5nZXRMYW5ndWFnZUZyb21TdG9yYWdlKCk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgc3VwcG9ydGVkIGxhbmd1YWdlcyBvZiB0aGUgYnJvd3Nlci5cbiAgICAgICAgY29uc3QgYnJvd3Nlckxhbmd1YWdlID0gdGhpcy5nZXRCZXN0QnJvd3Nlck1hdGNoTGFuZ3VhZ2UoKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGJlc3QgbWF0Y2hpbmcgbGFuZ3VhZ2UuXG4gICAgICAgIHJldHVybiBzdG9yYWdlTGFuZ3VhZ2UgPz8gYnJvd3Nlckxhbmd1YWdlID8/IHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcz8uWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFuZ3VhZ2VGcm9tU3RvcmFnZSgpIHtcbiAgICAgICAgLy8gR2V0IGlkIGZyb20gdGhlIHN0b3JhZ2UuXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fc3RvcmFnZS5jb29raWUuZ2V0PHN0cmluZz4odGhpcy5fc3RvcmFnZVRva2VuKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGxhbmd1YWdlIGJhc2VkIG9uIHRoZSBzdG9yYWdlIGlkLlxuICAgICAgICByZXR1cm4gdGhpcy5fYXZhaWxhYmxlTGFuZ3VhZ2VzLmZpbmQoaXRlbSA9PiBpdGVtPy5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmVzdEJyb3dzZXJNYXRjaExhbmd1YWdlKCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIGJyb3dzZXIgbGFuZ3VhZ2VzIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIGJlc3QgbWF0Y2hpbmcgbGFuZ3VhZ2UuXG4gICAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZXMuYWxsLm1hcCgoe2NvZGUsIHJlZ2lvbn0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlQ29kZSA9IFtjb2RlLCByZWdpb25dLmZpbHRlcihkYXRhID0+ICEhZGF0YSkuam9pbignLScpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXZhaWxhYmxlTGFuZ3VhZ2VzLmZpbmQoaXRlbSA9PiBpdGVtPy5zdXBwb3J0ZWQ/LmluY2x1ZGVzKGxhbmd1YWdlQ29kZSkpO1xuICAgICAgICB9KS5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pLmZpbmQoKF8sIGluZGV4KSA9PiBpbmRleCA9PT0gMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9QYXJhbXMgPSAodG9rZW5PclBhcmFtczogc3RyaW5nIHwgTG9jYWxpemVQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbk9yUGFyYW1zICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gRGVzdHJ1Y3QgdGhlIHBhcmFtcyBmcm9tIHRoZSBvYmplY3QuXG4gICAgICAgICAgICBjb25zdCB7dG9rZW4sIG9wdGlvbmFsLCBkYXRhfSA9IHRva2VuT3JQYXJhbXM7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhbGwgcGFyYW1ldGVycyBhcmUgdmFsaWRcbiAgICAgICAgICAgIC8vIGJ5IHR5cGUgc2FmZSBhZGRpbmcgdGhlbS5cbiAgICAgICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuLCBvcHRpb25hbDogb3B0aW9uYWwgPz8gZmFsc2UsIGRhdGE6IGRhdGEgPz8ge319O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBpcyBhIHN0cmluZyBmaWxsIGluIHRoZSBibGFua3MuXG4gICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuT3JQYXJhbXMsIG9wdGlvbmFsOiBmYWxzZSwgZGF0YToge319O1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlbmRlckRvY3VtZW50TGFuZ3VhZ2UoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudD8uZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQubGFuZyA9IHRoaXMuX2Jlc3RNYXRjaGluZ0xhbmd1YWdlPy5zdXBwb3J0ZWQ/LlswXSA/PyB0aGlzLl9iZXN0TWF0Y2hpbmdMYW5ndWFnZT8ubG9jYWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWF0Y2hlcyA9ICh2YWx1ZTogc3RyaW5nLCBzdWJzdGl0dXRpb25zOiB7IHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgLy8gR2V0IHRoZSBtYXRjaGluZyBzdWJzdGl0dXRpb25zLlxuICAgICAgICBjb25zdCB7c3RhcnQsIGVuZH0gPSBzdWJzdGl0dXRpb25zO1xuXG4gICAgICAgIC8vIENvbXBvc2UgYSByZWdleCB0aGF0IHdpbGwgZmluZCB0aGUgbWF0Y2hlcy5cbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAke3N0YXJ0fShbXiR7ZW5kfV0rKSR7ZW5kfWAsICdnJyk7XG5cbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgcmVnZXggdG8gZmluZCBtYXRjaGVzLlxuICAgICAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKHttYXRjaDogbWF0Y2hbMF0sIHRva2VuOiBtYXRjaFsxXX0pO1xuICAgICAgICAgICAgbWF0Y2ggPSByZWdleC5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2hlcy5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pO1xuICAgIH07XG5cbn1cbiJdfQ==
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi9sb2NhbGl6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBSXRFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRWpFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQVksTUFBTSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFHekMsTUFBTSxPQUFPLFFBQVE7SUFZakIsWUFBb0IsUUFBaUIsRUFDakIsVUFBcUIsRUFDckIsZUFBdUMsRUFDM0IsT0FBd0IsRUFDUixPQUFnQixFQUNkLFNBQW9CLEVBQ1YsV0FBaUM7UUFOekUsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNSLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ1YsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBaEI3RixpQkFBaUI7UUFDQSxrQkFBYSxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLDJCQUEyQixDQUFDO1FBQ2xGLHdCQUFtQixHQUE2QixJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDL0UsMEJBQXFCLEdBQTJCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBRXBGLHdCQUFtQixHQUFvQyxJ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Q0FBQyxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0lBQ3BHLENBQUM7O3FHQW5KUSxRQUFRLHNKQWdCZSxNQUFNLDZCQUNOLFFBQVEsNkJBQ1Isa0JBQWtCO3lHQWxCekMsUUFBUTsyRkFBUixRQUFRO2tCQURwQixVQUFVOzswQkFnQk0sUUFBUTs4QkFDcUMsTUFBTTswQkFBbkQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxNQUFNOzhCQUN3QixRQUFROzBCQUF6RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUMzQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9jYWxpemVDb25maWcsIExvY2FsaXplQ29uZmlnTGFuZ3VhZ2V9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xPQ0FMSVpFX1RSQU5TRk9STX0gZnJvbSAnLi9pbnRlcmZhY2VzL3RyYW5zZm9ybXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplRGljdGlvbmFyeURhdGF9IGZyb20gJy4vZGljdGlvbmFyeS9kaWN0aW9uYXJ5LmRhdGEnO1xuaW1wb3J0IHtMb2NhbGl6ZVRyYW5zZm9ybX0gZnJvbSAnLi90cmFuc2Zvcm1zL2Fic3RyYWN0LnRyYW5zZm9ybSc7XG5pbXBvcnQge0xvY2FsaXplTWlzc2luZ0hhbmRsZXJ9IGZyb20gJy4vaGFuZGxlcnMvbWlzc2luZy5oYW5kbGVyJztcbmltcG9ydCB7TG9jYWxpemVEaWN0aW9uYXJ5fSBmcm9tICcuL2RpY3Rpb25hcnkvZGljdGlvbmFyeS5jbGFzcyc7XG5pbXBvcnQge0xvY2FsaXplUGFyYW1zfSBmcm9tICcuL2ludGVyZmFjZXMvb3B0aW9ucy5pbnRlcmZhY2VzJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xhbmd1YWdlcywgV0lORE9XfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbic7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsaXplIHtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZVRva2VuOiBzdHJpbmcgPSB0aGlzLl9jb25maWc/LnN0b3JhZ2VUb2tlbiA/PyAnYmItbGFuZ3VhZ2UtZGljdGlvbmFyeS1pZCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMb2NhbGl6ZUNvbmZpZ0xhbmd1YWdlW10gPSB0aGlzPy5fY29uZmlnPy5sYW5ndWFnZXMgPz8gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYmVzdE1hdGNoaW5nTGFuZ3VhZ2U6IExvY2FsaXplQ29uZmlnTGFuZ3VhZ2UgPSB0aGlzLnJldHJpZXZlQmVzdE1hdGNoaW5nTGFuZ3VhZ2UoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvYWRlZERpY3Rpb25hcmllczogTWFwPHN0cmluZywgTG9jYWxpemVEaWN0aW9uYXJ5PiA9IG5ldyBNYXA8c3RyaW5nLCBMb2NhbGl6ZURpY3Rpb25hcnk+KCk7XG5cbiAgICAvLyBDdXJyZW50IGRpY3Rpb25hcnkuXG4gICAgcHJpdmF0ZSBfY3VycmVudDogTG9jYWxpemVEaWN0aW9uYXJ5IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2xhbmd1YWdlczogTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX21pc3NpbmdIYW5kbGVyOiBMb2NhbGl6ZU1pc3NpbmdIYW5kbGVyLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IExvY2FsaXplQ29uZmlnLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIF93aW5kb3c/OiBXaW5kb3csXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ/OiBEb2N1bWVudCxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMSVpFX1RSQU5TRk9STSkgcHJpdmF0ZSBfdHJhbnNmb3Jtcz86IExvY2FsaXplVHJhbnNmb3JtW10pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEb2N1bWVudExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGxhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcyA/PyBbXTtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBsb2FkIGxhbmd1YWdlIHdpdGggaWQ6IFwiJHtpZH1cIi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuaGFzKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZERpY3Rpb25hcmllcy5nZXQoaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmxhbmd1YWdlcz8uZmluZChsYW5ndWFnZSA9PiBsYW5ndWFnZT8uaWQgPT09IGlkKTtcbiAgICAgICAgaWYgKCFsYW5ndWFnZSB8fCAhbGFuZ3VhZ2U/LmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGU/Lndhcm4/LihgTm8gbGFuZ3VhZ2Ugd2FzIGZvdW5kIHdpdGggaWQ6IFwiJHtpZH1cIjsgRGVmYXVsdGluZyB0byBmaXJzdCBhdmFpbGFibGUgbGFuZ3VhZ2UuYCk7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUlkID0gdGhpcy5sYW5ndWFnZXM/LlswXT8uaWQgPz8gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWQobGFuZ3VhZ2VJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5RGF0YVZhbHVlcyA9IGF3YWl0IGxhbmd1YWdlPy5kYXRhPy4oKTtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuY3JlYXRlRGljdGlvbmFyeShkaWN0aW9uYXJ5RGF0YVZhbHVlcywgbGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuc2V0KGlkLCBkaWN0aW9uYXJ5KTtcbiAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3dpdGNoKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGNhY2hlPzogYm9vbGVhbiwgcmVsb2FkPzogYm9vbGVhbiB9KSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnQgPSBhd2FpdCB0aGlzLmxvYWQoaWQpO1xuXG4gICAgICAgIGNvbnN0IGNhY2hlID0gb3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZTtcbiAgICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLmNvb2tpZS5zZXQ8c3RyaW5nPih0aGlzLl9zdG9yYWdlVG9rZW4sIHRoaXMuX2N1cnJlbnQ/LmlkLCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWxvYWQgPSBvcHRpb25zPy5yZWxvYWQgPz8gZmFsc2U7XG4gICAgICAgIGlmIChyZWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvdz8ubG9jYXRpb24/LnJlbG9hZD8uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgICB9XG5cbiAgICBzZWxlY3QoaWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZERpY3Rpb25hcmllcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpY3Rpb25hcnkgd2l0aCBpZDogXCIke2lkfVwiIG5vdCBsb2FkZWQ7IExvYWQgZGljdGlvbmFyeSBmaXJzdCBiZWZvcmUgdXNpbmcgLnNlbGVjdCg6aWQpLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWREaWN0aW9uYXJpZXMuZ2V0KGlkKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4gdGhpcy5zd2l0Y2godGhpcy5fYmVzdE1hdGNoaW5nTGFuZ3VhZ2U/LmlkLCB7cmVsb2FkOiBmYWxzZSwgY2FjaGU6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2UuY29va2llLnJlbW92ZSh0aGlzLl9zdG9yYWdlVG9rZW4pO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBkYXRhOiBMb2NhbGl6ZVBhcmFtc1snZGF0YSddID0ge30pIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl90cmFuc2Zvcm1zID8/IFtdKS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5leGVjdXRlKHByZXZpb3VzLCBkYXRhLCB0aGlzKTtcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRyYW5zbGF0ZSh0b2tlbk9yUGFyYW1zOiBzdHJpbmcgfCBMb2NhbGl6ZVBhcmFtcykge1xuICAgICAgICAvLyAxLiBDb252ZXJ0IHRvIHRoZSBwYXJhbXMuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29udmVydFRvUGFyYW1zKHRva2VuT3JQYXJhbXMpO1xuXG4gICAgICAgIC8vIDIuIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUgZGljdGlvbmFyeS5cbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuZ2V0RGljdGlvbmFyeShwYXJhbXM/LmRpY3Rpb25hcnkpO1xuICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHQgPSAhIWRpY3Rpb25hcnkgPyBkaWN0aW9uYXJ5LmdldChwYXJhbXM/LnRva2VuKSA6IG51bGw7XG5cbiAgICAgICAgLy8gMy4gVmVyaWZ5IHRoZSB0cmFuc2xhdGlvbiB3YXMgZm91bmQuXG4gICAgICAgIGlmICghc2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWlzc2luZ0hhbmRsZXIuaGFuZGxlKHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oc2VhcmNoUmVzdWx0LCBwYXJhbXM/LmRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmV0cmlldmVCZXN0TWF0Y2hpbmdMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tU3RvcmFnZSgpXG4gICAgICAgICAgICA/PyB0aGlzLmdldEJlc3RCcm93c2VyTWF0Y2hMYW5ndWFnZSgpXG4gICAgICAgICAgICA/PyB0aGlzLl9hdmFpbGFibGVMYW5ndWFnZXM/LlswXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhbmd1YWdlRnJvbVN0b3JhZ2UoKSB7XG4gICAgICAgIC8vIEdldCBpZCBmcm9tIHRoZSBzdG9yYWdlLlxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3N0b3JhZ2UuY29va2llLmdldDxzdHJpbmc+KHRoaXMuX3N0b3JhZ2VUb2tlbik7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgc3RvcmFnZSBpZC5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcy5maW5kKGl0ZW0gPT4gaXRlbT8uaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJlc3RCcm93c2VyTWF0Y2hMYW5ndWFnZSgpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBicm93c2VyIGxhbmd1YWdlcyBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyBiZXN0IG1hdGNoaW5nIGxhbmd1YWdlLlxuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VzLmFsbC5tYXAoKHtjb2RlLCByZWdpb259KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSBbY29kZSwgcmVnaW9uXS5maWx0ZXIoZGF0YSA9PiAhIWRhdGEpLmpvaW4oJy0nKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUxhbmd1YWdlcy5maW5kKGl0ZW0gPT4gaXRlbT8uc3VwcG9ydGVkPy5pbmNsdWRlcyhsYW5ndWFnZUNvZGUpKTtcbiAgICAgICAgfSkuZmlsdGVyKGl0ZW0gPT4gISFpdGVtKS5maW5kKChfLCBpbmRleCkgPT4gaW5kZXggPT09IDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGljdGlvbmFyeShkYXRhOiBMb2NhbGl6ZURpY3Rpb25hcnlEYXRhLCBsYW5ndWFnZTogTG9jYWxpemVDb25maWdMYW5ndWFnZSkge1xuICAgICAgICByZXR1cm4gbmV3IExvY2FsaXplRGljdGlvbmFyeShsYW5ndWFnZT8uaWQsIGxhbmd1YWdlPy5sb2NhbGUsIGxhbmd1YWdlPy5zdXBwb3J0ZWQsIGRhdGE/LmRhdGEsIHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGljdGlvbmFyeShpZDogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0KGlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckRvY3VtZW50TGFuZ3VhZ2UoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudD8uZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQubGFuZyA9IHRoaXMuX2Jlc3RNYXRjaGluZ0xhbmd1YWdlPy5zdXBwb3J0ZWQ/LlswXSA/PyB0aGlzLl9iZXN0TWF0Y2hpbmdMYW5ndWFnZT8ubG9jYWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRvUGFyYW1zID0gKHRva2VuT3JQYXJhbXM6IHN0cmluZyB8IExvY2FsaXplUGFyYW1zKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW5PclBhcmFtcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIERlc3RydWN0IHRoZSBwYXJhbXMgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgY29uc3Qge3Rva2VuLCBvcHRpb25hbCwgZGljdGlvbmFyeSwgZGF0YX0gPSB0b2tlbk9yUGFyYW1zO1xuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgYWxsIHBhcmFtZXRlcnMgYXJlIHZhbGlkXG4gICAgICAgICAgICAvLyBieSB0eXBlIHNhZmUgYWRkaW5nIHRoZW0uXG4gICAgICAgICAgICByZXR1cm4ge3Rva2VuOiB0b2tlbiwgb3B0aW9uYWw6IG9wdGlvbmFsID8/IGZhbHNlLCBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5ID8/IG51bGwsIGRhdGE6IGRhdGEgPz8ge319O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBpcyBhIHN0cmluZyBmaWxsIGluIHRoZSBibGFua3MuXG4gICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuT3JQYXJhbXMsIG9wdGlvbmFsOiBmYWxzZSwgZGljdGlvbmFyeTogbnVsbCwgZGF0YToge319O1xuICAgIH07XG5cbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ export class LocalizeTransform {
2
+ getMatches(value, substitutions) {
3
+ // Validate our value exists, else return zero matches.
4
+ if (value === undefined || value === null) {
5
+ return [];
6
+ }
7
+ // Get the matching substitutions.
8
+ const { start, end } = this.getSubstitutions(substitutions);
9
+ // Compose a regex that will find the matches.
10
+ const regex = new RegExp(`${start}([^${end}]+)${end}`, 'g');
11
+ // Execute the regex to find matches.
12
+ let match = regex.exec(value);
13
+ const matches = [];
14
+ while (match !== null) {
15
+ matches.push({ match: match[0], token: match[1] });
16
+ match = regex.exec(value);
17
+ }
18
+ // Return the processed value.
19
+ return matches.filter(item => !!item);
20
+ }
21
+ getSubstitutions(value) {
22
+ // Escape both substitutions so that they can be used.
23
+ const escape = /[.*+?^${}()|[\]\\]/g;
24
+ const start = value[0].replace(escape, '\\$&');
25
+ const end = value[1].replace(escape, '\\$&');
26
+ // Return the substitutions.
27
+ return { start, end };
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QudHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9sb2NhbGl6ZS9zcmMvbGliL3RyYW5zZm9ybXMvYWJzdHJhY3QudHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBZ0IsaUJBQWlCO0lBSXpCLFVBQVUsQ0FBQyxLQUFhLEVBQUUsYUFBK0I7UUFDL0QsdURBQXVEO1FBQ3ZELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3ZDLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUQsOENBQThDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxNQUFNLEdBQUcsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUU1RCxxQ0FBcUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBdUMsRUFBRSxDQUFDO1FBRXZELE9BQU8sS0FBSyxLQUFLLElBQUksRUFBRTtZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUNqRCxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjtRQUVELDhCQUE4QjtRQUM5QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVTLGdCQUFnQixDQUFDLEtBQXVCO1FBQzlDLHNEQUFzRDtRQUN0RCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3Qyw0QkFBNEI7UUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN4QixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2FsaXplUGFyYW1zfSBmcm9tICcuLi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplfSBmcm9tICcuLi9sb2NhbGl6ZS5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExvY2FsaXplVHJhbnNmb3JtIHtcblxuICAgIGFic3RyYWN0IGV4ZWN1dGUodmFsdWU6IHN0cmluZywgZGF0YTogTG9jYWxpemVQYXJhbXNbJ2RhdGEnXSwgbG9jYWxpemU6IExvY2FsaXplKTogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGdldE1hdGNoZXModmFsdWU6IHN0cmluZywgc3Vic3RpdHV0aW9uczogW3N0cmluZywgc3RyaW5nXSkge1xuICAgICAgICAvLyBWYWxpZGF0ZSBvdXIgdmFsdWUgZXhpc3RzLCBlbHNlIHJldHVybiB6ZXJvIG1hdGNoZXMuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG1hdGNoaW5nIHN1YnN0aXR1dGlvbnMuXG4gICAgICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAvLyBDb21wb3NlIGEgcmVnZXggdGhhdCB3aWxsIGZpbmQgdGhlIG1hdGNoZXMuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtzdGFydH0oW14ke2VuZH1dKykke2VuZH1gLCAnZycpO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHJlZ2V4IHRvIGZpbmQgbWF0Y2hlcy5cbiAgICAgICAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IG1hdGNoZXM6IHsgbWF0Y2g6IHN0cmluZywgdG9rZW46IHN0cmluZyB9W10gPSBbXTtcblxuICAgICAgICB3aGlsZSAobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7bWF0Y2g6IG1hdGNoWzBdLCB0b2tlbjogbWF0Y2hbMV19KTtcbiAgICAgICAgICAgIG1hdGNoID0gcmVnZXguZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHByb2Nlc3NlZCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIG1hdGNoZXMuZmlsdGVyKGl0ZW0gPT4gISFpdGVtKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U3Vic3RpdHV0aW9ucyh2YWx1ZTogW3N0cmluZywgc3RyaW5nXSkge1xuICAgICAgICAvLyBFc2NhcGUgYm90aCBzdWJzdGl0dXRpb25zIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZC5cbiAgICAgICAgY29uc3QgZXNjYXBlID0gL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nO1xuICAgICAgICBjb25zdCBzdGFydCA9IHZhbHVlWzBdLnJlcGxhY2UoZXNjYXBlLCAnXFxcXCQmJyk7XG4gICAgICAgIGNvbnN0IGVuZCA9IHZhbHVlWzFdLnJlcGxhY2UoZXNjYXBlLCAnXFxcXCQmJyk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBzdWJzdGl0dXRpb25zLlxuICAgICAgICByZXR1cm4ge3N0YXJ0LCBlbmR9O1xuICAgIH1cblxufVxuIl19
@@ -0,0 +1,54 @@
1
+ import { __decorate, __param } from "tslib";
2
+ import { LOCALIZE_FUNCTION } from '../interfaces/functions.interfaces';
3
+ import { LocalizeTransform } from './abstract.transform';
4
+ import { Inject, Optional } from '@angular/core';
5
+ let LocalizeInterpolateTransform = class LocalizeInterpolateTransform extends LocalizeTransform {
6
+ constructor(config, functions) {
7
+ super();
8
+ this.config = config;
9
+ this.functions = functions;
10
+ this.substitutions = this.config?.substitutions?.references ?? ['{{', '}}'];
11
+ this.functionsMap = (this.functions ?? []).reduce((previous, current) => {
12
+ previous[current?.keyword()] = current;
13
+ return previous;
14
+ }, {});
15
+ }
16
+ execute(value, data, localize) {
17
+ const matches = this.getMatches(value, this.substitutions);
18
+ // Replace all matches with the translated value.
19
+ return matches.reduce((previous, current) => {
20
+ // Try to parse the token.
21
+ const interpolatedToken = this.parseInterpolationToken(current?.token, data, localize);
22
+ // Replace the match with the translated token.
23
+ return previous.replace(current?.match, interpolatedToken);
24
+ }, value);
25
+ }
26
+ parseInterpolationToken(value, data, localize) {
27
+ // Get the token and the methods by splitting
28
+ // on the pipe symbol.
29
+ const [token, ...methods] = (value ?? '').split('|').map(item => item.trim());
30
+ // Get the value for the token from
31
+ // the interpolation data.
32
+ const interpolationValue = data?.[token] ?? 'null';
33
+ // Loop through all the middleware methods and try to
34
+ // conform the string to the given parameters.
35
+ return methods.reduce((string, middlewareName) => {
36
+ // Try to retrieve the middleware from the collection.
37
+ const middleware = this.functionsMap?.[middlewareName];
38
+ // If the middleware is missing return an error
39
+ // so that the user knows it was not found.
40
+ if (!middleware) {
41
+ return string;
42
+ }
43
+ // Execute the middleware function with the string.
44
+ return middleware.transform(string, localize?.current?.locale);
45
+ }, `${interpolationValue}`);
46
+ }
47
+ };
48
+ LocalizeInterpolateTransform = __decorate([
49
+ __param(0, Optional()),
50
+ __param(1, Optional()),
51
+ __param(1, Inject(LOCALIZE_FUNCTION))
52
+ ], LocalizeInterpolateTransform);
53
+ export { LocalizeInterpolateTransform };
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGUudHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9sb2NhbGl6ZS9zcmMvbGliL3RyYW5zZm9ybXMvaW50ZXJwb2xhdGUudHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQXdDLE1BQU0sb0NBQW9DLENBQUM7QUFHNUcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHeEMsSUFBTSw0QkFBNEIsR0FBbEMsTUFBTSw0QkFBNkIsU0FBUSxpQkFBaUI7SUFRL0QsWUFBa0MsTUFBc0IsRUFDSyxTQUE4QjtRQUN2RixLQUFLLEVBQUUsQ0FBQztRQUZzQixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUNLLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBUGxGLGtCQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLGlCQUFZLEdBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDN0YsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUN2QyxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFLUCxDQUFDO0lBRVEsT0FBTyxDQUFDLEtBQWEsRUFBRSxJQUE0QixFQUFFLFFBQWtCO1FBQzVFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUzRCxpREFBaUQ7UUFDakQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLDBCQUEwQjtZQUMxQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUV2RiwrQ0FBK0M7WUFDL0MsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUMvRCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRVMsdUJBQXVCLENBQUMsS0FBYSxFQUFFLElBQTRCLEVBQUUsUUFBa0I7UUFDN0YsNkNBQTZDO1FBQzdDLHNCQUFzQjtRQUN0QixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTlFLG1DQUFtQztRQUNuQywwQkFBMEI7UUFDMUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUM7UUFFbkQscURBQXFEO1FBQ3JELDhDQUE4QztRQUM5QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQUU7WUFDN0Msc0RBQXNEO1lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV2RCwrQ0FBK0M7WUFDL0MsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2IsT0FBTyxNQUFNLENBQUM7YUFDakI7WUFFRCxtREFBbUQ7WUFDbkQsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBRUosQ0FBQTtBQXBEWSw0QkFBNEI7SUFReEIsV0FBQSxRQUFRLEVBQUUsQ0FBQTtJQUNWLFdBQUEsUUFBUSxFQUFFLENBQUE7SUFBRSxXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0dBVHpDLDRCQUE0QixDQW9EeEM7U0FwRFksNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMT0NBTElaRV9GVU5DVElPTiwgTG9jYWxpemVGdW5jdGlvbiwgTG9jYWxpemVGdW5jdGlvbk1hcH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mdW5jdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplUGFyYW1zfSBmcm9tICcuLi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplQ29uZmlnfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2VzJztcbmltcG9ydCB7TG9jYWxpemVUcmFuc2Zvcm19IGZyb20gJy4vYWJzdHJhY3QudHJhbnNmb3JtJztcbmltcG9ydCB7SW5qZWN0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvY2FsaXplfSBmcm9tICcuLi9sb2NhbGl6ZS5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIExvY2FsaXplSW50ZXJwb2xhdGVUcmFuc2Zvcm0gZXh0ZW5kcyBMb2NhbGl6ZVRyYW5zZm9ybSB7XG5cbiAgICByZWFkb25seSBzdWJzdGl0dXRpb25zID0gdGhpcy5jb25maWc/LnN1YnN0aXR1dGlvbnM/LnJlZmVyZW5jZXMgPz8gWyd7eycsICd9fSddO1xuICAgIHJlYWRvbmx5IGZ1bmN0aW9uc01hcDogTG9jYWxpemVGdW5jdGlvbk1hcCA9ICh0aGlzLmZ1bmN0aW9ucyA/PyBbXSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICBwcmV2aW91c1tjdXJyZW50Py5rZXl3b3JkKCldID0gY3VycmVudDtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH0sIHt9KTtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb25maWc6IExvY2FsaXplQ29uZmlnLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTE9DQUxJWkVfRlVOQ1RJT04pIHByb3RlY3RlZCBmdW5jdGlvbnM/OiBMb2NhbGl6ZUZ1bmN0aW9uW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBleGVjdXRlKHZhbHVlOiBzdHJpbmcsIGRhdGE6IExvY2FsaXplUGFyYW1zWydkYXRhJ10sIGxvY2FsaXplOiBMb2NhbGl6ZSkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5nZXRNYXRjaGVzKHZhbHVlLCB0aGlzLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgYWxsIG1hdGNoZXMgd2l0aCB0aGUgdHJhbnNsYXRlZCB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIG1hdGNoZXMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSB0b2tlbi5cbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRlZFRva2VuID0gdGhpcy5wYXJzZUludGVycG9sYXRpb25Ub2tlbihjdXJyZW50Py50b2tlbiwgZGF0YSwgbG9jYWxpemUpO1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBtYXRjaCB3aXRoIHRoZSB0cmFuc2xhdGVkIHRva2VuLlxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzLnJlcGxhY2UoY3VycmVudD8ubWF0Y2gsIGludGVycG9sYXRlZFRva2VuKTtcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwYXJzZUludGVycG9sYXRpb25Ub2tlbih2YWx1ZTogc3RyaW5nLCBkYXRhOiBMb2NhbGl6ZVBhcmFtc1snZGF0YSddLCBsb2NhbGl6ZTogTG9jYWxpemUpIHtcbiAgICAgICAgLy8gR2V0IHRoZSB0b2tlbiBhbmQgdGhlIG1ldGhvZHMgYnkgc3BsaXR0aW5nXG4gICAgICAgIC8vIG9uIHRoZSBwaXBlIHN5bWJvbC5cbiAgICAgICAgY29uc3QgW3Rva2VuLCAuLi5tZXRob2RzXSA9ICh2YWx1ZSA/PyAnJykuc3BsaXQoJ3wnKS5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZSBmb3IgdGhlIHRva2VuIGZyb21cbiAgICAgICAgLy8gdGhlIGludGVycG9sYXRpb24gZGF0YS5cbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvblZhbHVlID0gZGF0YT8uW3Rva2VuXSA/PyAnbnVsbCc7XG5cbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgbWlkZGxld2FyZSBtZXRob2RzIGFuZCB0cnkgdG9cbiAgICAgICAgLy8gY29uZm9ybSB0aGUgc3RyaW5nIHRvIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICByZXR1cm4gbWV0aG9kcy5yZWR1Y2UoKHN0cmluZywgbWlkZGxld2FyZU5hbWUpID0+IHtcbiAgICAgICAgICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgbWlkZGxld2FyZSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9IHRoaXMuZnVuY3Rpb25zTWFwPy5bbWlkZGxld2FyZU5hbWVdO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbWlkZGxld2FyZSBpcyBtaXNzaW5nIHJldHVybiBhbiBlcnJvclxuICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgdXNlciBrbm93cyBpdCB3YXMgbm90IGZvdW5kLlxuICAgICAgICAgICAgaWYgKCFtaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgbWlkZGxld2FyZSBmdW5jdGlvbiB3aXRoIHRoZSBzdHJpbmcuXG4gICAgICAgICAgICByZXR1cm4gbWlkZGxld2FyZS50cmFuc2Zvcm0oc3RyaW5nLCBsb2NhbGl6ZT8uY3VycmVudD8ubG9jYWxlKTtcbiAgICAgICAgfSwgYCR7aW50ZXJwb2xhdGlvblZhbHVlfWApO1xuICAgIH1cblxufVxuIl19
@@ -0,0 +1,25 @@
1
+ import { __decorate, __param } from "tslib";
2
+ import { LocalizeTransform } from './abstract.transform';
3
+ import { Optional } from '@angular/core';
4
+ let LocalizeReferenceTransform = class LocalizeReferenceTransform extends LocalizeTransform {
5
+ constructor(config) {
6
+ super();
7
+ this.config = config;
8
+ this.substitutions = this.config?.substitutions?.references ?? ['#(', ')'];
9
+ }
10
+ execute(value, _, localize) {
11
+ const matches = this.getMatches(value, this.substitutions);
12
+ // Replace all matches with the translated value.
13
+ return matches.reduce((previous, current) => {
14
+ // Try to translate the token.
15
+ const translatedToken = localize.translate(current?.token);
16
+ // Replace the match with the translated token.
17
+ return previous.replace(current?.match, translatedToken);
18
+ }, value);
19
+ }
20
+ };
21
+ LocalizeReferenceTransform = __decorate([
22
+ __param(0, Optional())
23
+ ], LocalizeReferenceTransform);
24
+ export { LocalizeReferenceTransform };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLnRyYW5zZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vbG9jYWxpemUvc3JjL2xpYi90cmFuc2Zvcm1zL3JlZmVyZW5jZS50cmFuc2Zvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFaEMsSUFBTSwwQkFBMEIsR0FBaEMsTUFBTSwwQkFBMkIsU0FBUSxpQkFBaUI7SUFJN0QsWUFBa0MsTUFBc0I7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEc0IsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFGL0Msa0JBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFJL0UsQ0FBQztJQUVRLE9BQU8sQ0FBQyxLQUFhLEVBQUUsQ0FBeUIsRUFBRSxRQUFrQjtRQUN6RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0QsaURBQWlEO1FBQ2pELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUN4Qyw4QkFBOEI7WUFDOUIsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFM0QsK0NBQStDO1lBQy9DLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzdELENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNkLENBQUM7Q0FFSixDQUFBO0FBckJZLDBCQUEwQjtJQUl0QixXQUFBLFFBQVEsRUFBRSxDQUFBO0dBSmQsMEJBQTBCLENBcUJ0QztTQXJCWSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2FsaXplUGFyYW1zfSBmcm9tICcuLi9pbnRlcmZhY2VzL29wdGlvbnMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0xvY2FsaXplQ29uZmlnfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2VzJztcbmltcG9ydCB7TG9jYWxpemVUcmFuc2Zvcm19IGZyb20gJy4vYWJzdHJhY3QudHJhbnNmb3JtJztcbmltcG9ydCB7TG9jYWxpemV9IGZyb20gJy4uL2xvY2FsaXplLnNlcnZpY2UnO1xuaW1wb3J0IHtPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZVJlZmVyZW5jZVRyYW5zZm9ybSBleHRlbmRzIExvY2FsaXplVHJhbnNmb3JtIHtcblxuICAgIHJlYWRvbmx5IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmNvbmZpZz8uc3Vic3RpdHV0aW9ucz8ucmVmZXJlbmNlcyA/PyBbJyMoJywgJyknXTtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb25maWc6IExvY2FsaXplQ29uZmlnKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZXhlY3V0ZSh2YWx1ZTogc3RyaW5nLCBfOiBMb2NhbGl6ZVBhcmFtc1snZGF0YSddLCBsb2NhbGl6ZTogTG9jYWxpemUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuZ2V0TWF0Y2hlcyh2YWx1ZSwgdGhpcy5zdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAvLyBSZXBsYWNlIGFsbCBtYXRjaGVzIHdpdGggdGhlIHRyYW5zbGF0ZWQgdmFsdWUuXG4gICAgICAgIHJldHVybiBtYXRjaGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFRyeSB0byB0cmFuc2xhdGUgdGhlIHRva2VuLlxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZFRva2VuID0gbG9jYWxpemUudHJhbnNsYXRlKGN1cnJlbnQ/LnRva2VuKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgbWF0Y2ggd2l0aCB0aGUgdHJhbnNsYXRlZCB0b2tlbi5cbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cy5yZXBsYWNlKGN1cnJlbnQ/Lm1hdGNoLCB0cmFuc2xhdGVkVG9rZW4pO1xuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgfVxuXG59XG4iXX0=