@fgv/ts-bcp47 0.5.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 (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/bcp47/bcp47Subtags/converters.d.ts +9 -0
  4. package/bcp47/bcp47Subtags/converters.d.ts.map +1 -0
  5. package/bcp47/bcp47Subtags/converters.js +57 -0
  6. package/bcp47/bcp47Subtags/index.d.ts +5 -0
  7. package/bcp47/bcp47Subtags/index.d.ts.map +1 -0
  8. package/bcp47/bcp47Subtags/index.js +54 -0
  9. package/bcp47/bcp47Subtags/model.d.ts +18 -0
  10. package/bcp47/bcp47Subtags/model.d.ts.map +1 -0
  11. package/bcp47/bcp47Subtags/model.js +24 -0
  12. package/bcp47/bcp47Subtags/validate.d.ts +16 -0
  13. package/bcp47/bcp47Subtags/validate.d.ts.map +1 -0
  14. package/bcp47/bcp47Subtags/validate.js +74 -0
  15. package/bcp47/common.d.ts +38 -0
  16. package/bcp47/common.d.ts.map +1 -0
  17. package/bcp47/common.js +59 -0
  18. package/bcp47/helpers.d.ts +66 -0
  19. package/bcp47/helpers.d.ts.map +1 -0
  20. package/bcp47/helpers.js +103 -0
  21. package/bcp47/index.d.ts +7 -0
  22. package/bcp47/index.d.ts.map +1 -0
  23. package/bcp47/index.js +27 -0
  24. package/bcp47/languageTag.d.ts +208 -0
  25. package/bcp47/languageTag.d.ts.map +1 -0
  26. package/bcp47/languageTag.js +342 -0
  27. package/bcp47/languageTagParser.d.ts +123 -0
  28. package/bcp47/languageTagParser.d.ts.map +1 -0
  29. package/bcp47/languageTagParser.js +310 -0
  30. package/bcp47/match/chooser.d.ts +70 -0
  31. package/bcp47/match/chooser.d.ts.map +1 -0
  32. package/bcp47/match/chooser.js +92 -0
  33. package/bcp47/match/common.d.ts +24 -0
  34. package/bcp47/match/common.d.ts.map +1 -0
  35. package/bcp47/match/common.js +42 -0
  36. package/bcp47/match/index.d.ts +4 -0
  37. package/bcp47/match/index.d.ts.map +1 -0
  38. package/bcp47/match/index.js +45 -0
  39. package/bcp47/match/similarity.d.ts +24 -0
  40. package/bcp47/match/similarity.d.ts.map +1 -0
  41. package/bcp47/match/similarity.js +230 -0
  42. package/bcp47/normalization/baseNormalizer.d.ts +36 -0
  43. package/bcp47/normalization/baseNormalizer.d.ts.map +1 -0
  44. package/bcp47/normalization/baseNormalizer.js +114 -0
  45. package/bcp47/normalization/canonicalNormalizer.d.ts +22 -0
  46. package/bcp47/normalization/canonicalNormalizer.d.ts.map +1 -0
  47. package/bcp47/normalization/canonicalNormalizer.js +110 -0
  48. package/bcp47/normalization/common.d.ts +23 -0
  49. package/bcp47/normalization/common.d.ts.map +1 -0
  50. package/bcp47/normalization/common.js +82 -0
  51. package/bcp47/normalization/index.d.ts +5 -0
  52. package/bcp47/normalization/index.d.ts.map +1 -0
  53. package/bcp47/normalization/index.js +47 -0
  54. package/bcp47/normalization/normalizeTag.d.ts +59 -0
  55. package/bcp47/normalization/normalizeTag.d.ts.map +1 -0
  56. package/bcp47/normalization/normalizeTag.js +105 -0
  57. package/bcp47/normalization/preferredTagNormalizer.d.ts +26 -0
  58. package/bcp47/normalization/preferredTagNormalizer.d.ts.map +1 -0
  59. package/bcp47/normalization/preferredTagNormalizer.js +178 -0
  60. package/bcp47/overrides/converters.d.ts +19 -0
  61. package/bcp47/overrides/converters.d.ts.map +1 -0
  62. package/bcp47/overrides/converters.js +75 -0
  63. package/bcp47/overrides/defaultRegistries.d.ts +12 -0
  64. package/bcp47/overrides/defaultRegistries.d.ts.map +1 -0
  65. package/bcp47/overrides/defaultRegistries.js +42 -0
  66. package/bcp47/overrides/index.d.ts +3 -0
  67. package/bcp47/overrides/index.d.ts.map +1 -0
  68. package/bcp47/overrides/index.js +30 -0
  69. package/bcp47/overrides/model.d.ts +11 -0
  70. package/bcp47/overrides/model.d.ts.map +1 -0
  71. package/bcp47/overrides/model.js +24 -0
  72. package/bcp47/overrides/overridesRegistry.d.ts +32 -0
  73. package/bcp47/overrides/overridesRegistry.d.ts.map +1 -0
  74. package/bcp47/overrides/overridesRegistry.js +101 -0
  75. package/bcp47/validation/baseValidator.d.ts +35 -0
  76. package/bcp47/validation/baseValidator.d.ts.map +1 -0
  77. package/bcp47/validation/baseValidator.js +111 -0
  78. package/bcp47/validation/common.d.ts +23 -0
  79. package/bcp47/validation/common.d.ts.map +1 -0
  80. package/bcp47/validation/common.js +84 -0
  81. package/bcp47/validation/index.d.ts +7 -0
  82. package/bcp47/validation/index.d.ts.map +1 -0
  83. package/bcp47/validation/index.js +51 -0
  84. package/bcp47/validation/isCanonical.d.ts +22 -0
  85. package/bcp47/validation/isCanonical.d.ts.map +1 -0
  86. package/bcp47/validation/isCanonical.js +101 -0
  87. package/bcp47/validation/isInPreferredForm.d.ts +15 -0
  88. package/bcp47/validation/isInPreferredForm.d.ts.map +1 -0
  89. package/bcp47/validation/isInPreferredForm.js +73 -0
  90. package/bcp47/validation/isStrictlyValid.d.ts +18 -0
  91. package/bcp47/validation/isStrictlyValid.d.ts.map +1 -0
  92. package/bcp47/validation/isStrictlyValid.js +98 -0
  93. package/bcp47/validation/isValid.d.ts +24 -0
  94. package/bcp47/validation/isValid.d.ts.map +1 -0
  95. package/bcp47/validation/isValid.js +115 -0
  96. package/bcp47/validation/isWellFormed.d.ts +22 -0
  97. package/bcp47/validation/isWellFormed.d.ts.map +1 -0
  98. package/bcp47/validation/isWellFormed.js +98 -0
  99. package/bcp47/validation/validateTag.d.ts +97 -0
  100. package/bcp47/validation/validateTag.d.ts.map +1 -0
  101. package/bcp47/validation/validateTag.js +159 -0
  102. package/data/bcp/overrides.json +21 -0
  103. package/data/iana/language-subtags.json +77295 -0
  104. package/data/iana/language-tag-extensions.json +42 -0
  105. package/data/unsd/m49.csv +250 -0
  106. package/iana/common/converters.d.ts +31 -0
  107. package/iana/common/converters.d.ts.map +1 -0
  108. package/iana/common/converters.js +84 -0
  109. package/iana/common/model.d.ts +30 -0
  110. package/iana/common/model.d.ts.map +1 -0
  111. package/iana/common/model.js +24 -0
  112. package/iana/common/registeredItems.d.ts +30 -0
  113. package/iana/common/registeredItems.d.ts.map +1 -0
  114. package/iana/common/registeredItems.js +124 -0
  115. package/iana/common/utils.d.ts +7 -0
  116. package/iana/common/utils.d.ts.map +1 -0
  117. package/iana/common/utils.js +34 -0
  118. package/iana/common/validate.d.ts +19 -0
  119. package/iana/common/validate.d.ts.map +1 -0
  120. package/iana/common/validate.js +61 -0
  121. package/iana/converters.d.ts +4 -0
  122. package/iana/converters.d.ts.map +1 -0
  123. package/iana/converters.js +54 -0
  124. package/iana/defaultRegistries.d.ts +12 -0
  125. package/iana/defaultRegistries.d.ts.map +1 -0
  126. package/iana/defaultRegistries.js +42 -0
  127. package/iana/index.d.ts +9 -0
  128. package/iana/index.d.ts.map +1 -0
  129. package/iana/index.js +64 -0
  130. package/iana/jar/converters.d.ts +4 -0
  131. package/iana/jar/converters.d.ts.map +1 -0
  132. package/iana/jar/converters.js +54 -0
  133. package/iana/jar/index.d.ts +4 -0
  134. package/iana/jar/index.d.ts.map +1 -0
  135. package/iana/jar/index.js +52 -0
  136. package/iana/jar/jarConverters.d.ts +17 -0
  137. package/iana/jar/jarConverters.d.ts.map +1 -0
  138. package/iana/jar/jarConverters.js +85 -0
  139. package/iana/jar/jarModel.d.ts +11 -0
  140. package/iana/jar/jarModel.d.ts.map +1 -0
  141. package/iana/jar/jarModel.js +24 -0
  142. package/iana/jar/language-subtags/converters.d.ts +4 -0
  143. package/iana/jar/language-subtags/converters.d.ts.map +1 -0
  144. package/iana/jar/language-subtags/converters.js +52 -0
  145. package/iana/jar/language-subtags/index.d.ts +4 -0
  146. package/iana/jar/language-subtags/index.d.ts.map +1 -0
  147. package/iana/jar/language-subtags/index.js +54 -0
  148. package/iana/jar/language-subtags/model.d.ts +4 -0
  149. package/iana/jar/language-subtags/model.d.ts.map +1 -0
  150. package/iana/jar/language-subtags/model.js +52 -0
  151. package/iana/jar/language-subtags/registry/converters.d.ts +10 -0
  152. package/iana/jar/language-subtags/registry/converters.d.ts.map +1 -0
  153. package/iana/jar/language-subtags/registry/converters.js +58 -0
  154. package/iana/jar/language-subtags/registry/index.d.ts +4 -0
  155. package/iana/jar/language-subtags/registry/index.d.ts.map +1 -0
  156. package/iana/jar/language-subtags/registry/index.js +55 -0
  157. package/iana/jar/language-subtags/registry/model.d.ts +88 -0
  158. package/iana/jar/language-subtags/registry/model.d.ts.map +1 -0
  159. package/iana/jar/language-subtags/registry/model.js +41 -0
  160. package/iana/jar/language-subtags/tags/converters.d.ts +55 -0
  161. package/iana/jar/language-subtags/tags/converters.d.ts.map +1 -0
  162. package/iana/jar/language-subtags/tags/converters.js +128 -0
  163. package/iana/jar/language-subtags/tags/index.d.ts +5 -0
  164. package/iana/jar/language-subtags/tags/index.d.ts.map +1 -0
  165. package/iana/jar/language-subtags/tags/index.js +56 -0
  166. package/iana/jar/language-subtags/tags/model.d.ts +42 -0
  167. package/iana/jar/language-subtags/tags/model.d.ts.map +1 -0
  168. package/iana/jar/language-subtags/tags/model.js +24 -0
  169. package/iana/jar/language-subtags/tags/tagValidation.d.ts +11 -0
  170. package/iana/jar/language-subtags/tags/tagValidation.d.ts.map +1 -0
  171. package/iana/jar/language-subtags/tags/tagValidation.js +70 -0
  172. package/iana/jar/language-subtags/tags/validate.d.ts +36 -0
  173. package/iana/jar/language-subtags/tags/validate.d.ts.map +1 -0
  174. package/iana/jar/language-subtags/tags/validate.js +87 -0
  175. package/iana/jar/model.d.ts +4 -0
  176. package/iana/jar/model.d.ts.map +1 -0
  177. package/iana/jar/model.js +54 -0
  178. package/iana/language-subtags/common.d.ts +5 -0
  179. package/iana/language-subtags/common.d.ts.map +1 -0
  180. package/iana/language-subtags/common.js +24 -0
  181. package/iana/language-subtags/converters.d.ts +52 -0
  182. package/iana/language-subtags/converters.d.ts.map +1 -0
  183. package/iana/language-subtags/converters.js +200 -0
  184. package/iana/language-subtags/index.d.ts +7 -0
  185. package/iana/language-subtags/index.d.ts.map +1 -0
  186. package/iana/language-subtags/index.js +60 -0
  187. package/iana/language-subtags/jarConverters.d.ts +55 -0
  188. package/iana/language-subtags/jarConverters.d.ts.map +1 -0
  189. package/iana/language-subtags/jarConverters.js +213 -0
  190. package/iana/language-subtags/model.d.ts +144 -0
  191. package/iana/language-subtags/model.d.ts.map +1 -0
  192. package/iana/language-subtags/model.js +24 -0
  193. package/iana/language-subtags/scope.d.ts +77 -0
  194. package/iana/language-subtags/scope.d.ts.map +1 -0
  195. package/iana/language-subtags/scope.js +179 -0
  196. package/iana/language-subtags/subtagRegistry.d.ts +36 -0
  197. package/iana/language-subtags/subtagRegistry.d.ts.map +1 -0
  198. package/iana/language-subtags/subtagRegistry.js +139 -0
  199. package/iana/language-subtags/validate.d.ts +2 -0
  200. package/iana/language-subtags/validate.d.ts.map +1 -0
  201. package/iana/language-subtags/validate.js +39 -0
  202. package/iana/language-tag-extensions/converters.d.ts +23 -0
  203. package/iana/language-tag-extensions/converters.d.ts.map +1 -0
  204. package/iana/language-tag-extensions/converters.js +87 -0
  205. package/iana/language-tag-extensions/extensionsRegistry.d.ts +26 -0
  206. package/iana/language-tag-extensions/extensionsRegistry.d.ts.map +1 -0
  207. package/iana/language-tag-extensions/extensionsRegistry.js +94 -0
  208. package/iana/language-tag-extensions/extensionsScope.d.ts +20 -0
  209. package/iana/language-tag-extensions/extensionsScope.d.ts.map +1 -0
  210. package/iana/language-tag-extensions/extensionsScope.js +77 -0
  211. package/iana/language-tag-extensions/index.d.ts +6 -0
  212. package/iana/language-tag-extensions/index.d.ts.map +1 -0
  213. package/iana/language-tag-extensions/index.js +56 -0
  214. package/iana/language-tag-extensions/jarConverters.d.ts +28 -0
  215. package/iana/language-tag-extensions/jarConverters.d.ts.map +1 -0
  216. package/iana/language-tag-extensions/jarConverters.js +102 -0
  217. package/iana/language-tag-extensions/model.d.ts +40 -0
  218. package/iana/language-tag-extensions/model.d.ts.map +1 -0
  219. package/iana/language-tag-extensions/model.js +24 -0
  220. package/iana/language-tag-extensions/validate.d.ts +7 -0
  221. package/iana/language-tag-extensions/validate.d.ts.map +1 -0
  222. package/iana/language-tag-extensions/validate.js +36 -0
  223. package/iana/languageRegistries.d.ts +13 -0
  224. package/iana/languageRegistries.d.ts.map +1 -0
  225. package/iana/languageRegistries.js +49 -0
  226. package/iana/model.d.ts +4 -0
  227. package/iana/model.d.ts.map +1 -0
  228. package/iana/model.js +54 -0
  229. package/iana/validate.d.ts +2 -0
  230. package/iana/validate.d.ts.map +1 -0
  231. package/iana/validate.js +39 -0
  232. package/index.d.ts +5 -0
  233. package/index.d.ts.map +1 -0
  234. package/index.js +54 -0
  235. package/package.json +64 -0
  236. package/unsd/areas.d.ts +29 -0
  237. package/unsd/areas.d.ts.map +1 -0
  238. package/unsd/areas.js +96 -0
  239. package/unsd/common.d.ts +49 -0
  240. package/unsd/common.d.ts.map +1 -0
  241. package/unsd/common.js +24 -0
  242. package/unsd/csv/converters.d.ts +21 -0
  243. package/unsd/csv/converters.d.ts.map +1 -0
  244. package/unsd/csv/converters.js +70 -0
  245. package/unsd/csv/index.d.ts +4 -0
  246. package/unsd/csv/index.d.ts.map +1 -0
  247. package/unsd/csv/index.js +52 -0
  248. package/unsd/csv/model.d.ts +22 -0
  249. package/unsd/csv/model.d.ts.map +1 -0
  250. package/unsd/csv/model.js +24 -0
  251. package/unsd/defaultRegistries.d.ts +12 -0
  252. package/unsd/defaultRegistries.d.ts.map +1 -0
  253. package/unsd/defaultRegistries.js +42 -0
  254. package/unsd/index.d.ts +4 -0
  255. package/unsd/index.d.ts.map +1 -0
  256. package/unsd/index.js +44 -0
  257. package/unsd/regionCodes.d.ts +38 -0
  258. package/unsd/regionCodes.d.ts.map +1 -0
  259. package/unsd/regionCodes.js +111 -0
  260. package/unsd/regions.d.ts +21 -0
  261. package/unsd/regions.d.ts.map +1 -0
  262. package/unsd/regions.js +77 -0
  263. package/utils/index.d.ts +3 -0
  264. package/utils/index.d.ts.map +1 -0
  265. package/utils/index.js +40 -0
  266. package/utils/jsonHelpers.d.ts +2 -0
  267. package/utils/jsonHelpers.d.ts.map +1 -0
  268. package/utils/jsonHelpers.js +29 -0
  269. package/utils/validationHelpers.d.ts +47 -0
  270. package/utils/validationHelpers.d.ts.map +1 -0
  271. package/utils/validationHelpers.js +88 -0
package/utils/index.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2021 Erik Fortune
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in all
13
+ * copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ var desc = Object.getOwnPropertyDescriptor(m, k);
26
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
+ desc = { enumerable: true, get: function() { return m[k]; } };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ }) : (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ }));
34
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
35
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ __exportStar(require("./jsonHelpers"), exports);
39
+ __exportStar(require("./validationHelpers"), exports);
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILGdEQUE4QjtBQUM5QixzREFBb0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9qc29uSGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRpb25IZWxwZXJzJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare function sanitizeJson<T>(from: T): T;
2
+ //# sourceMappingURL=jsonHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/jsonHelpers.ts"],"names":[],"mappings":"AAsBA,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAE1C"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2021 Erik Fortune
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in all
13
+ * copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.sanitizeJson = void 0;
25
+ function sanitizeJson(from) {
26
+ return JSON.parse(JSON.stringify(from));
27
+ }
28
+ exports.sanitizeJson = sanitizeJson;
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvanNvbkhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgsU0FBZ0IsWUFBWSxDQUFJLElBQU87SUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQU0sQ0FBQztBQUNqRCxDQUFDO0FBRkQsb0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSnNvbjxUPihmcm9tOiBUKTogVCB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZnJvbSkpIGFzIFQ7XG59XG4iXX0=
@@ -0,0 +1,47 @@
1
+ import { Converter, Result, Validation } from '@fgv/ts-utils';
2
+ import { TypeGuardWithContext } from '@fgv/ts-utils/validation';
3
+ /**
4
+ * @internal
5
+ */
6
+ export type Normalizer<T extends string, TC = unknown> = (val: T, context?: TC) => Result<T>;
7
+ /**
8
+ * @internal
9
+ */
10
+ export interface ValidationHelpersConstructorParams<T extends string, TC = unknown> {
11
+ description: string;
12
+ isWellFormed: Validation.TypeGuardWithContext<T, TC>;
13
+ isCanonical: Validation.TypeGuardWithContext<T, TC>;
14
+ toCanonical?: Normalizer<T, TC>;
15
+ }
16
+ /**
17
+ * @internal
18
+ */
19
+ export declare class ValidationHelpers<T extends string, TC = unknown> {
20
+ readonly description: string;
21
+ readonly converter: Converter<T, TC>;
22
+ readonly isWellFormed: TypeGuardWithContext<T, TC>;
23
+ readonly isCanonical: TypeGuardWithContext<T, TC>;
24
+ protected readonly _toCanonical?: Normalizer<T, TC>;
25
+ constructor(init: ValidationHelpersConstructorParams<T, TC>);
26
+ toCanonical(from: unknown, context?: TC): Result<T>;
27
+ verifyIsWellFormed(from: unknown, context?: TC): Result<T>;
28
+ verifyIsCanonical(from: unknown, context?: TC): Result<T>;
29
+ }
30
+ /**
31
+ * @internal
32
+ */
33
+ export interface RegExpValidationHelperConstructorParams<T extends string, TC = unknown> {
34
+ description: string;
35
+ wellFormed: RegExp;
36
+ canonical: RegExp;
37
+ toCanonical?: Normalizer<T, TC>;
38
+ }
39
+ /**
40
+ * @internal
41
+ */
42
+ export declare class RegExpValidationHelpers<T extends string, TC = unknown> extends ValidationHelpers<T, TC> {
43
+ readonly wellFormed: RegExp;
44
+ readonly canonical: RegExp;
45
+ constructor(params: RegExpValidationHelperConstructorParams<T, TC>);
46
+ }
47
+ //# sourceMappingURL=validationHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/validationHelpers.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,SAAS,EAAc,MAAM,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,kCAAkC,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,GAAG,OAAO;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,GAAG,OAAO;IACzD,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,SAAgB,YAAY,EAAE,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,SAAgB,WAAW,EAAE,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEjC,IAAI,EAAE,kCAAkC,CAAC,CAAC,EAAE,EAAE,CAAC;IAQ3D,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAcnD,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAO1D,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;CAUnE;AAED;;GAEG;AACH,MAAM,WAAW,uCAAuC,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,GAAG,OAAO;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,GAAG,OAAO,CAAE,SAAQ,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC;IACjG,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEf,MAAM,EAAE,uCAAuC,CAAC,CAAC,EAAE,EAAE,CAAC;CAc5E"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2021 Erik Fortune
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in all
13
+ * copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.RegExpValidationHelpers = exports.ValidationHelpers = void 0;
25
+ const ts_utils_1 = require("@fgv/ts-utils");
26
+ /**
27
+ * @internal
28
+ */
29
+ class ValidationHelpers {
30
+ constructor(init) {
31
+ this.description = init.description;
32
+ this.isWellFormed = init.isWellFormed;
33
+ this.isCanonical = init.isCanonical;
34
+ this._toCanonical = init.toCanonical;
35
+ this.converter = ts_utils_1.Converters.isA(this.description, this.isWellFormed);
36
+ }
37
+ toCanonical(from, context) {
38
+ if (this.isWellFormed(from, context)) {
39
+ if (this._toCanonical) {
40
+ return this._toCanonical(from, context);
41
+ }
42
+ if (this.isCanonical(from, context)) {
43
+ return (0, ts_utils_1.succeed)(from);
44
+ }
45
+ // istanbul ignore next
46
+ return (0, ts_utils_1.fail)(`cannot convert "${from}" to canonical ${this.description}`);
47
+ }
48
+ return (0, ts_utils_1.fail)(`invalid ${this.description} ("${JSON.stringify(from)}")`);
49
+ }
50
+ verifyIsWellFormed(from, context) {
51
+ if (this.isWellFormed(from, context)) {
52
+ return (0, ts_utils_1.succeed)(from);
53
+ }
54
+ return (0, ts_utils_1.fail)(`malformed ${this.description}`);
55
+ }
56
+ verifyIsCanonical(from, context) {
57
+ if (this.isCanonical(from, context)) {
58
+ return (0, ts_utils_1.succeed)(from);
59
+ }
60
+ // istanbul ignore next - should never occur and very hard to test
61
+ if (!this.isWellFormed(from, context)) {
62
+ return (0, ts_utils_1.fail)(`malformed ${this.description}`);
63
+ }
64
+ return (0, ts_utils_1.fail)(`non-canonical ${this.description}`);
65
+ }
66
+ }
67
+ exports.ValidationHelpers = ValidationHelpers;
68
+ /**
69
+ * @internal
70
+ */
71
+ class RegExpValidationHelpers extends ValidationHelpers {
72
+ constructor(params) {
73
+ super({
74
+ description: params.description,
75
+ toCanonical: params.toCanonical,
76
+ isWellFormed: (from) => {
77
+ return typeof from === 'string' && this.wellFormed.test(from);
78
+ },
79
+ isCanonical: (from) => {
80
+ return typeof from === 'string' && this.canonical.test(from);
81
+ },
82
+ });
83
+ this.wellFormed = params.wellFormed;
84
+ this.canonical = params.canonical;
85
+ }
86
+ }
87
+ exports.RegExpValidationHelpers = RegExpValidationHelpers;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbkhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdmFsaWRhdGlvbkhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgsNENBQXlGO0FBa0J6Rjs7R0FFRztBQUNILE1BQWEsaUJBQWlCO0lBUTFCLFlBQW1CLElBQStDO1FBQzlELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSxXQUFXLENBQUMsSUFBYSxFQUFFLE9BQVk7UUFDMUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDM0M7WUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLElBQUEsa0JBQU8sRUFBQyxJQUFJLENBQUMsQ0FBQzthQUN4QjtZQUNELHVCQUF1QjtZQUN2QixPQUFPLElBQUEsZUFBSSxFQUFDLG1CQUFtQixJQUFJLGtCQUFrQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUM1RTtRQUNELE9BQU8sSUFBQSxlQUFJLEVBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxJQUFhLEVBQUUsT0FBWTtRQUNqRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sSUFBQSxrQkFBTyxFQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxJQUFBLGVBQUksRUFBQyxhQUFhLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFhLEVBQUUsT0FBWTtRQUNoRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sSUFBQSxrQkFBTyxFQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO1FBQ0Qsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUEsZUFBSSxFQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDaEQ7UUFDRCxPQUFPLElBQUEsZUFBSSxFQUFDLGlCQUFpQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0o7QUEvQ0QsOENBK0NDO0FBWUQ7O0dBRUc7QUFDSCxNQUFhLHVCQUF3RCxTQUFRLGlCQUF3QjtJQUlqRyxZQUFtQixNQUFzRDtRQUNyRSxLQUFLLENBQUM7WUFDRixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFlBQVksRUFBRSxDQUFDLElBQWEsRUFBYSxFQUFFO2dCQUN2QyxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBYSxFQUFhLEVBQUU7Z0JBQ3RDLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pFLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7Q0FDSjtBQWxCRCwwREFrQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ29udmVydGVyLCBDb252ZXJ0ZXJzLCBSZXN1bHQsIFZhbGlkYXRpb24sIGZhaWwsIHN1Y2NlZWQgfSBmcm9tICdAZmd2L3RzLXV0aWxzJztcbmltcG9ydCB7IFR5cGVHdWFyZFdpdGhDb250ZXh0IH0gZnJvbSAnQGZndi90cy11dGlscy92YWxpZGF0aW9uJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IHR5cGUgTm9ybWFsaXplcjxUIGV4dGVuZHMgc3RyaW5nLCBUQyA9IHVua25vd24+ID0gKHZhbDogVCwgY29udGV4dD86IFRDKSA9PiBSZXN1bHQ8VD47XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkhlbHBlcnNDb25zdHJ1Y3RvclBhcmFtczxUIGV4dGVuZHMgc3RyaW5nLCBUQyA9IHVua25vd24+IHtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGlzV2VsbEZvcm1lZDogVmFsaWRhdGlvbi5UeXBlR3VhcmRXaXRoQ29udGV4dDxULCBUQz47XG4gICAgaXNDYW5vbmljYWw6IFZhbGlkYXRpb24uVHlwZUd1YXJkV2l0aENvbnRleHQ8VCwgVEM+O1xuICAgIHRvQ2Fub25pY2FsPzogTm9ybWFsaXplcjxULCBUQz47XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uSGVscGVyczxUIGV4dGVuZHMgc3RyaW5nLCBUQyA9IHVua25vd24+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udmVydGVyOiBDb252ZXJ0ZXI8VCwgVEM+O1xuICAgIHB1YmxpYyByZWFkb25seSBpc1dlbGxGb3JtZWQ6IFR5cGVHdWFyZFdpdGhDb250ZXh0PFQsIFRDPjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNDYW5vbmljYWw6IFR5cGVHdWFyZFdpdGhDb250ZXh0PFQsIFRDPjtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBfdG9DYW5vbmljYWw/OiBOb3JtYWxpemVyPFQsIFRDPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0OiBWYWxpZGF0aW9uSGVscGVyc0NvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPikge1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gaW5pdC5kZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5pc1dlbGxGb3JtZWQgPSBpbml0LmlzV2VsbEZvcm1lZDtcbiAgICAgICAgdGhpcy5pc0Nhbm9uaWNhbCA9IGluaXQuaXNDYW5vbmljYWw7XG4gICAgICAgIHRoaXMuX3RvQ2Fub25pY2FsID0gaW5pdC50b0Nhbm9uaWNhbDtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZXIgPSBDb252ZXJ0ZXJzLmlzQSh0aGlzLmRlc2NyaXB0aW9uLCB0aGlzLmlzV2VsbEZvcm1lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvQ2Fub25pY2FsKGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQyk6IFJlc3VsdDxUPiB7XG4gICAgICAgIGlmICh0aGlzLmlzV2VsbEZvcm1lZChmcm9tLCBjb250ZXh0KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3RvQ2Fub25pY2FsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvQ2Fub25pY2FsKGZyb20sIGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDYW5vbmljYWwoZnJvbSwgY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VlZChmcm9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgICByZXR1cm4gZmFpbChgY2Fubm90IGNvbnZlcnQgXCIke2Zyb219XCIgdG8gY2Fub25pY2FsICR7dGhpcy5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbChgaW52YWxpZCAke3RoaXMuZGVzY3JpcHRpb259IChcIiR7SlNPTi5zdHJpbmdpZnkoZnJvbSl9XCIpYCk7XG4gICAgfVxuXG4gICAgcHVibGljIHZlcmlmeUlzV2VsbEZvcm1lZChmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpOiBSZXN1bHQ8VD4ge1xuICAgICAgICBpZiAodGhpcy5pc1dlbGxGb3JtZWQoZnJvbSwgY29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdWNjZWVkKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsKGBtYWxmb3JtZWQgJHt0aGlzLmRlc2NyaXB0aW9ufWApO1xuICAgIH1cblxuICAgIHB1YmxpYyB2ZXJpZnlJc0Nhbm9uaWNhbChmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpOiBSZXN1bHQ8VD4ge1xuICAgICAgICBpZiAodGhpcy5pc0Nhbm9uaWNhbChmcm9tLCBjb250ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQgLSBzaG91bGQgbmV2ZXIgb2NjdXIgYW5kIHZlcnkgaGFyZCB0byB0ZXN0XG4gICAgICAgIGlmICghdGhpcy5pc1dlbGxGb3JtZWQoZnJvbSwgY29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWlsKGBtYWxmb3JtZWQgJHt0aGlzLmRlc2NyaXB0aW9ufWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWlsKGBub24tY2Fub25pY2FsICR7dGhpcy5kZXNjcmlwdGlvbn1gKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnRXhwVmFsaWRhdGlvbkhlbHBlckNvbnN0cnVjdG9yUGFyYW1zPFQgZXh0ZW5kcyBzdHJpbmcsIFRDID0gdW5rbm93bj4ge1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgd2VsbEZvcm1lZDogUmVnRXhwO1xuICAgIGNhbm9uaWNhbDogUmVnRXhwO1xuICAgIHRvQ2Fub25pY2FsPzogTm9ybWFsaXplcjxULCBUQz47XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWdFeHBWYWxpZGF0aW9uSGVscGVyczxUIGV4dGVuZHMgc3RyaW5nLCBUQyA9IHVua25vd24+IGV4dGVuZHMgVmFsaWRhdGlvbkhlbHBlcnM8VCwgVEM+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2VsbEZvcm1lZDogUmVnRXhwO1xuICAgIHB1YmxpYyByZWFkb25seSBjYW5vbmljYWw6IFJlZ0V4cDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFJlZ0V4cFZhbGlkYXRpb25IZWxwZXJDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4pIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHBhcmFtcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHRvQ2Fub25pY2FsOiBwYXJhbXMudG9DYW5vbmljYWwsXG4gICAgICAgICAgICBpc1dlbGxGb3JtZWQ6IChmcm9tOiB1bmtub3duKTogZnJvbSBpcyBUID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGZyb20gPT09ICdzdHJpbmcnICYmIHRoaXMud2VsbEZvcm1lZC50ZXN0KGZyb20pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQ2Fub25pY2FsOiAoZnJvbTogdW5rbm93bik6IGZyb20gaXMgVCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJyAmJiB0aGlzLmNhbm9uaWNhbC50ZXN0KGZyb20pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2VsbEZvcm1lZCA9IHBhcmFtcy53ZWxsRm9ybWVkO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IHBhcmFtcy5jYW5vbmljYWw7XG4gICAgfVxufVxuIl19